authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-02-17 20:27:05-08:00
committergravatar for jmarminge@gmail.comJulius Marminge <jmarminge@gmail.com> 2026-02-18 23:54:48-08:00
loge9d40e448186a13dab4bcd9875e287689400ec14
tree478fee0c0d0876a1368a5d82e9884c609ea5217d
parented9f561dc3c75f65acb9bd60174afbbbfc4c3652

Adopt TanStack file-based routing with generated route tree

- Switch web router setup to TanStack file routes and generated `routeTree.gen.ts` - Move app bootstrap/event wiring into new root route component - Enable TanStack router Vite plugin and ignore generated route tree in oxlint

10 files changed, 369 insertions(+), 194 deletions(-)

.oxlintrc.json+8-1
......@@ -1,6 +1,13 @@
11{
22 "$schema": "./node_modules/oxlint/configuration_schema.json",
3 "ignorePatterns": ["dist", "dist-electron", "node_modules", "bun.lock", "*.tsbuildinfo"],
3 "ignorePatterns": [
4 "dist",
5 "dist-electron",
6 "node_modules",
7 "bun.lock",
8 "*.tsbuildinfo",
9 "**/routeTree.gen.ts"
10 ],
411 "plugins": ["eslint", "oxc", "react", "unicorn", "typescript"],
512 "categories": {
613 "correctness": "warn",
apps/web/package.json+1
......@@ -32,6 +32,7 @@
3232 },
3333 "devDependencies": {
3434 "@tailwindcss/vite": "^4.0.0",
35 "@tanstack/router-plugin": "^1.161.0",
3536 "@types/react": "^19.0.0",
3637 "@types/react-dom": "^19.0.0",
3738 "@vitejs/plugin-react": "^5.1.4",
apps/web/src/routeTree.gen.ts created+100
......@@ -0,0 +1,100 @@
1/* eslint-disable */
2
3// @ts-nocheck
4
5// noinspection JSUnusedGlobalSymbols
6
7// This file was automatically generated by TanStack Router.
8// You should NOT make any changes in this file as it will be overwritten.
9// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
10
11import { Route as rootRouteImport } from './routes/__root'
12import { Route as ChatRouteImport } from './routes/_chat'
13import { Route as ChatIndexRouteImport } from './routes/_chat.index'
14import { Route as ChatThreadIdRouteImport } from './routes/_chat.$threadId'
15
16const ChatRoute = ChatRouteImport.update({
17 id: '/_chat',
18 getParentRoute: () => rootRouteImport,
19} as any)
20const ChatIndexRoute = ChatIndexRouteImport.update({
21 id: '/',
22 path: '/',
23 getParentRoute: () => ChatRoute,
24} as any)
25const ChatThreadIdRoute = ChatThreadIdRouteImport.update({
26 id: '/$threadId',
27 path: '/$threadId',
28 getParentRoute: () => ChatRoute,
29} as any)
30
31export interface FileRoutesByFullPath {
32 '/': typeof ChatIndexRoute
33 '/$threadId': typeof ChatThreadIdRoute
34}
35export interface FileRoutesByTo {
36 '/$threadId': typeof ChatThreadIdRoute
37 '/': typeof ChatIndexRoute
38}
39export interface FileRoutesById {
40 __root__: typeof rootRouteImport
41 '/_chat': typeof ChatRouteWithChildren
42 '/_chat/$threadId': typeof ChatThreadIdRoute
43 '/_chat/': typeof ChatIndexRoute
44}
45export interface FileRouteTypes {
46 fileRoutesByFullPath: FileRoutesByFullPath
47 fullPaths: '/' | '/$threadId'
48 fileRoutesByTo: FileRoutesByTo
49 to: '/$threadId' | '/'
50 id: '__root__' | '/_chat' | '/_chat/$threadId' | '/_chat/'
51 fileRoutesById: FileRoutesById
52}
53export interface RootRouteChildren {
54 ChatRoute: typeof ChatRouteWithChildren
55}
56
57declare module '@tanstack/react-router' {
58 interface FileRoutesByPath {
59 '/_chat': {
60 id: '/_chat'
61 path: ''
62 fullPath: '/'
63 preLoaderRoute: typeof ChatRouteImport
64 parentRoute: typeof rootRouteImport
65 }
66 '/_chat/': {
67 id: '/_chat/'
68 path: '/'
69 fullPath: '/'
70 preLoaderRoute: typeof ChatIndexRouteImport
71 parentRoute: typeof ChatRoute
72 }
73 '/_chat/$threadId': {
74 id: '/_chat/$threadId'
75 path: '/$threadId'
76 fullPath: '/$threadId'
77 preLoaderRoute: typeof ChatThreadIdRouteImport
78 parentRoute: typeof ChatRoute
79 }
80 }
81}
82
83interface ChatRouteChildren {
84 ChatThreadIdRoute: typeof ChatThreadIdRoute
85 ChatIndexRoute: typeof ChatIndexRoute
86}
87
88const ChatRouteChildren: ChatRouteChildren = {
89 ChatThreadIdRoute: ChatThreadIdRoute,
90 ChatIndexRoute: ChatIndexRoute,
91}
92
93const ChatRouteWithChildren = ChatRoute._addFileChildren(ChatRouteChildren)
94
95const rootRouteChildren: RootRouteChildren = {
96 ChatRoute: ChatRouteWithChildren,
97}
98export const routeTree = rootRouteImport
99 ._addFileChildren(rootRouteChildren)
100 ._addFileTypes<FileRouteTypes>()
apps/web/src/router.tsx+2-28
......@@ -1,32 +1,6 @@
1import { Outlet, createRootRoute, createRoute, createRouter } from "@tanstack/react-router";
1import { createRouter } from "@tanstack/react-router";
22
3import { ChatThreadRouteView } from "./routes/_chat.$threadId";
4import { ChatIndexRouteView } from "./routes/_chat.index";
5import { ChatRouteLayout } from "./routes/_chat";
6
7const rootRoute = createRootRoute({
8 component: Outlet,
9});
10
11const chatRoute = createRoute({
12 getParentRoute: () => rootRoute,
13 path: "/",
14 component: ChatRouteLayout,
15});
16
17const chatIndexRoute = createRoute({
18 getParentRoute: () => chatRoute,
19 path: "/",
20 component: ChatIndexRouteView,
21});
22
23const chatThreadRoute = createRoute({
24 getParentRoute: () => chatRoute,
25 path: "$threadId",
26 component: ChatThreadRouteView,
27});
28
29const routeTree = rootRoute.addChildren([chatRoute.addChildren([chatIndexRoute, chatThreadRoute])]);
3import { routeTree } from "./routeTree.gen";
304
315export const router = createRouter({ routeTree });
326
apps/web/src/routes/__root.tsx created+172
......@@ -0,0 +1,172 @@
1import { Outlet, createRootRoute } from "@tanstack/react-router";
2import { useEffect, useRef } from "react";
3import { useQueryClient } from "@tanstack/react-query";
4
5import { isElectron } from "../env";
6import { useNativeApi } from "../hooks/useNativeApi";
7import { invalidateGitQueries } from "../lib/gitReactQuery";
8import { DEFAULT_MODEL } from "../model-logic";
9import { createThread } from "../threadFactory";
10import { useStore } from "../store";
11import { onServerWelcome } from "../wsNativeApi";
12
13function EventRouter() {
14 const api = useNativeApi();
15 const { dispatch } = useStore();
16 const queryClient = useQueryClient();
17 const activeAssistantItemRef = useRef<string | null>(null);
18
19 useEffect(() => {
20 if (!api) return;
21 return api.providers.onEvent((event) => {
22 if (event.method === "turn/completed") {
23 void invalidateGitQueries(queryClient);
24 }
25 dispatch({
26 type: "APPLY_EVENT",
27 event,
28 activeAssistantItemRef,
29 });
30 });
31 }, [api, dispatch, queryClient]);
32
33 useEffect(() => {
34 if (!api) return;
35 return api.terminal.onEvent((event) => {
36 dispatch({
37 type: "APPLY_TERMINAL_EVENT",
38 event,
39 });
40 });
41 }, [api, dispatch]);
42
43 return null;
44}
45
46function AutoProjectBootstrap() {
47 const { state, dispatch } = useStore();
48 const bootstrappedRef = useRef(false);
49
50 useEffect(() => {
51 // Browser mode bootstraps from server welcome.
52 // Electron bootstraps from persisted projects via DesktopProjectBootstrap.
53 if (isElectron) return;
54
55 return onServerWelcome((payload) => {
56 if (bootstrappedRef.current) return;
57
58 // Don't create duplicate projects for the same cwd
59 const existing = state.projects.find((project) => project.cwd === payload.cwd);
60 if (existing) {
61 bootstrappedRef.current = true;
62 // Ensure a thread is active
63 const existingThread = state.threads.find((thread) => thread.projectId === existing.id);
64 if (existingThread && !state.activeThreadId) {
65 dispatch({
66 type: "SET_ACTIVE_THREAD",
67 threadId: existingThread.id,
68 });
69 }
70 return;
71 }
72
73 bootstrappedRef.current = true;
74
75 // Create project + thread from server cwd
76 const projectId = crypto.randomUUID();
77 dispatch({
78 type: "ADD_PROJECT",
79 project: {
80 id: projectId,
81 name: payload.projectName,
82 cwd: payload.cwd,
83 model: DEFAULT_MODEL,
84 expanded: true,
85 },
86 });
87 dispatch({
88 type: "ADD_THREAD",
89 thread: createThread(projectId),
90 });
91 });
92 }, [state.projects, state.threads, state.activeThreadId, dispatch]);
93
94 return null;
95}
96
97function DesktopProjectBootstrap() {
98 const api = useNativeApi();
99 const { dispatch } = useStore();
100 const bootstrappedRef = useRef(false);
101
102 useEffect(() => {
103 if (!isElectron || !api || bootstrappedRef.current) return;
104
105 let disposed = false;
106 let retryDelayMs = 500;
107 let retryTimer: ReturnType<typeof setTimeout> | null = null;
108
109 const attemptBootstrap = async () => {
110 try {
111 const projects = await api.projects.list();
112 if (disposed) return;
113 dispatch({
114 type: "SYNC_PROJECTS",
115 projects: projects.map((project) => ({
116 id: project.id,
117 name: project.name,
118 cwd: project.cwd,
119 model: DEFAULT_MODEL,
120 expanded: true,
121 })),
122 });
123 bootstrappedRef.current = true;
124 } catch {
125 if (disposed) return;
126 retryTimer = setTimeout(() => {
127 retryTimer = null;
128 void attemptBootstrap();
129 }, retryDelayMs);
130 retryDelayMs = Math.min(retryDelayMs * 2, 5_000);
131 }
132 };
133
134 void attemptBootstrap();
135
136 return () => {
137 disposed = true;
138 if (retryTimer) {
139 clearTimeout(retryTimer);
140 }
141 };
142 }, [api, dispatch]);
143
144 return null;
145}
146
147function RootRouteView() {
148 const api = useNativeApi();
149
150 if (!api) {
151 return (
152 <div className="flex h-screen flex-col bg-background text-foreground">
153 <div className="flex flex-1 items-center justify-center">
154 <p className="text-sm text-muted-foreground">Connecting to T3 Code server...</p>
155 </div>
156 </div>
157 );
158 }
159
160 return (
161 <>
162 <EventRouter />
163 <AutoProjectBootstrap />
164 <DesktopProjectBootstrap />
165 <Outlet />
166 </>
167 );
168}
169
170export const Route = createRootRoute({
171 component: RootRouteView,
172});
apps/web/src/routes/_chat.$threadId.tsx+7-4
......@@ -1,14 +1,13 @@
1import { useNavigate, useParams } from "@tanstack/react-router";
1import { createFileRoute, useNavigate } from "@tanstack/react-router";
22import { useEffect } from "react";
33
44import ChatView from "../components/ChatView";
55import { useStore } from "../store";
66
7export function ChatThreadRouteView() {
7function ChatThreadRouteView() {
88 const { state, dispatch } = useStore();
99 const navigate = useNavigate();
10 const params = useParams({ strict: false });
11 const threadId = typeof params.threadId === "string" ? params.threadId : null;
10 const { threadId } = Route.useParams();
1211 const threadExists = threadId ? state.threads.some((thread) => thread.id === threadId) : false;
1312
1413 useEffect(() => {
......@@ -35,3 +34,7 @@ export function ChatThreadRouteView() {
3534
3635 return <ChatView threadId={threadId} />;
3736}
37
38export const Route = createFileRoute("/_chat/$threadId")({
39 component: ChatThreadRouteView,
40});
apps/web/src/routes/_chat.index.tsx+6-2
......@@ -1,4 +1,4 @@
1import { useNavigate } from "@tanstack/react-router";
1import { createFileRoute, useNavigate } from "@tanstack/react-router";
22import { type FormEvent, useMemo, useState } from "react";
33
44import { Button } from "../components/ui/button";
......@@ -6,7 +6,7 @@ import { Textarea } from "../components/ui/textarea";
66import { createThread } from "../threadFactory";
77import { useStore } from "../store";
88
9export function ChatIndexRouteView() {
9function ChatIndexRouteView() {
1010 const { state, dispatch } = useStore();
1111 const navigate = useNavigate();
1212 const [draft, setDraft] = useState("");
......@@ -82,3 +82,7 @@ export function ChatIndexRouteView() {
8282 </section>
8383 );
8484}
85
86export const Route = createFileRoute("/_chat/")({
87 component: ChatIndexRouteView,
88});
apps/web/src/routes/_chat.tsx+7-158
......@@ -1,153 +1,11 @@
1import { Outlet, useNavigate, useParams } from "@tanstack/react-router";
2import { useEffect, useRef } from "react";
3import { useQueryClient } from "@tanstack/react-query";
1import { Outlet, createFileRoute, useNavigate, useParams } from "@tanstack/react-router";
2import { useEffect } from "react";
43
54import DiffPanel from "../components/DiffPanel";
65import Sidebar from "../components/Sidebar";
7import { isElectron } from "../env";
8import { useNativeApi } from "../hooks/useNativeApi";
9import { invalidateGitQueries } from "../lib/gitReactQuery";
10import { DEFAULT_MODEL } from "../model-logic";
11import { createThread } from "../threadFactory";
126import { useStore } from "../store";
13import { onServerWelcome } from "../wsNativeApi";
147
15function EventRouter() {
16 const api = useNativeApi();
17 const { dispatch } = useStore();
18 const queryClient = useQueryClient();
19 const activeAssistantItemRef = useRef<string | null>(null);
20
21 useEffect(() => {
22 if (!api) return;
23 return api.providers.onEvent((event) => {
24 if (event.method === "turn/completed") {
25 void invalidateGitQueries(queryClient);
26 }
27 dispatch({
28 type: "APPLY_EVENT",
29 event,
30 activeAssistantItemRef,
31 });
32 });
33 }, [api, dispatch, queryClient]);
34
35 useEffect(() => {
36 if (!api) return;
37 return api.terminal.onEvent((event) => {
38 dispatch({
39 type: "APPLY_TERMINAL_EVENT",
40 event,
41 });
42 });
43 }, [api, dispatch]);
44
45 return null;
46}
47
48function AutoProjectBootstrap() {
49 const { state, dispatch } = useStore();
50 const bootstrappedRef = useRef(false);
51
52 useEffect(() => {
53 // Browser mode bootstraps from server welcome.
54 // Electron bootstraps from persisted projects via DesktopProjectBootstrap.
55 if (isElectron) return;
56
57 return onServerWelcome((payload) => {
58 if (bootstrappedRef.current) return;
59
60 // Don't create duplicate projects for the same cwd
61 const existing = state.projects.find((project) => project.cwd === payload.cwd);
62 if (existing) {
63 bootstrappedRef.current = true;
64 // Ensure a thread is active
65 const existingThread = state.threads.find((thread) => thread.projectId === existing.id);
66 if (existingThread && !state.activeThreadId) {
67 dispatch({
68 type: "SET_ACTIVE_THREAD",
69 threadId: existingThread.id,
70 });
71 }
72 return;
73 }
74
75 bootstrappedRef.current = true;
76
77 // Create project + thread from server cwd
78 const projectId = crypto.randomUUID();
79 dispatch({
80 type: "ADD_PROJECT",
81 project: {
82 id: projectId,
83 name: payload.projectName,
84 cwd: payload.cwd,
85 model: DEFAULT_MODEL,
86 expanded: true,
87 },
88 });
89 dispatch({
90 type: "ADD_THREAD",
91 thread: createThread(projectId),
92 });
93 });
94 }, [state.projects, state.threads, state.activeThreadId, dispatch]);
95
96 return null;
97}
98
99function DesktopProjectBootstrap() {
100 const api = useNativeApi();
101 const { dispatch } = useStore();
102 const bootstrappedRef = useRef(false);
103
104 useEffect(() => {
105 if (!isElectron || !api || bootstrappedRef.current) return;
106
107 let disposed = false;
108 let retryDelayMs = 500;
109 let retryTimer: ReturnType<typeof setTimeout> | null = null;
110
111 const attemptBootstrap = async () => {
112 try {
113 const projects = await api.projects.list();
114 if (disposed) return;
115 dispatch({
116 type: "SYNC_PROJECTS",
117 projects: projects.map((project) => ({
118 id: project.id,
119 name: project.name,
120 cwd: project.cwd,
121 model: DEFAULT_MODEL,
122 expanded: true,
123 })),
124 });
125 bootstrappedRef.current = true;
126 } catch {
127 if (disposed) return;
128 retryTimer = setTimeout(() => {
129 retryTimer = null;
130 void attemptBootstrap();
131 }, retryDelayMs);
132 retryDelayMs = Math.min(retryDelayMs * 2, 5_000);
133 }
134 };
135
136 void attemptBootstrap();
137
138 return () => {
139 disposed = true;
140 if (retryTimer) {
141 clearTimeout(retryTimer);
142 }
143 };
144 }, [api, dispatch]);
145
146 return null;
147}
148
149export function ChatRouteLayout() {
150 const api = useNativeApi();
8function ChatRouteLayout() {
1519 const { state } = useStore();
15210 const navigate = useNavigate();
15311 const params = useParams({ strict: false });
......@@ -162,24 +20,15 @@ export function ChatRouteLayout() {
16220 });
16321 }, [navigate, routeThreadId, state.activeThreadId]);
16422
165 if (!api) {
166 return (
167 <div className="flex h-screen flex-col bg-background text-foreground">
168 <div className="flex flex-1 items-center justify-center">
169 <p className="text-sm text-muted-foreground">Connecting to T3 Code server...</p>
170 </div>
171 </div>
172 );
173 }
174
17523 return (
17624 <div className="flex h-screen overflow-hidden bg-background text-foreground isolate">
177 <EventRouter />
178 <AutoProjectBootstrap />
179 <DesktopProjectBootstrap />
18025 <Sidebar />
18126 <Outlet />
18227 {state.diffOpen && <DiffPanel />}
18328 </div>
18429 );
18530}
31
32export const Route = createFileRoute("/_chat")({
33 component: ChatRouteLayout,
34});
apps/web/vite.config.ts+2
......@@ -1,11 +1,13 @@
11import tailwindcss from "@tailwindcss/vite";
22import react from "@vitejs/plugin-react";
3import { TanStackRouterVite } from "@tanstack/router-plugin/vite";
34import { defineConfig } from "vite";
45
56const port = Number(process.env.PORT ?? 5173);
67
78export default defineConfig({
89 plugins: [
10 TanStackRouterVite(),
911 react({
1012 babel: {
1113 plugins: [["babel-plugin-react-compiler", { target: "19" }]],
bun.lock+64-1
......@@ -72,6 +72,7 @@
7272 },
7373 "devDependencies": {
7474 "@tailwindcss/vite": "^4.0.0",
75 "@tanstack/router-plugin": "^1.161.0",
7576 "@types/react": "^19.0.0",
7677 "@types/react-dom": "^19.0.0",
7778 "@vitejs/plugin-react": "^5.1.4",
......@@ -122,6 +123,10 @@
122123
123124 "@babel/parser": ["@babel/parser@8.0.0-rc.1", "", { "dependencies": { "@babel/types": "^8.0.0-rc.1" }, "bin": "./bin/babel-parser.js" }, "sha512-6HyyU5l1yK/7h9Ki52i5h6mDAx4qJdiLQO4FdCyJNoB/gy3T3GGJdhQzzbZgvgZCugYBvwtQiWRt94QKedHnkA=="],
124125
126 "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w=="],
127
128 "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A=="],
129
125130 "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="],
126131
127132 "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="],
......@@ -464,8 +469,16 @@
464469
465470 "@tanstack/router-core": ["@tanstack/router-core@1.160.0", "", { "dependencies": { "@tanstack/history": "1.154.14", "@tanstack/store": "^0.8.0", "cookie-es": "^2.0.0", "seroval": "^1.4.2", "seroval-plugins": "^1.4.2", "tiny-invariant": "^1.3.3", "tiny-warning": "^1.0.3" } }, "sha512-vbh6OsE0MG+0c+SKh2uk5yEEZlWsxT96Ub2JaTs7ixOvZp3Wu9PTEIe2BA3cShNZhEsDI0Le4NqgY4XIaHLLvA=="],
466471
472 "@tanstack/router-generator": ["@tanstack/router-generator@1.160.1", "", { "dependencies": { "@tanstack/router-core": "1.160.0", "@tanstack/router-utils": "1.158.0", "@tanstack/virtual-file-routes": "1.154.7", "prettier": "^3.5.0", "recast": "^0.23.11", "source-map": "^0.7.4", "tsx": "^4.19.2", "zod": "^3.24.2" } }, "sha512-De6TicInwy3/9rQ++RZAyFOvB2oi5UV5T0iiIlxe3jgiOLFxMA4EKKVlT+alDxKnq6udTLam9xqhvGOVZ6a2hw=="],
473
474 "@tanstack/router-plugin": ["@tanstack/router-plugin@1.161.0", "", { "dependencies": { "@babel/core": "^7.28.5", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", "@tanstack/router-core": "1.160.0", "@tanstack/router-generator": "1.160.1", "@tanstack/router-utils": "1.158.0", "@tanstack/virtual-file-routes": "1.154.7", "chokidar": "^3.6.0", "unplugin": "^2.1.2", "zod": "^3.24.2" }, "peerDependencies": { "@rsbuild/core": ">=1.0.2", "@tanstack/react-router": "^1.160.2", "vite": ">=5.0.0 || >=6.0.0 || >=7.0.0", "vite-plugin-solid": "^2.11.10", "webpack": ">=5.92.0" }, "optionalPeers": ["@rsbuild/core", "@tanstack/react-router", "vite", "vite-plugin-solid", "webpack"] }, "sha512-E0JGeMdKGYYMMjOEiM+330nIs0PG3nE/9KyU+7+SV54hDf4Xdt6BC3J9pDj1qA3oNqI5DwwTsG7GBA+7m47O4A=="],
475
476 "@tanstack/router-utils": ["@tanstack/router-utils@1.158.0", "", { "dependencies": { "@babel/core": "^7.28.5", "@babel/generator": "^7.28.5", "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "ansis": "^4.1.0", "babel-dead-code-elimination": "^1.0.12", "diff": "^8.0.2", "pathe": "^2.0.3", "tinyglobby": "^0.2.15" } }, "sha512-qZ76eaLKU6Ae9iI/mc5zizBX149DXXZkBVVO3/QRIll79uKLJZHQlMKR++2ba7JsciBWz1pgpIBcCJPE9S0LVg=="],
477
467478 "@tanstack/store": ["@tanstack/store@0.8.1", "", {}, "sha512-PtOisLjUZPz5VyPRSCGjNOlwTvabdTBQ2K80DpVL1chGVr35WRxfeavAPdNq6pm/t7F8GhoR2qtmkkqtCEtHYw=="],
468479
480 "@tanstack/virtual-file-routes": ["@tanstack/virtual-file-routes@1.154.7", "", {}, "sha512-cHHDnewHozgjpI+MIVp9tcib6lYEQK5MyUr0ChHpHFGBl8Xei55rohFK0I0ve/GKoHeioaK42Smd8OixPp6CTg=="],
481
469482 "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="],
470483
471484 "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="],
......@@ -538,26 +551,36 @@
538551
539552 "@xterm/xterm": ["@xterm/xterm@6.0.0", "", {}, "sha512-TQwDdQGtwwDt+2cgKDLn0IRaSxYu1tSUjgKarSDkUM0ZNiSRXFpjxEsvc/Zgc5kq5omJ+V0a8/kIM2WD3sMOYg=="],
540553
554 "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="],
555
541556 "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
542557
543558 "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
544559
545560 "ansis": ["ansis@4.2.0", "", {}, "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig=="],
546561
562 "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="],
563
547564 "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="],
548565
549566 "ast-kit": ["ast-kit@3.0.0-beta.1", "", { "dependencies": { "@babel/parser": "^8.0.0-beta.4", "estree-walker": "^3.0.3", "pathe": "^2.0.3" } }, "sha512-trmleAnZ2PxN/loHWVhhx1qeOHSRXq4TDsBBxq3GqeJitfk3+jTQ+v/C1km/KYq9M7wKqCewMh+/NAvVH7m+bw=="],
550567
568 "ast-types": ["ast-types@0.16.1", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg=="],
569
551570 "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="],
552571
553572 "axios": ["axios@1.13.5", "", { "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", "proxy-from-env": "^1.1.0" } }, "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q=="],
554573
574 "babel-dead-code-elimination": ["babel-dead-code-elimination@1.0.12", "", { "dependencies": { "@babel/core": "^7.23.7", "@babel/parser": "^7.23.6", "@babel/traverse": "^7.23.7", "@babel/types": "^7.23.6" } }, "sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig=="],
575
555576 "babel-plugin-react-compiler": ["babel-plugin-react-compiler@19.0.0-beta-ebf51a3-20250411", "", { "dependencies": { "@babel/types": "^7.26.0" } }, "sha512-q84bNR9JG1crykAlJUt5Ud0/5BUyMFuQww/mrwIQDFBaxsikqBDj3f/FNDsVd2iR26A1HvXKWPEIfgJDv8/V2g=="],
556577
557578 "bail": ["bail@2.0.2", "", {}, "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="],
558579
559580 "baseline-browser-mapping": ["baseline-browser-mapping@2.9.19", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg=="],
560581
582 "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="],
583
561584 "birpc": ["birpc@4.0.0", "", {}, "sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw=="],
562585
563586 "boolean": ["boolean@3.2.0", "", {}, "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw=="],
......@@ -594,6 +617,8 @@
594617
595618 "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="],
596619
620 "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="],
621
597622 "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="],
598623
599624 "cli-width": ["cli-width@4.1.0", "", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="],
......@@ -690,6 +715,8 @@
690715
691716 "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="],
692717
718 "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="],
719
693720 "estree-util-is-identifier-name": ["estree-util-is-identifier-name@3.0.0", "", {}, "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="],
694721
695722 "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="],
......@@ -728,6 +755,8 @@
728755
729756 "get-tsconfig": ["get-tsconfig@4.13.6", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw=="],
730757
758 "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
759
731760 "global-agent": ["global-agent@3.0.0", "", { "dependencies": { "boolean": "^3.0.1", "es6-error": "^4.1.1", "matcher": "^3.0.0", "roarr": "^2.15.3", "semver": "^7.3.2", "serialize-error": "^7.0.1" } }, "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q=="],
732761
733762 "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="],
......@@ -784,12 +813,18 @@
784813
785814 "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="],
786815
816 "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="],
817
787818 "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="],
788819
789820 "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="],
790821
822 "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
823
791824 "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
792825
826 "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
827
793828 "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="],
794829
795830 "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="],
......@@ -980,7 +1015,7 @@
9801015
9811016 "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="],
9821017
983 "normalize-path": ["normalize-path@2.1.1", "", { "dependencies": { "remove-trailing-separator": "^1.0.1" } }, "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w=="],
1018 "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="],
9841019
9851020 "normalize-url": ["normalize-url@6.1.0", "", {}, "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="],
9861021
......@@ -1020,6 +1055,8 @@
10201055
10211056 "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="],
10221057
1058 "prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="],
1059
10231060 "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="],
10241061
10251062 "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="],
......@@ -1040,6 +1077,10 @@
10401077
10411078 "react-refresh": ["react-refresh@0.18.0", "", {}, "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw=="],
10421079
1080 "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="],
1081
1082 "recast": ["recast@0.23.11", "", { "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" } }, "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA=="],
1083
10431084 "regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="],
10441085
10451086 "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="],
......@@ -1104,6 +1145,8 @@
11041145
11051146 "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
11061147
1148 "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="],
1149
11071150 "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
11081151
11091152 "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="],
......@@ -1176,6 +1219,8 @@
11761219
11771220 "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
11781221
1222 "tsx": ["tsx@4.21.0", "", { "dependencies": { "esbuild": "~0.27.0", "get-tsconfig": "^4.7.5" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw=="],
1223
11791224 "turbo": ["turbo@2.8.7", "", { "optionalDependencies": { "turbo-darwin-64": "2.8.7", "turbo-darwin-arm64": "2.8.7", "turbo-linux-64": "2.8.7", "turbo-linux-arm64": "2.8.7", "turbo-windows-64": "2.8.7", "turbo-windows-arm64": "2.8.7" }, "bin": { "turbo": "bin/turbo" } }, "sha512-RBLh5caMAu1kFdTK1jgH2gH/z+jFsvX5rGbhgJ9nlIAWXSvxlzwId05uDlBA1+pBd3wO/UaKYzaQZQBXDd7kcA=="],
11801225
11811226 "turbo-darwin-64": ["turbo-darwin-64@2.8.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-Xr4TO/oDDwoozbDtBvunb66g//WK8uHRygl72vUthuwzmiw48pil4IuoG/QbMHd9RE8aBnVmzC0WZEWk/WWt3A=="],
......@@ -1216,6 +1261,8 @@
12161261
12171262 "unixify": ["unixify@1.0.0", "", { "dependencies": { "normalize-path": "^2.1.1" } }, "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg=="],
12181263
1264 "unplugin": ["unplugin@2.3.11", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "acorn": "^8.15.0", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" } }, "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww=="],
1265
12191266 "unrun": ["unrun@0.2.27", "", { "dependencies": { "rolldown": "1.0.0-rc.3" }, "peerDependencies": { "synckit": "^0.11.11" }, "optionalPeers": ["synckit"], "bin": { "unrun": "dist/cli.mjs" } }, "sha512-Mmur1UJpIbfxasLOhPRvox/QS4xBiDii71hMP7smfRthGcwFL2OAmYRgduLANOAU4LUkvVamuP+02U+c90jlrw=="],
12201267
12211268 "until-async": ["until-async@3.0.2", "", {}, "sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw=="],
......@@ -1236,6 +1283,8 @@
12361283
12371284 "watchboy": ["watchboy@0.4.3", "", { "dependencies": { "lodash.difference": "^4.5.0", "micromatch": "^4.0.2", "pify": "^4.0.1", "unixify": "^1.0.0" } }, "sha512-GHs1HxwvxSMBsqd/WfTOZhj5gBdMqf5HQpfgtKxDfZRxrlYPDdVLRB61LCeRzJaWANmvSIMlfmRVDwVmJFgAKA=="],
12381285
1286 "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="],
1287
12391288 "why-is-node-running": ["why-is-node-running@2.3.0", "", { "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" }, "bin": { "why-is-node-running": "cli.js" } }, "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w=="],
12401289
12411290 "wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
......@@ -1304,12 +1353,20 @@
13041353
13051354 "@tailwindcss/vite/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="],
13061355
1356 "@tanstack/router-utils/@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="],
1357
1358 "@tanstack/router-utils/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="],
1359
13071360 "@types/babel__core/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="],
13081361
13091362 "@types/babel__template/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="],
13101363
13111364 "@vitejs/plugin-react/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="],
13121365
1366 "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
1367
1368 "babel-dead-code-elimination/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="],
1369
13131370 "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="],
13141371
13151372 "clone-response/mimic-response": ["mimic-response@1.0.1", "", {}, "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="],
......@@ -1322,10 +1379,16 @@
13221379
13231380 "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="],
13241381
1382 "readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
1383
1384 "recast/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
1385
13251386 "rolldown-plugin-dts/@babel/types": ["@babel/types@8.0.0-rc.1", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.0-rc.1", "@babel/helper-validator-identifier": "^8.0.0-rc.1" } }, "sha512-ubmJ6TShyaD69VE9DQrlXcdkvJbmwWPB8qYj0H2kaJi29O7vJT9ajSdBd2W8CG34pwL9pYA74fi7RHC1qbLoVQ=="],
13261387
13271388 "serialize-error/type-fest": ["type-fest@0.13.1", "", {}, "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg=="],
13281389
1390 "unixify/normalize-path": ["normalize-path@2.1.1", "", { "dependencies": { "remove-trailing-separator": "^1.0.1" } }, "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w=="],
1391
13291392 "vitest/vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="],
13301393
13311394 "@babel/generator/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@8.0.0-rc.1", "", {}, "sha512-vi/pfmbrOtQmqgfboaBhaCU50G7mcySVu69VU8z+lYoPPB6WzI9VgV7WQfL908M4oeSH5fDkmoupIqoE0SdApw=="],