From 9f70535d2eed079f4730764318326a25cff33e76 Mon Sep 17 00:00:00 2001 From: Jacob Simionato Date: Tue, 3 Mar 2026 11:51:08 +1030 Subject: [PATCH 1/7] Move composer app to tools/ folder --- {a2ui-composer => tools/a2ui-composer}/.gitignore | 0 {a2ui-composer => tools/a2ui-composer}/AGENTS.md | 0 {a2ui-composer => tools/a2ui-composer}/README.md | 0 .../a2ui-composer}/components.json | 0 .../a2ui-composer}/eslint.config.mjs | 0 .../a2ui-composer}/images/composer.png | Bin .../a2ui-composer}/images/demo.mp4 | Bin .../a2ui-composer}/next.config.ts | 0 {a2ui-composer => tools/a2ui-composer}/package.json | 0 .../a2ui-composer}/pnpm-lock.yaml | 0 .../a2ui-composer}/postcss.config.mjs | 0 .../a2ui-composer}/public/file.svg | 0 .../a2ui-composer}/public/globe.svg | 0 .../a2ui-composer}/public/next.svg | 0 .../a2ui-composer}/public/vercel.svg | 0 .../a2ui-composer}/public/window.svg | 0 .../src/app/api/copilotkit/[[...slug]]/route.ts | 0 .../src/app/api/copilotkit/a2ui-prompt.ts | 0 .../a2ui-composer}/src/app/components/layout.tsx | 0 .../a2ui-composer}/src/app/components/page.tsx | 0 .../a2ui-composer}/src/app/favicon.ico | Bin .../a2ui-composer}/src/app/gallery/layout.tsx | 0 .../a2ui-composer}/src/app/gallery/page.tsx | 0 .../a2ui-composer}/src/app/globals.css | 0 .../a2ui-composer}/src/app/icons/layout.tsx | 0 .../a2ui-composer}/src/app/icons/page.tsx | 0 .../a2ui-composer}/src/app/layout.tsx | 0 .../a2ui-composer}/src/app/page.tsx | 0 .../a2ui-composer}/src/app/widget/[id]/layout.tsx | 0 .../a2ui-composer}/src/app/widget/[id]/page.tsx | 0 .../src/components/editor/code-editor.tsx | 0 .../src/components/editor/data-panel.tsx | 0 .../src/components/editor/editor-header.tsx | 0 .../src/components/editor/preview-pane.tsx | 0 .../src/components/editor/widget-editor.tsx | 0 .../src/components/gallery/gallery-widget.tsx | 0 .../src/components/gallery/widget-preview-modal.tsx | 0 .../src/components/layout/app-shell.tsx | 0 .../src/components/layout/sidebar-header.tsx | 0 .../src/components/layout/sidebar-nav.tsx | 0 .../src/components/layout/sidebar-widgets.tsx | 0 .../src/components/layout/sidebar.tsx | 0 .../src/components/main/create-widget.tsx | 0 .../src/components/main/preview-gallery.tsx | 0 .../src/components/main/widget-input.tsx | 0 .../src/components/ui/alert-dialog.tsx | 0 .../a2ui-composer}/src/components/ui/button.tsx | 0 .../src/components/ui/dropdown-menu.tsx | 0 .../a2ui-composer}/src/components/ui/input.tsx | 0 .../a2ui-composer}/src/components/ui/resizable.tsx | 0 .../a2ui-composer}/src/components/ui/separator.tsx | 0 .../a2ui-composer}/src/contexts/widgets-context.tsx | 0 .../src/data/gallery/account-balance.ts | 0 .../a2ui-composer}/src/data/gallery/calendar-day.ts | 0 .../a2ui-composer}/src/data/gallery/chat-message.ts | 0 .../a2ui-composer}/src/data/gallery/coffee-order.ts | 0 .../a2ui-composer}/src/data/gallery/contact-card.ts | 0 .../src/data/gallery/countdown-timer.ts | 0 .../a2ui-composer}/src/data/gallery/credit-card.ts | 0 .../src/data/gallery/email-compose.ts | 0 .../a2ui-composer}/src/data/gallery/event-detail.ts | 0 .../src/data/gallery/flight-status.ts | 0 .../a2ui-composer}/src/data/gallery/index.ts | 0 .../a2ui-composer}/src/data/gallery/login-form.ts | 0 .../a2ui-composer}/src/data/gallery/movie-card.ts | 0 .../a2ui-composer}/src/data/gallery/music-player.ts | 0 .../src/data/gallery/notification-permission.ts | 0 .../src/data/gallery/podcast-episode.ts | 0 .../a2ui-composer}/src/data/gallery/product-card.ts | 0 .../src/data/gallery/purchase-complete.ts | 0 .../a2ui-composer}/src/data/gallery/recipe-card.ts | 0 .../src/data/gallery/restaurant-card.ts | 0 .../src/data/gallery/shipping-status.ts | 0 .../src/data/gallery/software-purchase.ts | 0 .../src/data/gallery/sports-player.ts | 0 .../a2ui-composer}/src/data/gallery/stats-card.ts | 0 .../a2ui-composer}/src/data/gallery/step-counter.ts | 0 .../a2ui-composer}/src/data/gallery/task-card.ts | 0 .../a2ui-composer}/src/data/gallery/track-list.ts | 0 .../a2ui-composer}/src/data/gallery/user-profile.ts | 0 .../src/data/gallery/weather-current.ts | 0 .../src/data/gallery/workout-summary.ts | 0 .../a2ui-composer}/src/lib/components-data.ts | 0 .../a2ui-composer}/src/lib/json-parser.ts | 0 .../a2ui-composer}/src/lib/storage.ts | 0 .../a2ui-composer}/src/lib/utils.ts | 0 .../a2ui-composer}/src/types/widget.ts | 0 .../a2ui-composer}/tsconfig.json | 0 88 files changed, 0 insertions(+), 0 deletions(-) rename {a2ui-composer => tools/a2ui-composer}/.gitignore (100%) rename {a2ui-composer => tools/a2ui-composer}/AGENTS.md (100%) rename {a2ui-composer => tools/a2ui-composer}/README.md (100%) rename {a2ui-composer => tools/a2ui-composer}/components.json (100%) rename {a2ui-composer => tools/a2ui-composer}/eslint.config.mjs (100%) rename {a2ui-composer => tools/a2ui-composer}/images/composer.png (100%) rename {a2ui-composer => tools/a2ui-composer}/images/demo.mp4 (100%) rename {a2ui-composer => tools/a2ui-composer}/next.config.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/package.json (100%) rename {a2ui-composer => tools/a2ui-composer}/pnpm-lock.yaml (100%) rename {a2ui-composer => tools/a2ui-composer}/postcss.config.mjs (100%) rename {a2ui-composer => tools/a2ui-composer}/public/file.svg (100%) rename {a2ui-composer => tools/a2ui-composer}/public/globe.svg (100%) rename {a2ui-composer => tools/a2ui-composer}/public/next.svg (100%) rename {a2ui-composer => tools/a2ui-composer}/public/vercel.svg (100%) rename {a2ui-composer => tools/a2ui-composer}/public/window.svg (100%) rename {a2ui-composer => tools/a2ui-composer}/src/app/api/copilotkit/[[...slug]]/route.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/app/api/copilotkit/a2ui-prompt.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/app/components/layout.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/app/components/page.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/app/favicon.ico (100%) rename {a2ui-composer => tools/a2ui-composer}/src/app/gallery/layout.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/app/gallery/page.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/app/globals.css (100%) rename {a2ui-composer => tools/a2ui-composer}/src/app/icons/layout.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/app/icons/page.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/app/layout.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/app/page.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/app/widget/[id]/layout.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/app/widget/[id]/page.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/editor/code-editor.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/editor/data-panel.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/editor/editor-header.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/editor/preview-pane.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/editor/widget-editor.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/gallery/gallery-widget.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/gallery/widget-preview-modal.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/layout/app-shell.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/layout/sidebar-header.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/layout/sidebar-nav.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/layout/sidebar-widgets.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/layout/sidebar.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/main/create-widget.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/main/preview-gallery.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/main/widget-input.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/ui/alert-dialog.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/ui/button.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/ui/dropdown-menu.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/ui/input.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/ui/resizable.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/components/ui/separator.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/contexts/widgets-context.tsx (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/account-balance.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/calendar-day.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/chat-message.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/coffee-order.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/contact-card.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/countdown-timer.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/credit-card.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/email-compose.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/event-detail.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/flight-status.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/index.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/login-form.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/movie-card.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/music-player.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/notification-permission.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/podcast-episode.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/product-card.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/purchase-complete.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/recipe-card.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/restaurant-card.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/shipping-status.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/software-purchase.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/sports-player.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/stats-card.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/step-counter.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/task-card.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/track-list.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/user-profile.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/weather-current.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/data/gallery/workout-summary.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/lib/components-data.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/lib/json-parser.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/lib/storage.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/lib/utils.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/src/types/widget.ts (100%) rename {a2ui-composer => tools/a2ui-composer}/tsconfig.json (100%) diff --git a/a2ui-composer/.gitignore b/tools/a2ui-composer/.gitignore similarity index 100% rename from a2ui-composer/.gitignore rename to tools/a2ui-composer/.gitignore diff --git a/a2ui-composer/AGENTS.md b/tools/a2ui-composer/AGENTS.md similarity index 100% rename from a2ui-composer/AGENTS.md rename to tools/a2ui-composer/AGENTS.md diff --git a/a2ui-composer/README.md b/tools/a2ui-composer/README.md similarity index 100% rename from a2ui-composer/README.md rename to tools/a2ui-composer/README.md diff --git a/a2ui-composer/components.json b/tools/a2ui-composer/components.json similarity index 100% rename from a2ui-composer/components.json rename to tools/a2ui-composer/components.json diff --git a/a2ui-composer/eslint.config.mjs b/tools/a2ui-composer/eslint.config.mjs similarity index 100% rename from a2ui-composer/eslint.config.mjs rename to tools/a2ui-composer/eslint.config.mjs diff --git a/a2ui-composer/images/composer.png b/tools/a2ui-composer/images/composer.png similarity index 100% rename from a2ui-composer/images/composer.png rename to tools/a2ui-composer/images/composer.png diff --git a/a2ui-composer/images/demo.mp4 b/tools/a2ui-composer/images/demo.mp4 similarity index 100% rename from a2ui-composer/images/demo.mp4 rename to tools/a2ui-composer/images/demo.mp4 diff --git a/a2ui-composer/next.config.ts b/tools/a2ui-composer/next.config.ts similarity index 100% rename from a2ui-composer/next.config.ts rename to tools/a2ui-composer/next.config.ts diff --git a/a2ui-composer/package.json b/tools/a2ui-composer/package.json similarity index 100% rename from a2ui-composer/package.json rename to tools/a2ui-composer/package.json diff --git a/a2ui-composer/pnpm-lock.yaml b/tools/a2ui-composer/pnpm-lock.yaml similarity index 100% rename from a2ui-composer/pnpm-lock.yaml rename to tools/a2ui-composer/pnpm-lock.yaml diff --git a/a2ui-composer/postcss.config.mjs b/tools/a2ui-composer/postcss.config.mjs similarity index 100% rename from a2ui-composer/postcss.config.mjs rename to tools/a2ui-composer/postcss.config.mjs diff --git a/a2ui-composer/public/file.svg b/tools/a2ui-composer/public/file.svg similarity index 100% rename from a2ui-composer/public/file.svg rename to tools/a2ui-composer/public/file.svg diff --git a/a2ui-composer/public/globe.svg b/tools/a2ui-composer/public/globe.svg similarity index 100% rename from a2ui-composer/public/globe.svg rename to tools/a2ui-composer/public/globe.svg diff --git a/a2ui-composer/public/next.svg b/tools/a2ui-composer/public/next.svg similarity index 100% rename from a2ui-composer/public/next.svg rename to tools/a2ui-composer/public/next.svg diff --git a/a2ui-composer/public/vercel.svg b/tools/a2ui-composer/public/vercel.svg similarity index 100% rename from a2ui-composer/public/vercel.svg rename to tools/a2ui-composer/public/vercel.svg diff --git a/a2ui-composer/public/window.svg b/tools/a2ui-composer/public/window.svg similarity index 100% rename from a2ui-composer/public/window.svg rename to tools/a2ui-composer/public/window.svg diff --git a/a2ui-composer/src/app/api/copilotkit/[[...slug]]/route.ts b/tools/a2ui-composer/src/app/api/copilotkit/[[...slug]]/route.ts similarity index 100% rename from a2ui-composer/src/app/api/copilotkit/[[...slug]]/route.ts rename to tools/a2ui-composer/src/app/api/copilotkit/[[...slug]]/route.ts diff --git a/a2ui-composer/src/app/api/copilotkit/a2ui-prompt.ts b/tools/a2ui-composer/src/app/api/copilotkit/a2ui-prompt.ts similarity index 100% rename from a2ui-composer/src/app/api/copilotkit/a2ui-prompt.ts rename to tools/a2ui-composer/src/app/api/copilotkit/a2ui-prompt.ts diff --git a/a2ui-composer/src/app/components/layout.tsx b/tools/a2ui-composer/src/app/components/layout.tsx similarity index 100% rename from a2ui-composer/src/app/components/layout.tsx rename to tools/a2ui-composer/src/app/components/layout.tsx diff --git a/a2ui-composer/src/app/components/page.tsx b/tools/a2ui-composer/src/app/components/page.tsx similarity index 100% rename from a2ui-composer/src/app/components/page.tsx rename to tools/a2ui-composer/src/app/components/page.tsx diff --git a/a2ui-composer/src/app/favicon.ico b/tools/a2ui-composer/src/app/favicon.ico similarity index 100% rename from a2ui-composer/src/app/favicon.ico rename to tools/a2ui-composer/src/app/favicon.ico diff --git a/a2ui-composer/src/app/gallery/layout.tsx b/tools/a2ui-composer/src/app/gallery/layout.tsx similarity index 100% rename from a2ui-composer/src/app/gallery/layout.tsx rename to tools/a2ui-composer/src/app/gallery/layout.tsx diff --git a/a2ui-composer/src/app/gallery/page.tsx b/tools/a2ui-composer/src/app/gallery/page.tsx similarity index 100% rename from a2ui-composer/src/app/gallery/page.tsx rename to tools/a2ui-composer/src/app/gallery/page.tsx diff --git a/a2ui-composer/src/app/globals.css b/tools/a2ui-composer/src/app/globals.css similarity index 100% rename from a2ui-composer/src/app/globals.css rename to tools/a2ui-composer/src/app/globals.css diff --git a/a2ui-composer/src/app/icons/layout.tsx b/tools/a2ui-composer/src/app/icons/layout.tsx similarity index 100% rename from a2ui-composer/src/app/icons/layout.tsx rename to tools/a2ui-composer/src/app/icons/layout.tsx diff --git a/a2ui-composer/src/app/icons/page.tsx b/tools/a2ui-composer/src/app/icons/page.tsx similarity index 100% rename from a2ui-composer/src/app/icons/page.tsx rename to tools/a2ui-composer/src/app/icons/page.tsx diff --git a/a2ui-composer/src/app/layout.tsx b/tools/a2ui-composer/src/app/layout.tsx similarity index 100% rename from a2ui-composer/src/app/layout.tsx rename to tools/a2ui-composer/src/app/layout.tsx diff --git a/a2ui-composer/src/app/page.tsx b/tools/a2ui-composer/src/app/page.tsx similarity index 100% rename from a2ui-composer/src/app/page.tsx rename to tools/a2ui-composer/src/app/page.tsx diff --git a/a2ui-composer/src/app/widget/[id]/layout.tsx b/tools/a2ui-composer/src/app/widget/[id]/layout.tsx similarity index 100% rename from a2ui-composer/src/app/widget/[id]/layout.tsx rename to tools/a2ui-composer/src/app/widget/[id]/layout.tsx diff --git a/a2ui-composer/src/app/widget/[id]/page.tsx b/tools/a2ui-composer/src/app/widget/[id]/page.tsx similarity index 100% rename from a2ui-composer/src/app/widget/[id]/page.tsx rename to tools/a2ui-composer/src/app/widget/[id]/page.tsx diff --git a/a2ui-composer/src/components/editor/code-editor.tsx b/tools/a2ui-composer/src/components/editor/code-editor.tsx similarity index 100% rename from a2ui-composer/src/components/editor/code-editor.tsx rename to tools/a2ui-composer/src/components/editor/code-editor.tsx diff --git a/a2ui-composer/src/components/editor/data-panel.tsx b/tools/a2ui-composer/src/components/editor/data-panel.tsx similarity index 100% rename from a2ui-composer/src/components/editor/data-panel.tsx rename to tools/a2ui-composer/src/components/editor/data-panel.tsx diff --git a/a2ui-composer/src/components/editor/editor-header.tsx b/tools/a2ui-composer/src/components/editor/editor-header.tsx similarity index 100% rename from a2ui-composer/src/components/editor/editor-header.tsx rename to tools/a2ui-composer/src/components/editor/editor-header.tsx diff --git a/a2ui-composer/src/components/editor/preview-pane.tsx b/tools/a2ui-composer/src/components/editor/preview-pane.tsx similarity index 100% rename from a2ui-composer/src/components/editor/preview-pane.tsx rename to tools/a2ui-composer/src/components/editor/preview-pane.tsx diff --git a/a2ui-composer/src/components/editor/widget-editor.tsx b/tools/a2ui-composer/src/components/editor/widget-editor.tsx similarity index 100% rename from a2ui-composer/src/components/editor/widget-editor.tsx rename to tools/a2ui-composer/src/components/editor/widget-editor.tsx diff --git a/a2ui-composer/src/components/gallery/gallery-widget.tsx b/tools/a2ui-composer/src/components/gallery/gallery-widget.tsx similarity index 100% rename from a2ui-composer/src/components/gallery/gallery-widget.tsx rename to tools/a2ui-composer/src/components/gallery/gallery-widget.tsx diff --git a/a2ui-composer/src/components/gallery/widget-preview-modal.tsx b/tools/a2ui-composer/src/components/gallery/widget-preview-modal.tsx similarity index 100% rename from a2ui-composer/src/components/gallery/widget-preview-modal.tsx rename to tools/a2ui-composer/src/components/gallery/widget-preview-modal.tsx diff --git a/a2ui-composer/src/components/layout/app-shell.tsx b/tools/a2ui-composer/src/components/layout/app-shell.tsx similarity index 100% rename from a2ui-composer/src/components/layout/app-shell.tsx rename to tools/a2ui-composer/src/components/layout/app-shell.tsx diff --git a/a2ui-composer/src/components/layout/sidebar-header.tsx b/tools/a2ui-composer/src/components/layout/sidebar-header.tsx similarity index 100% rename from a2ui-composer/src/components/layout/sidebar-header.tsx rename to tools/a2ui-composer/src/components/layout/sidebar-header.tsx diff --git a/a2ui-composer/src/components/layout/sidebar-nav.tsx b/tools/a2ui-composer/src/components/layout/sidebar-nav.tsx similarity index 100% rename from a2ui-composer/src/components/layout/sidebar-nav.tsx rename to tools/a2ui-composer/src/components/layout/sidebar-nav.tsx diff --git a/a2ui-composer/src/components/layout/sidebar-widgets.tsx b/tools/a2ui-composer/src/components/layout/sidebar-widgets.tsx similarity index 100% rename from a2ui-composer/src/components/layout/sidebar-widgets.tsx rename to tools/a2ui-composer/src/components/layout/sidebar-widgets.tsx diff --git a/a2ui-composer/src/components/layout/sidebar.tsx b/tools/a2ui-composer/src/components/layout/sidebar.tsx similarity index 100% rename from a2ui-composer/src/components/layout/sidebar.tsx rename to tools/a2ui-composer/src/components/layout/sidebar.tsx diff --git a/a2ui-composer/src/components/main/create-widget.tsx b/tools/a2ui-composer/src/components/main/create-widget.tsx similarity index 100% rename from a2ui-composer/src/components/main/create-widget.tsx rename to tools/a2ui-composer/src/components/main/create-widget.tsx diff --git a/a2ui-composer/src/components/main/preview-gallery.tsx b/tools/a2ui-composer/src/components/main/preview-gallery.tsx similarity index 100% rename from a2ui-composer/src/components/main/preview-gallery.tsx rename to tools/a2ui-composer/src/components/main/preview-gallery.tsx diff --git a/a2ui-composer/src/components/main/widget-input.tsx b/tools/a2ui-composer/src/components/main/widget-input.tsx similarity index 100% rename from a2ui-composer/src/components/main/widget-input.tsx rename to tools/a2ui-composer/src/components/main/widget-input.tsx diff --git a/a2ui-composer/src/components/ui/alert-dialog.tsx b/tools/a2ui-composer/src/components/ui/alert-dialog.tsx similarity index 100% rename from a2ui-composer/src/components/ui/alert-dialog.tsx rename to tools/a2ui-composer/src/components/ui/alert-dialog.tsx diff --git a/a2ui-composer/src/components/ui/button.tsx b/tools/a2ui-composer/src/components/ui/button.tsx similarity index 100% rename from a2ui-composer/src/components/ui/button.tsx rename to tools/a2ui-composer/src/components/ui/button.tsx diff --git a/a2ui-composer/src/components/ui/dropdown-menu.tsx b/tools/a2ui-composer/src/components/ui/dropdown-menu.tsx similarity index 100% rename from a2ui-composer/src/components/ui/dropdown-menu.tsx rename to tools/a2ui-composer/src/components/ui/dropdown-menu.tsx diff --git a/a2ui-composer/src/components/ui/input.tsx b/tools/a2ui-composer/src/components/ui/input.tsx similarity index 100% rename from a2ui-composer/src/components/ui/input.tsx rename to tools/a2ui-composer/src/components/ui/input.tsx diff --git a/a2ui-composer/src/components/ui/resizable.tsx b/tools/a2ui-composer/src/components/ui/resizable.tsx similarity index 100% rename from a2ui-composer/src/components/ui/resizable.tsx rename to tools/a2ui-composer/src/components/ui/resizable.tsx diff --git a/a2ui-composer/src/components/ui/separator.tsx b/tools/a2ui-composer/src/components/ui/separator.tsx similarity index 100% rename from a2ui-composer/src/components/ui/separator.tsx rename to tools/a2ui-composer/src/components/ui/separator.tsx diff --git a/a2ui-composer/src/contexts/widgets-context.tsx b/tools/a2ui-composer/src/contexts/widgets-context.tsx similarity index 100% rename from a2ui-composer/src/contexts/widgets-context.tsx rename to tools/a2ui-composer/src/contexts/widgets-context.tsx diff --git a/a2ui-composer/src/data/gallery/account-balance.ts b/tools/a2ui-composer/src/data/gallery/account-balance.ts similarity index 100% rename from a2ui-composer/src/data/gallery/account-balance.ts rename to tools/a2ui-composer/src/data/gallery/account-balance.ts diff --git a/a2ui-composer/src/data/gallery/calendar-day.ts b/tools/a2ui-composer/src/data/gallery/calendar-day.ts similarity index 100% rename from a2ui-composer/src/data/gallery/calendar-day.ts rename to tools/a2ui-composer/src/data/gallery/calendar-day.ts diff --git a/a2ui-composer/src/data/gallery/chat-message.ts b/tools/a2ui-composer/src/data/gallery/chat-message.ts similarity index 100% rename from a2ui-composer/src/data/gallery/chat-message.ts rename to tools/a2ui-composer/src/data/gallery/chat-message.ts diff --git a/a2ui-composer/src/data/gallery/coffee-order.ts b/tools/a2ui-composer/src/data/gallery/coffee-order.ts similarity index 100% rename from a2ui-composer/src/data/gallery/coffee-order.ts rename to tools/a2ui-composer/src/data/gallery/coffee-order.ts diff --git a/a2ui-composer/src/data/gallery/contact-card.ts b/tools/a2ui-composer/src/data/gallery/contact-card.ts similarity index 100% rename from a2ui-composer/src/data/gallery/contact-card.ts rename to tools/a2ui-composer/src/data/gallery/contact-card.ts diff --git a/a2ui-composer/src/data/gallery/countdown-timer.ts b/tools/a2ui-composer/src/data/gallery/countdown-timer.ts similarity index 100% rename from a2ui-composer/src/data/gallery/countdown-timer.ts rename to tools/a2ui-composer/src/data/gallery/countdown-timer.ts diff --git a/a2ui-composer/src/data/gallery/credit-card.ts b/tools/a2ui-composer/src/data/gallery/credit-card.ts similarity index 100% rename from a2ui-composer/src/data/gallery/credit-card.ts rename to tools/a2ui-composer/src/data/gallery/credit-card.ts diff --git a/a2ui-composer/src/data/gallery/email-compose.ts b/tools/a2ui-composer/src/data/gallery/email-compose.ts similarity index 100% rename from a2ui-composer/src/data/gallery/email-compose.ts rename to tools/a2ui-composer/src/data/gallery/email-compose.ts diff --git a/a2ui-composer/src/data/gallery/event-detail.ts b/tools/a2ui-composer/src/data/gallery/event-detail.ts similarity index 100% rename from a2ui-composer/src/data/gallery/event-detail.ts rename to tools/a2ui-composer/src/data/gallery/event-detail.ts diff --git a/a2ui-composer/src/data/gallery/flight-status.ts b/tools/a2ui-composer/src/data/gallery/flight-status.ts similarity index 100% rename from a2ui-composer/src/data/gallery/flight-status.ts rename to tools/a2ui-composer/src/data/gallery/flight-status.ts diff --git a/a2ui-composer/src/data/gallery/index.ts b/tools/a2ui-composer/src/data/gallery/index.ts similarity index 100% rename from a2ui-composer/src/data/gallery/index.ts rename to tools/a2ui-composer/src/data/gallery/index.ts diff --git a/a2ui-composer/src/data/gallery/login-form.ts b/tools/a2ui-composer/src/data/gallery/login-form.ts similarity index 100% rename from a2ui-composer/src/data/gallery/login-form.ts rename to tools/a2ui-composer/src/data/gallery/login-form.ts diff --git a/a2ui-composer/src/data/gallery/movie-card.ts b/tools/a2ui-composer/src/data/gallery/movie-card.ts similarity index 100% rename from a2ui-composer/src/data/gallery/movie-card.ts rename to tools/a2ui-composer/src/data/gallery/movie-card.ts diff --git a/a2ui-composer/src/data/gallery/music-player.ts b/tools/a2ui-composer/src/data/gallery/music-player.ts similarity index 100% rename from a2ui-composer/src/data/gallery/music-player.ts rename to tools/a2ui-composer/src/data/gallery/music-player.ts diff --git a/a2ui-composer/src/data/gallery/notification-permission.ts b/tools/a2ui-composer/src/data/gallery/notification-permission.ts similarity index 100% rename from a2ui-composer/src/data/gallery/notification-permission.ts rename to tools/a2ui-composer/src/data/gallery/notification-permission.ts diff --git a/a2ui-composer/src/data/gallery/podcast-episode.ts b/tools/a2ui-composer/src/data/gallery/podcast-episode.ts similarity index 100% rename from a2ui-composer/src/data/gallery/podcast-episode.ts rename to tools/a2ui-composer/src/data/gallery/podcast-episode.ts diff --git a/a2ui-composer/src/data/gallery/product-card.ts b/tools/a2ui-composer/src/data/gallery/product-card.ts similarity index 100% rename from a2ui-composer/src/data/gallery/product-card.ts rename to tools/a2ui-composer/src/data/gallery/product-card.ts diff --git a/a2ui-composer/src/data/gallery/purchase-complete.ts b/tools/a2ui-composer/src/data/gallery/purchase-complete.ts similarity index 100% rename from a2ui-composer/src/data/gallery/purchase-complete.ts rename to tools/a2ui-composer/src/data/gallery/purchase-complete.ts diff --git a/a2ui-composer/src/data/gallery/recipe-card.ts b/tools/a2ui-composer/src/data/gallery/recipe-card.ts similarity index 100% rename from a2ui-composer/src/data/gallery/recipe-card.ts rename to tools/a2ui-composer/src/data/gallery/recipe-card.ts diff --git a/a2ui-composer/src/data/gallery/restaurant-card.ts b/tools/a2ui-composer/src/data/gallery/restaurant-card.ts similarity index 100% rename from a2ui-composer/src/data/gallery/restaurant-card.ts rename to tools/a2ui-composer/src/data/gallery/restaurant-card.ts diff --git a/a2ui-composer/src/data/gallery/shipping-status.ts b/tools/a2ui-composer/src/data/gallery/shipping-status.ts similarity index 100% rename from a2ui-composer/src/data/gallery/shipping-status.ts rename to tools/a2ui-composer/src/data/gallery/shipping-status.ts diff --git a/a2ui-composer/src/data/gallery/software-purchase.ts b/tools/a2ui-composer/src/data/gallery/software-purchase.ts similarity index 100% rename from a2ui-composer/src/data/gallery/software-purchase.ts rename to tools/a2ui-composer/src/data/gallery/software-purchase.ts diff --git a/a2ui-composer/src/data/gallery/sports-player.ts b/tools/a2ui-composer/src/data/gallery/sports-player.ts similarity index 100% rename from a2ui-composer/src/data/gallery/sports-player.ts rename to tools/a2ui-composer/src/data/gallery/sports-player.ts diff --git a/a2ui-composer/src/data/gallery/stats-card.ts b/tools/a2ui-composer/src/data/gallery/stats-card.ts similarity index 100% rename from a2ui-composer/src/data/gallery/stats-card.ts rename to tools/a2ui-composer/src/data/gallery/stats-card.ts diff --git a/a2ui-composer/src/data/gallery/step-counter.ts b/tools/a2ui-composer/src/data/gallery/step-counter.ts similarity index 100% rename from a2ui-composer/src/data/gallery/step-counter.ts rename to tools/a2ui-composer/src/data/gallery/step-counter.ts diff --git a/a2ui-composer/src/data/gallery/task-card.ts b/tools/a2ui-composer/src/data/gallery/task-card.ts similarity index 100% rename from a2ui-composer/src/data/gallery/task-card.ts rename to tools/a2ui-composer/src/data/gallery/task-card.ts diff --git a/a2ui-composer/src/data/gallery/track-list.ts b/tools/a2ui-composer/src/data/gallery/track-list.ts similarity index 100% rename from a2ui-composer/src/data/gallery/track-list.ts rename to tools/a2ui-composer/src/data/gallery/track-list.ts diff --git a/a2ui-composer/src/data/gallery/user-profile.ts b/tools/a2ui-composer/src/data/gallery/user-profile.ts similarity index 100% rename from a2ui-composer/src/data/gallery/user-profile.ts rename to tools/a2ui-composer/src/data/gallery/user-profile.ts diff --git a/a2ui-composer/src/data/gallery/weather-current.ts b/tools/a2ui-composer/src/data/gallery/weather-current.ts similarity index 100% rename from a2ui-composer/src/data/gallery/weather-current.ts rename to tools/a2ui-composer/src/data/gallery/weather-current.ts diff --git a/a2ui-composer/src/data/gallery/workout-summary.ts b/tools/a2ui-composer/src/data/gallery/workout-summary.ts similarity index 100% rename from a2ui-composer/src/data/gallery/workout-summary.ts rename to tools/a2ui-composer/src/data/gallery/workout-summary.ts diff --git a/a2ui-composer/src/lib/components-data.ts b/tools/a2ui-composer/src/lib/components-data.ts similarity index 100% rename from a2ui-composer/src/lib/components-data.ts rename to tools/a2ui-composer/src/lib/components-data.ts diff --git a/a2ui-composer/src/lib/json-parser.ts b/tools/a2ui-composer/src/lib/json-parser.ts similarity index 100% rename from a2ui-composer/src/lib/json-parser.ts rename to tools/a2ui-composer/src/lib/json-parser.ts diff --git a/a2ui-composer/src/lib/storage.ts b/tools/a2ui-composer/src/lib/storage.ts similarity index 100% rename from a2ui-composer/src/lib/storage.ts rename to tools/a2ui-composer/src/lib/storage.ts diff --git a/a2ui-composer/src/lib/utils.ts b/tools/a2ui-composer/src/lib/utils.ts similarity index 100% rename from a2ui-composer/src/lib/utils.ts rename to tools/a2ui-composer/src/lib/utils.ts diff --git a/a2ui-composer/src/types/widget.ts b/tools/a2ui-composer/src/types/widget.ts similarity index 100% rename from a2ui-composer/src/types/widget.ts rename to tools/a2ui-composer/src/types/widget.ts diff --git a/a2ui-composer/tsconfig.json b/tools/a2ui-composer/tsconfig.json similarity index 100% rename from a2ui-composer/tsconfig.json rename to tools/a2ui-composer/tsconfig.json From fbe60fb82117f56e1c171f2566959c3efbd2f204 Mon Sep 17 00:00:00 2001 From: Jacob Simionato Date: Tue, 3 Mar 2026 12:01:02 +1030 Subject: [PATCH 2/7] Rename to composer --- tools/{a2ui-composer => composer}/.gitignore | 0 tools/{a2ui-composer => composer}/AGENTS.md | 0 tools/{a2ui-composer => composer}/README.md | 0 tools/{a2ui-composer => composer}/components.json | 0 tools/{a2ui-composer => composer}/eslint.config.mjs | 0 .../{a2ui-composer => composer}/images/composer.png | Bin tools/{a2ui-composer => composer}/images/demo.mp4 | Bin tools/{a2ui-composer => composer}/next.config.ts | 0 tools/{a2ui-composer => composer}/package.json | 0 tools/{a2ui-composer => composer}/pnpm-lock.yaml | 0 .../{a2ui-composer => composer}/postcss.config.mjs | 0 tools/{a2ui-composer => composer}/public/file.svg | 0 tools/{a2ui-composer => composer}/public/globe.svg | 0 tools/{a2ui-composer => composer}/public/next.svg | 0 tools/{a2ui-composer => composer}/public/vercel.svg | 0 tools/{a2ui-composer => composer}/public/window.svg | 0 .../src/app/api/copilotkit/[[...slug]]/route.ts | 0 .../src/app/api/copilotkit/a2ui-prompt.ts | 0 .../src/app/components/layout.tsx | 0 .../src/app/components/page.tsx | 0 .../{a2ui-composer => composer}/src/app/favicon.ico | Bin .../src/app/gallery/layout.tsx | 0 .../src/app/gallery/page.tsx | 0 .../{a2ui-composer => composer}/src/app/globals.css | 0 .../src/app/icons/layout.tsx | 0 .../src/app/icons/page.tsx | 0 .../{a2ui-composer => composer}/src/app/layout.tsx | 0 tools/{a2ui-composer => composer}/src/app/page.tsx | 0 .../src/app/widget/[id]/layout.tsx | 0 .../src/app/widget/[id]/page.tsx | 0 .../src/components/editor/code-editor.tsx | 0 .../src/components/editor/data-panel.tsx | 0 .../src/components/editor/editor-header.tsx | 0 .../src/components/editor/preview-pane.tsx | 0 .../src/components/editor/widget-editor.tsx | 0 .../src/components/gallery/gallery-widget.tsx | 0 .../src/components/gallery/widget-preview-modal.tsx | 0 .../src/components/layout/app-shell.tsx | 0 .../src/components/layout/sidebar-header.tsx | 0 .../src/components/layout/sidebar-nav.tsx | 0 .../src/components/layout/sidebar-widgets.tsx | 0 .../src/components/layout/sidebar.tsx | 0 .../src/components/main/create-widget.tsx | 0 .../src/components/main/preview-gallery.tsx | 0 .../src/components/main/widget-input.tsx | 0 .../src/components/ui/alert-dialog.tsx | 0 .../src/components/ui/button.tsx | 0 .../src/components/ui/dropdown-menu.tsx | 0 .../src/components/ui/input.tsx | 0 .../src/components/ui/resizable.tsx | 0 .../src/components/ui/separator.tsx | 0 .../src/contexts/widgets-context.tsx | 0 .../src/data/gallery/account-balance.ts | 0 .../src/data/gallery/calendar-day.ts | 0 .../src/data/gallery/chat-message.ts | 0 .../src/data/gallery/coffee-order.ts | 0 .../src/data/gallery/contact-card.ts | 0 .../src/data/gallery/countdown-timer.ts | 0 .../src/data/gallery/credit-card.ts | 0 .../src/data/gallery/email-compose.ts | 0 .../src/data/gallery/event-detail.ts | 0 .../src/data/gallery/flight-status.ts | 0 .../src/data/gallery/index.ts | 0 .../src/data/gallery/login-form.ts | 0 .../src/data/gallery/movie-card.ts | 0 .../src/data/gallery/music-player.ts | 0 .../src/data/gallery/notification-permission.ts | 0 .../src/data/gallery/podcast-episode.ts | 0 .../src/data/gallery/product-card.ts | 0 .../src/data/gallery/purchase-complete.ts | 0 .../src/data/gallery/recipe-card.ts | 0 .../src/data/gallery/restaurant-card.ts | 0 .../src/data/gallery/shipping-status.ts | 0 .../src/data/gallery/software-purchase.ts | 0 .../src/data/gallery/sports-player.ts | 0 .../src/data/gallery/stats-card.ts | 0 .../src/data/gallery/step-counter.ts | 0 .../src/data/gallery/task-card.ts | 0 .../src/data/gallery/track-list.ts | 0 .../src/data/gallery/user-profile.ts | 0 .../src/data/gallery/weather-current.ts | 0 .../src/data/gallery/workout-summary.ts | 0 .../src/lib/components-data.ts | 0 .../src/lib/json-parser.ts | 0 .../{a2ui-composer => composer}/src/lib/storage.ts | 0 tools/{a2ui-composer => composer}/src/lib/utils.ts | 0 .../{a2ui-composer => composer}/src/types/widget.ts | 0 tools/{a2ui-composer => composer}/tsconfig.json | 0 88 files changed, 0 insertions(+), 0 deletions(-) rename tools/{a2ui-composer => composer}/.gitignore (100%) rename tools/{a2ui-composer => composer}/AGENTS.md (100%) rename tools/{a2ui-composer => composer}/README.md (100%) rename tools/{a2ui-composer => composer}/components.json (100%) rename tools/{a2ui-composer => composer}/eslint.config.mjs (100%) rename tools/{a2ui-composer => composer}/images/composer.png (100%) rename tools/{a2ui-composer => composer}/images/demo.mp4 (100%) rename tools/{a2ui-composer => composer}/next.config.ts (100%) rename tools/{a2ui-composer => composer}/package.json (100%) rename tools/{a2ui-composer => composer}/pnpm-lock.yaml (100%) rename tools/{a2ui-composer => composer}/postcss.config.mjs (100%) rename tools/{a2ui-composer => composer}/public/file.svg (100%) rename tools/{a2ui-composer => composer}/public/globe.svg (100%) rename tools/{a2ui-composer => composer}/public/next.svg (100%) rename tools/{a2ui-composer => composer}/public/vercel.svg (100%) rename tools/{a2ui-composer => composer}/public/window.svg (100%) rename tools/{a2ui-composer => composer}/src/app/api/copilotkit/[[...slug]]/route.ts (100%) rename tools/{a2ui-composer => composer}/src/app/api/copilotkit/a2ui-prompt.ts (100%) rename tools/{a2ui-composer => composer}/src/app/components/layout.tsx (100%) rename tools/{a2ui-composer => composer}/src/app/components/page.tsx (100%) rename tools/{a2ui-composer => composer}/src/app/favicon.ico (100%) rename tools/{a2ui-composer => composer}/src/app/gallery/layout.tsx (100%) rename tools/{a2ui-composer => composer}/src/app/gallery/page.tsx (100%) rename tools/{a2ui-composer => composer}/src/app/globals.css (100%) rename tools/{a2ui-composer => composer}/src/app/icons/layout.tsx (100%) rename tools/{a2ui-composer => composer}/src/app/icons/page.tsx (100%) rename tools/{a2ui-composer => composer}/src/app/layout.tsx (100%) rename tools/{a2ui-composer => composer}/src/app/page.tsx (100%) rename tools/{a2ui-composer => composer}/src/app/widget/[id]/layout.tsx (100%) rename tools/{a2ui-composer => composer}/src/app/widget/[id]/page.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/editor/code-editor.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/editor/data-panel.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/editor/editor-header.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/editor/preview-pane.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/editor/widget-editor.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/gallery/gallery-widget.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/gallery/widget-preview-modal.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/layout/app-shell.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/layout/sidebar-header.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/layout/sidebar-nav.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/layout/sidebar-widgets.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/layout/sidebar.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/main/create-widget.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/main/preview-gallery.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/main/widget-input.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/ui/alert-dialog.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/ui/button.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/ui/dropdown-menu.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/ui/input.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/ui/resizable.tsx (100%) rename tools/{a2ui-composer => composer}/src/components/ui/separator.tsx (100%) rename tools/{a2ui-composer => composer}/src/contexts/widgets-context.tsx (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/account-balance.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/calendar-day.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/chat-message.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/coffee-order.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/contact-card.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/countdown-timer.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/credit-card.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/email-compose.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/event-detail.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/flight-status.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/index.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/login-form.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/movie-card.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/music-player.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/notification-permission.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/podcast-episode.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/product-card.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/purchase-complete.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/recipe-card.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/restaurant-card.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/shipping-status.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/software-purchase.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/sports-player.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/stats-card.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/step-counter.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/task-card.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/track-list.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/user-profile.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/weather-current.ts (100%) rename tools/{a2ui-composer => composer}/src/data/gallery/workout-summary.ts (100%) rename tools/{a2ui-composer => composer}/src/lib/components-data.ts (100%) rename tools/{a2ui-composer => composer}/src/lib/json-parser.ts (100%) rename tools/{a2ui-composer => composer}/src/lib/storage.ts (100%) rename tools/{a2ui-composer => composer}/src/lib/utils.ts (100%) rename tools/{a2ui-composer => composer}/src/types/widget.ts (100%) rename tools/{a2ui-composer => composer}/tsconfig.json (100%) diff --git a/tools/a2ui-composer/.gitignore b/tools/composer/.gitignore similarity index 100% rename from tools/a2ui-composer/.gitignore rename to tools/composer/.gitignore diff --git a/tools/a2ui-composer/AGENTS.md b/tools/composer/AGENTS.md similarity index 100% rename from tools/a2ui-composer/AGENTS.md rename to tools/composer/AGENTS.md diff --git a/tools/a2ui-composer/README.md b/tools/composer/README.md similarity index 100% rename from tools/a2ui-composer/README.md rename to tools/composer/README.md diff --git a/tools/a2ui-composer/components.json b/tools/composer/components.json similarity index 100% rename from tools/a2ui-composer/components.json rename to tools/composer/components.json diff --git a/tools/a2ui-composer/eslint.config.mjs b/tools/composer/eslint.config.mjs similarity index 100% rename from tools/a2ui-composer/eslint.config.mjs rename to tools/composer/eslint.config.mjs diff --git a/tools/a2ui-composer/images/composer.png b/tools/composer/images/composer.png similarity index 100% rename from tools/a2ui-composer/images/composer.png rename to tools/composer/images/composer.png diff --git a/tools/a2ui-composer/images/demo.mp4 b/tools/composer/images/demo.mp4 similarity index 100% rename from tools/a2ui-composer/images/demo.mp4 rename to tools/composer/images/demo.mp4 diff --git a/tools/a2ui-composer/next.config.ts b/tools/composer/next.config.ts similarity index 100% rename from tools/a2ui-composer/next.config.ts rename to tools/composer/next.config.ts diff --git a/tools/a2ui-composer/package.json b/tools/composer/package.json similarity index 100% rename from tools/a2ui-composer/package.json rename to tools/composer/package.json diff --git a/tools/a2ui-composer/pnpm-lock.yaml b/tools/composer/pnpm-lock.yaml similarity index 100% rename from tools/a2ui-composer/pnpm-lock.yaml rename to tools/composer/pnpm-lock.yaml diff --git a/tools/a2ui-composer/postcss.config.mjs b/tools/composer/postcss.config.mjs similarity index 100% rename from tools/a2ui-composer/postcss.config.mjs rename to tools/composer/postcss.config.mjs diff --git a/tools/a2ui-composer/public/file.svg b/tools/composer/public/file.svg similarity index 100% rename from tools/a2ui-composer/public/file.svg rename to tools/composer/public/file.svg diff --git a/tools/a2ui-composer/public/globe.svg b/tools/composer/public/globe.svg similarity index 100% rename from tools/a2ui-composer/public/globe.svg rename to tools/composer/public/globe.svg diff --git a/tools/a2ui-composer/public/next.svg b/tools/composer/public/next.svg similarity index 100% rename from tools/a2ui-composer/public/next.svg rename to tools/composer/public/next.svg diff --git a/tools/a2ui-composer/public/vercel.svg b/tools/composer/public/vercel.svg similarity index 100% rename from tools/a2ui-composer/public/vercel.svg rename to tools/composer/public/vercel.svg diff --git a/tools/a2ui-composer/public/window.svg b/tools/composer/public/window.svg similarity index 100% rename from tools/a2ui-composer/public/window.svg rename to tools/composer/public/window.svg diff --git a/tools/a2ui-composer/src/app/api/copilotkit/[[...slug]]/route.ts b/tools/composer/src/app/api/copilotkit/[[...slug]]/route.ts similarity index 100% rename from tools/a2ui-composer/src/app/api/copilotkit/[[...slug]]/route.ts rename to tools/composer/src/app/api/copilotkit/[[...slug]]/route.ts diff --git a/tools/a2ui-composer/src/app/api/copilotkit/a2ui-prompt.ts b/tools/composer/src/app/api/copilotkit/a2ui-prompt.ts similarity index 100% rename from tools/a2ui-composer/src/app/api/copilotkit/a2ui-prompt.ts rename to tools/composer/src/app/api/copilotkit/a2ui-prompt.ts diff --git a/tools/a2ui-composer/src/app/components/layout.tsx b/tools/composer/src/app/components/layout.tsx similarity index 100% rename from tools/a2ui-composer/src/app/components/layout.tsx rename to tools/composer/src/app/components/layout.tsx diff --git a/tools/a2ui-composer/src/app/components/page.tsx b/tools/composer/src/app/components/page.tsx similarity index 100% rename from tools/a2ui-composer/src/app/components/page.tsx rename to tools/composer/src/app/components/page.tsx diff --git a/tools/a2ui-composer/src/app/favicon.ico b/tools/composer/src/app/favicon.ico similarity index 100% rename from tools/a2ui-composer/src/app/favicon.ico rename to tools/composer/src/app/favicon.ico diff --git a/tools/a2ui-composer/src/app/gallery/layout.tsx b/tools/composer/src/app/gallery/layout.tsx similarity index 100% rename from tools/a2ui-composer/src/app/gallery/layout.tsx rename to tools/composer/src/app/gallery/layout.tsx diff --git a/tools/a2ui-composer/src/app/gallery/page.tsx b/tools/composer/src/app/gallery/page.tsx similarity index 100% rename from tools/a2ui-composer/src/app/gallery/page.tsx rename to tools/composer/src/app/gallery/page.tsx diff --git a/tools/a2ui-composer/src/app/globals.css b/tools/composer/src/app/globals.css similarity index 100% rename from tools/a2ui-composer/src/app/globals.css rename to tools/composer/src/app/globals.css diff --git a/tools/a2ui-composer/src/app/icons/layout.tsx b/tools/composer/src/app/icons/layout.tsx similarity index 100% rename from tools/a2ui-composer/src/app/icons/layout.tsx rename to tools/composer/src/app/icons/layout.tsx diff --git a/tools/a2ui-composer/src/app/icons/page.tsx b/tools/composer/src/app/icons/page.tsx similarity index 100% rename from tools/a2ui-composer/src/app/icons/page.tsx rename to tools/composer/src/app/icons/page.tsx diff --git a/tools/a2ui-composer/src/app/layout.tsx b/tools/composer/src/app/layout.tsx similarity index 100% rename from tools/a2ui-composer/src/app/layout.tsx rename to tools/composer/src/app/layout.tsx diff --git a/tools/a2ui-composer/src/app/page.tsx b/tools/composer/src/app/page.tsx similarity index 100% rename from tools/a2ui-composer/src/app/page.tsx rename to tools/composer/src/app/page.tsx diff --git a/tools/a2ui-composer/src/app/widget/[id]/layout.tsx b/tools/composer/src/app/widget/[id]/layout.tsx similarity index 100% rename from tools/a2ui-composer/src/app/widget/[id]/layout.tsx rename to tools/composer/src/app/widget/[id]/layout.tsx diff --git a/tools/a2ui-composer/src/app/widget/[id]/page.tsx b/tools/composer/src/app/widget/[id]/page.tsx similarity index 100% rename from tools/a2ui-composer/src/app/widget/[id]/page.tsx rename to tools/composer/src/app/widget/[id]/page.tsx diff --git a/tools/a2ui-composer/src/components/editor/code-editor.tsx b/tools/composer/src/components/editor/code-editor.tsx similarity index 100% rename from tools/a2ui-composer/src/components/editor/code-editor.tsx rename to tools/composer/src/components/editor/code-editor.tsx diff --git a/tools/a2ui-composer/src/components/editor/data-panel.tsx b/tools/composer/src/components/editor/data-panel.tsx similarity index 100% rename from tools/a2ui-composer/src/components/editor/data-panel.tsx rename to tools/composer/src/components/editor/data-panel.tsx diff --git a/tools/a2ui-composer/src/components/editor/editor-header.tsx b/tools/composer/src/components/editor/editor-header.tsx similarity index 100% rename from tools/a2ui-composer/src/components/editor/editor-header.tsx rename to tools/composer/src/components/editor/editor-header.tsx diff --git a/tools/a2ui-composer/src/components/editor/preview-pane.tsx b/tools/composer/src/components/editor/preview-pane.tsx similarity index 100% rename from tools/a2ui-composer/src/components/editor/preview-pane.tsx rename to tools/composer/src/components/editor/preview-pane.tsx diff --git a/tools/a2ui-composer/src/components/editor/widget-editor.tsx b/tools/composer/src/components/editor/widget-editor.tsx similarity index 100% rename from tools/a2ui-composer/src/components/editor/widget-editor.tsx rename to tools/composer/src/components/editor/widget-editor.tsx diff --git a/tools/a2ui-composer/src/components/gallery/gallery-widget.tsx b/tools/composer/src/components/gallery/gallery-widget.tsx similarity index 100% rename from tools/a2ui-composer/src/components/gallery/gallery-widget.tsx rename to tools/composer/src/components/gallery/gallery-widget.tsx diff --git a/tools/a2ui-composer/src/components/gallery/widget-preview-modal.tsx b/tools/composer/src/components/gallery/widget-preview-modal.tsx similarity index 100% rename from tools/a2ui-composer/src/components/gallery/widget-preview-modal.tsx rename to tools/composer/src/components/gallery/widget-preview-modal.tsx diff --git a/tools/a2ui-composer/src/components/layout/app-shell.tsx b/tools/composer/src/components/layout/app-shell.tsx similarity index 100% rename from tools/a2ui-composer/src/components/layout/app-shell.tsx rename to tools/composer/src/components/layout/app-shell.tsx diff --git a/tools/a2ui-composer/src/components/layout/sidebar-header.tsx b/tools/composer/src/components/layout/sidebar-header.tsx similarity index 100% rename from tools/a2ui-composer/src/components/layout/sidebar-header.tsx rename to tools/composer/src/components/layout/sidebar-header.tsx diff --git a/tools/a2ui-composer/src/components/layout/sidebar-nav.tsx b/tools/composer/src/components/layout/sidebar-nav.tsx similarity index 100% rename from tools/a2ui-composer/src/components/layout/sidebar-nav.tsx rename to tools/composer/src/components/layout/sidebar-nav.tsx diff --git a/tools/a2ui-composer/src/components/layout/sidebar-widgets.tsx b/tools/composer/src/components/layout/sidebar-widgets.tsx similarity index 100% rename from tools/a2ui-composer/src/components/layout/sidebar-widgets.tsx rename to tools/composer/src/components/layout/sidebar-widgets.tsx diff --git a/tools/a2ui-composer/src/components/layout/sidebar.tsx b/tools/composer/src/components/layout/sidebar.tsx similarity index 100% rename from tools/a2ui-composer/src/components/layout/sidebar.tsx rename to tools/composer/src/components/layout/sidebar.tsx diff --git a/tools/a2ui-composer/src/components/main/create-widget.tsx b/tools/composer/src/components/main/create-widget.tsx similarity index 100% rename from tools/a2ui-composer/src/components/main/create-widget.tsx rename to tools/composer/src/components/main/create-widget.tsx diff --git a/tools/a2ui-composer/src/components/main/preview-gallery.tsx b/tools/composer/src/components/main/preview-gallery.tsx similarity index 100% rename from tools/a2ui-composer/src/components/main/preview-gallery.tsx rename to tools/composer/src/components/main/preview-gallery.tsx diff --git a/tools/a2ui-composer/src/components/main/widget-input.tsx b/tools/composer/src/components/main/widget-input.tsx similarity index 100% rename from tools/a2ui-composer/src/components/main/widget-input.tsx rename to tools/composer/src/components/main/widget-input.tsx diff --git a/tools/a2ui-composer/src/components/ui/alert-dialog.tsx b/tools/composer/src/components/ui/alert-dialog.tsx similarity index 100% rename from tools/a2ui-composer/src/components/ui/alert-dialog.tsx rename to tools/composer/src/components/ui/alert-dialog.tsx diff --git a/tools/a2ui-composer/src/components/ui/button.tsx b/tools/composer/src/components/ui/button.tsx similarity index 100% rename from tools/a2ui-composer/src/components/ui/button.tsx rename to tools/composer/src/components/ui/button.tsx diff --git a/tools/a2ui-composer/src/components/ui/dropdown-menu.tsx b/tools/composer/src/components/ui/dropdown-menu.tsx similarity index 100% rename from tools/a2ui-composer/src/components/ui/dropdown-menu.tsx rename to tools/composer/src/components/ui/dropdown-menu.tsx diff --git a/tools/a2ui-composer/src/components/ui/input.tsx b/tools/composer/src/components/ui/input.tsx similarity index 100% rename from tools/a2ui-composer/src/components/ui/input.tsx rename to tools/composer/src/components/ui/input.tsx diff --git a/tools/a2ui-composer/src/components/ui/resizable.tsx b/tools/composer/src/components/ui/resizable.tsx similarity index 100% rename from tools/a2ui-composer/src/components/ui/resizable.tsx rename to tools/composer/src/components/ui/resizable.tsx diff --git a/tools/a2ui-composer/src/components/ui/separator.tsx b/tools/composer/src/components/ui/separator.tsx similarity index 100% rename from tools/a2ui-composer/src/components/ui/separator.tsx rename to tools/composer/src/components/ui/separator.tsx diff --git a/tools/a2ui-composer/src/contexts/widgets-context.tsx b/tools/composer/src/contexts/widgets-context.tsx similarity index 100% rename from tools/a2ui-composer/src/contexts/widgets-context.tsx rename to tools/composer/src/contexts/widgets-context.tsx diff --git a/tools/a2ui-composer/src/data/gallery/account-balance.ts b/tools/composer/src/data/gallery/account-balance.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/account-balance.ts rename to tools/composer/src/data/gallery/account-balance.ts diff --git a/tools/a2ui-composer/src/data/gallery/calendar-day.ts b/tools/composer/src/data/gallery/calendar-day.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/calendar-day.ts rename to tools/composer/src/data/gallery/calendar-day.ts diff --git a/tools/a2ui-composer/src/data/gallery/chat-message.ts b/tools/composer/src/data/gallery/chat-message.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/chat-message.ts rename to tools/composer/src/data/gallery/chat-message.ts diff --git a/tools/a2ui-composer/src/data/gallery/coffee-order.ts b/tools/composer/src/data/gallery/coffee-order.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/coffee-order.ts rename to tools/composer/src/data/gallery/coffee-order.ts diff --git a/tools/a2ui-composer/src/data/gallery/contact-card.ts b/tools/composer/src/data/gallery/contact-card.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/contact-card.ts rename to tools/composer/src/data/gallery/contact-card.ts diff --git a/tools/a2ui-composer/src/data/gallery/countdown-timer.ts b/tools/composer/src/data/gallery/countdown-timer.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/countdown-timer.ts rename to tools/composer/src/data/gallery/countdown-timer.ts diff --git a/tools/a2ui-composer/src/data/gallery/credit-card.ts b/tools/composer/src/data/gallery/credit-card.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/credit-card.ts rename to tools/composer/src/data/gallery/credit-card.ts diff --git a/tools/a2ui-composer/src/data/gallery/email-compose.ts b/tools/composer/src/data/gallery/email-compose.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/email-compose.ts rename to tools/composer/src/data/gallery/email-compose.ts diff --git a/tools/a2ui-composer/src/data/gallery/event-detail.ts b/tools/composer/src/data/gallery/event-detail.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/event-detail.ts rename to tools/composer/src/data/gallery/event-detail.ts diff --git a/tools/a2ui-composer/src/data/gallery/flight-status.ts b/tools/composer/src/data/gallery/flight-status.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/flight-status.ts rename to tools/composer/src/data/gallery/flight-status.ts diff --git a/tools/a2ui-composer/src/data/gallery/index.ts b/tools/composer/src/data/gallery/index.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/index.ts rename to tools/composer/src/data/gallery/index.ts diff --git a/tools/a2ui-composer/src/data/gallery/login-form.ts b/tools/composer/src/data/gallery/login-form.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/login-form.ts rename to tools/composer/src/data/gallery/login-form.ts diff --git a/tools/a2ui-composer/src/data/gallery/movie-card.ts b/tools/composer/src/data/gallery/movie-card.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/movie-card.ts rename to tools/composer/src/data/gallery/movie-card.ts diff --git a/tools/a2ui-composer/src/data/gallery/music-player.ts b/tools/composer/src/data/gallery/music-player.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/music-player.ts rename to tools/composer/src/data/gallery/music-player.ts diff --git a/tools/a2ui-composer/src/data/gallery/notification-permission.ts b/tools/composer/src/data/gallery/notification-permission.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/notification-permission.ts rename to tools/composer/src/data/gallery/notification-permission.ts diff --git a/tools/a2ui-composer/src/data/gallery/podcast-episode.ts b/tools/composer/src/data/gallery/podcast-episode.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/podcast-episode.ts rename to tools/composer/src/data/gallery/podcast-episode.ts diff --git a/tools/a2ui-composer/src/data/gallery/product-card.ts b/tools/composer/src/data/gallery/product-card.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/product-card.ts rename to tools/composer/src/data/gallery/product-card.ts diff --git a/tools/a2ui-composer/src/data/gallery/purchase-complete.ts b/tools/composer/src/data/gallery/purchase-complete.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/purchase-complete.ts rename to tools/composer/src/data/gallery/purchase-complete.ts diff --git a/tools/a2ui-composer/src/data/gallery/recipe-card.ts b/tools/composer/src/data/gallery/recipe-card.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/recipe-card.ts rename to tools/composer/src/data/gallery/recipe-card.ts diff --git a/tools/a2ui-composer/src/data/gallery/restaurant-card.ts b/tools/composer/src/data/gallery/restaurant-card.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/restaurant-card.ts rename to tools/composer/src/data/gallery/restaurant-card.ts diff --git a/tools/a2ui-composer/src/data/gallery/shipping-status.ts b/tools/composer/src/data/gallery/shipping-status.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/shipping-status.ts rename to tools/composer/src/data/gallery/shipping-status.ts diff --git a/tools/a2ui-composer/src/data/gallery/software-purchase.ts b/tools/composer/src/data/gallery/software-purchase.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/software-purchase.ts rename to tools/composer/src/data/gallery/software-purchase.ts diff --git a/tools/a2ui-composer/src/data/gallery/sports-player.ts b/tools/composer/src/data/gallery/sports-player.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/sports-player.ts rename to tools/composer/src/data/gallery/sports-player.ts diff --git a/tools/a2ui-composer/src/data/gallery/stats-card.ts b/tools/composer/src/data/gallery/stats-card.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/stats-card.ts rename to tools/composer/src/data/gallery/stats-card.ts diff --git a/tools/a2ui-composer/src/data/gallery/step-counter.ts b/tools/composer/src/data/gallery/step-counter.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/step-counter.ts rename to tools/composer/src/data/gallery/step-counter.ts diff --git a/tools/a2ui-composer/src/data/gallery/task-card.ts b/tools/composer/src/data/gallery/task-card.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/task-card.ts rename to tools/composer/src/data/gallery/task-card.ts diff --git a/tools/a2ui-composer/src/data/gallery/track-list.ts b/tools/composer/src/data/gallery/track-list.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/track-list.ts rename to tools/composer/src/data/gallery/track-list.ts diff --git a/tools/a2ui-composer/src/data/gallery/user-profile.ts b/tools/composer/src/data/gallery/user-profile.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/user-profile.ts rename to tools/composer/src/data/gallery/user-profile.ts diff --git a/tools/a2ui-composer/src/data/gallery/weather-current.ts b/tools/composer/src/data/gallery/weather-current.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/weather-current.ts rename to tools/composer/src/data/gallery/weather-current.ts diff --git a/tools/a2ui-composer/src/data/gallery/workout-summary.ts b/tools/composer/src/data/gallery/workout-summary.ts similarity index 100% rename from tools/a2ui-composer/src/data/gallery/workout-summary.ts rename to tools/composer/src/data/gallery/workout-summary.ts diff --git a/tools/a2ui-composer/src/lib/components-data.ts b/tools/composer/src/lib/components-data.ts similarity index 100% rename from tools/a2ui-composer/src/lib/components-data.ts rename to tools/composer/src/lib/components-data.ts diff --git a/tools/a2ui-composer/src/lib/json-parser.ts b/tools/composer/src/lib/json-parser.ts similarity index 100% rename from tools/a2ui-composer/src/lib/json-parser.ts rename to tools/composer/src/lib/json-parser.ts diff --git a/tools/a2ui-composer/src/lib/storage.ts b/tools/composer/src/lib/storage.ts similarity index 100% rename from tools/a2ui-composer/src/lib/storage.ts rename to tools/composer/src/lib/storage.ts diff --git a/tools/a2ui-composer/src/lib/utils.ts b/tools/composer/src/lib/utils.ts similarity index 100% rename from tools/a2ui-composer/src/lib/utils.ts rename to tools/composer/src/lib/utils.ts diff --git a/tools/a2ui-composer/src/types/widget.ts b/tools/composer/src/types/widget.ts similarity index 100% rename from tools/a2ui-composer/src/types/widget.ts rename to tools/composer/src/types/widget.ts diff --git a/tools/a2ui-composer/tsconfig.json b/tools/composer/tsconfig.json similarity index 100% rename from tools/a2ui-composer/tsconfig.json rename to tools/composer/tsconfig.json From 8ff9ae579a791e0e9863be194ab5b35d07d6704b Mon Sep 17 00:00:00 2001 From: Jacob Simionato Date: Tue, 3 Mar 2026 12:26:01 +1030 Subject: [PATCH 3/7] Fix local running instructions --- tools/composer/AGENTS.md | 2 +- tools/composer/README.md | 15 ++++++++++++--- .../src/app/api/copilotkit/[[...slug]]/route.ts | 17 ++++++++++++++--- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/tools/composer/AGENTS.md b/tools/composer/AGENTS.md index b141b6362..deb03854a 100644 --- a/tools/composer/AGENTS.md +++ b/tools/composer/AGENTS.md @@ -1,7 +1,7 @@ # Repository Guidelines ## Build, Test, and Development Commands -Run `pnpm install` once, then `pnpm dev` for the web server (Next.js watches on port 3000). Build artifacts with `pnpm build`; +Run `pnpm install` once, then `pnpm dev` for the web server (Next.js watches on port 3001). Build artifacts with `pnpm build`; ## Coding Style & Naming Conventions TypeScript and modern React are mandatory; prefer function components and colocate UI logic in `app/components`. Follow Prettier's defaults (two-space indentation, single quotes) by running `pnpm format` before commits. Component files use PascalCase (e.g., `AgentPanel.tsx`); hooks and utilities use camelCase in `*.ts`. The shared ESLint preset (`packages/eslint-config`) enforces `turbo/no-undeclared-env-vars`, so surface new env variables via typed helpers. diff --git a/tools/composer/README.md b/tools/composer/README.md index 4afb69f05..3264385f8 100644 --- a/tools/composer/README.md +++ b/tools/composer/README.md @@ -10,10 +10,19 @@ Just ask the composer to build you a widget, have it make any changes you want, ## Running the composer -You need a `GEMINI_API_KEY` or `OPENAI_API_KEY` in `apps/widget-builder/.env.local`. +You need a `GOOGLE_GENERATIVE_AI_API_KEY` (or `GEMINI_API_KEY`) or `OPENAI_API_KEY` in a `.env.local` file in this directory. -Then, just install, build, and run! +Example `.env.local`: +```env +GOOGLE_GENERATIVE_AI_API_KEY=your_gemini_api_key_here +# OR +GEMINI_API_KEY=your_gemini_api_key_here +# OR +OPENAI_API_KEY=your_openai_api_key_here ``` -pnpm i && pnpm build + +Then, just install and run! +```bash +pnpm i pnpm dev ``` diff --git a/tools/composer/src/app/api/copilotkit/[[...slug]]/route.ts b/tools/composer/src/app/api/copilotkit/[[...slug]]/route.ts index eb98adc3e..6df8fbe29 100644 --- a/tools/composer/src/app/api/copilotkit/[[...slug]]/route.ts +++ b/tools/composer/src/app/api/copilotkit/[[...slug]]/route.ts @@ -8,16 +8,27 @@ import { handle } from "hono/vercel"; import { A2UI_SYSTEM_PROMPT } from "../a2ui-prompt"; const determineModel = () => { - if (process.env.GEMINI_API_KEY?.trim()) { + if ( + process.env.GOOGLE_GENERATIVE_AI_API_KEY?.trim() || + process.env.GEMINI_API_KEY?.trim() + ) { + if ( + !process.env.GOOGLE_GENERATIVE_AI_API_KEY && + process.env.GEMINI_API_KEY + ) { + process.env.GOOGLE_GENERATIVE_AI_API_KEY = process.env.GEMINI_API_KEY; + } return "google/gemini-2.5-flash"; } if (process.env.OPENAI_API_KEY?.trim()) { console.warn( - "[CopilotKit] GEMINI_API_KEY not found, falling back to OpenAI", + "[CopilotKit] GEMINI_API_KEY/GOOGLE_GENERATIVE_AI_API_KEY not found, falling back to OpenAI", ); return "openai/gpt-4.1-mini"; } - console.warn("[CopilotKit] No GEMINI_API_KEY or OPENAI_API_KEY found"); + console.warn( + "[CopilotKit] No GEMINI_API_KEY, GOOGLE_GENERATIVE_AI_API_KEY or OPENAI_API_KEY found", + ); return "google/gemini-2.5-flash"; }; From fb853729d99264dfb3ee02dca5608cab5d13a3ad Mon Sep 17 00:00:00 2001 From: Jacob Simionato Date: Tue, 3 Mar 2026 12:47:43 +1030 Subject: [PATCH 4/7] Add tests and minor logic improvement --- .github/workflows/composer_build_and_test.yml | 60 + tools/composer/README.md | 12 + tools/composer/package.json | 10 +- tools/composer/pnpm-lock.yaml | 1697 ++++++++++++++++- .../src/components/editor/data-panel.test.tsx | 87 + .../components/editor/editor-header.test.tsx | 59 + .../components/editor/widget-editor.test.tsx | 111 ++ .../src/contexts/widgets-context.test.tsx | 126 ++ tools/composer/src/lib/json-parser.test.ts | 63 + tools/composer/src/lib/json-parser.ts | 15 +- tools/composer/src/lib/storage.test.ts | 68 + tools/composer/src/test/setup.ts | 25 + tools/composer/vitest.config.ts | 17 + 13 files changed, 2336 insertions(+), 14 deletions(-) create mode 100644 .github/workflows/composer_build_and_test.yml create mode 100644 tools/composer/src/components/editor/data-panel.test.tsx create mode 100644 tools/composer/src/components/editor/editor-header.test.tsx create mode 100644 tools/composer/src/components/editor/widget-editor.test.tsx create mode 100644 tools/composer/src/contexts/widgets-context.test.tsx create mode 100644 tools/composer/src/lib/json-parser.test.ts create mode 100644 tools/composer/src/lib/storage.test.ts create mode 100644 tools/composer/src/test/setup.ts create mode 100644 tools/composer/vitest.config.ts diff --git a/.github/workflows/composer_build_and_test.yml b/.github/workflows/composer_build_and_test.yml new file mode 100644 index 000000000..e16ad4b57 --- /dev/null +++ b/.github/workflows/composer_build_and_test.yml @@ -0,0 +1,60 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: Composer build and test + +on: + push: + paths: + - 'tools/composer/**' + - '.github/workflows/composer_build_and_test.yml' + pull_request: + paths: + - 'tools/composer/**' + - '.github/workflows/composer_build_and_test.yml' + +jobs: + build-and-test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'pnpm' + cache-dependency-path: 'tools/composer/pnpm-lock.yaml' + + - name: Install dependencies + working-directory: ./tools/composer + run: pnpm install + + - name: Lint + working-directory: ./tools/composer + run: pnpm lint + + - name: Build + working-directory: ./tools/composer + run: pnpm build + + - name: Test + working-directory: ./tools/composer + run: pnpm test diff --git a/tools/composer/README.md b/tools/composer/README.md index 3264385f8..1705c2c6f 100644 --- a/tools/composer/README.md +++ b/tools/composer/README.md @@ -26,3 +26,15 @@ Then, just install and run! pnpm i pnpm dev ``` + +## Testing +To run the tests: +```bash +pnpm test +``` + +To run tests in watch mode: +```bash +pnpm test:watch +``` + diff --git a/tools/composer/package.json b/tools/composer/package.json index 6994dbc6a..6b4cb82b9 100644 --- a/tools/composer/package.json +++ b/tools/composer/package.json @@ -7,6 +7,8 @@ "build": "next build", "start": "next start", "lint": "eslint", + "test": "vitest run", + "test:watch": "vitest", "format": "prettier --write \"**/*.{ts,tsx,md}\"" }, "dependencies": { @@ -37,10 +39,14 @@ "@eslint/js": "^9.34.0", "@next/eslint-plugin-next": "^15.5.0", "@tailwindcss/postcss": "^4", + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.2", + "@testing-library/user-event": "^14.6.1", "@types/node": "^20", "@types/react": "19.2.3", "@types/react-dom": "19.2.3", "@types/uuid": "^11.0.0", + "@vitejs/plugin-react": "^5.1.4", "eslint": "^9.34.0", "eslint-config-prettier": "^10.1.1", "eslint-plugin-only-warn": "^1.1.0", @@ -48,10 +54,12 @@ "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-turbo": "^2.5.0", "globals": "^16.3.0", + "jsdom": "^28.1.0", "prettier": "^3.7.4", "tailwindcss": "^4", "tw-animate-css": "^1.4.0", "typescript": "^5.9.2", - "typescript-eslint": "^8.40.0" + "typescript-eslint": "^8.40.0", + "vitest": "^4.0.18" } } diff --git a/tools/composer/pnpm-lock.yaml b/tools/composer/pnpm-lock.yaml index 04feace91..e2a9b15ca 100644 --- a/tools/composer/pnpm-lock.yaml +++ b/tools/composer/pnpm-lock.yaml @@ -52,7 +52,7 @@ importers: version: 0.556.0(react@19.2.1) next: specifier: 16.1.5 - version: 16.1.5(@opentelemetry/api@1.9.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + version: 16.1.5(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) react: specifier: 19.2.1 version: 19.2.1 @@ -84,6 +84,15 @@ importers: '@tailwindcss/postcss': specifier: ^4 version: 4.1.16 + '@testing-library/jest-dom': + specifier: ^6.9.1 + version: 6.9.1 + '@testing-library/react': + specifier: ^16.3.2 + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + '@testing-library/user-event': + specifier: ^14.6.1 + version: 14.6.1(@testing-library/dom@10.4.1) '@types/node': specifier: ^20 version: 20.19.24 @@ -96,6 +105,9 @@ importers: '@types/uuid': specifier: ^11.0.0 version: 11.0.0 + '@vitejs/plugin-react': + specifier: ^5.1.4 + version: 5.1.4(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)) eslint: specifier: ^9.34.0 version: 9.38.0(jiti@2.6.1) @@ -117,6 +129,9 @@ importers: globals: specifier: ^16.3.0 version: 16.4.0 + jsdom: + specifier: ^28.1.0 + version: 28.1.0 prettier: specifier: ^3.7.4 version: 3.7.4 @@ -132,6 +147,9 @@ importers: typescript-eslint: specifier: ^8.40.0 version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.2) + vitest: + specifier: ^4.0.18 + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.24)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.30.2) packages: @@ -146,6 +164,12 @@ packages: '@a2ui/lit@0.8.1': resolution: {integrity: sha512-QeqobciZz4OGMSgc2WGLFVidyhy+K7Z2GDpiuHN9NN+QlYMXByZqlzMvYPJsXrqf1lpQcMFRHgmUn1mwPpq9ew==} + '@acemir/cssom@0.9.31': + resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} + + '@adobe/css-tools@4.4.4': + resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} + '@ag-ui/client@0.0.42': resolution: {integrity: sha512-zAbP+sZJImR5bUpR2ni7RtuuNZMuesaxviynyIgzKlr1k2VCM49mFpbDUKU4TH4Cneu+Xe7OEnO8qCOCIzBAww==} @@ -220,13 +244,110 @@ packages: '@antfu/utils@9.3.0': resolution: {integrity: sha512-9hFT4RauhcUzqOE4f1+frMKLZrgNog5b06I7VmZQV1BkvwvqrbC8EBZf3L1eEL2AKb6rNKjER0sEvJiSP1FXEA==} + '@asamuzakjp/css-color@5.0.1': + resolution: {integrity: sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + + '@asamuzakjp/dom-selector@6.8.1': + resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} + + '@asamuzakjp/nwsapi@2.3.9': + resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} + + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.0': + resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.28.6': + resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.29.0': + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.28.4': resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + '@braintree/sanitize-url@7.1.1': resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==} + '@bramus/specificity@2.4.2': + resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==} + hasBin: true + '@bufbuild/protobuf@2.10.0': resolution: {integrity: sha512-fdRs9PSrBF7QUntpZpq6BTw58fhgGJojgg39m9oFOJGZT+nip9b0so5cYY1oWl5pvemDLr0cPPsH46vwThEbpQ==} @@ -338,6 +459,37 @@ packages: resolution: {integrity: sha512-6XkkigbkhSkcFrzWEqiW6P98y9rCv4+Q/YGlvS9KNfeYOoyt1Z9Ug1VVy7BC6qIhytbrraJizo24g8v3nCWVqQ==} engines: {node: '>=18'} + '@csstools/color-helpers@6.0.2': + resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} + engines: {node: '>=20.19.0'} + + '@csstools/css-calc@3.1.1': + resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-color-parser@4.0.2': + resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-tokenizer': ^4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.0.29': + resolution: {integrity: sha512-jx9GjkkP5YHuTmko2eWAvpPnb0mB4mGRr2U7XwVNwevm8nlpobZEVk+GNmiYMk2VuA75v+plfXWyroWKmICZXg==} + + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} + '@emnapi/runtime@1.8.1': resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} @@ -353,6 +505,162 @@ packages: resolution: {integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==} engines: {node: '>=18.0.0'} + '@esbuild/aix-ppc64@0.27.3': + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.3': + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.3': + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.3': + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.3': + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.3': + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.3': + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.3': + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.3': + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.3': + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.3': + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.3': + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.3': + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.3': + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.3': + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.3': + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.3': + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.3': + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.3': + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.3': + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.3': + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.3': + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.3': + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.3': + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.3': + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.3': + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.9.0': resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -391,6 +699,15 @@ packages: resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@exodus/bytes@1.14.1': + resolution: {integrity: sha512-OhkBFWI6GcRMUroChZiopRiSp2iAMvEBK47NhJooDqz1RERO4QuZIZnjP63TXX8GAiLABkYmX+fuQsdJ1dd2QQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + '@noble/hashes': ^1.8.0 || ^2.0.0 + peerDependenciesMeta: + '@noble/hashes': + optional: true + '@fastify/busboy@3.2.0': resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==} @@ -1196,6 +1513,134 @@ packages: '@repeaterjs/repeater@3.0.6': resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} + '@rolldown/pluginutils@1.0.0-rc.3': + resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} + + '@rollup/rollup-android-arm-eabi@4.59.0': + resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.59.0': + resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.59.0': + resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.59.0': + resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.59.0': + resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.59.0': + resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.59.0': + resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.59.0': + resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.59.0': + resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-loong64-musl@4.59.0': + resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-ppc64-musl@4.59.0': + resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.59.0': + resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.59.0': + resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.59.0': + resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.59.0': + resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openbsd-x64@4.59.0': + resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.59.0': + resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.59.0': + resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.59.0': + resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.59.0': + resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.59.0': + resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} + cpu: [x64] + os: [win32] + '@scarf/scarf@1.4.0': resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} @@ -1336,6 +1781,53 @@ packages: '@tanstack/virtual-core@3.13.13': resolution: {integrity: sha512-uQFoSdKKf5S8k51W5t7b2qpfkyIbdHMzAn+AMQvHPxKUPeo1SsGaA4JRISQT87jm28b7z8OEqPcg1IOZagQHcA==} + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + engines: {node: '>=18'} + + '@testing-library/jest-dom@6.9.1': + resolution: {integrity: sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/react@16.3.2': + resolution: {integrity: sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==} + engines: {node: '>=18'} + peerDependencies: + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 || ^19.0.0 + '@types/react-dom': ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} + + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/d3-array@3.2.2': resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} @@ -1432,6 +1924,9 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -1570,6 +2065,41 @@ packages: resolution: {integrity: sha512-fnYhv671l+eTTp48gB4zEsTW/YtRgRPnkI2nT7x6qw5rkI1Lq2hTmQIpHPgyThI0znLK+vX2n9XxKdXZ7BUbbw==} engines: {node: '>= 20'} + '@vitejs/plugin-react@5.1.4': + resolution: {integrity: sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + + '@vitest/expect@4.0.18': + resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==} + + '@vitest/mocker@4.0.18': + resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.0.18': + resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==} + + '@vitest/runner@4.0.18': + resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==} + + '@vitest/snapshot@4.0.18': + resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==} + + '@vitest/spy@4.0.18': + resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==} + + '@vitest/utils@4.0.18': + resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} + '@whatwg-node/disposablestack@0.0.6': resolution: {integrity: sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==} engines: {node: '>=18.0.0'} @@ -1616,6 +2146,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + ai@5.0.112: resolution: {integrity: sha512-Y0dluYpe5wn81UkfHbZL78mH6CsceUfMiu4oPRaWZvjlmcoXSPdEAsPcYbOjvX8ZPvQc6m4kNZhkcEXmT2ln4w==} engines: {node: '>=18'} @@ -1636,6 +2170,10 @@ packages: ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -1651,6 +2189,13 @@ packages: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.2: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} @@ -1682,6 +2227,10 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} @@ -1708,6 +2257,9 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + bidi-js@1.0.3: + resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -1726,6 +2278,11 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -1759,6 +2316,10 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -1859,6 +2420,9 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} @@ -1888,6 +2452,17 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + css-tree@3.1.0: + resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + + cssstyle@6.2.0: + resolution: {integrity: sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==} + engines: {node: '>=20'} + csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -2047,6 +2622,10 @@ packages: dagre-d3-es@7.0.11: resolution: {integrity: sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==} + data-urls@7.0.0: + resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -2086,6 +2665,9 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} @@ -2133,6 +2715,12 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dompurify@3.2.7: resolution: {integrity: sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==} @@ -2154,6 +2742,9 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + electron-to-chromium@1.5.302: + resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} + encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -2193,6 +2784,9 @@ packages: resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -2209,6 +2803,15 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} + esbuild@0.27.3: + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -2289,6 +2892,9 @@ packages: estree-util-is-identifier-name@3.0.0: resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -2316,6 +2922,10 @@ packages: resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + express-rate-limit@8.2.1: resolution: {integrity: sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==} engines: {node: '>= 16'} @@ -2371,6 +2981,15 @@ packages: fault@1.0.4: resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -2418,6 +3037,11 @@ packages: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -2432,6 +3056,10 @@ packages: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -2594,6 +3222,10 @@ packages: resolution: {integrity: sha512-kyWP5PAiMooEvGrA9jcD3IXF7ATu8+o7B3KCbPXid5se52NPqnOpM/r9qeW2heMnOekF4kqR1fXJqCYeCLKrZg==} engines: {node: '>=16.9.0'} + html-encoding-sniffer@6.0.0: + resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + html-url-attributes@3.0.1: resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} @@ -2604,6 +3236,14 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -2638,6 +3278,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -2762,6 +3406,9 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} @@ -2835,6 +3482,20 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true + jsdom@28.1.0: + resolution: {integrity: sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -2853,6 +3514,11 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -3027,6 +3693,13 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.2.6: + resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} + engines: {node: 20 || >=22} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lucide-react@0.525.0: resolution: {integrity: sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==} peerDependencies: @@ -3045,6 +3718,10 @@ packages: lucide@0.525.0: resolution: {integrity: sha512-sfehWlaE/7NVkcEQ4T9JD3eID8RNMIGJBBUq9wF3UFiJIrcMKRbU3g1KGfDk4svcW7yw8BtDLXaXo02scDtUYQ==} + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -3134,6 +3811,9 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} @@ -3338,6 +4018,10 @@ packages: engines: {node: '>=4'} hasBin: true + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} @@ -3414,6 +4098,9 @@ packages: encoding: optional: true + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -3442,6 +4129,9 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + on-exit-leak-free@2.1.2: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} @@ -3519,6 +4209,9 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parse5@8.0.0: + resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -3556,6 +4249,10 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + pino-abstract-transport@2.0.0: resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} @@ -3607,6 +4304,10 @@ packages: engines: {node: '>=14'} hasBin: true + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + prismjs@1.27.0: resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} engines: {node: '>=6'} @@ -3686,6 +4387,9 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} @@ -3701,6 +4405,10 @@ packages: '@types/react': '>=16' react: '>=16' + react-refresh@0.18.0: + resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} + engines: {node: '>=0.10.0'} + react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -3754,6 +4462,10 @@ packages: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} @@ -3830,6 +4542,11 @@ packages: robust-predicates@3.0.2: resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} + rollup@4.59.0: + resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + roughjs@4.6.6: resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==} @@ -3872,6 +4589,10 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -3954,6 +4675,9 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-polyfill@0.2.2: resolution: {integrity: sha512-p63Y4Er5/eMQ9RHg0M0Y64NlsQKpiu6MDdhBXpyywRuWiPywhJTpKJ1iB5K2hJEbFZ0BnDS7ZkJ+0AfTuL37Rg==} @@ -3982,6 +4706,9 @@ packages: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + state-local@1.0.7: resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} @@ -3989,6 +4716,9 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} @@ -4023,6 +4753,10 @@ packages: stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -4060,6 +4794,9 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + tabbable@6.3.0: resolution: {integrity: sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==} @@ -4076,9 +4813,31 @@ packages: thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinyexec@1.0.1: resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + engines: {node: '>=14.0.0'} + + tldts-core@7.0.24: + resolution: {integrity: sha512-pj7yygNMoMRqG7ML2SDQ0xNIOfN3IBDUcPVM2Sg6hP96oFNN2nqnzHreT3z9xLq85IWJyNTvD38O002DdOrPMw==} + + tldts@7.0.24: + resolution: {integrity: sha512-1r6vQTTt1rUiJkI5vX7KG8PR342Ru/5Oh13kEQP2SMbRSZpOey9SrBe27IDxkoWulx8ShWu4K6C0BkctP8Z1bQ==} + hasBin: true + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -4087,9 +4846,17 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + tough-cookie@6.0.0: + resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} + engines: {node: '>=16'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@6.0.0: + resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} + engines: {node: '>=20'} + trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} @@ -4214,6 +4981,10 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici@7.22.0: + resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} + engines: {node: '>=20.18.1'} + unified@10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} @@ -4266,6 +5037,12 @@ packages: untruncate-json@0.0.1: resolution: {integrity: sha512-4W9enDK4X1y1s2S/Rz7ysw6kDuMS3VmRjMFg7GZrNO+98OSe+x5Lh7PKYoVjy3lW/1wmhs6HW0lusnQRHgMarA==} + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -4356,6 +5133,80 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite@7.3.1: + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.0.18: + resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.18 + '@vitest/browser-preview': 4.0.18 + '@vitest/browser-webdriverio': 4.0.18 + '@vitest/ui': 4.0.18 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + vscode-jsonrpc@8.2.0: resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} engines: {node: '>=14.0.0'} @@ -4376,12 +5227,28 @@ packages: vscode-uri@3.0.8: resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@8.0.1: + resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} + engines: {node: '>=20'} + + whatwg-mimetype@5.0.0: + resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} + engines: {node: '>=20'} + + whatwg-url@16.0.1: + resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -4406,6 +5273,11 @@ packages: engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + wonka@6.3.5: resolution: {integrity: sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==} @@ -4416,10 +5288,20 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -4456,6 +5338,10 @@ snapshots: transitivePeerDependencies: - signal-polyfill + '@acemir/cssom@0.9.31': {} + + '@adobe/css-tools@4.4.4': {} + '@ag-ui/client@0.0.42': dependencies: '@ag-ui/core': 0.0.42 @@ -4560,10 +5446,144 @@ snapshots: '@antfu/utils@9.3.0': {} + '@asamuzakjp/css-color@5.0.1': + dependencies: + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + lru-cache: 11.2.6 + + '@asamuzakjp/dom-selector@6.8.1': + dependencies: + '@asamuzakjp/nwsapi': 2.3.9 + bidi-js: 1.0.3 + css-tree: 3.1.0 + is-potential-custom-element-name: 1.0.1 + lru-cache: 11.2.6 + + '@asamuzakjp/nwsapi@2.3.9': {} + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.0': {} + + '@babel/core@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-globals@7.28.0': {} + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.28.6': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helpers@7.28.6': + dependencies: + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + + '@babel/parser@7.29.0': + dependencies: + '@babel/types': 7.29.0 + + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': + dependencies: + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/runtime@7.28.4': {} + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@braintree/sanitize-url@7.1.1': {} + '@bramus/specificity@2.4.2': + dependencies: + css-tree: 3.1.0 + '@bufbuild/protobuf@2.10.0': {} '@cfworker/json-schema@4.1.1': {} @@ -4779,6 +5799,28 @@ snapshots: lucide: 0.525.0 marked: 12.0.2 + '@csstools/color-helpers@6.0.2': {} + + '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-color-parser@4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/color-helpers': 6.0.2 + '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-tokenizer': 4.0.0 + + '@csstools/css-syntax-patches-for-csstree@1.0.29': {} + + '@csstools/css-tokenizer@4.0.0': {} + '@emnapi/runtime@1.8.1': dependencies: tslib: 2.8.1 @@ -4791,15 +5833,93 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 - '@envelop/instrumentation@1.0.0': - dependencies: - '@whatwg-node/promise-helpers': 1.3.2 - tslib: 2.8.1 + '@envelop/instrumentation@1.0.0': + dependencies: + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@envelop/types@5.2.1': + dependencies: + '@whatwg-node/promise-helpers': 1.3.2 + tslib: 2.8.1 + + '@esbuild/aix-ppc64@0.27.3': + optional: true + + '@esbuild/android-arm64@0.27.3': + optional: true + + '@esbuild/android-arm@0.27.3': + optional: true + + '@esbuild/android-x64@0.27.3': + optional: true + + '@esbuild/darwin-arm64@0.27.3': + optional: true + + '@esbuild/darwin-x64@0.27.3': + optional: true + + '@esbuild/freebsd-arm64@0.27.3': + optional: true + + '@esbuild/freebsd-x64@0.27.3': + optional: true + + '@esbuild/linux-arm64@0.27.3': + optional: true + + '@esbuild/linux-arm@0.27.3': + optional: true + + '@esbuild/linux-ia32@0.27.3': + optional: true + + '@esbuild/linux-loong64@0.27.3': + optional: true + + '@esbuild/linux-mips64el@0.27.3': + optional: true + + '@esbuild/linux-ppc64@0.27.3': + optional: true + + '@esbuild/linux-riscv64@0.27.3': + optional: true + + '@esbuild/linux-s390x@0.27.3': + optional: true + + '@esbuild/linux-x64@0.27.3': + optional: true + + '@esbuild/netbsd-arm64@0.27.3': + optional: true + + '@esbuild/netbsd-x64@0.27.3': + optional: true + + '@esbuild/openbsd-arm64@0.27.3': + optional: true + + '@esbuild/openbsd-x64@0.27.3': + optional: true + + '@esbuild/openharmony-arm64@0.27.3': + optional: true - '@envelop/types@5.2.1': - dependencies: - '@whatwg-node/promise-helpers': 1.3.2 - tslib: 2.8.1 + '@esbuild/sunos-x64@0.27.3': + optional: true + + '@esbuild/win32-arm64@0.27.3': + optional: true + + '@esbuild/win32-ia32@0.27.3': + optional: true + + '@esbuild/win32-x64@0.27.3': + optional: true '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0(jiti@2.6.1))': dependencies: @@ -4847,6 +5967,8 @@ snapshots: '@eslint/core': 0.16.0 levn: 0.4.1 + '@exodus/bytes@1.14.1': {} + '@fastify/busboy@3.2.0': {} '@floating-ui/core@1.7.3': @@ -5621,6 +6743,83 @@ snapshots: '@repeaterjs/repeater@3.0.6': {} + '@rolldown/pluginutils@1.0.0-rc.3': {} + + '@rollup/rollup-android-arm-eabi@4.59.0': + optional: true + + '@rollup/rollup-android-arm64@4.59.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.59.0': + optional: true + + '@rollup/rollup-darwin-x64@4.59.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.59.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.59.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.59.0': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.59.0': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.59.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.59.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.59.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.59.0': + optional: true + + '@rollup/rollup-openbsd-x64@4.59.0': + optional: true + + '@rollup/rollup-openharmony-arm64@4.59.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.59.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.59.0': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.59.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.59.0': + optional: true + '@scarf/scarf@1.4.0': {} '@segment/analytics-core@1.8.2': @@ -5766,6 +6965,68 @@ snapshots: '@tanstack/virtual-core@3.13.13': {} + '@testing-library/dom@10.4.1': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/runtime': 7.28.4 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + picocolors: 1.1.1 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.9.1': + dependencies: + '@adobe/css-tools': 4.4.4 + aria-query: 5.3.2 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + picocolors: 1.1.1 + redent: 3.0.0 + + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.3)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': + dependencies: + '@babel/runtime': 7.28.4 + '@testing-library/dom': 10.4.1 + react: 19.2.1 + react-dom: 19.2.1(react@19.2.1) + optionalDependencies: + '@types/react': 19.2.3 + '@types/react-dom': 19.2.3(@types/react@19.2.3) + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': + dependencies: + '@testing-library/dom': 10.4.1 + + '@types/aria-query@5.0.4': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.28.0 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.29.0 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + + '@types/babel__traverse@7.28.0': + dependencies: + '@babel/types': 7.29.0 + + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + '@types/d3-array@3.2.2': {} '@types/d3-axis@3.0.6': @@ -5887,6 +7148,8 @@ snapshots: dependencies: '@types/ms': 2.1.0 + '@types/deep-eql@4.0.2': {} + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.8 @@ -6053,6 +7316,57 @@ snapshots: '@vercel/oidc@3.0.5': {} + '@vitejs/plugin-react@5.1.4(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2))': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-rc.3 + '@types/babel__core': 7.20.5 + react-refresh: 0.18.0 + vite: 7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2) + transitivePeerDependencies: + - supports-color + + '@vitest/expect@4.0.18': + dependencies: + '@standard-schema/spec': 1.0.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.0.18 + '@vitest/utils': 4.0.18 + chai: 6.2.2 + tinyrainbow: 3.0.3 + + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2))': + dependencies: + '@vitest/spy': 4.0.18 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2) + + '@vitest/pretty-format@4.0.18': + dependencies: + tinyrainbow: 3.0.3 + + '@vitest/runner@4.0.18': + dependencies: + '@vitest/utils': 4.0.18 + pathe: 2.0.3 + + '@vitest/snapshot@4.0.18': + dependencies: + '@vitest/pretty-format': 4.0.18 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.0.18': {} + + '@vitest/utils@4.0.18': + dependencies: + '@vitest/pretty-format': 4.0.18 + tinyrainbow: 3.0.3 + '@whatwg-node/disposablestack@0.0.6': dependencies: '@whatwg-node/promise-helpers': 1.3.2 @@ -6106,6 +7420,8 @@ snapshots: acorn@8.15.0: {} + agent-base@7.1.4: {} + ai@5.0.112(zod@3.25.76): dependencies: '@ai-sdk/gateway': 2.0.21(zod@3.25.76) @@ -6132,6 +7448,8 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + ansi-regex@5.0.1: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -6144,6 +7462,12 @@ snapshots: dependencies: tslib: 2.8.1 + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + aria-query@5.3.2: {} + array-buffer-byte-length@1.0.2: dependencies: call-bound: 1.0.4 @@ -6203,6 +7527,8 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 + assertion-error@2.0.1: {} + async-function@1.0.0: {} atomic-sleep@1.0.0: {} @@ -6219,6 +7545,10 @@ snapshots: baseline-browser-mapping@2.10.0: {} + bidi-js@1.0.3: + dependencies: + require-from-string: 2.0.2 + body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -6263,6 +7593,14 @@ snapshots: dependencies: fill-range: 7.1.1 + browserslist@4.28.1: + dependencies: + baseline-browser-mapping: 2.10.0 + caniuse-lite: 1.0.30001775 + electron-to-chromium: 1.5.302 + node-releases: 2.0.27 + update-browserslist-db: 1.2.3(browserslist@4.28.1) + buffer@6.0.3: dependencies: base64-js: 1.5.1 @@ -6295,6 +7633,8 @@ snapshots: ccount@2.0.1: {} + chai@6.2.2: {} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -6380,6 +7720,8 @@ snapshots: content-type@1.0.5: {} + convert-source-map@2.0.0: {} + cookie-signature@1.0.6: {} cookie-signature@1.2.2: {} @@ -6409,6 +7751,20 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + css-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + + css.escape@1.5.1: {} + + cssstyle@6.2.0: + dependencies: + '@asamuzakjp/css-color': 5.0.1 + '@csstools/css-syntax-patches-for-csstree': 1.0.29 + css-tree: 3.1.0 + lru-cache: 11.2.6 + csstype@3.2.3: {} cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1): @@ -6595,6 +7951,13 @@ snapshots: d3: 7.9.0 lodash-es: 4.17.21 + data-urls@7.0.0: + dependencies: + whatwg-mimetype: 5.0.0 + whatwg-url: 16.0.1 + transitivePeerDependencies: + - '@noble/hashes' + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -6627,6 +7990,8 @@ snapshots: decamelize@1.2.0: {} + decimal.js@10.6.0: {} + decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 @@ -6669,6 +8034,10 @@ snapshots: dependencies: esutils: 2.0.3 + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.6.3: {} + dompurify@3.2.7: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -6689,6 +8058,8 @@ snapshots: ee-first@1.1.1: {} + electron-to-chromium@1.5.302: {} + encodeurl@1.0.2: {} encodeurl@2.0.0: {} @@ -6786,6 +8157,8 @@ snapshots: iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 + es-module-lexer@1.7.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -6807,6 +8180,37 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 + esbuild@0.27.3: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.3 + '@esbuild/android-arm': 0.27.3 + '@esbuild/android-arm64': 0.27.3 + '@esbuild/android-x64': 0.27.3 + '@esbuild/darwin-arm64': 0.27.3 + '@esbuild/darwin-x64': 0.27.3 + '@esbuild/freebsd-arm64': 0.27.3 + '@esbuild/freebsd-x64': 0.27.3 + '@esbuild/linux-arm': 0.27.3 + '@esbuild/linux-arm64': 0.27.3 + '@esbuild/linux-ia32': 0.27.3 + '@esbuild/linux-loong64': 0.27.3 + '@esbuild/linux-mips64el': 0.27.3 + '@esbuild/linux-ppc64': 0.27.3 + '@esbuild/linux-riscv64': 0.27.3 + '@esbuild/linux-s390x': 0.27.3 + '@esbuild/linux-x64': 0.27.3 + '@esbuild/netbsd-arm64': 0.27.3 + '@esbuild/netbsd-x64': 0.27.3 + '@esbuild/openbsd-arm64': 0.27.3 + '@esbuild/openbsd-x64': 0.27.3 + '@esbuild/openharmony-arm64': 0.27.3 + '@esbuild/sunos-x64': 0.27.3 + '@esbuild/win32-arm64': 0.27.3 + '@esbuild/win32-ia32': 0.27.3 + '@esbuild/win32-x64': 0.27.3 + + escalade@3.2.0: {} + escape-html@1.0.3: {} escape-string-regexp@4.0.0: {} @@ -6919,6 +8323,10 @@ snapshots: estree-util-is-identifier-name@3.0.0: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + esutils@2.0.3: {} etag@1.8.1: {} @@ -6935,6 +8343,8 @@ snapshots: dependencies: eventsource-parser: 3.0.6 + expect-type@1.3.0: {} + express-rate-limit@8.2.1(express@5.2.1): dependencies: express: 5.2.1 @@ -7051,6 +8461,10 @@ snapshots: dependencies: format: 0.2.2 + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -7106,6 +8520,9 @@ snapshots: fresh@2.0.0: {} + fsevents@2.3.3: + optional: true + function-bind@1.1.2: {} function.prototype.name@1.1.8: @@ -7121,6 +8538,8 @@ snapshots: generator-function@2.0.1: {} + gensync@1.0.0-beta.2: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7364,6 +8783,12 @@ snapshots: hono@4.11.10: {} + html-encoding-sniffer@6.0.0: + dependencies: + '@exodus/bytes': 1.14.1 + transitivePeerDependencies: + - '@noble/hashes' + html-url-attributes@3.0.1: {} html-void-elements@3.0.0: {} @@ -7376,6 +8801,20 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -7403,6 +8842,8 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + inherits@2.0.4: {} inline-style-parser@0.1.1: {} @@ -7518,6 +8959,8 @@ snapshots: is-plain-obj@4.1.0: {} + is-potential-custom-element-name@1.0.1: {} + is-promise@4.0.0: {} is-regex@1.2.1: @@ -7590,6 +9033,35 @@ snapshots: dependencies: argparse: 2.0.1 + jsdom@28.1.0: + dependencies: + '@acemir/cssom': 0.9.31 + '@asamuzakjp/dom-selector': 6.8.1 + '@bramus/specificity': 2.4.2 + '@exodus/bytes': 1.14.1 + cssstyle: 6.2.0 + data-urls: 7.0.0 + decimal.js: 10.6.0 + html-encoding-sniffer: 6.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + parse5: 8.0.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 6.0.0 + undici: 7.22.0 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 8.0.1 + whatwg-mimetype: 5.0.0 + whatwg-url: 16.0.1 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - '@noble/hashes' + - supports-color + + jsesc@3.1.0: {} + json-buffer@3.0.1: {} json-schema-traverse@0.4.1: {} @@ -7602,6 +9074,8 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + json5@2.2.3: {} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.9 @@ -7760,6 +9234,12 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.2.6: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + lucide-react@0.525.0(react@19.2.1): dependencies: react: 19.2.1 @@ -7774,6 +9254,8 @@ snapshots: lucide@0.525.0: {} + lz-string@1.5.0: {} + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -8000,6 +9482,8 @@ snapshots: dependencies: '@types/mdast': 4.0.4 + mdn-data@2.12.2: {} + mdurl@2.0.0: {} media-typer@0.3.0: {} @@ -8392,6 +9876,8 @@ snapshots: mime@1.6.0: {} + min-indent@1.0.1: {} + minimatch@3.1.5: dependencies: brace-expansion: 1.1.12 @@ -8430,7 +9916,7 @@ snapshots: negotiator@1.0.0: {} - next@16.1.5(@opentelemetry/api@1.9.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): + next@16.1.5(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1): dependencies: '@next/env': 16.1.5 '@swc/helpers': 0.5.15 @@ -8439,7 +9925,7 @@ snapshots: postcss: 8.4.31 react: 19.2.1 react-dom: 19.2.1(react@19.2.1) - styled-jsx: 5.1.6(react@19.2.1) + styled-jsx: 5.1.6(@babel/core@7.29.0)(react@19.2.1) optionalDependencies: '@next/swc-darwin-arm64': 16.1.5 '@next/swc-darwin-x64': 16.1.5 @@ -8459,6 +9945,8 @@ snapshots: dependencies: whatwg-url: 5.0.0 + node-releases@2.0.27: {} + object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -8495,6 +9983,8 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + obug@2.1.1: {} + on-exit-leak-free@2.1.2: {} on-finished@2.4.1: @@ -8585,6 +10075,10 @@ snapshots: dependencies: entities: 6.0.1 + parse5@8.0.0: + dependencies: + entities: 6.0.1 + parseurl@1.3.3: {} partial-json@0.1.7: {} @@ -8607,6 +10101,8 @@ snapshots: picomatch@2.3.1: {} + picomatch@4.0.3: {} + pino-abstract-transport@2.0.0: dependencies: split2: 4.2.0 @@ -8683,6 +10179,12 @@ snapshots: prettier@3.7.4: {} + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + prismjs@1.27.0: {} prismjs@1.30.0: {} @@ -8756,6 +10258,8 @@ snapshots: react-is@16.13.1: {} + react-is@17.0.2: {} + react-is@18.3.1: {} react-markdown@10.1.0(@types/react@19.2.3)(react@19.2.1): @@ -8798,6 +10302,8 @@ snapshots: transitivePeerDependencies: - supports-color + react-refresh@0.18.0: {} + react-remove-scroll-bar@2.3.8(@types/react@19.2.3)(react@19.2.1): dependencies: react: 19.2.1 @@ -8852,6 +10358,11 @@ snapshots: real-require@0.2.0: {} + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + reflect-metadata@0.2.2: {} reflect.getprototypeof@1.0.10: @@ -8982,6 +10493,37 @@ snapshots: robust-predicates@3.0.2: {} + rollup@4.59.0: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.59.0 + '@rollup/rollup-android-arm64': 4.59.0 + '@rollup/rollup-darwin-arm64': 4.59.0 + '@rollup/rollup-darwin-x64': 4.59.0 + '@rollup/rollup-freebsd-arm64': 4.59.0 + '@rollup/rollup-freebsd-x64': 4.59.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 + '@rollup/rollup-linux-arm-musleabihf': 4.59.0 + '@rollup/rollup-linux-arm64-gnu': 4.59.0 + '@rollup/rollup-linux-arm64-musl': 4.59.0 + '@rollup/rollup-linux-loong64-gnu': 4.59.0 + '@rollup/rollup-linux-loong64-musl': 4.59.0 + '@rollup/rollup-linux-ppc64-gnu': 4.59.0 + '@rollup/rollup-linux-ppc64-musl': 4.59.0 + '@rollup/rollup-linux-riscv64-gnu': 4.59.0 + '@rollup/rollup-linux-riscv64-musl': 4.59.0 + '@rollup/rollup-linux-s390x-gnu': 4.59.0 + '@rollup/rollup-linux-x64-gnu': 4.59.0 + '@rollup/rollup-linux-x64-musl': 4.59.0 + '@rollup/rollup-openbsd-x64': 4.59.0 + '@rollup/rollup-openharmony-arm64': 4.59.0 + '@rollup/rollup-win32-arm64-msvc': 4.59.0 + '@rollup/rollup-win32-ia32-msvc': 4.59.0 + '@rollup/rollup-win32-x64-gnu': 4.59.0 + '@rollup/rollup-win32-x64-msvc': 4.59.0 + fsevents: 2.3.3 + roughjs@4.6.6: dependencies: hachure-fill: 0.5.2 @@ -9038,6 +10580,10 @@ snapshots: safer-buffer@2.1.2: {} + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + scheduler@0.27.0: {} secure-json-parse@2.7.0: {} @@ -9201,6 +10747,8 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} + signal-polyfill@0.2.2: {} signal-utils@0.21.1(signal-polyfill@0.2.2): @@ -9221,10 +10769,14 @@ snapshots: split2@4.2.0: {} + stackback@0.0.2: {} + state-local@1.0.7: {} statuses@2.0.1: {} + std-env@3.10.0: {} + stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 @@ -9303,6 +10855,10 @@ snapshots: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + strip-json-comments@3.1.1: {} style-to-js@1.1.18: @@ -9317,10 +10873,12 @@ snapshots: dependencies: inline-style-parser: 0.2.4 - styled-jsx@5.1.6(react@19.2.1): + styled-jsx@5.1.6(@babel/core@7.29.0)(react@19.2.1): dependencies: client-only: 0.0.1 react: 19.2.1 + optionalDependencies: + '@babel/core': 7.29.0 stylis@4.3.6: {} @@ -9330,6 +10888,8 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + symbol-tree@3.2.4: {} + tabbable@6.3.0: {} tailwind-merge@3.4.0: {} @@ -9342,16 +10902,41 @@ snapshots: dependencies: real-require: 0.2.0 + tinybench@2.9.0: {} + tinyexec@1.0.1: {} + tinyexec@1.0.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tinyrainbow@3.0.3: {} + + tldts-core@7.0.24: {} + + tldts@7.0.24: + dependencies: + tldts-core: 7.0.24 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 toidentifier@1.0.1: {} + tough-cookie@6.0.0: + dependencies: + tldts: 7.0.24 + tr46@0.0.3: {} + tr46@6.0.0: + dependencies: + punycode: 2.3.1 + trim-lines@3.0.1: {} trough@2.2.0: {} @@ -9482,6 +11067,8 @@ snapshots: undici-types@6.21.0: {} + undici@7.22.0: {} + unified@10.1.2: dependencies: '@types/unist': 2.0.11 @@ -9564,6 +11151,12 @@ snapshots: untruncate-json@0.0.1: {} + update-browserslist-db@1.2.3(browserslist@4.28.1): + dependencies: + browserslist: 4.28.1 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -9647,6 +11240,59 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 + vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2): + dependencies: + esbuild: 0.27.3 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.59.0 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 20.19.24 + fsevents: 2.3.3 + jiti: 2.6.1 + lightningcss: 1.30.2 + + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@20.19.24)(jiti@2.6.1)(jsdom@28.1.0)(lightningcss@1.30.2): + dependencies: + '@vitest/expect': 4.0.18 + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2)) + '@vitest/pretty-format': 4.0.18 + '@vitest/runner': 4.0.18 + '@vitest/snapshot': 4.0.18 + '@vitest/spy': 4.0.18 + '@vitest/utils': 4.0.18 + es-module-lexer: 1.7.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.3.1(@types/node@20.19.24)(jiti@2.6.1)(lightningcss@1.30.2) + why-is-node-running: 2.3.0 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + '@types/node': 20.19.24 + jsdom: 28.1.0 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml + vscode-jsonrpc@8.2.0: {} vscode-languageserver-protocol@3.17.5: @@ -9664,10 +11310,26 @@ snapshots: vscode-uri@3.0.8: {} + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + web-namespaces@2.0.1: {} webidl-conversions@3.0.1: {} + webidl-conversions@8.0.1: {} + + whatwg-mimetype@5.0.0: {} + + whatwg-url@16.0.1: + dependencies: + '@exodus/bytes': 1.14.1 + tr46: 6.0.0 + webidl-conversions: 8.0.1 + transitivePeerDependencies: + - '@noble/hashes' + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -9718,14 +11380,25 @@ snapshots: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + wonka@6.3.5: {} word-wrap@1.2.5: {} wrappy@1.0.2: {} + xml-name-validator@5.0.0: {} + + xmlchars@2.2.0: {} + xtend@4.0.2: {} + yallist@3.1.1: {} + yocto-queue@0.1.0: {} zod-to-json-schema@3.25.0(zod@3.25.76): diff --git a/tools/composer/src/components/editor/data-panel.test.tsx b/tools/composer/src/components/editor/data-panel.test.tsx new file mode 100644 index 000000000..f1391563a --- /dev/null +++ b/tools/composer/src/components/editor/data-panel.test.tsx @@ -0,0 +1,87 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { render, screen, fireEvent } from '@testing-library/react'; +import { DataPanel } from './data-panel'; +import React from 'react'; + +// Mock Monaco Editor +vi.mock('@monaco-editor/react', () => ({ + default: ({ value, onChange }: any) => ( +