diff --git a/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx b/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx
index 28a0c0017..239d51332 100644
--- a/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx
+++ b/src/app/(main)/websites/[websiteId]/WebsiteExpandedView.tsx
@@ -2,6 +2,27 @@ import { Grid, Column } from '@umami/react-zen';
import { useMessages, useNavigation } from '@/components/hooks';
import { MetricsExpandedTable } from '@/components/metrics/MetricsExpandedTable';
import { SideMenu } from '@/components/common/SideMenu';
+import {
+ LogOut,
+ LogIn,
+ Search,
+ Type,
+ SquareSlash,
+ SquareArrowRight,
+ Megaphone,
+ Earth,
+ Globe,
+ Landmark,
+ MapPin,
+ AppWindow,
+ Laptop,
+ Languages,
+ Monitor,
+ Cpu,
+ LightningSvg,
+ LucideCaseSensitive,
+ Tag,
+} from '@/components/icons';
export function WebsiteExpandedView({
websiteId,
@@ -24,26 +45,31 @@ export function WebsiteExpandedView({
id: 'path',
label: formatMessage(labels.path),
path: updateParams({ view: 'path' }),
+ icon:
,
},
{
id: 'entry',
label: formatMessage(labels.entry),
path: updateParams({ view: 'entry' }),
+ icon:
,
},
{
id: 'exit',
label: formatMessage(labels.exit),
path: updateParams({ view: 'exit' }),
+ icon:
,
},
{
id: 'title',
label: formatMessage(labels.title),
path: updateParams({ view: 'title' }),
+ icon:
,
},
{
id: 'query',
label: formatMessage(labels.query),
path: updateParams({ view: 'query' }),
+ icon:
,
},
],
},
@@ -54,16 +80,19 @@ export function WebsiteExpandedView({
id: 'referrer',
label: formatMessage(labels.referrer),
path: updateParams({ view: 'referrer' }),
+ icon:
,
},
{
id: 'channel',
label: formatMessage(labels.channel),
path: updateParams({ view: 'channel' }),
+ icon:
,
},
{
id: 'domain',
label: formatMessage(labels.domain),
path: updateParams({ view: 'domain' }),
+ icon:
,
},
],
},
@@ -74,16 +103,19 @@ export function WebsiteExpandedView({
id: 'country',
label: formatMessage(labels.country),
path: updateParams({ view: 'country' }),
+ icon:
,
},
{
id: 'region',
label: formatMessage(labels.region),
path: updateParams({ view: 'region' }),
+ icon:
,
},
{
id: 'city',
label: formatMessage(labels.city),
path: updateParams({ view: 'city' }),
+ icon:
,
},
],
},
@@ -94,26 +126,31 @@ export function WebsiteExpandedView({
id: 'browser',
label: formatMessage(labels.browser),
path: updateParams({ view: 'browser' }),
+ icon:
,
},
{
id: 'os',
label: formatMessage(labels.os),
path: updateParams({ view: 'os' }),
+ icon:
,
},
{
id: 'device',
label: formatMessage(labels.device),
path: updateParams({ view: 'device' }),
+ icon:
,
},
{
id: 'language',
label: formatMessage(labels.language),
path: updateParams({ view: 'language' }),
+ icon:
,
},
{
id: 'screen',
label: formatMessage(labels.screen),
path: updateParams({ view: 'screen' }),
+ icon:
,
},
],
},
@@ -124,16 +161,19 @@ export function WebsiteExpandedView({
id: 'event',
label: formatMessage(labels.event),
path: updateParams({ view: 'event' }),
+ icon:
,
},
{
id: 'hostname',
label: formatMessage(labels.hostname),
path: updateParams({ view: 'hostname' }),
+ icon:
,
},
{
id: 'tag',
label: formatMessage(labels.tag),
path: updateParams({ view: 'tag' }),
+ icon:
,
},
],
},
@@ -142,7 +182,7 @@ export function WebsiteExpandedView({
return (
-
+
,
+ icon: ,
path: renderPath('/events'),
},
{
@@ -62,7 +62,7 @@ export function WebsiteNav({ websiteId }: { websiteId: string }) {
{
id: 'compare',
label: formatMessage(labels.compare),
- icon: ,
+ icon: ,
path: renderPath('/compare'),
},
{
@@ -79,25 +79,25 @@ export function WebsiteNav({ websiteId }: { websiteId: string }) {
{
id: 'goals',
label: formatMessage(labels.goals),
- icon: ,
+ icon: ,
path: renderPath('/goals'),
},
{
id: 'funnel',
label: formatMessage(labels.funnels),
- icon: ,
+ icon: ,
path: renderPath('/funnels'),
},
{
id: 'journeys',
label: formatMessage(labels.journeys),
- icon: ,
+ icon: ,
path: renderPath('/journeys'),
},
{
id: 'retention',
label: formatMessage(labels.retention),
- icon: ,
+ icon: ,
path: renderPath('/retention'),
},
],
@@ -131,7 +131,7 @@ export function WebsiteNav({ websiteId }: { websiteId: string }) {
{
id: 'revenue',
label: formatMessage(labels.revenue),
- icon: ,
+ icon: ,
path: renderPath('/revenue'),
},
{
diff --git a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionInfo.tsx b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionInfo.tsx
index 629e1da66..2ec515f90 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionInfo.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/[sessionId]/SessionInfo.tsx
@@ -2,7 +2,7 @@ import { ReactNode } from 'react';
import { Icon, TextField, Column, Row, Label, Text } from '@umami/react-zen';
import { useFormat, useLocale, useMessages, useRegionNames } from '@/components/hooks';
import { TypeIcon } from '@/components/common/TypeIcon';
-import { Location, KeyRound, Calendar } from '@/components/icons';
+import { LocationSvg, KeyRound, Calendar } from '@/components/icons';
import { DateDistance } from '@/components/common/DateDistance';
export function SessionInfo({ data }) {
@@ -36,11 +36,11 @@ export function SessionInfo({ data }) {
{formatValue(data?.country, 'country')}
- }>
+ }>
{getRegionName(data?.region)}
- }>
+ }>
{data?.city}
diff --git a/src/app/api/batch/route.ts b/src/app/api/batch/route.ts
index 87e04110d..6feab06b6 100644
--- a/src/app/api/batch/route.ts
+++ b/src/app/api/batch/route.ts
@@ -2,8 +2,9 @@ import { z } from 'zod';
import * as send from '@/app/api/send/route';
import { parseRequest } from '@/lib/request';
import { json, serverError } from '@/lib/response';
+import { anyObjectParam } from '@/lib/schema';
-const schema = z.array(z.object({}).passthrough());
+const schema = z.array(anyObjectParam);
export async function POST(request: Request) {
try {
diff --git a/src/app/api/websites/[websiteId]/segments/[segmentId]/route.ts b/src/app/api/websites/[websiteId]/segments/[segmentId]/route.ts
index 4418cfe57..b784fa5ae 100644
--- a/src/app/api/websites/[websiteId]/segments/[segmentId]/route.ts
+++ b/src/app/api/websites/[websiteId]/segments/[segmentId]/route.ts
@@ -1,7 +1,7 @@
import { canDeleteWebsite, canUpdateWebsite, canViewWebsite } from '@/permissions';
import { parseRequest } from '@/lib/request';
import { json, notFound, ok, unauthorized } from '@/lib/response';
-import { segmentTypeParam } from '@/lib/schema';
+import { anyObjectParam, segmentTypeParam } from '@/lib/schema';
import { deleteSegment, getSegment, updateSegment } from '@/queries';
import { z } from 'zod';
@@ -33,7 +33,7 @@ export async function POST(
const schema = z.object({
type: segmentTypeParam,
name: z.string().max(200),
- parameters: z.object({}).passthrough(),
+ parameters: anyObjectParam,
});
const { auth, body, error } = await parseRequest(request, schema);
diff --git a/src/app/api/websites/[websiteId]/segments/route.ts b/src/app/api/websites/[websiteId]/segments/route.ts
index fcc2e0a3c..e842dcc79 100644
--- a/src/app/api/websites/[websiteId]/segments/route.ts
+++ b/src/app/api/websites/[websiteId]/segments/route.ts
@@ -2,7 +2,7 @@ import { canUpdateWebsite, canViewWebsite } from '@/permissions';
import { uuid } from '@/lib/crypto';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { json, unauthorized } from '@/lib/response';
-import { segmentTypeParam, searchParams } from '@/lib/schema';
+import { segmentTypeParam, searchParams, anyObjectParam } from '@/lib/schema';
import { createSegment, getWebsiteSegments } from '@/queries';
import { z } from 'zod';
@@ -42,7 +42,7 @@ export async function POST(
const schema = z.object({
type: segmentTypeParam,
name: z.string().max(200),
- parameters: z.object({}).passthrough(),
+ parameters: anyObjectParam,
});
const { auth, body, error } = await parseRequest(request, schema);
diff --git a/src/app/login/LoginForm.tsx b/src/app/login/LoginForm.tsx
index c0cff75a9..3dcbadef7 100644
--- a/src/app/login/LoginForm.tsx
+++ b/src/app/login/LoginForm.tsx
@@ -13,7 +13,7 @@ import { useRouter } from 'next/navigation';
import { useMessages, useUpdateQuery } from '@/components/hooks';
import { setUser } from '@/store/app';
import { setClientAuthToken } from '@/lib/client';
-import { Logo } from '@/components/icons';
+import { LogoSvg } from '@/components/icons';
export function LoginForm() {
const { formatMessage, labels, getErrorMessage } = useMessages();
@@ -34,7 +34,7 @@ export function LoginForm() {
return (
-
+
umami