diff --git a/.gitignore b/.gitignore index 32e915aa..a5515829 100644 --- a/.gitignore +++ b/.gitignore @@ -56,6 +56,7 @@ web-ui/playwright-report/ !.kiro/steering/tech-public.md !.kiro/steering/versioning.md !.kiro/steering/steering-policy.md +!.kiro/steering/i18n.md # Config (contains secrets) infra/config.yaml diff --git a/.kiro/steering/i18n.md b/.kiro/steering/i18n.md new file mode 100644 index 00000000..f1406fd1 --- /dev/null +++ b/.kiro/steering/i18n.md @@ -0,0 +1,78 @@ + + +# Web UI: i18n + +## Architecture + +- Library: **next-intl** (en / ja), no i18n routing — the app is a static-export SPA +- `LocaleProvider` (`src/i18n/LocaleProvider.tsx`) wraps the app at RootLayout + - Locale persists in `localStorage` (`sdpm-locale`), browser-language auto-detection (ja → 日本語, else English) + - First paint is always `en`, then hydrates from localStorage after mount (hydration-mismatch avoidance) +- Message bundles: `web-ui/messages/en.json` / `ja.json`, statically imported, switched client-side +- Locale switcher: Settings → Language + +## Rules + +### Message files +- **en/ja key parity is mandatory** — every key must exist in both files +- Namespace per component/page (`stylesPage`, `compose`, `modelPicker`, ...); shared strings in `common` +- ICU MessageFormat for interpolation and plurals: `{count, plural, one {# step} other {# steps}}` + (ja uses `other` only — Japanese has no plural distinction) +- Rich text (bold names in confirm dialogs, etc.) via `t.rich()` with tags: + `"deleteDescription": "Are you sure you want to delete {name}?"` + +### Components +- User-facing strings (including `aria-label`, `placeholder`, `title` attributes) must go through `useTranslations()` +- **Rules of Hooks**: call `useTranslations()` before any early return +- Unknown/dynamic tool names: guard with `t.has(key) ? t(key) : derivedFallback` +- Non-component code (pure functions like `activityLabel`) accepts an optional translator + parameter instead of importing hooks; falls back to English when absent +- Tests: use `renderWithIntl` (`src/test/renderWithIntl.tsx`) for components that call `useTranslations()` + +### Do NOT translate +- Agent/model-generated dynamic text (compose `purpose`, error message bodies from the backend) +- `agentErrors.ts` user-facing messages — guarded by a Python↔TS parity test (`tests/test_agent_errors.py`); + changing these requires coordinated changes on both sides +- shadcn/ui primitives under `src/components/ui/` (upstream-generated code) + +### Scope +- **Both modes**: styles / templates pages, StyleChat, style picker are reachable in cloud mode too + (nav links in AppShell) — do not assume they are local-only +- Local-only surfaces (e.g. `AgentSettingsDialog`) are lower priority but follow the same rules when touched + +## Japanese translation conventions + +Match the existing tone in `ja.json` — natural product UI Japanese, not literal translation: + +- Half-width space between Japanese and Latin words/numbers: 「スライド {count} 枚」「AI で作成」「URL をコピー」 +- Labels/headings: 体言止め(「スタイルを削除」「アイコンを検索中」) +- Confirm dialog titles: 「〜しますか?」(「このスタイルを削除しますか?」) +- Errors: 「〜できませんでした」(「テンプレートをアップロードできませんでした」) +- Destructive warnings: 「この操作は元に戻せません。」 +- Established UI terms: 再試行 (retry), キャンセル (cancel), お気に入り (favorites), ピン留め (pin), + デッキ (deck), コンポーザー (composer) +- Prefer meaning over form: "When should this template be used?" → 「このテンプレートを使う場面を入力…」 +- Placeholder hints keep shortcut notation: 「作りたいスタイルを説明… ⌘↵ で送信」 + +## Verification checklist + +```bash +# key parity (en/ja must match exactly) +node -e " +const en=require('./web-ui/messages/en.json'), ja=require('./web-ui/messages/ja.json'); +const flat=(o,p='')=>Object.entries(o).flatMap(([k,v])=>typeof v==='object'?flat(v,p+k+'.'):[p+k]); +const e=new Set(flat(en)), j=new Set(flat(ja)); +console.log(e.size===j.size && [...e].every(k=>j.has(k)) ? 'OK' : 'MISMATCH'); +" +cd web-ui && npx eslint src/ --quiet && npx tsc --noEmit && npm test && npm run build:cloud +``` + +Finding untranslated strings: + +```bash +# components missing useTranslations +for f in $(find web-ui/src/components web-ui/src/app -name "*.tsx" ! -name "*.test.tsx"); do + grep -L "useTranslations" "$f"; done +# hardcoded UI strings in attributes +grep -rnE '(placeholder|aria-label|title)="[A-Z][a-z]+' web-ui/src --include="*.tsx" | grep -v '{t(' +``` diff --git a/web-ui/messages/en.json b/web-ui/messages/en.json new file mode 100644 index 00000000..91a99bc4 --- /dev/null +++ b/web-ui/messages/en.json @@ -0,0 +1,411 @@ +{ + "common": { + "cancel": "Cancel", + "delete": "Delete", + "close": "Close", + "save": "Save", + "retry": "Retry", + "loading": "Loading…", + "today": "Today", + "yesterday": "Yesterday", + "daysAgo": "{days}d ago", + "confirm": "Confirm" + }, + "appShell": { + "mainNavigation": "Main navigation", + "backToDecks": "Back to decks", + "decks": "Decks", + "styles": "Styles", + "templates": "Templates", + "openChat": "Open chat", + "closeChat": "Close chat", + "userMenu": "User menu", + "settings": "Settings", + "signOut": "Sign out" + }, + "deckList": { + "title": "Decks", + "presentationCount": "{count, plural, one {# presentation} other {# presentations}}", + "newDeck": "New Deck", + "searchPlaceholder": "Search slides across the organization…", + "clearSearch": "Clear search", + "tabs": { + "mine": "My Decks", + "favorites": "Favorites", + "shared": "Shared", + "public": "Internal" + }, + "emptyMineTitle": "No decks yet", + "emptyMineDescription": "Create your first presentation with AI assistance.", + "emptyMineAction": "Create your first deck", + "emptyOtherTitle": "No {tab} yet", + "emptyOtherDescription": "When decks appear here, you'll see them in this tab." + }, + "settings": { + "title": "Settings", + "language": "Language", + "languageDescription": "Display language for the interface" + }, + "deckCard": { + "addToFavorites": "Add to favorites", + "removeFromFavorites": "Remove from favorites", + "deckActions": "Deck actions", + "copyUrl": "Copy URL", + "openFolder": "Open Folder", + "openPptx": "Open PPTX", + "downloadPptx": "Download PPTX", + "makePrivate": "Make Private", + "makeInternal": "Make Internal", + "share": "Share", + "delete": "Delete", + "previewAlt": "Preview of {name}", + "internal": "Internal", + "private": "Private" + }, + "workspace": { + "slideCount": "{count, plural, one {# slide} other {# slides}}", + "lastEdited": "Last edited {date}", + "share": "Share", + "slideAlt": "Slide {number}", + "noSlides": "No slides yet. Use the chat to create slides." + }, + "deckActions": { + "internal": "Internal", + "private": "Private", + "share": "Share", + "shareInternallyTitle": "Share internally?", + "shareInternallyDescription": "This deck will be discoverable by everyone in the organization.", + "shareThisDeck": "Share this deck", + "searchByAlias": "Search by alias…", + "collaborators": "Collaborators", + "removeCollaborator": "Remove {name}", + "noCollaborators": "No collaborators yet" + }, + "search": { + "searching": "Searching slides across the organization…", + "resultsFound": "{count, plural, one {# result found} other {# results found}}", + "resultAlt": "{deck} page {page}", + "untitled": "Untitled", + "page": "Page {number}", + "noMatches": "No matching slides", + "noMatchesHint": "Try different keywords or a broader search term." + }, + "carousel": { + "errorOpenFolder": "Failed to open deck folder", + "errorOpenPptx": "Failed to open PPTX", + "buildingSlides": "Building your slides", + "buildingHint": "This usually takes a few seconds…", + "composing": "Composing slides…", + "previewsPlaceholder": "Slide previews will appear here after generating a PPTX.", + "preview": "Preview", + "fullSizeView": "Full size view", + "gridView": "Grid view", + "openFolder": "Open folder", + "openPptx": "Open PPTX", + "downloadPptx": "Download PPTX", + "slideAlt": "Slide {number}", + "slideAltFull": "Slide {number} of {total}" + }, + "outline": { + "evidence": "Evidence", + "visual": "Visual", + "notes": "Notes", + "emptyState": "Outline will appear here when the agent writes it." + }, + "chatInput": { + "maxFilesError": "Maximum 5 files can be attached at once.", + "uploadFailed": "Upload failed", + "textSnippet": "Text snippet", + "placeholderMobile": "Ask anything…", + "placeholderDesktop": "Ask anything… ⌘↵ send", + "inputLabel": "Chat message input", + "stopGeneration": "Stop generation", + "sendMessage": "Send message" + }, + "chatShell": { + "errorResetSession": "Failed to reset agent session", + "resizePanel": "Resize chat panel", + "chat": "Chat", + "newChat": "New chat", + "startNewChat": "Start new chat", + "closePanel": "Close chat panel", + "new": "New", + "deck": "Deck" + }, + "chat": { + "errorSaveHistory": "Failed to save chat history", + "historyTruncated": "Older messages in this conversation were omitted to keep loading fast.", + "letsPresent": "Let's present", + "emptyHint": "Drop a URL, paste notes, or describe your idea", + "example1": "Create a product pitch for our new feature", + "example2": "Turn my meeting notes into a status update deck", + "example3": "Make a 5-minute tech talk about a topic I'll describe", + "chatMessages": "Chat messages", + "placeholderMobile": "Ask anything…", + "placeholderDesktop": "Ask anything… ⌘↵ send", + "forceStop": "Force stop — partial report may be lost", + "mentionSuggestions": "Mention suggestions", + "errorSwitchModel": "Failed to switch model", + "slidePreview": "Slide preview", + "options": "Options", + "fetchWebImages": "Fetch web images", + "fetchWebImagesDescription": "Include images from websites in presentations", + "parallelAgents": "Parallel agents", + "experimental": "🧪 Experimental", + "parallelAgentsDescription": "Multiple composer agents generate slides in parallel" + }, + "snippet": { + "title": "Text Snippet", + "placeholder": "Paste or type your text here…", + "characterCount": "{count, plural, one {# character} other {# characters}}", + "cancel": "Cancel", + "attach": "Attach", + "textSnippet": "Text snippet", + "charCount": "{count} chars" + }, + "plusMenu": { + "attachLabel": "Attach file or snippet", + "attachFile": "Attach file", + "textSnippet": "Text snippet" + }, + "attachments": { + "removeFile": "Remove {name}", + "removeSnippet": "Remove snippet" + }, + "hearing": { + "agentQuestions": "Agent questions", + "recommended": "Recommended", + "additionalNotes": "Additional notes...", + "additionalNotesLabel": "additional notes", + "submit": "Submit" + }, + "modeSelector": { + "vibeDescription": "Drop materials, get slides. Minimal interaction for quick conversions.", + "specDescription": "Plan first, then build. Refine requirements through dialogue before composing.", + "greatFor": "Great for", + "vibeFor1": "URLs & articles → slides", + "vibeFor2": "Papers & docs → summary deck", + "vibeFor3": "Meeting notes → presentation", + "specFor1": "Proposals & pitch decks", + "specFor2": "Projects needing structure", + "specFor3": "Polished, precise presentations" + }, + "tools": { + "running": "Running", + "completed": "Completed", + "failed": "Failed", + "create_deck": "Creating deck", + "write_slide": "Writing slide", + "remove_slide": "Removing slide", + "reorder_slides": "Reordering slides", + "clone_deck": "Cloning deck", + "clone_slide": "Cloning slide", + "read_reference": "Reading reference", + "list_references": "Listing patterns", + "search_icons": "Searching icons", + "search_slides": "Searching slides", + "get_deck": "Loading deck", + "web_search": "Web search", + "web_fetch": "Fetching page", + "read_uploaded_file": "Reading file", + "import_attachment": "Importing file", + "generate_pptx": "Generating PPTX", + "generate_preview": "Generating preview", + "measure_slides": "Measuring slides", + "init_presentation": "Initializing deck", + "analyze_template": "Analyzing template", + "start_presentation": "Starting workflow", + "list_templates": "Listing templates", + "list_styles": "Listing styles", + "apply_style": "Applying style", + "read_examples": "Reading example", + "list_workflows": "Listing workflows", + "read_workflows": "Reading workflow", + "list_guides": "Listing guides", + "read_guides": "Reading guide", + "search_assets": "Searching assets", + "list_asset_sources": "Listing asset sources", + "get_preview": "Getting preview", + "run_python": "Running code", + "run_style_python": "Building style", + "grid": "Computing layout", + "code_to_slide": "Code to slide", + "pptx_to_json": "Converting PPTX", + "hearing": "Asking questions", + "compose_slides": "Composing slides" + }, + "errorBoundary": { + "problem": "{label} ran into a problem.", + "thisSection": "This section", + "tryAgain": "Try again" + }, + "specNav": { + "specPhases": "Spec phases", + "brief": "Brief", + "outline": "Outline", + "artDirection": "Art Direction", + "slides": "Slides" + }, + "specWaiting": { + "draftingBrief": "Drafting the brief…", + "structuringOutline": "Structuring the outline…", + "composingArtDirection": "Composing art direction…" + }, + "decksPage": { + "removeFromFavorites": "Remove from favorites", + "addToFavorites": "Add to favorites", + "deleteTitle": "Delete this deck?", + "deleteDescription": "{name} will be permanently deleted after 30 days. This action cannot be undone.", + "delete": "Delete", + "newDeck": "New Deck", + "createNewDeck": "Create new deck", + "chat": "Chat", + "preview": "Preview" + }, + "mcp": { + "connected": "Connected: {names}", + "unavailable": "Unavailable: {name}" + }, + "modelPicker": { + "selectModel": "Select model", + "recommended": "Recommended", + "searchModels": "Search models...", + "noModelFound": "No model found." + }, + "compose": { + "composingAria": "Composing slides", + "preparing": "Preparing…", + "composing": "Composing {slides} slides · {agents} agents in parallel", + "composed": "Composed {count} slides", + "composedPartialFailed": "Composed {done} of {total} slides — some failed", + "failed": "Failed to compose slides", + "stopping": "Stopping — finalizing partial results…", + "stoppingShort": "Stopping…", + "stopped": "Stopped", + "stoppedPartial": "Stopped · {done} of {total} slides composed", + "cancel": "Cancel", + "cancelAria": "Cancel compose slides", + "cancelRequestedAria": "Cancel requested, stopping", + "rushedBadge": "{count} rushed", + "rushedBadgeTitle": "{count, plural, one {# composer} other {# composers}} hit the time budget — rough drafts may need another pass", + "rushedAgent": "rushed", + "rushedAgentTitle": "Time budget reached — this composer wrote a rough draft to finish on time. Consider re-running for these slides.", + "retryBadge": "retry {count}", + "retrying": "Retrying ({count})", + "thinking": "Thinking", + "agentFailed": "Failed", + "instruction": "Instruction", + "activitySteps": "Activity · {count, plural, one {# step} other {# steps}}", + "expandDetails": "Expand details", + "collapseDetails": "Collapse details", + "agentDetails": "Agent details", + "srProgress": "{done} of {total} agents completed", + "whatComposersDid": "What the composers did · {count, plural, one {# group} other {# groups}}", + "activity": { + "working": "Working", + "editing": "Editing {slugs}", + "searchingIcons": "Searching icons", + "searchingIconsQuery": "Searching icons: \"{query}\"", + "planningLayout": "Planning layout", + "reviewingExamples": "Reviewing examples", + "consultingGuide": "Consulting guide", + "consultingWorkflow": "Consulting workflow", + "applyingStyle": "Applying style", + "previewingSlides": "Previewing slides", + "assemblingDeck": "Assembling deck", + "formattingCode": "Formatting code", + "importingFile": "Importing file", + "analyzingTemplate": "Analyzing template", + "browsingStyles": "Browsing styles", + "listingGuides": "Listing guides", + "listingWorkflows": "Listing workflows", + "listingTemplates": "Listing templates", + "listingAssetSources": "Listing asset sources", + "readingUpload": "Reading upload", + "initializingDeck": "Initializing deck", + "thinking": "Thinking" + }, + "stoppingBare": "Stopping" + }, + "stylesPage": { + "title": "Styles", + "subtitle": "Manage and preview presentation styles", + "myStyles": "My Styles", + "builtinStyles": "Built-in Styles", + "createWithAI": "Create with AI", + "creatingStyle": "Creating your new style…", + "back": "Back", + "backToStyles": "Back to Styles", + "editWithAI": "Edit with AI", + "copyToMyStyles": "Copy to My Styles", + "importStyle": "Import Style", + "custom": "Custom", + "deleteStyleTitle": "Delete style", + "deleteDescription": "Are you sure you want to delete {name}? This cannot be undone.", + "imported": "Imported \"{name}\"", + "deleted": "Deleted \"{name}\"", + "copiedAs": "Copied as \"{name}\"", + "styleSaved": "Style saved: {title}", + "renameCharsError": "Letters, numbers, hyphens, underscores only", + "nameExists": "Name already exists", + "pinAria": "Pin {name}", + "unpinAria": "Unpin {name}", + "exportAria": "Export {name}", + "deleteAria": "Delete {name}", + "moreActions": "More actions", + "export": "Export" + }, + "templatesPage": { + "title": "Templates", + "subtitle": "Manage your PPTX presentation templates", + "myTemplates": "My Templates", + "builtinTemplates": "Built-in Templates", + "uploadTemplate": "Upload Template", + "custom": "Custom", + "deleteTemplateTitle": "Delete template", + "deleteDescription": "Are you sure you want to delete {name}? This cannot be undone.", + "deleted": "Deleted \"{name}\"", + "addDescription": "Add description…", + "descPlaceholder": "When should this template be used?", + "downloadAria": "Download {name}", + "deleteAria": "Delete {name}", + "renameCharsShort": "a-z, 0-9, hyphens, underscores", + "renameCharsError": "Letters, numbers, hyphens, underscores only", + "nameExists": "Name already exists", + "notAuthenticated": "Not authenticated", + "close": "Close", + "dropHint": "Drop .pptx here or click to browse", + "descriptionLabel": "Description", + "optional": "(optional)", + "upload": "Upload", + "analyzing": "Analyzing…", + "uploadFailed": "Failed to upload template" + }, + "styleChat": { + "styleCreator": "Style Creator", + "describeVision": "Describe your vision", + "dropReference": "Drop a reference image", + "customizeExisting": "Customize existing styles", + "placeholder": "Describe your style… ⌘↵ send", + "saveChatFailed": "Failed to save chat history", + "chatMessagesAria": "Style chat messages", + "fallbackTitle": "Style Chat", + "resizeAria": "Resize chat panel", + "closeAria": "Close chat panel" + }, + "stylePicker": { + "chooseStyle": "Choose a Style", + "clickToPreview": "Click to preview · ★ to pin favorites", + "backToArtDirection": "Back to Art Direction", + "pinned": "Pinned", + "allStyles": "All Styles ({count})", + "backToStylesAria": "Back to styles", + "previewHint": "Preview all slides — select to apply", + "select": "Select", + "changeStyle": "Change Style", + "previewStyleAria": "Preview {name} style", + "pinAria": "Pin {name}", + "unpinAria": "Unpin {name}", + "custom": "Custom" + } +} diff --git a/web-ui/messages/ja.json b/web-ui/messages/ja.json new file mode 100644 index 00000000..a88fdba5 --- /dev/null +++ b/web-ui/messages/ja.json @@ -0,0 +1,411 @@ +{ + "common": { + "cancel": "キャンセル", + "delete": "削除", + "close": "閉じる", + "save": "保存", + "retry": "再試行", + "loading": "読み込み中…", + "today": "今日", + "yesterday": "昨日", + "daysAgo": "{days}日前", + "confirm": "確認" + }, + "appShell": { + "mainNavigation": "メインナビゲーション", + "backToDecks": "デッキ一覧に戻る", + "decks": "デッキ", + "styles": "スタイル", + "templates": "テンプレート", + "openChat": "チャットを開く", + "closeChat": "チャットを閉じる", + "userMenu": "ユーザーメニュー", + "settings": "設定", + "signOut": "サインアウト" + }, + "deckList": { + "title": "デッキ", + "presentationCount": "{count, plural, other {# 件のプレゼンテーション}}", + "newDeck": "新規デッキ", + "searchPlaceholder": "組織全体のスライドを検索…", + "clearSearch": "検索をクリア", + "tabs": { + "mine": "マイデッキ", + "favorites": "お気に入り", + "shared": "共有", + "public": "社内公開" + }, + "emptyMineTitle": "デッキはまだありません", + "emptyMineDescription": "AI の支援で最初のプレゼンテーションを作りましょう。", + "emptyMineAction": "最初のデッキを作成", + "emptyOtherTitle": "{tab}はまだありません", + "emptyOtherDescription": "デッキが追加されるとこのタブに表示されます。" + }, + "settings": { + "title": "設定", + "language": "言語", + "languageDescription": "インターフェースの表示言語" + }, + "deckCard": { + "addToFavorites": "お気に入りに追加", + "removeFromFavorites": "お気に入りから削除", + "deckActions": "デッキ操作", + "copyUrl": "URL をコピー", + "openFolder": "フォルダを開く", + "openPptx": "PPTX を開く", + "downloadPptx": "PPTX をダウンロード", + "makePrivate": "非公開にする", + "makeInternal": "社内公開にする", + "share": "共有", + "delete": "削除", + "previewAlt": "{name} のプレビュー", + "internal": "社内公開", + "private": "非公開" + }, + "workspace": { + "slideCount": "{count, plural, other {# 枚のスライド}}", + "lastEdited": "最終編集 {date}", + "share": "共有", + "slideAlt": "スライド {number}", + "noSlides": "スライドはまだありません。チャットから作成できます。" + }, + "deckActions": { + "internal": "社内公開", + "private": "非公開", + "share": "共有", + "shareInternallyTitle": "社内に公開しますか?", + "shareInternallyDescription": "このデッキは組織内の全員が検索・閲覧できるようになります。", + "shareThisDeck": "このデッキを共有", + "searchByAlias": "エイリアスで検索…", + "collaborators": "共同編集者", + "removeCollaborator": "{name} を削除", + "noCollaborators": "共同編集者はまだいません" + }, + "search": { + "searching": "組織全体のスライドを検索中…", + "resultsFound": "{count, plural, other {# 件見つかりました}}", + "resultAlt": "{deck} {page} ページ", + "untitled": "無題", + "page": "{number} ページ", + "noMatches": "一致するスライドがありません", + "noMatchesHint": "別のキーワードやより広い検索語を試してください。" + }, + "carousel": { + "errorOpenFolder": "デッキフォルダを開けませんでした", + "errorOpenPptx": "PPTX を開けませんでした", + "buildingSlides": "スライドを生成しています", + "buildingHint": "通常は数秒で完了します…", + "composing": "スライドを作成中…", + "previewsPlaceholder": "PPTX を生成するとスライドプレビューがここに表示されます。", + "preview": "プレビュー", + "fullSizeView": "全画面表示", + "gridView": "グリッド表示", + "openFolder": "フォルダを開く", + "openPptx": "PPTX を開く", + "downloadPptx": "PPTX をダウンロード", + "slideAlt": "スライド {number}", + "slideAltFull": "スライド {number} / {total}" + }, + "outline": { + "evidence": "根拠", + "visual": "ビジュアル", + "notes": "メモ", + "emptyState": "エージェントがアウトラインを書くとここに表示されます。" + }, + "chatInput": { + "maxFilesError": "一度に添付できるファイルは 5 つまでです。", + "uploadFailed": "アップロード失敗", + "textSnippet": "テキストスニペット", + "placeholderMobile": "なんでも聞いてください…", + "placeholderDesktop": "なんでも聞いてください… ⌘↵ で送信", + "inputLabel": "チャットメッセージ入力", + "stopGeneration": "生成を停止", + "sendMessage": "メッセージを送信" + }, + "chatShell": { + "errorResetSession": "エージェントセッションをリセットできませんでした", + "resizePanel": "チャットパネルの幅を変更", + "chat": "チャット", + "newChat": "新しいチャット", + "startNewChat": "新しいチャットを開始", + "closePanel": "チャットパネルを閉じる", + "new": "新規", + "deck": "デッキ" + }, + "chat": { + "errorSaveHistory": "チャット履歴を保存できませんでした", + "historyTruncated": "読み込みを速く保つため、古いメッセージを省略しました。", + "letsPresent": "プレゼンを作ろう", + "emptyHint": "URL やメモの貼り付け、アイデアの説明から始められます", + "example1": "新機能のプロダクトピッチを作って", + "example2": "会議メモを進捗報告のデッキにして", + "example3": "これから説明するテーマで 5 分の技術トークを作って", + "chatMessages": "チャットメッセージ", + "placeholderMobile": "なんでも聞いてください…", + "placeholderDesktop": "なんでも聞いてください… ⌘↵ で送信", + "forceStop": "強制停止 — 進行中のレポートが失われる可能性があります", + "mentionSuggestions": "メンション候補", + "errorSwitchModel": "モデルを切り替えられませんでした", + "slidePreview": "スライドプレビュー", + "options": "オプション", + "fetchWebImages": "Web 画像を取得", + "fetchWebImagesDescription": "Web サイトの画像をプレゼンテーションに取り込みます", + "parallelAgents": "エージェント並列実行", + "experimental": "🧪 実験的機能", + "parallelAgentsDescription": "複数のコンポーザーエージェントがスライドを並列生成します" + }, + "snippet": { + "title": "テキストスニペット", + "placeholder": "テキストを貼り付けまたは入力…", + "characterCount": "{count, plural, other {# 文字}}", + "cancel": "キャンセル", + "attach": "添付", + "textSnippet": "テキストスニペット", + "charCount": "{count} 文字" + }, + "plusMenu": { + "attachLabel": "ファイルまたはスニペットを添付", + "attachFile": "ファイルを添付", + "textSnippet": "テキストスニペット" + }, + "attachments": { + "removeFile": "{name} を削除", + "removeSnippet": "スニペットを削除" + }, + "hearing": { + "agentQuestions": "エージェントからの質問", + "recommended": "おすすめ", + "additionalNotes": "補足があれば入力…", + "additionalNotesLabel": "補足メモ", + "submit": "送信" + }, + "modeSelector": { + "vibeDescription": "資料を渡すだけでスライドに。最小限の対話で素早く変換します。", + "specDescription": "まず計画、それから構築。対話で要件を固めてから作成します。", + "greatFor": "こんな用途に", + "vibeFor1": "URL・記事 → スライド", + "vibeFor2": "論文・ドキュメント → 要約デッキ", + "vibeFor3": "会議メモ → プレゼン資料", + "specFor1": "提案書・ピッチ資料", + "specFor2": "構成が重要なプロジェクト", + "specFor3": "磨き込まれた正確なプレゼン" + }, + "tools": { + "running": "実行中", + "completed": "完了", + "failed": "失敗", + "create_deck": "デッキを作成中", + "write_slide": "スライドを作成中", + "remove_slide": "スライドを削除中", + "reorder_slides": "スライドを並べ替え中", + "clone_deck": "デッキを複製中", + "clone_slide": "スライドを複製中", + "read_reference": "リファレンスを読込中", + "list_references": "パターン一覧を取得中", + "search_icons": "アイコンを検索中", + "search_slides": "スライドを検索中", + "get_deck": "デッキを読込中", + "web_search": "Web 検索中", + "web_fetch": "ページを取得中", + "read_uploaded_file": "ファイルを読込中", + "import_attachment": "ファイルを取込中", + "generate_pptx": "PPTX を生成中", + "generate_preview": "プレビューを生成中", + "measure_slides": "スライドを計測中", + "init_presentation": "デッキを初期化中", + "analyze_template": "テンプレートを分析中", + "start_presentation": "ワークフローを開始中", + "list_templates": "テンプレート一覧を取得中", + "list_styles": "スタイル一覧を取得中", + "apply_style": "スタイルを適用中", + "read_examples": "サンプルを読込中", + "list_workflows": "ワークフロー一覧を取得中", + "read_workflows": "ワークフローを読込中", + "list_guides": "ガイド一覧を取得中", + "read_guides": "ガイドを読込中", + "search_assets": "アセットを検索中", + "list_asset_sources": "アセットソース一覧を取得中", + "get_preview": "プレビューを取得中", + "run_python": "コードを実行中", + "run_style_python": "スタイルを構築中", + "grid": "レイアウトを計算中", + "code_to_slide": "コードをスライド化中", + "pptx_to_json": "PPTX を変換中", + "hearing": "質問を作成中", + "compose_slides": "スライドを構成中" + }, + "errorBoundary": { + "problem": "{label}で問題が発生しました。", + "thisSection": "このセクション", + "tryAgain": "再試行" + }, + "specNav": { + "specPhases": "スペックの段階", + "brief": "ブリーフ", + "outline": "アウトライン", + "artDirection": "アートディレクション", + "slides": "スライド" + }, + "specWaiting": { + "draftingBrief": "ブリーフを作成中…", + "structuringOutline": "アウトラインを構成中…", + "composingArtDirection": "アートディレクションを構成中…" + }, + "decksPage": { + "removeFromFavorites": "お気に入りから削除", + "addToFavorites": "お気に入りに追加", + "deleteTitle": "このデッキを削除しますか?", + "deleteDescription": "{name} は 30 日後に完全に削除されます。この操作は元に戻せません。", + "delete": "削除", + "newDeck": "新規デッキ", + "createNewDeck": "新しいデッキを作成", + "chat": "チャット", + "preview": "プレビュー" + }, + "mcp": { + "connected": "接続済み: {names}", + "unavailable": "利用不可: {name}" + }, + "modelPicker": { + "selectModel": "モデルを選択", + "recommended": "おすすめ", + "searchModels": "モデルを検索…", + "noModelFound": "モデルが見つかりません" + }, + "compose": { + "composingAria": "スライドを作成中", + "preparing": "準備中…", + "composing": "スライド {slides} 枚を {agents} エージェントで並列作成中", + "composed": "スライド {count} 枚を作成しました", + "composedPartialFailed": "スライド {total} 枚中 {done} 枚を作成 — 一部は失敗しました", + "failed": "スライドを作成できませんでした", + "stopping": "停止中 — 途中結果をまとめています…", + "stoppingShort": "停止中…", + "stopped": "停止しました", + "stoppedPartial": "停止しました · スライド {total} 枚中 {done} 枚まで作成", + "cancel": "キャンセル", + "cancelAria": "スライド作成をキャンセル", + "cancelRequestedAria": "キャンセルを受け付けました。停止しています", + "rushedBadge": "時間切れ {count}", + "rushedBadgeTitle": "{count, plural, other {# 個のコンポーザー}}が制限時間に達したため、仕上げが粗い可能性があります。再実行を検討してください", + "rushedAgent": "時間切れ", + "rushedAgentTitle": "制限時間に達したため、このコンポーザーは急ぎで下書きを仕上げました。該当スライドの再実行を検討してください。", + "retryBadge": "再試行 {count}", + "retrying": "再試行中 ({count})", + "thinking": "思考中", + "agentFailed": "失敗しました", + "instruction": "指示", + "activitySteps": "アクティビティ · {count, plural, other {# ステップ}}", + "expandDetails": "詳細を表示", + "collapseDetails": "詳細を閉じる", + "agentDetails": "エージェントの詳細", + "srProgress": "{total} エージェント中 {done} が完了", + "whatComposersDid": "各コンポーザーの作業内容 · {count, plural, other {# グループ}}", + "activity": { + "working": "作業中", + "editing": "{slugs} を編集中", + "searchingIcons": "アイコンを検索中", + "searchingIconsQuery": "アイコンを検索中: 「{query}」", + "planningLayout": "レイアウトを設計中", + "reviewingExamples": "作例を確認中", + "consultingGuide": "ガイドを参照中", + "consultingWorkflow": "ワークフローを参照中", + "applyingStyle": "スタイルを適用中", + "previewingSlides": "スライドをプレビュー中", + "assemblingDeck": "デッキを生成中", + "formattingCode": "コードを整形中", + "importingFile": "ファイルを取込中", + "analyzingTemplate": "テンプレートを解析中", + "browsingStyles": "スタイルを確認中", + "listingGuides": "ガイド一覧を取得中", + "listingWorkflows": "ワークフロー一覧を取得中", + "listingTemplates": "テンプレート一覧を取得中", + "listingAssetSources": "アセットソース一覧を取得中", + "readingUpload": "アップロードファイルを読込中", + "initializingDeck": "デッキを初期化中", + "thinking": "思考中" + }, + "stoppingBare": "停止中" + }, + "stylesPage": { + "title": "スタイル", + "subtitle": "プレゼンテーションのスタイルを管理・プレビューできます", + "myStyles": "マイスタイル", + "builtinStyles": "組み込みスタイル", + "createWithAI": "AI で作成", + "creatingStyle": "新しいスタイルを作成しています…", + "back": "戻る", + "backToStyles": "スタイル一覧に戻る", + "editWithAI": "AI で編集", + "copyToMyStyles": "マイスタイルにコピー", + "importStyle": "スタイルをインポート", + "custom": "カスタム", + "deleteStyleTitle": "このスタイルを削除しますか?", + "deleteDescription": "{name} を削除します。この操作は元に戻せません。", + "imported": "「{name}」をインポートしました", + "deleted": "「{name}」を削除しました", + "copiedAs": "「{name}」としてコピーしました", + "styleSaved": "スタイル「{title}」を保存しました", + "renameCharsError": "英数字、ハイフン、アンダースコアのみ使用できます", + "nameExists": "同じ名前が既に存在します", + "pinAria": "{name} をピン留め", + "unpinAria": "{name} のピン留めを解除", + "exportAria": "{name} をエクスポート", + "deleteAria": "{name} を削除", + "moreActions": "その他の操作", + "export": "エクスポート" + }, + "templatesPage": { + "title": "テンプレート", + "subtitle": "PPTX テンプレートの管理", + "myTemplates": "マイテンプレート", + "builtinTemplates": "組み込みテンプレート", + "uploadTemplate": "テンプレートをアップロード", + "custom": "カスタム", + "deleteTemplateTitle": "このテンプレートを削除しますか?", + "deleteDescription": "{name} を削除します。この操作は元に戻せません。", + "deleted": "「{name}」を削除しました", + "addDescription": "説明を追加…", + "descPlaceholder": "このテンプレートを使う場面を入力…", + "downloadAria": "{name} をダウンロード", + "deleteAria": "{name} を削除", + "renameCharsShort": "英数字、ハイフン、アンダースコアのみ", + "renameCharsError": "英数字、ハイフン、アンダースコアのみ使用できます", + "nameExists": "同じ名前が既に存在します", + "notAuthenticated": "認証されていません", + "close": "閉じる", + "dropHint": ".pptx をここにドロップ、またはクリックして選択", + "descriptionLabel": "説明", + "optional": "(任意)", + "upload": "アップロード", + "analyzing": "解析中…", + "uploadFailed": "テンプレートをアップロードできませんでした" + }, + "styleChat": { + "styleCreator": "スタイルクリエイター", + "describeVision": "イメージを言葉で伝える", + "dropReference": "参考画像をドロップ", + "customizeExisting": "既存のスタイルをカスタマイズ", + "placeholder": "作りたいスタイルを説明… ⌘↵ で送信", + "saveChatFailed": "チャット履歴を保存できませんでした", + "chatMessagesAria": "スタイルチャットのメッセージ", + "fallbackTitle": "スタイルチャット", + "resizeAria": "チャットパネルの幅を変更", + "closeAria": "チャットパネルを閉じる" + }, + "stylePicker": { + "chooseStyle": "スタイルを選択", + "clickToPreview": "クリックでプレビュー · ★ でお気に入りをピン留め", + "backToArtDirection": "アートディレクションに戻る", + "pinned": "ピン留め済み", + "allStyles": "すべてのスタイル ({count})", + "backToStylesAria": "スタイル一覧に戻る", + "previewHint": "全スライドをプレビュー — 選択すると適用されます", + "select": "選択", + "changeStyle": "スタイルを変更", + "previewStyleAria": "{name} スタイルをプレビュー", + "pinAria": "{name} をピン留め", + "unpinAria": "{name} のピン留めを解除", + "custom": "カスタム" + } +} diff --git a/web-ui/package-lock.json b/web-ui/package-lock.json index 1af9bf6f..aa2d6825 100644 --- a/web-ui/package-lock.json +++ b/web-ui/package-lock.json @@ -24,6 +24,7 @@ "dompurify": "^3.4.9", "lucide-react": "^0.562.0", "next": "^16.2.6", + "next-intl": "^4.13.1", "next-themes": "^0.4.6", "radix-ui": "^1.4.3", "react": "^19.2.1", @@ -227,7 +228,6 @@ "resolved": "https://registry.npmjs.org/@aws-amplify/core/-/core-6.16.4.tgz", "integrity": "sha512-RjJABL3lVByNcqeCeBuGWecfCtRS0paFdVyQ0nbA6XSJNYaoHT5J57WyGY8cUWmaKx2YNY0poFtuKaGXfRxjKg==", "license": "Apache-2.0", - "peer": true, "dependencies": { "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/types": "^3.973.6", @@ -337,18 +337,18 @@ } }, "node_modules/@aws-sdk/client-firehose": { - "version": "3.1081.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-firehose/-/client-firehose-3.1081.0.tgz", - "integrity": "sha512-194PA2vtfrLH0yPsfOJAcvZA3XiYCpLH1BdTjq34AbFJKo6WG4IvrAJqHyCbQDv7gEQ/7dLhW02te4CA4ld0ZA==", + "version": "3.1087.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-firehose/-/client-firehose-3.1087.0.tgz", + "integrity": "sha512-6925TUrG6zbce5RLRXsK2vkXBP+06AUiO/LEWa2o2VVYXtgTkFJoDSU9CPg/n8v1XwPm6UxV7rEj7QdPl5P3cw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.974.29", - "@aws-sdk/credential-provider-node": "^3.972.64", - "@aws-sdk/types": "^3.973.15", - "@smithy/core": "^3.29.0", - "@smithy/fetch-http-handler": "^5.6.2", - "@smithy/node-http-handler": "^4.9.2", - "@smithy/types": "^4.15.1", + "@aws-sdk/core": "^3.975.2", + "@aws-sdk/credential-provider-node": "^3.972.68", + "@aws-sdk/types": "^3.974.1", + "@smithy/core": "^3.29.3", + "@smithy/fetch-http-handler": "^5.6.5", + "@smithy/node-http-handler": "^4.9.5", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -356,9 +356,9 @@ } }, "node_modules/@aws-sdk/client-firehose/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -368,18 +368,18 @@ } }, "node_modules/@aws-sdk/client-kinesis": { - "version": "3.1081.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-kinesis/-/client-kinesis-3.1081.0.tgz", - "integrity": "sha512-9ZPt3l/FtRByUY21JThrmxyQa5iOJ8X732AX2kly88vUtnouC7RBF8nAJoabLwdMG9E3x1H6Izvdi7Wcc16TBg==", + "version": "3.1087.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-kinesis/-/client-kinesis-3.1087.0.tgz", + "integrity": "sha512-kqrWijCKlczcMnl9rwFCjr2+aiUXnnxuPNk0J/1lwLA+2jfKsMvCK6SIfPKudXerAZu7ibDt8HA7WyrrXroubg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.974.29", - "@aws-sdk/credential-provider-node": "^3.972.64", - "@aws-sdk/types": "^3.973.15", - "@smithy/core": "^3.29.0", - "@smithy/fetch-http-handler": "^5.6.2", - "@smithy/node-http-handler": "^4.9.2", - "@smithy/types": "^4.15.1", + "@aws-sdk/core": "^3.975.2", + "@aws-sdk/credential-provider-node": "^3.972.68", + "@aws-sdk/types": "^3.974.1", + "@smithy/core": "^3.29.3", + "@smithy/fetch-http-handler": "^5.6.5", + "@smithy/node-http-handler": "^4.9.5", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -387,9 +387,9 @@ } }, "node_modules/@aws-sdk/client-kinesis/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -399,18 +399,18 @@ } }, "node_modules/@aws-sdk/client-personalize-events": { - "version": "3.1081.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize-events/-/client-personalize-events-3.1081.0.tgz", - "integrity": "sha512-9AGbZUZ6nwfCh/Z8P7vljHQ9J0asINnP3Zqms0GfZfivaWOiaSDKhAklXCenh/D1+cnCTZJMIczW+FqME/qPzA==", + "version": "3.1087.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize-events/-/client-personalize-events-3.1087.0.tgz", + "integrity": "sha512-izxN9Y0ZKahVAbJupoAt+gIWcK+GaiI9AXaeZkUuRsbLkDbo9QPPRa/wl5SSmtqfPQ3BTBICc1CC1ihqkLssLA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.974.29", - "@aws-sdk/credential-provider-node": "^3.972.64", - "@aws-sdk/types": "^3.973.15", - "@smithy/core": "^3.29.0", - "@smithy/fetch-http-handler": "^5.6.2", - "@smithy/node-http-handler": "^4.9.2", - "@smithy/types": "^4.15.1", + "@aws-sdk/core": "^3.975.2", + "@aws-sdk/credential-provider-node": "^3.972.68", + "@aws-sdk/types": "^3.974.1", + "@smithy/core": "^3.29.3", + "@smithy/fetch-http-handler": "^5.6.5", + "@smithy/node-http-handler": "^4.9.5", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -418,9 +418,9 @@ } }, "node_modules/@aws-sdk/client-personalize-events/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -430,17 +430,17 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.974.29", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.974.29.tgz", - "integrity": "sha512-yqKcltLbtRh1ubzhRSldIs8jFHNZlyMlgoIccCC0aDVbrB99nXaBdmfr89mK7obWX/NVg4rAMpCpZ6dCDiVBtA==", + "version": "3.975.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.975.2.tgz", + "integrity": "sha512-iyeXwziyjJpixq5OmhsIyrSWx8vwcI7gDo4yRUC3EP7NQtOo9iAJiIEc3G+/HkhtNXqOhofiCK7Lc34Sq+fJWg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.15", - "@aws-sdk/xml-builder": "^3.972.33", + "@aws-sdk/types": "^3.974.1", + "@aws-sdk/xml-builder": "^3.972.35", "@aws/lambda-invoke-store": "^0.3.0", - "@smithy/core": "^3.29.0", - "@smithy/signature-v4": "^5.6.1", - "@smithy/types": "^4.15.1", + "@smithy/core": "^3.29.3", + "@smithy/signature-v4": "^5.6.3", + "@smithy/types": "^4.16.1", "bowser": "^2.11.0", "tslib": "^2.6.2" }, @@ -449,9 +449,9 @@ } }, "node_modules/@aws-sdk/core/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -461,15 +461,15 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.972.55", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.55.tgz", - "integrity": "sha512-Ah36tYkqyaVnaHkx7VseoTYrHUmwgBps3V+wnrC1idhIIMGlviH0FtrX9EIPdAlVHvXC7FQZLhmHBRz+pLaiWg==", + "version": "3.972.58", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.58.tgz", + "integrity": "sha512-vyGtvK1rY940eq7JT0yIGKuZ+2kpPSJcHibSvGlit5oiMFDamzC7cxBGLl4FLnd6suihMXDI2FSF2dL6TmBqPA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.974.29", - "@aws-sdk/types": "^3.973.15", - "@smithy/core": "^3.29.0", - "@smithy/types": "^4.15.1", + "@aws-sdk/core": "^3.975.2", + "@aws-sdk/types": "^3.974.1", + "@smithy/core": "^3.29.3", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -477,9 +477,9 @@ } }, "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -489,17 +489,17 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.972.57", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.57.tgz", - "integrity": "sha512-/vp6i5YEliJqRm5k/BDmYjAyRAMTdkjW6UciVRk9oh/0OfDCWeb/ih7hqte4lFvKXkIbsqe9AdK9LQK6NGardw==", + "version": "3.972.60", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.60.tgz", + "integrity": "sha512-g9b9YzDrD5pcKiPBJfCSXRfFMrA39eR0guUhZ5SRm+7vMAVc43+effxbcamxBjSd5bUhrdKo5te/yQuWurLXLA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.974.29", - "@aws-sdk/types": "^3.973.15", - "@smithy/core": "^3.29.0", - "@smithy/fetch-http-handler": "^5.6.2", - "@smithy/node-http-handler": "^4.9.2", - "@smithy/types": "^4.15.1", + "@aws-sdk/core": "^3.975.2", + "@aws-sdk/types": "^3.974.1", + "@smithy/core": "^3.29.3", + "@smithy/fetch-http-handler": "^5.6.5", + "@smithy/node-http-handler": "^4.9.5", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -507,9 +507,9 @@ } }, "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -519,23 +519,23 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.972.62", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.62.tgz", - "integrity": "sha512-pQIRiQQs+MUlVnJdWJ7/6KS0WxcLRVfut57OFgwC3cnM1F8mXw3Kh4gAVwj6AtvD6CWx8x6+po4ENRcqe64XrQ==", + "version": "3.973.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.2.tgz", + "integrity": "sha512-Yr7yxNyQ8aHt9Ww0RPFUZx+xiem+vl7vuwhP0tniTijoesJNV5jou9HCgVpI0GEPAF+89TkOvilE5uRrZJnjaw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.974.29", - "@aws-sdk/credential-provider-env": "^3.972.55", - "@aws-sdk/credential-provider-http": "^3.972.57", - "@aws-sdk/credential-provider-login": "^3.972.61", - "@aws-sdk/credential-provider-process": "^3.972.55", - "@aws-sdk/credential-provider-sso": "^3.972.61", - "@aws-sdk/credential-provider-web-identity": "^3.972.61", - "@aws-sdk/nested-clients": "^3.997.29", - "@aws-sdk/types": "^3.973.15", - "@smithy/core": "^3.29.0", - "@smithy/credential-provider-imds": "^4.4.5", - "@smithy/types": "^4.15.1", + "@aws-sdk/core": "^3.975.2", + "@aws-sdk/credential-provider-env": "^3.972.58", + "@aws-sdk/credential-provider-http": "^3.972.60", + "@aws-sdk/credential-provider-login": "^3.972.64", + "@aws-sdk/credential-provider-process": "^3.972.58", + "@aws-sdk/credential-provider-sso": "^3.973.2", + "@aws-sdk/credential-provider-web-identity": "^3.972.64", + "@aws-sdk/nested-clients": "^3.997.32", + "@aws-sdk/types": "^3.974.1", + "@smithy/core": "^3.29.3", + "@smithy/credential-provider-imds": "^4.4.7", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -543,9 +543,9 @@ } }, "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -555,16 +555,16 @@ } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.972.61", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.61.tgz", - "integrity": "sha512-jtrxWwC7slqxh7DnAWHrwsA3UwCsnlypdYtavGT7EX5p791wxWQys7QzkCZ7JvOMAyylDtPoxyV+ic0zg3rV9g==", + "version": "3.972.64", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.64.tgz", + "integrity": "sha512-YQoSI4d6kXvoenoG/0Jv/PqaAuukHzGmGXGyHBQYeEUNsYovlNAn/Sw1wp/WQbhcQ3HsEMGgjEahvD3igz6ecQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.974.29", - "@aws-sdk/nested-clients": "^3.997.29", - "@aws-sdk/types": "^3.973.15", - "@smithy/core": "^3.29.0", - "@smithy/types": "^4.15.1", + "@aws-sdk/core": "^3.975.2", + "@aws-sdk/nested-clients": "^3.997.32", + "@aws-sdk/types": "^3.974.1", + "@smithy/core": "^3.29.3", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -572,9 +572,9 @@ } }, "node_modules/@aws-sdk/credential-provider-login/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -584,21 +584,21 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.972.64", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.64.tgz", - "integrity": "sha512-zyKVYDyMR9VQL/kPi03ygN2vtD9uLMuWRLoJ77KxgZZaS1VlJloI+SzleF9Zg4HWUI+AIu+ZRs8zsJFNqbrxsw==", + "version": "3.972.68", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.68.tgz", + "integrity": "sha512-4akjzW9CjorByYfqXBXmYUh/h7Io3U4DtVgGGh9TQraZ7ZlyJqNyHwDRGiUFnHD+BTOeTbCesCa4sJaK7BGZ7A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "^3.972.55", - "@aws-sdk/credential-provider-http": "^3.972.57", - "@aws-sdk/credential-provider-ini": "^3.972.62", - "@aws-sdk/credential-provider-process": "^3.972.55", - "@aws-sdk/credential-provider-sso": "^3.972.61", - "@aws-sdk/credential-provider-web-identity": "^3.972.61", - "@aws-sdk/types": "^3.973.15", - "@smithy/core": "^3.29.0", - "@smithy/credential-provider-imds": "^4.4.5", - "@smithy/types": "^4.15.1", + "@aws-sdk/credential-provider-env": "^3.972.58", + "@aws-sdk/credential-provider-http": "^3.972.60", + "@aws-sdk/credential-provider-ini": "^3.973.2", + "@aws-sdk/credential-provider-process": "^3.972.58", + "@aws-sdk/credential-provider-sso": "^3.973.2", + "@aws-sdk/credential-provider-web-identity": "^3.972.64", + "@aws-sdk/types": "^3.974.1", + "@smithy/core": "^3.29.3", + "@smithy/credential-provider-imds": "^4.4.7", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -606,9 +606,9 @@ } }, "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -618,15 +618,15 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.972.55", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.55.tgz", - "integrity": "sha512-x0XjjF0l1WGRtK2vEhTZqCguQuAIZLep9l2+eeEmuxQQjjD3BlGQXY5xADR+l3t576UX+dxRkRtTjEu40l81Vw==", + "version": "3.972.58", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.58.tgz", + "integrity": "sha512-1nYitRCaDmXWUrpBJt6WlcGjLx1JVsMY8rlYuHHsTYTSaYikbixYdQSyINN2VYq1F798uTO9qHAzytL25M8g3A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.974.29", - "@aws-sdk/types": "^3.973.15", - "@smithy/core": "^3.29.0", - "@smithy/types": "^4.15.1", + "@aws-sdk/core": "^3.975.2", + "@aws-sdk/types": "^3.974.1", + "@smithy/core": "^3.29.3", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -634,9 +634,9 @@ } }, "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -646,17 +646,17 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.972.61", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.61.tgz", - "integrity": "sha512-d/V0VRsz73i+PHhbult/tx0Y1+de1SNQVsXkcQCmpfeBq7uODy/RTxNsOLpT9ZVHxcRNzbQFuywLKC33fUMIxA==", + "version": "3.973.2", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.2.tgz", + "integrity": "sha512-pjMLaLU/JZi5lVfmR14V1OZqRBTuMHf6AwGNZA0K9hK+JKtO3jcLBarfD8iq5oc8cSowvc/9R32sqMVXZPo6xQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.974.29", - "@aws-sdk/nested-clients": "^3.997.29", - "@aws-sdk/token-providers": "3.1081.0", - "@aws-sdk/types": "^3.973.15", - "@smithy/core": "^3.29.0", - "@smithy/types": "^4.15.1", + "@aws-sdk/core": "^3.975.2", + "@aws-sdk/nested-clients": "^3.997.32", + "@aws-sdk/token-providers": "3.1087.0", + "@aws-sdk/types": "^3.974.1", + "@smithy/core": "^3.29.3", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -664,9 +664,9 @@ } }, "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -676,16 +676,16 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.972.61", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.61.tgz", - "integrity": "sha512-Bv4n3NOI6hPy+rmr6Bw9R6LnBVRkcp3ncj2E2IKSYJG+0UkysSitWMvbgndNvMxDw7gE1pQ/ErwkNceuKwj7zQ==", + "version": "3.972.64", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.64.tgz", + "integrity": "sha512-7Buc7p0OvDHW7iBsu4b+YdS0WnaFBDGKDfbVQqaac9dkWiSiUtIoarBDsA1RmOVXZijaZJDoHJFIQiicQvWRlQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.974.29", - "@aws-sdk/nested-clients": "^3.997.29", - "@aws-sdk/types": "^3.973.15", - "@smithy/core": "^3.29.0", - "@smithy/types": "^4.15.1", + "@aws-sdk/core": "^3.975.2", + "@aws-sdk/nested-clients": "^3.997.32", + "@aws-sdk/types": "^3.974.1", + "@smithy/core": "^3.29.3", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -693,9 +693,9 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -705,18 +705,18 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.997.29", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.29.tgz", - "integrity": "sha512-ot6v8J5W8P0w6ryyuIkXP1bHZHTlvwtn83mVCYaBE0GJ6tJX4vPSBx7M98w9O4wmmDruFsDBUMjhEHA+OosUFQ==", + "version": "3.997.32", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.32.tgz", + "integrity": "sha512-6Yj2fr9XF67cndITea48rchTdVr3VGx6PN47bIKNinJAjLkmaIlz/4EBPCgJ8UmhVopiXmeAuPLI3+DXDDbMhQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.974.29", - "@aws-sdk/signature-v4-multi-region": "^3.996.38", - "@aws-sdk/types": "^3.973.15", - "@smithy/core": "^3.29.0", - "@smithy/fetch-http-handler": "^5.6.2", - "@smithy/node-http-handler": "^4.9.2", - "@smithy/types": "^4.15.1", + "@aws-sdk/core": "^3.975.2", + "@aws-sdk/signature-v4-multi-region": "^3.996.40", + "@aws-sdk/types": "^3.974.1", + "@smithy/core": "^3.29.3", + "@smithy/fetch-http-handler": "^5.6.5", + "@smithy/node-http-handler": "^4.9.5", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -724,9 +724,9 @@ } }, "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -736,14 +736,14 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.996.38", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.38.tgz", - "integrity": "sha512-C379Sk+MiFZCfWZphKlMyLHKxV22OjoGM5KJjj5IJNJcOCWL4IGIpnEGzv1FQiRwhYXfq55SJMfxlqPE08JJ9g==", + "version": "3.996.40", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.40.tgz", + "integrity": "sha512-wrGZ/authosokclY1DXsiWT/1WjfCI22FuZGgdcilF+XLTXs5dCjAtiFYSPsEToZkbm3Lj2YP8PoWg0yoMNu0g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.973.15", - "@smithy/signature-v4": "^5.6.1", - "@smithy/types": "^4.15.1", + "@aws-sdk/types": "^3.974.1", + "@smithy/signature-v4": "^5.6.3", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -751,9 +751,9 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -763,16 +763,16 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.1081.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1081.0.tgz", - "integrity": "sha512-kduAeI6cL+zqwj3gjPh9LhuX7kBZ83msYxutavaR+UPm5K8J7iThJBvNRAsFNyWTji92CSU8dogUgvi9T0BehA==", + "version": "3.1087.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1087.0.tgz", + "integrity": "sha512-umM+qNq16f2fH+VLM5MqXW4ORNQAjk+TOSto73xbUHcKaU41L48j786r3UWQYlejeJk37NlvRYgxBT+MBkfaYQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.974.29", - "@aws-sdk/nested-clients": "^3.997.29", - "@aws-sdk/types": "^3.973.15", - "@smithy/core": "^3.29.0", - "@smithy/types": "^4.15.1", + "@aws-sdk/core": "^3.975.2", + "@aws-sdk/nested-clients": "^3.997.32", + "@aws-sdk/types": "^3.974.1", + "@smithy/core": "^3.29.3", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -780,9 +780,9 @@ } }, "node_modules/@aws-sdk/token-providers/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -792,12 +792,12 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.973.15", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.15.tgz", - "integrity": "sha512-IULn8uBV/SMtmOIANsm4WHXIOtVPBWfOWs3WGL0j/sI+KhaYehvOw0ET+9urnn8MBpiijuU/0JOpuwKOE451PQ==", + "version": "3.974.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.974.1.tgz", + "integrity": "sha512-W0IQZR0eaBqlBFIIofMapaWkw1W0U+Xi4dvW+BqwmCEMd8Ng2U6IhkxuPSjMVnR8klLjfuS9PeZWUl1N6UaZdg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.15.1", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -805,9 +805,9 @@ } }, "node_modules/@aws-sdk/types/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -817,12 +817,12 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.972.33", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.33.tgz", - "integrity": "sha512-ezbwz9WpuLctm6o7P2t2naDhVVPI5jFGrVefVybhcKGjU57VIyT46pQVO0RI2RYkUdhdj2Z9uSIlAzGZE9NW9A==", + "version": "3.972.35", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.35.tgz", + "integrity": "sha512-pXzaWe3evZhjxDXAlMnqISe/XefTCGwBJG4nFTXaWSgAnMkqPEhxEPqJNhhpGesEvKFhvNpnozJJ4GTL11bRYw==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.15.1", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -830,9 +830,9 @@ } }, "node_modules/@aws-sdk/xml-builder/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -881,7 +881,6 @@ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", @@ -1405,7 +1404,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=20.19.0" }, @@ -1454,7 +1452,6 @@ } ], "license": "MIT", - "peer": true, "engines": { "node": ">=20.19.0" } @@ -1677,7 +1674,6 @@ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -1725,7 +1721,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" @@ -1737,7 +1732,6 @@ "integrity": "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==", "license": "MIT", "optional": true, - "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -1837,9 +1831,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", - "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz", + "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==", "dev": true, "license": "MIT", "dependencies": { @@ -1849,7 +1843,7 @@ "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.1", + "js-yaml": "^4.3.0", "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" }, @@ -1861,9 +1855,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.39.4", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", - "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz", + "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==", "dev": true, "license": "MIT", "engines": { @@ -1916,31 +1910,31 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", - "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz", + "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==", "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.11" + "@floating-ui/utils": "^0.2.12" } }, "node_modules/@floating-ui/dom": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", - "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz", + "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.5", - "@floating-ui/utils": "^0.2.11" + "@floating-ui/core": "^1.8.0", + "@floating-ui/utils": "^0.2.12" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", - "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.9.tgz", + "integrity": "sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==", "license": "MIT", "dependencies": { - "@floating-ui/dom": "^1.7.6" + "@floating-ui/dom": "^1.8.0" }, "peerDependencies": { "react": ">=16.8.0", @@ -1948,11 +1942,41 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", - "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz", + "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==", + "license": "MIT" + }, + "node_modules/@formatjs/fast-memoize": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.1.7.tgz", + "integrity": "sha512-zXfhLpvA6T7+efdt9JLbBwZ00tT7NsBMDVnDu8rpHeNNv8KfRZAMo2gkG0k9lK/Nzc//3kJ9pImsfuJxk3KhUA==", "license": "MIT" }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "3.5.14", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-3.5.14.tgz", + "integrity": "sha512-jDvgtoLqe3U6yzoBlToMTkWBe38qSi7LN7kFlnXzd5ig8nn+4tSlED0xtEtdYakZVZGJJY2rW1D5xS3BFZh6kA==", + "license": "MIT", + "dependencies": { + "@formatjs/icu-skeleton-parser": "2.1.11" + } + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-2.1.11.tgz", + "integrity": "sha512-j8cUmOJzVgkHuS0QiQ6ga76UIoLOFSAMWhs7aZJztH3aAdCOAE6vpC8KVvFB4cU10ON0y2/5oOVmPJ43s2lTwA==", + "license": "MIT" + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.8.12.tgz", + "integrity": "sha512-5H3r5ZJ2jZqHEv9K343lvHmeMDKMxssawAVD2H4J9xtu0ZXb6MlNxwLqdwBxJSHFU0C24KSZnffgmAi+59mK4A==", + "license": "MIT", + "dependencies": { + "@formatjs/fast-memoize": "3.1.7" + } + }, "node_modules/@hono/node-server": { "version": "1.19.14", "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.14.tgz", @@ -2996,13 +3020,319 @@ "url": "https://github.com/sponsors/Boshen" } }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@playwright/test": { "version": "1.61.1", "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.61.1.tgz", "integrity": "sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "playwright": "1.61.1" }, @@ -4813,6 +5143,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@schummar/icu-type-parser": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/@schummar/icu-type-parser/-/icu-type-parser-1.21.5.tgz", + "integrity": "sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==", + "license": "MIT" + }, "node_modules/@sec-ant/readable-stream": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", @@ -4854,12 +5190,12 @@ } }, "node_modules/@smithy/core": { - "version": "3.29.1", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.29.1.tgz", - "integrity": "sha512-qoiY4nrk5OCu1+eIR1VB8l5DmON/oKiqrd5zZFAhXJXjJlLWQusKEW/SkBDAtGDcPaz86m9kfcE1lngU0GlM6A==", + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.29.4.tgz", + "integrity": "sha512-G1GRglAabzEhqghJMBAd54FkRS7SAFGHEwbhcI9r+O+LIMuFsLyXkLZkCoFSgAglRu8s/URVXJB0hglq3ZipIg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.15.1", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -4867,9 +5203,9 @@ } }, "node_modules/@smithy/core/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -4879,13 +5215,13 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.4.6.tgz", - "integrity": "sha512-B2WQ/PV/H6Jeg3lrIq6bKUfa6Hy01mtK7CGs6lhjzHA6k4aagldH6T6eEjnzKl4HI0cJnAsxfJ19pgb5PV+CVQ==", + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.4.9.tgz", + "integrity": "sha512-2nfV4qRKiYeXU4zD2vvSCfg5dfp/BuhrM73vt7q9gzBhxs4rbPxXY21wo+kyI3bRmXcEGRnCLTaW8O437jzHIg==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.29.1", - "@smithy/types": "^4.15.1", + "@smithy/core": "^3.29.4", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -4893,9 +5229,9 @@ } }, "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -4905,13 +5241,13 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.6.3.tgz", - "integrity": "sha512-CwCc/7SMTj45y97MUnDTbTaxvtAsiNNRm81z3abROIuMbMsC2Iy5EKfkkVdsKrz8WExQAAMx1EJapq+9j4fFTQ==", + "version": "5.6.6", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.6.6.tgz", + "integrity": "sha512-NHLgAlORUFZjn5ZfhYuyyKMlXA1WLYOdGxEhyNxrPpbJzoacGbl0chn1lN2KiZ8mpNVk0tV5607CSYlYs/OFgw==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.29.1", - "@smithy/types": "^4.15.1", + "@smithy/core": "^3.29.4", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -4919,9 +5255,9 @@ } }, "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -4966,13 +5302,13 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.9.3.tgz", - "integrity": "sha512-qZTa4gQFUo8RM02rk6q5UVTDLNrQ1oS20LsepBzqq1QBVc/EHJ03OOUADcqMZiXHArW+Y7+OGY0BpdTwZRq/Yg==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.9.6.tgz", + "integrity": "sha512-odd+HYx3OLcXRSEz0ZeF3JQdSYdK8QnRgA2N87cPW7coWIbKfRk7a9VQjfeWQLqnzrDLk23KMEn46p8N7M/JFg==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.29.1", - "@smithy/types": "^4.15.1", + "@smithy/core": "^3.29.4", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -4980,9 +5316,9 @@ } }, "node_modules/@smithy/node-http-handler/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -4992,13 +5328,13 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.6.2.tgz", - "integrity": "sha512-QgHflghMoPxCJ9axiCVh8KZfbC9fuP6vkXXyK//E3cq7nLaSSyyLj0GAoqVWezYeDQmXIZhmlRvLE16jsqDK6g==", + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.6.5.tgz", + "integrity": "sha512-MO5VEhwVl0BN7xVoVeNrZfiUFoQtqxUbgl6/RwOTlMMxCSjblG8twSrVTwz3J4w9WZxd2rBfBAUXjH77agspBg==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.29.1", - "@smithy/types": "^4.15.1", + "@smithy/core": "^3.29.4", + "@smithy/types": "^4.16.1", "tslib": "^2.6.2" }, "engines": { @@ -5006,9 +5342,9 @@ } }, "node_modules/@smithy/signature-v4/node_modules/@smithy/types": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.15.1.tgz", - "integrity": "sha512-x3L0XSACF6UYzKpa9biqiRMgvH5+wnFFew9Tm/grFYqgaupPwx/+ojDPpPJM8dZON3S9tjz5U+PQYsCBd1Mw5Q==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.16.1.tgz", + "integrity": "sha512-0JFs3V2y2M9tKW5na/qxe69Zv+uxLMO7QBbhxF/FHu/Gp2NFZAAL9tWl9PU02xxo07pb3G9FTyjNc6D5uZrJIg==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -5126,6 +5462,204 @@ "dev": true, "license": "MIT" }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.43.tgz", + "integrity": "sha512-v1aVuvXdo/BHxJzco9V2xpHrvwWmhfS8t6gziY5wJxd+Z2h8AeJRnAwPD8itCDaGXVBwJ/CaKfxEzTkG0Va0OA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.43.tgz", + "integrity": "sha512-lp3d4Lamc8dt5huYdGLSR+9hLxmfr1jb0l+4XXG2zPqZwYWRN9R0U2qYoTrggiU2RWW0oV9VbWM3kBnqIc2kdQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.43.tgz", + "integrity": "sha512-JWTQQELtsG5GgphDrr/XqqmM2pDN3cZqbMS0Mrg+iTiXL3F74sn/S2IyYE/5u4h2KLkTf9qQ7dXyxsbx7YzkeA==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.43.tgz", + "integrity": "sha512-B4otJRdPWIsmiSBf0uG7Z/+vMWmkufjz5MmYxubwKuZazDW14Zd3symga1N62QR4RT+kEFeHEgsXfZGyn/w0hw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.43.tgz", + "integrity": "sha512-6zB6OnpViBxYy4tgY3v2i6AZY9fwkcHZ032UOwtwUuW1d19sdT07qF0kZe6/3UR1tUaK6jjg2rmVcUIBCEYVjQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-ppc64-gnu": { + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.43.tgz", + "integrity": "sha512-coxE1ZWdB3uSDVNoEtYNrRi/1epvckZx9cTJ8ICUxTMTxGk+yvQ/Twacp3ruZSaMPGCriUjP86C37VhaT6nyRg==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-s390x-gnu": { + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.43.tgz", + "integrity": "sha512-lXfLhs+LpBsD5inuYx+YDH5WsPPBQ95KPUiy8P5wq9ob9xKDZFqwNfU2QW6bGO8NqRO/H9JQomTSt5Yyh+FGfA==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.43.tgz", + "integrity": "sha512-07XnKwTmKy8TGOZG3D9fRnLWGynxPjwQnZLVmBFbo6F+7vHYzBIOuwXEhemrChBWb6yDNZsVCcMWCPX6FDD2xg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.43.tgz", + "integrity": "sha512-TJc+bsSIaBh+hZvZ5GRtW/K1bw66TJ9vsUwvVIsZdiWxU5ObLwZvfcnZ3UpgVfMnFibRes9uriJrQNBHEEogRQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.43.tgz", + "integrity": "sha512-jfd7s2/bUQYkOHLs+LWQNKZdmDa8+sufKLllhpWAhVQ2GDCwsHe3vR/j+OSiItZNtkzFuaawa3+SAKz9y5gYfw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.43.tgz", + "integrity": "sha512-rLAE8JvucqEW1ZGohxPQrQWPBQeJG4+ypKbWfdlU/qmKScvCkxf9/Jxnzki1dkUQCQ7P5Enp13RlvqOlvx/32g==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.43.tgz", + "integrity": "sha512-h8MLDHZcfIukwQWj03rIJZx1I0E81AYj2X7J/nGErG4nz+QAv6G1Z+peotvinL3lqpbo32tLYSMFo32/ySzxKg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -5135,6 +5669,15 @@ "tslib": "^2.8.0" } }, + "node_modules/@swc/types": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.27.tgz", + "integrity": "sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, "node_modules/@tailwindcss/node": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.2.tgz", @@ -5424,7 +5967,6 @@ "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -5624,9 +6166,9 @@ } }, "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", "license": "MIT", "dependencies": { "@types/unist": "*" @@ -5666,7 +6208,6 @@ "integrity": "sha512-OScDchr2fwuUmWdf4kZ9h7PcJiYDVInhJizG/biAq3cAvqwYktuy/TYGGdZNMtNTFUP7rnb0NU4TUdm82kt4Rg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } @@ -5676,7 +6217,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -5687,7 +6227,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -5735,17 +6274,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.63.0.tgz", - "integrity": "sha512-rvwSgqT+DHpWdzfSzPatRLm02a0GlESt++9iy3hLCDY4BgkaLcl8LBi9Yh7XGFBpwcBE/K3024QuXWTpbz4FfQ==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.64.0.tgz", + "integrity": "sha512-CGvQPBxN3wZLu6Rz2kFUpZeoCm78xUic92ck39KPePkO1NPOwjCqdQnm5Q87tpWw9vcBvW8XLrDXjH9PWYtJ3Q==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.63.0", - "@typescript-eslint/type-utils": "8.63.0", - "@typescript-eslint/utils": "8.63.0", - "@typescript-eslint/visitor-keys": "8.63.0", + "@typescript-eslint/scope-manager": "8.64.0", + "@typescript-eslint/type-utils": "8.64.0", + "@typescript-eslint/utils": "8.64.0", + "@typescript-eslint/visitor-keys": "8.64.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -5758,15 +6297,15 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.63.0", + "@typescript-eslint/parser": "^8.64.0", "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.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", "dev": true, "license": "MIT", "engines": { @@ -5774,17 +6313,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.63.0.tgz", - "integrity": "sha512-gwh4gvvlaVDKKxyfxMG+Gnu1u9X0OQBwyGLkbwB65dIzBKnxeRiJlNFqlI3zwVhNXJIs6qV7mlFCn/BIajlVig==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.64.0.tgz", + "integrity": "sha512-KA0OshtlcCCXmbfqyZkM5pV3/WNraJf7DkJRLpyrmwPtud57H5BDX7C3k0LPSPxpprfRL+cJDGabF10mvNCoCw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.63.0", - "@typescript-eslint/types": "8.63.0", - "@typescript-eslint/typescript-estree": "8.63.0", - "@typescript-eslint/visitor-keys": "8.63.0", + "@typescript-eslint/scope-manager": "8.64.0", + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/typescript-estree": "8.64.0", + "@typescript-eslint/visitor-keys": "8.64.0", "debug": "^4.4.3" }, "engines": { @@ -5800,14 +6338,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.63.0.tgz", - "integrity": "sha512-e5dh0/UI0ok53AlZ5wRkXCB32z/f2jUZqPR/ygAw5WYaSw8j9EoJWlS7wQjr/dmOaqWjnPIn2m+HhVPCMWGZVQ==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.64.0.tgz", + "integrity": "sha512-tk4WpOJ6IEbGrVHaNmM0YRrwAD3exZlIK3iadQNAxh4YKk6jvUQ4ecq18n+v7+meh+cJ3j+D8nbk8sRKhlwLQg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.63.0", - "@typescript-eslint/types": "^8.63.0", + "@typescript-eslint/tsconfig-utils": "^8.64.0", + "@typescript-eslint/types": "^8.64.0", "debug": "^4.4.3" }, "engines": { @@ -5822,14 +6360,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.63.0.tgz", - "integrity": "sha512-uUyfMWCnDSN8bCpcrY8nGP2BLkQ9Xn0GsipcONcpIDWhwhO4ZSyHvyS14U3X75mzxWxL3I2UZIrenTzdzcJO8A==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.64.0.tgz", + "integrity": "sha512-CXEaFdYXjSTgKhisNkwCcJwTP8Pl+fmRrEQrri4nm3vU743bALrxzLmq7fHG/7e6a5xO0lDYeURpZmBuhHk54w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.63.0", - "@typescript-eslint/visitor-keys": "8.63.0" + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/visitor-keys": "8.64.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5840,9 +6378,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.63.0.tgz", - "integrity": "sha512-sUAbkulqBAsncKnbRP3+7CtQFRKicexnj7ZwNC6ddCR7EmrXvjvdCYMJbUIqMd6lwoEriZjwLo08aS5tSjVMHg==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.64.0.tgz", + "integrity": "sha512-2yo8rRNKuzbVWQp5kslhANqZ2uDAeROQHBRZNPu8JDsHmeFNj/XJJhX/FhNUWmkHHvoNsKa6+tHJiig87EzsQw==", "dev": true, "license": "MIT", "engines": { @@ -5857,15 +6395,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.63.0.tgz", - "integrity": "sha512-Nzzh/OGxVCOjObjaj1CQF2RUasyYy2Jfuh+zZ3PjLzG2fYRriAiZLib9UKtO+CpQAS3YHiAS+ckZDclwqI1TPA==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.64.0.tgz", + "integrity": "sha512-XWG4Fmmv/6SvyS9nH8jWrKs6terwJvE8cyRt1CzYYqzp9OrPhCT4cMc/f7C6RZCwG+qMmiffJS1/qJP8G1URtg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.63.0", - "@typescript-eslint/typescript-estree": "8.63.0", - "@typescript-eslint/utils": "8.63.0", + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/typescript-estree": "8.64.0", + "@typescript-eslint/utils": "8.64.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -5882,9 +6420,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.63.0.tgz", - "integrity": "sha512-xyLtl9DUBBFrcJS4x2pIqGLH68/tC2uOa4Z7pUteW09D3bXnnXUom4dyPikzWgB7llmIc1zoeI3aoUdC4rPK/Q==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.64.0.tgz", + "integrity": "sha512-qjhfuTfLXjA4IOzXvz0rTjT01BqEiIgPoUeMwiEjnaHKJMTNo8rH5pYW1a2L/0Dnux2fPC85AeyJoWaGa8WxTA==", "dev": true, "license": "MIT", "engines": { @@ -5896,16 +6434,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.63.0.tgz", - "integrity": "sha512-ygBkU+B7ex5UI/gKhaqexWev79uISfIv7XQCRNYO/jmD8rGLPyWLAb3KMRT6nd8Gt9bmUBi9+iX6tBdYfOY81Q==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.64.0.tgz", + "integrity": "sha512-Pztpsn1aCE1oWDvDEfUk31nngvvF7vUB5SwHFEaZIFpvw7WJtqUHHL4plBZDA9HfWJJjL13BdG0YrJInTUvoVA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.63.0", - "@typescript-eslint/tsconfig-utils": "8.63.0", - "@typescript-eslint/types": "8.63.0", - "@typescript-eslint/visitor-keys": "8.63.0", + "@typescript-eslint/project-service": "8.64.0", + "@typescript-eslint/tsconfig-utils": "8.64.0", + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/visitor-keys": "8.64.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -5976,16 +6514,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.63.0.tgz", - "integrity": "sha512-fUKaeAvrTuQg/Tgt3nliAUSZHJM6DlCcfyEmxCvlX8kieWSStBX+5O5Fnidtc3i2JrH+9c/GL4RY2iasd/GPTA==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.64.0.tgz", + "integrity": "sha512-aJUGVB3+U0htrrCjoA8qukw8cm8fNCGAxK/tVoS70k8aeb7DETKeFozRiVFIwEeN9WJLsjaP3ph8I60tY2XZoQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.63.0", - "@typescript-eslint/types": "8.63.0", - "@typescript-eslint/typescript-estree": "8.63.0" + "@typescript-eslint/scope-manager": "8.64.0", + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/typescript-estree": "8.64.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6000,13 +6538,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.63.0.tgz", - "integrity": "sha512-UexrHGnGTpbuQHct2ExOc2ZcFbGUS9FOesCxxqdBGcpI1BxYu/LZ6U8Aq6/72XtF/qRBk9nhuGHFJIXXMhPMdw==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.64.0.tgz", + "integrity": "sha512-mrtuL8Nsn6gi2H4mo5KMTp823M+3Q19Ew/i+Zlikq20tIMm99C3Ez0dCmkWWnxut20esQvTg8aUSEhMcAOXhEw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.63.0", + "@typescript-eslint/types": "8.64.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -6031,9 +6569,9 @@ } }, "node_modules/@ungap/structured-clone": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.2.tgz", - "integrity": "sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", + "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", "license": "ISC" }, "node_modules/@unrs/resolver-binding-android-arm-eabi": { @@ -6366,7 +6904,6 @@ "integrity": "sha512-IM49HmthevbgAO4anp1hwtoT9wYe59w0LR00gr+eagHE+ZJ5lK4sLPeO0ubgoJcwLk6dehU3R24N+FbEEKDc8g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@bcoe/v8-coverage": "^1.0.2", "@vitest/utils": "4.1.10", @@ -6525,7 +7062,6 @@ "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6887,9 +7423,9 @@ "license": "MIT" }, "node_modules/ast-v8-to-istanbul": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.4.tgz", - "integrity": "sha512-0bC0/4bTSrnwdhU3IsZDwEdojvuPrSg59OYZfKsLRtJZ0u8VBx9DebfqqG8bRdCC0I7vjgxmPi41P0lpkhJHtA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.5.tgz", + "integrity": "sha512-UPAgKJFSEGMWSDr3LX4tqnAb4f7KGT8O40Tyx8wbYmmZ/yn58lNCm8h3svs3eXgiGd5AXxz8NDOvXWvicq+rJA==", "dev": true, "license": "MIT", "dependencies": { @@ -7024,9 +7560,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.42", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.42.tgz", - "integrity": "sha512-c/jurFrDLyui7o1J86yLkRu4LMsTYcBohveus7/I2Hzdn9KIP2bdJPTue/lR1KH46enoPbD77GKeSYNdyPoD3Q==", + "version": "2.10.43", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.43.tgz", + "integrity": "sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -7152,9 +7688,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.5.tgz", - "integrity": "sha512-Cu2E6QejHWzuDMTkuwgpABFgDfZrXLQq5V13YOACZx4mFAG4IwGTbTfHPMr4WtxlHoXSM8FIuRwYYCz5XiabaQ==", + "version": "4.28.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.6.tgz", + "integrity": "sha512-FQBYNK15VMslhLHpA7+n+n1GOlF1kId2xcCg7/j95f24AOF6VDYMNH4mFxF7KuaTdv627faazpOAjFzMrfJOUw==", "dev": true, "funding": [ { @@ -7171,12 +7707,11 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.10.42", - "caniuse-lite": "^1.0.30001800", - "electron-to-chromium": "^1.5.387", - "node-releases": "^2.0.50", + "caniuse-lite": "^1.0.30001803", + "electron-to-chromium": "^1.5.389", + "node-releases": "^2.0.51", "update-browserslist-db": "^1.2.3" }, "bin": { @@ -7284,9 +7819,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001803", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001803.tgz", - "integrity": "sha512-g/uHREV2ZpK9qMalCsWaxmA6ol+DX8GYhuf3T40RKoP+oL7vhRJh8LNt73PCjpnR6l14FzfPrB5Yux4PKm2meg==", + "version": "1.0.30001805", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001805.tgz", + "integrity": "sha512-52noaS3DubycKSXaU30TwPGIp+POyQSUVa5jBEq3vkRkY0kjyb3LQgvhU6WGyCcyXqVLWO0Cw0Q6BSdD0kUfVA==", "funding": [ { "type": "opencollective", @@ -8113,7 +8648,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=8" @@ -8169,9 +8703,9 @@ "license": "MIT" }, "node_modules/dompurify": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.11.tgz", - "integrity": "sha512-zhlUV12GsaRzMsf9q5M254YhA4+VuF0fG+QFqu6aYpoGlKtz+w8//jBcGVYBgQkR5GHjUomejY84AV+/uPbWdw==", + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.12.tgz", + "integrity": "sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -8229,9 +8763,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.389", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.389.tgz", - "integrity": "sha512-cEto7aeOqBfU1D+c5py5pE+ooscKE75JifxLBdFUZsqAxRS6y7kebtxAZvICszSl05gPjYHDTjY+lXpyGvpJbg==", + "version": "1.5.391", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.391.tgz", + "integrity": "sha512-YmCu4856jkgKT1Nh6fwRdeVrM6Ydf/fBnq51tpmSfX+jOcUMTxh31yH6hjKScRenhB2oDSvA9oooxcpjogPeig==", "dev": true, "license": "ISC" }, @@ -8435,9 +8969,9 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.3.tgz", - "integrity": "sha512-0PuBxFi+4uPanB97iDxCLWuHeYud2FALrw5HFZGtAF38UpJDbDC8frwp2cnDyae692CQ0dou60UwWfhgsa4U/g==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.4.0.tgz", + "integrity": "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8463,9 +8997,9 @@ } }, "node_modules/es-module-lexer": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.0.tgz", - "integrity": "sha512-KLdwQm2NvGLDkQDCGvmiQrhkd0JbMzXthwQAUgWjQuQdBLFa3eiBP5arXZyA+f8x+x7OXgud6bq2rxjGtHV2tw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", + "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", "dev": true, "license": "MIT" }, @@ -8563,20 +9097,19 @@ } }, "node_modules/eslint": { - "version": "9.39.4", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", - "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz", + "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.2", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "9.39.4", + "@eslint/eslintrc": "^3.3.6", + "@eslint/js": "9.39.5", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -9119,7 +9652,6 @@ "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", @@ -9279,9 +9811,9 @@ } }, "node_modules/fast-xml-builder": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.1.tgz", - "integrity": "sha512-tPb5TTWfgfVx5BNSi2xV0eLr89POeXXn0dXIsCJ9m1narrWxeIyx6je9d7Rce/3NyXLbvuQmLkxq+RuxMWejvw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.3.0.tgz", + "integrity": "sha512-F74cZEdCvuw9P41GAC3rod4X04jjWGM1JPEv/GWSqFTWLsdyMSBMBMlm9Hk3GLBgLBbdBNY8yee0pQh2RBVESQ==", "funding": [ { "type": "github", @@ -9290,14 +9822,14 @@ ], "license": "MIT", "dependencies": { - "path-expression-matcher": "^1.5.0", - "xml-naming": "^0.1.0" + "path-expression-matcher": "^1.6.2", + "xml-naming": "^0.3.0" } }, "node_modules/fast-xml-parser": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.9.3.tgz", - "integrity": "sha512-brCNCeScma/kqa54J4PIDriSSSLssRkuYaUCpvHJulGc3HGI/xxKUCTDcYkAdqJsyb//ydpbxecjC3hB9+tb/g==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.10.0.tgz", + "integrity": "sha512-SLhnTEqE5QpJHq/6zl9bsmImEP2adv+y6Wy+cJa7nVTRzQh1OZfCe9k29M5xN74LWnu0xa1zrUrq3KnOKl92Fg==", "funding": [ { "type": "github", @@ -9308,10 +9840,10 @@ "dependencies": { "@nodable/entities": "^2.2.0", "fast-xml-builder": "^1.2.0", - "is-unsafe": "^1.0.1", - "path-expression-matcher": "^1.5.0", + "is-unsafe": "^2.0.0", + "path-expression-matcher": "^1.6.2", "strnum": "^2.4.1", - "xml-naming": "^0.1.0" + "xml-naming": "^0.3.0" }, "bin": { "fxparser": "src/cli/cli.js" @@ -9998,12 +10530,11 @@ } }, "node_modules/hono": { - "version": "4.12.28", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.28.tgz", - "integrity": "sha512-YwUvVpSF7m1yOblFPrU3Hbo8XhPheBoiyfGuII6z19LnOr6JpDnyyp7LFNrfV56wS8tpvtBFGRISHN02pDdLOA==", + "version": "4.12.30", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.30.tgz", + "integrity": "sha512-emn+JoJjrN9YTpRDS5it/UI2SO9BAE37T6I3d963RxcZ81G9A4pr2SZTEiiaiKbzx+NKRg5BZ89fCL7gCJCUog==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=16.9.0" } @@ -10100,6 +10631,21 @@ "url": "https://opencollective.com/express" } }, + "node_modules/icu-minify": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/icu-minify/-/icu-minify-4.13.2.tgz", + "integrity": "sha512-XhYQTEnBXBCyF6ERiwItFweoOXDUciujaGjIWCA7RhOCEPDfhVSTtuwfRq6HdVk7tKnYJh+yaurP96zGnaKsPg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/amannn" + } + ], + "license": "MIT", + "dependencies": { + "@formatjs/icu-messageformat-parser": "^3.4.0" + } + }, "node_modules/idb": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/idb/-/idb-5.0.6.tgz", @@ -10201,6 +10747,16 @@ "node": ">= 0.4" } }, + "node_modules/intl-messageformat": { + "version": "11.2.11", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-11.2.11.tgz", + "integrity": "sha512-aDG5bvFRbQvRoT2Bh9FV6yV8t7o0MjEGknZ6pnin5Wt52PJwaBOHDfvz+oPEe78Pl3InQYKugBgCdXijLj6viQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@formatjs/fast-memoize": "3.1.7", + "@formatjs/icu-messageformat-parser": "3.5.14" + } + }, "node_modules/ip-address": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", @@ -10456,7 +11012,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -10512,7 +11067,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -10811,9 +11365,9 @@ } }, "node_modules/is-unsafe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-unsafe/-/is-unsafe-1.0.1.tgz", - "integrity": "sha512-CLK2+VdgERgD96EYm5lUQssZYlRg2tkZnbsxZoacmSiRxiFJ4Nk4SzjCl+Ur+v3kXIY9dTIdb3IH22y1mZ56LA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-unsafe/-/is-unsafe-2.0.0.tgz", + "integrity": "sha512-2LdV822R+wmI86unXA93WCFpL6g+av8ynWk0nrHyJqGop5VoocYsSLFgN8jrfalT6iGeLNM4KXuVSsULP53kEA==", "funding": [ { "type": "github", @@ -11155,6 +11709,7 @@ "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -12717,9 +13272,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.15", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", - "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", "funding": [ { "type": "github", @@ -12761,7 +13316,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -12820,6 +13374,94 @@ } } }, + "node_modules/next-intl": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.13.2.tgz", + "integrity": "sha512-iCYycEP7/PE+1ue4MWBuz1qns6ESA+SGzuXxNMNN1qiYUh2fLhJPiZvHW1zZC7zMTn44aJUglOVZxUb1+hUz6g==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/amannn" + } + ], + "license": "MIT", + "dependencies": { + "@formatjs/intl-localematcher": "^0.8.1", + "@parcel/watcher": "^2.4.1", + "@swc/core": "^1.15.2", + "icu-minify": "^4.13.2", + "negotiator": "^1.0.0", + "next-intl-swc-plugin-extractor": "^4.13.2", + "po-parser": "^2.1.1", + "use-intl": "^4.13.2" + }, + "peerDependencies": { + "next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/next-intl-swc-plugin-extractor": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/next-intl-swc-plugin-extractor/-/next-intl-swc-plugin-extractor-4.13.2.tgz", + "integrity": "sha512-O30N/Y4ifzRe5Sz80jD1Qkg4VY6Zfef4SbHNNE166QkHswBf3/Kygpdd1X52sUUwTCk6uvdisO8ybfAN/VYJHQ==", + "license": "MIT" + }, + "node_modules/next-intl/node_modules/@swc/core": { + "version": "1.15.43", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.43.tgz", + "integrity": "sha512-1CuKjFkPxIgGdeHVuNbkxmBxkcbdc08u0aiI43pFq6yY1tTVKmXT9hFEooyyKs/sJ3xf1GPHyEwTtk9Xl8dvQw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.27" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.15.43", + "@swc/core-darwin-x64": "1.15.43", + "@swc/core-linux-arm-gnueabihf": "1.15.43", + "@swc/core-linux-arm64-gnu": "1.15.43", + "@swc/core-linux-arm64-musl": "1.15.43", + "@swc/core-linux-ppc64-gnu": "1.15.43", + "@swc/core-linux-s390x-gnu": "1.15.43", + "@swc/core-linux-x64-gnu": "1.15.43", + "@swc/core-linux-x64-musl": "1.15.43", + "@swc/core-win32-arm64-msvc": "1.15.43", + "@swc/core-win32-ia32-msvc": "1.15.43", + "@swc/core-win32-x64-msvc": "1.15.43" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/next-intl/node_modules/@swc/helpers": { + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.8.0" + } + }, "node_modules/next-themes": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz", @@ -12858,6 +13500,12 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" + }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -12918,9 +13566,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.50", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.50.tgz", - "integrity": "sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg==", + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", "dev": true, "license": "MIT", "engines": { @@ -13587,6 +14235,12 @@ "node": ">=18" } }, + "node_modules/po-parser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/po-parser/-/po-parser-2.1.1.tgz", + "integrity": "sha512-ECF4zHLbUItpUgE3OTtLKlPjeBN+fKEczj2zYjDfCGOzicNs0GK3Vg2IoAYwx7LH/XYw43fZQP6xnZ4TkNxSLQ==", + "license": "MIT" + }, "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", @@ -13598,9 +14252,9 @@ } }, "node_modules/postcss": { - "version": "8.5.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", - "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", + "version": "8.5.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.19.tgz", + "integrity": "sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==", "dev": true, "funding": [ { @@ -13908,7 +14562,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -13918,7 +14571,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -14618,9 +15270,9 @@ } }, "node_modules/set-cookie-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.1.tgz", - "integrity": "sha512-vM9SUhjsUYs6UeJUmygc5Ofm5eQGe85riob5ju6XCgFGJI5PLV4nrDAQpQjd+LkFBpAkADn5BQQpZ9EUNkyLuA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.2.tgz", + "integrity": "sha512-5/r/lTwbJ3zQ+qwdUFZYeRNqda7P5HD8zQKqlSjdGt1/S0cjLAphHusj4Y58ahDtWn/g32xrIS58/ikOvwl0Lw==", "dev": true, "license": "MIT" }, @@ -15740,9 +16392,9 @@ "license": "MIT" }, "node_modules/systeminformation": { - "version": "5.31.15", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.31.15.tgz", - "integrity": "sha512-7mqCtD28TK5dVdLAQONVa/Do/NBgMH2dxqf49nh6DIKoEWuDg6tkgGBP+dN22VEJVPZa/QqiHomhWNRn4WUNTQ==", + "version": "5.31.17", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.31.17.tgz", + "integrity": "sha512-TvFA9iwDWlMjqZVlKIJ0Cy+Zgm9ttlMx0SMRwJDMNKyhlEKWBMb3+WRwDi/3dvHdWbexpos4Osp4U49p5WjB5g==", "dev": true, "license": "MIT", "os": [ @@ -15793,8 +16445,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.2.tgz", "integrity": "sha512-WtctNNSH8A9jlMIqxzuYumOHU5uGZyRv0Q5svQl+oEPy5w84YpBxdb7MdqyiSPQge5jTJ6zFQLq0PFygdccSBA==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/tapable": { "version": "2.3.3", @@ -15875,7 +16526,6 @@ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -15894,22 +16544,22 @@ } }, "node_modules/tldts": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.7.tgz", - "integrity": "sha512-56L0/9HELHSsG1bFCzay8UoLxzRL7kpFf7Wl5q/kSYwiSJGACvro61xnKzPNM+SadxllzdtXsKDSXE7HPeqIAw==", + "version": "7.4.8", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.8.tgz", + "integrity": "sha512-htwgN/8KRB3z3vnC0BOETVh2m499g5GmyTK9Wq5JBLX3FNz6tSBveAd+fQhzy9hkjif8vy2jwDMR1sGhLtZl2A==", "dev": true, "license": "MIT", "dependencies": { - "tldts-core": "^7.4.7" + "tldts-core": "^7.4.8" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.7.tgz", - "integrity": "sha512-rNlAI8fKn/JckBMUSbNL/ES2kmDiurWaE49l+ikwEc9A6lFR7gMx9AhgQMQKBK4H5w4pKLH64JzZfB99uRsGNQ==", + "version": "7.4.8", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.4.8.tgz", + "integrity": "sha512-c1P7u0EhACHj7lPy4MJm8iTFEU8+nB0LCtddH0fhP7noaVoXAqafMtOOeX+ulpuPBqnrRgRhw494RICT3mbhnw==", "dev": true, "license": "MIT" }, @@ -16194,7 +16844,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -16204,16 +16853,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.63.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.63.0.tgz", - "integrity": "sha512-xgwXyzG4sK9ALkBxbyGkTMMOS+imnW65iPhxCQMK83KhxyoDNW7l+IDqEf9vMdoUidHpOoS967RCq4eMiTexwQ==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.64.0.tgz", + "integrity": "sha512-0qg+pDNMnqYzqH9AnNK+39tejHvsShUOUUoRUgtnTGE7QuMZhiFDnozq8nHJVq+Wae6NMLKNWLg5WmkcC/ndyQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.63.0", - "@typescript-eslint/parser": "8.63.0", - "@typescript-eslint/typescript-estree": "8.63.0", - "@typescript-eslint/utils": "8.63.0" + "@typescript-eslint/eslint-plugin": "8.64.0", + "@typescript-eslint/parser": "8.64.0", + "@typescript-eslint/typescript-estree": "8.64.0", + "@typescript-eslint/utils": "8.64.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -16502,6 +17151,27 @@ } } }, + "node_modules/use-intl": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.13.2.tgz", + "integrity": "sha512-p6/gCromeBoec+wEuOIkPaytH77RBjW94KWv8MRsNrbI4UOx8QgwNhgl9lbPOKM/b0dpanLhCYztLEH5yQUjtg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/amannn" + } + ], + "license": "MIT", + "dependencies": { + "@formatjs/fast-memoize": "^3.1.0", + "@schummar/icu-type-parser": "1.21.5", + "icu-minify": "^4.13.2", + "intl-messageformat": "^11.1.0" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" + } + }, "node_modules/use-sidecar": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", @@ -16592,16 +17262,16 @@ } }, "node_modules/vite": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.3.tgz", - "integrity": "sha512-Ds+gBRbj0lwRO2Y5hwnUBdxSwlAve9LeRyU4sNnAr0ewW0gWF0n5bgXgUzbgZ49MV9BVUAQUFYVcDUcilUExMA==", + "version": "8.1.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.4.tgz", + "integrity": "sha512-bTT9PsdWO+MQMNG9ZXIP/qM9wGh37DFxTV/sPq9cFpHr3w4jkgef032PkAL9jAqhk3Nz8NQw3O8n6/xFkqO4QQ==", "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.32.0", - "picomatch": "^4.0.4", + "picomatch": "^4.0.5", "postcss": "^8.5.16", - "rolldown": "~1.1.3", + "rolldown": "~1.1.4", "tinyglobby": "^0.2.17" }, "bin": { @@ -16703,7 +17373,6 @@ "integrity": "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vitest/expect": "4.1.10", "@vitest/mocker": "4.1.10", @@ -17090,9 +17759,9 @@ } }, "node_modules/xml-naming": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz", - "integrity": "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.3.0.tgz", + "integrity": "sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==", "funding": [ { "type": "github", @@ -17205,7 +17874,6 @@ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/web-ui/package.json b/web-ui/package.json index 602e4729..17a6eeb0 100644 --- a/web-ui/package.json +++ b/web-ui/package.json @@ -32,6 +32,7 @@ "dompurify": "^3.4.9", "lucide-react": "^0.562.0", "next": "^16.2.6", + "next-intl": "^4.13.1", "next-themes": "^0.4.6", "radix-ui": "^1.4.3", "react": "^19.2.1", diff --git a/web-ui/src/app/(authenticated)/decks/page.tsx b/web-ui/src/app/(authenticated)/decks/page.tsx index 3a337bff..b474d828 100644 --- a/web-ui/src/app/(authenticated)/decks/page.tsx +++ b/web-ui/src/app/(authenticated)/decks/page.tsx @@ -34,9 +34,11 @@ import { useSwipe } from "@/hooks/useSwipe" import { useDeckList } from "@/hooks/useDeckList" import { useWorkspace } from "@/hooks/useWorkspace" import { Plus, MessageSquare, Image as ImageIcon, Star } from "lucide-react" +import { useTranslations } from "next-intl" import { IS_LOCAL } from "@/lib/mode" export default function DecksPage() { + const t = useTranslations("decksPage") const auth = useAuth() const isMobile = useIsMobile() const idToken = auth.user?.id_token @@ -90,7 +92,7 @@ export default function DecksPage() { }`} > - Chat + {t("chat")} @@ -154,7 +156,7 @@ export default function DecksPage() { ? "text-brand-amber" : "text-foreground-muted hover:text-brand-amber" }`} - aria-label={list.favoriteIds.has(ws.activeDeckId!) ? "Remove from favorites" : "Add to favorites"} + aria-label={list.favoriteIds.has(ws.activeDeckId!) ? t("removeFromFavorites") : t("addToFavorites")} > @@ -237,9 +239,9 @@ export default function DecksPage() { { if (!open) list.setDeleteTarget(null) }} - title="Delete this deck?" - description={<>{list.deleteTarget?.name} will be permanently deleted after 30 days. This action cannot be undone.} - confirmLabel="Delete" + title={t("deleteTitle")} + description={<>{t.rich("deleteDescription", { name: () => {list.deleteTarget?.name} })}} + confirmLabel={t("delete")} variant="destructive" onConfirm={list.confirmDelete} /> @@ -255,7 +257,7 @@ export default function DecksPage() { className="flex items-center gap-2 px-4 py-2.5 rounded-full bg-brand-teal text-primary-foreground shadow-lg text-sm font-medium animate-card-in" > - New Deck + {t("newDeck")} @@ -263,7 +265,7 @@ export default function DecksPage() {

