From b4eff107d11acf1f5bec485928038832140939d5 Mon Sep 17 00:00:00 2001 From: Bingnan Jiang Date: Sun, 21 Jun 2026 22:38:21 -0700 Subject: [PATCH 1/6] design: establish model setup dialog v1 branch and structure --- design/model-setup-dialog/v1/README.md | 23 + desktop/renderer/src/App.vue | 69 ++- .../src/assets/modelprovider/Qwen.png | Bin 3302 -> 8211 bytes .../src/assets/modelprovider/minimax.png | Bin 2527 -> 11164 bytes .../src/components/GatewayLoading.vue | 6 +- .../src/components/ModelSetupDialog.vue | 554 ++++++++++++------ desktop/renderer/src/styles/global.css | 4 +- desktop/renderer/src/views/ChatView.vue | 134 ++--- 8 files changed, 516 insertions(+), 274 deletions(-) create mode 100644 design/model-setup-dialog/v1/README.md diff --git a/design/model-setup-dialog/v1/README.md b/design/model-setup-dialog/v1/README.md new file mode 100644 index 0000000..0de897d --- /dev/null +++ b/design/model-setup-dialog/v1/README.md @@ -0,0 +1,23 @@ +# Model Setup Dialog Design v1 + +## Scope +- Improve selected-state clarity for provider cards. +- Unify selected ring and check colors with primary action color. +- Replace hardcoded red error/close-hover colors with MAI danger tokens. + +## Decisions +- Selected card keeps a single visible selected border layer. +- Selected fill matches hover fill to avoid a blue tint bias. +- Error text and close-hover danger visuals use semantic tokens: + - --smtc-status-danger-foreground + - --smtc-status-danger-background + +## Files Updated +- desktop/renderer/src/components/ModelSetupDialog.vue +- desktop/renderer/src/components/GatewayLoading.vue +- desktop/renderer/src/App.vue +- desktop/renderer/src/styles/global.css +- desktop/renderer/src/views/ChatView.vue + +## Notes +- This version is intended for design iteration and review on branch design/model-setup-dialog/v1. diff --git a/desktop/renderer/src/App.vue b/desktop/renderer/src/App.vue index 9b4eb14..e5ec171 100644 --- a/desktop/renderer/src/App.vue +++ b/desktop/renderer/src/App.vue @@ -359,12 +359,17 @@ onMounted(async () => { } catch {} // Listen for mid-session integrity alerts (file watcher) - unsubIntegrityAlert = window.openclaw.skills.onIntegrityAlert((result) => { - if (!result.valid) { - integrityResult.value = result; - integrityDialogVisible.value = true; + // Some preview environments do not expose this API yet. + try { + if (typeof window.openclaw.skills.onIntegrityAlert === "function") { + unsubIntegrityAlert = window.openclaw.skills.onIntegrityAlert((result) => { + if (!result.valid) { + integrityResult.value = result; + integrityDialogVisible.value = true; + } + }); } - }); + } catch {} // Listen for sandbox permission requests unsubPermission = window.openclaw.sandbox.onPermissionRequest((data: PermissionRequestData) => { @@ -547,28 +552,40 @@ onUnmounted(() => { diff --git a/desktop/renderer/src/assets/modelprovider/Qwen.png b/desktop/renderer/src/assets/modelprovider/Qwen.png index 2ad8ff2c896f57ff56e067243126b6cec8b273ae..2389a6767f2f0d64cf76e4f33bdca54390f29fdb 100644 GIT binary patch literal 8211 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 diff --git a/desktop/renderer/src/assets/modelprovider/minimax.png b/desktop/renderer/src/assets/modelprovider/minimax.png index c0d114b62d627f148232ff3999fbe2e24c2c4038..9ec8d004700da933b1c7e107693140e53b6d9617 100644 GIT binary patch literal 11164 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 R|2I4fCM6~ZtP;`l`+s-shEo6l literal 2527 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 diff --git a/desktop/renderer/src/components/GatewayLoading.vue b/desktop/renderer/src/components/GatewayLoading.vue index 4f711a3..2fc13a9 100644 --- a/desktop/renderer/src/components/GatewayLoading.vue +++ b/desktop/renderer/src/components/GatewayLoading.vue @@ -403,15 +403,15 @@ watch( } .win-ctrl--close:hover { - background: #fee2e2; + background: var(--smtc-status-danger-background); } .win-ctrl--close:hover svg { - stroke: #dc2626; + stroke: var(--smtc-status-danger-foreground); } :global(html.dark) .win-ctrl--close:hover { - background: rgba(239, 68, 68, 0.15); + background: color-mix(in srgb, var(--smtc-status-danger-background) 28%, transparent); } .loading-center { diff --git a/desktop/renderer/src/components/ModelSetupDialog.vue b/desktop/renderer/src/components/ModelSetupDialog.vue index 47b6498..1b9750d 100644 --- a/desktop/renderer/src/components/ModelSetupDialog.vue +++ b/desktop/renderer/src/components/ModelSetupDialog.vue @@ -2,11 +2,23 @@
@@ -106,7 +143,6 @@ interface ModelFamilyPreset { apiFormat: ApiFormat; models: string[]; apiKeyPlaceholder: string; - apiKeyUrl?: string; logo: string; } @@ -116,18 +152,15 @@ const emit = defineEmits<{ configured: []; }>(); -const ALIYUN_OPENAI_COMPATIBLE_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"; - const modelFamilies: ModelFamilyPreset[] = [ { id: "qwen", label: "千问", providerKey: "qwen", - baseUrl: ALIYUN_OPENAI_COMPATIBLE_BASE_URL, + baseUrl: "https://dashscope.aliyuncs.com/compatible-mode", apiFormat: "openai-chat", - models: ["Qwen3.6-Plus", "Qwen3.5-Plus"], + models: ["Qwen3.6-Plus"], apiKeyPlaceholder: "sk-...", - apiKeyUrl: "https://platform.qianwenai.com/home/api-keys", logo: qwenLogo, }, { @@ -142,10 +175,9 @@ const modelFamilies: ModelFamilyPreset[] = [ }, ]; -const step = ref<"select" | "key">("select"); +const isKeyStep = ref(false); const selectedFamilyId = ref("qwen"); const selectedModelName = ref(modelFamilies[0].models[0]); -const baseUrl = ref(modelFamilies[0].baseUrl); const apiKey = ref(""); const errorMsg = ref(""); const saving = ref(false); @@ -155,21 +187,15 @@ const selectedFamily = computed( ); watch(selectedFamilyId, () => { - applyFamilyDefaults(); -}); - -watch(selectedModelName, (modelName) => { - if (isAliyunModel(modelName)) { - baseUrl.value = ALIYUN_OPENAI_COMPATIBLE_BASE_URL; - } + selectedModelName.value = selectedFamily.value.models[0]; + errorMsg.value = ""; }); watch( () => props.modelValue, (visible) => { if (!visible) return; - step.value = "select"; - applyFamilyDefaults(); + isKeyStep.value = false; errorMsg.value = ""; }, ); @@ -178,62 +204,43 @@ function resolveApiValue(apiFormat: ApiFormat): string { return apiFormat === "anthropic" ? "anthropic-messages" : "openai-completions"; } -function isAliyunModel(modelName: string): boolean { - return modelName.trim().toLowerCase().startsWith("qwen"); +function close() { + emit("update:modelValue", false); } -function applyFamilyDefaults() { +function goToKeyForm() { selectedModelName.value = selectedFamily.value.models[0]; - baseUrl.value = selectedFamily.value.baseUrl; + isKeyStep.value = true; errorMsg.value = ""; } -function close() { - emit("update:modelValue", false); -} - function handleGetApiKey() { - openApiKeyPage(selectedFamily.value); - goToKeyForm(); -} - -function handleFamilyClick(family: ModelFamilyPreset) { - selectedFamilyId.value = family.id; - if (family.id === "qwen") { - openApiKeyPage(family); - goToKeyForm(); + const signupUrl = + selectedFamily.value.id === "qwen" + ? "https://bailian.console.aliyun.com/?tab=model#/api-key" + : "https://platform.minimaxi.com/user-center/basic-information/interface-key"; + try { + window.openclaw?.shell?.openExternal?.(signupUrl); + } catch { + window.open(signupUrl, "_blank", "noopener,noreferrer"); } } -function openApiKeyPage(family: ModelFamilyPreset) { - if (!family.apiKeyUrl) return; - window.openclaw.shell.openExternal(family.apiKeyUrl).catch((err) => { - console.error("Failed to open API key page:", err); - }); +function goToSelectStep() { + isKeyStep.value = false; + errorMsg.value = ""; } -function goToKeyForm() { - applyFamilyDefaults(); - step.value = "key"; - errorMsg.value = ""; +function selectModel(model: string) { + selectedModelName.value = model; } async function saveAndStart() { - const trimmedModelName = selectedModelName.value.trim(); const trimmedKey = apiKey.value.trim(); - const trimmedBaseUrl = baseUrl.value.trim(); - if (!trimmedModelName) { - errorMsg.value = t("modelSetup.enterModelName"); - return; - } if (!trimmedKey) { errorMsg.value = t("modelSetup.enterApiKey"); return; } - if (!trimmedBaseUrl) { - errorMsg.value = t("modelSetup.enterBaseUrl"); - return; - } if (selectedFamily.value.id === "minimax" && !trimmedKey.startsWith("sk-cp-")) { errorMsg.value = t("modelSetup.invalidMiniMaxKey"); return; @@ -243,11 +250,11 @@ async function saveAndStart() { errorMsg.value = ""; try { const family = selectedFamily.value; - const modelName = trimmedModelName; + const modelName = selectedModelName.value || family.models[0]; const modelRef = `${family.providerKey}/${modelName}`; const existing = (await window.openclaw.config.read()) || {}; const providerEntry: Record = { - baseUrl: trimmedBaseUrl, + baseUrl: family.baseUrl, apiKey: trimmedKey, api: resolveApiValue(family.apiFormat), models: [ @@ -290,13 +297,57 @@ async function saveAndStart() { diff --git a/desktop/renderer/src/styles/global.css b/desktop/renderer/src/styles/global.css index 3908d10..f4e0ca0 100644 --- a/desktop/renderer/src/styles/global.css +++ b/desktop/renderer/src/styles/global.css @@ -24,7 +24,7 @@ --msg-user-bg: #1e293b; --msg-user-text: #ffffff; --msg-ai-bg: transparent; - --danger: #ef4444; + --danger: var(--smtc-status-danger-foreground); --success: #10b981; --warning: #f59e0b; --sidebar-width: 280px; @@ -131,7 +131,7 @@ html.dark { --border-light: #3f3f46; --msg-user-bg: #334155; --msg-ai-bg: transparent; - --danger: #ef4444; + --danger: var(--smtc-status-danger-foreground); --success: #22c55e; --warning: #f59e0b; --card-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); diff --git a/desktop/renderer/src/views/ChatView.vue b/desktop/renderer/src/views/ChatView.vue index b2b16c9..687d1c8 100644 --- a/desktop/renderer/src/views/ChatView.vue +++ b/desktop/renderer/src/views/ChatView.vue @@ -262,7 +262,11 @@ onMounted(() => { if (chatStore.messages.length) { nextTick(scrollToBottom); } - studioStore.initialize(); + try { + studioStore.initialize(); + } catch { + // Studio APIs may be absent in lightweight preview mode. + } }); onUnmounted(() => { @@ -447,11 +451,35 @@ function handleThreadClick(e: MouseEvent) { diff --git a/desktop/renderer/src/components/ui/UiDialog.vue b/desktop/renderer/src/components/ui/UiDialog.vue new file mode 100644 index 0000000..ee4ec8d --- /dev/null +++ b/desktop/renderer/src/components/ui/UiDialog.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/desktop/renderer/src/components/ui/UiInput.vue b/desktop/renderer/src/components/ui/UiInput.vue new file mode 100644 index 0000000..760f78d --- /dev/null +++ b/desktop/renderer/src/components/ui/UiInput.vue @@ -0,0 +1,222 @@ + + + + + diff --git a/desktop/renderer/src/components/ui/index.ts b/desktop/renderer/src/components/ui/index.ts new file mode 100644 index 0000000..e5c1ae1 --- /dev/null +++ b/desktop/renderer/src/components/ui/index.ts @@ -0,0 +1,3 @@ +export { default as UiButton } from "./UiButton.vue"; +export { default as UiDialog } from "./UiDialog.vue"; +export { default as UiInput } from "./UiInput.vue"; diff --git a/desktop/renderer/src/i18n/en-US.ts b/desktop/renderer/src/i18n/en-US.ts index d50ac0f..56e870e 100644 --- a/desktop/renderer/src/i18n/en-US.ts +++ b/desktop/renderer/src/i18n/en-US.ts @@ -463,6 +463,7 @@ export default { // ── Common ── "common.close": "Close", + "common.back": "Back", "common.platformWindows": "Windows", "common.platformMacOS": "macOS", "common.platformLinux": "Linux", diff --git a/desktop/renderer/src/i18n/zh-CN.ts b/desktop/renderer/src/i18n/zh-CN.ts index 2cda414..59854ad 100644 --- a/desktop/renderer/src/i18n/zh-CN.ts +++ b/desktop/renderer/src/i18n/zh-CN.ts @@ -444,6 +444,7 @@ export default { // ── Common ── "common.close": "关闭", + "common.back": "返回", "common.platformWindows": "Windows", "common.platformMacOS": "macOS", "common.platformLinux": "Linux", diff --git a/desktop/renderer/src/styles/global.css b/desktop/renderer/src/styles/global.css index f4e0ca0..b510530 100644 --- a/desktop/renderer/src/styles/global.css +++ b/desktop/renderer/src/styles/global.css @@ -27,6 +27,16 @@ --danger: var(--smtc-status-danger-foreground); --success: #10b981; --warning: #f59e0b; + /* ── Semantic surface/action tokens (design-system baseline) ── */ + --surface-page: var(--bg-primary); + --surface-panel: var(--bg-secondary); + --surface-overlay: rgba(255, 255, 255, 0.72); + --surface-hover: var(--bg-tertiary); + --border-default: var(--border); + --action-primary: #18181b; + --action-primary-foreground: #ffffff; + --status-danger: var(--danger); + --focus-ring: color-mix(in srgb, var(--action-primary) 35%, transparent); --sidebar-width: 280px; --card-radius: 16px; --radius-xs: 4px; @@ -134,6 +144,15 @@ html.dark { --danger: var(--smtc-status-danger-foreground); --success: #22c55e; --warning: #f59e0b; + --surface-page: var(--bg-primary); + --surface-panel: var(--bg-secondary); + --surface-overlay: rgba(0, 0, 0, 0.52); + --surface-hover: var(--bg-tertiary); + --border-default: var(--border); + --action-primary: #f5f5f5; + --action-primary-foreground: #18181b; + --status-danger: var(--danger); + --focus-ring: color-mix(in srgb, var(--action-primary) 32%, transparent); --card-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); --card-shadow-hover: 0 18px 44px rgba(0, 0, 0, 0.4), 0 4px 12px rgba(0, 0, 0, 0.25); --bg-hover: #3f3f46; @@ -185,6 +204,15 @@ html.light { --border-row: rgba(60, 60, 67, 0.05); --border-light: #f0f1f4; --msg-ai-bg: transparent; + --surface-page: var(--bg-primary); + --surface-panel: var(--bg-secondary); + --surface-overlay: rgba(255, 255, 255, 0.72); + --surface-hover: var(--bg-tertiary); + --border-default: var(--border); + --action-primary: #18181b; + --action-primary-foreground: #ffffff; + --status-danger: var(--danger); + --focus-ring: color-mix(in srgb, var(--action-primary) 35%, transparent); } /* ── Window controls overlay spacing ── */ From c655b17a9c05f3bba01e158ffe31f41a7c7f07f1 Mon Sep 17 00:00:00 2001 From: Bingnan Jiang Date: Wed, 24 Jun 2026 23:58:17 -0700 Subject: [PATCH 4/6] docs(renderer): add dialog governance, checklist, and collaboration map --- .../checklists/dialog-regression-checklist.md | 42 ++ docs/design-system-collaboration-map.html | 359 ++++++++++++++++++ docs/frontend-dialog-governance.md | 86 +++++ 3 files changed, 487 insertions(+) create mode 100644 docs/checklists/dialog-regression-checklist.md create mode 100644 docs/design-system-collaboration-map.html create mode 100644 docs/frontend-dialog-governance.md diff --git a/docs/checklists/dialog-regression-checklist.md b/docs/checklists/dialog-regression-checklist.md new file mode 100644 index 0000000..2d24bb5 --- /dev/null +++ b/docs/checklists/dialog-regression-checklist.md @@ -0,0 +1,42 @@ +# Dialog Regression Checklist + +Use this checklist for any PR that changes dialog or drawer UX. + +## A. Core Interaction + +- [ ] Open and close behavior matches product expectation. +- [ ] Overlay click behavior is intentional (`closeOnOverlay` decision documented). +- [ ] `Esc` behavior is intentional (enabled or intentionally blocked). +- [ ] Primary and secondary actions are in correct order and visual hierarchy. +- [ ] Loading/disabled states prevent duplicate submits. + +## B. Keyboard and Focus + +- [ ] All controls are reachable by keyboard. +- [ ] Focus ring is visible on all actionable controls. +- [ ] Enter key submits only where expected. +- [ ] Close control has accessible label. + +## C. Visual and Token Compliance + +- [ ] No newly introduced hard-coded colors for dialog UI. +- [ ] Border/surface/text/focus states use semantic variables. +- [ ] Spacing uses existing spacing rhythm. +- [ ] Typography and button sizes remain consistent with local primitives. + +## D. Theme and Responsiveness + +- [ ] Light theme verified. +- [ ] Dark theme verified. +- [ ] Narrow width behavior verified (content wrapping, footer button layout). + +## E. Business Safety + +- [ ] Validation errors are visible and understandable. +- [ ] Async failure path still returns to usable state. +- [ ] Existing behavior for high-risk flows (permission/integrity) remains unchanged unless intentionally modified. + +## F. Primitive Source + +- [ ] This page uses one primary primitive source for dialog shell/buttons/inputs. +- [ ] If MAI primitives are introduced, adoption gate rationale is documented in PR notes. diff --git a/docs/design-system-collaboration-map.html b/docs/design-system-collaboration-map.html new file mode 100644 index 0000000..f76bbc4 --- /dev/null +++ b/docs/design-system-collaboration-map.html @@ -0,0 +1,359 @@ + + + + + + ShadCN x MAI x Universal Mapping + + + +
+
+

