fix: convert areachart to working barchart in trend-chart.svelte and fixed empty data issue (#930)

Co-authored-by: richarddkenneth <[email protected]>
This commit is contained in:
Richard Kenneth
2026-08-18 17:20:57 +01:00
committed by GitHub
co-authored by richarddkenneth
parent 913db2a525
commit ce663fe365
9 changed files with 210 additions and 169 deletions
@@ -26,37 +26,80 @@
const chartConfig = $derived({
views: {
label: $t('analytics.trend.views'),
color: 'var(--primary)'
color: 'var(--chart-4)'
},
enrollments: {
label: $t('analytics.trend.enrollments'),
color: 'var(--chart-2, var(--primary))'
color: 'var(--chart-2)'
}
} satisfies ChartConfig);
const series = [
{ key: 'views', value: 'views', label: 'Views', color: 'var(--color-views)' },
{ key: 'enrollments', value: 'enrollments', label: 'Enrollments', color: 'var(--color-enrollments)' }
];
const series = $derived([
{
key: 'views',
label: chartConfig.views.label,
color: chartConfig.views.color
},
{
key: 'enrollments',
label: chartConfig.enrollments.label,
color: chartConfig.enrollments.color
}
]);
const hasData = $derived(
(data?.sparkline.length ?? 0) > 0 && data?.sparkline.some((r) => r.views > 0 || r.enrollments > 0)
let chartData = $derived(
data?.sparkline.map((d) => {
const [year, month, day] = d.date.split('-');
const date = new Date(Number(year), Number(month) - 1, Number(day));
return { ...d, date };
})
);
const hasData = $derived((chartData?.length ?? 0) > 0 && chartData?.some((r) => r.views > 0 || r.enrollments > 0));
</script>
<AnalyticsPanelCard title={$t('analytics.trend.heading')} description={$t('analytics.trend.description')}>
{#snippet children()}
{#if loading && !data}
{#if loading && !chartData}
<div class="flex h-[280px] items-center justify-center">
<Spinner class="ui:text-muted-foreground size-6" />
</div>
{:else if browser && hasData && data}
{:else if browser && hasData && chartData}
{#await loadChart() then C}
<C.ChartContainer class="h-[280px] w-full" config={chartConfig}>
<C.AreaChart data={data.sparkline} x="date" axis="x" {series} />
<C.BarChart
data={chartData}
xScale={C.scaleBand().padding(0.25)}
x="date"
axis="x"
seriesLayout="group"
legend
{series}
props={{
xAxis: {
format: (d: Date) =>
d.toLocaleDateString('en-US', {
month: 'short',
day: 'numeric'
})
}
}}
>
{#snippet tooltip()}
<C.Tooltip
labelFormatter={(d: Date) =>
d.toLocaleDateString('en-US', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric'
})}
/>
{/snippet}
</C.BarChart>
</C.ChartContainer>
{/await}
{:else if hasData && data}
{:else if hasData && chartData}
<div class="flex h-[280px] items-center justify-center">
<Spinner class="ui:text-muted-foreground size-6" />
</div>
@@ -1,5 +1,4 @@
<script lang="ts">
import { onMount } from 'svelte';
import { t } from '$lib/utils/functions/translations';
import { currentOrg } from '$lib/utils/store/org';
import * as Page from '@cio/ui/base/page';
@@ -15,9 +14,8 @@
analyticsApi
} from '$features/analytics';
onMount(() => {
const orgId = $currentOrg.id;
if (orgId) analyticsApi.ensureFetched(orgId);
$effect(() => {
analyticsApi.ensureFetched($currentOrg.id);
});
function handleRangeChange(days: 7 | 30 | 90) {
@@ -1,5 +1,4 @@
<script lang="ts">
import { onMount } from 'svelte';
import { t } from '$lib/utils/functions/translations';
import { currentOrg } from '$lib/utils/store/org';
import * as Page from '@cio/ui/base/page';
@@ -10,9 +9,8 @@
import { StatusTiles, CourseBreakdown, LearnersTable, complianceApi } from '$features/compliance';
import type { ComplianceLearnerRow } from '$features/compliance/utils/types';
onMount(() => {
const orgId = $currentOrg.id;
if (orgId) complianceApi.ensureFetched(orgId);
$effect(() => {
complianceApi.ensureFetched($currentOrg.id);
});
function handleRefresh() {
-3
View File
@@ -56,9 +56,6 @@
"esbuild",
"@tailwindcss/oxide"
],
"patchedDependencies": {
"[email protected]": "patches/[email protected]"
},
"overrides": {
"zod": "4.2.1",
"miniflare>zod": "3.22.3",
+1 -1
View File
@@ -32,7 +32,7 @@
"bits-ui": "^2.16.1",
"clsx": "^2.1.1",
"jsrepo": "^3.5.1",
"layerchart": "2.0.0-next.27",
"layerchart": "2.2.0",
"mode-watcher": "^1.1.0",
"runed": "^0.37.1",
"shiki": "^3.22.0",
+33 -20
View File
@@ -1,8 +1,8 @@
<script lang="ts">
import { getChartContext, Tooltip as TooltipPrimitive } from 'layerchart';
import { cn, type WithElementRef, type WithoutChildren } from '../../tools';
import type { HTMLAttributes } from 'svelte/elements';
import { getPayloadConfigFromPayload, useChart, type TooltipPayload } from './chart-utils';
import { getTooltipContext, Tooltip as TooltipPrimitive } from 'layerchart';
import type { Snippet } from 'svelte';
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -48,27 +48,39 @@
} = $props();
const chart = useChart();
const tooltipCtx = getTooltipContext();
const chartCtx = getChartContext();
const visibleSeries = $derived(chartCtx.tooltip.series.filter((s) => s.value !== undefined));
const formattedLabel = $derived.by(() => {
if (hideLabel || !tooltipCtx.payload?.length) return null;
if (hideLabel || !visibleSeries?.length) return null;
const [item] = tooltipCtx.payload;
const key = labelKey ?? item?.label ?? item?.name ?? 'value';
const [item] = visibleSeries;
const tooltipData = chartCtx.tooltip.data;
const itemConfig = getPayloadConfigFromPayload(chart.config, item, key);
const dataLabel = tooltipData != null ? chartCtx.x(tooltipData) : undefined;
const value =
!labelKey && typeof label === 'string'
? (chart.config[label as keyof typeof chart.config]?.label ?? label)
: (itemConfig?.label ?? item.label);
const key = labelKey ?? item?.label ?? 'value';
let value: unknown;
if (!labelKey && typeof label === 'string') {
value = chart.config[label as keyof typeof chart.config]?.label ?? label;
} else {
const itemConfig = getPayloadConfigFromPayload(
chart.config,
item,
key,
tooltipData as Record<string, unknown> | null
);
value = itemConfig?.label ?? dataLabel;
}
if (value === undefined) return null;
if (!labelFormatter) return value;
return labelFormatter(value, tooltipCtx.payload);
return labelFormatter(value, visibleSeries);
});
const nestLabel = $derived(tooltipCtx.payload.length === 1 && indicator !== 'dot');
const nestLabel = $derived(visibleSeries.length === 1 && indicator !== 'dot');
</script>
{#snippet TooltipLabel()}
@@ -85,6 +97,7 @@
<TooltipPrimitive.Root variant="none">
<div
bind:this={ref}
class={cn(
'ui:border-border/50 ui:bg-background ui:grid ui:min-w-[9rem] ui:items-start ui:gap-1.5 ui:rounded-lg ui:border ui:px-2.5 ui:py-1.5 ui:text-xs ui:shadow-xl',
className
@@ -95,23 +108,23 @@
{@render TooltipLabel()}
{/if}
<div class="ui:grid ui:gap-1.5">
{#each tooltipCtx.payload as item, i (item.key + i)}
{@const key = `${nameKey || item.key || item.name || 'value'}`}
{@const itemConfig = getPayloadConfigFromPayload(chart.config, item, key)}
{@const indicatorColor = color || item.payload?.color || item.color}
{#each visibleSeries as item, i (item.key + i)}
{@const key = `${nameKey || item.key || item.label || 'value'}`}
{@const itemConfig = getPayloadConfigFromPayload(chart.config, item, key, chartCtx.tooltip.data)}
{@const indicatorColor = color || item.config?.color || item.color}
<div
class={cn(
'ui:[&>svg]:text-muted-foreground ui:flex ui:w-full ui:flex-wrap ui:items-stretch ui:gap-2 ui:[&>svg]:size-2.5',
indicator === 'dot' && 'ui:items-center'
)}
>
{#if formatter && item.value !== undefined && item.name}
{#if formatter && item.value !== undefined && item.label}
{@render formatter({
value: item.value,
name: item.name,
name: item.label,
item,
index: i,
payload: tooltipCtx.payload
payload: visibleSeries
})}
{:else}
{#if itemConfig?.icon}
@@ -138,7 +151,7 @@
{@render TooltipLabel()}
{/if}
<span class="ui:text-muted-foreground">
{itemConfig?.label || item.name}
{itemConfig?.label || item.label}
</span>
</div>
{#if item.value !== undefined}
+19 -13
View File
@@ -1,5 +1,5 @@
import type { Tooltip } from 'layerchart';
import { getContext, setContext, type Component, type ComponentProps, type Snippet } from 'svelte';
import { getContext, setContext, type Snippet } from 'svelte';
import type { ChartConfig } from './types';
export type { ChartConfig } from './types';
@@ -14,31 +14,37 @@ export type ChartLegendItem = {
export type ExtractSnippetParams<T> = T extends Snippet<[infer P]> ? P : never;
export type TooltipPayload = ExtractSnippetParams<ComponentProps<typeof Tooltip.Root>['children']>['payload'][number];
export type TooltipPayload = Tooltip.TooltipSeries;
// Helper to extract item config from a payload.
export function getPayloadConfigFromPayload(config: ChartConfig, payload: TooltipPayload, key: string) {
export function getPayloadConfigFromPayload(
config: ChartConfig,
payload: TooltipPayload,
key: string,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
data?: Record<string, any> | null
) {
if (typeof payload !== 'object' || payload === null) return undefined;
const payloadPayload =
'payload' in payload && typeof payload.payload === 'object' && payload.payload !== null
? payload.payload
: undefined;
const payloadConfig =
'config' in payload && typeof payload.config === 'object' && payload.config !== null ? payload.config : undefined;
let configLabelKey: string = key;
if (payload.key === key) {
configLabelKey = payload.key;
} else if (payload.name === key) {
configLabelKey = payload.name;
} else if (payload.label === key) {
configLabelKey = payload.label;
} else if (key in payload && typeof payload[key as keyof typeof payload] === 'string') {
configLabelKey = payload[key as keyof typeof payload] as string;
} else if (
payloadPayload !== undefined &&
key in payloadPayload &&
typeof payloadPayload[key as keyof typeof payloadPayload] === 'string'
payloadConfig !== undefined &&
key in payloadConfig &&
typeof payloadConfig[key as keyof typeof payloadConfig] === 'string'
) {
configLabelKey = payloadPayload[key as keyof typeof payloadPayload] as string;
configLabelKey = payloadConfig[key as keyof typeof payloadConfig] as string;
} else if (data != null && key in data && typeof data[key] === 'string') {
configLabelKey = data[key] as string;
}
return configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];
-23
View File
@@ -1,23 +0,0 @@
diff --git a/dist/components/MonthPath.svelte b/dist/components/MonthPath.svelte
index 3ca6c1ec5bf10f2ebacceb0743d7844860bac057..5e3d4246a5d66b4643839c749eee00c8319c788c 100644
--- a/dist/components/MonthPath.svelte
+++ b/dist/components/MonthPath.svelte
@@ -30,7 +30,7 @@
</script>
<script lang="ts">
- import { timeWeek, timeMonth, timeYear } from 'd3-time';
+ import { timeWeek, timeYear } from 'd3-time';
import { cls } from '@layerstack/tailwind';
import { endOfInterval } from '@layerstack/utils';
import { layerClass } from '../utils/attributes.js';
diff --git a/dist/utils/ticks.js b/dist/utils/ticks.js
index 9f82ad72a077c08b55f32c8fd8fa6c5d5f212d3f..5b56ed837beef7054324711853eee46c5819f9f9 100644
--- a/dist/utils/ticks.js
+++ b/dist/utils/ticks.js
@@ -1,4 +1,4 @@
-import { timeYear, timeMonth, timeDay, timeTicks } from 'd3-time';
+import { timeYear, timeDay, timeTicks } from 'd3-time';
import { format, Duration, isLiteralObject, DateToken, } from '@layerstack/utils';
import { isScaleBand, isScaleTime } from './scales.svelte.js';
export function getDurationFormat(duration, options = {
+98 -89
View File
@@ -9,11 +9,6 @@ overrides:
miniflare>zod: 3.22.3
blume>zod: ^3.24.0
patchedDependencies:
[email protected]:
hash: 51dabc4b4462058655e01199047915e5582cfd0492e97d6ecd0c244dc17e5a3a
path: patches/[email protected]
importers:
.:
@@ -624,7 +619,7 @@ importers:
version: 0.4.9([email protected](@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@shikijs/twoslash':
specifier: 4.3.1
version: 4.3.1(typescript@5.9.3)
version: 4.3.1(typescript@6.0.3)
'@tailwindcss/typography':
specifier: 0.5.19
version: 0.5.19([email protected])
@@ -636,7 +631,7 @@ importers:
version: 7.0.9(@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
blume:
specifier: 1.2.0
version: 1.2.0(4833f745f9fd8f626b4a7791f185a353)
version: 1.2.0(864af55737aed5e342af6da019f32ece)
mermaid:
specifier: ^11.16.0
version: 11.16.0
@@ -1351,7 +1346,7 @@ importers:
version: 10.1.10(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@storybook/sveltekit':
specifier: ^8.4.2
version: 8.6.15(@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@5.9.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
version: 8.6.15(@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@6.0.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@storybook/test':
specifier: ^8.4.2
version: 8.6.14([email protected]([email protected])([email protected])([email protected]))
@@ -1390,7 +1385,7 @@ importers:
version: 4.21.0
typescript-svelte-plugin:
specifier: ^0.3.50
version: 0.3.50([email protected])(typescript@5.9.3)
version: 0.3.50([email protected])(typescript@6.0.3)
vite:
specifier: ^7.1.4
version: 7.3.0(@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
@@ -1563,8 +1558,8 @@ importers:
specifier: ^3.5.1
version: 3.5.1(@emnapi/[email protected])(@emnapi/[email protected])([email protected])([email protected]([email protected]))
layerchart:
specifier: 2.0.0-next.27
version: 2.0.0-next.27(patch_hash=51dabc4b4462058655e01199047915e5582cfd0492e97d6ecd0c244dc17e5a3a)([email protected])
specifier: 2.2.0
version: 2.2.0(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
mode-watcher:
specifier: ^1.1.0
version: 1.1.0([email protected])
@@ -2984,12 +2979,11 @@ packages:
resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==}
engines: {node: '>=20.19.0'}
'@dagrejs/dagre@1.1.8':
resolution: {integrity: sha512-5SEDlndt4W/LaVzPYJW+bSmSEZc9EzTf8rJ20WCKvjS5EAZAN0b+x0Yww7VMT4R3Wootkg+X9bUfUxazYw6Blw==}
'@dagrejs/dagre@2.0.4':
resolution: {integrity: sha512-J6vCWTNpicHF4zFlZG1cS5DkGzMr9941gddYkakjrg3ZNev4bbqEgLHFTWiFrcJm7UCRu7olO3K6IRDd9gSGhA==}
'@dagrejs/graphlib@2.2.4':
resolution: {integrity: sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw==}
engines: {node: '>17.0.0'}
'@dagrejs/graphlib@3.0.4':
resolution: {integrity: sha512-HxZ7fCvAwTLCWCO0WjDkzAFQze8LdC6iOpKbetDKHIuDfIgMlIzYzqZ4nxwLlclQX+3ZVeZ1K2OuaOE2WWcyOg==}
'@drizzle-team/[email protected]':
resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==}
@@ -4828,17 +4822,20 @@ packages:
'@jridgewell/[email protected]':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
'@layerstack/[email protected]2':
resolution: {integrity: sha512-dndWTlYu8b1u6vw2nrO7NssccoACArGG75WoNlyVC13KuENZlWdKE9Q79/wlnbq00NeQMNKMjJwRMsrKQj2ULA==}
'@layerstack/[email protected]8':
resolution: {integrity: sha512-gxPzCnJ1c9LTfWtRqLUzefCx+k59ZpxDUQ2XB+LokveZQPe7IDSOwHaBOEMlaGoGrtwc3Ft8dSZq+2WT2o9u/g==}
'@layerstack/[email protected].17':
resolution: {integrity: sha512-z7e6mPJnypD80LEI/UDuH0bI6s8/nut06MB7rEkRcEfHJekhKSJgFhMnrYzLED7Mc2gTTD0X/wcYlakauWlU8A==}
'@layerstack/[email protected].23':
resolution: {integrity: sha512-7O4umv+gXwFfs3/vjzFWYHNXGwYnnjBapWJ5Y+9u99F4eVk6rh4ocNwqkqQNkpMZ5tUJBlRTWjPE1So6+hEzIg==}
'@layerstack/[email protected]5':
resolution: {integrity: sha512-7tqKE3OV7/ybeDOORX++USYYCBJa7IgTya2czFpzbgXGo7CQDVyuv+0J1DggjRcEqhhXQA4MUhgnhcRaZvHxWg==}
'@layerstack/[email protected].21':
resolution: {integrity: sha512-Qgp2EpmEHmjtura8MQzWicR6ztBRSsRvddakFtx9ShrLMz6jWzd6bCMVVRu44Q3ZOrtXmSu4QxjCZWu1ytvuPg==}
'@layerstack/[email protected]2':
resolution: {integrity: sha512-fhGZUlSr3N+D44BYm37WKMGSEFyZBW+dwIqtGU8Cl54mR4TLQ/UwyGhdpgIHyH/x/8q1abE0fP0Dn6ZsrDE3BA==}
'@layerstack/[email protected]8':
resolution: {integrity: sha512-EYILHpfBRYMMEahajInu9C2AXQom5IcAEdtCeucD3QIl/fdDgRbtzn6/8QW9ewumfyNZetdUvitOksmI1+gZYQ==}
'@layerstack/[email protected]':
resolution: {integrity: sha512-HyXCEz9pge4rFWklrSgFr3YIwdE1gP8WM6GPetmnKPDfYLF1/oetRFKI9FqiE+dw4brnULGPKJsVhjM3vQfD4A==}
'@lucide/[email protected]':
resolution: {integrity: sha512-RlAtWefx9MdpXaOMbx3Qv3/NqpeZKOIPxN2D0RBN2+op0opKly8VgYEEWZTT6Ow/zf7UwyTg6/0ExJlsVLK+8g==}
@@ -11617,8 +11614,8 @@ packages:
resolution: {integrity: sha512-3BeXMoiOhpOwu62CiVpO6lxfq4eS6KMYfQdMsN/2kUCRNuF2YiEr7u0HLHaQU+O4Xu8YXE3bHVkwaQ85i72EuA==}
engines: {node: '>=20.0.0'}
layerchart@2.0.0-next.27:
resolution: {integrity: sha512-yt28xU8WzXq0AliX7eiC0JKZGQtO8M9FmHvt8sESNitSc/yC+fYeTghaO9lMRwcYCmi6D1NjbFyD9mWFeazNIQ==}
layerchart@2.2.0:
resolution: {integrity: sha512-IarOANUPAqv+P9UESpQhzlkiM36oQhUACZuE3T9wbFHoD8FtSBdr/UNRC4Aks2UBN/OEy/dE+xBypZ6RFoFLMg==}
peerDependencies:
svelte: ^5.0.0
@@ -16124,10 +16121,10 @@ snapshots:
is-docker: 4.0.0
package-manager-detector: 1.7.0
'@astrojs/[email protected](@aws-sdk/[email protected])(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected](@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected])([email protected](typescript@5.9.3))([email protected]([email protected])([email protected]))':
'@astrojs/[email protected](@aws-sdk/[email protected])(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected](@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected])([email protected](typescript@6.0.3))([email protected]([email protected])([email protected]))':
dependencies:
'@astrojs/internal-helpers': 0.10.1
'@vercel/analytics': 1.6.1(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@5.9.3))
'@vercel/analytics': 1.6.1(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@6.0.3))
'@vercel/functions': 3.7.5(@aws-sdk/[email protected])([email protected]([email protected])([email protected]))
'@vercel/nft': 1.10.2([email protected])([email protected])
'@vercel/routing-utils': 5.3.3
@@ -17934,11 +17931,11 @@ snapshots:
'@csstools/[email protected]': {}
'@dagrejs/dagre@1.1.8':
'@dagrejs/dagre@2.0.4':
dependencies:
'@dagrejs/graphlib': 2.2.4
'@dagrejs/graphlib': 3.0.4
'@dagrejs/graphlib@2.2.4': {}
'@dagrejs/graphlib@3.0.4': {}
'@drizzle-team/[email protected]': {}
@@ -19274,30 +19271,34 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
'@layerstack/[email protected]2':
'@layerstack/[email protected]8':
dependencies:
'@floating-ui/dom': 1.7.4
'@layerstack/utils': 2.0.0-next.12
'@layerstack/utils': 2.0.0-next.18
d3-scale: 4.0.2
'@layerstack/[email protected].17':
'@layerstack/[email protected].23':
dependencies:
'@layerstack/utils': 2.0.0-next.12
'@layerstack/utils': 2.0.0-next.18
'@layerstack/[email protected]5':
'@layerstack/[email protected].21':
dependencies:
'@layerstack/utils': 2.0.0-next.12
'@layerstack/utils': 2.0.0-next.19
clsx: 2.1.1
d3-array: 3.2.4
lodash-es: 4.17.22
tailwind-merge: 3.4.0
'@layerstack/[email protected]2':
'@layerstack/[email protected]8':
dependencies:
d3-array: 3.2.4
d3-time: 3.1.0
d3-time-format: 4.1.0
'@layerstack/[email protected]':
dependencies:
d3-array: 3.2.4
d3-time: 3.1.0
d3-time-format: 4.1.0
lodash-es: 4.17.22
'@lucide/[email protected]([email protected])':
dependencies:
@@ -20677,15 +20678,6 @@ snapshots:
'@shikijs/core': 4.3.1
'@shikijs/types': 4.3.1
'@shikijs/[email protected]([email protected])':
dependencies:
'@shikijs/core': 4.3.1
'@shikijs/types': 4.3.1
twoslash: 0.3.9([email protected])
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
'@shikijs/[email protected]([email protected])':
dependencies:
'@shikijs/core': 4.3.1
@@ -21345,7 +21337,7 @@ snapshots:
- rollup
- webpack
'@storybook/[email protected](@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@5.9.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))':
'@storybook/[email protected](@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@6.0.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))':
dependencies:
'@storybook/builder-vite': 8.6.15([email protected]([email protected])([email protected])([email protected]))([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@storybook/svelte': 8.6.15([email protected]([email protected])([email protected])([email protected]))([email protected])
@@ -21353,7 +21345,7 @@ snapshots:
magic-string: 0.30.21
storybook: 8.6.15([email protected])([email protected])([email protected])
svelte: 5.46.0
svelte-preprocess: 5.1.4(@babel/[email protected])([email protected]([email protected])([email protected](@types/[email protected])(typescript@5.9.3)))([email protected])([email protected])([email protected])([email protected])
svelte-preprocess: 5.1.4(@babel/[email protected])([email protected]([email protected])([email protected](@types/[email protected])(typescript@6.0.3)))([email protected])([email protected])([email protected])([email protected])
svelte2tsx: 0.7.46([email protected])([email protected])
sveltedoc-parser: 4.2.1
ts-dedent: 2.2.0
@@ -21394,12 +21386,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@storybook/[email protected](@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@5.9.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))':
'@storybook/[email protected](@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@6.0.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))':
dependencies:
'@storybook/addon-actions': 8.6.15([email protected]([email protected])([email protected])([email protected]))
'@storybook/builder-vite': 8.6.15([email protected]([email protected])([email protected])([email protected]))([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@storybook/svelte': 8.6.15([email protected]([email protected])([email protected])([email protected]))([email protected])
'@storybook/svelte-vite': 8.6.15(@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@5.9.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@storybook/svelte-vite': 8.6.15(@babel/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected]([email protected])([email protected](@types/[email protected])(typescript@6.0.3)))([email protected])([email protected])([email protected]([email protected])([email protected])([email protected]))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
storybook: 8.6.15([email protected])([email protected])([email protected])
svelte: 5.46.0
vite: 7.3.0(@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
@@ -23256,13 +23248,6 @@ snapshots:
'@typescript-eslint/types': 8.50.1
eslint-visitor-keys: 4.2.1
'@typescript/[email protected]([email protected])':
dependencies:
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
'@typescript/[email protected]([email protected])':
dependencies:
debug: 4.4.3
@@ -23277,19 +23262,19 @@ snapshots:
d3-selection: 3.0.0
d3-transition: 3.0.1([email protected])
'@vercel/[email protected](@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@5.9.3))':
'@vercel/[email protected](@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@6.0.3))':
optionalDependencies:
'@sveltejs/kit': 2.49.2(@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
react: 19.2.3
svelte: 5.46.0
vue: 3.5.26(typescript@5.9.3)
vue: 3.5.26(typescript@6.0.3)
'@vercel/[email protected](@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@5.9.3))':
'@vercel/[email protected](@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@6.0.3))':
optionalDependencies:
'@sveltejs/kit': 2.49.2(@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
react: 19.2.3
svelte: 5.46.0
vue: 3.5.26(typescript@5.9.3)
vue: 3.5.26(typescript@6.0.3)
'@vercel/[email protected]':
dependencies:
@@ -24248,14 +24233,14 @@ snapshots:
[email protected]: {}
[email protected](4833f745f9fd8f626b4a7791f185a353):
[email protected](864af55737aed5e342af6da019f32ece):
dependencies:
'@astrojs/check': 0.9.9([email protected])([email protected])
'@astrojs/markdown-satteri': 0.3.4
'@astrojs/mdx': 7.0.3(@astrojs/[email protected])([email protected](@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@astrojs/node': 11.0.2([email protected](@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@astrojs/react': 6.0.1(@types/[email protected])(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected])([email protected])([email protected]([email protected]))([email protected])([email protected])([email protected])([email protected])
'@astrojs/vercel': 11.0.3(@aws-sdk/[email protected])(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected](@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected])([email protected](typescript@5.9.3))([email protected]([email protected])([email protected]))
'@astrojs/vercel': 11.0.3(@aws-sdk/[email protected])(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected](@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))([email protected])([email protected])([email protected])([email protected])([email protected](typescript@6.0.3))([email protected]([email protected])([email protected]))
'@clack/prompts': 1.7.0
'@iconify-json/lucide': 1.2.117
'@iconify/types': 2.0.0
@@ -24270,7 +24255,7 @@ snapshots:
'@shikijs/twoslash': 4.3.1([email protected])
'@tailwindcss/typography': 0.5.20([email protected])
'@tailwindcss/vite': 4.1.18([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected]))
'@vercel/analytics': 2.0.1(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@5.9.3))
'@vercel/analytics': 2.0.1(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])([email protected](typescript@6.0.3))
ai: 5.0.212([email protected])
astro: 7.0.9(@astrojs/[email protected])(@emnapi/[email protected])(@emnapi/[email protected])(@types/[email protected])(@vercel/[email protected](@aws-sdk/[email protected])([email protected]([email protected])([email protected])))([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
babel-plugin-react-compiler: 1.0.0
@@ -27707,15 +27692,18 @@ snapshots:
[email protected]: {}
layerchart@2.0.0-next.27(patch_hash=51dabc4b4462058655e01199047915e5582cfd0492e97d6ecd0c244dc17e5a3a)([email protected]):
layerchart@2.2.0(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected]):
dependencies:
'@dagrejs/dagre': 1.1.8
'@layerstack/svelte-actions': 1.0.1-next.12
'@layerstack/svelte-state': 0.1.0-next.17
'@layerstack/tailwind': 2.0.0-next.15
'@layerstack/utils': 2.0.0-next.12
'@dagrejs/dagre': 2.0.4
'@layerstack/svelte-actions': 1.0.1-next.18
'@layerstack/svelte-state': 0.1.0-next.23
'@layerstack/tailwind': 2.0.0-next.21
'@layerstack/utils': 2.0.0-next.19
'@types/d3-contour': 3.0.6
d3-array: 3.2.4
d3-chord: 3.0.1
d3-color: 3.1.0
d3-contour: 4.0.2
d3-delaunay: 6.0.4
d3-dsv: 3.0.1
d3-force: 3.0.0
@@ -27725,6 +27713,7 @@ snapshots:
d3-interpolate: 3.0.1
d3-interpolate-path: 2.3.0
d3-path: 3.1.0
d3-polygon: 3.0.1
d3-quadtree: 3.0.1
d3-random: 3.0.1
d3-sankey: 0.12.3
@@ -27733,10 +27722,12 @@ snapshots:
d3-shape: 3.2.0
d3-tile: 1.0.0
d3-time: 3.1.0
lodash-es: 4.17.22
memoize: 10.2.0
runed: 0.28.0([email protected])
runed: 0.37.1(@sveltejs/[email protected](@opentelemetry/[email protected])(@sveltejs/[email protected]([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected](@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])))([email protected])([email protected])
svelte: 5.46.0
transitivePeerDependencies:
- '@sveltejs/kit'
- zod
[email protected]: {}
@@ -29337,13 +29328,13 @@ snapshots:
postcss: 8.5.6
ts-node: 10.9.2(@types/[email protected])([email protected])
[email protected]([email protected])([email protected](@types/[email protected])(typescript@5.9.3)):
[email protected]([email protected])([email protected](@types/[email protected])(typescript@6.0.3)):
dependencies:
lilconfig: 3.1.3
yaml: 2.8.2
optionalDependencies:
postcss: 8.5.19
ts-node: 10.9.2(@types/[email protected])(typescript@5.9.3)
ts-node: 10.9.2(@types/[email protected])(typescript@6.0.3)
optional: true
[email protected]([email protected])([email protected](@types/[email protected])([email protected])):
@@ -30821,7 +30812,7 @@ snapshots:
svelte: 5.46.0
tslib: 2.8.1
[email protected](@babel/[email protected])([email protected]([email protected])([email protected](@types/[email protected])(typescript@5.9.3)))([email protected])([email protected])([email protected])([email protected]):
[email protected](@babel/[email protected])([email protected]([email protected])([email protected](@types/[email protected])(typescript@6.0.3)))([email protected])([email protected])([email protected])([email protected]):
dependencies:
'@types/pug': 2.0.10
detect-indent: 6.1.0
@@ -30832,7 +30823,7 @@ snapshots:
optionalDependencies:
'@babel/core': 7.29.0
postcss: 8.5.19
postcss-load-config: 4.0.2([email protected])([email protected](@types/[email protected])(typescript@5.9.3))
postcss-load-config: 4.0.2([email protected])([email protected](@types/[email protected])(typescript@6.0.3))
sass: 1.97.1
typescript: 5.9.3
@@ -30908,6 +30899,13 @@ snapshots:
svelte: 5.46.0
typescript: 5.9.3
[email protected]([email protected])([email protected]):
dependencies:
dedent-js: 1.0.1
scule: 1.3.0
svelte: 5.46.0
typescript: 6.0.3
[email protected]:
dependencies:
'@jridgewell/remapping': 2.3.5
@@ -31273,6 +31271,25 @@ snapshots:
yn: 3.1.1
optional: true
[email protected](@types/[email protected])([email protected]):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.12
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 24.10.4
acorn: 8.15.0
acorn-walk: 8.3.4
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
typescript: 6.0.3
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
optional: true
[email protected]:
dependencies:
chokidar: 3.6.0
@@ -31325,14 +31342,6 @@ snapshots:
[email protected]: {}
[email protected]([email protected]):
dependencies:
'@typescript/vfs': 1.6.4([email protected])
twoslash-protocol: 0.3.9
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
[email protected]([email protected]):
dependencies:
'@typescript/vfs': 1.6.4([email protected])
@@ -31401,10 +31410,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
[email protected]([email protected])(typescript@5.9.3):
[email protected]([email protected])(typescript@6.0.3):
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
svelte2tsx: 0.7.46([email protected])(typescript@5.9.3)
svelte2tsx: 0.7.46([email protected])(typescript@6.0.3)
transitivePeerDependencies:
- svelte
- typescript