{ws.styleName}

handleExport(ws.styleName!)} @@ -216,7 +219,7 @@ export default function StylesPage() { className="flex items-center gap-1.5 px-2.5 py-1 rounded-lg text-xs text-foreground-muted hover:text-foreground border border-white/[0.08] hover:border-white/[0.15] transition-colors" > - Copy to My Styles + {t("copyToMyStyles")} )} @@ -227,13 +230,13 @@ export default function StylesPage() {
-

Create with AI

-

Creating your new style…

+

{t("createWithAI")}

+

{t("creatingStyle")}

@@ -242,14 +245,14 @@ export default function StylesPage() {
-

Styles

-

Manage and preview presentation styles

+

{t("title")}

+

{t("subtitle")}

{/* User styles */}
-

My Styles

+

{t("myStyles")}

{userStyles.map(style => ( - Create with AI + {t("createWithAI")}
-

Built-in Styles

+

{t("builtinStyles")}

{builtinStyles.map(style => ( ws.refreshPreview()} onStyleSaved={async (saved) => { - showToast(`Style saved: ${saved.title}`, "success") + showToast(t("styleSaved", { title: saved.title }), "success") await refreshStyles() }} /> @@ -337,9 +340,9 @@ export default function StylesPage() { { if (!open) setDeleteConfirm(null) }} - title="Delete style" - description={<>Are you sure you want to delete {deleteConfirm}? This cannot be undone.} - confirmLabel="Delete" + title={t("deleteStyleTitle")} + description={<>{t.rich("deleteDescription", { name: () => {deleteConfirm} })}} + confirmLabel={tCommon("delete")} variant="destructive" onConfirm={() => deleteConfirm && handleDelete(deleteConfirm)} /> @@ -371,6 +374,7 @@ function StyleListCard({ style, onPreview, onPin, onDelete, onExport, onRename, onRenameSubmit?: () => void onRenameCancel?: () => void }) { + const t = useTranslations("stylesPage") const cardRef = useRef(null) const [scale, setScale] = useState(0.15) @@ -438,7 +442,7 @@ function StyleListCard({ style, onPreview, onPin, onDelete, onExport, onRename, className={`p-1 rounded transition-colors ${ style.pinned ? "text-brand-teal" : "text-foreground-muted hover:text-foreground opacity-0 group-hover:opacity-100 transition-opacity duration-150" }`} - aria-label={style.pinned ? `Unpin ${style.name}` : `Pin ${style.name}`} + aria-label={style.pinned ? t("unpinAria", { name: style.name }) : t("pinAria", { name: style.name })} > @@ -446,7 +450,7 @@ function StyleListCard({ style, onPreview, onPin, onDelete, onExport, onRename, @@ -455,7 +459,7 @@ function StyleListCard({ style, onPreview, onPin, onDelete, onExport, onRename, @@ -463,7 +467,7 @@ function StyleListCard({ style, onPreview, onPin, onDelete, onExport, onRename,
{style.source === "user" && !isRenaming && ( - Custom + {t("custom")} )}
@@ -472,13 +476,15 @@ function StyleListCard({ style, onPreview, onPin, onDelete, onExport, onRename, /** ⋯ menu for preview header (Export / Delete). */ function PreviewMoreMenu({ onExport, onDelete }: { onExport: () => void; onDelete: () => void }) { + const t = useTranslations("stylesPage") + const tCommon = useTranslations("common") const [open, setOpen] = useState(false) return (
@@ -490,13 +496,13 @@ function PreviewMoreMenu({ onExport, onDelete }: { onExport: () => void; onDelet onClick={() => { setOpen(false); onExport() }} className="w-full px-3 py-2 text-left text-sm text-foreground/70 hover:text-foreground hover:bg-white/[0.06] transition-colors flex items-center gap-2" > - Export + {t("export")}
diff --git a/web-ui/src/app/(authenticated)/templates/page.tsx b/web-ui/src/app/(authenticated)/templates/page.tsx index aa166f8c..ad0422da 100644 --- a/web-ui/src/app/(authenticated)/templates/page.tsx +++ b/web-ui/src/app/(authenticated)/templates/page.tsx @@ -10,6 +10,7 @@ "use client" import { useState, useEffect, useRef, useCallback } from "react" +import { useTranslations } from "next-intl" import { useAuth } from "@/hooks/useAuth" import { AppShell } from "@/components/AppShell" import { ConfirmDialog } from "@/components/ConfirmDialog" @@ -25,6 +26,8 @@ import { import { Download, Trash2, Upload, FileText, Type, LayoutGrid, X } from "lucide-react" export default function TemplatesPage() { + const t = useTranslations("templatesPage") + const tCommon = useTranslations("common") const auth = useAuth() const idToken = auth.user?.id_token const [templates, setTemplates] = useState([]) @@ -60,9 +63,9 @@ export default function TemplatesPage() { } const handleRename = async (oldName: string, newName: string): Promise => { - if (!idToken) return "Not authenticated" - if (!/^[a-zA-Z0-9_-]+$/.test(newName)) return "Letters, numbers, hyphens, underscores only" - if (templates.some(t => t.name === newName)) return "Name already exists" + if (!idToken) return t("notAuthenticated") + if (!/^[a-zA-Z0-9_-]+$/.test(newName)) return t("renameCharsError") + if (templates.some(t => t.name === newName)) return t("nameExists") const result = await renameTemplate(oldName, newName, idToken) if (result.error) return result.error setTemplates(prev => prev.map(t => t.name === oldName ? { ...t, name: newName } : t)) @@ -75,7 +78,7 @@ export default function TemplatesPage() { if (result.error) { showToast(result.error, "error"); return } setTemplates(prev => prev.filter(t => t.name !== name)) setDeleteConfirm(null) - showToast(`Deleted "${name}"`) + showToast(t("deleted", { name })) } const handleUploadComplete = async () => { @@ -92,8 +95,8 @@ export default function TemplatesPage() { {loading ? (
-

Templates

-

Manage your PPTX presentation templates

+

{t("title")}

+

{t("subtitle")}

{[...Array(4)].map((_, i) => ( @@ -105,15 +108,15 @@ export default function TemplatesPage() {
-

Templates

-

Manage your PPTX presentation templates

+

{t("title")}

+

{t("subtitle")}

{/* My Templates */}
-

My Templates

+

{t("myTemplates")}

{userTemplates.map(t => ( setUploadOpen(true)} > - Upload Template + {t("uploadTemplate")}
{/* Built-in Templates */}
-

Built-in Templates

+

{t("builtinTemplates")}

{builtinTemplates.map(t => ( { if (!open) setDeleteConfirm(null) }} - title="Delete template" - description={<>Are you sure you want to delete {deleteConfirm}? This cannot be undone.} - confirmLabel="Delete" + title={t("deleteTemplateTitle")} + description={<>{t.rich("deleteDescription", { name: () => {deleteConfirm} })}} + confirmLabel={tCommon("delete")} variant="destructive" onConfirm={() => deleteConfirm && handleDelete(deleteConfirm)} /> @@ -196,6 +199,7 @@ function TemplateCard({ template, onDownload, onDelete, onEditDescription, onRen onEditDescription?: (name: string, description: string) => void onRename?: (oldName: string, newName: string) => Promise }) { + const t = useTranslations("templatesPage") const [editing, setEditing] = useState(false) const [editValue, setEditValue] = useState(template.description || "") const [renaming, setRenaming] = useState(false) @@ -223,7 +227,7 @@ function TemplateCard({ template, onDownload, onDelete, onEditDescription, onRen const handleRenameSubmit = async () => { const trimmed = renameValue.trim() if (!trimmed || trimmed === template.name) { setRenaming(false); setRenameError(""); return } - if (!/^[a-zA-Z0-9_-]+$/.test(trimmed)) { setRenameError("a-z, 0-9, hyphens, underscores"); return } + if (!/^[a-zA-Z0-9_-]+$/.test(trimmed)) { setRenameError(t("renameCharsShort")); return } const err = await onRename?.(template.name, trimmed) if (err) { setRenameError(err); return } setRenaming(false) @@ -283,7 +287,7 @@ function TemplateCard({ template, onDownload, onDelete, onEditDescription, onRen )} {template.source === "user" && !renaming && ( - Custom + {t("custom")} )}
{/* Description — click to edit for user templates */} @@ -296,14 +300,14 @@ function TemplateCard({ template, onDownload, onDelete, onEditDescription, onRen onKeyDown={e => { if (e.key === "Enter" && !e.shiftKey) { e.preventDefault(); handleDescSubmit() } if (e.key === "Escape") { setEditValue(template.description || ""); setEditing(false) } }} rows={2} className="w-full mt-1 rounded-md bg-white/[0.04] border border-brand-teal/30 focus:border-brand-teal/50 px-2 py-1 text-xs text-foreground placeholder:text-foreground/25 resize-none outline-none transition-colors" - placeholder="When should this template be used?" + placeholder={t("descPlaceholder")} /> ) : onEditDescription ? (

{ e.stopPropagation(); setEditing(true) }} > - {template.description || Add description…} + {template.description || {t("addDescription")}}

) : template.description ? (

{template.description}

@@ -315,7 +319,7 @@ function TemplateCard({ template, onDownload, onDelete, onEditDescription, onRen @@ -323,7 +327,7 @@ function TemplateCard({ template, onDownload, onDelete, onEditDescription, onRen @@ -364,6 +368,8 @@ function UploadDialog({ idToken, onClose, onComplete, onError }: { onComplete: () => void onError: (msg: string) => void }) { + const t = useTranslations("templatesPage") + const tCommon = useTranslations("common") const [file, setFile] = useState(null) const [description, setDescription] = useState("") const [uploading, setUploading] = useState(false) @@ -385,7 +391,7 @@ function UploadDialog({ idToken, onClose, onComplete, onError }: { if (result.error) { onError(result.error); return } onComplete() } catch { - onError("Failed to upload template") + onError(t("uploadFailed")) } finally { setUploading(false) } @@ -403,11 +409,11 @@ function UploadDialog({ idToken, onClose, onComplete, onError }: { > {/* Header */}
-

Upload Template

+

{t("uploadTemplate")}

@@ -444,7 +450,7 @@ function UploadDialog({ idToken, onClose, onComplete, onError }: { <>

- Drop .pptx here or click to browse + {t.rich("dropHint", { ext: (chunks) => {chunks} })}

)} @@ -464,13 +470,13 @@ function UploadDialog({ idToken, onClose, onComplete, onError }: { {/* Description */}