From c65e42b373e1afe2667428716ee9c30188ba2b1b Mon Sep 17 00:00:00 2001
From: Blake Niemyjski
Date: Fri, 30 Jan 2026 07:59:20 -0600
Subject: [PATCH 01/17] Next: Sessions Dashboard
---
.../events/components/events-overview.svelte | 21 +-
.../components/views/session-events.svelte | 139 ++++++
.../lib/features/organizations/api.svelte.ts | 5 +
.../src/lib/features/sessions/api.svelte.ts | 121 ++++++
.../sessions-dashboard-chart.svelte | 91 ++++
.../sessions-stats-dashboard.svelte | 87 ++++
.../(app)/(components)/layouts/sidebar.svelte | 22 +
.../ClientApp/src/routes/(app)/+layout.svelte | 7 +-
.../src/routes/(app)/routes.svelte.ts | 7 +
.../src/routes/(app)/sessions/+page.svelte | 394 ++++++++++++++++++
10 files changed, 892 insertions(+), 2 deletions(-)
create mode 100644 src/Exceptionless.Web/ClientApp/src/lib/features/events/components/views/session-events.svelte
create mode 100644 src/Exceptionless.Web/ClientApp/src/lib/features/sessions/api.svelte.ts
create mode 100644 src/Exceptionless.Web/ClientApp/src/lib/features/sessions/components/sessions-dashboard-chart.svelte
create mode 100644 src/Exceptionless.Web/ClientApp/src/lib/features/sessions/components/sessions-stats-dashboard.svelte
create mode 100644 src/Exceptionless.Web/ClientApp/src/routes/(app)/sessions/+page.svelte
diff --git a/src/Exceptionless.Web/ClientApp/src/lib/features/events/components/events-overview.svelte b/src/Exceptionless.Web/ClientApp/src/lib/features/events/components/events-overview.svelte
index 244d7443a..1d7499dd5 100644
--- a/src/Exceptionless.Web/ClientApp/src/lib/features/events/components/events-overview.svelte
+++ b/src/Exceptionless.Web/ClientApp/src/lib/features/events/components/events-overview.svelte
@@ -22,6 +22,7 @@
import Overview from './views/overview.svelte';
import PromotedExtendedData from './views/promoted-extended-data.svelte';
import Request from './views/request.svelte';
+ import SessionEvents from './views/session-events.svelte';
import TraceLog from './views/trace-log.svelte';
interface Props {
@@ -32,12 +33,23 @@
let { filterChanged, handleError, id }: Props = $props();
+ // Helper to get session ID from event
+ function getSessionId(event?: null | PersistentEvent): string | undefined {
+ if (!event) return undefined;
+ // For session start events, use reference_id
+ if (event.type === 'session') {
+ return event.reference_id ?? undefined;
+ }
+ // For other events, check @ref:session in data
+ return event.data?.['@ref:session'] as string | undefined;
+ }
+
function getTabs(event?: null | PersistentEvent, project?: ViewProject): TabType[] {
if (!event) {
return [];
}
- const tabs = ['Overview'];
+ const tabs: TabType[] = ['Overview'];
if (hasErrorOrSimpleError(event)) {
tabs.push('Exception');
}
@@ -54,6 +66,11 @@
tabs.push('Trace Log');
}
+ // Add Session Events tab if event has a session reference
+ if (getSessionId(event)) {
+ tabs.push('Session Events');
+ }
+
if (!project) {
return tabs;
}
@@ -168,6 +185,8 @@
{:else if tab === 'Trace Log'}
+ {:else if tab === 'Session Events'}
+
{:else if tab === 'Extended Data'}
{:else}
diff --git a/src/Exceptionless.Web/ClientApp/src/lib/features/events/components/views/session-events.svelte b/src/Exceptionless.Web/ClientApp/src/lib/features/events/components/views/session-events.svelte
new file mode 100644
index 000000000..d683e7cdc
--- /dev/null
+++ b/src/Exceptionless.Web/ClientApp/src/lib/features/events/components/views/session-events.svelte
@@ -0,0 +1,139 @@
+
+
+{#if !hasPremiumFeatures}
+
+
+ Premium Feature
+
+ Sessions are a premium feature. Upgrade your plan to view session events.
+
+
+{/if}
+
+
+ {#if isSessionStart}
+
+
+
+ Occurred On
+
+
+
+
+
+
+ Duration
+
+
+ {#if isActiveSession}
+
+ {/if}
+
+ {#if event.data?.sessionend}
+ (ended )
+ {/if}
+
+
+
+
+ {/if}
+
+
Session Events
+
+ {#if sessionEventsQuery.isLoading}
+
+ {#each Array.from({ length: 5 }, (_, i) => i) as i (i)}
+
+ {/each}
+
+ {:else if sessionEventsQuery.isError}
+
+ Error loading session events
+ {sessionEventsQuery.error?.message ?? 'Unknown error'}
+
+ {:else if sessionEventsQuery.data && sessionEventsQuery.data.length > 0}
+
+
+
+ Summary
+ When
+
+
+
+ {#each sessionEventsQuery.data as sessionEvent (sessionEvent.id)}
+
+
+
+ {sessionEvent.id}
+
+
+
+
+
+
+ {/each}
+
+
+ {:else}
+
No session events found.
+ {/if}
+
diff --git a/src/Exceptionless.Web/ClientApp/src/lib/features/organizations/api.svelte.ts b/src/Exceptionless.Web/ClientApp/src/lib/features/organizations/api.svelte.ts
index b3be2e34c..4edfd67de 100644
--- a/src/Exceptionless.Web/ClientApp/src/lib/features/organizations/api.svelte.ts
+++ b/src/Exceptionless.Web/ClientApp/src/lib/features/organizations/api.svelte.ts
@@ -359,6 +359,11 @@ export function postOrganization() {
onSuccess: (organization: ViewOrganization) => {
queryClient.setQueryData(queryKeys.id(organization.id, 'stats'), organization);
queryClient.setQueryData(queryKeys.id(organization.id, undefined), organization);
+ // Invalidate organizations list so it includes the new org
+ queryClient.invalidateQueries({ queryKey: queryKeys.list(undefined) });
+ queryClient.invalidateQueries({ queryKey: queryKeys.list('stats') });
+ // Invalidate user query since organization_ids changed on the backend
+ queryClient.invalidateQueries({ queryKey: ['User', 'me'] });
}
}));
}
diff --git a/src/Exceptionless.Web/ClientApp/src/lib/features/sessions/api.svelte.ts b/src/Exceptionless.Web/ClientApp/src/lib/features/sessions/api.svelte.ts
new file mode 100644
index 000000000..01391d726
--- /dev/null
+++ b/src/Exceptionless.Web/ClientApp/src/lib/features/sessions/api.svelte.ts
@@ -0,0 +1,121 @@
+import type { CountResult } from '$shared/models';
+
+import { accessToken } from '$features/auth/index.svelte';
+import { DEFAULT_OFFSET } from '$shared/api/api.svelte';
+import { type ProblemDetails, useFetchClient } from '@exceptionless/fetchclient';
+import { createQuery, useQueryClient } from '@tanstack/svelte-query';
+
+import type { EventSummaryModel, SummaryTemplateKeys } from '$features/events/components/summary/index';
+
+export const queryKeys = {
+ organizations: (id: string | undefined) => [...queryKeys.type, 'organizations', id] as const,
+ organizationsCount: (id: string | undefined, params?: GetOrganizationSessionsCountRequest['params']) =>
+ [...queryKeys.organizations(id), 'count', params] as const,
+ projects: (id: string | undefined) => [...queryKeys.type, 'projects', id] as const,
+ projectsCount: (id: string | undefined, params?: GetProjectSessionsCountRequest['params']) => [...queryKeys.projects(id), 'count', params] as const,
+ sessionEvents: (id: string | undefined) => [...queryKeys.type, 'session', id] as const,
+ type: ['Session'] as const
+};
+
+export interface GetSessionsParams {
+ after?: string;
+ before?: string;
+ filter?: string;
+ limit?: number;
+ mode?: 'summary';
+ offset?: string;
+ page?: number;
+ sort?: string;
+ time?: string;
+}
+
+export interface GetOrganizationSessionsCountRequest {
+ enabled?: () => boolean;
+ params?: {
+ aggregations?: string;
+ filter?: string;
+ offset?: string;
+ time?: string;
+ };
+ route: {
+ organizationId: string | undefined;
+ };
+}
+
+export interface GetProjectSessionsCountRequest {
+ params?: {
+ aggregations?: string;
+ filter?: string;
+ offset?: string;
+ time?: string;
+ };
+ route: {
+ projectId: string | undefined;
+ };
+}
+
+export interface GetSessionEventsRequest {
+ params?: {
+ after?: string;
+ before?: string;
+ filter?: string;
+ limit?: number;
+ mode?: 'summary';
+ offset?: string;
+ sort?: string;
+ time?: string;
+ };
+ route: {
+ sessionId: string | undefined;
+ };
+}
+
+/**
+ * Get session count with aggregations for stats and chart data.
+ * Uses aggregation: avg:value cardinality:user date:(date^offset cardinality:user)
+ */
+export function getOrganizationSessionsCountQuery(request: GetOrganizationSessionsCountRequest) {
+ const queryClient = useQueryClient();
+
+ return createQuery(() => ({
+ enabled: () => !!accessToken.current && !!request.route.organizationId && (request.enabled?.() ?? true),
+ queryClient,
+ queryFn: async ({ signal }: { signal: AbortSignal }) => {
+ const client = useFetchClient();
+ const response = await client.getJSON(`/organizations/${request.route.organizationId}/events/sessions/count`, {
+ params: {
+ ...(DEFAULT_OFFSET ? { offset: DEFAULT_OFFSET } : {}),
+ ...request.params
+ },
+ signal
+ });
+
+ return response.data!;
+ },
+ queryKey: queryKeys.organizationsCount(request.route.organizationId, request.params)
+ }));
+}
+
+/**
+ * Get events within a session by session ID.
+ * Uses endpoint: /events/sessions/{sessionId}
+ */
+export function getSessionEventsQuery(request: GetSessionEventsRequest) {
+ return createQuery[], ProblemDetails>(() => ({
+ enabled: () => !!accessToken.current && !!request.route.sessionId,
+ queryFn: async ({ signal }: { signal: AbortSignal }) => {
+ const client = useFetchClient();
+ const response = await client.getJSON[]>(`events/sessions/${request.route.sessionId}`, {
+ params: {
+ ...(DEFAULT_OFFSET ? { offset: DEFAULT_OFFSET } : {}),
+ mode: 'summary',
+ ...request.params
+ },
+ signal
+ });
+
+ return response.data!;
+ },
+ queryKey: queryKeys.sessionEvents(request.route.sessionId)
+ }));
+}
diff --git a/src/Exceptionless.Web/ClientApp/src/lib/features/sessions/components/sessions-dashboard-chart.svelte b/src/Exceptionless.Web/ClientApp/src/lib/features/sessions/components/sessions-dashboard-chart.svelte
new file mode 100644
index 000000000..12053f9d1
--- /dev/null
+++ b/src/Exceptionless.Web/ClientApp/src/lib/features/sessions/components/sessions-dashboard-chart.svelte
@@ -0,0 +1,91 @@
+
+
+
+ {#if isLoading}
+
+ {:else}
+
+ d.sessions)))]}
+ {series}
+ axis={false}
+ grid={false}
+ brush={{
+ onBrushEnd: (detail) => {
+ const [start, end] = detail.xDomain ?? [];
+ if (start instanceof Date && end instanceof Date) {
+ onRangeSelect?.(start, end);
+ }
+ }
+ }}
+ props={{
+ area: {
+ curve: curveLinear
+ },
+ canvas: {
+ class: 'cursor-crosshair'
+ },
+ svg: {
+ class: 'cursor-crosshair'
+ }
+ }}
+ >
+ {#snippet tooltip()}
+ formatDateLabel(v as Date)} />
+ {/snippet}
+
+
+ {/if}
+
diff --git a/src/Exceptionless.Web/ClientApp/src/lib/features/sessions/components/sessions-stats-dashboard.svelte b/src/Exceptionless.Web/ClientApp/src/lib/features/sessions/components/sessions-stats-dashboard.svelte
new file mode 100644
index 000000000..4a831788f
--- /dev/null
+++ b/src/Exceptionless.Web/ClientApp/src/lib/features/sessions/components/sessions-stats-dashboard.svelte
@@ -0,0 +1,87 @@
+
+
+
+
+
+ Sessions
+
+
+
+ {#if isLoading}
+
+ {:else}
+
+
+
+ {/if}
+
+
+
+
+
+ Sessions Per Hour
+
+
+
+ {#if isLoading}
+
+ {:else}
+
+ {avgPerHour?.toFixed(1) ?? '0'}
+
+ {/if}
+
+
+
+
+
+ Users
+
+
+
+ {#if isLoading}
+
+ {:else}
+
+
+
+ {/if}
+
+
+
+
+
+ Average Duration
+
+
+
+ {#if isLoading}
+
+ {:else}
+
+
+
+
+ {/if}
+
+
+
diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/sidebar.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/sidebar.svelte
index 850e52fed..38f388ff9 100644
--- a/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/sidebar.svelte
+++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/(components)/layouts/sidebar.svelte
@@ -19,6 +19,7 @@
let { footer, header, impersonating = false, routes, ...props }: Props = $props();
const dashboardRoutes = $derived(routes.filter((route) => route.group === 'Dashboards'));
+ const reportRoutes = $derived(routes.filter((route) => route.group === 'Reports'));
// Settings routes need additional filtering based on navigation context
const navigationContext: NavigationItemContext = $derived({ authenticated: true, impersonating });
@@ -61,6 +62,27 @@
+ {#if reportRoutes.length > 0}
+
+ Reports
+
+ {#each reportRoutes as route (route.href)}
+ {@const Icon = route.icon}
+
+
+ {#snippet child({ props })}
+
+
+ {route.title}
+
+ {/snippet}
+
+
+ {/each}
+
+
+ {/if}
+
diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/+layout.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/+layout.svelte
index f69ca9ab0..dfdb935ca 100644
--- a/src/Exceptionless.Web/ClientApp/src/routes/(app)/+layout.svelte
+++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/+layout.svelte
@@ -170,7 +170,12 @@
const organizations = $derived(organizationsQuery.data?.data ?? []);
const impersonatingOrganizationId = $derived.by(() => {
- const isUserOrganization = meQuery.data?.organization_ids.includes(organization.current ?? '');
+ // Only consider impersonation if user data is loaded and user has organizations
+ const userOrgIds = meQuery.data?.organization_ids;
+ if (!userOrgIds || userOrgIds.length === 0 || !organization.current) {
+ return undefined;
+ }
+ const isUserOrganization = userOrgIds.includes(organization.current);
return isUserOrganization ? undefined : organization.current;
});
diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/routes.svelte.ts b/src/Exceptionless.Web/ClientApp/src/routes/(app)/routes.svelte.ts
index bf9c75885..2b80491f3 100644
--- a/src/Exceptionless.Web/ClientApp/src/routes/(app)/routes.svelte.ts
+++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/routes.svelte.ts
@@ -6,6 +6,7 @@ import EventStream from '@lucide/svelte/icons/calendar-arrow-down';
import Events from '@lucide/svelte/icons/calendar-days';
import Support from '@lucide/svelte/icons/circle-help';
import GitHub from '@lucide/svelte/icons/github';
+import Sessions from '@lucide/svelte/icons/timer';
import type { NavigationItem } from '../routes.svelte';
@@ -34,6 +35,12 @@ export function routes(): NavigationItem[] {
icon: EventStream,
title: 'Event Stream'
},
+ {
+ group: 'Reports',
+ href: resolve('/(app)/sessions'),
+ icon: Sessions,
+ title: 'Sessions'
+ },
{
group: 'Help',
href: 'https://exceptionless.com/docs/',
diff --git a/src/Exceptionless.Web/ClientApp/src/routes/(app)/sessions/+page.svelte b/src/Exceptionless.Web/ClientApp/src/routes/(app)/sessions/+page.svelte
new file mode 100644
index 000000000..2439ae4b2
--- /dev/null
+++ b/src/Exceptionless.Web/ClientApp/src/routes/(app)/sessions/+page.svelte
@@ -0,0 +1,394 @@
+
+
+
+ {#if organizationQuery.isSuccess && !hasPremiumFeatures}
+
+
+ Premium Feature
+
+ Upgrade now to enable sessions and other premium features!
+
+
+ {/if}
+
+
+
Sessions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {#snippet footerChildren()}
+
+
+
+
+
+
+ {/snippet}
+
+
+
+
+ (selectedEventId = null)} open={!!selectedEventId}>
+
+
+ Event Details
+
+
+ (selectedEventId = null)} />
+
+
+
From 3337100fd5410f4a91c5a6a096fd14909a13f9e3 Mon Sep 17 00:00:00 2001
From: Blake Niemyjski
Date: Mon, 2 Feb 2026 21:15:31 -0600
Subject: [PATCH 02/17] chore(deps): update dependencies in package.json
- Bump @eslint/compat from 2.0.1 to 2.0.2
- Bump @playwright/test from 1.58.0 to 1.58.1
- Bump @storybook/addon-a11y from 10.2.1 to 10.2.4
- Bump @storybook/addon-docs from 10.2.1 to 10.2.4
- Bump @storybook/sveltekit from 10.2.1 to 10.2.4
- Bump @sveltejs/kit from 2.50.1 to 2.50.2
- Bump @tanstack/eslint-plugin-query from 5.91.3 to 5.91.4
- Bump @types/node from 25.1.0 to 25.2.0
- Bump eslint-plugin-storybook from 10.2.1 to 10.2.4
- Bump jsdom from 27.4.0 to 28.0.0
- Bump storybook from 10.2.1 to 10.2.4
- Bump svelte from 5.49.0 to 5.49.1
- Bump svelte-check from 4.3.5 to 4.3.6
- Bump @tanstack/svelte-query-devtools from 6.0.3 to 6.0.4
- Bump bits-ui from 2.15.4 to 2.15.5
- Bump shiki from 3.21.0 to 3.22.0
---
.../ClientApp/package-lock.json | 427 +++++++++---------
src/Exceptionless.Web/ClientApp/package.json | 32 +-
2 files changed, 237 insertions(+), 222 deletions(-)
diff --git a/src/Exceptionless.Web/ClientApp/package-lock.json b/src/Exceptionless.Web/ClientApp/package-lock.json
index b4def6fbe..0faf34181 100644
--- a/src/Exceptionless.Web/ClientApp/package-lock.json
+++ b/src/Exceptionless.Web/ClientApp/package-lock.json
@@ -14,11 +14,11 @@
"@lucide/svelte": "^0.563.1",
"@tanstack/svelte-form": "^1.28.0",
"@tanstack/svelte-query": "^6.0.18",
- "@tanstack/svelte-query-devtools": "^6.0.3",
+ "@tanstack/svelte-query-devtools": "^6.0.4",
"@tanstack/svelte-table": "^9.0.0-alpha.10",
"@types/d3-scale": "^4.0.9",
"@types/d3-shape": "^3.1.8",
- "bits-ui": "^2.15.4",
+ "bits-ui": "^2.15.5",
"clsx": "^2.1.1",
"d3-scale": "^4.0.2",
"dompurify": "^3.3.1",
@@ -28,7 +28,7 @@
"oidc-client-ts": "^3.4.1",
"pretty-ms": "^9.3.0",
"runed": "^0.37.1",
- "shiki": "^3.21.0",
+ "shiki": "^3.22.0",
"svelte-sonner": "^1.0.7",
"svelte-time": "^2.1.0",
"tailwind-merge": "^3.4.0",
@@ -39,37 +39,37 @@
},
"devDependencies": {
"@chromatic-com/storybook": "^5.0.0",
- "@eslint/compat": "^2.0.1",
+ "@eslint/compat": "^2.0.2",
"@eslint/js": "^9.39.2",
"@iconify-json/lucide": "^1.2.87",
- "@playwright/test": "^1.58.0",
- "@storybook/addon-a11y": "^10.2.1",
- "@storybook/addon-docs": "^10.2.1",
+ "@playwright/test": "^1.58.1",
+ "@storybook/addon-a11y": "^10.2.4",
+ "@storybook/addon-docs": "^10.2.4",
"@storybook/addon-svelte-csf": "^5.0.10",
- "@storybook/sveltekit": "^10.2.1",
+ "@storybook/sveltekit": "^10.2.4",
"@sveltejs/adapter-static": "^3.0.10",
- "@sveltejs/kit": "^2.50.1",
+ "@sveltejs/kit": "^2.50.2",
"@sveltejs/vite-plugin-svelte": "^6.2.4",
"@tailwindcss/vite": "^4.1.18",
- "@tanstack/eslint-plugin-query": "^5.91.3",
+ "@tanstack/eslint-plugin-query": "^5.91.4",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/svelte": "^5.3.1",
"@types/eslint": "^9.6.1",
- "@types/node": "^25.1.0",
+ "@types/node": "^25.2.0",
"@types/throttle-debounce": "^5.0.2",
"cross-env": "^10.1.0",
"eslint": "^9.39.2",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-perfectionist": "^5.4.0",
- "eslint-plugin-storybook": "^10.2.1",
+ "eslint-plugin-storybook": "^10.2.4",
"eslint-plugin-svelte": "^3.14.0",
- "jsdom": "^27.4.0",
+ "jsdom": "^28.0.0",
"prettier": "^3.8.1",
"prettier-plugin-svelte": "^3.4.1",
"prettier-plugin-tailwindcss": "^0.7.2",
- "storybook": "^10.2.1",
- "svelte": "^5.49.0",
- "svelte-check": "^4.3.5",
+ "storybook": "^10.2.4",
+ "svelte": "^5.49.1",
+ "svelte-check": "^4.3.6",
"swagger-typescript-api": "^13.2.16",
"tslib": "^2.8.1",
"typescript": "^5.9.3",
@@ -81,9 +81,9 @@
}
},
"node_modules/@acemir/cssom": {
- "version": "0.9.29",
- "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.29.tgz",
- "integrity": "sha512-G90x0VW+9nW4dFajtjCoT+NM0scAfH9Mb08IcjgFHYbfiL/lU04dTF9JuVOi3/OH+DJCQdcIseSXkdCB9Ky6JA==",
+ "version": "0.9.31",
+ "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.31.tgz",
+ "integrity": "sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==",
"dev": true,
"license": "MIT"
},
@@ -311,9 +311,9 @@
}
},
"node_modules/@csstools/css-syntax-patches-for-csstree": {
- "version": "1.0.21",
- "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.21.tgz",
- "integrity": "sha512-plP8N8zKfEZ26figX4Nvajx8DuzfuRpLTqglQ5d0chfnt35Qt3X+m6ASZ+rG0D0kxe/upDVNwSIVJP5n4FuNfw==",
+ "version": "1.0.26",
+ "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.26.tgz",
+ "integrity": "sha512-6boXK0KkzT5u5xOgF6TKB+CLq9SOpEGmkZw0g5n9/7yg85wab3UzSxB8TxhLJ31L4SGJ6BCFRw/iftTha1CJXA==",
"dev": true,
"funding": [
{
@@ -325,10 +325,7 @@
"url": "https://opencollective.com/csstools"
}
],
- "license": "MIT-0",
- "engines": {
- "node": ">=18"
- }
+ "license": "MIT-0"
},
"node_modules/@csstools/css-tokenizer": {
"version": "3.0.4",
@@ -834,19 +831,19 @@
}
},
"node_modules/@eslint/compat": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-2.0.1.tgz",
- "integrity": "sha512-yl/JsgplclzuvGFNqwNYV4XNPhP3l62ZOP9w/47atNAdmDtIFCx6X7CSk/SlWUuBGkT4Et/5+UD+WyvX2iiIWA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-2.0.2.tgz",
+ "integrity": "sha512-pR1DoD0h3HfF675QZx0xsyrsU8q70Z/plx7880NOhS02NuWLgBCOMDL787nUeQ7EWLkxv3bPQJaarjcPQb2Dwg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "@eslint/core": "^1.0.1"
+ "@eslint/core": "^1.1.0"
},
"engines": {
"node": "^20.19.0 || ^22.13.0 || >=24"
},
"peerDependencies": {
- "eslint": "^8.40 || 9"
+ "eslint": "^8.40 || 9 || 10"
},
"peerDependenciesMeta": {
"eslint": {
@@ -855,9 +852,9 @@
}
},
"node_modules/@eslint/compat/node_modules/@eslint/core": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.0.1.tgz",
- "integrity": "sha512-r18fEAj9uCk+VjzGt2thsbOmychS+4kxI14spVNibUO2vqKX7obOG+ymZljAwuPZl+S3clPGwCwTDtrdqTiY6Q==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.0.tgz",
+ "integrity": "sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@@ -992,19 +989,19 @@
"license": "Apache-2.0"
},
"node_modules/@exodus/bytes": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.6.0.tgz",
- "integrity": "sha512-y32mI9627q5LR/L8fLc4YyDRJQOi+jK0D9okzLilAdiU3F9we3zC7Y7CFrR/8vAvUyv7FgBAYcNHtvbmhKCFcw==",
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@exodus/bytes/-/bytes-1.11.0.tgz",
+ "integrity": "sha512-wO3vd8nsEHdumsXrjGO/v4p6irbg7hy9kvIeR6i2AwylZSk4HJdWgL0FNaVquW1+AweJcdvU1IEpuIWk/WaPnA==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
- "@exodus/crypto": "^1.0.0-rc.4"
+ "@noble/hashes": "^1.8.0 || ^2.0.0"
},
"peerDependenciesMeta": {
- "@exodus/crypto": {
+ "@noble/hashes": {
"optional": true
}
}
@@ -1244,13 +1241,13 @@
"license": "MIT"
},
"node_modules/@playwright/test": {
- "version": "1.58.0",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.0.tgz",
- "integrity": "sha512-fWza+Lpbj6SkQKCrU6si4iu+fD2dD3gxNHFhUPxsfXBPhnv3rRSQVd0NtBUT9Z/RhF/boCBcuUaMUSTRTopjZg==",
+ "version": "1.58.1",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.1.tgz",
+ "integrity": "sha512-6LdVIUERWxQMmUSSQi0I53GgCBYgM2RpGngCPY7hSeju+VrKjq3lvs7HpJoPbDiY5QM5EYRtRX5fvrinnMAz3w==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright": "1.58.0"
+ "playwright": "1.58.1"
},
"bin": {
"playwright": "cli.js"
@@ -1553,60 +1550,60 @@
]
},
"node_modules/@shikijs/core": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.21.0.tgz",
- "integrity": "sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA==",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.22.0.tgz",
+ "integrity": "sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.21.0",
+ "@shikijs/types": "3.22.0",
"@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4",
"hast-util-to-html": "^9.0.5"
}
},
"node_modules/@shikijs/engine-javascript": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.21.0.tgz",
- "integrity": "sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ==",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.22.0.tgz",
+ "integrity": "sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.21.0",
+ "@shikijs/types": "3.22.0",
"@shikijs/vscode-textmate": "^10.0.2",
"oniguruma-to-es": "^4.3.4"
}
},
"node_modules/@shikijs/engine-oniguruma": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.21.0.tgz",
- "integrity": "sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ==",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.22.0.tgz",
+ "integrity": "sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.21.0",
+ "@shikijs/types": "3.22.0",
"@shikijs/vscode-textmate": "^10.0.2"
}
},
"node_modules/@shikijs/langs": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.21.0.tgz",
- "integrity": "sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA==",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.22.0.tgz",
+ "integrity": "sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.21.0"
+ "@shikijs/types": "3.22.0"
}
},
"node_modules/@shikijs/themes": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.21.0.tgz",
- "integrity": "sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw==",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.22.0.tgz",
+ "integrity": "sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.21.0"
+ "@shikijs/types": "3.22.0"
}
},
"node_modules/@shikijs/types": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.21.0.tgz",
- "integrity": "sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA==",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.22.0.tgz",
+ "integrity": "sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==",
"license": "MIT",
"dependencies": {
"@shikijs/vscode-textmate": "^10.0.2",
@@ -1627,9 +1624,9 @@
"license": "MIT"
},
"node_modules/@storybook/addon-a11y": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-10.2.1.tgz",
- "integrity": "sha512-2oVKs3gDveVYcAzcB/Ik6AQcNvZ+cmvJQxwf6GO7dNJ81uIwSsVS4JFyxt9KFCKVn3uR00OGwOtEmyMEtsTvDw==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-10.2.4.tgz",
+ "integrity": "sha512-VGhdZ+iP2l/CSulIKV2kt3SMWVHntOigqWqGkNYf6YNYofynUYEKdsNqBvHx4ySuNEl/eXJ8LRO8FKYnU7LxZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1641,20 +1638,20 @@
"url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "storybook": "^10.2.1"
+ "storybook": "^10.2.4"
}
},
"node_modules/@storybook/addon-docs": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.1.tgz",
- "integrity": "sha512-7imMi6YRO4j00DGC27Z2niXUUaIVcVUGkPK3X6hCrl/QkD2aO8yO1kRaJpQEnrCxl/uRMfsh7wyt0xFsGA35FQ==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-10.2.4.tgz",
+ "integrity": "sha512-FzscAmdBiOGnGrxiEM+8eTg43kjqgjLfObg+lbJVRR/a0DmZ3xfAPNB0+VKYQbN0FacNcWLM9LZ/7U0hRBPBnQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@mdx-js/react": "^3.0.0",
- "@storybook/csf-plugin": "10.2.1",
+ "@storybook/csf-plugin": "10.2.4",
"@storybook/icons": "^2.0.1",
- "@storybook/react-dom-shim": "10.2.1",
+ "@storybook/react-dom-shim": "10.2.4",
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
"ts-dedent": "^2.0.0"
@@ -1664,7 +1661,7 @@
"url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "storybook": "^10.2.1"
+ "storybook": "^10.2.4"
}
},
"node_modules/@storybook/addon-svelte-csf": {
@@ -1691,13 +1688,13 @@
}
},
"node_modules/@storybook/builder-vite": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.1.tgz",
- "integrity": "sha512-6FGvq956qe4xzq9JDkoTJXSrlps8mBVPIikk83v1u+g4x7f+F/x2arNVB/ox/JtbOg5NmDatRSHTK70SukpkKg==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-10.2.4.tgz",
+ "integrity": "sha512-/hcT1xj3CL5GkJ5v5/EguZdttDwNE6weNXK7vKzp034tnGcLycOossDsTiUQkBowSL+Ylc8aKj+ZgvddPNfOig==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@storybook/csf-plugin": "10.2.1",
+ "@storybook/csf-plugin": "10.2.4",
"ts-dedent": "^2.0.0"
},
"funding": {
@@ -1705,7 +1702,7 @@
"url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "storybook": "^10.2.1",
+ "storybook": "^10.2.4",
"vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
}
},
@@ -1720,9 +1717,9 @@
}
},
"node_modules/@storybook/csf-plugin": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.1.tgz",
- "integrity": "sha512-x21uUsBJ71F83fH/dlSPoZ1g2RnEyXiQunCGWLDfOntVKAk8ezCF09am4b8f+evq+uq9prR9BsgFh3+tAdyFvg==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-10.2.4.tgz",
+ "integrity": "sha512-kupPQEV+4N9mzsZHYaokvhO/KHBjYdWda9PNmPQwy0TR7r2mzthgaNH72TjmgN1L6DIbsuyOG1wtczcPJn4+Jg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1735,7 +1732,7 @@
"peerDependencies": {
"esbuild": "*",
"rollup": "*",
- "storybook": "^10.2.1",
+ "storybook": "^10.2.4",
"vite": "*",
"webpack": "*"
},
@@ -1773,9 +1770,9 @@
}
},
"node_modules/@storybook/react-dom-shim": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.1.tgz",
- "integrity": "sha512-YN4WExJGm9erWgRfrKKHUzXn4SUja6h7OR4rxlaBOGDWHIiD+8i3yfNnPOYh1DaATa2w/6e84IAKJQdkvAUxfA==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-10.2.4.tgz",
+ "integrity": "sha512-i22OtrZ7GeZPt/odLf0vqyDhRSKyaLsHkkKSBcANQfzRRnBZmiz2FchOtWm9uvoDWybQsTruZq7kTdtpEhwyGw==",
"dev": true,
"license": "MIT",
"funding": {
@@ -1785,13 +1782,13 @@
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
- "storybook": "^10.2.1"
+ "storybook": "^10.2.4"
}
},
"node_modules/@storybook/svelte": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/@storybook/svelte/-/svelte-10.2.1.tgz",
- "integrity": "sha512-rJ0M19G2dczcpDM25O5NJI3bENFvcQOpjz/jZ40El/9UT34sPeIPxV54yGbjjc3j+URKZOxpxC86GTGshn5+KA==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/@storybook/svelte/-/svelte-10.2.4.tgz",
+ "integrity": "sha512-W9R51zUCd2iHOQBg/D93+bdpYv6kbtFx+kft5X8lPKQl6yEu0aKs9i5N5GyCASOhIApgx/tkqZIJ7vgM4cqrHA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1803,19 +1800,19 @@
"url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "storybook": "^10.2.1",
+ "storybook": "^10.2.4",
"svelte": "^5.0.0"
}
},
"node_modules/@storybook/svelte-vite": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/@storybook/svelte-vite/-/svelte-vite-10.2.1.tgz",
- "integrity": "sha512-/mULZH0l41DYIxi4NS7p9PFNnvlfl3rMInIIR0i/Ayf2NJ8mRZ0x/WJsD/glfjcH+KwR0FvuXS/cmyppLDIC6g==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/@storybook/svelte-vite/-/svelte-vite-10.2.4.tgz",
+ "integrity": "sha512-FMgKMRdoZFDwPD6eIDMldcgp6d6NtIGuXyUJjb29qLias/gE5TI6hg+cWmmWXQRTrXwdyepeMBmIfRcZbB6REQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@storybook/builder-vite": "10.2.1",
- "@storybook/svelte": "10.2.1",
+ "@storybook/builder-vite": "10.2.4",
+ "@storybook/svelte": "10.2.4",
"magic-string": "^0.30.0",
"svelte2tsx": "^0.7.44",
"typescript": "^4.9.4 || ^5.0.0"
@@ -1826,28 +1823,28 @@
},
"peerDependencies": {
"@sveltejs/vite-plugin-svelte": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0",
- "storybook": "^10.2.1",
+ "storybook": "^10.2.4",
"svelte": "^5.0.0",
"vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
}
},
"node_modules/@storybook/sveltekit": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/@storybook/sveltekit/-/sveltekit-10.2.1.tgz",
- "integrity": "sha512-6ARwqpSem8cuvrqR5a4ph5XszUbnR5Gg0b31WB0wlFpiB1WEbwu9odhN0816ZX4f9JZmQ60kAN60zLwZIR9R+A==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/@storybook/sveltekit/-/sveltekit-10.2.4.tgz",
+ "integrity": "sha512-1qDX35iSJHWo1AOd7HMzJtCHBfgahXqTWNiyZa/JMEKJ3qC1otaU8XMmTjsZ6fCRF99piNdgqtWM8+s1TJOldg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@storybook/builder-vite": "10.2.1",
- "@storybook/svelte": "10.2.1",
- "@storybook/svelte-vite": "10.2.1"
+ "@storybook/builder-vite": "10.2.4",
+ "@storybook/svelte": "10.2.4",
+ "@storybook/svelte-vite": "10.2.4"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "storybook": "^10.2.1",
+ "storybook": "^10.2.4",
"svelte": "^5.0.0",
"vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
}
@@ -1872,9 +1869,9 @@
}
},
"node_modules/@sveltejs/kit": {
- "version": "2.50.1",
- "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.50.1.tgz",
- "integrity": "sha512-XRHD2i3zC4ukhz2iCQzO4mbsts081PAZnnMAQ7LNpWeYgeBmwMsalf0FGSwhFXBbtr2XViPKnFJBDCckWqrsLw==",
+ "version": "2.50.2",
+ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.50.2.tgz",
+ "integrity": "sha512-875hTUkEbz+MyJIxWbQjfMaekqdmEKUUfR7JyKcpfMRZqcGyrO9Gd+iS1D/Dx8LpE5FEtutWGOtlAh4ReSAiOA==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -1889,7 +1886,7 @@
"magic-string": "^0.30.5",
"mrmime": "^2.0.0",
"sade": "^1.8.1",
- "set-cookie-parser": "^2.6.0",
+ "set-cookie-parser": "^3.0.0",
"sirv": "^3.0.0"
},
"bin": {
@@ -2248,9 +2245,9 @@
}
},
"node_modules/@tanstack/eslint-plugin-query": {
- "version": "5.91.3",
- "resolved": "https://registry.npmjs.org/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.91.3.tgz",
- "integrity": "sha512-5GMGZMYFK9dOvjpdedjJs4hU40EdPuO2AjzObQzP7eOSsikunCfrXaU3oNGXSsvoU9ve1Z1xQZZuDyPi0C1M7Q==",
+ "version": "5.91.4",
+ "resolved": "https://registry.npmjs.org/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.91.4.tgz",
+ "integrity": "sha512-8a+GAeR7oxJ5laNyYBQ6miPK09Hi18o5Oie/jx8zioXODv/AUFLZQecKabPdpQSLmuDXEBPKFh+W5DKbWlahjQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2261,7 +2258,13 @@
"url": "https://github.com/sponsors/tannerlinsley"
},
"peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0"
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
"node_modules/@tanstack/form-core": {
@@ -2303,9 +2306,9 @@
}
},
"node_modules/@tanstack/query-devtools": {
- "version": "5.92.0",
- "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.92.0.tgz",
- "integrity": "sha512-N8D27KH1vEpVacvZgJL27xC6yPFUy0Zkezn5gnB3L3gRCxlDeSuiya7fKge8Y91uMTnC8aSxBQhcK6ocY7alpQ==",
+ "version": "5.93.0",
+ "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.93.0.tgz",
+ "integrity": "sha512-+kpsx1NQnOFTZsw6HAFCW3HkKg0+2cepGtAWXjiiSOJJ1CtQpt72EE2nyZb+AjAbLRPoeRmPJ8MtQd8r8gsPdg==",
"license": "MIT",
"funding": {
"type": "github",
@@ -2352,12 +2355,12 @@
}
},
"node_modules/@tanstack/svelte-query-devtools": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/@tanstack/svelte-query-devtools/-/svelte-query-devtools-6.0.3.tgz",
- "integrity": "sha512-AHc/vPiUWeMFXKvtrlZot7wIlsIm4z5vd0wDeQUKwE5XTfZODu0no1A4UCLzVnY2WpbBpakIEUMH+PmSMwYXKg==",
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/@tanstack/svelte-query-devtools/-/svelte-query-devtools-6.0.4.tgz",
+ "integrity": "sha512-jHcpWb8KrL3QxoyBHpceR1tIfZUQB1uCiXjh+rDBrmkw1AMIMnIKANzLoz8eQgIGJC7C2dUZXRvDpUvtLDgRAQ==",
"license": "MIT",
"dependencies": {
- "@tanstack/query-devtools": "5.92.0",
+ "@tanstack/query-devtools": "5.93.0",
"esm-env": "^1.2.1"
},
"funding": {
@@ -2365,7 +2368,7 @@
"url": "https://github.com/sponsors/tannerlinsley"
},
"peerDependencies": {
- "@tanstack/svelte-query": "^6.0.12",
+ "@tanstack/svelte-query": "^6.0.18",
"svelte": "^5.25.0"
}
},
@@ -2647,9 +2650,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "25.1.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz",
- "integrity": "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==",
+ "version": "25.2.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
+ "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -3291,9 +3294,9 @@
}
},
"node_modules/bits-ui": {
- "version": "2.15.4",
- "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-2.15.4.tgz",
- "integrity": "sha512-7H9YUfp03KOk1LVDh8wPYSRPxlZgG/GRWLNSA8QC73/8Z8ytun+DWJhIuibyFyz7A0cP/RANVcB4iDrbY8q+Og==",
+ "version": "2.15.5",
+ "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-2.15.5.tgz",
+ "integrity": "sha512-WhS+P+E//ClLfKU6KqjKC17nGDRLnz+vkwoP6ClFUPd5m1fFVDxTElPX8QVsduLj5V1KFDxlnv6sW2G5Lqk+vw==",
"license": "MIT",
"dependencies": {
"@floating-ui/core": "^1.7.1",
@@ -3713,15 +3716,16 @@
}
},
"node_modules/cssstyle": {
- "version": "5.3.5",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.5.tgz",
- "integrity": "sha512-GlsEptulso7Jg0VaOZ8BXQi3AkYM5BOJKEO/rjMidSCq70FkIC5y0eawrCXeYzxgt3OCf4Ls+eoxN+/05vN0Ag==",
+ "version": "5.3.7",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-5.3.7.tgz",
+ "integrity": "sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@asamuzakjp/css-color": "^4.1.1",
"@csstools/css-syntax-patches-for-csstree": "^1.0.21",
- "css-tree": "^3.1.0"
+ "css-tree": "^3.1.0",
+ "lru-cache": "^11.2.4"
},
"engines": {
"node": ">=20"
@@ -4040,17 +4044,17 @@
}
},
"node_modules/data-urls": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-6.0.0.tgz",
- "integrity": "sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz",
+ "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^15.0.0"
+ "whatwg-mimetype": "^5.0.0",
+ "whatwg-url": "^16.0.0"
},
"engines": {
- "node": ">=20"
+ "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
}
},
"node_modules/dayjs": {
@@ -4134,9 +4138,9 @@
}
},
"node_modules/default-browser": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz",
- "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz",
+ "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4493,9 +4497,9 @@
}
},
"node_modules/eslint-plugin-storybook": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-10.2.1.tgz",
- "integrity": "sha512-5+V+dlzTuZfNKUD8hPbLvCVtggcWfI2lDGTpiq0AENrHeAgcztj17wwDva96lbg/sAG20uX71l8HQo3s/GmpHw==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-10.2.4.tgz",
+ "integrity": "sha512-D8a6Y+iun2MSOpgps0Vd/t8y9Y5ZZ7O2VeKqw2PCv2+b7yInqogOS2VBMSRZVfP8TTGQgDpbUK67k7KZEUC7Ng==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4503,7 +4507,7 @@
},
"peerDependencies": {
"eslint": ">=8",
- "storybook": "^10.2.1"
+ "storybook": "^10.2.4"
}
},
"node_modules/eslint-plugin-svelte": {
@@ -5215,17 +5219,17 @@
}
},
"node_modules/jsdom": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-27.4.0.tgz",
- "integrity": "sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ==",
+ "version": "28.0.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.0.0.tgz",
+ "integrity": "sha512-KDYJgZ6T2TKdU8yBfYueq5EPG/EylMsBvCaenWMJb2OXmjgczzwveRCoJ+Hgj1lXPDyasvrgneSn4GBuR1hYyA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@acemir/cssom": "^0.9.28",
+ "@acemir/cssom": "^0.9.31",
"@asamuzakjp/dom-selector": "^6.7.6",
- "@exodus/bytes": "^1.6.0",
- "cssstyle": "^5.3.4",
- "data-urls": "^6.0.0",
+ "@exodus/bytes": "^1.11.0",
+ "cssstyle": "^5.3.7",
+ "data-urls": "^7.0.0",
"decimal.js": "^10.6.0",
"html-encoding-sniffer": "^6.0.0",
"http-proxy-agent": "^7.0.2",
@@ -5235,11 +5239,11 @@
"saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
"tough-cookie": "^6.0.0",
+ "undici": "^7.20.0",
"w3c-xmlserializer": "^5.0.0",
- "webidl-conversions": "^8.0.0",
- "whatwg-mimetype": "^4.0.0",
- "whatwg-url": "^15.1.0",
- "ws": "^8.18.3",
+ "webidl-conversions": "^8.0.1",
+ "whatwg-mimetype": "^5.0.0",
+ "whatwg-url": "^16.0.0",
"xml-name-validator": "^5.0.0"
},
"engines": {
@@ -6479,13 +6483,13 @@
}
},
"node_modules/playwright": {
- "version": "1.58.0",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.0.tgz",
- "integrity": "sha512-2SVA0sbPktiIY/MCOPX8e86ehA/e+tDNq+e5Y8qjKYti2Z/JG7xnronT/TXTIkKbYGWlCbuucZ6dziEgkoEjQQ==",
+ "version": "1.58.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.1.tgz",
+ "integrity": "sha512-+2uTZHxSCcxjvGc5C891LrS1/NlxglGxzrC4seZiVjcYVQfUa87wBL6rTDqzGjuoWNjnBzRqKmF6zRYGMvQUaQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
- "playwright-core": "1.58.0"
+ "playwright-core": "1.58.1"
},
"bin": {
"playwright": "cli.js"
@@ -6498,9 +6502,9 @@
}
},
"node_modules/playwright-core": {
- "version": "1.58.0",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.0.tgz",
- "integrity": "sha512-aaoB1RWrdNi3//rOeKuMiS65UCcgOVljU46At6eFcOFPFHWtd2weHRRow6z/n+Lec0Lvu0k9ZPKJSjPugikirw==",
+ "version": "1.58.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.1.tgz",
+ "integrity": "sha512-bcWzOaTxcW+VOOGBCQgnaKToLJ65d6AqfLVKEWvexyS3AS6rbXl+xdpYRMGSRBClPvyj44njOWoxjNdL/H9UNg==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@@ -7141,9 +7145,9 @@
}
},
"node_modules/set-cookie-parser": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz",
- "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.0.1.tgz",
+ "integrity": "sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==",
"devOptional": true,
"license": "MIT"
},
@@ -7171,17 +7175,17 @@
}
},
"node_modules/shiki": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.21.0.tgz",
- "integrity": "sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w==",
+ "version": "3.22.0",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.22.0.tgz",
+ "integrity": "sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==",
"license": "MIT",
"dependencies": {
- "@shikijs/core": "3.21.0",
- "@shikijs/engine-javascript": "3.21.0",
- "@shikijs/engine-oniguruma": "3.21.0",
- "@shikijs/langs": "3.21.0",
- "@shikijs/themes": "3.21.0",
- "@shikijs/types": "3.21.0",
+ "@shikijs/core": "3.22.0",
+ "@shikijs/engine-javascript": "3.22.0",
+ "@shikijs/engine-oniguruma": "3.22.0",
+ "@shikijs/langs": "3.22.0",
+ "@shikijs/themes": "3.22.0",
+ "@shikijs/types": "3.22.0",
"@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4"
}
@@ -7348,9 +7352,9 @@
"license": "MIT"
},
"node_modules/storybook": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.1.tgz",
- "integrity": "sha512-hgiiwT4ZWJ/yrRpoXnHpCzWOsUvLUwQqgM/ws6mCIDsKJ7Gc7irL6DjWpi8G7l1Uq5VXYsQjXQo5ydb8Pyajdg==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.4.tgz",
+ "integrity": "sha512-LwF0VZsT4qkgx66Ad/q0QgZZrU2a5WftaADDEcJ3bGq3O2fHvwWPlSZjM1HiXD4vqP9U5JiMqQkV1gkyH0XJkw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7503,9 +7507,9 @@
}
},
"node_modules/svelte": {
- "version": "5.49.0",
- "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.49.0.tgz",
- "integrity": "sha512-Fn2mCc3XX0gnnbBYzWOTrZHi5WnF9KvqmB1+KGlUWoJkdioPmFYtg2ALBr6xl2dcnFTz3Vi7/mHpbKSVg/imVg==",
+ "version": "5.49.1",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.49.1.tgz",
+ "integrity": "sha512-jj95WnbKbXsXXngYj28a4zx8jeZx50CN/J4r0CEeax2pbfdsETv/J1K8V9Hbu3DCXnpHz5qAikICuxEooi7eNQ==",
"license": "MIT",
"dependencies": {
"@jridgewell/remapping": "^2.3.4",
@@ -7518,7 +7522,7 @@
"clsx": "^2.1.1",
"devalue": "^5.6.2",
"esm-env": "^1.2.1",
- "esrap": "^2.2.1",
+ "esrap": "^2.2.2",
"is-reference": "^3.0.3",
"locate-character": "^3.0.0",
"magic-string": "^0.30.11",
@@ -7574,9 +7578,9 @@
"license": "MIT"
},
"node_modules/svelte-check": {
- "version": "4.3.5",
- "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.5.tgz",
- "integrity": "sha512-e4VWZETyXaKGhpkxOXP+B/d0Fp/zKViZoJmneZWe/05Y2aqSKj3YN2nLfYPJBQ87WEiY4BQCQ9hWGu9mPT1a1Q==",
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.6.tgz",
+ "integrity": "sha512-uBkz96ElE3G4pt9E1Tw0xvBfIUQkeH794kDQZdAUk795UVMr+NJZpuFSS62vcmO/DuSalK83LyOwhgWq8YGU1Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7709,18 +7713,18 @@
}
},
"node_modules/svelte/node_modules/esrap": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.1.tgz",
- "integrity": "sha512-GiYWG34AN/4CUyaWAgunGt0Rxvr1PTMlGC0vvEov/uOQYWne2bpN03Um+k8jT+q3op33mKouP2zeJ6OlM+qeUg==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.2.tgz",
+ "integrity": "sha512-zA6497ha+qKvoWIK+WM9NAh5ni17sKZKhbS5B3PoYbBvaYHZWoS33zmFybmyqpn07RLUxSmn+RCls2/XF+d0oQ==",
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15"
}
},
"node_modules/svelte2tsx": {
- "version": "0.7.46",
- "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.46.tgz",
- "integrity": "sha512-S++Vw3w47a8rBuhbz4JK0fcGea8tOoX1boT53Aib8+oUO2EKeOG+geXprJVTDfBlvR+IJdf3jIpR2RGwT6paQA==",
+ "version": "0.7.47",
+ "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.47.tgz",
+ "integrity": "sha512-1aw/MFKVPM96OBevJdC12do2an9t5Zwr3Va9amLgTLpJje36ibD1iIHpuqCYWUrdR9vw6g6btKGQPmsqE8ZYCw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8127,6 +8131,16 @@
"typescript": ">=4.8.4 <6.0.0"
}
},
+ "node_modules/undici": {
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-7.20.0.tgz",
+ "integrity": "sha512-MJZrkjyd7DeC+uPZh+5/YaMDxFiiEEaDgbUSVMXayofAkDWF1088CDo+2RPg7B1BuS1qf1vgNE7xqwPxE0DuSQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20.18.1"
+ }
+ },
"node_modules/undici-types": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
@@ -8174,9 +8188,9 @@
}
},
"node_modules/unist-util-visit": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
- "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz",
+ "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==",
"license": "MIT",
"dependencies": {
"@types/unist": "^3.0.0",
@@ -8573,9 +8587,9 @@
}
},
"node_modules/webidl-conversions": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.0.tgz",
- "integrity": "sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz",
+ "integrity": "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
@@ -8590,27 +8604,28 @@
"license": "MIT"
},
"node_modules/whatwg-mimetype": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
- "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz",
+ "integrity": "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==",
"dev": true,
"license": "MIT",
"engines": {
- "node": ">=18"
+ "node": ">=20"
}
},
"node_modules/whatwg-url": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-15.1.0.tgz",
- "integrity": "sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==",
+ "version": "16.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.0.tgz",
+ "integrity": "sha512-9CcxtEKsf53UFwkSUZjG+9vydAsFO4lFHBpJUtjBcoJOCJpKnSJNwCw813zrYJHpCJ7sgfbtOe0V5Ku7Pa1XMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "@exodus/bytes": "^1.11.0",
"tr46": "^6.0.0",
- "webidl-conversions": "^8.0.0"
+ "webidl-conversions": "^8.0.1"
},
"engines": {
- "node": ">=20"
+ "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
}
},
"node_modules/which": {
diff --git a/src/Exceptionless.Web/ClientApp/package.json b/src/Exceptionless.Web/ClientApp/package.json
index bfb309d7a..a8b22d5a7 100644
--- a/src/Exceptionless.Web/ClientApp/package.json
+++ b/src/Exceptionless.Web/ClientApp/package.json
@@ -26,37 +26,37 @@
},
"devDependencies": {
"@chromatic-com/storybook": "^5.0.0",
- "@eslint/compat": "^2.0.1",
+ "@eslint/compat": "^2.0.2",
"@eslint/js": "^9.39.2",
"@iconify-json/lucide": "^1.2.87",
- "@playwright/test": "^1.58.0",
- "@storybook/addon-a11y": "^10.2.1",
- "@storybook/addon-docs": "^10.2.1",
+ "@playwright/test": "^1.58.1",
+ "@storybook/addon-a11y": "^10.2.4",
+ "@storybook/addon-docs": "^10.2.4",
"@storybook/addon-svelte-csf": "^5.0.10",
- "@storybook/sveltekit": "^10.2.1",
+ "@storybook/sveltekit": "^10.2.4",
"@sveltejs/adapter-static": "^3.0.10",
- "@sveltejs/kit": "^2.50.1",
+ "@sveltejs/kit": "^2.50.2",
"@sveltejs/vite-plugin-svelte": "^6.2.4",
"@tailwindcss/vite": "^4.1.18",
- "@tanstack/eslint-plugin-query": "^5.91.3",
+ "@tanstack/eslint-plugin-query": "^5.91.4",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/svelte": "^5.3.1",
"@types/eslint": "^9.6.1",
- "@types/node": "^25.1.0",
+ "@types/node": "^25.2.0",
"@types/throttle-debounce": "^5.0.2",
"cross-env": "^10.1.0",
"eslint": "^9.39.2",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-perfectionist": "^5.4.0",
- "eslint-plugin-storybook": "^10.2.1",
+ "eslint-plugin-storybook": "^10.2.4",
"eslint-plugin-svelte": "^3.14.0",
- "jsdom": "^27.4.0",
+ "jsdom": "^28.0.0",
"prettier": "^3.8.1",
"prettier-plugin-svelte": "^3.4.1",
"prettier-plugin-tailwindcss": "^0.7.2",
- "storybook": "^10.2.1",
- "svelte": "^5.49.0",
- "svelte-check": "^4.3.5",
+ "storybook": "^10.2.4",
+ "svelte": "^5.49.1",
+ "svelte-check": "^4.3.6",
"swagger-typescript-api": "^13.2.16",
"tslib": "^2.8.1",
"typescript": "^5.9.3",
@@ -73,11 +73,11 @@
"@lucide/svelte": "^0.563.1",
"@tanstack/svelte-form": "^1.28.0",
"@tanstack/svelte-query": "^6.0.18",
- "@tanstack/svelte-query-devtools": "^6.0.3",
+ "@tanstack/svelte-query-devtools": "^6.0.4",
"@tanstack/svelte-table": "^9.0.0-alpha.10",
"@types/d3-scale": "^4.0.9",
"@types/d3-shape": "^3.1.8",
- "bits-ui": "^2.15.4",
+ "bits-ui": "^2.15.5",
"clsx": "^2.1.1",
"d3-scale": "^4.0.2",
"dompurify": "^3.3.1",
@@ -87,7 +87,7 @@
"oidc-client-ts": "^3.4.1",
"pretty-ms": "^9.3.0",
"runed": "^0.37.1",
- "shiki": "^3.21.0",
+ "shiki": "^3.22.0",
"svelte-sonner": "^1.0.7",
"svelte-time": "^2.1.0",
"tailwind-merge": "^3.4.0",
From 29a3a194e8a87ea108ee43c31f4f33b8654b010a Mon Sep 17 00:00:00 2001
From: Blake Niemyjski
Date: Mon, 2 Feb 2026 21:15:38 -0600
Subject: [PATCH 03/17] feat: add update scripts for shadcn and skills in
package.json
---
src/Exceptionless.Web/ClientApp/package.json | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/Exceptionless.Web/ClientApp/package.json b/src/Exceptionless.Web/ClientApp/package.json
index a8b22d5a7..ca97a137e 100644
--- a/src/Exceptionless.Web/ClientApp/package.json
+++ b/src/Exceptionless.Web/ClientApp/package.json
@@ -22,7 +22,9 @@
"test": "npm run test:unit -- --run && npm run test:e2e",
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build",
- "upgrade": "ncu -i"
+ "update": "ncu -i",
+ "update:shadcn": "npx shadcn-svelte@latest update",
+ "update:skills": "npx skills update"
},
"devDependencies": {
"@chromatic-com/storybook": "^5.0.0",
From a814b75902bac3fa696e38a97cb78da52735cff6 Mon Sep 17 00:00:00 2001
From: Blake Niemyjski
Date: Mon, 2 Feb 2026 21:19:31 -0600
Subject: [PATCH 04/17] style: update component styles for improved dark mode
support and consistency
---
.../src/lib/features/sessions/api.svelte.ts | 2 +-
.../ui/calendar/calendar-month-select.svelte | 6 +++++-
.../ui/calendar/calendar-year-select.svelte | 6 +++++-
.../components/ui/field/field-error.svelte | 2 +-
.../shared/components/ui/pagination/index.ts | 16 ++++++++--------
.../components/ui/select/select-group.svelte | 2 +-
.../components/ui/separator/separator.svelte | 2 +-
.../components/ui/tooltip/tooltip-content.svelte | 2 +-
.../ClientApp/src/lib/hooks/is-mobile.svelte.ts | 6 +++---
9 files changed, 26 insertions(+), 18 deletions(-)
diff --git a/src/Exceptionless.Web/ClientApp/src/lib/features/sessions/api.svelte.ts b/src/Exceptionless.Web/ClientApp/src/lib/features/sessions/api.svelte.ts
index 01391d726..2fb17b333 100644
--- a/src/Exceptionless.Web/ClientApp/src/lib/features/sessions/api.svelte.ts
+++ b/src/Exceptionless.Web/ClientApp/src/lib/features/sessions/api.svelte.ts
@@ -82,7 +82,7 @@ export function getOrganizationSessionsCountQuery(request: GetOrganizationSessio
queryClient,
queryFn: async ({ signal }: { signal: AbortSignal }) => {
const client = useFetchClient();
- const response = await client.getJSON(`/organizations/${request.route.organizationId}/events/sessions/count`, {
+ const response = await client.getJSON(`/organizations/${request.route.organizationId}/events/count`, {
params: {
...(DEFAULT_OFFSET ? { offset: DEFAULT_OFFSET } : {}),
...request.params
diff --git a/src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/ui/calendar/calendar-month-select.svelte b/src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/ui/calendar/calendar-month-select.svelte
index 8d88deb55..664afab8d 100644
--- a/src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/ui/calendar/calendar-month-select.svelte
+++ b/src/Exceptionless.Web/ClientApp/src/lib/features/shared/components/ui/calendar/calendar-month-select.svelte
@@ -18,7 +18,11 @@
className
)}
>
-
+
{#snippet child({ props, monthItems, selectedMonthItem })}
-
+
Date: Sat, 14 Feb 2026 15:29:02 -0600
Subject: [PATCH 17/17] Fixed linting
---
.../ClientApp/src/lib/features/organizations/api.svelte.ts | 4 ----
1 file changed, 4 deletions(-)
diff --git a/src/Exceptionless.Web/ClientApp/src/lib/features/organizations/api.svelte.ts b/src/Exceptionless.Web/ClientApp/src/lib/features/organizations/api.svelte.ts
index 10dc145da..b3be2e34c 100644
--- a/src/Exceptionless.Web/ClientApp/src/lib/features/organizations/api.svelte.ts
+++ b/src/Exceptionless.Web/ClientApp/src/lib/features/organizations/api.svelte.ts
@@ -359,10 +359,6 @@ export function postOrganization() {
onSuccess: (organization: ViewOrganization) => {
queryClient.setQueryData(queryKeys.id(organization.id, 'stats'), organization);
queryClient.setQueryData(queryKeys.id(organization.id, undefined), organization);
- // Invalidate organizations list so it includes the new org
- queryClient.invalidateQueries({ queryKey: queryKeys.type });
- // Invalidate user query since organization_ids changed on the backend
- queryClient.invalidateQueries({ queryKey: userQueryKeys });
}
}));
}