ShadCN x MAI x Universal 协作映射图

+

+ 这张图回答一个核心问题:ShadCN 定义三层后,Universal 和 MAI 分别定义什么,以及三者如何协作。 + 你可以把它理解为:ShadCN 是骨架,Universal 是设计规则,MAI UI 是可选现成组件实现。 +

+
+ ShadCN: 分层方法 + Universal: 设计规则与 token + MAI UI: 组件实现加速器 +
+
+ +

1) ShadCN 三层(方法层)

+
+
+

Token 层

+

定义语义颜色、排版、间距、阴影、状态,回答“设计语言是什么”。

+
+
+

Primitive 层

+

定义 Button/Input/Dialog 等基础组件,回答“交互和样式如何一致落地”。

+
+
+

业务层

+

定义页面流程和业务状态,回答“具体功能逻辑是什么”。

+
+
+ +

2) 三者映射关系

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
层级ShadCN 定义Universal 提供MAI UI 提供
Token 层层次和命名方法强覆盖: 语义 token、light/dark、设计语言约束依赖/消费 token(不是主规则源)
Primitive 层组件分层和复用策略中覆盖: 组件使用原则与风格边界强覆盖: 现成 web components、属性、slot、状态行为
业务层业务与 UI 解耦弱覆盖: 仅给原则弱覆盖: 组件不处理业务流
+
+ +

