diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4497216f..1fe2cdd1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -53,7 +53,7 @@ jobs: version: ${{ env.PNPM_VERSION }} - name: Setup Node.js - uses: actions/setup-node@v6 + uses: actions/setup-node@v7 with: node-version: ${{ env.NODE_VERSION }} cache: pnpm diff --git a/.prettierignore b/.prettierignore index 2e2db8a7..4498348d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1,2 @@ apps/extension/scripts/release-readiness/policies/*.json +apps/extension/tests/mv3/scenarios.v1.json diff --git a/AGENTS.md b/AGENTS.md index 07754d16..ad360398 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -464,3 +464,17 @@ Tout le code dans `src/dev/` est derrière `import.meta.env.DEV` et n'est jamais 11. **Importer du Shell depuis le Core** — `core/` ne doit JAMAIS importer depuis `shell/` 12. **Utiliser `Date.now()` ou `new Date()` dans le Core** — Injecter via paramètre depuis le Shell 13. **Mettre de l'I/O dans le Core** — Pas de `fetch`, `indexedDB`, `chrome.*` dans `core/` + +## Cursor Cloud specific instructions + +Environnement : Node ≥22 et pnpm 10.x sont préinstallés. Le script de mise à jour lance `pnpm install`, donc les dépendances sont déjà présentes au démarrage d'une session. + +Commandes standards (voir `package.json` racine et `README.md`) : `pnpm lint`, `pnpm test`, `pnpm build` — toutes passent en l'état (le lint ne renvoie que des warnings, 0 erreur). + +Lancer le produit principal (extension Chrome) sans navigateur : + +- `pnpm --filter @pulse/extension dev` (ou `pnpm dev` à la racine) sert le side panel sur le port **5176** (`strictPort`, cf. `apps/extension/vite.config.ts`). +- Ouvrir `http://localhost:5176/src/sidepanel/index.html` (la racine `/` renvoie 404, c'est normal). En dev, les APIs `chrome.*` sont stubées automatiquement et le feed est peuplé de missions mock — aucune extension chargée ni navigateur MV3 requis. +- `Ctrl+Shift+D` ouvre le Dev Panel (injection de missions, toggle états, logs bridge). + +Services optionnels non disponibles par défaut : `pnpm dev:local` / `pnpm supabase:*` nécessitent **Docker + Supabase CLI**, qui ne sont PAS installés dans l'environnement cloud. Les apps `landing` (5173) et `dashboard` (5174) buildent et démarrent sans Supabase (auth/sync désactivés) ; seul le noyau extension est requis pour développer/tester le produit principal. diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index fa5ae143..4379a489 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -16,21 +16,21 @@ "dependencies": { "@pulse/domain": "workspace:*", "@pulse/ui": "workspace:*", - "@supabase/ssr": "^0.12.0", - "@supabase/supabase-js": "^2.110.0", + "@supabase/ssr": "^0.12.3", + "@supabase/supabase-js": "^2.110.7", "@vercel/microfrontends": "^2.3.6", - "svelte": "^5.56.4" + "svelte": "^5.56.6" }, "devDependencies": { "@playwright/test": "^1.61.1", "@pulse/tsconfig": "workspace:*", "@sveltejs/adapter-vercel": "^6.3.2", - "@sveltejs/kit": "^2.69.1", - "@sveltejs/vite-plugin-svelte": "^5.1.1", - "@tailwindcss/vite": "^4.3.2", - "svelte-check": "^4.7.1", + "@sveltejs/kit": "^2.70.0", + "@sveltejs/vite-plugin-svelte": "^7.2.0", + "@tailwindcss/vite": "^4.3.3", + "svelte-check": "^4.7.3", "typescript": "^5.7.0", - "vite": "^8.1.4", + "vite": "^8.1.5", "vitest": "^3.2.6" } } diff --git a/apps/extension/src/background/index.ts b/apps/extension/src/background/index.ts index c40ba56a..c2db0edc 100644 --- a/apps/extension/src/background/index.ts +++ b/apps/extension/src/background/index.ts @@ -1150,20 +1150,37 @@ async function persistPostCommitEffects( return; } - // Update badge with new mission count + // Unseen missions feed the notification filter. The icon badge must mirror + // that notifiable differential (high-score / smart-alert matches), not the + // raw unseen pool — otherwise a first scan of ~1000 missions badges "1000" + // while the Chrome notification correctly reports only ~2 new ones. const seenIds = await getSeenIds(); const seenSet = new Set(seenIds); const newMissions = missions.filter((m) => !seenSet.has(m.id)); - const newCount = newMissions.length; - if (newCount > 0) { - await setNewMissionCount(newCount); - await chrome.action.setBadgeText({ text: String(newCount) }); + const notification = + newMissions.length > 0 + ? await notifyHighScoreMissions(newMissions, settingsSnapshot) + : { shown: false, notifiedMissionIds: [], notifiableMissionIds: [] }; + + const badgeCount = notification.notifiableMissionIds.length; + if (badgeCount > 0) { + await setNewMissionCount(badgeCount); + await chrome.action.setBadgeText({ text: String(badgeCount) }); await chrome.action.setBadgeBackgroundColor({ color: '#58d9a9' }); await chrome.action.setBadgeTextColor({ color: '#ffffff' }); } else { await clearNewMissionBadge(); } +<<<<<<< HEAD + + // notifyHighScoreMissions persists its focus intent before showing Chrome's + // notification, so a fast click cannot race ahead of that write. + if (notification.shown && notification.notifiedMissionIds.length > 0) { + await saveSeenIds(markAsSeen(seenIds, notification.notifiedMissionIds)); + } +======= +>>>>>>> origin/develop } catch { // Badge projection is non-critical after commit. High-score notifications // are evaluated separately, after semantic enrichment, so fused semantic diff --git a/apps/extension/src/lib/shell/notifications/notify-missions.ts b/apps/extension/src/lib/shell/notifications/notify-missions.ts index 65d70033..b3c2eff7 100644 --- a/apps/extension/src/lib/shell/notifications/notify-missions.ts +++ b/apps/extension/src/lib/shell/notifications/notify-missions.ts @@ -73,9 +73,24 @@ const loadLastNotificationTime = async (): Promise => { export interface NotificationResult { shown: boolean; + /** Mission IDs included in a Chrome notification that was actually shown. */ notifiedMissionIds: string[]; + /** + * Mission IDs that passed notification filters for this scan. + * Populated even when the Chrome notification was not shown (rate-limit or + * create failure). Empty when alerts are disabled/muted or nothing matches. + * The extension icon badge uses this so it matches the notification + * differential instead of counting every unseen mission from the scan. + */ + notifiableMissionIds: string[]; } +const emptyNotificationResult = (): NotificationResult => ({ + shown: false, + notifiedMissionIds: [], + notifiableMissionIds: [], +}); + /** * Creates Chrome notifications for high-score missions. * @@ -86,14 +101,15 @@ export interface NotificationResult { * - Clicking the notification opens the side panel * * @param missions - All missions from the scan - * @returns Whether a notification was shown, and which mission IDs were included + * @returns Whether a notification was shown, which mission IDs were included, + * and which IDs passed filters (for the extension badge) */ export const notifyHighScoreMissions = async ( missions: Mission[], admittedSnapshot?: SettingsReleaseSnapshot ): Promise => { if (missions.length === 0) { - return { shown: false, notifiedMissionIds: [] }; + return emptyNotificationResult(); } // Check if notifications are enabled @@ -101,22 +117,16 @@ export const notifyHighScoreMissions = async ( try { settings = (admittedSnapshot ?? (await readSettingsReleaseSnapshot())).settings; } catch { - return { shown: false, notifiedMissionIds: [] }; + return emptyNotificationResult(); } if (!settings.notifications) { - return { shown: false, notifiedMissionIds: [] }; + return emptyNotificationResult(); } - // Check rate limit - const lastTime = await loadLastNotificationTime(); - const now = Date.now(); - - if (!canNotify(lastTime, now)) { - return { shown: false, notifiedMissionIds: [] }; - } - - // Filter missions above threshold that haven't been seen + // Filter missions above threshold that haven't been seen. Done before the + // rate-limit gate so the badge can still reflect the differential when a + // Chrome notification is skipped due to cooldown. let seenIds: string[] = []; try { seenIds = await getSeenIds(); @@ -124,14 +134,15 @@ export const notifyHighScoreMissions = async ( // If we can't load seen IDs, proceed without filtering } + const now = Date.now(); const connectedAlertPreferences = await getConnectedAlertPreferences(); if (connectedAlertPreferences && !connectedAlertPreferences.enabled) { - return { shown: false, notifiedMissionIds: [] }; + return emptyNotificationResult(); } if (connectedAlertPreferences && isMutedUntilActive(connectedAlertPreferences.mutedUntil, now)) { - return { shown: false, notifiedMissionIds: [] }; + return emptyNotificationResult(); } const notifiableMissions = connectedAlertPreferences @@ -143,8 +154,20 @@ export const notifyHighScoreMissions = async ( }) : filterNotifiableMissions(missions, seenIds, settings.notificationScoreThreshold); - if (notifiableMissions.length === 0) { - return { shown: false, notifiedMissionIds: [] }; + const notifiableMissionIds = notifiableMissions.map((mission) => mission.id); + + if (notifiableMissionIds.length === 0) { + return emptyNotificationResult(); + } + + // Check rate limit after filter so callers can still badge the differential. + const lastTime = await loadLastNotificationTime(); + if (!canNotify(lastTime, now)) { + return { + shown: false, + notifiedMissionIds: [], + notifiableMissionIds, + }; } // Build notification content based on count @@ -174,11 +197,7 @@ export const notifyHighScoreMissions = async ( // the most recent notification is what the user expects to land on. If the // notification creation fails below, we roll the intent back so a stale // intent doesn't hijack the next panel open. - const intent = createDeepLinkIntent( - notifiableMissions.map((mission) => mission.id), - 'notification', - now - ); + const intent = createDeepLinkIntent(notifiableMissionIds, 'notification', now); if (intent) { await setDeepLinkIntent(intent); } @@ -199,7 +218,7 @@ export const notifyHighScoreMissions = async ( id: buildAlertHistoryId(now, notifiableMissions), triggeredAt: now, missionCount, - missionIds: notifiableMissions.map((mission) => mission.id), + missionIds: notifiableMissionIds, missionTitles: notifiableMissions.map((mission) => mission.title), scoreThreshold: connectedAlertPreferences?.scoreThreshold ?? settings.notificationScoreThreshold, @@ -210,14 +229,19 @@ export const notifyHighScoreMissions = async ( return { shown: true, - notifiedMissionIds: notifiableMissions.map((mission) => mission.id), + notifiedMissionIds: notifiableMissionIds, + notifiableMissionIds, }; } catch (err) { console.error('[MissionPulse] Failed to create notification:', err); // Rollback the intent we wrote optimistically above so the next panel open // doesn't land on missions the user was never actually notified about. await clearDeepLinkIntent().catch(() => {}); - return { shown: false, notifiedMissionIds: [] }; + return { + shown: false, + notifiedMissionIds: [], + notifiableMissionIds, + }; } }; diff --git a/apps/extension/src/models/notification-deep-link.model.md b/apps/extension/src/models/notification-deep-link.model.md index 9ef5eb9e..186849f4 100644 --- a/apps/extension/src/models/notification-deep-link.model.md +++ b/apps/extension/src/models/notification-deep-link.model.md @@ -121,9 +121,13 @@ at notify time. The legacy `showNewOnly` filter excludes seen missions, so toggling it after a notification would hide the very missions we want to show. The focus lens bypasses seen entirely (F2): focus is an explicit id allow-list applied after the normal pipeline, so seen-marking becomes harmless to the -deep-link UX. We keep the seen-mark (it powers the badge/new-count correctly) +deep-link UX. We keep the seen-mark (it prevents re-alerting the same missions) but it no longer dictates the focus surface. +The extension icon badge is driven by `notifiableMissionIds` from +`notifyHighScoreMissions` (same score/smart-alert filter as the Chrome +notification), not by the raw unseen-mission count from the scan. + --- ## 4. Zero-LLM invariant diff --git a/apps/extension/tests/unit/background/index.test.ts b/apps/extension/tests/unit/background/index.test.ts index cbd567a4..594004dc 100644 --- a/apps/extension/tests/unit/background/index.test.ts +++ b/apps/extension/tests/unit/background/index.test.ts @@ -656,6 +656,7 @@ describe('background auto-scan notifications', () => { notifyHighScoreMissions.mockResolvedValue({ shown: true, notifiedMissionIds: ['mission-1'], + notifiableMissionIds: ['mission-1'], }); getMissions.mockResolvedValue([makeMission()]); saveMissions.mockResolvedValue(undefined); @@ -913,8 +914,9 @@ describe('background auto-scan notifications', () => { releaseSnapshot ); expect(saveSeenIds).toHaveBeenCalledWith(['already-seen', 'mission-1']); - expect(setNewMissionCount).toHaveBeenCalledWith(2); - expect(setBadgeText).toHaveBeenCalledWith({ text: '2' }); + // Badge mirrors the notifiable differential (mission-1), not all unseen (2). + expect(setNewMissionCount).toHaveBeenCalledWith(1); + expect(setBadgeText).toHaveBeenCalledWith({ text: '1' }); }); const feedProjectionMessages = vi .mocked(chrome.runtime.sendMessage) @@ -932,6 +934,54 @@ describe('background auto-scan notifications', () => { ]); }); + it('badges only notifiable missions even when the unseen pool is large', async () => { + const manyUnseen = Array.from({ length: 1000 }, (_, index) => + makeMission({ id: `bulk-${index}`, score: 40 }) + ); + const missions = [ + ...manyUnseen, + makeMission({ id: 'hot-1', score: 95 }), + makeMission({ id: 'hot-2', score: 91 }), + ]; + runScan.mockImplementationOnce( + successfulScanImplementation({ + missions, + sourceMissions: missions, + duplicateRelations: [], + errors: [], + }) + ); + notifyHighScoreMissions.mockResolvedValueOnce({ + shown: true, + notifiedMissionIds: ['hot-1', 'hot-2'], + notifiableMissionIds: ['hot-1', 'hot-2'], + }); + + await alarmListener?.({ name: 'auto-scan', scheduledTime: 1779436800002 }); + + await vi.waitFor(() => { + expect(setNewMissionCount).toHaveBeenCalledWith(2); + expect(setBadgeText).toHaveBeenCalledWith({ text: '2' }); + }); + expect(setBadgeText).not.toHaveBeenCalledWith({ text: '1002' }); + }); + + it('still badges notifiable missions when Chrome notification is rate-limited', async () => { + notifyHighScoreMissions.mockResolvedValueOnce({ + shown: false, + notifiedMissionIds: [], + notifiableMissionIds: ['mission-1'], + }); + + await alarmListener?.({ name: 'auto-scan', scheduledTime: 1779436800003 }); + + await vi.waitFor(() => { + expect(setNewMissionCount).toHaveBeenCalledWith(1); + expect(setBadgeText).toHaveBeenCalledWith({ text: '1' }); + }); + expect(saveSeenIds).not.toHaveBeenCalled(); + }); + it('clears badge and new mission count when all fetched missions are already seen', async () => { const missions = [makeMission({ id: 'already-seen', score: 92 })]; runScan.mockImplementationOnce( @@ -942,9 +992,8 @@ describe('background auto-scan notifications', () => { errors: [], }) ); - notifyHighScoreMissions.mockResolvedValueOnce({ shown: false, notifiedMissionIds: [] }); - await alarmListener?.({ name: 'auto-scan', scheduledTime: 1779436800002 }); + await alarmListener?.({ name: 'auto-scan', scheduledTime: 1779436800004 }); await vi.waitFor(() => { expect(setNewMissionCount).toHaveBeenCalledWith(0); @@ -964,7 +1013,7 @@ describe('background auto-scan notifications', () => { }) ); - await alarmListener?.({ name: 'auto-scan', scheduledTime: 1779436800003 }); + await alarmListener?.({ name: 'auto-scan', scheduledTime: 1779436800005 }); await vi.waitFor(() => { expect(setNewMissionCount).toHaveBeenCalledWith(0); @@ -973,6 +1022,23 @@ describe('background auto-scan notifications', () => { expect(notifyHighScoreMissions).not.toHaveBeenCalled(); }); + it('clears badge when no unseen mission passes notification filters', async () => { + notifyHighScoreMissions.mockResolvedValueOnce({ + shown: false, + notifiedMissionIds: [], + notifiableMissionIds: [], + }); + + await alarmListener?.({ name: 'auto-scan', scheduledTime: 1779436800006 }); + + await vi.waitFor(() => { + expect(notifyHighScoreMissions).toHaveBeenCalled(); + expect(setNewMissionCount).toHaveBeenCalledWith(0); + expect(setBadgeText).toHaveBeenCalledWith({ text: '' }); + }); + expect(saveSeenIds).not.toHaveBeenCalled(); + }); + it('acknowledges start and cancel non-terminally, then broadcasts cancelled once after quiescence', async () => { expect(messageListener).toBeTypeOf('function'); let activeSignal: AbortSignal | undefined; diff --git a/apps/extension/tests/unit/notifications/notify-missions.test.ts b/apps/extension/tests/unit/notifications/notify-missions.test.ts index d5c3c8a6..00c2d9d5 100644 --- a/apps/extension/tests/unit/notifications/notify-missions.test.ts +++ b/apps/extension/tests/unit/notifications/notify-missions.test.ts @@ -134,7 +134,11 @@ describe('notifyHighScoreMissions', () => { await import('../../../src/lib/shell/notifications/notify-missions'); const result = await notifyHighScoreMissions([makeMission()]); - expect(result).toEqual({ shown: false, notifiedMissionIds: [] }); + expect(result).toEqual({ + shown: false, + notifiedMissionIds: [], + notifiableMissionIds: [], + }); expect(notificationsCreate).not.toHaveBeenCalled(); }); @@ -151,7 +155,11 @@ describe('notifyHighScoreMissions', () => { }), ]); - expect(result).toEqual({ shown: true, notifiedMissionIds: ['low-basic'] }); + expect(result).toEqual({ + shown: true, + notifiedMissionIds: ['low-basic'], + notifiableMissionIds: ['low-basic'], + }); expect(notificationsCreate).toHaveBeenCalledWith( 'high-score-missions', expect.objectContaining({ @@ -183,7 +191,11 @@ describe('notifyHighScoreMissions', () => { makeMission({ id: 'new-one', title: 'Nouvelle mission', score: 92 }), ]); - expect(result).toEqual({ shown: true, notifiedMissionIds: ['new-one'] }); + expect(result).toEqual({ + shown: true, + notifiedMissionIds: ['new-one'], + notifiableMissionIds: ['new-one'], + }); expect(notificationsCreate).toHaveBeenCalledWith( 'high-score-missions', expect.objectContaining({ message: 'Nouvelle mission' }) @@ -200,7 +212,11 @@ describe('notifyHighScoreMissions', () => { makeMission({ id: '4', title: 'Mission 4', score: 92 }), ]); - expect(result).toEqual({ shown: true, notifiedMissionIds: ['1', '2', '3', '4'] }); + expect(result).toEqual({ + shown: true, + notifiedMissionIds: ['1', '2', '3', '4'], + notifiableMissionIds: ['1', '2', '3', '4'], + }); expect(notificationsCreate).toHaveBeenCalledWith( 'high-score-missions', expect.objectContaining({ @@ -230,7 +246,11 @@ describe('notifyHighScoreMissions', () => { makeMission({ id: 'low-tjm', title: 'Low TJM', stack: ['Svelte'], score: 90, tjm: 500 }), ]); - expect(result).toEqual({ shown: true, notifiedMissionIds: ['svelte'] }); + expect(result).toEqual({ + shown: true, + notifiedMissionIds: ['svelte'], + notifiableMissionIds: ['svelte'], + }); expect(notificationsCreate).toHaveBeenCalledWith( 'high-score-missions', expect.objectContaining({ message: 'Svelte' }) @@ -263,7 +283,11 @@ describe('notifyHighScoreMissions', () => { await import('../../../src/lib/shell/notifications/notify-missions'); const result = await notifyHighScoreMissions([makeMission({ score: 99 })]); - expect(result).toEqual({ shown: false, notifiedMissionIds: [] }); + expect(result).toEqual({ + shown: false, + notifiedMissionIds: [], + notifiableMissionIds: [], + }); expect(notificationsCreate).not.toHaveBeenCalled(); }); @@ -283,19 +307,29 @@ describe('notifyHighScoreMissions', () => { await import('../../../src/lib/shell/notifications/notify-missions'); const result = await notifyHighScoreMissions([makeMission({ score: 99 })]); - expect(result).toEqual({ shown: false, notifiedMissionIds: [] }); + expect(result).toEqual({ + shown: false, + notifiedMissionIds: [], + notifiableMissionIds: [], + }); expect(notificationsCreate).not.toHaveBeenCalled(); expect(recordAlertHistoryEntry).not.toHaveBeenCalled(); }); - it('returns false when cooldown is still active from session storage', async () => { + it('returns notifiable ids without showing when cooldown is still active', async () => { sessionGet.mockResolvedValueOnce({ last_notification_time: 1_700_000_000_000 - 60_000 }); const { notifyHighScoreMissions } = await import('../../../src/lib/shell/notifications/notify-missions'); - const result = await notifyHighScoreMissions([makeMission({ title: 'Mission rate-limited' })]); + const result = await notifyHighScoreMissions([ + makeMission({ id: 'rate-limited', title: 'Mission rate-limited', score: 90 }), + ]); - expect(result).toEqual({ shown: false, notifiedMissionIds: [] }); + expect(result).toEqual({ + shown: false, + notifiedMissionIds: [], + notifiableMissionIds: ['rate-limited'], + }); expect(notificationsCreate).not.toHaveBeenCalled(); }); @@ -329,7 +363,11 @@ describe('notifyHighScoreMissions', () => { await import('../../../src/lib/shell/notifications/notify-missions'); const result = await notifyHighScoreMissions([makeMission({ id: 'm1', score: 90 })]); - expect(result).toEqual({ shown: false, notifiedMissionIds: [] }); + expect(result).toEqual({ + shown: false, + notifiedMissionIds: [], + notifiableMissionIds: ['m1'], + }); // The optimistic intent write must be cleaned up so the next panel open // does not land on missions the user was never actually notified about. expect(sessionRemove).toHaveBeenCalled(); diff --git a/packages/ui/package.json b/packages/ui/package.json index 6c920bb6..180c117b 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -31,21 +31,21 @@ "check": "svelte-check --tsconfig ./tsconfig.json" }, "dependencies": { - "svelte": "^5.56.4" + "svelte": "^5.56.6" }, "devDependencies": { "@pulse/tsconfig": "workspace:*", "@sveltejs/package": "^2.5.8", - "@sveltejs/vite-plugin-svelte": "^5.1.1", - "@tailwindcss/vite": "^4.3.2", - "svelte-check": "^4.7.1", - "svelte2tsx": "^0.7.57", - "tailwindcss": "^4.3.2", + "@sveltejs/vite-plugin-svelte": "^7.2.0", + "@tailwindcss/vite": "^4.3.3", + "svelte-check": "^4.7.3", + "svelte2tsx": "^0.7.58", + "tailwindcss": "^4.3.3", "typescript": "^5.7.0", - "vite": "^8.1.4", + "vite": "^8.1.5", "vitest": "^3.2.6" }, "peerDependencies": { - "tailwindcss": "^4.3.2" + "tailwindcss": "^4.3.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index df428679..4bcfd677 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,17 +42,17 @@ importers: specifier: workspace:* version: link:../../packages/ui '@supabase/ssr': - specifier: ^0.12.0 - version: 0.12.0(@supabase/supabase-js@2.110.2) + specifier: ^0.12.3 + version: 0.12.3(@supabase/supabase-js@2.110.8) '@supabase/supabase-js': - specifier: ^2.110.0 - version: 2.110.2 + specifier: ^2.110.7 + version: 2.110.8 '@vercel/microfrontends': specifier: ^2.3.6 - version: 2.4.0(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) + version: 2.4.0(@sveltejs/kit@2.70.1(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.8(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) svelte: - specifier: ^5.56.4 - version: 5.56.4(@typescript-eslint/types@8.63.0) + specifier: ^5.56.6 + version: 5.56.8(@typescript-eslint/types@8.63.0) devDependencies: '@playwright/test': specifier: ^1.61.1 @@ -62,19 +62,19 @@ importers: version: link:../../packages/tsconfig '@sveltejs/adapter-vercel': specifier: ^6.3.2 - version: 6.3.4(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(rollup@4.60.1) + version: 6.3.4(@sveltejs/kit@2.70.1(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.8(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(rollup@4.60.1) '@sveltejs/kit': - specifier: ^2.69.1 - version: 2.69.2(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) + specifier: ^2.70.0 + version: 2.70.1(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.8(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) '@sveltejs/vite-plugin-svelte': - specifier: ^5.1.1 - version: 5.1.1(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) + specifier: ^7.2.0 + version: 7.2.0(svelte@5.56.8(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) '@tailwindcss/vite': - specifier: ^4.3.2 - version: 4.3.2(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) + specifier: ^4.3.3 + version: 4.3.3(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) svelte-check: - specifier: ^4.7.1 - version: 4.7.2(picomatch@4.0.5)(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3) + specifier: ^4.7.3 + version: 4.7.3(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3) typescript: specifier: ^5.7.0 version: 5.9.3 @@ -255,30 +255,30 @@ importers: packages/ui: dependencies: svelte: - specifier: ^5.56.4 - version: 5.56.4(@typescript-eslint/types@8.63.0) + specifier: ^5.56.6 + version: 5.56.8(@typescript-eslint/types@8.63.0) devDependencies: '@pulse/tsconfig': specifier: workspace:* version: link:../tsconfig '@sveltejs/package': specifier: ^2.5.8 - version: 2.5.8(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3) + version: 2.5.8(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3) '@sveltejs/vite-plugin-svelte': - specifier: ^5.1.1 - version: 5.1.1(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) + specifier: ^7.2.0 + version: 7.2.0(svelte@5.56.8(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) '@tailwindcss/vite': - specifier: ^4.3.2 - version: 4.3.2(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) + specifier: ^4.3.3 + version: 4.3.3(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) svelte-check: - specifier: ^4.7.1 - version: 4.7.2(picomatch@4.0.5)(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3) + specifier: ^4.7.3 + version: 4.7.3(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3) svelte2tsx: - specifier: ^0.7.57 - version: 0.7.57(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3) + specifier: ^0.7.58 + version: 0.7.58(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3) tailwindcss: - specifier: ^4.3.2 - version: 4.3.2 + specifier: ^4.3.3 + version: 4.3.3 typescript: specifier: ^5.7.0 version: 5.9.3 @@ -1219,6 +1219,10 @@ packages: resolution: {integrity: sha512-Qj7a6EDP+AMMQFWqGv+qFa8r6re//dk+qQI5bA0KK+PZmnI3JPu97TDeNt6SMiQ2FkklP79hP2yDFYSnA989OA==} engines: {node: '>=22.0.0'} + '@supabase/auth-js@2.110.8': + resolution: {integrity: sha512-TQ5neTUDX2C2WmyYa03yGhLMkhdE/SkHXtK8/qxO/APUy3rsymsJCBP48p4jcN6iO2G0ow6RRexQd2mX+dSyJg==} + engines: {node: '>=22.0.0'} + '@supabase/cli-darwin-arm64@2.109.1': resolution: {integrity: sha512-tkn8tfunyqIL7RE+7DVjg6Ql2cJLPkGgh9cPafp2LbXI0qDgds0TaS+UOTHQEjci8JQXXe2wS00+122ko2QI8A==} cpu: [arm64] @@ -1267,30 +1271,58 @@ packages: resolution: {integrity: sha512-ZjjqrXpxM9/rE+eAtZxiK45EWy9EBoJQ322Q5Y75LccYQNh212neHTgXP/o4MIzmH0LNXT8UzvTZtQOfOzyoeQ==} engines: {node: '>=22.0.0'} + '@supabase/functions-js@2.110.8': + resolution: {integrity: sha512-5yB9TLYzvv2oSQxwb0gamEvIAsuH66pVt7AM/pz03S7wN6ehD34GNgbShrccetqPedXQSz7e/1hAJ9NeEhoZVg==} + engines: {node: '>=22.0.0'} + '@supabase/phoenix@0.4.4': resolution: {integrity: sha512-Gt0pqoXuIqX/8dvG0OKp/wMCobXNH3klNbUPBNyOfN0YA1IswrM3HyWFMOPk1Jy+BRaIyDPcFx4jLBwHNmlyfQ==} + '@supabase/phoenix@0.4.5': + resolution: {integrity: sha512-aAn9H9ovVyeApKy11OWOrrOGq8DV68yWeH4ud2lN9fzn4aO8Zb5GLL9m1pUg9nLqIcT+ZDfAcsZe0E/nqdv2lw==} + '@supabase/postgrest-js@2.110.2': resolution: {integrity: sha512-++LBmcIMwCtgO4tISQUmo9+2xkRwHQqS8ZKMCnhXLe9P8k8YQRXuMoh/RiSzQSoev8gqet0W7yOboW0cUxnt0Q==} engines: {node: '>=22.0.0'} + '@supabase/postgrest-js@2.110.8': + resolution: {integrity: sha512-QeRROxl1PpOZw5Jzi7BwdN9icsycMrLlCCvsjS0hYLW+nZoaT46zdagz/glJirj8jHF4jSd5Jyipuae2cBClCw==} + engines: {node: '>=22.0.0'} + '@supabase/realtime-js@2.110.2': resolution: {integrity: sha512-z3jTOTPgyn6E3r6dVOOQ10He4yAMB2czjFw7xVdX3s16MHElna5rY1gVaePs0NIo6xvtMYbtmOXlFaFt/ePLpg==} engines: {node: '>=22.0.0'} + '@supabase/realtime-js@2.110.8': + resolution: {integrity: sha512-mwX7ituX6O31fLf+0g65rpLlNxqgnMaPltPsQwzox6jfmbfVl3tCxXrfr3HEsQcCRjpjuJG1+A0vFzP1yVjKHA==} + engines: {node: '>=22.0.0'} + '@supabase/ssr@0.12.0': resolution: {integrity: sha512-d9XV5XzJvzzZbeAIM7fWTCUYxQJZ2Ru6ny3dJHmHGp/LIrJ+o9FpD7N9Rf/UhhWEvHXSoDe8SI32Z2ouOdMjBg==} peerDependencies: '@supabase/supabase-js': ^2.108.0 + '@supabase/ssr@0.12.3': + resolution: {integrity: sha512-qWXJ/dI7CiYDKyTgIPqJ4Qkh8y5edh2LdF/nkN48z47mmEVzAO2OE+YErYeQ/UemVfonn/F4kFz+lhLqoVMdpw==} + peerDependencies: + '@supabase/supabase-js': ^2.110.5 + '@supabase/storage-js@2.110.2': resolution: {integrity: sha512-EhsRSwSnmQefKJsAxoRUZ0hvHr92ECM8DDGAKR5z0HdoJx4heI60PjHUTruVNZxKX6XeobLGDyLud020Bw1iwg==} engines: {node: '>=22.0.0'} + '@supabase/storage-js@2.110.8': + resolution: {integrity: sha512-CcfhkZFBLxsthgUabZKxwfsoXdrikIGsL3LsGoV3FZTqCMx/s1y49taT4jT/oya5+1IuB0sFFHw6pF0o0iJniQ==} + engines: {node: '>=22.0.0'} + '@supabase/supabase-js@2.110.2': resolution: {integrity: sha512-r9q9w4ZQ6mOjh36aqUNFSisBF611vzpO8JphBESr2Q1SWvmGFQeI7Jq7Y+PaNMZ6Zszz+S2yTlJStCpnaMSnQg==} engines: {node: '>=22.0.0'} + '@supabase/supabase-js@2.110.8': + resolution: {integrity: sha512-E5qzoe74zhJRv4wRcbO9eMYzeQDb/+h6c603pL8shcxLGBjTKsIF7XXj05IcNj23TLDgJN1WkMw7mwAPyu5dZg==} + engines: {node: '>=22.0.0'} + '@sveltejs/acorn-typescript@1.0.10': resolution: {integrity: sha512-4WfKk68eTih+MiJD4fSbxN7E8kVBmTMPWHUPYjvl2N0rMs53YLTT8/YjKU5Dtnz5LqDjl7LEw4U7lXR2W3J5WA==} peerDependencies: @@ -1318,6 +1350,22 @@ packages: typescript: optional: true + '@sveltejs/kit@2.70.1': + resolution: {integrity: sha512-nY9SPHGOZro3doud9vZXDBwl9tCZIouuJztjgSHs6PAIrv9M/z5O7eOhPV5xU7CgVHA976Jwu3BA1hIFvXztkA==} + engines: {node: '>=18.13'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0 + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: ^5.3.3 || ^6.0.0 + vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + typescript: + optional: true + '@sveltejs/load-config@0.2.0': resolution: {integrity: sha512-1LgZ/qUqSoq+QorD83lk2hka79Px0wXNW2q5V1nZlxGhQgw1jrsIbVz5YiCeucVLo4XvFLjXukUaQjIiqowkcg==} engines: {node: '>= 18.0.0'} @@ -1354,36 +1402,69 @@ packages: '@tailwindcss/node@4.3.2': resolution: {integrity: sha512-yWP/sqEcBLaD8JuA6zNwxoYKr75qxTioYwlRwekj5Jr/I5GXnoJfjetH/psLUIv74cYTH2lBUEzBkinthoYcBg==} + '@tailwindcss/node@4.3.3': + resolution: {integrity: sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==} + '@tailwindcss/oxide-android-arm64@4.3.2': resolution: {integrity: sha512-WHxqIuHpvZ5VtdX6GTl1Ik/Vp2YuN42Et+0CdeaVd/frQ9jAvGmvR8vLT+jk3e8/Q3x8kECB9+R17pgpp2BulA==} engines: {node: '>= 20'} cpu: [arm64] os: [android] + '@tailwindcss/oxide-android-arm64@4.3.3': + resolution: {integrity: sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + '@tailwindcss/oxide-darwin-arm64@4.3.2': resolution: {integrity: sha512-GZypeUY/IDJW3877KeM+O67vbXr3MBnbtEL4aYhNErv/JWZhye2vGSWWG9tB6iiqR2MqRNkY8IOUy4NdSZV26w==} engines: {node: '>= 20'} cpu: [arm64] os: [darwin] + '@tailwindcss/oxide-darwin-arm64@4.3.3': + resolution: {integrity: sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + '@tailwindcss/oxide-darwin-x64@4.3.2': resolution: {integrity: sha512-UIIzmefR6KO1sDU7MzRqAxC8iBpft/VhkGjTjnhoS6k7Z3rQ9wEgA1ODSiyH/tcSYssulNm4Ci3hOeK1jH7ccQ==} engines: {node: '>= 20'} cpu: [x64] os: [darwin] + '@tailwindcss/oxide-darwin-x64@4.3.3': + resolution: {integrity: sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + '@tailwindcss/oxide-freebsd-x64@4.3.2': resolution: {integrity: sha512-GN+uAmcI6DNspnCDwtOAZrTz6oukJnp337qZvxqCGLd3BHBzJpO0ZbTLRvJNdztOeAmTzewewGIMPb0tk2R4WA==} engines: {node: '>= 20'} cpu: [x64] os: [freebsd] + '@tailwindcss/oxide-freebsd-x64@4.3.3': + resolution: {integrity: sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2': resolution: {integrity: sha512-4ABn7qSbdHRwTiDiuWNegCyb5+2FJ4vKIKc3DmKrvAFw7MU1Lm11dIkTPwUaFdTzc7IsOpDbqBrlh0x6y36U/w==} engines: {node: '>= 20'} cpu: [arm] os: [linux] + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + resolution: {integrity: sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + '@tailwindcss/oxide-linux-arm64-gnu@4.3.2': resolution: {integrity: sha512-wDgEIGwoM8w8pufh9LVt1PahDgNdKXrLC2qfAnV3vAmococ9RWbxeAw4pxPttd/TsJfwjyLf90Dg1y9y8I6Emw==} engines: {node: '>= 20'} @@ -1391,6 +1472,13 @@ packages: os: [linux] libc: [glibc] + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + resolution: {integrity: sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@tailwindcss/oxide-linux-arm64-musl@4.3.2': resolution: {integrity: sha512-J5Nuk0uZQIiMTJj3LEx4sAA9tMFUoXQZFv1J6An+QGYe53HKRJuFDi0rpq/tuouCZeAbOBY3kQ6g8qeD4TUjtA==} engines: {node: '>= 20'} @@ -1398,6 +1486,13 @@ packages: os: [linux] libc: [musl] + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + resolution: {integrity: sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + libc: [musl] + '@tailwindcss/oxide-linux-x64-gnu@4.3.2': resolution: {integrity: sha512-kqCZpSKOBEJO4mz7OqWoofBZeXTAwaVGPj0ErAj7CojmhKpWVWVOnrt9dE8odoIraZq4oj3ausM37kXi+Tow8w==} engines: {node: '>= 20'} @@ -1405,6 +1500,13 @@ packages: os: [linux] libc: [glibc] + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + resolution: {integrity: sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [glibc] + '@tailwindcss/oxide-linux-x64-musl@4.3.2': resolution: {integrity: sha512-cixpqbh2toJDmkuCRI68nXA8ZxNmdK9Y+9v5h3MC3ZQKy/0BO8AWzlkWyRM7JAFSGBlfig4YVTPsK6MVgqz1uw==} engines: {node: '>= 20'} @@ -1412,6 +1514,13 @@ packages: os: [linux] libc: [musl] + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + resolution: {integrity: sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + libc: [musl] + '@tailwindcss/oxide-wasm32-wasi@4.3.2': resolution: {integrity: sha512-4ec2Z/LOmRsAgU23CS4xeJfcJlmRg94A/XrbGRCF1gyU/zdDfRLYDVsS+ynSZCmGNxQ1jQriQOKMQeQxBA3Isw==} engines: {node: '>=14.0.0'} @@ -1424,27 +1533,60 @@ packages: - '@emnapi/wasi-threads' - tslib + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + resolution: {integrity: sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + '@tailwindcss/oxide-win32-arm64-msvc@4.3.2': resolution: {integrity: sha512-Zyr/M0+XcYZu3bZrUytc7TXvrk0ftWfl8gN2MwekNDzhqhKRUucMPSeOzM0o0wH5AWOU49BsKRrfKxI2atCPMQ==} engines: {node: '>= 20'} cpu: [arm64] os: [win32] + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + resolution: {integrity: sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + '@tailwindcss/oxide-win32-x64-msvc@4.3.2': resolution: {integrity: sha512-QI9BO7KlNZsp2GuO0jwAAj5jCDABOKXRkCk2XuKTSaNEFSdfzqswYVTtCHBNKHLsqyjFyFkqlDiwkNbTYSssMQ==} engines: {node: '>= 20'} cpu: [x64] os: [win32] + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + resolution: {integrity: sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + '@tailwindcss/oxide@4.3.2': resolution: {integrity: sha512-z8ZgnzX8gdNoWLBLqBPoh/sjnxkwvf9ZuWjnO0l0yIzbLa5/9S+eC5QxGZKRobVHIC3/1BoMWjHblqWjcgFgag==} engines: {node: '>= 20'} + '@tailwindcss/oxide@4.3.3': + resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==} + engines: {node: '>= 20'} + '@tailwindcss/vite@4.3.2': resolution: {integrity: sha512-eHpMeX4JXfVNJDEcsouTeCBubJBTcTLigeaw/NTUW6PB5ATKKXdyonnXgTBX2VuRbjz1hjfz6C5XAhr52ImQXA==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 + '@tailwindcss/vite@4.3.3': + resolution: {integrity: sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 || ^8 + '@turbo/darwin-64@2.10.5': resolution: {integrity: sha512-ENvPwy3x5yS7MwNYHeWjqOBXkwIMp39Pd+/zXC6PoiNzF8EIvvLZOZZ+ny6L9x4WgS5vxUii2LM5gM+zjPdnWw==} cpu: [x64] @@ -1965,6 +2107,10 @@ packages: resolution: {integrity: sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ==} engines: {node: '>=10.13.0'} + enhanced-resolve@5.24.3: + resolution: {integrity: sha512-PwKooW9JUzh5chmYfHM3IQl5OkK2u2Nm011MgeZrss3JmFraUx/fqrf78kk8GUMYoibx/14MdwTl/1WKkG7TpQ==} + engines: {node: '>=10.13.0'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -2961,6 +3107,14 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 typescript: '>=5.0.0' + svelte-check@4.7.3: + resolution: {integrity: sha512-DHdTCGX62R0fCxBEaT+USdASAnoaRBaaNczkRJl0K7o3WyoCeVUbVxo6fKqpOll/B+WMWCsiFK0eFrJSNBKZIg==} + engines: {node: '>= 18.0.0'} + hasBin: true + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: '>=5.0.0' + svelte-eslint-parser@1.8.0: resolution: {integrity: sha512-mikR1qwIVy3t5WthUoAXkMwxkXvabZP9FJgdx35Ei7EbGWmctva1Pih16Koeor/bdNNq8NXHlwKGS6NkYTawLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.34.1} @@ -2970,8 +3124,8 @@ packages: svelte: optional: true - svelte2tsx@0.7.57: - resolution: {integrity: sha512-nQo0xEfUpSVjfkxan2UmC6Wl9UZVe9+/pglUiyBNMJ7KDQ9DDooucmXdToBOvzSfgYjj/kMYwf6CTTDz/z048w==} + svelte2tsx@0.7.58: + resolution: {integrity: sha512-NXzvlRQ2ZH8mhHOIQURyzGAu2RbbY+rcSNIXs39m2bBo6Fcw3T+EgDHnCKhncupRtzUqhWNaqQnAkfLCDjHrDg==} peerDependencies: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 typescript: ^4.9.4 || ^5.0.0 || ^6.0.0 @@ -2980,12 +3134,19 @@ packages: resolution: {integrity: sha512-/d0QHehmRuJW8gVz395MTkPcPozxzdjBMBE8oEYGz8O3b9KTMzzQ9ZHJQLuFKOHOPQbU6kx/X4iid/EBBzH7iw==} engines: {node: '>=18'} + svelte@5.56.8: + resolution: {integrity: sha512-PY8LOw7xP6c8IOiVqdo0sbbZVYhXRSfklOQLAUyGBKqjTX0wx/z4l/9J+PmBpmlLnxzEb1NqltxQ5/wZme/Cmg==} + engines: {node: '>=18'} + symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} tailwindcss@4.3.2: resolution: {integrity: sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA==} + tailwindcss@4.3.3: + resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} + tapable@2.3.3: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} @@ -4024,6 +4185,10 @@ snapshots: dependencies: tslib: 2.8.1 + '@supabase/auth-js@2.110.8': + dependencies: + tslib: 2.8.1 + '@supabase/cli-darwin-arm64@2.109.1': optional: true @@ -4052,27 +4217,52 @@ snapshots: dependencies: tslib: 2.8.1 + '@supabase/functions-js@2.110.8': + dependencies: + tslib: 2.8.1 + '@supabase/phoenix@0.4.4': {} + '@supabase/phoenix@0.4.5': {} + '@supabase/postgrest-js@2.110.2': dependencies: tslib: 2.8.1 + '@supabase/postgrest-js@2.110.8': + dependencies: + tslib: 2.8.1 + '@supabase/realtime-js@2.110.2': dependencies: '@supabase/phoenix': 0.4.4 tslib: 2.8.1 + '@supabase/realtime-js@2.110.8': + dependencies: + '@supabase/phoenix': 0.4.5 + tslib: 2.8.1 + '@supabase/ssr@0.12.0(@supabase/supabase-js@2.110.2)': dependencies: '@supabase/supabase-js': 2.110.2 cookie: 1.1.1 + '@supabase/ssr@0.12.3(@supabase/supabase-js@2.110.8)': + dependencies: + '@supabase/supabase-js': 2.110.8 + cookie: 1.1.1 + '@supabase/storage-js@2.110.2': dependencies: iceberg-js: 0.8.1 tslib: 2.8.1 + '@supabase/storage-js@2.110.8': + dependencies: + iceberg-js: 0.8.1 + tslib: 2.8.1 + '@supabase/supabase-js@2.110.2': dependencies: '@supabase/auth-js': 2.110.2 @@ -4081,13 +4271,25 @@ snapshots: '@supabase/realtime-js': 2.110.2 '@supabase/storage-js': 2.110.2 + '@supabase/supabase-js@2.110.8': + dependencies: + '@supabase/auth-js': 2.110.8 + '@supabase/functions-js': 2.110.8 + '@supabase/postgrest-js': 2.110.8 + '@supabase/realtime-js': 2.110.8 + '@supabase/storage-js': 2.110.8 + '@sveltejs/acorn-typescript@1.0.10(acorn@8.16.0)': dependencies: acorn: 8.16.0 - '@sveltejs/adapter-vercel@6.3.4(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(rollup@4.60.1)': + '@sveltejs/acorn-typescript@1.0.10(acorn@8.17.0)': + dependencies: + acorn: 8.17.0 + + '@sveltejs/adapter-vercel@6.3.4(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)))(rollup@4.60.1)': dependencies: - '@sveltejs/kit': 2.69.2(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) + '@sveltejs/kit': 2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)) '@vercel/nft': 1.10.2(rollup@4.60.1) esbuild: 0.28.1 transitivePeerDependencies: @@ -4095,9 +4297,9 @@ snapshots: - rollup - supports-color - '@sveltejs/adapter-vercel@6.3.4(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)))(rollup@4.60.1)': + '@sveltejs/adapter-vercel@6.3.4(@sveltejs/kit@2.70.1(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.8(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(rollup@4.60.1)': dependencies: - '@sveltejs/kit': 2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)) + '@sveltejs/kit': 2.70.1(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.8(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) '@vercel/nft': 1.10.2(rollup@4.60.1) esbuild: 0.28.1 transitivePeerDependencies: @@ -4105,11 +4307,11 @@ snapshots: - rollup - supports-color - '@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0))': + '@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0))': dependencies: '@standard-schema/spec': 1.1.0 '@sveltejs/acorn-typescript': 1.0.10(acorn@8.16.0) - '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) + '@sveltejs/vite-plugin-svelte': 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)) '@types/cookie': 0.6.0 acorn: 8.16.0 cookie: 0.6.0 @@ -4121,17 +4323,17 @@ snapshots: set-cookie-parser: 3.1.0 sirv: 3.0.2 svelte: 5.56.4(@typescript-eslint/types@8.63.0) - vite: 6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0) + vite: 8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0) optionalDependencies: typescript: 5.9.3 - '@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0))': + '@sveltejs/kit@2.70.1(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.8(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0))': dependencies: '@standard-schema/spec': 1.1.0 - '@sveltejs/acorn-typescript': 1.0.10(acorn@8.16.0) - '@sveltejs/vite-plugin-svelte': 7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)) + '@sveltejs/acorn-typescript': 1.0.10(acorn@8.17.0) + '@sveltejs/vite-plugin-svelte': 7.2.0(svelte@5.56.8(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) '@types/cookie': 0.6.0 - acorn: 8.16.0 + acorn: 8.17.0 cookie: 0.6.0 devalue: 5.8.1 esm-env: 1.2.2 @@ -4140,21 +4342,21 @@ snapshots: mrmime: 2.0.1 set-cookie-parser: 3.1.0 sirv: 3.0.2 - svelte: 5.56.4(@typescript-eslint/types@8.63.0) - vite: 8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0) + svelte: 5.56.8(@typescript-eslint/types@8.63.0) + vite: 6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0) optionalDependencies: typescript: 5.9.3 '@sveltejs/load-config@0.2.0': {} - '@sveltejs/package@2.5.8(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)': + '@sveltejs/package@2.5.8(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3)': dependencies: chokidar: 5.0.0 kleur: 4.1.5 sade: 1.8.1 semver: 7.7.4 - svelte: 5.56.4(@typescript-eslint/types@8.63.0) - svelte2tsx: 0.7.57(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3) + svelte: 5.56.8(@typescript-eslint/types@8.63.0) + svelte2tsx: 0.7.58(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3) transitivePeerDependencies: - typescript @@ -4189,6 +4391,15 @@ snapshots: vite: 8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0) vitefu: 1.1.3(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)) + '@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.8(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0))': + dependencies: + deepmerge: 4.3.1 + magic-string: 0.30.21 + obug: 2.1.4 + svelte: 5.56.8(@typescript-eslint/types@8.63.0) + vite: 6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0) + vitefu: 1.1.3(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) + '@tailwindcss/node@4.3.2': dependencies: '@jridgewell/remapping': 2.3.5 @@ -4199,42 +4410,88 @@ snapshots: source-map-js: 1.2.1 tailwindcss: 4.3.2 + '@tailwindcss/node@4.3.3': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.24.3 + jiti: 2.7.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.3.3 + '@tailwindcss/oxide-android-arm64@4.3.2': optional: true + '@tailwindcss/oxide-android-arm64@4.3.3': + optional: true + '@tailwindcss/oxide-darwin-arm64@4.3.2': optional: true + '@tailwindcss/oxide-darwin-arm64@4.3.3': + optional: true + '@tailwindcss/oxide-darwin-x64@4.3.2': optional: true + '@tailwindcss/oxide-darwin-x64@4.3.3': + optional: true + '@tailwindcss/oxide-freebsd-x64@4.3.2': optional: true + '@tailwindcss/oxide-freebsd-x64@4.3.3': + optional: true + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.2': optional: true + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + optional: true + '@tailwindcss/oxide-linux-arm64-gnu@4.3.2': optional: true + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + optional: true + '@tailwindcss/oxide-linux-arm64-musl@4.3.2': optional: true + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + optional: true + '@tailwindcss/oxide-linux-x64-gnu@4.3.2': optional: true + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + optional: true + '@tailwindcss/oxide-linux-x64-musl@4.3.2': optional: true + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + optional: true + '@tailwindcss/oxide-wasm32-wasi@4.3.2': optional: true + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + optional: true + '@tailwindcss/oxide-win32-arm64-msvc@4.3.2': optional: true + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + optional: true + '@tailwindcss/oxide-win32-x64-msvc@4.3.2': optional: true + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + optional: true + '@tailwindcss/oxide@4.3.2': optionalDependencies: '@tailwindcss/oxide-android-arm64': 4.3.2 @@ -4250,6 +4507,21 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.3.2 '@tailwindcss/oxide-win32-x64-msvc': 4.3.2 + '@tailwindcss/oxide@4.3.3': + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-x64': 4.3.3 + '@tailwindcss/oxide-freebsd-x64': 4.3.3 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.3 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.3 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-x64-musl': 4.3.3 + '@tailwindcss/oxide-wasm32-wasi': 4.3.3 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 + '@tailwindcss/vite@4.3.2(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0))': dependencies: '@tailwindcss/node': 4.3.2 @@ -4257,6 +4529,13 @@ snapshots: tailwindcss: 4.3.2 vite: 6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0) + '@tailwindcss/vite@4.3.3(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0))': + dependencies: + '@tailwindcss/node': 4.3.3 + '@tailwindcss/oxide': 4.3.3 + tailwindcss: 4.3.3 + vite: 6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0) + '@turbo/darwin-64@2.10.5': optional: true @@ -4409,7 +4688,7 @@ snapshots: '@typescript-eslint/types': 8.63.0 eslint-visitor-keys: 5.0.1 - '@vercel/microfrontends@2.4.0(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0))': + '@vercel/microfrontends@2.4.0(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)))(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0))': dependencies: '@next/env': 16.0.10 '@types/md5': 2.3.6 @@ -4424,12 +4703,12 @@ snapshots: path-to-regexp: 6.3.0 semver: 7.7.4 optionalDependencies: - '@sveltejs/kit': 2.69.2(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) - vite: 6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0) + '@sveltejs/kit': 2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)) + vite: 8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0) transitivePeerDependencies: - debug - '@vercel/microfrontends@2.4.0(@sveltejs/kit@2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)))(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0))': + '@vercel/microfrontends@2.4.0(@sveltejs/kit@2.70.1(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.8(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0))': dependencies: '@next/env': 16.0.10 '@types/md5': 2.3.6 @@ -4444,8 +4723,8 @@ snapshots: path-to-regexp: 6.3.0 semver: 7.7.4 optionalDependencies: - '@sveltejs/kit': 2.69.2(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.4(@typescript-eslint/types@8.63.0))(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0)) - vite: 8.1.4(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.0)(yaml@2.9.0) + '@sveltejs/kit': 2.70.1(@sveltejs/vite-plugin-svelte@7.2.0(svelte@5.56.8(@typescript-eslint/types@8.63.0))(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)))(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3)(vite@6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0)) + vite: 6.4.3(@types/node@26.1.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0)(yaml@2.9.0) transitivePeerDependencies: - debug @@ -4453,8 +4732,8 @@ snapshots: dependencies: '@mapbox/node-pre-gyp': 2.0.3 '@rollup/pluginutils': 5.3.0(rollup@4.60.1) - acorn: 8.16.0 - acorn-import-attributes: 1.9.5(acorn@8.16.0) + acorn: 8.17.0 + acorn-import-attributes: 1.9.5(acorn@8.17.0) async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 @@ -4539,9 +4818,9 @@ snapshots: abbrev@3.0.1: {} - acorn-import-attributes@1.9.5(acorn@8.16.0): + acorn-import-attributes@1.9.5(acorn@8.17.0): dependencies: - acorn: 8.16.0 + acorn: 8.17.0 acorn-jsx@5.3.2(acorn@8.17.0): dependencies: @@ -4779,6 +5058,11 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.3.3 + enhanced-resolve@5.24.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + entities@4.5.0: {} entities@8.0.0: {} @@ -5837,6 +6121,19 @@ snapshots: transitivePeerDependencies: - picomatch + svelte-check@4.7.3(picomatch@4.0.5)(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + '@sveltejs/load-config': 0.2.0 + chokidar: 4.0.3 + fdir: 6.5.0(picomatch@4.0.5) + picocolors: 1.1.1 + sade: 1.8.1 + svelte: 5.56.8(@typescript-eslint/types@8.63.0) + typescript: 5.9.3 + transitivePeerDependencies: + - picomatch + svelte-eslint-parser@1.8.0(svelte@5.56.4(@typescript-eslint/types@8.63.0)): dependencies: eslint-scope: 8.4.0 @@ -5849,11 +6146,11 @@ snapshots: optionalDependencies: svelte: 5.56.4(@typescript-eslint/types@8.63.0) - svelte2tsx@0.7.57(svelte@5.56.4(@typescript-eslint/types@8.63.0))(typescript@5.9.3): + svelte2tsx@0.7.58(svelte@5.56.8(@typescript-eslint/types@8.63.0))(typescript@5.9.3): dependencies: dedent-js: 1.0.1 scule: 1.3.0 - svelte: 5.56.4(@typescript-eslint/types@8.63.0) + svelte: 5.56.8(@typescript-eslint/types@8.63.0) typescript: 5.9.3 svelte@5.56.4(@typescript-eslint/types@8.63.0): @@ -5877,10 +6174,33 @@ snapshots: transitivePeerDependencies: - '@typescript-eslint/types' + svelte@5.56.8(@typescript-eslint/types@8.63.0): + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + '@sveltejs/acorn-typescript': 1.0.10(acorn@8.17.0) + '@types/estree': 1.0.9 + '@types/trusted-types': 2.0.7 + acorn: 8.17.0 + aria-query: 5.3.1 + axobject-query: 4.1.0 + clsx: 2.1.1 + devalue: 5.8.1 + esm-env: 1.2.2 + esrap: 2.2.13(@typescript-eslint/types@8.63.0) + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.21 + zimmerframe: 1.1.4 + transitivePeerDependencies: + - '@typescript-eslint/types' + symbol-tree@3.2.4: {} tailwindcss@4.3.2: {} + tailwindcss@4.3.3: {} + tapable@2.3.3: {} tar@7.5.17: