Description
+{description}
+Checks
{checks.length} of {checks.length} passing{c.name}{c.phase}Columns
{c.name}{c.desc}{c.type.toLowerCase()}From 1de11780861146fa3ba303052f1ccaabe0d77be5 Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Thu, 29 Oct 2026 06:56:55 +0000 Subject: [PATCH 01/58] feat(ui): add the orchestration UI prototype as a SvelteKit app Port the prototype pages, components and styles into ui/ as a static single-page app, with neutral example owners and data. --- ui/.gitignore | 5 + ui/.npmrc | 1 + ui/README.md | 22 + ui/components.json | 20 + ui/package-lock.json | 2235 +++++++++++++++++ ui/package.json | 43 + ui/src/app.d.ts | 13 + ui/src/app.html | 23 + ui/src/lib/assets/favicon.svg | 1 + ui/src/lib/components/app-sidebar.svelte | 141 ++ ui/src/lib/components/app-topbar.svelte | 42 + .../lib/components/code/code-preview.svelte | 150 ++ ui/src/lib/components/code/sql-viewer.svelte | 655 +++++ .../lib/components/lineage/asset-node.svelte | 245 ++ .../components/lineage/col-cell-node.svelte | 54 + .../lineage/inspector-section.svelte | 68 + .../lineage/node-fields-popover.svelte | 37 + .../lib/components/list/filter-button.svelte | 36 + .../lib/components/list/list-toolbar.svelte | 117 + .../lib/components/list/relative-time.svelte | 14 + .../components/list/segmented-filter.svelte | 52 + .../lib/components/list/status-label.svelte | 27 + .../components/timeline/run-timeline.svelte | 517 ++++ ui/src/lib/components/ui/badge/badge.svelte | 49 + ui/src/lib/components/ui/badge/index.ts | 2 + ui/src/lib/components/ui/button/button.svelte | 82 + ui/src/lib/components/ui/button/index.ts | 17 + .../lib/components/ui/card/card-action.svelte | 23 + .../components/ui/card/card-content.svelte | 20 + .../ui/card/card-description.svelte | 20 + .../lib/components/ui/card/card-footer.svelte | 20 + .../lib/components/ui/card/card-header.svelte | 23 + .../lib/components/ui/card/card-title.svelte | 20 + ui/src/lib/components/ui/card/card.svelte | 22 + ui/src/lib/components/ui/card/index.ts | 25 + .../components/ui/checkbox/checkbox.svelte | 39 + ui/src/lib/components/ui/checkbox/index.ts | 6 + .../dropdown-menu-checkbox-group.svelte | 16 + .../dropdown-menu-checkbox-item.svelte | 44 + .../dropdown-menu-content.svelte | 31 + .../dropdown-menu-group-heading.svelte | 22 + .../dropdown-menu/dropdown-menu-group.svelte | 7 + .../dropdown-menu/dropdown-menu-item.svelte | 27 + .../dropdown-menu/dropdown-menu-label.svelte | 24 + .../dropdown-menu/dropdown-menu-portal.svelte | 7 + .../dropdown-menu-radio-group.svelte | 16 + .../dropdown-menu-radio-item.svelte | 34 + .../dropdown-menu-separator.svelte | 17 + .../dropdown-menu-shortcut.svelte | 20 + .../dropdown-menu-sub-content.svelte | 17 + .../dropdown-menu-sub-trigger.svelte | 29 + .../ui/dropdown-menu/dropdown-menu-sub.svelte | 7 + .../dropdown-menu-trigger.svelte | 7 + .../ui/dropdown-menu/dropdown-menu.svelte | 7 + .../lib/components/ui/dropdown-menu/index.ts | 54 + ui/src/lib/components/ui/popover/index.ts | 28 + .../ui/popover/popover-close.svelte | 7 + .../ui/popover/popover-content.svelte | 31 + .../ui/popover/popover-description.svelte | 20 + .../ui/popover/popover-header.svelte | 20 + .../ui/popover/popover-portal.svelte | 7 + .../ui/popover/popover-title.svelte | 20 + .../ui/popover/popover-trigger.svelte | 17 + .../lib/components/ui/popover/popover.svelte | 7 + ui/src/lib/components/ui/separator/index.ts | 7 + .../components/ui/separator/separator.svelte | 23 + ui/src/lib/components/ui/table/index.ts | 28 + .../lib/components/ui/table/table-body.svelte | 15 + .../components/ui/table/table-caption.svelte | 20 + .../lib/components/ui/table/table-cell.svelte | 15 + .../components/ui/table/table-footer.svelte | 20 + .../lib/components/ui/table/table-head.svelte | 15 + .../components/ui/table/table-header.svelte | 20 + .../lib/components/ui/table/table-row.svelte | 15 + ui/src/lib/components/ui/table/table.svelte | 17 + ui/src/lib/components/ui/tabs/index.ts | 18 + .../components/ui/tabs/tabs-content.svelte | 17 + .../lib/components/ui/tabs/tabs-list.svelte | 40 + .../components/ui/tabs/tabs-trigger.svelte | 23 + ui/src/lib/components/ui/tabs/tabs.svelte | 19 + ui/src/lib/components/ui/tooltip/index.ts | 19 + .../ui/tooltip/tooltip-content.svelte | 52 + .../ui/tooltip/tooltip-portal.svelte | 7 + .../ui/tooltip/tooltip-provider.svelte | 7 + .../ui/tooltip/tooltip-trigger.svelte | 7 + .../lib/components/ui/tooltip/tooltip.svelte | 7 + ui/src/lib/config/config-form.svelte | 178 ++ ui/src/lib/index.ts | 1 + ui/src/lib/lineage/column-lineage.svelte | 549 ++++ ui/src/lib/lineage/flow-controller.svelte | 23 + ui/src/lib/lineage/graph-draw.ts | 96 + ui/src/lib/lineage/graph-layout.ts | 132 + ui/src/lib/lineage/layout.ts | 52 + ui/src/lib/lineage/node-fields.svelte.ts | 72 + ui/src/lib/lineage/scoped-lineage.svelte | 206 ++ ui/src/lib/lineage/trace.ts | 53 + ui/src/lib/mock/model-sql.ts | 92 + ui/src/lib/mock/scale-graph.ts | 158 ++ ui/src/lib/mock/timeline.ts | 81 + ui/src/lib/run/run-panel.svelte | 382 +++ ui/src/lib/sql/diff.ts | 64 + ui/src/lib/sql/highlight.ts | 52 + ui/src/lib/sql/outline.ts | 72 + ui/src/lib/theme.svelte.ts | 21 + ui/src/lib/utils.ts | 13 + ui/src/routes/+layout.svelte | 17 + ui/src/routes/+layout.ts | 5 + ui/src/routes/+page.svelte | 257 ++ ui/src/routes/catalog/+page.svelte | 195 ++ ui/src/routes/catalog/[name]/+page.svelte | 772 ++++++ ui/src/routes/checks/+page.svelte | 132 + ui/src/routes/jobs/+page.svelte | 135 + ui/src/routes/jobs/[name]/+page.svelte | 181 ++ ui/src/routes/layout.css | 456 ++++ ui/src/routes/lineage/+page.svelte | 1579 ++++++++++++ ui/src/routes/providers/+page.svelte | 102 + ui/src/routes/providers/[id]/+page.svelte | 120 + ui/src/routes/runs/+page.svelte | 148 ++ ui/src/routes/runs/[id]/+page.svelte | 832 ++++++ ui/src/routes/triggers/+page.svelte | 189 ++ ui/static/favicon.png | Bin 0 -> 6618 bytes ui/static/logo-light.png | Bin 0 -> 83682 bytes ui/static/logo.png | Bin 0 -> 94277 bytes ui/static/robots.txt | 3 + ui/svelte.config.js | 21 + ui/tsconfig.json | 20 + ui/vite.config.ts | 5 + 127 files changed, 13306 insertions(+) create mode 100644 ui/.gitignore create mode 100644 ui/.npmrc create mode 100644 ui/README.md create mode 100644 ui/components.json create mode 100644 ui/package-lock.json create mode 100644 ui/package.json create mode 100644 ui/src/app.d.ts create mode 100644 ui/src/app.html create mode 100644 ui/src/lib/assets/favicon.svg create mode 100644 ui/src/lib/components/app-sidebar.svelte create mode 100644 ui/src/lib/components/app-topbar.svelte create mode 100644 ui/src/lib/components/code/code-preview.svelte create mode 100644 ui/src/lib/components/code/sql-viewer.svelte create mode 100644 ui/src/lib/components/lineage/asset-node.svelte create mode 100644 ui/src/lib/components/lineage/col-cell-node.svelte create mode 100644 ui/src/lib/components/lineage/inspector-section.svelte create mode 100644 ui/src/lib/components/lineage/node-fields-popover.svelte create mode 100644 ui/src/lib/components/list/filter-button.svelte create mode 100644 ui/src/lib/components/list/list-toolbar.svelte create mode 100644 ui/src/lib/components/list/relative-time.svelte create mode 100644 ui/src/lib/components/list/segmented-filter.svelte create mode 100644 ui/src/lib/components/list/status-label.svelte create mode 100644 ui/src/lib/components/timeline/run-timeline.svelte create mode 100644 ui/src/lib/components/ui/badge/badge.svelte create mode 100644 ui/src/lib/components/ui/badge/index.ts create mode 100644 ui/src/lib/components/ui/button/button.svelte create mode 100644 ui/src/lib/components/ui/button/index.ts create mode 100644 ui/src/lib/components/ui/card/card-action.svelte create mode 100644 ui/src/lib/components/ui/card/card-content.svelte create mode 100644 ui/src/lib/components/ui/card/card-description.svelte create mode 100644 ui/src/lib/components/ui/card/card-footer.svelte create mode 100644 ui/src/lib/components/ui/card/card-header.svelte create mode 100644 ui/src/lib/components/ui/card/card-title.svelte create mode 100644 ui/src/lib/components/ui/card/card.svelte create mode 100644 ui/src/lib/components/ui/card/index.ts create mode 100644 ui/src/lib/components/ui/checkbox/checkbox.svelte create mode 100644 ui/src/lib/components/ui/checkbox/index.ts create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte create mode 100644 ui/src/lib/components/ui/dropdown-menu/index.ts create mode 100644 ui/src/lib/components/ui/popover/index.ts create mode 100644 ui/src/lib/components/ui/popover/popover-close.svelte create mode 100644 ui/src/lib/components/ui/popover/popover-content.svelte create mode 100644 ui/src/lib/components/ui/popover/popover-description.svelte create mode 100644 ui/src/lib/components/ui/popover/popover-header.svelte create mode 100644 ui/src/lib/components/ui/popover/popover-portal.svelte create mode 100644 ui/src/lib/components/ui/popover/popover-title.svelte create mode 100644 ui/src/lib/components/ui/popover/popover-trigger.svelte create mode 100644 ui/src/lib/components/ui/popover/popover.svelte create mode 100644 ui/src/lib/components/ui/separator/index.ts create mode 100644 ui/src/lib/components/ui/separator/separator.svelte create mode 100644 ui/src/lib/components/ui/table/index.ts create mode 100644 ui/src/lib/components/ui/table/table-body.svelte create mode 100644 ui/src/lib/components/ui/table/table-caption.svelte create mode 100644 ui/src/lib/components/ui/table/table-cell.svelte create mode 100644 ui/src/lib/components/ui/table/table-footer.svelte create mode 100644 ui/src/lib/components/ui/table/table-head.svelte create mode 100644 ui/src/lib/components/ui/table/table-header.svelte create mode 100644 ui/src/lib/components/ui/table/table-row.svelte create mode 100644 ui/src/lib/components/ui/table/table.svelte create mode 100644 ui/src/lib/components/ui/tabs/index.ts create mode 100644 ui/src/lib/components/ui/tabs/tabs-content.svelte create mode 100644 ui/src/lib/components/ui/tabs/tabs-list.svelte create mode 100644 ui/src/lib/components/ui/tabs/tabs-trigger.svelte create mode 100644 ui/src/lib/components/ui/tabs/tabs.svelte create mode 100644 ui/src/lib/components/ui/tooltip/index.ts create mode 100644 ui/src/lib/components/ui/tooltip/tooltip-content.svelte create mode 100644 ui/src/lib/components/ui/tooltip/tooltip-portal.svelte create mode 100644 ui/src/lib/components/ui/tooltip/tooltip-provider.svelte create mode 100644 ui/src/lib/components/ui/tooltip/tooltip-trigger.svelte create mode 100644 ui/src/lib/components/ui/tooltip/tooltip.svelte create mode 100644 ui/src/lib/config/config-form.svelte create mode 100644 ui/src/lib/index.ts create mode 100644 ui/src/lib/lineage/column-lineage.svelte create mode 100644 ui/src/lib/lineage/flow-controller.svelte create mode 100644 ui/src/lib/lineage/graph-draw.ts create mode 100644 ui/src/lib/lineage/graph-layout.ts create mode 100644 ui/src/lib/lineage/layout.ts create mode 100644 ui/src/lib/lineage/node-fields.svelte.ts create mode 100644 ui/src/lib/lineage/scoped-lineage.svelte create mode 100644 ui/src/lib/lineage/trace.ts create mode 100644 ui/src/lib/mock/model-sql.ts create mode 100644 ui/src/lib/mock/scale-graph.ts create mode 100644 ui/src/lib/mock/timeline.ts create mode 100644 ui/src/lib/run/run-panel.svelte create mode 100644 ui/src/lib/sql/diff.ts create mode 100644 ui/src/lib/sql/highlight.ts create mode 100644 ui/src/lib/sql/outline.ts create mode 100644 ui/src/lib/theme.svelte.ts create mode 100644 ui/src/lib/utils.ts create mode 100644 ui/src/routes/+layout.svelte create mode 100644 ui/src/routes/+layout.ts create mode 100644 ui/src/routes/+page.svelte create mode 100644 ui/src/routes/catalog/+page.svelte create mode 100644 ui/src/routes/catalog/[name]/+page.svelte create mode 100644 ui/src/routes/checks/+page.svelte create mode 100644 ui/src/routes/jobs/+page.svelte create mode 100644 ui/src/routes/jobs/[name]/+page.svelte create mode 100644 ui/src/routes/layout.css create mode 100644 ui/src/routes/lineage/+page.svelte create mode 100644 ui/src/routes/providers/+page.svelte create mode 100644 ui/src/routes/providers/[id]/+page.svelte create mode 100644 ui/src/routes/runs/+page.svelte create mode 100644 ui/src/routes/runs/[id]/+page.svelte create mode 100644 ui/src/routes/triggers/+page.svelte create mode 100644 ui/static/favicon.png create mode 100644 ui/static/logo-light.png create mode 100644 ui/static/logo.png create mode 100644 ui/static/robots.txt create mode 100644 ui/svelte.config.js create mode 100644 ui/tsconfig.json create mode 100644 ui/vite.config.ts diff --git a/ui/.gitignore b/ui/.gitignore new file mode 100644 index 0000000000..dccd4e2705 --- /dev/null +++ b/ui/.gitignore @@ -0,0 +1,5 @@ +node_modules/ +.svelte-kit/ +build/ +.vite/ +vite.config.ts.timestamp-* diff --git a/ui/.npmrc b/ui/.npmrc new file mode 100644 index 0000000000..b6f27f1359 --- /dev/null +++ b/ui/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/ui/README.md b/ui/README.md new file mode 100644 index 0000000000..ee51449d9e --- /dev/null +++ b/ui/README.md @@ -0,0 +1,22 @@ +# SQLBuild UI + +The SQLBuild orchestration web UI: a SvelteKit single-page app built to static +assets (`adapter-static`, SPA fallback, no SSR). + +This is an early, preliminary version. Pages read from a typed data layer in +`src/lib/api/`; until the server API exists, that layer is backed by an +in-memory mock client with neutral example data. + +## Develop + +```sh +npm ci +npm run dev +``` + +## Check and build + +```sh +npm run check +npm run build # writes static assets to build/ +``` diff --git a/ui/components.json b/ui/components.json new file mode 100644 index 0000000000..5e6e1e67aa --- /dev/null +++ b/ui/components.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://shadcn-svelte.com/schema.json", + "tailwind": { + "css": "src/routes/layout.css", + "baseColor": "neutral" + }, + "aliases": { + "components": "$lib/components", + "utils": "$lib/utils", + "ui": "$lib/components/ui", + "hooks": "$lib/hooks", + "lib": "$lib" + }, + "typescript": true, + "registry": "https://shadcn-svelte.com/registry", + "style": "vega", + "iconLibrary": "lucide", + "menuColor": "default", + "menuAccent": "subtle" +} diff --git a/ui/package-lock.json b/ui/package-lock.json new file mode 100644 index 0000000000..596a6dcf23 --- /dev/null +++ b/ui/package-lock.json @@ -0,0 +1,2235 @@ +{ + "name": "sqlbuild-ui", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "sqlbuild-ui", + "version": "0.0.1", + "dependencies": { + "@dagrejs/dagre": "^3.0.0", + "@fontsource-variable/space-grotesk": "^5.2.10", + "@fontsource/ibm-plex-mono": "^5.2.7", + "@xyflow/svelte": "^1.6.0", + "prismjs": "^1.30.0" + }, + "devDependencies": { + "@fontsource-variable/inter": "^5.2.8", + "@internationalized/date": "^3.12.2", + "@lucide/svelte": "^1.17.0", + "@sveltejs/adapter-static": "^3.0.10", + "@sveltejs/kit": "^2.57.0", + "@sveltejs/vite-plugin-svelte": "^7.0.0", + "@tailwindcss/typography": "^0.5.19", + "@tailwindcss/vite": "^4.2.2", + "@types/prismjs": "^1.26.6", + "bits-ui": "^2.18.1", + "clsx": "^2.1.1", + "shadcn-svelte": "^1.3.0", + "svelte": "^5.55.2", + "svelte-check": "^4.4.6", + "tailwind-merge": "^3.6.0", + "tailwind-variants": "^3.2.2", + "tailwindcss": "^4.2.2", + "tw-animate-css": "^1.4.0", + "typescript": "^6.0.2", + "vite": "^8.0.7" + } + }, + "node_modules/@dagrejs/dagre": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@dagrejs/dagre/-/dagre-3.0.0.tgz", + "integrity": "sha512-ZzhnTy1rfuoew9Ez3EIw4L2znPGnYYhfn8vc9c4oB8iw6QAsszbiU0vRhlxWPFnmmNSFAkrYeF1PhM5m4lAN0Q==", + "license": "MIT", + "dependencies": { + "@dagrejs/graphlib": "4.0.1" + } + }, + "node_modules/@dagrejs/graphlib": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@dagrejs/graphlib/-/graphlib-4.0.1.tgz", + "integrity": "sha512-IvcV6FduIIAmLwnH+yun+QtV36SC7mERqa86aClNqmMN09WhmPPYU8ckHrZBozErf+UvHPWOTJYaGYiIcs0DgA==", + "license": "MIT" + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@fontsource-variable/inter": { + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@fontsource-variable/inter/-/inter-5.2.8.tgz", + "integrity": "sha512-kOfP2D+ykbcX/P3IFnokOhVRNoTozo5/JxhAIVYLpea/UBmCQ/YWPBfWIDuBImXX/15KH+eKh4xpEUyS2sQQGQ==", + "dev": true, + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource-variable/space-grotesk": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/@fontsource-variable/space-grotesk/-/space-grotesk-5.2.10.tgz", + "integrity": "sha512-yJQO/o35/hAP3CFnpdFTwQku2yzJOae2HIpBmqkOVoxhhXJaQP3g+b6Jrz7u+eI7A5ZdCIf88uMWpBJdFiGr5w==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/ibm-plex-mono": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@fontsource/ibm-plex-mono/-/ibm-plex-mono-5.2.7.tgz", + "integrity": "sha512-MKAb8qV+CaiMQn2B0dIi1OV3565NYzp3WN5b4oT6LTkk+F0jR6j0ZN+5BKJiIhffDC3rtBULsYZE65+0018z9w==", + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@internationalized/date": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.2.tgz", + "integrity": "sha512-FY1Y+H64NDs+HAF6omlnWxm3mEpfgaCSWtL5l551ZZfImA+kGjPFgrnJrGjH6lfmLL0g8Z/mBu1R3kufeCp6Jw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lucide/svelte": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@lucide/svelte/-/svelte-1.17.0.tgz", + "integrity": "sha512-q06YCFBN5CO8cd1ADmLCxWRVMVb7xxvHzqC0lvNoxGa+FLW6Cd1Y1AOxgbQk4Iwe68vkAMCRveNHint4WoaVKg==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "svelte": "^5" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.133.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz", + "integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", + "integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", + "integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", + "integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", + "integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", + "integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", + "integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", + "integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", + "integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", + "integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", + "integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", + "integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", + "integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", + "integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", + "integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", + "integrity": "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@svelte-put/shortcut": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@svelte-put/shortcut/-/shortcut-4.1.0.tgz", + "integrity": "sha512-wImNEIkbxAIWFqlfuhcbC+jRPDeRa/uJGIXHMEVVD+jqL9xCwWNnkGQJ6Qb2XVszuRLHlb8SGZDL3Io/h3vs8w==", + "license": "MIT", + "peerDependencies": { + "svelte": "^5.1.0" + } + }, + "node_modules/@sveltejs/acorn-typescript": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.10.tgz", + "integrity": "sha512-4WfKk68eTih+MiJD4fSbxN7E8kVBmTMPWHUPYjvl2N0rMs53YLTT8/YjKU5Dtnz5LqDjl7LEw4U7lXR2W3J5WA==", + "license": "MIT", + "peerDependencies": { + "acorn": "^8.9.0" + } + }, + "node_modules/@sveltejs/adapter-static": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.10.tgz", + "integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@sveltejs/kit": "^2.0.0" + } + }, + "node_modules/@sveltejs/kit": { + "version": "2.61.1", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.61.1.tgz", + "integrity": "sha512-Ny8s1SR1TyQS2hD2Rvw0XKzU2Nw1eUF52dTb6T2bdcgz7wSC+Nyb5IwjWYlR4b2dvbbR5NJDiQwHg3rnNseghg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@sveltejs/acorn-typescript": "^1.0.9", + "@types/cookie": "^0.6.0", + "acorn": "^8.16.0", + "cookie": "^0.6.0", + "devalue": "^5.8.1", + "esm-env": "^1.2.2", + "kleur": "^4.1.5", + "magic-string": "^0.30.5", + "mrmime": "^2.0.0", + "set-cookie-parser": "^3.0.0", + "sirv": "^3.0.0" + }, + "bin": { + "svelte-kit": "svelte-kit.js" + }, + "engines": { + "node": ">=18.13" + }, + "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 + } + } + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-7.1.2.tgz", + "integrity": "sha512-DrUBA2UXRfDmUX/ZTiEopd3X40yavsJF1FX2RygcuIScHL7o5YX1fMvoYnDhjeJQC4weCOklirpNWlcb2NiSeA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "deepmerge": "^4.3.1", + "magic-string": "^0.30.21", + "obug": "^2.1.0", + "vitefu": "^1.1.2" + }, + "engines": { + "node": "^20.19 || ^22.12 || >=24" + }, + "peerDependencies": { + "svelte": "^5.46.4", + "vite": "^8.0.0-beta.7 || ^8.0.0" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.0.tgz", + "integrity": "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.21.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.0" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.0.tgz", + "integrity": "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.0", + "@tailwindcss/oxide-darwin-arm64": "4.3.0", + "@tailwindcss/oxide-darwin-x64": "4.3.0", + "@tailwindcss/oxide-freebsd-x64": "4.3.0", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", + "@tailwindcss/oxide-linux-x64-musl": "4.3.0", + "@tailwindcss/oxide-wasm32-wasi": "4.3.0", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.0.tgz", + "integrity": "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.0.tgz", + "integrity": "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.0.tgz", + "integrity": "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.0.tgz", + "integrity": "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.0.tgz", + "integrity": "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.0.tgz", + "integrity": "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.0.tgz", + "integrity": "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.0.tgz", + "integrity": "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.0.tgz", + "integrity": "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.0.tgz", + "integrity": "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.10.0", + "@emnapi/runtime": "^1.10.0", + "@emnapi/wasi-threads": "^1.2.1", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz", + "integrity": "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.0.tgz", + "integrity": "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz", + "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.0.tgz", + "integrity": "sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.3.0", + "@tailwindcss/oxide": "4.3.0", + "tailwindcss": "4.3.0" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "license": "MIT" + }, + "node_modules/@types/prismjs": { + "version": "1.26.6", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.6.tgz", + "integrity": "sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, + "node_modules/@xyflow/svelte": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@xyflow/svelte/-/svelte-1.6.0.tgz", + "integrity": "sha512-msCT95OqTThh7gWhdFJ03Qzhc0Q8QYfA8K03M4I+KTtHdvatoTuRo9ofkFHJDbMfS243y+fOs5TCvU9T1kEUUA==", + "license": "MIT", + "dependencies": { + "@svelte-put/shortcut": "^4.1.0", + "@xyflow/system": "0.0.77" + }, + "peerDependencies": { + "svelte": "^5.25.0" + } + }, + "node_modules/@xyflow/system": { + "version": "0.0.77", + "resolved": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.77.tgz", + "integrity": "sha512-qCDCMCQAAgUu8yHnhloHG9F5mwPX5E+Wl8McpYIOPSSXfzFJJoZcwOcsDiAjitVKIg2de1WmJbCHfpcvxprsgg==", + "license": "MIT", + "dependencies": { + "@types/d3-drag": "^3.0.7", + "@types/d3-interpolate": "^3.0.4", + "@types/d3-selection": "^3.0.10", + "@types/d3-transition": "^3.0.8", + "@types/d3-zoom": "^3.0.8", + "d3-drag": "^3.0.0", + "d3-interpolate": "^3.0.1", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aria-query": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz", + "integrity": "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bits-ui": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-2.18.1.tgz", + "integrity": "sha512-KkemzKFH4T3gt3H+P86JcnAWExjByv/6vlwjm/BoCwTPHu03yiCdxbghdJLvFReQTe0acCAiRcKfmixxD6XvlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.1", + "@floating-ui/dom": "^1.7.1", + "esm-env": "^1.1.2", + "runed": "^0.35.1", + "svelte-toolbelt": "^0.10.6", + "tabbable": "^6.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/huntabyte" + }, + "peerDependencies": { + "@internationalized/date": "^3.8.1", + "svelte": "^5.33.0" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devalue": { + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.1.tgz", + "integrity": "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==", + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.22.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.22.1.tgz", + "integrity": "sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/esm-env": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", + "license": "MIT" + }, + "node_modules/esrap": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.9.tgz", + "integrity": "sha512-4KijP+NxCWthMCUC3qHbE6n4vCjqgJS1uAYKhuT/GWfFTf1Qyive2TgOjep+gzbSzRfnNyaN/UU9YmdOt8Eg0A==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "peerDependencies": { + "@typescript-eslint/types": "^8.2.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/types": { + "optional": true + } + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "license": "MIT" + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rolldown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", + "integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.133.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.3", + "@rolldown/binding-darwin-arm64": "1.0.3", + "@rolldown/binding-darwin-x64": "1.0.3", + "@rolldown/binding-freebsd-x64": "1.0.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", + "@rolldown/binding-linux-arm64-gnu": "1.0.3", + "@rolldown/binding-linux-arm64-musl": "1.0.3", + "@rolldown/binding-linux-ppc64-gnu": "1.0.3", + "@rolldown/binding-linux-s390x-gnu": "1.0.3", + "@rolldown/binding-linux-x64-gnu": "1.0.3", + "@rolldown/binding-linux-x64-musl": "1.0.3", + "@rolldown/binding-openharmony-arm64": "1.0.3", + "@rolldown/binding-wasm32-wasi": "1.0.3", + "@rolldown/binding-win32-arm64-msvc": "1.0.3", + "@rolldown/binding-win32-x64-msvc": "1.0.3" + } + }, + "node_modules/runed": { + "version": "0.35.1", + "resolved": "https://registry.npmjs.org/runed/-/runed-0.35.1.tgz", + "integrity": "sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==", + "dev": true, + "funding": [ + "https://github.com/sponsors/huntabyte", + "https://github.com/sponsors/tglide" + ], + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3", + "esm-env": "^1.0.0", + "lz-string": "^1.5.0" + }, + "peerDependencies": { + "@sveltejs/kit": "^2.21.0", + "svelte": "^5.7.0" + }, + "peerDependenciesMeta": { + "@sveltejs/kit": { + "optional": true + } + } + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/set-cookie-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.0.tgz", + "integrity": "sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/shadcn-svelte": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/shadcn-svelte/-/shadcn-svelte-1.3.0.tgz", + "integrity": "sha512-Pd4ICWTkTks/b2YU4c9vF2XsX1x5HFPRl5bKszS1LcnWS83x+7T4WiIvbWz8Qh9knkcGZ+SCz1+Dmhdq+AYooA==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^14.0.0", + "node-fetch-native": "^1.6.4", + "postcss": "^8.5.5", + "tailwind-merge": "^3.0.0" + }, + "bin": { + "shadcn-svelte": "dist/index.mjs" + }, + "peerDependencies": { + "svelte": "^5.0.0" + } + }, + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, + "node_modules/svelte": { + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.56.0.tgz", + "integrity": "sha512-kTXr26t1bchFp28ROrb957LtbujpBmBDibmqMGziVpUs7awBi96TGgX6SovrA8BNoEUDVRK2Fb9FkeYlGspoVg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@sveltejs/acorn-typescript": "^1.0.10", + "@types/estree": "^1.0.5", + "@types/trusted-types": "^2.0.7", + "acorn": "^8.12.1", + "aria-query": "5.3.1", + "axobject-query": "^4.1.0", + "clsx": "^2.1.1", + "devalue": "^5.8.1", + "esm-env": "^1.2.1", + "esrap": "^2.2.9", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/svelte-check": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.5.0.tgz", + "integrity": "sha512-9lNwPxCLWniFvQIcEv1LFqjIxcFtO3smb5+5BKbRJ3ttL4o2lXCej5rLF4DAnfLPI66oaA81vAxw6ILdIWI7kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "chokidar": "^4.0.1", + "fdir": "^6.2.0", + "picocolors": "^1.0.0", + "sade": "^1.7.4" + }, + "bin": { + "svelte-check": "bin/svelte-check" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0", + "typescript": ">=5.0.0" + } + }, + "node_modules/svelte-toolbelt": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.10.6.tgz", + "integrity": "sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/huntabyte" + ], + "dependencies": { + "clsx": "^2.1.1", + "runed": "^0.35.1", + "style-to-object": "^1.0.8" + }, + "engines": { + "node": ">=18", + "pnpm": ">=8.7.0" + }, + "peerDependencies": { + "svelte": "^5.30.2" + } + }, + "node_modules/tabbable": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", + "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tailwind-merge": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.6.0.tgz", + "integrity": "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwind-variants": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-3.2.2.tgz", + "integrity": "sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.x", + "pnpm": ">=7.x" + }, + "peerDependencies": { + "tailwind-merge": ">=3.0.0", + "tailwindcss": "*" + }, + "peerDependenciesMeta": { + "tailwind-merge": { + "optional": true + } + } + }, + "node_modules/tailwindcss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.0.tgz", + "integrity": "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tw-animate-css": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz", + "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Wombosvideo" + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.0.16", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", + "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "1.0.3", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.18", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.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" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz", + "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==", + "dev": true, + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/zimmerframe": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", + "license": "MIT" + } + } +} diff --git a/ui/package.json b/ui/package.json new file mode 100644 index 0000000000..7d6a17a08b --- /dev/null +++ b/ui/package.json @@ -0,0 +1,43 @@ +{ + "name": "sqlbuild-ui", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" + }, + "devDependencies": { + "@fontsource-variable/inter": "^5.2.8", + "@internationalized/date": "^3.12.2", + "@lucide/svelte": "^1.17.0", + "@sveltejs/adapter-static": "^3.0.10", + "@sveltejs/kit": "^2.57.0", + "@sveltejs/vite-plugin-svelte": "^7.0.0", + "@tailwindcss/typography": "^0.5.19", + "@tailwindcss/vite": "^4.2.2", + "@types/prismjs": "^1.26.6", + "bits-ui": "^2.18.1", + "clsx": "^2.1.1", + "shadcn-svelte": "^1.3.0", + "svelte": "^5.55.2", + "svelte-check": "^4.4.6", + "tailwind-merge": "^3.6.0", + "tailwind-variants": "^3.2.2", + "tailwindcss": "^4.2.2", + "tw-animate-css": "^1.4.0", + "typescript": "^6.0.2", + "vite": "^8.0.7" + }, + "dependencies": { + "@dagrejs/dagre": "^3.0.0", + "@fontsource-variable/space-grotesk": "^5.2.10", + "@fontsource/ibm-plex-mono": "^5.2.7", + "@xyflow/svelte": "^1.6.0", + "prismjs": "^1.30.0" + } +} diff --git a/ui/src/app.d.ts b/ui/src/app.d.ts new file mode 100644 index 0000000000..da08e6da59 --- /dev/null +++ b/ui/src/app.d.ts @@ -0,0 +1,13 @@ +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/ui/src/app.html b/ui/src/app.html new file mode 100644 index 0000000000..b9a7abfef4 --- /dev/null +++ b/ui/src/app.html @@ -0,0 +1,23 @@ + + +
+ + + + + %sveltekit.head% + + +{@html line || ' '}{@html lineHtml(r)}
+ {@html r.left ? (r.left.op === 'same' ? afterHl[(r.left.b ?? 1) - 1] : lineHtml(r.left)) || ' ' : ' '}
+ {@html r.right ? lineHtml(r.right) : ' '}
+ {@html line || ' '}
+ {@html line || ' '}{d.description}
{/if} + {#if f.owner && d.owner}+ {@render children?.()} +
diff --git a/ui/src/lib/components/ui/card/card-footer.svelte b/ui/src/lib/components/ui/card/card-footer.svelte new file mode 100644 index 0000000000..591c3f7189 --- /dev/null +++ b/ui/src/lib/components/ui/card/card-footer.svelte @@ -0,0 +1,20 @@ + + +{yaml}
+ {/if}
+-- for flags, or a name / tag: / group: for selection. The command below is the source of truth.
+ | Name | +Kind | +Tags | +Status | +Checks | +Last built | +
|---|---|---|---|---|---|
|
+
+
+
+ e.stopPropagation()}>{m.name}
+
+ {m.desc}
+ |
+ {m.kind} | +
+ {#if m.tags.length}
+ {#each m.tags as t (t)}{t}{/each}
+ {:else}—{/if}
+ |
+ {m.checks} | +||
| No nodes match the filter. | |||||
{description}
+{c.name}{c.phase}{c.name}{c.desc}{c.type.toLowerCase()}| Column | Type | Description | Audits |
|---|---|---|---|
{c.name} |
+ {c.type.toLowerCase()} |
+ {c.desc} | +{#each c.flags as f (f)}{f}{:else}—{/each} |
+
| Run | Job | Rows | Duration | Started |
|---|---|---|---|---|
+ {r.id}{r.detail} {/if}
+ |
+ e.stopPropagation()}>{r.job} | +{r.rows} | +{r.duration} | +
| Check | +Result | +Model | +Type | +Severity | +Phase | +Detail | +When | +
|---|---|---|---|---|---|---|---|
|
+
+
+ {c.name}
+ |
+ {#if c.model === '—'}Standalone{:else} e.stopPropagation()}>{c.model}{/if} | +{c.type} | +{c.severity} | +{c.phase} | +{c.detail} | +||
| No checks match the filter. | |||||||
| Job | +Selector | +Nodes | +Schedule | +Last run | +When | +
|---|---|---|---|---|---|
|
+
+
+
+ e.stopPropagation()}>{j.name}
+
+ {j.desc}
+ |
+ {j.select} |
+ {j.nodes} | +
+ {#if j.schedule === 'manual'}
+ Manual
+ {:else}
+
+
+ {j.schedule}
+
+ {/if}
+ |
+
+ {#if j.lastStatus === 'never'}
+ Never run
+ {:else}
+ |
+ |
| No jobs match the filter. | |||||
{def.desc}
+ + +| + | {r.id} | +{r.nodes} | +{r.dur} | +{r.when} | +{r.by} | +
). */
+.sb-list {
+ width: 100%;
+ font-family: var(--font-sans);
+ font-size: 12.5px;
+ border-collapse: separate !important;
+ border-spacing: 0;
+}
+.sb-list thead th {
+ position: sticky;
+ top: 0;
+ z-index: 5;
+ height: 36px;
+ padding: 0 16px;
+ border-bottom: 1px solid var(--border);
+ background: var(--background);
+ color: var(--muted-foreground);
+ font-size: 12px;
+ font-weight: 500;
+ text-align: left;
+ white-space: nowrap;
+}
+.sb-list tbody td {
+ padding: 10px 16px;
+ border-bottom: 1px solid var(--border);
+ vertical-align: middle;
+}
+.sb-list th:first-child,
+.sb-list td:first-child {
+ padding-left: 20px;
+}
+.sb-list th:last-child,
+.sb-list td:last-child {
+ padding-right: 20px;
+}
+.sb-list tbody tr {
+ cursor: pointer;
+}
+.sb-list tbody tr:hover {
+ background: var(--sb-hover);
+}
+.sb-list .code,
+.sb-list code {
+ font-family: var(--font-mono);
+ font-size: 12px;
+}
+.sb-list .num {
+ text-align: right;
+ font-variant-numeric: tabular-nums;
+}
+.sb-list .muted {
+ color: var(--muted-foreground);
+}
+.sb-list .cell-name {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ min-width: 0;
+}
+.sb-list .cell-name > svg {
+ flex: 0 0 auto;
+ color: var(--muted-foreground);
+}
+.sb-list .cell-name a,
+.sb-list .cell-name strong {
+ color: var(--foreground);
+ font-size: 13px;
+ font-weight: 500;
+}
+.sb-list .cell-name a:hover {
+ color: var(--primary);
+}
+.sb-list .cell-desc {
+ margin-top: 1px;
+ overflow: hidden;
+ color: var(--muted-foreground);
+ font-size: 12px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.sb-list .link {
+ color: var(--primary);
+}
+.sb-list .link:hover {
+ text-decoration: underline;
+}
+.sb-list .empty {
+ padding: 48px 20px;
+ color: var(--muted-foreground);
+ text-align: center;
+ cursor: default;
+}
+.sb-list-wrap {
+ min-height: 0;
+ flex: 1;
+ overflow: auto;
+}
+/* table pill (Dagster-style): wrap discrete values so cells read as objects */
+.sb-tag {
+ display: inline-flex;
+ align-items: center;
+ gap: 5px;
+ background: var(--sb-hover);
+ border: 0;
+ border-radius: 2px;
+ padding: 2px 7px;
+ font-size: 11.5px;
+ line-height: 1.45;
+ color: var(--muted-foreground);
+ white-space: nowrap;
+}
+.sb-tag .sb-tag-ico {
+ color: var(--sb-text-faint);
+}
+/* status label: coloured dot + plain label (no tinted pill) */
+.sb-status {
+ display: inline-flex;
+ align-items: center;
+ gap: 7px;
+ color: var(--foreground);
+ font-size: 12.5px;
+ font-weight: 500;
+ white-space: nowrap;
+ text-transform: capitalize;
+}
+.sb-status > span:first-child {
+ width: 8px !important;
+ height: 8px !important;
+ border-radius: 50% !important;
+ background: var(--tone) !important;
+}
+/* styled checkbox (replaces the chunky native accent-color box) */
+.sb-check {
+ appearance: none;
+ -webkit-appearance: none;
+ width: 14px;
+ height: 14px;
+ border: 1.5px solid var(--border-strong);
+ border-radius: 2px;
+ background: transparent;
+ cursor: pointer;
+ position: relative;
+ vertical-align: middle;
+ transition:
+ background 0.12s,
+ border-color 0.12s;
+}
+.sb-check:hover {
+ border-color: var(--muted-foreground);
+}
+.sb-check:checked {
+ background: var(--primary);
+ border-color: var(--primary);
+}
+.sb-check:checked::after {
+ content: '';
+ position: absolute;
+ left: 4px;
+ top: 1px;
+ width: 4px;
+ height: 8px;
+ border: solid #fff;
+ border-width: 0 2px 2px 0;
+ transform: rotate(45deg);
+}
+/* paused/disabled row: dim the row content (toggle keeps its own colour) */
+.sb-row-off td {
+ opacity: 0.6;
+}
+.sb-toggle {
+ position: relative;
+ width: 28px;
+ height: 16px;
+ flex: 0 0 28px;
+ border: 0;
+ border-radius: 999px;
+ background: var(--border-strong);
+ transition: background 0.15s;
+}
+.sb-toggle.on {
+ background: var(--sb-success);
+}
+.sb-toggle::after {
+ content: '';
+ position: absolute;
+ top: 2px;
+ left: 2px;
+ width: 12px;
+ height: 12px;
+ border-radius: 50%;
+ background: #fff;
+ transition: left 0.15s;
+}
+.sb-toggle.on::after {
+ left: 14px;
+}
+/* Prism token theme — mapped to SQLBuild syntax tokens (works light + dark) */
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: var(--syn-comment);
+ font-style: italic;
+}
+.token.keyword {
+ color: var(--syn-keyword);
+}
+.token.string,
+.token.char,
+.token.attr-value {
+ color: var(--syn-string);
+}
+.token.number,
+.token.boolean {
+ color: var(--syn-number);
+}
+.token.function,
+.token.sb-ref {
+ color: var(--syn-function);
+}
+.token.operator,
+.token.entity,
+.token.url {
+ color: var(--syn-operator);
+}
+.token.punctuation {
+ color: var(--syn-punct);
+}
+.token.sb-config {
+ color: var(--syn-keyword);
+ font-weight: 500;
+}
+
diff --git a/ui/src/routes/lineage/+page.svelte b/ui/src/routes/lineage/+page.svelte
new file mode 100644
index 0000000000..7c737929b9
--- /dev/null
+++ b/ui/src/routes/lineage/+page.svelte
@@ -0,0 +1,1579 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {#if browserOpen}
+
+ {/if}
+
+
+ (hoveredId = node.id)}
+ onnodemouseleave={() => (hoveredId = null)}
+ >
+
+
+
+
+ {#if scaleMode}
+
+ {scaleModels.toLocaleString()} models · {far ? 'zoomed out: status overview' : 'cards'} · zoom {Math.round(viewport.zoom * 100)}%
+ {/if}
+
+
+ {#if sqlOpen && hasSql}
+
+ (sqlOpen = false)} />
+
+ {/if}
+
+
+ {#if inspectorOpen}
+
+
+
+
+
+ {/if}
+
+
+
+
+
diff --git a/ui/src/routes/providers/+page.svelte b/ui/src/routes/providers/+page.svelte
new file mode 100644
index 0000000000..3b1cc8e65c
--- /dev/null
+++ b/ui/src/routes/providers/+page.svelte
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+ p.status === 'error').length, label: 'error' }]}
+>
+ {#snippet filters()}
+
+
+ {/snippet}
+
+
+
+
+
+
+ Provider
+ Kind
+ Type
+ Status
+ Used by
+
+
+
+ {#each filtered as p (p.id)}
+ {@const Glyph = kindIcon[p.kind]}
+ goto(`/providers/${p.id}`)}>
+
+
+
+
+ e.stopPropagation()}>{p.name}
+ {p.summary}
+
+
+
+ {p.kind}
+ {p.type}
+
+ {p.uses} {p.uses === 1 ? 'node' : 'nodes'}
+
+ {:else}
+ No providers match the filter.
+ {/each}
+
+
+
diff --git a/ui/src/routes/providers/[id]/+page.svelte b/ui/src/routes/providers/[id]/+page.svelte
new file mode 100644
index 0000000000..2815252e42
--- /dev/null
+++ b/ui/src/routes/providers/[id]/+page.svelte
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {#each [['config', 'Configuration'], ['uses', `Used by · ${usedByModels.length + usedByJobs.length}`]] as [t, lbl] (t)}
+
+ {/each}
+
+
+ {#if tab === 'config'}
+
+
+ 🔒
+ Read-only — defined in your project config. Override per run from the lineage Run panel.
+
+
+
+ {:else}
+
+ {/if}
+
+
+
+
+ Provider
+
+ {#each [['Kind', def.kind], ['Type', def.type], ['Status', def.status]] as [k, v] (k)}
+
+ {k}
+ {v}
+
+ {/each}
+
+
+ Description
+ {def.desc}
+
+
+
+
diff --git a/ui/src/routes/runs/+page.svelte b/ui/src/routes/runs/+page.svelte
new file mode 100644
index 0000000000..aaa798bf13
--- /dev/null
+++ b/ui/src/routes/runs/+page.svelte
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+ r.status === 'running').length, label: 'running' },
+ { tone: 'var(--sb-error)', count: runs.filter((r) => r.status === 'fail').length, label: 'failed' }
+ ]}
+>
+ {#snippet filters()}
+
+
+
+
+
+ {#if view === 'list'} {/if}
+ {/snippet}
+
+
+{#if view === 'timeline'}
+
+{:else}
+
+
+
+
+ Run
+ Job
+ Trigger
+ Env
+ Nodes
+ Started
+ Duration
+ By
+
+
+
+ {#each sortedRuns as r (r.id)}
+ goto(`/runs/${r.id}`)}>
+
+
+
+ e.stopPropagation()}>{r.job}
+ {r.trigger}
+ {r.env}
+ {r.nodes}
+
+ {r.duration}
+ {r.by}
+
+ {/each}
+
+
+
+{/if}
+
+
diff --git a/ui/src/routes/runs/[id]/+page.svelte b/ui/src/routes/runs/[id]/+page.svelte
new file mode 100644
index 0000000000..a4a9f127da
--- /dev/null
+++ b/ui/src/routes/runs/[id]/+page.svelte
@@ -0,0 +1,832 @@
+
+
+
+
+
+
+
+
+
+
+ ← Runs
+ {runId}
+
+ failed
+
+ nightly_build · schedule · prod · a3f19c2
+
+ 11:46:09 · 1.42s · @scheduler
+ ·
+ 8 ok
+
+
+ 3 skip
+
+
+
+
+
+
+
+
+ Execution
+
+ {#if topView === 'timeline'}
+
+
+
+
+ {#if ganttQuery}
+
+ {/if}
+
+ {#if statusFilter.size || ganttQuery}
+ {visibleExec.length}/{exec.length} steps
+ {/if}
+
+
+
+
+
+
+
+
+
+
+ {:else}
+
+ {/if}
+
+
+ {#each [['timeline', 'Timeline'], ['graph', 'Graph']] as [v, lbl] (v)}
+
+ {/each}
+
+
+
+
+
+
+ {#if topView === 'timeline'}
+
+
+
+
+
+
+
+
+
+ {#each axisTicks as tk (tk)}
+
+ {/each}
+
+
+
+
+ Step
+
+ {#each axisTicks as tk (tk)}
+ {fmtTick(tk)}
+ {/each}
+
+
+
+
+
+
+
+
+ {#each visibleExec as e (e.id)}
+ selectStep(e.name)}
+ >
+
+ {#if selectedStep === e.name}{/if}
+ {e.name}
+
+
+ {#if e.status === 'skip'}
+ skipped (upstream failed)
+ {:else}
+ {@const endX = xOf(e.start + e.dur)}
+
+
+ {#if endX > trackW - 56}
+ {e.dur.toFixed(2)}s
+ {:else}
+ {e.dur.toFixed(2)}s
+ {/if}
+ {/if}
+
+
+ {/each}
+ {#if visibleExec.length === 0}
+ No steps match the current filter.
+ {/if}
+
+
+
+
+ {:else}
+
+
+
+
+
+
+ {/if}
+
+
+
+
+ {#each railOrder as s (s)}
+ {#if statusCounts[s]}
+ {@const active = statusFilter.has(s)}
+
+ {/if}
+ {/each}
+ {#if statusFilter.size}
+
+ {/if}
+
+
+
+
+
+
+
+
+
+
+
+
+ {#each ['events', 'logs', 'stdout', 'stderr'] as tab (tab)}
+
+ {/each}
+
+ {#if bottomTab === 'events'}
+
+
+
+
+
+ {#if query}
+
+ {/if}
+
+
+
+
+
+ {#if levelsOpen}
+
+
+ {#each allLevels as lv (lv)}
+
+ {/each}
+
+ {/if}
+
+
+ {/if}
+
+
+
+ {#if bottomTab === 'events'}
+
+
+
+ {#each ['Time', 'Step', 'Event', 'Info'] as h (h)}
+ {h}
+ {/each}
+
+
+
+ {#each filteredEvents as ev (ev.t + ev.step)}
+
+ {ev.t}
+ {ev.step}
+
+ {eventLabel[ev.kind]}
+
+ {ev.info}
+
+ {:else}
+
+ No events match the current filter.
+
+ {/each}
+
+
+ {:else if bottomTab === 'logs'}
+
+ {#each logs as l (l.t + l.text)}
+
+ {l.t}
+ {l.text}
+ {#if l.tag} {l.tag}{/if}
+
+ {/each}
+
+ {:else if bottomTab === 'stdout'}
+ {stdoutText}
+ {:else}
+ {stderrText}
+ {/if}
+
+
+
+
+
+
diff --git a/ui/src/routes/triggers/+page.svelte b/ui/src/routes/triggers/+page.svelte
new file mode 100644
index 0000000000..975ae6362f
--- /dev/null
+++ b/ui/src/routes/triggers/+page.svelte
@@ -0,0 +1,189 @@
+
+
+
+
+
+
+
+
+ {#snippet filters()}
+
+
+ {/snippet}
+ {#snippet actions()}
+ {#if selected.size}
+ {selected.size} selected
+
+
+ {/if}
+ {/snippet}
+
+
+
+
+
+
+
+ Trigger
+ Type
+ Job
+ Next tick
+ Last tick
+ Last run
+
+
+
+ {#each filtered as t (t.name)}
+
+ toggleSel(t.name)} class="sb-check" aria-label="Select {t.name}" />
+
+
+
+
+ {t.name}
+ {t.cadence}
+
+
+
+
+
+ {#if t.type === 'schedule'} {:else} {/if}
+ {t.type === 'schedule' ? 'Schedule' : 'Sensor'}
+
+
+ {t.job}
+ {t.type === 'schedule' && t.next ? (t.enabled ? t.next : 'Paused') : '—'}
+ {t.lastTick}
+
+ {#if t.lastRunId}
+
+
+
+
+ {:else}
+ —
+ {/if}
+
+
+ {:else}
+ No triggers match the filter.
+ {/each}
+
+
+
+
+
diff --git a/ui/static/favicon.png b/ui/static/favicon.png
new file mode 100644
index 0000000000000000000000000000000000000000..97e37653b5aa119c35b0ecd944dc9219d9d31250
GIT binary patch
literal 6618
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