3) 协作流程(推荐)

+
+
+
+ Step A: Universal + 先定 token 与设计规则(颜色、间距、状态、可访问性门槛)。 +
+
+
+ Step B: ShadCN 方法 + 按 Token/Primitive/业务三层组织代码,防止逻辑样式耦合。 +
+
+
+ Step C: MAI UI(可选) + 标准场景直接复用 MAI 组件;高定制场景走自研 Primitive。 +
+
+
+ +

4) 两种落地模式

+
+
+

模式 A: Universal + 自研 Primitive(主推)

+
    +
  • 适合复杂弹窗、定制交互(如权限审批、多步模型配置)。
  • +
  • 控制力强,回归定位清晰。
  • +
  • 成本: 需要维护你自己的组件层。
  • +
+
+
+

模式 B: Universal + MAI UI(加速)

+
    +
  • 适合标准表单/设置页/普通对话框。
  • +
  • 开发速度快,一致性上手快。
  • +
  • 风险: 不要强制套用到高定制场景。
  • +
+
+
+ + +
+ + diff --git a/docs/frontend-dialog-governance.md b/docs/frontend-dialog-governance.md new file mode 100644 index 0000000..367303b --- /dev/null +++ b/docs/frontend-dialog-governance.md @@ -0,0 +1,86 @@ +# Frontend Dialog Governance + +## Purpose +This document defines how dialog-like surfaces are implemented and evolved in the renderer. +It enforces one Primitive source of truth and avoids mixed component systems. + +## 1. Primitive Source of Truth + +Decision: +- `UiButton`, `UiInput`, `UiDialog` are the primary Primitive source for modal dialogs. +- Dialog pages must not mix MAI UI primitives and local primitives as co-equal sources. + +Rules: +- Use local primitives by default for dialog shell, primary/secondary actions, and text input controls. +- Keep `MAI UI` as an optional accelerator only when the scenario is standard and fit is high. + +## 2. Layer Responsibilities + +- Token layer: + - Use semantic tokens from global theme variables. + - No hard-coded hex values in dialog components. + +- Primitive layer: + - `UiDialog` defines shell behavior and visual frame. + - `UiButton` and `UiInput` define action/input states. + +- Business layer: + - Business components own flow/state only (validation, async, provider logic, permission logic). + +## 3. MAI UI Adoption Gate + +A dialog is allowed to use MAI primitives only when all conditions are true: +- MAI component coverage is >= 80% of needed behavior. +- No custom keyboard/selection behavior needs to be overridden deeply. +- Token mapping remains consistent with app semantic variables. +- There is no duplicate primitive source on the same page. + +If any condition fails, use local primitives. + +## 4. Dialog Migration Priority + +Current order: +1. `ModelSetupDialog` - already aligned with local primitive strategy. +2. `SettingsView` Add/Edit custom model dialogs - deferred as explicit TODO (no implementation change in this PR). +3. `Integrity` dialog in `App.vue` - keep stable now, migrate later. +4. `PermissionDialog` - keep business-first structure, only token/consistency improvements. +5. `UsagePanel` - treat as Drawer track; do not force-fit into dialog rules. + +## 5. Drawer Track (Separate) + +`UsagePanel` is a right drawer, not a modal dialog. +- It follows token consistency and action/input primitives where useful. +- Its shell behavior, layout, and animation are governed separately from `UiDialog`. +- Introduce `UiDrawer` only when at least two drawer use cases exist. + +## 6. Definition of Done for Dialog Changes + +Every dialog change must pass: +- Interaction consistency: + - expected close behavior (overlay/close button/escape) is explicit and tested. + - button hierarchy is clear (primary/secondary/destructive). +- Accessibility baseline: + - keyboard reachable controls. + - visible focus states. + - meaningful aria labels where needed. +- Token compliance: + - no new hard-coded visual values. + - state colors and surfaces use semantic vars. +- Theme compatibility: + - light and dark themes are both checked. + +Use `docs/checklists/dialog-regression-checklist.md` for PR validation. + +## 7. Deferred Scope Notes + +Deferred in current PR: +- `SettingsView` Add Custom Model dialog migration. +- `SettingsView` Edit Custom Model dialog migration. + +Why deferred: +- keep PR scope focused on existing primitive foundation and governance artifacts. +- avoid mixing behavior changes with ongoing branch stabilization. + +Exit criteria for enabling this TODO: +- local dev run is stable and regression checklist can be executed end-to-end. +- explicit reviewer sign-off for dialog behavior parity (open/close, form submit, keyboard paths). From 7984ca91e2a4f9ee136268ea8469321d3be2e2fe Mon Sep 17 00:00:00 2001 From: Bingnan Jiang Date: Thu, 25 Jun 2026 00:58:20 -0700 Subject: [PATCH 5/6] feat(renderer): add storybook for ui primitives and product-aligned dialog stories --- desktop/renderer/.storybook/main.ts | 19 + desktop/renderer/.storybook/preview.ts | 16 + desktop/renderer/package-lock.json | 2699 +++++++++++++++-- desktop/renderer/package.json | 8 + .../src/components/ui/UiButton.stories.ts | 69 + .../src/components/ui/UiDialog.stories.ts | 96 + .../renderer/src/components/ui/UiDialog.vue | 21 +- .../src/components/ui/UiInput.stories.ts | 88 + desktop/renderer/vite.config.ts | 3 + 9 files changed, 2809 insertions(+), 210 deletions(-) create mode 100644 desktop/renderer/.storybook/main.ts create mode 100644 desktop/renderer/.storybook/preview.ts create mode 100644 desktop/renderer/src/components/ui/UiButton.stories.ts create mode 100644 desktop/renderer/src/components/ui/UiDialog.stories.ts create mode 100644 desktop/renderer/src/components/ui/UiInput.stories.ts diff --git a/desktop/renderer/.storybook/main.ts b/desktop/renderer/.storybook/main.ts new file mode 100644 index 0000000..8675ad0 --- /dev/null +++ b/desktop/renderer/.storybook/main.ts @@ -0,0 +1,19 @@ +import type { StorybookConfig } from "@storybook/vue3-vite"; + +const config: StorybookConfig = { + stories: ["../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], + addons: [ + "@storybook/addon-essentials", + "@storybook/addon-interactions", + "@storybook/addon-a11y", + ], + framework: { + name: "@storybook/vue3-vite", + options: {}, + }, + docs: { + autodocs: "tag", + }, +}; + +export default config; diff --git a/desktop/renderer/.storybook/preview.ts b/desktop/renderer/.storybook/preview.ts new file mode 100644 index 0000000..36fdaee --- /dev/null +++ b/desktop/renderer/.storybook/preview.ts @@ -0,0 +1,16 @@ +import type { Preview } from "@storybook/vue3"; +import "../src/styles/global.css"; + +const preview: Preview = { + parameters: { + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/i, + }, + }, + layout: "centered", + }, +}; + +export default preview; diff --git a/desktop/renderer/package-lock.json b/desktop/renderer/package-lock.json index 3dd1bbb..2dd480d 100644 --- a/desktop/renderer/package-lock.json +++ b/desktop/renderer/package-lock.json @@ -22,6 +22,11 @@ "devDependencies": { "@eslint/js": "^10.0.1", "@microsoft/eslint-formatter-sarif": "^3.1.0", + "@storybook/addon-a11y": "^8.6.14", + "@storybook/addon-essentials": "^8.6.14", + "@storybook/addon-interactions": "^8.6.14", + "@storybook/test": "^8.6.14", + "@storybook/vue3-vite": "^8.6.14", "@types/markdown-it": "^14.1.0", "@types/qrcode": "^1.5.5", "@vitejs/plugin-vue": "^5.2.0", @@ -31,6 +36,7 @@ "eslint-plugin-vue": "^10.8.0", "globals": "^17.4.0", "jsdom": "^29.0.1", + "storybook": "^8.6.14", "typescript": "^5.7.0", "typescript-eslint": "^8.58.0", "vite": "^6.0.0", @@ -38,6 +44,13 @@ "vue-tsc": "^2.2.0" } }, + "node_modules/@adobe/css-tools": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.5.0.tgz", + "integrity": "sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@asamuzakjp/css-color": { "version": "5.1.11", "resolved": "https://registry.npmmirror.com/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", @@ -89,6 +102,21 @@ "dev": true, "license": "MIT" }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", @@ -99,9 +127,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -122,6 +150,16 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/types": { "version": "7.29.0", "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.0.tgz", @@ -1166,6 +1204,24 @@ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, + "node_modules/@mdx-js/react": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", + "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdx": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, "node_modules/@microsoft/eslint-formatter-sarif": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/@microsoft/eslint-formatter-sarif/-/eslint-formatter-sarif-3.1.0.tgz", @@ -1819,273 +1875,1063 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/chai": { - "version": "5.2.3", - "resolved": "https://registry.npmmirror.com/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "node_modules/@storybook/addon-a11y": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.6.14.tgz", + "integrity": "sha512-fozv6enO9IgpWq2U8qqS8MZ21Nt+MVHiRQe3CjnCpBOejTyo/ATm690PeYYRVHVG6M/15TVePb0h3ngKQbrrzQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/deep-eql": "*", - "assertion-error": "^2.0.1" + "@storybook/addon-highlight": "8.6.14", + "@storybook/global": "^5.0.0", + "@storybook/test": "8.6.14", + "axe-core": "^4.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.6.14" } }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "node_modules/@storybook/addon-actions": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.6.14.tgz", + "integrity": "sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmmirror.com/@types/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==", "license": "MIT", "dependencies": { - "@types/trusted-types": "*" + "@storybook/global": "^5.0.0", + "@types/uuid": "^9.0.1", + "dequal": "^2.0.2", + "polished": "^4.2.2", + "uuid": "^9.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.6.14" } }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmmirror.com/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.9", - "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.9.tgz", - "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "node_modules/@storybook/addon-backgrounds": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.6.14.tgz", + "integrity": "sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.17.24", - "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.24.tgz", - "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", - "license": "MIT" - }, - "node_modules/@types/lodash-es": { - "version": "4.17.12", - "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", - "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", "license": "MIT", "dependencies": { - "@types/lodash": "*" + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.6.14" } }, - "node_modules/@types/markdown-it": { - "version": "14.1.2", - "resolved": "https://registry.npmmirror.com/@types/markdown-it/-/markdown-it-14.1.2.tgz", - "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "node_modules/@storybook/addon-controls": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.6.14.tgz", + "integrity": "sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw==", "dev": true, "license": "MIT", "dependencies": { - "@types/linkify-it": "^5", - "@types/mdurl": "^2" + "@storybook/global": "^5.0.0", + "dequal": "^2.0.2", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.6.14" } }, - "node_modules/@types/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.8.0", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-25.8.0.tgz", - "integrity": "sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==", + "node_modules/@storybook/addon-docs": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.6.14.tgz", + "integrity": "sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": ">=7.24.0 <7.24.7" + "@mdx-js/react": "^3.0.0", + "@storybook/blocks": "8.6.14", + "@storybook/csf-plugin": "8.6.14", + "@storybook/react-dom-shim": "8.6.14", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.6.14" } }, - "node_modules/@types/qrcode": { - "version": "1.5.6", - "resolved": "https://registry.npmmirror.com/@types/qrcode/-/qrcode-1.5.6.tgz", - "integrity": "sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==", + "node_modules/@storybook/addon-essentials": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.6.14.tgz", + "integrity": "sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@storybook/addon-actions": "8.6.14", + "@storybook/addon-backgrounds": "8.6.14", + "@storybook/addon-controls": "8.6.14", + "@storybook/addon-docs": "8.6.14", + "@storybook/addon-highlight": "8.6.14", + "@storybook/addon-measure": "8.6.14", + "@storybook/addon-outline": "8.6.14", + "@storybook/addon-toolbars": "8.6.14", + "@storybook/addon-viewport": "8.6.14", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.6.14" } }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "license": "MIT" - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.21", - "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", - "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.59.3", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.3.tgz", - "integrity": "sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==", + "node_modules/@storybook/addon-highlight": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.6.14.tgz", + "integrity": "sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.59.3", - "@typescript-eslint/type-utils": "8.59.3", - "@typescript-eslint/utils": "8.59.3", - "@typescript-eslint/visitor-keys": "8.59.3", - "ignore": "^7.0.5", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "@storybook/global": "^5.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.59.3", - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" + "storybook": "^8.6.14" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmmirror.com/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "node_modules/@storybook/addon-interactions": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.6.14.tgz", + "integrity": "sha512-8VmElhm2XOjh22l/dO4UmXxNOolGhNiSpBcls2pqWSraVh4a670EyYBZsHpkXqfNHo2YgKyZN3C91+9zfH79qQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 4" + "dependencies": { + "@storybook/global": "^5.0.0", + "@storybook/instrumenter": "8.6.14", + "@storybook/test": "8.6.14", + "polished": "^4.2.2", + "ts-dedent": "^2.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.6.14" } }, - "node_modules/@typescript-eslint/parser": { - "version": "8.59.3", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-8.59.3.tgz", - "integrity": "sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==", + "node_modules/@storybook/addon-measure": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.6.14.tgz", + "integrity": "sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.59.3", - "@typescript-eslint/types": "8.59.3", - "@typescript-eslint/typescript-estree": "8.59.3", - "@typescript-eslint/visitor-keys": "8.59.3", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "@storybook/global": "^5.0.0", + "tiny-invariant": "^1.3.1" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" + "storybook": "^8.6.14" } }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.59.3", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/project-service/-/project-service-8.59.3.tgz", - "integrity": "sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==", + "node_modules/@storybook/addon-outline": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.6.14.tgz", + "integrity": "sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.59.3", - "@typescript-eslint/types": "^8.59.3", - "debug": "^4.4.3" + "@storybook/global": "^5.0.0", + "ts-dedent": "^2.0.0" }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, + "peerDependencies": { + "storybook": "^8.6.14" + } + }, + "node_modules/@storybook/addon-toolbars": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.6.14.tgz", + "integrity": "sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ==", + "dev": true, + "license": "MIT", "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" + "storybook": "^8.6.14" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.59.3", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-8.59.3.tgz", - "integrity": "sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==", + "node_modules/@storybook/addon-viewport": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.6.14.tgz", + "integrity": "sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.3", - "@typescript-eslint/visitor-keys": "8.59.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "memoizerific": "^1.11.3" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.6.14" } }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.59.3", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.3.tgz", - "integrity": "sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==", + "node_modules/@storybook/blocks": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.6.14.tgz", + "integrity": "sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ==", "dev": true, "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "dependencies": { + "@storybook/icons": "^1.2.12", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "storybook": "^8.6.14" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.59.3", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-8.59.3.tgz", - "integrity": "sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==", + "node_modules/@storybook/builder-vite": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.6.14.tgz", + "integrity": "sha512-ajWYhy32ksBWxwWHrjwZzyC0Ii5ZTeu5lsqA95Q/EQBB0P5qWlHWGM3AVyv82Mz/ND03ebGy123uVwgf6olnYQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.3", - "@typescript-eslint/typescript-estree": "8.59.3", - "@typescript-eslint/utils": "8.59.3", - "debug": "^4.4.3", - "ts-api-utils": "^2.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "@storybook/csf-plugin": "8.6.14", + "browser-assert": "^1.2.1", + "ts-dedent": "^2.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" + "storybook": "^8.6.14", + "vite": "^4.0.0 || ^5.0.0 || ^6.0.0" } }, - "node_modules/@typescript-eslint/types": { + "node_modules/@storybook/components": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.6.14.tgz", + "integrity": "sha512-HNR2mC5I4Z5ek8kTrVZlIY/B8gJGs5b3XdZPBPBopTIN6U/YHXiDyOjY3JlaS4fSG1fVhp/Qp1TpMn1w/9m1pw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" + } + }, + "node_modules/@storybook/core": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.6.14.tgz", + "integrity": "sha512-1P/w4FSNRqP8j3JQBOi3yGt8PVOgSRbP66Ok520T78eJBeqx9ukCfl912PQZ7SPbW3TIunBwLXMZOjZwBB/JmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/theming": "8.6.14", + "better-opn": "^3.0.2", + "browser-assert": "^1.2.1", + "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0", + "esbuild-register": "^3.5.0", + "jsdoc-type-pratt-parser": "^4.0.0", + "process": "^0.11.10", + "recast": "^0.23.5", + "semver": "^7.6.2", + "util": "^0.12.5", + "ws": "^8.2.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "prettier": "^2 || ^3" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } + } + }, + "node_modules/@storybook/csf-plugin": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.6.14.tgz", + "integrity": "sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "unplugin": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.6.14" + } + }, + "node_modules/@storybook/global": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz", + "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/icons": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.6.0.tgz", + "integrity": "sha512-hcFZIjW8yQz8O8//2WTIXylm5Xsgc+lW9ISLgUk1xGmptIJQRdlhVIXCpSyLrQaaRiyhQRaVg7l3BD9S216BHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" + } + }, + "node_modules/@storybook/instrumenter": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.6.14.tgz", + "integrity": "sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/global": "^5.0.0", + "@vitest/utils": "^2.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.6.14" + } + }, + "node_modules/@storybook/instrumenter/node_modules/@vitest/pretty-format": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", + "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@storybook/instrumenter/node_modules/@vitest/utils": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", + "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.9", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@storybook/instrumenter/node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@storybook/manager-api": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.6.14.tgz", + "integrity": "sha512-ez0Zihuy17udLbfHZQXkGqwtep0mSGgHcNzGN7iZrMP1m+VmNo+7aGCJJdvXi7+iU3yq8weXSQFWg5DqWgLS7g==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" + } + }, + "node_modules/@storybook/preview-api": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.6.14.tgz", + "integrity": "sha512-2GhcCd4dNMrnD7eooEfvbfL4I83qAqEyO0CO7JQAmIO6Rxb9BsOLLI/GD5HkvQB73ArTJ+PT50rfaO820IExOQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" + } + }, + "node_modules/@storybook/react-dom-shim": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.6.14.tgz", + "integrity": "sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "storybook": "^8.6.14" + } + }, + "node_modules/@storybook/test": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.6.14.tgz", + "integrity": "sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/global": "^5.0.0", + "@storybook/instrumenter": "8.6.14", + "@testing-library/dom": "10.4.0", + "@testing-library/jest-dom": "6.5.0", + "@testing-library/user-event": "14.5.2", + "@vitest/expect": "2.0.5", + "@vitest/spy": "2.0.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.6.14" + } + }, + "node_modules/@storybook/test/node_modules/@vitest/expect": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz", + "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.0.5", + "@vitest/utils": "2.0.5", + "chai": "^5.1.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@storybook/test/node_modules/@vitest/pretty-format": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", + "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@storybook/test/node_modules/@vitest/spy": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", + "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@storybook/test/node_modules/@vitest/utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz", + "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.0.5", + "estree-walker": "^3.0.3", + "loupe": "^3.1.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@storybook/test/node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@storybook/test/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@storybook/test/node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@storybook/theming": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.6.14.tgz", + "integrity": "sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" + } + }, + "node_modules/@storybook/vue3": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/vue3/-/vue3-8.6.14.tgz", + "integrity": "sha512-T9ORF734iBqYf2Sw/L/6qQL3FvBH9q6dHh8AFGkqTL/cluy0VxW55B6QLBvLAMS2OeMFB5dXRli5MFfw5njjQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/components": "8.6.14", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "8.6.14", + "@storybook/preview-api": "8.6.14", + "@storybook/theming": "8.6.14", + "@vue/compiler-core": "^3.0.0", + "ts-dedent": "^2.0.0", + "type-fest": "~2.19", + "vue-component-type-helpers": "latest" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.6.14", + "vue": "^3.0.0" + } + }, + "node_modules/@storybook/vue3-vite": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/vue3-vite/-/vue3-vite-8.6.14.tgz", + "integrity": "sha512-3BclEv7SzHuw8eC9mFsAuH3EjEf4eCb0FxY3SoyTagNX14WjCE5cV2AK9RpWh6e5kQZiTzF8NiYq6AJqi5ebbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/builder-vite": "8.6.14", + "@storybook/vue3": "8.6.14", + "find-package-json": "^1.2.0", + "magic-string": "^0.30.0", + "typescript": "^5.7.3", + "vue-component-meta": "^2.0.0", + "vue-docgen-api": "^4.75.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.6.14", + "vite": "^4.0.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/@storybook/vue3/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", + "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "lodash": "^4.17.21", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@testing-library/user-event": { + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", + "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmmirror.com/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/dompurify": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/@types/dompurify/-/dompurify-3.0.5.tgz", + "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==", + "license": "MIT", + "dependencies": { + "@types/trusted-types": "*" + } + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.24", + "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmmirror.com/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdx": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.14.tgz", + "integrity": "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.8.0", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-25.8.0.tgz", + "integrity": "sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": ">=7.24.0 <7.24.7" + } + }, + "node_modules/@types/qrcode": { + "version": "1.5.6", + "resolved": "https://registry.npmmirror.com/@types/qrcode/-/qrcode-1.5.6.tgz", + "integrity": "sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/react": { + "version": "19.2.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", + "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.59.3", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.3.tgz", + "integrity": "sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.59.3", + "@typescript-eslint/type-utils": "8.59.3", + "@typescript-eslint/utils": "8.59.3", + "@typescript-eslint/visitor-keys": "8.59.3", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.59.3", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.59.3", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-8.59.3.tgz", + "integrity": "sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.59.3", + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/typescript-estree": "8.59.3", + "@typescript-eslint/visitor-keys": "8.59.3", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.59.3", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/project-service/-/project-service-8.59.3.tgz", + "integrity": "sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.59.3", + "@typescript-eslint/types": "^8.59.3", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.59.3", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-8.59.3.tgz", + "integrity": "sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/visitor-keys": "8.59.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.59.3", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.3.tgz", + "integrity": "sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.59.3", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-8.59.3.tgz", + "integrity": "sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.3", + "@typescript-eslint/typescript-estree": "8.59.3", + "@typescript-eslint/utils": "8.59.3", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { "version": "8.59.3", "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-8.59.3.tgz", "integrity": "sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==", @@ -2665,6 +3511,30 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/assert-never": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", + "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", + "dev": true, + "license": "MIT" + }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/assertion-error/-/assertion-error-2.0.1.tgz", @@ -2675,12 +3545,64 @@ "node": ">=12" } }, + "node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/async-validator": { "version": "4.2.5", "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", "license": "MIT" }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.12.1.tgz", + "integrity": "sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-walk": { + "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.9.6" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/balanced-match": { "version": "4.0.4", "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-4.0.4.tgz", @@ -2691,6 +3613,19 @@ "node": "18 || 20 || >=22" } }, + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "open": "^8.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/bidi-js": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/bidi-js/-/bidi-js-1.0.3.tgz", @@ -2708,17 +3643,73 @@ "dev": true, "license": "ISC" }, - "node_modules/brace-expansion": { - "version": "5.0.6", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/browser-assert": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", + "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", + "dev": true + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^4.0.2" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { - "node": "18 || 20 || >=22" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/callsites": { @@ -2783,6 +3774,26 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/check-error": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, "node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz", @@ -2910,6 +3921,17 @@ "proto-list": "~1.2.1" } }, + "node_modules/constantinople": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.1" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -2946,6 +3968,13 @@ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", @@ -3026,6 +4055,16 @@ "dev": true, "license": "MIT" }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", @@ -3033,6 +4072,44 @@ "dev": true, "license": "MIT" }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/dijkstrajs": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz", @@ -3052,6 +4129,20 @@ "node": ">=6.0.0" } }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT" + }, "node_modules/dompurify": { "version": "3.4.3", "resolved": "https://registry.npmmirror.com/dompurify/-/dompurify-3.4.3.tgz", @@ -3061,6 +4152,21 @@ "@types/trusted-types": "^2.0.7" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -3165,6 +4271,26 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-2.1.0.tgz", @@ -3172,6 +4298,19 @@ "dev": true, "license": "MIT" }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { "version": "0.25.12", "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.12.tgz", @@ -3214,6 +4353,19 @@ "@esbuild/win32-x64": "0.25.12" } }, + "node_modules/esbuild-register": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", + "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "peerDependencies": { + "esbuild": ">=0.12 <1" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3363,6 +4515,13 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esm-resolve": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/esm-resolve/-/esm-resolve-1.0.11.tgz", + "integrity": "sha512-LxF0wfUQm3ldUDHkkV2MIbvvY0TgzIpJ420jHSV1Dm+IlplBEWiJTKWM61GtxUfvjV6iD4OtTYFGAGM2uuIUWg==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/espree": { "version": "11.2.0", "resolved": "https://registry.npmmirror.com/espree/-/espree-11.2.0.tgz", @@ -3381,6 +4540,20 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.7.0", "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.7.0.tgz", @@ -3511,6 +4684,13 @@ "node": ">=16.0.0" } }, + "node_modules/find-package-json": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/find-package-json/-/find-package-json-1.2.0.tgz", + "integrity": "sha512-+SOGcLGYDJHtyqHd87ysBhmaeQ95oWspDKnMXBrnQ9Eq4OkLNqejgoaD8xVWu6GPa0B6roa6KinCMEMcVeqONw==", + "dev": true, + "license": "MIT" + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", @@ -3549,6 +4729,22 @@ "dev": true, "license": "ISC" }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.3.1.tgz", @@ -3588,6 +4784,26 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -3597,6 +4813,45 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmmirror.com/glob/-/glob-10.4.5.tgz", @@ -3677,6 +4932,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz", @@ -3694,6 +4962,68 @@ "node": ">=8" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true, + "license": "MIT" + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", @@ -3763,6 +5093,16 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", @@ -3782,12 +5122,98 @@ "dev": true, "license": "ISC" }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-expression": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/is-expression/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "license": "ISC" + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, "node_modules/is-extglob": { "version": "2.1.1", @@ -3808,6 +5234,26 @@ "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", @@ -3838,6 +5284,61 @@ "dev": true, "license": "MIT" }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", @@ -3893,6 +5394,20 @@ "node": ">=14" } }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.1.tgz", @@ -3916,6 +5431,16 @@ "node": ">=0.1.90" } }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.8.0.tgz", + "integrity": "sha512-iZ8Bdb84lWRuGHamRXFyML07r21pcwBrLkHEuHgEY5UbCouBwv7ECknDRKzsQIXMiqpPymqtIf8TC/shYKB5rw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/jsdom": { "version": "29.1.1", "resolved": "https://registry.npmmirror.com/jsdom/-/jsdom-29.1.1.tgz", @@ -3988,6 +5513,17 @@ "dev": true, "license": "MIT" }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz", @@ -4067,6 +5603,13 @@ "dev": true, "license": "MIT" }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true, + "license": "MIT" + }, "node_modules/lru-cache": { "version": "11.3.6", "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-11.3.6.tgz", @@ -4077,6 +5620,16 @@ "node": "20 || >=22" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", @@ -4086,6 +5639,13 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/map-or-similar": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", + "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", + "dev": true, + "license": "MIT" + }, "node_modules/markdown-it": { "version": "14.1.1", "resolved": "https://registry.npmmirror.com/markdown-it/-/markdown-it-14.1.1.tgz", @@ -4115,6 +5675,16 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mdn-data": { "version": "2.27.1", "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.27.1.tgz", @@ -4134,6 +5704,26 @@ "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", "license": "MIT" }, + "node_modules/memoizerific": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", + "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", + "dev": true, + "license": "MIT", + "dependencies": { + "map-or-similar": "^1.5.0" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "10.2.5", "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-10.2.5.tgz", @@ -4234,6 +5824,16 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/obug": { "version": "2.1.1", "resolved": "https://registry.npmmirror.com/obug/-/obug-2.1.1.tgz", @@ -4255,6 +5855,24 @@ "wrappy": "1" } }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz", @@ -4396,6 +6014,13 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.11.1.tgz", @@ -4427,6 +6052,16 @@ "dev": true, "license": "MIT" }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, "node_modules/phaser": { "version": "3.90.0", "resolved": "https://registry.npmmirror.com/phaser/-/phaser-3.90.0.tgz", @@ -4486,6 +6121,29 @@ "node": ">=10.13.0" } }, + "node_modules/polished": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", + "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.17.8" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.5.14", "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.14.tgz", @@ -4514,36 +6172,230 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "license": "ISC" + }, + "node_modules/pug": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", + "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-code-gen": "^3.0.4", + "pug-filters": "^4.0.0", + "pug-lexer": "^5.0.1", + "pug-linker": "^4.0.0", + "pug-load": "^3.0.0", + "pug-parser": "^6.0.0", + "pug-runtime": "^3.0.1", + "pug-strip-comments": "^2.0.0" + } + }, + "node_modules/pug-attrs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "js-stringify": "^1.0.2", + "pug-runtime": "^3.0.0" + } + }, + "node_modules/pug-code-gen": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", + "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.2", + "pug-attrs": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", + "void-elements": "^3.1.0", + "with": "^7.0.0" + } + }, + "node_modules/pug-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pug-filters": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "constantinople": "^4.0.1", + "jstransformer": "1.0.0", + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0", + "resolve": "^1.15.1" + } + }, + "node_modules/pug-lexer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-parser": "^2.2.0", + "is-expression": "^4.0.0", + "pug-error": "^2.0.0" + } + }, + "node_modules/pug-linker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pug-error": "^2.0.0", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-load": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "pug-walk": "^2.0.0" + } + }, + "node_modules/pug-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", "dev": true, "license": "MIT", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" + "pug-error": "^2.0.0", + "token-stream": "1.0.0" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/pug-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pug-strip-comments": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8.0" + "dependencies": { + "pug-error": "^2.0.0" } }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmmirror.com/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "node_modules/pug-walk": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", "dev": true, - "license": "ISC" + "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", @@ -4602,6 +6454,67 @@ ], "license": "MIT" }, + "node_modules/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", + "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", + "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.7" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT" + }, + "node_modules/recast": { + "version": "0.23.11", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", + "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", @@ -4627,6 +6540,28 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "license": "ISC" }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", @@ -4794,6 +6729,24 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmmirror.com/saxes/-/saxes-6.0.0.tgz", @@ -4807,6 +6760,13 @@ "node": ">=v12.22.7" } }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/semver": { "version": "7.8.0", "resolved": "https://registry.npmmirror.com/semver/-/semver-7.8.0.tgz", @@ -4826,6 +6786,24 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "license": "ISC" }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4869,6 +6847,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", @@ -4892,6 +6880,33 @@ "dev": true, "license": "MIT" }, + "node_modules/storybook": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.6.14.tgz", + "integrity": "sha512-sVKbCj/OTx67jhmauhxc2dcr1P+yOgz/x3h0krwjyMgdc5Oubvxyg4NYDZmzAw+ym36g/lzH8N0Ccp4dwtdfxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/core": "8.6.14" + }, + "bin": { + "getstorybook": "bin/index.cjs", + "sb": "bin/index.cjs", + "storybook": "bin/index.cjs" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "prettier": "^2 || ^3" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } + } + }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", @@ -4996,6 +7011,19 @@ "node": ">=8" } }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -5022,6 +7050,19 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -5036,6 +7077,13 @@ "dev": true, "license": "MIT" }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "dev": true, + "license": "MIT" + }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmmirror.com/tinybench/-/tinybench-2.9.0.tgz", @@ -5080,6 +7128,16 @@ "node": ">=14.0.0" } }, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tldts": { "version": "7.0.30", "resolved": "https://registry.npmmirror.com/tldts/-/tldts-7.0.30.tgz", @@ -5100,6 +7158,13 @@ "dev": true, "license": "MIT" }, + "node_modules/token-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", + "dev": true, + "license": "MIT" + }, "node_modules/tough-cookie": { "version": "6.0.1", "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-6.0.1.tgz", @@ -5139,6 +7204,30 @@ "typescript": ">=4.8.4" } }, + "node_modules/ts-dedent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.3.0.tgz", + "integrity": "sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/ts-map": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-map/-/ts-map-1.0.3.tgz", + "integrity": "sha512-vDWbsl26LIcPGmDpoVzjEP6+hvHZkBkLW7JpvwbCv/5IYPJlsbzCVXY3wsCeAxAUeTclNOUZxnLdGh3VBD/J6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", @@ -5226,6 +7315,20 @@ "dev": true, "license": "MIT" }, + "node_modules/unplugin": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", + "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", @@ -5243,6 +7346,20 @@ "dev": true, "license": "MIT" }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -5250,6 +7367,21 @@ "dev": true, "license": "MIT" }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/vite": { "version": "6.4.2", "resolved": "https://registry.npmmirror.com/vite/-/vite-6.4.2.tgz", @@ -5415,6 +7547,16 @@ } } }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/vscode-uri": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.1.0.tgz", @@ -5443,6 +7585,34 @@ } } }, + "node_modules/vue-component-meta": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/vue-component-meta/-/vue-component-meta-2.2.12.tgz", + "integrity": "sha512-dQU6/obNSNbennJ1xd+rhDid4g3vQro+9qUBBIg8HMZH2Zs1jTpkFNxuQ3z77bOlU+ew08Qck9sbYkdSePr0Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.15", + "@vue/language-core": "2.2.12", + "path-browserify": "^1.0.1", + "vue-component-type-helpers": "2.2.12" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-component-meta/node_modules/vue-component-type-helpers": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.2.12.tgz", + "integrity": "sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==", + "dev": true, + "license": "MIT" + }, "node_modules/vue-component-type-helpers": { "version": "3.2.9", "resolved": "https://registry.npmmirror.com/vue-component-type-helpers/-/vue-component-type-helpers-3.2.9.tgz", @@ -5475,6 +7645,40 @@ } } }, + "node_modules/vue-docgen-api": { + "version": "4.79.2", + "resolved": "https://registry.npmjs.org/vue-docgen-api/-/vue-docgen-api-4.79.2.tgz", + "integrity": "sha512-n9ENAcs+40awPZMsas7STqjkZiVlIjxIKgiJr5rSohDP0/JCrD9VtlzNojafsA1MChm/hz2h3PDtUedx3lbgfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "@vue/compiler-dom": "^3.2.0", + "@vue/compiler-sfc": "^3.2.0", + "ast-types": "^0.16.1", + "esm-resolve": "^1.0.8", + "hash-sum": "^2.0.0", + "lru-cache": "^8.0.3", + "pug": "^3.0.2", + "recast": "^0.23.1", + "ts-map": "^1.0.3", + "vue-inbrowser-compiler-independent-utils": "^4.69.0" + }, + "peerDependencies": { + "vue": ">=2" + } + }, + "node_modules/vue-docgen-api/node_modules/lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16.14" + } + }, "node_modules/vue-eslint-parser": { "version": "10.4.0", "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-10.4.0.tgz", @@ -5500,6 +7704,16 @@ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0" } }, + "node_modules/vue-inbrowser-compiler-independent-utils": { + "version": "4.71.1", + "resolved": "https://registry.npmjs.org/vue-inbrowser-compiler-independent-utils/-/vue-inbrowser-compiler-independent-utils-4.71.1.tgz", + "integrity": "sha512-K3wt3iVmNGaFEOUR4JIThQRWfqokxLfnPslD41FDZB2ajXp789+wCqJyGYlIFsvEQ2P61PInw6/ph5iiqg51gg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "vue": ">=2" + } + }, "node_modules/vue-router": { "version": "4.6.4", "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.6.4.tgz", @@ -5565,6 +7779,13 @@ "node": ">=20" } }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "dev": true, + "license": "MIT" + }, "node_modules/whatwg-mimetype": { "version": "5.0.0", "resolved": "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", @@ -5612,6 +7833,28 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "license": "ISC" }, + "node_modules/which-typed-array": { + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz", + "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/why-is-node-running": { "version": "2.3.0", "resolved": "https://registry.npmmirror.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz", @@ -5629,6 +7872,22 @@ "node": ">=8" } }, + "node_modules/with": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "assert-never": "^1.2.1", + "babel-walk": "3.0.0-canary-5" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz", @@ -5744,6 +8003,28 @@ "dev": true, "license": "ISC" }, + "node_modules/ws": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz", diff --git a/desktop/renderer/package.json b/desktop/renderer/package.json index e1b6901..d770e09 100644 --- a/desktop/renderer/package.json +++ b/desktop/renderer/package.json @@ -7,6 +7,8 @@ "dev": "vite", "build": "vue-tsc -b && vite build", "preview": "vite preview", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build", "test": "vitest run", "test:watch": "vitest", "lint": "eslint .", @@ -27,6 +29,11 @@ "devDependencies": { "@eslint/js": "^10.0.1", "@microsoft/eslint-formatter-sarif": "^3.1.0", + "@storybook/addon-a11y": "^8.6.14", + "@storybook/addon-essentials": "^8.6.14", + "@storybook/addon-interactions": "^8.6.14", + "@storybook/test": "^8.6.14", + "@storybook/vue3-vite": "^8.6.14", "@types/markdown-it": "^14.1.0", "@types/qrcode": "^1.5.5", "@vitejs/plugin-vue": "^5.2.0", @@ -36,6 +43,7 @@ "eslint-plugin-vue": "^10.8.0", "globals": "^17.4.0", "jsdom": "^29.0.1", + "storybook": "^8.6.14", "typescript": "^5.7.0", "typescript-eslint": "^8.58.0", "vite": "^6.0.0", diff --git a/desktop/renderer/src/components/ui/UiButton.stories.ts b/desktop/renderer/src/components/ui/UiButton.stories.ts new file mode 100644 index 0000000..29fe3da --- /dev/null +++ b/desktop/renderer/src/components/ui/UiButton.stories.ts @@ -0,0 +1,69 @@ +import type { Meta, StoryObj } from "@storybook/vue3"; +import UiButton from "./UiButton.vue"; + +const meta = { + title: "UI/UiButton", + component: UiButton, + tags: ["autodocs"], + args: { + variant: "default", + size: "md", + loading: false, + disabled: false, + block: false, + type: "button", + }, + argTypes: { + variant: { + control: "select", + options: ["default", "secondary", "outline", "ghost", "destructive"], + }, + size: { + control: "select", + options: ["sm", "md", "lg", "icon"], + }, + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Playground: Story = { + render: (args) => ({ + components: { UiButton }, + setup() { + return { args }; + }, + template: `Button`, + }), +}; + +export const Variants: Story = { + render: () => ({ + components: { UiButton }, + template: ` +
+ Default + Secondary + Outline + Ghost + Destructive + Loading +
+ `, + }), +}; + +export const Sizes: Story = { + render: () => ({ + components: { UiButton }, + template: ` +
+ Small + Medium + Large + + +
+ `, + }), +}; diff --git a/desktop/renderer/src/components/ui/UiDialog.stories.ts b/desktop/renderer/src/components/ui/UiDialog.stories.ts new file mode 100644 index 0000000..bd060ad --- /dev/null +++ b/desktop/renderer/src/components/ui/UiDialog.stories.ts @@ -0,0 +1,96 @@ +import type { Meta, StoryObj } from "@storybook/vue3"; +import { ref } from "vue"; +import UiButton from "./UiButton.vue"; +import UiDialog from "./UiDialog.vue"; +import UiInput from "./UiInput.vue"; + +const meta = { + title: "UI/UiDialog", + component: UiDialog, + tags: ["autodocs"], + args: { + title: "Add Custom Model", + size: "md", + variant: "elevated", + titleAlign: "center", + closeOnOverlay: true, + showClose: true, + modelValue: true, + }, + argTypes: { + size: { + control: "select", + options: ["sm", "md", "lg"], + }, + variant: { + control: "select", + options: ["default", "elevated"], + }, + titleAlign: { + control: "inline-radio", + options: ["left", "center"], + }, + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Playground: Story = { + render: (args) => ({ + components: { UiDialog, UiInput, UiButton }, + setup() { + const open = ref(args.modelValue); + const name = ref(""); + const apiKey = ref(""); + return { args, open, name, apiKey }; + }, + template: ` +
+ Open Dialog + +
+ + + + + + +
+ +
+
+ `, + }), +}; + +export const LargeSize: Story = { + args: { + size: "lg", + title: "Dialog Size: Large", + }, + render: (args) => ({ + components: { UiDialog, UiButton }, + setup() { + const open = ref(true); + return { args, open }; + }, + template: ` +
+ +

+ This story previews shell sizing and spacing behavior. +

+ +
+
+ `, + }), +}; diff --git a/desktop/renderer/src/components/ui/UiDialog.vue b/desktop/renderer/src/components/ui/UiDialog.vue index ee4ec8d..63a348c 100644 --- a/desktop/renderer/src/components/ui/UiDialog.vue +++ b/desktop/renderer/src/components/ui/UiDialog.vue @@ -5,7 +5,11 @@ @mousedown.self="onOverlayMouseDown" >