@agent-native/core 0.79.17 → 0.79.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +14 -0
- package/corpus/core/docs/content/file-uploads.md +11 -4
- package/corpus/core/docs/content/locales/ar-SA/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/de-DE/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/fr-FR/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/locales/zh-TW/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/multi-app-workspace.md +3 -3
- package/corpus/core/docs/content/template-clips.md +14 -5
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/engine/builder-engine.ts +8 -3
- package/corpus/core/src/cli/mcp.ts +11 -6
- package/corpus/core/src/client/AssistantChat.tsx +6 -2
- package/corpus/core/src/client/chat/markdown-renderer.tsx +1 -0
- package/corpus/core/src/client/i18n.tsx +77 -65
- package/corpus/core/src/client/index.ts +7 -1
- package/corpus/core/src/client/org/OrgSwitcher.tsx +5 -5
- package/corpus/core/src/client/org/TeamPage.tsx +11 -3
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +216 -0
- package/corpus/core/src/client/settings/index.ts +5 -0
- package/corpus/core/src/file-upload/index.ts +1 -0
- package/corpus/core/src/file-upload/registry.ts +22 -6
- package/corpus/core/src/file-upload/types.ts +6 -1
- package/corpus/core/src/integrations/adapters/email.ts +26 -18
- package/corpus/core/src/integrations/adapters/slack.ts +8 -7
- package/corpus/core/src/integrations/adapters/telegram.ts +9 -11
- package/corpus/core/src/integrations/adapters/whatsapp.ts +12 -9
- package/corpus/core/src/integrations/plugin.ts +79 -13
- package/corpus/core/src/onboarding/default-steps.ts +6 -3
- package/corpus/core/src/onboarding/types.ts +1 -1
- package/corpus/core/src/org/handlers.ts +1 -1
- package/corpus/core/src/server/agent-chat-plugin.ts +4 -7
- package/corpus/core/src/server/better-auth-instance.ts +19 -62
- package/corpus/core/src/server/core-routes-plugin.ts +93 -180
- package/corpus/core/src/server/create-server.ts +55 -116
- package/corpus/core/src/server/email-actions.ts +3 -6
- package/corpus/core/src/server/email.ts +52 -17
- package/corpus/core/src/server/index.ts +2 -1
- package/corpus/core/src/server/scoped-key-storage.ts +223 -0
- package/corpus/core/src/shared/agent-env.ts +3 -3
- package/corpus/core/src/sharing/actions/share-resource.ts +1 -1
- package/corpus/core/src/styles/agent-native.css +47 -3
- package/corpus/core/src/templates/workspace-root/AGENTS.md +3 -2
- package/corpus/core/src/templates/workspace-root/README.md +1 -1
- package/corpus/core/src/templates/workspace-root/scripts/repair-workspace-org.ts +29 -90
- package/corpus/core/src/terminal/pty-server.ts +3 -38
- package/corpus/core/src/triggers/dispatcher.ts +1 -2
- package/corpus/templates/.retired/issues/package.json +7 -0
- package/corpus/templates/.retired/meeting-notes/package.json +7 -0
- package/corpus/templates/.retired/recruiting/package.json +7 -0
- package/corpus/templates/.retired/scheduling/package.json +7 -0
- package/corpus/templates/.retired/voice/package.json +7 -0
- package/corpus/templates/analytics/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +1 -18
- package/corpus/templates/analytics/app/global.css +15 -0
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +7 -1
- package/corpus/templates/analytics/app/i18n-data.ts +71 -2
- package/corpus/templates/analytics/app/pages/Ask.tsx +1 -1
- package/corpus/templates/analytics/app/pages/Settings.tsx +120 -73
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +0 -11
- package/corpus/templates/analytics/app/routes/catalog.tsx +33 -176
- package/corpus/templates/analytics/app/routes/team.tsx +3 -2
- package/corpus/templates/analytics/changelog/2026-06-26-dashboard-templates-are-tucked-into-settings-and-show-simple.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-26-the-ask-tab-uses-a-softer-dark-gray-canvas-while-sidebar-cha.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-26-the-sessions-page-shows-a-single-page-title-instead-of-repea.md +6 -0
- package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +37 -28
- package/corpus/templates/assets/app/routes/settings.tsx +65 -43
- package/corpus/templates/assets/app/routes/team.tsx +2 -10
- package/corpus/templates/brain/app/routes/settings.tsx +390 -358
- package/corpus/templates/brain/app/routes/team.tsx +2 -8
- package/corpus/templates/calendar/actions/db-connect.ts +5 -29
- package/corpus/templates/calendar/app/components/CloudUpgrade.tsx +8 -51
- package/corpus/templates/calendar/app/components/calendar/GoogleConnectBanner.tsx +2 -1
- package/corpus/templates/calendar/app/components/calendar/GoogleSetupWizard.tsx +4 -2
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +0 -2
- package/corpus/templates/calendar/app/pages/Settings.tsx +304 -271
- package/corpus/templates/calendar/app/routes/_app.team.tsx +2 -17
- package/corpus/templates/calendar/server/handlers/google-auth.ts +22 -9
- package/corpus/templates/calendar/server/lib/booking-emails.ts +1 -1
- package/corpus/templates/calendar/server/lib/event-guest-notifications.ts +1 -1
- package/corpus/templates/calendar/server/lib/google-calendar.ts +48 -28
- package/corpus/templates/chat/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/chat/app/hooks/use-navigation-state.ts +4 -2
- package/corpus/templates/chat/app/routes/settings.tsx +54 -54
- package/corpus/templates/chat/app/routes/team.tsx +2 -10
- package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +7 -2
- package/corpus/templates/clips/.agents/skills/recording/SKILL.md +1 -1
- package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +7 -0
- package/corpus/templates/clips/AGENTS.md +8 -0
- package/corpus/templates/clips/actions/invite-member.ts +1 -1
- package/corpus/templates/clips/actions/request-transcript.ts +1 -1
- package/corpus/templates/clips/app/components/library/library-layout.tsx +325 -333
- package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +80 -40
- package/corpus/templates/clips/app/components/player/transcript-panel.tsx +2 -0
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +629 -643
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +263 -158
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +10 -2
- package/corpus/templates/clips/changelog/2026-06-26-long-desktop-recordings-are-checkpointed-so-macos-finalizati.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-26-non-mac-desktop-recordings-wait-for-upload-transcription.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-26-recording-details-button-stays-at-the-far-right-on-small-screen.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-26-s3-compatible-storage-keys-now-save-securely-from-clips-sett.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-26-shared-clip-links-guide-agents-through-processing-transcripts.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-26-the-agent-sidebar-now-slides-in-smoothly-without-duplicate-e.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-26-the-clip-details-sidebar-now-collapses-into-a-slide-out-pane.md +6 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +55 -3
- package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +217 -5
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +1 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +176 -5
- package/corpus/templates/clips/server/lib/public-agent-context.ts +31 -0
- package/corpus/templates/clips/server/lib/s3-upload-provider.ts +60 -14
- package/corpus/templates/clips/server/lib/video-storage.ts +37 -9
- package/corpus/templates/clips/server/routes/api/agent-transcript.json.get.ts +5 -0
- package/corpus/templates/content/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/content/app/components/sidebar/NotionButton.tsx +1 -0
- package/corpus/templates/content/app/routes/_app.settings.tsx +54 -55
- package/corpus/templates/content/app/routes/_app.team.tsx +2 -28
- package/corpus/templates/content/server/lib/notion.ts +43 -11
- package/corpus/templates/content/server/routes/api/notion/auth-url.get.ts +2 -2
- package/corpus/templates/content/server/routes/api/notion/status.get.ts +3 -3
- package/corpus/templates/design/app/routes/settings.tsx +60 -38
- package/corpus/templates/design/app/routes/team.tsx +2 -10
- package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +2 -2
- package/corpus/templates/dispatch/app/routes/settings.tsx +70 -55
- package/corpus/templates/dispatch/app/routes/team.tsx +5 -1
- package/corpus/templates/forms/actions/db-connect.ts +7 -36
- package/corpus/templates/forms/actions/navigate.ts +2 -2
- package/corpus/templates/forms/app/components/CloudUpgrade.tsx +8 -47
- package/corpus/templates/forms/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/forms/app/components/layout/Layout.tsx +42 -25
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +35 -76
- package/corpus/templates/forms/app/global.css +9 -25
- package/corpus/templates/forms/app/hooks/use-navigation-state.ts +4 -4
- package/corpus/templates/forms/app/i18n/ar-SA.ts +1 -0
- package/corpus/templates/forms/app/i18n/de-DE.ts +1 -0
- package/corpus/templates/forms/app/i18n/en-US.ts +1 -0
- package/corpus/templates/forms/app/i18n/es-ES.ts +1 -0
- package/corpus/templates/forms/app/i18n/fr-FR.ts +1 -0
- package/corpus/templates/forms/app/i18n/hi-IN.ts +1 -0
- package/corpus/templates/forms/app/i18n/ja-JP.ts +1 -0
- package/corpus/templates/forms/app/i18n/ko-KR.ts +1 -0
- package/corpus/templates/forms/app/i18n/pt-BR.ts +1 -0
- package/corpus/templates/forms/app/i18n/zh-CN.ts +1 -0
- package/corpus/templates/forms/app/i18n/zh-TW.ts +1 -0
- package/corpus/templates/forms/app/lib/route-prewarm.ts +9 -8
- package/corpus/templates/forms/app/pages/AskPage.tsx +70 -0
- package/corpus/templates/forms/app/pages/FormsListPage.tsx +74 -81
- package/corpus/templates/forms/app/root.tsx +1 -1
- package/corpus/templates/forms/app/routes/_app.ask.tsx +14 -0
- package/corpus/templates/forms/app/routes/_app.settings.tsx +54 -54
- package/corpus/templates/forms/app/routes/_app.team.tsx +2 -9
- package/corpus/templates/forms/app/routes/_index.tsx +21 -130
- package/corpus/templates/forms/changelog/2026-06-26-ask-forms-opens-as-a-standard-app-tab-with-a-simpler-sidebar.md +6 -0
- package/corpus/templates/forms/changelog/2026-06-26-forms-are-shown-in-a-tighter-row-list-with-a-denser-sidebar.md +6 -0
- package/corpus/templates/forms/shared/navigation.ts +4 -2
- package/corpus/templates/macros/app/routes/settings.tsx +54 -54
- package/corpus/templates/macros/app/routes/team.tsx +2 -10
- package/corpus/templates/mail/actions/helpers.ts +2 -2
- package/corpus/templates/mail/app/components/GoogleConnectBanner.tsx +2 -1
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +5 -5
- package/corpus/templates/mail/app/routes/team.tsx +3 -2
- package/corpus/templates/mail/server/handlers/emails.ts +3 -2
- package/corpus/templates/mail/server/handlers/google-auth.ts +19 -12
- package/corpus/templates/mail/server/lib/automation-engine.ts +3 -2
- package/corpus/templates/mail/server/lib/email-state.ts +2 -3
- package/corpus/templates/mail/server/lib/google-auth.ts +28 -11
- package/corpus/templates/mail/server/lib/jobs.ts +3 -2
- package/corpus/templates/mail/server/onboarding.ts +9 -6
- package/corpus/templates/mail/server/routes/api/attachments.get.ts +3 -3
- package/corpus/templates/plan/actions/request-plan-access.ts +1 -1
- package/corpus/templates/plan/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/plan/app/components/plan/CanvasArea.tsx +56 -4
- package/corpus/templates/plan/app/global.css +8 -3
- package/corpus/templates/plan/app/hooks/use-navigation-state.ts +4 -2
- package/corpus/templates/plan/app/lib/route-prewarm.ts +0 -4
- package/corpus/templates/plan/app/pages/PlansPage.tsx +1 -1
- package/corpus/templates/plan/app/routes/settings.tsx +75 -73
- package/corpus/templates/plan/app/routes/team.tsx +2 -8
- package/corpus/templates/plan/changelog/2026-06-26-canvas-grid-panning-now-stays-smooth-and-fills-the-workspace.md +6 -0
- package/corpus/templates/plan/server/lib/comment-notifications.ts +1 -1
- package/corpus/templates/slides/actions/check-image-gen.ts +2 -1
- package/corpus/templates/slides/actions/db-connect.ts +7 -45
- package/corpus/templates/slides/actions/edit-image.ts +6 -3
- package/corpus/templates/slides/actions/generate-image-api.ts +1 -1
- package/corpus/templates/slides/actions/generate-image.ts +2 -2
- package/corpus/templates/slides/actions/generate-slides-ai.ts +5 -3
- package/corpus/templates/slides/actions/image-gen-status.ts +4 -3
- package/corpus/templates/slides/actions/image-search.ts +6 -3
- package/corpus/templates/slides/actions/search-images.ts +6 -3
- package/corpus/templates/slides/app/components/CloudUpgrade.tsx +8 -51
- package/corpus/templates/slides/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +0 -2
- package/corpus/templates/slides/app/routes/settings.tsx +54 -54
- package/corpus/templates/slides/app/routes/team.tsx +2 -12
- package/corpus/templates/slides/server/handlers/google-docs-auth.ts +9 -9
- package/corpus/templates/slides/server/handlers/image-gen.ts +5 -1
- package/corpus/templates/slides/server/handlers/image-providers/gemini.ts +9 -1
- package/corpus/templates/slides/server/handlers/image-providers/index.ts +18 -8
- package/corpus/templates/slides/server/handlers/image-providers/openai.ts +10 -4
- package/corpus/templates/slides/server/handlers/image-providers/types.ts +1 -0
- package/corpus/templates/slides/server/lib/google-docs-oauth.ts +59 -34
- package/corpus/templates/slides/server/register-secrets.ts +60 -0
- package/corpus/templates/videos/actions/db-connect.ts +7 -45
- package/corpus/templates/videos/app/components/CloudUpgrade.tsx +8 -51
- package/corpus/templates/videos/app/components/Sidebar.tsx +1 -9
- package/corpus/templates/videos/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +0 -3
- package/corpus/templates/videos/app/routes/settings.tsx +54 -54
- package/corpus/templates/videos/app/routes/team.tsx +2 -8
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +8 -3
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/cli/mcp.d.ts.map +1 -1
- package/dist/cli/mcp.js +3 -4
- package/dist/cli/mcp.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +6 -2
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/chat/markdown-renderer.d.ts.map +1 -1
- package/dist/client/chat/markdown-renderer.js +1 -0
- package/dist/client/chat/markdown-renderer.js.map +1 -1
- package/dist/client/i18n.d.ts.map +1 -1
- package/dist/client/i18n.js +20 -9
- package/dist/client/i18n.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts +3 -3
- package/dist/client/org/OrgSwitcher.js +2 -2
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts +6 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +2 -2
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts +27 -0
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -0
- package/dist/client/settings/SettingsTabsPage.js +108 -0
- package/dist/client/settings/SettingsTabsPage.js.map +1 -0
- package/dist/client/settings/index.d.ts +1 -0
- package/dist/client/settings/index.d.ts.map +1 -1
- package/dist/client/settings/index.js +1 -0
- package/dist/client/settings/index.js.map +1 -1
- package/dist/file-upload/index.d.ts +1 -1
- package/dist/file-upload/index.d.ts.map +1 -1
- package/dist/file-upload/index.js +1 -1
- package/dist/file-upload/index.js.map +1 -1
- package/dist/file-upload/registry.d.ts +1 -0
- package/dist/file-upload/registry.d.ts.map +1 -1
- package/dist/file-upload/registry.js +24 -6
- package/dist/file-upload/registry.js.map +1 -1
- package/dist/file-upload/types.d.ts +6 -1
- package/dist/file-upload/types.d.ts.map +1 -1
- package/dist/file-upload/types.js.map +1 -1
- package/dist/integrations/adapters/email.d.ts.map +1 -1
- package/dist/integrations/adapters/email.js +18 -18
- package/dist/integrations/adapters/email.js.map +1 -1
- package/dist/integrations/adapters/slack.d.ts.map +1 -1
- package/dist/integrations/adapters/slack.js +8 -7
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/adapters/telegram.d.ts.map +1 -1
- package/dist/integrations/adapters/telegram.js +9 -9
- package/dist/integrations/adapters/telegram.js.map +1 -1
- package/dist/integrations/adapters/whatsapp.d.ts.map +1 -1
- package/dist/integrations/adapters/whatsapp.js +10 -9
- package/dist/integrations/adapters/whatsapp.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +47 -13
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/observability/routes.d.ts +6 -6
- package/dist/onboarding/default-steps.d.ts.map +1 -1
- package/dist/onboarding/default-steps.js +6 -5
- package/dist/onboarding/default-steps.js.map +1 -1
- package/dist/onboarding/types.d.ts +1 -1
- package/dist/onboarding/types.d.ts.map +1 -1
- package/dist/onboarding/types.js.map +1 -1
- package/dist/org/handlers.js +1 -1
- package/dist/org/handlers.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +4 -6
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +2 -2
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +17 -56
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +1 -1
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +67 -153
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/create-server.d.ts +3 -9
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +37 -91
- package/dist/server/create-server.js.map +1 -1
- package/dist/server/email-actions.d.ts +2 -3
- package/dist/server/email-actions.d.ts.map +1 -1
- package/dist/server/email-actions.js +3 -6
- package/dist/server/email-actions.js.map +1 -1
- package/dist/server/email.d.ts +3 -3
- package/dist/server/email.d.ts.map +1 -1
- package/dist/server/email.js +40 -19
- package/dist/server/email.js.map +1 -1
- package/dist/server/index.d.ts +3 -3
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +3 -3
- package/dist/server/index.js.map +1 -1
- package/dist/server/scoped-key-storage.d.ts +22 -0
- package/dist/server/scoped-key-storage.d.ts.map +1 -0
- package/dist/server/scoped-key-storage.js +152 -0
- package/dist/server/scoped-key-storage.js.map +1 -0
- package/dist/shared/agent-env.d.ts +3 -3
- package/dist/shared/agent-env.d.ts.map +1 -1
- package/dist/shared/agent-env.js +3 -3
- package/dist/shared/agent-env.js.map +1 -1
- package/dist/sharing/actions/share-resource.js +1 -1
- package/dist/sharing/actions/share-resource.js.map +1 -1
- package/dist/styles/agent-native.css +47 -3
- package/dist/templates/workspace-root/AGENTS.md +3 -2
- package/dist/templates/workspace-root/README.md +1 -1
- package/dist/templates/workspace-root/scripts/repair-workspace-org.ts +29 -90
- package/dist/terminal/pty-server.d.ts.map +1 -1
- package/dist/terminal/pty-server.js +3 -36
- package/dist/terminal/pty-server.js.map +1 -1
- package/dist/triggers/dispatcher.js +1 -1
- package/dist/triggers/dispatcher.js.map +1 -1
- package/docs/content/file-uploads.md +11 -4
- package/docs/content/locales/ar-SA/multi-app-workspace.md +3 -3
- package/docs/content/locales/de-DE/multi-app-workspace.md +3 -3
- package/docs/content/locales/es-ES/multi-app-workspace.md +3 -3
- package/docs/content/locales/fr-FR/multi-app-workspace.md +3 -3
- package/docs/content/locales/hi-IN/multi-app-workspace.md +3 -3
- package/docs/content/locales/ja-JP/multi-app-workspace.md +3 -3
- package/docs/content/locales/ko-KR/multi-app-workspace.md +3 -3
- package/docs/content/locales/pt-BR/multi-app-workspace.md +3 -3
- package/docs/content/locales/zh-CN/multi-app-workspace.md +3 -3
- package/docs/content/locales/zh-TW/multi-app-workspace.md +3 -3
- package/docs/content/multi-app-workspace.md +3 -3
- package/docs/content/template-clips.md +14 -5
- package/package.json +1 -1
- package/src/templates/workspace-root/AGENTS.md +3 -2
- package/src/templates/workspace-root/README.md +1 -1
- package/src/templates/workspace-root/scripts/repair-workspace-org.ts +29 -90
- package/corpus/core/src/server/env-var-writes.ts +0 -16
- package/corpus/templates/analytics/app/pages/Team.tsx +0 -9
- package/corpus/templates/calendar/app/pages/Team.tsx +0 -12
- package/corpus/templates/mail/app/pages/Team.tsx +0 -17
- package/dist/server/env-var-writes.d.ts +0 -10
- package/dist/server/env-var-writes.d.ts.map +0 -1
- package/dist/server/env-var-writes.js +0 -18
- package/dist/server/env-var-writes.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-renderer.d.ts","sourceRoot":"","sources":["../../../src/client/chat/markdown-renderer.tsx"],"names":[],"mappings":"AAUA,OAAO,KAMN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,IAAI,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,KAAK,aAAa,MAAM,YAAY,CAAC;AAwB5C,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,OAAO,iBAAiB,CAAC;IAClC,mBAAmB,EAAE,OAAO,uBAAuB,CAAC;CACrD,CAAC;AAEF,eAAO,IAAI,cAAc,EAAE,mBAAmB,GAAG,IAAW,CAAC;AAC7D,eAAO,IAAI,WAAW,EAAE,OAAO,aAAa,GAAG,IAAW,CAAC;AAG3D,wBAAgB,YAAY,IAAI,IAAI,CAUnC;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAO1D;AASD,KAAK,gBAAgB,GAAG;IACtB,UAAU,EAAE,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QACxC,YAAY,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;KACzC,KACE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,kBAAkB,EAAE,MAAM,MAAM,EAAE,CAAC;CACpC,CAAC;AAGF,wBAAgB,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAwC3D;AAOD,eAAO,MAAM,oBAAoB,wBAA6B,CAAC;AAM/D,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,IAAI,GACL,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,qBAWA;
|
|
1
|
+
{"version":3,"file":"markdown-renderer.d.ts","sourceRoot":"","sources":["../../../src/client/chat/markdown-renderer.tsx"],"names":[],"mappings":"AAUA,OAAO,KAMN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,IAAI,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,KAAK,aAAa,MAAM,YAAY,CAAC;AAwB5C,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,OAAO,iBAAiB,CAAC;IAClC,mBAAmB,EAAE,OAAO,uBAAuB,CAAC;CACrD,CAAC;AAEF,eAAO,IAAI,cAAc,EAAE,mBAAmB,GAAG,IAAW,CAAC;AAC7D,eAAO,IAAI,WAAW,EAAE,OAAO,aAAa,GAAG,IAAW,CAAC;AAG3D,wBAAgB,YAAY,IAAI,IAAI,CAUnC;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAO1D;AASD,KAAK,gBAAgB,GAAG;IACtB,UAAU,EAAE,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;QACxC,YAAY,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;KACzC,KACE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,kBAAkB,EAAE,MAAM,MAAM,EAAE,CAAC;CACpC,CAAC;AAGF,wBAAgB,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAwC3D;AAOD,eAAO,MAAM,oBAAoB,wBAA6B,CAAC;AAM/D,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,IAAI,GACL,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,qBAWA;AA+BD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI1D;AAID,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAQ9D;AAID,eAAO,MAAM,kBAAkB;IAC7B,CAAC,QAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;IA+CtD,GAAG,QAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;CAuBhD,CAAC;AAwCF,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,CA0LR;AAID,wBAAgB,gBAAgB,IAAI,OAAO,CAO1C;AAMD,eAAO,MAAM,qBAAqB,6CAE/B;IACD,SAAS,EAAE,MAAM,CAAC;CACnB,8BAaC,CAAC;AAIH,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,UAAuB,GACxB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,qBA0DA;AAID,wBAAgB,YAAY,sBAoB3B"}
|
|
@@ -98,6 +98,7 @@ function isBuilderErrorCtaHref(href) {
|
|
|
98
98
|
}
|
|
99
99
|
return (url.href === BUILDER_SPACE_SETTINGS_URL ||
|
|
100
100
|
url.pathname === "/account/billing" ||
|
|
101
|
+
url.pathname === "/account/subscription" ||
|
|
101
102
|
/^\/app\/organizations\/[^/]+\/billing$/.test(url.pathname));
|
|
102
103
|
}
|
|
103
104
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-renderer.js","sourceRoot":"","sources":["../../../src/client/chat/markdown-renderer.tsx"],"names":[],"mappings":"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","sourcesContent":["// Owns: lazy react-markdown/shiki loaders, SmoothMarkdownText, MarkdownText,\n// HighlightedCodeBlock wrapper, and the markdownComponents/markdownUrlTransform\n// used by every markdown render path in AssistantChat.\n\nimport {\n useThread,\n useMessageRuntime,\n useMessagePartText,\n} from \"@assistant-ui/react\";\nimport { IconPlus, IconExternalLink } from \"@tabler/icons-react\";\nimport React, {\n useState,\n useEffect,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\n// react-markdown + remark-gfm type imports only — loaded lazily below.\nimport type { default as ReactMarkdownType } from \"react-markdown\";\nimport type { defaultUrlTransform as DefaultUrlTransformType } from \"react-markdown\";\nimport type remarkGfmType from \"remark-gfm\";\n\nimport { splitMarkdownBlocks } from \"../../shared/markdown-block-split.js\";\nimport {\n initialSmoothStreamingGraphemeCount,\n SMOOTH_STREAMING_COMMIT_INTERVAL_MS,\n smoothStreamingPunctuationDelayMs,\n smoothStreamingRevealCount,\n splitStreamingTextGraphemes,\n} from \"../../shared/streaming-text-smoothing.js\";\nimport {\n NEW_CHAT_ACTION_HREF,\n BUILDER_SPACE_SETTINGS_URL,\n} from \"../error-format.js\";\nimport { HighlightedCodeBlock as SharedHighlightedCodeBlock } from \"../HighlightedCodeBlock.js\";\nimport { IframeEmbed, parseEmbedBody } from \"../IframeEmbed.js\";\nimport { cn } from \"../utils.js\";\n\n// ─── Lazy markdown loader ────────────────────────────────────────────────────\n// react-markdown + remark-gfm are deferred so they stay off the critical path\n// of every page. The loader fires as soon as this module is evaluated (i.e.\n// when the lazy AssistantChat chunk lands — not at initial page parse).\n// This mirrors the existing shiki lazy-load pattern further below.\n\ntype ReactMarkdownModule = {\n default: typeof ReactMarkdownType;\n defaultUrlTransform: typeof DefaultUrlTransformType;\n};\n\nexport let markdownModule: ReactMarkdownModule | null = null;\nexport let remarkGfmFn: typeof remarkGfmType | null = null;\nconst markdownListeners = new Set<() => void>();\n\nexport function loadMarkdown(): void {\n if (markdownModule !== null) return; // already loaded\n Promise.all([import(\"react-markdown\"), import(\"remark-gfm\")]).then(\n ([md, gfm]) => {\n markdownModule = md as ReactMarkdownModule;\n remarkGfmFn = gfm.default;\n markdownListeners.forEach((fn) => fn());\n markdownListeners.clear();\n },\n );\n}\n\nexport function onMarkdownReady(fn: () => void): () => void {\n if (markdownModule !== null) {\n fn();\n return () => {};\n }\n markdownListeners.add(fn);\n return () => markdownListeners.delete(fn);\n}\n\nloadMarkdown();\n\n// ─── Lazy shiki highlighter ──────────────────────────────────────────────────\n// Using the fine-grained API so we only ship the languages and themes we\n// actually use (instead of shiki's full ~30 MB bundle of every grammar).\n// Required to keep the Cloudflare Pages Functions bundle under 25 MiB.\n\ntype ShikiHighlighter = {\n codeToHtml: (\n code: string,\n options: {\n lang: string;\n themes: { light: string; dark: string };\n defaultColor?: false | \"light\" | \"dark\";\n },\n ) => string | Promise<string>;\n getLoadedLanguages: () => string[];\n};\n\nlet highlighterLoader: Promise<ShikiHighlighter> | null = null;\nexport function loadHighlighter(): Promise<ShikiHighlighter> {\n if (!highlighterLoader) {\n highlighterLoader = (async () => {\n // Use the JavaScript regex engine instead of Oniguruma WASM (~608 KB saved).\n // forgiving:true degrades unsupported patterns gracefully instead of throwing.\n const [{ createHighlighterCore }, { createJavaScriptRegexEngine }] =\n await Promise.all([\n import(\"shiki/core\"),\n import(\"shiki/engine/javascript\"),\n ]);\n return createHighlighterCore({\n themes: [\n import(\"shiki/themes/github-light-default.mjs\"),\n import(\"shiki/themes/github-dark-default.mjs\"),\n ],\n langs: [\n import(\"shiki/langs/javascript.mjs\"),\n import(\"shiki/langs/typescript.mjs\"),\n import(\"shiki/langs/jsx.mjs\"),\n import(\"shiki/langs/tsx.mjs\"),\n import(\"shiki/langs/json.mjs\"),\n import(\"shiki/langs/css.mjs\"),\n import(\"shiki/langs/html.mjs\"),\n import(\"shiki/langs/markdown.mjs\"),\n import(\"shiki/langs/bash.mjs\"),\n import(\"shiki/langs/shellscript.mjs\"),\n import(\"shiki/langs/python.mjs\"),\n import(\"shiki/langs/yaml.mjs\"),\n import(\"shiki/langs/sql.mjs\"),\n ],\n engine: createJavaScriptRegexEngine({ forgiving: true }),\n }) as unknown as Promise<ShikiHighlighter>;\n })().catch((error) => {\n // Reset on failure so a future code block can retry instead of\n // silently failing forever on a stale chunk / network blip.\n highlighterLoader = null;\n throw error;\n });\n }\n return highlighterLoader;\n}\n\n// ─── Streaming context ───────────────────────────────────────────────────────\n// Declared at module level so HighlightedCodeBlock (used in markdownComponents\n// below) can read the current streaming state without the components object\n// needing to be rebuilt on every render.\n\nexport const TextStreamingContext = React.createContext(false);\n\n// ─── HighlightedCodeBlock wrapper ────────────────────────────────────────────\n// Reads streaming state from context so markdownComponents (a static constant)\n// can opt into debounced highlighting without needing to rebuild on every render.\n\nexport function HighlightedCodeBlock({\n code,\n lang,\n}: {\n code: string;\n lang: string;\n}) {\n const streaming = React.useContext(TextStreamingContext);\n return (\n <SharedHighlightedCodeBlock\n code={code}\n lang={lang}\n containerClass=\"agent-markdown-shiki\"\n streaming={streaming}\n loadHighlighter={loadHighlighter}\n />\n );\n}\n\n// ─── CTA helpers ─────────────────────────────────────────────────────────────\n\nconst CTA_BUTTON_CLASSES =\n \"agent-markdown-cta mt-1 inline-flex items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background no-underline shadow-sm transition-colors hover:bg-foreground/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background cursor-pointer\";\n\nfunction isBuilderErrorCtaHref(href: string | undefined): boolean {\n if (!href) return false;\n try {\n const url = new URL(href);\n if (url.protocol !== \"https:\" || url.hostname !== \"builder.io\") {\n return false;\n }\n return (\n url.href === BUILDER_SPACE_SETTINGS_URL ||\n url.pathname === \"/account/billing\" ||\n /^\\/app\\/organizations\\/[^/]+\\/billing$/.test(url.pathname)\n );\n } catch {\n return false;\n }\n}\n\n// react-markdown's defaultUrlTransform strips href values whose protocol\n// isn't on its safe list (https, mailto, etc.). Our in-app pseudo-href\n// `agent-native:new-chat` would be blanked out by that, so let it through\n// while delegating every other URL to the default transform for sanitization.\n// Falls back to the value unchanged when the react-markdown module hasn't\n// landed yet (conservative: no stripping beats an empty href).\nexport function markdownUrlTransform(value: string): string {\n if (value === NEW_CHAT_ACTION_HREF) return value;\n if (!markdownModule) return value;\n return markdownModule.defaultUrlTransform(value);\n}\n\n// ─── Code text extraction ─────────────────────────────────────────────────────\n\nexport function extractCodeText(child: React.ReactNode): string {\n if (typeof child === \"string\") return child;\n if (Array.isArray(child)) return child.map(extractCodeText).join(\"\");\n if (React.isValidElement(child)) {\n const props = child.props as { children?: React.ReactNode };\n return extractCodeText(props.children);\n }\n return \"\";\n}\n\n// ─── Markdown components ──────────────────────────────────────────────────────\n\nexport const markdownComponents = {\n a(props: React.AnchorHTMLAttributes<HTMLAnchorElement>) {\n const {\n href,\n children,\n className,\n rel: _rel,\n target: _target,\n ...rest\n } = props;\n if (href === NEW_CHAT_ACTION_HREF) {\n // In-app action: dispatch a CustomEvent that MultiTabAssistantChat\n // listens for and opens a new chat tab. Not an external navigation.\n return (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n window.dispatchEvent(new CustomEvent(\"agent-chat:new-chat\"));\n }}\n className={cn(CTA_BUTTON_CLASSES, className)}\n >\n <IconPlus size={13} strokeWidth={2} aria-hidden=\"true\" />\n <span>{children}</span>\n </button>\n );\n }\n const isBuilderCta = isBuilderErrorCtaHref(href);\n if (!isBuilderCta) {\n return (\n <a href={href} className={className} {...rest}>\n {children}\n </a>\n );\n }\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cn(CTA_BUTTON_CLASSES, className)}\n {...rest}\n >\n <span>{children}</span>\n <IconExternalLink size={13} strokeWidth={2} aria-hidden=\"true\" />\n </a>\n );\n },\n pre(props: React.HTMLAttributes<HTMLPreElement>) {\n const { children, ...rest } = props;\n if (React.isValidElement(children)) {\n const childProps = children.props as {\n className?: string;\n children?: React.ReactNode;\n };\n const className = childProps.className || \"\";\n if (/\\blanguage-embed\\b/.test(className)) {\n const body = extractCodeText(childProps.children);\n const parsed = parseEmbedBody(body);\n return (\n <IframeEmbed {...(parsed as Parameters<typeof IframeEmbed>[0])} />\n );\n }\n const langMatch = className.match(/\\blanguage-([\\w+-]+)\\b/);\n if (langMatch) {\n const code = extractCodeText(childProps.children).replace(/\\n$/, \"\");\n return <HighlightedCodeBlock code={code} lang={langMatch[1]} />;\n }\n }\n return <pre {...rest}>{children}</pre>;\n },\n};\n\n// ─── Smooth streaming ─────────────────────────────────────────────────────────\n\nfunction usePrefersReducedMotion(): boolean {\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(() =>\n typeof window !== \"undefined\" && window.matchMedia\n ? window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n : false,\n );\n\n useEffect(() => {\n if (typeof window === \"undefined\" || !window.matchMedia) return undefined;\n\n const media = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const handleChange = () => setPrefersReducedMotion(media.matches);\n handleChange();\n\n if (typeof media.addEventListener === \"function\") {\n media.addEventListener(\"change\", handleChange);\n return () => media.removeEventListener(\"change\", handleChange);\n }\n\n media.addListener(handleChange);\n return () => media.removeListener(handleChange);\n }, []);\n\n return prefersReducedMotion;\n}\n\nfunction sliceGraphemes(\n targetText: string,\n graphemes: readonly string[],\n count: number,\n): string {\n if (count >= graphemes.length) return targetText;\n if (count <= 0) return \"\";\n return graphemes.slice(0, count).join(\"\");\n}\n\nexport function useSmoothStreamingText(\n targetText: string,\n streaming: boolean,\n resetKey: string,\n): string {\n const prefersReducedMotion = usePrefersReducedMotion();\n const [visibleText, setVisibleText] = useState(() => {\n if (!streaming || prefersReducedMotion) return targetText;\n const graphemes = splitStreamingTextGraphemes(targetText);\n return sliceGraphemes(\n targetText,\n graphemes,\n initialSmoothStreamingGraphemeCount(graphemes),\n );\n });\n const visibleTextRef = useRef(visibleText);\n const visibleCountRef = useRef(\n splitStreamingTextGraphemes(visibleText).length,\n );\n const targetTextRef = useRef(targetText);\n const targetGraphemesRef = useRef(splitStreamingTextGraphemes(targetText));\n const frameRef = useRef<number | null>(null);\n const lastCommitAtRef = useRef(0);\n const pauseUntilRef = useRef(0);\n const resetKeyRef = useRef(resetKey);\n const stepRef = useRef<(time: number) => void>(() => {});\n\n const commitVisibleCount = useCallback((nextCount: number) => {\n const graphemes = targetGraphemesRef.current;\n const boundedCount = Math.max(0, Math.min(nextCount, graphemes.length));\n const nextText = sliceGraphemes(\n targetTextRef.current,\n graphemes,\n boundedCount,\n );\n visibleCountRef.current = boundedCount;\n if (visibleTextRef.current !== nextText) {\n visibleTextRef.current = nextText;\n setVisibleText(nextText);\n }\n }, []);\n\n const cancelFrame = useCallback(() => {\n if (\n frameRef.current != null &&\n typeof window !== \"undefined\" &&\n typeof window.cancelAnimationFrame === \"function\"\n ) {\n window.cancelAnimationFrame(frameRef.current);\n }\n frameRef.current = null;\n pauseUntilRef.current = 0;\n }, []);\n\n const scheduleFrame = useCallback(() => {\n if (frameRef.current != null) return;\n if (\n typeof window === \"undefined\" ||\n typeof window.requestAnimationFrame !== \"function\"\n ) {\n commitVisibleCount(targetGraphemesRef.current.length);\n return;\n }\n\n frameRef.current = window.requestAnimationFrame((time) => {\n frameRef.current = null;\n stepRef.current(time);\n });\n }, [commitVisibleCount]);\n\n stepRef.current = (time) => {\n const targetGraphemes = targetGraphemesRef.current;\n const backlog = targetGraphemes.length - visibleCountRef.current;\n if (backlog <= 0) {\n pauseUntilRef.current = 0;\n return;\n }\n\n if (pauseUntilRef.current > time) {\n scheduleFrame();\n return;\n }\n\n const lastCommitAt =\n lastCommitAtRef.current || time - SMOOTH_STREAMING_COMMIT_INTERVAL_MS;\n if (\n time - lastCommitAt < SMOOTH_STREAMING_COMMIT_INTERVAL_MS &&\n backlog > 1\n ) {\n scheduleFrame();\n return;\n }\n\n const revealCount = smoothStreamingRevealCount({\n backlog,\n elapsedMs: Math.min(120, Math.max(8, time - lastCommitAt)),\n });\n\n if (revealCount > 0) {\n const nextCount = visibleCountRef.current + revealCount;\n commitVisibleCount(nextCount);\n lastCommitAtRef.current = time;\n const nextBacklog = targetGraphemes.length - visibleCountRef.current;\n const pauseMs = smoothStreamingPunctuationDelayMs(\n targetGraphemes[visibleCountRef.current - 1],\n nextBacklog,\n );\n pauseUntilRef.current = pauseMs > 0 ? time + pauseMs : 0;\n }\n\n if (visibleCountRef.current < targetGraphemes.length) {\n scheduleFrame();\n } else {\n pauseUntilRef.current = 0;\n }\n };\n\n useEffect(() => {\n const targetGraphemes = splitStreamingTextGraphemes(targetText);\n targetTextRef.current = targetText;\n targetGraphemesRef.current = targetGraphemes;\n\n const keyChanged = resetKeyRef.current !== resetKey;\n resetKeyRef.current = resetKey;\n\n if (!streaming || prefersReducedMotion) {\n cancelFrame();\n commitVisibleCount(targetGraphemes.length);\n return;\n }\n\n const visibleNoLongerMatchesTarget =\n visibleTextRef.current.length > 0 &&\n !targetText.startsWith(visibleTextRef.current);\n\n if (\n visibleNoLongerMatchesTarget ||\n visibleCountRef.current > targetGraphemes.length ||\n (keyChanged && visibleTextRef.current.length === 0)\n ) {\n commitVisibleCount(initialSmoothStreamingGraphemeCount(targetGraphemes));\n lastCommitAtRef.current = 0;\n pauseUntilRef.current = 0;\n }\n\n if (visibleCountRef.current < targetGraphemes.length) {\n scheduleFrame();\n }\n }, [\n targetText,\n streaming,\n prefersReducedMotion,\n resetKey,\n cancelFrame,\n commitVisibleCount,\n scheduleFrame,\n ]);\n\n // When the tab returns from background, rAF has been paused and the backlog\n // may be tens of thousands of characters. Animating from where we left off\n // would replay minutes of content at the normal rate — instead jump the\n // cursor to near the tail so only the final ~200 graphemes animate in.\n // Reduced-motion users already get instant reveals (handled above), so this\n // guard only applies to the normal animation path.\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n const onVisibilityChange = () => {\n if (document.visibilityState !== \"visible\") return;\n if (!streaming || prefersReducedMotion) return;\n const graphemes = targetGraphemesRef.current;\n const backlog = graphemes.length - visibleCountRef.current;\n const BACKGROUND_CATCH_UP_THRESHOLD = 2000;\n const BACKGROUND_TAIL_GRAPHEMES = 200;\n if (backlog > BACKGROUND_CATCH_UP_THRESHOLD) {\n commitVisibleCount(\n Math.max(0, graphemes.length - BACKGROUND_TAIL_GRAPHEMES),\n );\n lastCommitAtRef.current = 0;\n pauseUntilRef.current = 0;\n scheduleFrame();\n }\n };\n document.addEventListener(\"visibilitychange\", onVisibilityChange);\n return () =>\n document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n }, [streaming, prefersReducedMotion, commitVisibleCount, scheduleFrame]);\n\n useEffect(() => cancelFrame, [cancelFrame]);\n\n return visibleText;\n}\n\n// ─── Markdown readiness hook ──────────────────────────────────────────────────\n\nexport function useMarkdownReady(): boolean {\n const [ready, setReady] = useState(() => markdownModule !== null);\n useEffect(() => {\n if (markdownModule !== null) return;\n return onMarkdownReady(() => setReady(true));\n }, []);\n return ready;\n}\n\n// ─── MemoizedMarkdownBlock ────────────────────────────────────────────────────\n// Renders a single stable markdown block. Wrapped in React.memo so React\n// skips re-rendering completed blocks when only the tail changes.\n\nexport const MemoizedMarkdownBlock = React.memo(function MemoizedMarkdownBlock({\n blockText,\n}: {\n blockText: string;\n}) {\n const ReactMarkdown = markdownModule?.default;\n const gfm = remarkGfmFn;\n if (!ReactMarkdown || !gfm) return null;\n return (\n <ReactMarkdown\n remarkPlugins={[gfm]}\n components={markdownComponents}\n urlTransform={markdownUrlTransform}\n >\n {blockText}\n </ReactMarkdown>\n );\n});\n\n// ─── SmoothMarkdownText ────────────────────────────────────────────────────────\n\nexport function SmoothMarkdownText({\n text,\n streaming,\n resetKey,\n statusType = \"complete\",\n}: {\n text: string;\n streaming: boolean;\n resetKey: string;\n statusType?: string;\n}) {\n const mdReady = useMarkdownReady();\n const visibleText = useSmoothStreamingText(text, streaming, resetKey);\n const isVisuallyStreaming = streaming && visibleText !== text;\n const ReactMarkdown = markdownModule?.default;\n const gfm = remarkGfmFn;\n\n // Block-memoized rendering: during streaming split the visible text into\n // stable completed blocks + an in-progress tail. Only the tail re-renders\n // on every commit; completed blocks are React.memo'd and skipped.\n // On completion we fall through to a single ReactMarkdown pass to guarantee\n // byte-identical final output (no block-split artifacts).\n const split = useMemo(\n () => (isVisuallyStreaming ? splitMarkdownBlocks(visibleText) : null),\n [isVisuallyStreaming, visibleText],\n );\n\n return (\n <div\n className=\"agent-markdown break-words\"\n data-status={statusType}\n data-streaming={isVisuallyStreaming ? \"true\" : undefined}\n >\n {mdReady && ReactMarkdown && gfm ? (\n split ? (\n // Streaming: render completed blocks (memoized) + live tail block\n <>\n {split.completedBlocks.map((block, i) => (\n <MemoizedMarkdownBlock key={i} blockText={block} />\n ))}\n {split.tail ? (\n <ReactMarkdown\n remarkPlugins={[gfm]}\n components={markdownComponents}\n urlTransform={markdownUrlTransform}\n >\n {split.tail}\n </ReactMarkdown>\n ) : null}\n </>\n ) : (\n // Not streaming (or streaming complete): single-pass render\n <ReactMarkdown\n remarkPlugins={[gfm]}\n components={markdownComponents}\n urlTransform={markdownUrlTransform}\n >\n {visibleText}\n </ReactMarkdown>\n )\n ) : (\n // Plain text while the react-markdown chunk is in flight.\n // The chunk is already being fetched by loadMarkdown() above, so\n // this placeholder is typically only visible for one render frame.\n <span style={{ whiteSpace: \"pre-wrap\" }}>{visibleText}</span>\n )}\n </div>\n );\n}\n\n// ─── MarkdownText ──────────────────────────────────────────────────────────────\n\nexport function MarkdownText() {\n const textPart = useMessagePartText();\n const messageRuntime = useMessageRuntime();\n const message = messageRuntime.getState();\n const thread = useThread();\n const textStreaming = React.useContext(TextStreamingContext);\n const lastMessage = thread.messages[thread.messages.length - 1];\n const isLastAssistantMessage =\n message.role === \"assistant\" && lastMessage?.id === message.id;\n const statusType =\n textPart.status?.type ?? message.status?.type ?? \"complete\";\n\n return (\n <SmoothMarkdownText\n text={textPart.text}\n streaming={textStreaming && isLastAssistantMessage}\n resetKey={`${message.id}:${statusType}`}\n statusType={statusType}\n />\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"markdown-renderer.js","sourceRoot":"","sources":["../../../src/client/chat/markdown-renderer.tsx"],"names":[],"mappings":";AAAA,6EAA6E;AAC7E,gFAAgF;AAChF,uDAAuD;AAEvD,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,EACZ,QAAQ,EACR,SAAS,EACT,WAAW,EACX,OAAO,EACP,MAAM,GACP,MAAM,OAAO,CAAC;AAMf,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EACL,mCAAmC,EACnC,mCAAmC,EACnC,iCAAiC,EACjC,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,IAAI,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAajC,MAAM,CAAC,IAAI,cAAc,GAA+B,IAAI,CAAC;AAC7D,MAAM,CAAC,IAAI,WAAW,GAAgC,IAAI,CAAC;AAC3D,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAc,CAAC;AAEhD,MAAM,UAAU,YAAY;IAC1B,IAAI,cAAc,KAAK,IAAI;QAAE,OAAO,CAAC,iBAAiB;IACtD,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAChE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;QACZ,cAAc,GAAG,EAAyB,CAAC;QAC3C,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC;QAC1B,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAc;IAC5C,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAC5B,EAAE,EAAE,CAAC;QACL,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC;IACD,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1B,OAAO,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,YAAY,EAAE,CAAC;AAmBf,IAAI,iBAAiB,GAAqC,IAAI,CAAC;AAC/D,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,iBAAiB,GAAG,CAAC,KAAK,IAAI,EAAE;YAC9B,6EAA6E;YAC7E,+EAA+E;YAC/E,MAAM,CAAC,EAAE,qBAAqB,EAAE,EAAE,EAAE,2BAA2B,EAAE,CAAC,GAChE,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,MAAM,CAAC,YAAY,CAAC;gBACpB,MAAM,CAAC,yBAAyB,CAAC;aAClC,CAAC,CAAC;YACL,OAAO,qBAAqB,CAAC;gBAC3B,MAAM,EAAE;oBACN,MAAM,CAAC,uCAAuC,CAAC;oBAC/C,MAAM,CAAC,sCAAsC,CAAC;iBAC/C;gBACD,KAAK,EAAE;oBACL,MAAM,CAAC,4BAA4B,CAAC;oBACpC,MAAM,CAAC,4BAA4B,CAAC;oBACpC,MAAM,CAAC,qBAAqB,CAAC;oBAC7B,MAAM,CAAC,qBAAqB,CAAC;oBAC7B,MAAM,CAAC,sBAAsB,CAAC;oBAC9B,MAAM,CAAC,qBAAqB,CAAC;oBAC7B,MAAM,CAAC,sBAAsB,CAAC;oBAC9B,MAAM,CAAC,0BAA0B,CAAC;oBAClC,MAAM,CAAC,sBAAsB,CAAC;oBAC9B,MAAM,CAAC,6BAA6B,CAAC;oBACrC,MAAM,CAAC,wBAAwB,CAAC;oBAChC,MAAM,CAAC,sBAAsB,CAAC;oBAC9B,MAAM,CAAC,qBAAqB,CAAC;iBAC9B;gBACD,MAAM,EAAE,2BAA2B,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;aACzD,CAAyC,CAAC;QAC7C,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACnB,+DAA+D;YAC/D,4DAA4D;YAC5D,iBAAiB,GAAG,IAAI,CAAC;YACzB,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,gFAAgF;AAChF,+EAA+E;AAC/E,4EAA4E;AAC5E,yCAAyC;AAEzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAE/D,gFAAgF;AAChF,+EAA+E;AAC/E,kFAAkF;AAElF,MAAM,UAAU,oBAAoB,CAAC,EACnC,IAAI,EACJ,IAAI,GAIL;IACC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACzD,OAAO,CACL,KAAC,0BAA0B,IACzB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,cAAc,EAAC,sBAAsB,EACrC,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,GAChC,CACH,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,MAAM,kBAAkB,GACtB,2VAA2V,CAAC;AAE9V,SAAS,qBAAqB,CAAC,IAAwB;IACrD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,CACL,GAAG,CAAC,IAAI,KAAK,0BAA0B;YACvC,GAAG,CAAC,QAAQ,KAAK,kBAAkB;YACnC,GAAG,CAAC,QAAQ,KAAK,uBAAuB;YACxC,wCAAwC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAC5D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,uEAAuE;AACvE,0EAA0E;AAC1E,8EAA8E;AAC9E,0EAA0E;AAC1E,+DAA+D;AAC/D,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,IAAI,KAAK,KAAK,oBAAoB;QAAE,OAAO,KAAK,CAAC;IACjD,IAAI,CAAC,cAAc;QAAE,OAAO,KAAK,CAAC;IAClC,OAAO,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,eAAe,CAAC,KAAsB;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAuC,CAAC;QAC5D,OAAO,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,iFAAiF;AAEjF,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,CAAC,CAAC,KAAoD;QACpD,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,GAAG,EAAE,IAAI,EACT,MAAM,EAAE,OAAO,EACf,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;QACV,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;YAClC,mEAAmE;YACnE,oEAAoE;YACpE,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBACb,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBAC/D,CAAC,EACD,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC,aAE5C,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,iBAAc,MAAM,GAAG,EACzD,yBAAO,QAAQ,GAAQ,IAChB,CACV,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CACL,YAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,KAAM,IAAI,YAC1C,QAAQ,GACP,CACL,CAAC;QACJ,CAAC;QACD,OAAO,CACL,aACE,IAAI,EAAE,IAAI,EACV,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,YAAY,EAChB,SAAS,EAAE,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC,KACxC,IAAI,aAER,yBAAO,QAAQ,GAAQ,EACvB,KAAC,gBAAgB,IAAC,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,iBAAc,MAAM,GAAG,IAC/D,CACL,CAAC;IACJ,CAAC;IACD,GAAG,CAAC,KAA2C;QAC7C,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;QACpC,IAAI,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,QAAQ,CAAC,KAG3B,CAAC;YACF,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,IAAI,EAAE,CAAC;YAC7C,IAAI,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAClD,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;gBACpC,OAAO,CACL,KAAC,WAAW,OAAM,MAA4C,GAAI,CACnE,CAAC;YACJ,CAAC;YACD,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC5D,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACrE,OAAO,KAAC,oBAAoB,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAI,CAAC;YAClE,CAAC;QACH,CAAC;QACD,OAAO,iBAAS,IAAI,YAAG,QAAQ,GAAO,CAAC;IACzC,CAAC;CACF,CAAC;AAEF,iFAAiF;AAEjF,SAAS,uBAAuB;IAC9B,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CACpE,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU;QAChD,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO;QAC/D,CAAC,CAAC,KAAK,CACV,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,UAAU;YAAE,OAAO,SAAS,CAAC;QAE1E,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClE,YAAY,EAAE,CAAC;QAEf,IAAI,OAAO,KAAK,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;YACjD,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAC/C,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACjE,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAChC,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,SAAS,cAAc,CACrB,UAAkB,EAClB,SAA4B,EAC5B,KAAa;IAEb,IAAI,KAAK,IAAI,SAAS,CAAC,MAAM;QAAE,OAAO,UAAU,CAAC;IACjD,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1B,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,UAAkB,EAClB,SAAkB,EAClB,QAAgB;IAEhB,MAAM,oBAAoB,GAAG,uBAAuB,EAAE,CAAC;IACvD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE;QAClD,IAAI,CAAC,SAAS,IAAI,oBAAoB;YAAE,OAAO,UAAU,CAAC;QAC1D,MAAM,SAAS,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;QAC1D,OAAO,cAAc,CACnB,UAAU,EACV,SAAS,EACT,mCAAmC,CAAC,SAAS,CAAC,CAC/C,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,MAAM,CAC5B,2BAA2B,CAAC,WAAW,CAAC,CAAC,MAAM,CAChD,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,kBAAkB,GAAG,MAAM,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAC7C,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,CAAyB,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEzD,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,SAAiB,EAAE,EAAE;QAC3D,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC;QAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,cAAc,CAC7B,aAAa,CAAC,OAAO,EACrB,SAAS,EACT,YAAY,CACb,CAAC;QACF,eAAe,CAAC,OAAO,GAAG,YAAY,CAAC;QACvC,IAAI,cAAc,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACxC,cAAc,CAAC,OAAO,GAAG,QAAQ,CAAC;YAClC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,IACE,QAAQ,CAAC,OAAO,IAAI,IAAI;YACxB,OAAO,MAAM,KAAK,WAAW;YAC7B,OAAO,MAAM,CAAC,oBAAoB,KAAK,UAAU,EACjD,CAAC;YACD,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,aAAa,CAAC,OAAO,GAAG,CAAC,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;QACrC,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI;YAAE,OAAO;QACrC,IACE,OAAO,MAAM,KAAK,WAAW;YAC7B,OAAO,MAAM,CAAC,qBAAqB,KAAK,UAAU,EAClD,CAAC;YACD,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,EAAE;YACvD,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YACxB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzB,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,CAAC;QACnD,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC;QACjE,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YACjB,aAAa,CAAC,OAAO,GAAG,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,aAAa,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;YACjC,aAAa,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAChB,eAAe,CAAC,OAAO,IAAI,IAAI,GAAG,mCAAmC,CAAC;QACxE,IACE,IAAI,GAAG,YAAY,GAAG,mCAAmC;YACzD,OAAO,GAAG,CAAC,EACX,CAAC;YACD,aAAa,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,0BAA0B,CAAC;YAC7C,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,YAAY,CAAC,CAAC;SAC3D,CAAC,CAAC;QAEH,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,GAAG,WAAW,CAAC;YACxD,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAC9B,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;YAC/B,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC;YACrE,MAAM,OAAO,GAAG,iCAAiC,CAC/C,eAAe,CAAC,eAAe,CAAC,OAAO,GAAG,CAAC,CAAC,EAC5C,WAAW,CACZ,CAAC;YACF,aAAa,CAAC,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,eAAe,CAAC,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;YACrD,aAAa,EAAE,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,OAAO,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,eAAe,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;QAChE,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC;QACnC,kBAAkB,CAAC,OAAO,GAAG,eAAe,CAAC;QAE7C,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,KAAK,QAAQ,CAAC;QACpD,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;QAE/B,IAAI,CAAC,SAAS,IAAI,oBAAoB,EAAE,CAAC;YACvC,WAAW,EAAE,CAAC;YACd,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,MAAM,4BAA4B,GAChC,cAAc,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACjC,CAAC,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAEjD,IACE,4BAA4B;YAC5B,eAAe,CAAC,OAAO,GAAG,eAAe,CAAC,MAAM;YAChD,CAAC,UAAU,IAAI,cAAc,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,EACnD,CAAC;YACD,kBAAkB,CAAC,mCAAmC,CAAC,eAAe,CAAC,CAAC,CAAC;YACzE,eAAe,CAAC,OAAO,GAAG,CAAC,CAAC;YAC5B,aAAa,CAAC,OAAO,GAAG,CAAC,CAAC;QAC5B,CAAC;QAED,IAAI,eAAe,CAAC,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;YACrD,aAAa,EAAE,CAAC;QAClB,CAAC;IACH,CAAC,EAAE;QACD,UAAU;QACV,SAAS;QACT,oBAAoB;QACpB,QAAQ;QACR,WAAW;QACX,kBAAkB;QAClB,aAAa;KACd,CAAC,CAAC;IAEH,4EAA4E;IAC5E,2EAA2E;IAC3E,wEAAwE;IACxE,uEAAuE;IACvE,4EAA4E;IAC5E,mDAAmD;IACnD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO;QAC5C,MAAM,kBAAkB,GAAG,GAAG,EAAE;YAC9B,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;gBAAE,OAAO;YACnD,IAAI,CAAC,SAAS,IAAI,oBAAoB;gBAAE,OAAO;YAC/C,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC;YAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC;YAC3D,MAAM,6BAA6B,GAAG,IAAI,CAAC;YAC3C,MAAM,yBAAyB,GAAG,GAAG,CAAC;YACtC,IAAI,OAAO,GAAG,6BAA6B,EAAE,CAAC;gBAC5C,kBAAkB,CAChB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,yBAAyB,CAAC,CAC1D,CAAC;gBACF,eAAe,CAAC,OAAO,GAAG,CAAC,CAAC;gBAC5B,aAAa,CAAC,OAAO,GAAG,CAAC,CAAC;gBAC1B,aAAa,EAAE,CAAC;YAClB,CAAC;QACH,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;QAClE,OAAO,GAAG,EAAE,CACV,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IACzE,CAAC,EAAE,CAAC,SAAS,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC,CAAC;IAEzE,SAAS,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAE5C,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,gBAAgB;IAC9B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC;IAClE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,cAAc,KAAK,IAAI;YAAE,OAAO;QACpC,OAAO,eAAe,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iFAAiF;AACjF,yEAAyE;AACzE,kEAAkE;AAElE,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,qBAAqB,CAAC,EAC7E,SAAS,GAGV;IACC,MAAM,aAAa,GAAG,cAAc,EAAE,OAAO,CAAC;IAC9C,MAAM,GAAG,GAAG,WAAW,CAAC;IACxB,IAAI,CAAC,aAAa,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,CACL,KAAC,aAAa,IACZ,aAAa,EAAE,CAAC,GAAG,CAAC,EACpB,UAAU,EAAE,kBAAkB,EAC9B,YAAY,EAAE,oBAAoB,YAEjC,SAAS,GACI,CACjB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,kFAAkF;AAElF,MAAM,UAAU,kBAAkB,CAAC,EACjC,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,UAAU,GAAG,UAAU,GAMxB;IACC,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACtE,MAAM,mBAAmB,GAAG,SAAS,IAAI,WAAW,KAAK,IAAI,CAAC;IAC9D,MAAM,aAAa,GAAG,cAAc,EAAE,OAAO,CAAC;IAC9C,MAAM,GAAG,GAAG,WAAW,CAAC;IAExB,yEAAyE;IACzE,2EAA2E;IAC3E,kEAAkE;IAClE,4EAA4E;IAC5E,0DAA0D;IAC1D,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EACrE,CAAC,mBAAmB,EAAE,WAAW,CAAC,CACnC,CAAC;IAEF,OAAO,CACL,cACE,SAAS,EAAC,4BAA4B,iBACzB,UAAU,oBACP,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YAEvD,OAAO,IAAI,aAAa,IAAI,GAAG,CAAC,CAAC,CAAC,CACjC,KAAK,CAAC,CAAC,CAAC,CAEN,8BACG,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CACvC,KAAC,qBAAqB,IAAS,SAAS,EAAE,KAAK,IAAnB,CAAC,CAAsB,CACpD,CAAC,EACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CACZ,KAAC,aAAa,IACZ,aAAa,EAAE,CAAC,GAAG,CAAC,EACpB,UAAU,EAAE,kBAAkB,EAC9B,YAAY,EAAE,oBAAoB,YAEjC,KAAK,CAAC,IAAI,GACG,CACjB,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,CAAC,CAAC,CAAC,CAEF,KAAC,aAAa,IACZ,aAAa,EAAE,CAAC,GAAG,CAAC,EACpB,UAAU,EAAE,kBAAkB,EAC9B,YAAY,EAAE,oBAAoB,YAEjC,WAAW,GACE,CACjB,CACF,CAAC,CAAC,CAAC,CAIF,eAAM,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,YAAG,WAAW,GAAQ,CAC9D,GACG,CACP,CAAC;AACJ,CAAC;AAED,kFAAkF;AAElF,MAAM,UAAU,YAAY;IAC1B,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChE,MAAM,sBAAsB,GAC1B,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,WAAW,EAAE,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC;IACjE,MAAM,UAAU,GACd,QAAQ,CAAC,MAAM,EAAE,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,IAAI,UAAU,CAAC;IAE9D,OAAO,CACL,KAAC,kBAAkB,IACjB,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,SAAS,EAAE,aAAa,IAAI,sBAAsB,EAClD,QAAQ,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,UAAU,EAAE,EACvC,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;AACJ,CAAC","sourcesContent":["// Owns: lazy react-markdown/shiki loaders, SmoothMarkdownText, MarkdownText,\n// HighlightedCodeBlock wrapper, and the markdownComponents/markdownUrlTransform\n// used by every markdown render path in AssistantChat.\n\nimport {\n useThread,\n useMessageRuntime,\n useMessagePartText,\n} from \"@assistant-ui/react\";\nimport { IconPlus, IconExternalLink } from \"@tabler/icons-react\";\nimport React, {\n useState,\n useEffect,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\n// react-markdown + remark-gfm type imports only — loaded lazily below.\nimport type { default as ReactMarkdownType } from \"react-markdown\";\nimport type { defaultUrlTransform as DefaultUrlTransformType } from \"react-markdown\";\nimport type remarkGfmType from \"remark-gfm\";\n\nimport { splitMarkdownBlocks } from \"../../shared/markdown-block-split.js\";\nimport {\n initialSmoothStreamingGraphemeCount,\n SMOOTH_STREAMING_COMMIT_INTERVAL_MS,\n smoothStreamingPunctuationDelayMs,\n smoothStreamingRevealCount,\n splitStreamingTextGraphemes,\n} from \"../../shared/streaming-text-smoothing.js\";\nimport {\n NEW_CHAT_ACTION_HREF,\n BUILDER_SPACE_SETTINGS_URL,\n} from \"../error-format.js\";\nimport { HighlightedCodeBlock as SharedHighlightedCodeBlock } from \"../HighlightedCodeBlock.js\";\nimport { IframeEmbed, parseEmbedBody } from \"../IframeEmbed.js\";\nimport { cn } from \"../utils.js\";\n\n// ─── Lazy markdown loader ────────────────────────────────────────────────────\n// react-markdown + remark-gfm are deferred so they stay off the critical path\n// of every page. The loader fires as soon as this module is evaluated (i.e.\n// when the lazy AssistantChat chunk lands — not at initial page parse).\n// This mirrors the existing shiki lazy-load pattern further below.\n\ntype ReactMarkdownModule = {\n default: typeof ReactMarkdownType;\n defaultUrlTransform: typeof DefaultUrlTransformType;\n};\n\nexport let markdownModule: ReactMarkdownModule | null = null;\nexport let remarkGfmFn: typeof remarkGfmType | null = null;\nconst markdownListeners = new Set<() => void>();\n\nexport function loadMarkdown(): void {\n if (markdownModule !== null) return; // already loaded\n Promise.all([import(\"react-markdown\"), import(\"remark-gfm\")]).then(\n ([md, gfm]) => {\n markdownModule = md as ReactMarkdownModule;\n remarkGfmFn = gfm.default;\n markdownListeners.forEach((fn) => fn());\n markdownListeners.clear();\n },\n );\n}\n\nexport function onMarkdownReady(fn: () => void): () => void {\n if (markdownModule !== null) {\n fn();\n return () => {};\n }\n markdownListeners.add(fn);\n return () => markdownListeners.delete(fn);\n}\n\nloadMarkdown();\n\n// ─── Lazy shiki highlighter ──────────────────────────────────────────────────\n// Using the fine-grained API so we only ship the languages and themes we\n// actually use (instead of shiki's full ~30 MB bundle of every grammar).\n// Required to keep the Cloudflare Pages Functions bundle under 25 MiB.\n\ntype ShikiHighlighter = {\n codeToHtml: (\n code: string,\n options: {\n lang: string;\n themes: { light: string; dark: string };\n defaultColor?: false | \"light\" | \"dark\";\n },\n ) => string | Promise<string>;\n getLoadedLanguages: () => string[];\n};\n\nlet highlighterLoader: Promise<ShikiHighlighter> | null = null;\nexport function loadHighlighter(): Promise<ShikiHighlighter> {\n if (!highlighterLoader) {\n highlighterLoader = (async () => {\n // Use the JavaScript regex engine instead of Oniguruma WASM (~608 KB saved).\n // forgiving:true degrades unsupported patterns gracefully instead of throwing.\n const [{ createHighlighterCore }, { createJavaScriptRegexEngine }] =\n await Promise.all([\n import(\"shiki/core\"),\n import(\"shiki/engine/javascript\"),\n ]);\n return createHighlighterCore({\n themes: [\n import(\"shiki/themes/github-light-default.mjs\"),\n import(\"shiki/themes/github-dark-default.mjs\"),\n ],\n langs: [\n import(\"shiki/langs/javascript.mjs\"),\n import(\"shiki/langs/typescript.mjs\"),\n import(\"shiki/langs/jsx.mjs\"),\n import(\"shiki/langs/tsx.mjs\"),\n import(\"shiki/langs/json.mjs\"),\n import(\"shiki/langs/css.mjs\"),\n import(\"shiki/langs/html.mjs\"),\n import(\"shiki/langs/markdown.mjs\"),\n import(\"shiki/langs/bash.mjs\"),\n import(\"shiki/langs/shellscript.mjs\"),\n import(\"shiki/langs/python.mjs\"),\n import(\"shiki/langs/yaml.mjs\"),\n import(\"shiki/langs/sql.mjs\"),\n ],\n engine: createJavaScriptRegexEngine({ forgiving: true }),\n }) as unknown as Promise<ShikiHighlighter>;\n })().catch((error) => {\n // Reset on failure so a future code block can retry instead of\n // silently failing forever on a stale chunk / network blip.\n highlighterLoader = null;\n throw error;\n });\n }\n return highlighterLoader;\n}\n\n// ─── Streaming context ───────────────────────────────────────────────────────\n// Declared at module level so HighlightedCodeBlock (used in markdownComponents\n// below) can read the current streaming state without the components object\n// needing to be rebuilt on every render.\n\nexport const TextStreamingContext = React.createContext(false);\n\n// ─── HighlightedCodeBlock wrapper ────────────────────────────────────────────\n// Reads streaming state from context so markdownComponents (a static constant)\n// can opt into debounced highlighting without needing to rebuild on every render.\n\nexport function HighlightedCodeBlock({\n code,\n lang,\n}: {\n code: string;\n lang: string;\n}) {\n const streaming = React.useContext(TextStreamingContext);\n return (\n <SharedHighlightedCodeBlock\n code={code}\n lang={lang}\n containerClass=\"agent-markdown-shiki\"\n streaming={streaming}\n loadHighlighter={loadHighlighter}\n />\n );\n}\n\n// ─── CTA helpers ─────────────────────────────────────────────────────────────\n\nconst CTA_BUTTON_CLASSES =\n \"agent-markdown-cta mt-1 inline-flex items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background no-underline shadow-sm transition-colors hover:bg-foreground/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background cursor-pointer\";\n\nfunction isBuilderErrorCtaHref(href: string | undefined): boolean {\n if (!href) return false;\n try {\n const url = new URL(href);\n if (url.protocol !== \"https:\" || url.hostname !== \"builder.io\") {\n return false;\n }\n return (\n url.href === BUILDER_SPACE_SETTINGS_URL ||\n url.pathname === \"/account/billing\" ||\n url.pathname === \"/account/subscription\" ||\n /^\\/app\\/organizations\\/[^/]+\\/billing$/.test(url.pathname)\n );\n } catch {\n return false;\n }\n}\n\n// react-markdown's defaultUrlTransform strips href values whose protocol\n// isn't on its safe list (https, mailto, etc.). Our in-app pseudo-href\n// `agent-native:new-chat` would be blanked out by that, so let it through\n// while delegating every other URL to the default transform for sanitization.\n// Falls back to the value unchanged when the react-markdown module hasn't\n// landed yet (conservative: no stripping beats an empty href).\nexport function markdownUrlTransform(value: string): string {\n if (value === NEW_CHAT_ACTION_HREF) return value;\n if (!markdownModule) return value;\n return markdownModule.defaultUrlTransform(value);\n}\n\n// ─── Code text extraction ─────────────────────────────────────────────────────\n\nexport function extractCodeText(child: React.ReactNode): string {\n if (typeof child === \"string\") return child;\n if (Array.isArray(child)) return child.map(extractCodeText).join(\"\");\n if (React.isValidElement(child)) {\n const props = child.props as { children?: React.ReactNode };\n return extractCodeText(props.children);\n }\n return \"\";\n}\n\n// ─── Markdown components ──────────────────────────────────────────────────────\n\nexport const markdownComponents = {\n a(props: React.AnchorHTMLAttributes<HTMLAnchorElement>) {\n const {\n href,\n children,\n className,\n rel: _rel,\n target: _target,\n ...rest\n } = props;\n if (href === NEW_CHAT_ACTION_HREF) {\n // In-app action: dispatch a CustomEvent that MultiTabAssistantChat\n // listens for and opens a new chat tab. Not an external navigation.\n return (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n window.dispatchEvent(new CustomEvent(\"agent-chat:new-chat\"));\n }}\n className={cn(CTA_BUTTON_CLASSES, className)}\n >\n <IconPlus size={13} strokeWidth={2} aria-hidden=\"true\" />\n <span>{children}</span>\n </button>\n );\n }\n const isBuilderCta = isBuilderErrorCtaHref(href);\n if (!isBuilderCta) {\n return (\n <a href={href} className={className} {...rest}>\n {children}\n </a>\n );\n }\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className={cn(CTA_BUTTON_CLASSES, className)}\n {...rest}\n >\n <span>{children}</span>\n <IconExternalLink size={13} strokeWidth={2} aria-hidden=\"true\" />\n </a>\n );\n },\n pre(props: React.HTMLAttributes<HTMLPreElement>) {\n const { children, ...rest } = props;\n if (React.isValidElement(children)) {\n const childProps = children.props as {\n className?: string;\n children?: React.ReactNode;\n };\n const className = childProps.className || \"\";\n if (/\\blanguage-embed\\b/.test(className)) {\n const body = extractCodeText(childProps.children);\n const parsed = parseEmbedBody(body);\n return (\n <IframeEmbed {...(parsed as Parameters<typeof IframeEmbed>[0])} />\n );\n }\n const langMatch = className.match(/\\blanguage-([\\w+-]+)\\b/);\n if (langMatch) {\n const code = extractCodeText(childProps.children).replace(/\\n$/, \"\");\n return <HighlightedCodeBlock code={code} lang={langMatch[1]} />;\n }\n }\n return <pre {...rest}>{children}</pre>;\n },\n};\n\n// ─── Smooth streaming ─────────────────────────────────────────────────────────\n\nfunction usePrefersReducedMotion(): boolean {\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(() =>\n typeof window !== \"undefined\" && window.matchMedia\n ? window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n : false,\n );\n\n useEffect(() => {\n if (typeof window === \"undefined\" || !window.matchMedia) return undefined;\n\n const media = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const handleChange = () => setPrefersReducedMotion(media.matches);\n handleChange();\n\n if (typeof media.addEventListener === \"function\") {\n media.addEventListener(\"change\", handleChange);\n return () => media.removeEventListener(\"change\", handleChange);\n }\n\n media.addListener(handleChange);\n return () => media.removeListener(handleChange);\n }, []);\n\n return prefersReducedMotion;\n}\n\nfunction sliceGraphemes(\n targetText: string,\n graphemes: readonly string[],\n count: number,\n): string {\n if (count >= graphemes.length) return targetText;\n if (count <= 0) return \"\";\n return graphemes.slice(0, count).join(\"\");\n}\n\nexport function useSmoothStreamingText(\n targetText: string,\n streaming: boolean,\n resetKey: string,\n): string {\n const prefersReducedMotion = usePrefersReducedMotion();\n const [visibleText, setVisibleText] = useState(() => {\n if (!streaming || prefersReducedMotion) return targetText;\n const graphemes = splitStreamingTextGraphemes(targetText);\n return sliceGraphemes(\n targetText,\n graphemes,\n initialSmoothStreamingGraphemeCount(graphemes),\n );\n });\n const visibleTextRef = useRef(visibleText);\n const visibleCountRef = useRef(\n splitStreamingTextGraphemes(visibleText).length,\n );\n const targetTextRef = useRef(targetText);\n const targetGraphemesRef = useRef(splitStreamingTextGraphemes(targetText));\n const frameRef = useRef<number | null>(null);\n const lastCommitAtRef = useRef(0);\n const pauseUntilRef = useRef(0);\n const resetKeyRef = useRef(resetKey);\n const stepRef = useRef<(time: number) => void>(() => {});\n\n const commitVisibleCount = useCallback((nextCount: number) => {\n const graphemes = targetGraphemesRef.current;\n const boundedCount = Math.max(0, Math.min(nextCount, graphemes.length));\n const nextText = sliceGraphemes(\n targetTextRef.current,\n graphemes,\n boundedCount,\n );\n visibleCountRef.current = boundedCount;\n if (visibleTextRef.current !== nextText) {\n visibleTextRef.current = nextText;\n setVisibleText(nextText);\n }\n }, []);\n\n const cancelFrame = useCallback(() => {\n if (\n frameRef.current != null &&\n typeof window !== \"undefined\" &&\n typeof window.cancelAnimationFrame === \"function\"\n ) {\n window.cancelAnimationFrame(frameRef.current);\n }\n frameRef.current = null;\n pauseUntilRef.current = 0;\n }, []);\n\n const scheduleFrame = useCallback(() => {\n if (frameRef.current != null) return;\n if (\n typeof window === \"undefined\" ||\n typeof window.requestAnimationFrame !== \"function\"\n ) {\n commitVisibleCount(targetGraphemesRef.current.length);\n return;\n }\n\n frameRef.current = window.requestAnimationFrame((time) => {\n frameRef.current = null;\n stepRef.current(time);\n });\n }, [commitVisibleCount]);\n\n stepRef.current = (time) => {\n const targetGraphemes = targetGraphemesRef.current;\n const backlog = targetGraphemes.length - visibleCountRef.current;\n if (backlog <= 0) {\n pauseUntilRef.current = 0;\n return;\n }\n\n if (pauseUntilRef.current > time) {\n scheduleFrame();\n return;\n }\n\n const lastCommitAt =\n lastCommitAtRef.current || time - SMOOTH_STREAMING_COMMIT_INTERVAL_MS;\n if (\n time - lastCommitAt < SMOOTH_STREAMING_COMMIT_INTERVAL_MS &&\n backlog > 1\n ) {\n scheduleFrame();\n return;\n }\n\n const revealCount = smoothStreamingRevealCount({\n backlog,\n elapsedMs: Math.min(120, Math.max(8, time - lastCommitAt)),\n });\n\n if (revealCount > 0) {\n const nextCount = visibleCountRef.current + revealCount;\n commitVisibleCount(nextCount);\n lastCommitAtRef.current = time;\n const nextBacklog = targetGraphemes.length - visibleCountRef.current;\n const pauseMs = smoothStreamingPunctuationDelayMs(\n targetGraphemes[visibleCountRef.current - 1],\n nextBacklog,\n );\n pauseUntilRef.current = pauseMs > 0 ? time + pauseMs : 0;\n }\n\n if (visibleCountRef.current < targetGraphemes.length) {\n scheduleFrame();\n } else {\n pauseUntilRef.current = 0;\n }\n };\n\n useEffect(() => {\n const targetGraphemes = splitStreamingTextGraphemes(targetText);\n targetTextRef.current = targetText;\n targetGraphemesRef.current = targetGraphemes;\n\n const keyChanged = resetKeyRef.current !== resetKey;\n resetKeyRef.current = resetKey;\n\n if (!streaming || prefersReducedMotion) {\n cancelFrame();\n commitVisibleCount(targetGraphemes.length);\n return;\n }\n\n const visibleNoLongerMatchesTarget =\n visibleTextRef.current.length > 0 &&\n !targetText.startsWith(visibleTextRef.current);\n\n if (\n visibleNoLongerMatchesTarget ||\n visibleCountRef.current > targetGraphemes.length ||\n (keyChanged && visibleTextRef.current.length === 0)\n ) {\n commitVisibleCount(initialSmoothStreamingGraphemeCount(targetGraphemes));\n lastCommitAtRef.current = 0;\n pauseUntilRef.current = 0;\n }\n\n if (visibleCountRef.current < targetGraphemes.length) {\n scheduleFrame();\n }\n }, [\n targetText,\n streaming,\n prefersReducedMotion,\n resetKey,\n cancelFrame,\n commitVisibleCount,\n scheduleFrame,\n ]);\n\n // When the tab returns from background, rAF has been paused and the backlog\n // may be tens of thousands of characters. Animating from where we left off\n // would replay minutes of content at the normal rate — instead jump the\n // cursor to near the tail so only the final ~200 graphemes animate in.\n // Reduced-motion users already get instant reveals (handled above), so this\n // guard only applies to the normal animation path.\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n const onVisibilityChange = () => {\n if (document.visibilityState !== \"visible\") return;\n if (!streaming || prefersReducedMotion) return;\n const graphemes = targetGraphemesRef.current;\n const backlog = graphemes.length - visibleCountRef.current;\n const BACKGROUND_CATCH_UP_THRESHOLD = 2000;\n const BACKGROUND_TAIL_GRAPHEMES = 200;\n if (backlog > BACKGROUND_CATCH_UP_THRESHOLD) {\n commitVisibleCount(\n Math.max(0, graphemes.length - BACKGROUND_TAIL_GRAPHEMES),\n );\n lastCommitAtRef.current = 0;\n pauseUntilRef.current = 0;\n scheduleFrame();\n }\n };\n document.addEventListener(\"visibilitychange\", onVisibilityChange);\n return () =>\n document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n }, [streaming, prefersReducedMotion, commitVisibleCount, scheduleFrame]);\n\n useEffect(() => cancelFrame, [cancelFrame]);\n\n return visibleText;\n}\n\n// ─── Markdown readiness hook ──────────────────────────────────────────────────\n\nexport function useMarkdownReady(): boolean {\n const [ready, setReady] = useState(() => markdownModule !== null);\n useEffect(() => {\n if (markdownModule !== null) return;\n return onMarkdownReady(() => setReady(true));\n }, []);\n return ready;\n}\n\n// ─── MemoizedMarkdownBlock ────────────────────────────────────────────────────\n// Renders a single stable markdown block. Wrapped in React.memo so React\n// skips re-rendering completed blocks when only the tail changes.\n\nexport const MemoizedMarkdownBlock = React.memo(function MemoizedMarkdownBlock({\n blockText,\n}: {\n blockText: string;\n}) {\n const ReactMarkdown = markdownModule?.default;\n const gfm = remarkGfmFn;\n if (!ReactMarkdown || !gfm) return null;\n return (\n <ReactMarkdown\n remarkPlugins={[gfm]}\n components={markdownComponents}\n urlTransform={markdownUrlTransform}\n >\n {blockText}\n </ReactMarkdown>\n );\n});\n\n// ─── SmoothMarkdownText ────────────────────────────────────────────────────────\n\nexport function SmoothMarkdownText({\n text,\n streaming,\n resetKey,\n statusType = \"complete\",\n}: {\n text: string;\n streaming: boolean;\n resetKey: string;\n statusType?: string;\n}) {\n const mdReady = useMarkdownReady();\n const visibleText = useSmoothStreamingText(text, streaming, resetKey);\n const isVisuallyStreaming = streaming && visibleText !== text;\n const ReactMarkdown = markdownModule?.default;\n const gfm = remarkGfmFn;\n\n // Block-memoized rendering: during streaming split the visible text into\n // stable completed blocks + an in-progress tail. Only the tail re-renders\n // on every commit; completed blocks are React.memo'd and skipped.\n // On completion we fall through to a single ReactMarkdown pass to guarantee\n // byte-identical final output (no block-split artifacts).\n const split = useMemo(\n () => (isVisuallyStreaming ? splitMarkdownBlocks(visibleText) : null),\n [isVisuallyStreaming, visibleText],\n );\n\n return (\n <div\n className=\"agent-markdown break-words\"\n data-status={statusType}\n data-streaming={isVisuallyStreaming ? \"true\" : undefined}\n >\n {mdReady && ReactMarkdown && gfm ? (\n split ? (\n // Streaming: render completed blocks (memoized) + live tail block\n <>\n {split.completedBlocks.map((block, i) => (\n <MemoizedMarkdownBlock key={i} blockText={block} />\n ))}\n {split.tail ? (\n <ReactMarkdown\n remarkPlugins={[gfm]}\n components={markdownComponents}\n urlTransform={markdownUrlTransform}\n >\n {split.tail}\n </ReactMarkdown>\n ) : null}\n </>\n ) : (\n // Not streaming (or streaming complete): single-pass render\n <ReactMarkdown\n remarkPlugins={[gfm]}\n components={markdownComponents}\n urlTransform={markdownUrlTransform}\n >\n {visibleText}\n </ReactMarkdown>\n )\n ) : (\n // Plain text while the react-markdown chunk is in flight.\n // The chunk is already being fetched by loadMarkdown() above, so\n // this placeholder is typically only visible for one render frame.\n <span style={{ whiteSpace: \"pre-wrap\" }}>{visibleText}</span>\n )}\n </div>\n );\n}\n\n// ─── MarkdownText ──────────────────────────────────────────────────────────────\n\nexport function MarkdownText() {\n const textPart = useMessagePartText();\n const messageRuntime = useMessageRuntime();\n const message = messageRuntime.getState();\n const thread = useThread();\n const textStreaming = React.useContext(TextStreamingContext);\n const lastMessage = thread.messages[thread.messages.length - 1];\n const isLastAssistantMessage =\n message.role === \"assistant\" && lastMessage?.id === message.id;\n const statusType =\n textPart.status?.type ?? message.status?.type ?? \"complete\";\n\n return (\n <SmoothMarkdownText\n text={textPart.text}\n streaming={textStreaming && isLastAssistantMessage}\n resetKey={`${message.id}:${statusType}`}\n statusType={statusType}\n />\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/client/i18n.tsx"],"names":[],"mappings":"AAGA,OAAO,KAQN,MAAM,OAAO,CAAC;AAQf,OAAO,EAUL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC5B,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/client/i18n.tsx"],"names":[],"mappings":"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"}
|
package/dist/client/i18n.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import * as
|
|
2
|
+
import * as PopoverPrimitive from "@radix-ui/react-popover";
|
|
3
3
|
import { IconCheck, IconChevronDown, IconLanguage } from "@tabler/icons-react";
|
|
4
4
|
import i18next from "i18next";
|
|
5
5
|
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react";
|
|
@@ -8,6 +8,7 @@ import defaultEnglishMessages from "../localization/default-messages.js";
|
|
|
8
8
|
import { DEFAULT_LOCALE, LOCALE_HYDRATION_GLOBAL, LOCALE_METADATA, LOCALE_STORAGE_KEY, SUPPORTED_LOCALES, localeDirection, normalizeLocalizationPreference, resolveLocaleFromCandidates, resolveLocaleFromPreference, } from "../localization/shared.js";
|
|
9
9
|
import { setClientAppState } from "./application-state.js";
|
|
10
10
|
import { callAction } from "./use-action.js";
|
|
11
|
+
import { cn } from "./utils.js";
|
|
11
12
|
export { DEFAULT_LOCALE, LOCALE_HYDRATION_GLOBAL, LOCALE_METADATA, LOCALE_STORAGE_KEY, SUPPORTED_LOCALES, localeDirection, normalizeLocaleCode, normalizeLocalePreference, normalizeLocalizationPreference, resolveLocaleFromCandidates, resolveLocaleFromPreference, } from "../localization/shared.js";
|
|
12
13
|
export { getLocaleInitScript } from "../localization/server.js";
|
|
13
14
|
const LocaleContext = createContext(null);
|
|
@@ -464,6 +465,7 @@ export function useFormatters() {
|
|
|
464
465
|
}
|
|
465
466
|
export function LanguagePicker({ className, includeSystem = true, label, variant = "select", }) {
|
|
466
467
|
const { locale, preference, setPreference } = useLocale();
|
|
468
|
+
const [open, setOpen] = useState(false);
|
|
467
469
|
const copy = LANGUAGE_PICKER_COPY[locale] ?? LANGUAGE_PICKER_COPY[DEFAULT_LOCALE];
|
|
468
470
|
const resolvedLabel = label ?? copy.label;
|
|
469
471
|
const options = [
|
|
@@ -478,17 +480,26 @@ export function LanguagePicker({ className, includeSystem = true, label, variant
|
|
|
478
480
|
: []),
|
|
479
481
|
...SUPPORTED_LOCALES.map((code) => ({
|
|
480
482
|
value: code,
|
|
481
|
-
label: LOCALE_METADATA[code].nativeName
|
|
482
|
-
? LOCALE_METADATA[code].nativeName
|
|
483
|
-
: `${LOCALE_METADATA[code].nativeName} (${LOCALE_METADATA[code].englishName})`,
|
|
483
|
+
label: `${LOCALE_METADATA[code].nativeName} (${code})`,
|
|
484
484
|
description: code,
|
|
485
485
|
})),
|
|
486
486
|
];
|
|
487
487
|
const selected = options.find((option) => option.value === preference);
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
488
|
+
const selectedLabel = selected?.label ?? preference;
|
|
489
|
+
const triggerLabel = `${resolvedLabel}: ${selectedLabel}`;
|
|
490
|
+
function handleOptionClick(value) {
|
|
491
|
+
setOpen(false);
|
|
492
|
+
void setPreference(normalizeLocalizationPreference(value).locale);
|
|
493
|
+
}
|
|
494
|
+
return (_jsx("div", { className: className, children: _jsxs(PopoverPrimitive.Root, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverPrimitive.Trigger, { asChild: true, children: _jsxs("button", { type: "button", "aria-label": triggerLabel, title: triggerLabel, "data-language-picker-trigger": true, className: cn("shrink-0 rounded-md border border-border bg-background text-foreground outline-none transition-colors hover:border-foreground/30 hover:bg-accent/40 hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 data-[state=open]:border-foreground/30 data-[state=open]:bg-accent/40", variant === "icon"
|
|
495
|
+
? "flex h-8 w-8 items-center justify-center"
|
|
496
|
+
: "flex h-9 w-full items-center justify-between gap-2 px-3 text-start text-sm"), children: [_jsxs("span", { className: "flex min-w-0 items-center gap-2", children: [_jsx(IconLanguage, { className: "h-4 w-4 shrink-0 text-muted-foreground" }), variant === "select" ? (_jsx("span", { className: "truncate", children: selectedLabel })) : (_jsx("span", { className: "sr-only", children: triggerLabel }))] }), variant === "select" ? (_jsx(IconChevronDown, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground", "aria-hidden": "true" })) : null] }) }), _jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { align: variant === "icon" ? "end" : "start", sideOffset: 6, role: "menu", className: cn("z-[9999] max-h-[min(20rem,var(--radix-popover-content-available-height))] overflow-y-auto rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-lg outline-none will-change-[transform,opacity] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:duration-100 data-[state=open]:duration-150 data-[state=closed]:ease-in data-[state=open]:ease-out data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1", variant === "icon"
|
|
497
|
+
? "min-w-56"
|
|
498
|
+
: "w-[min(20rem,calc(100vw-2rem))] min-w-[var(--radix-popover-trigger-width)]"), children: options.map((option) => {
|
|
499
|
+
const optionSelected = option.value === preference;
|
|
500
|
+
return (_jsxs("button", { type: "button", role: "menuitemradio", "aria-checked": optionSelected, title: option.description, onClick: () => handleOptionClick(option.value), className: cn("flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-start text-sm outline-none transition-colors hover:bg-accent/60 hover:text-foreground focus-visible:bg-accent/60 focus-visible:text-foreground", optionSelected
|
|
501
|
+
? "bg-accent/40 text-foreground"
|
|
502
|
+
: "text-muted-foreground"), children: [_jsx(IconCheck, { className: cn("h-3.5 w-3.5 shrink-0", optionSelected ? "opacity-100" : "opacity-0"), "aria-hidden": "true" }), _jsx("span", { className: "truncate", children: option.label })] }, option.value));
|
|
503
|
+
}) }) })] }) }));
|
|
493
504
|
}
|
|
494
505
|
//# sourceMappingURL=i18n.js.map
|
package/dist/client/i18n.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/client/i18n.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,OAAsC,MAAM,SAAS,CAAC;AAC7D,OAAc,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,OAAO,sBAAsB,MAAM,qCAAqC,CAAC;AACzE,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,+BAA+B,EAC/B,2BAA2B,EAC3B,2BAA2B,GAK5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,+BAA+B,EAC/B,2BAA2B,EAC3B,2BAA2B,GAK5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AA2ChE,MAAM,aAAa,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAC;AAErE,MAAM,oBAAoB,GAGtB;IACF,OAAO,EAAE;QACP,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,QAAQ;QAChB,iBAAiB,EAAE,2BAA2B;KAC/C;IACD,OAAO,EAAE;QACP,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,iBAAiB,EAAE,SAAS;KAC7B;IACD,OAAO,EAAE;QACP,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,iBAAiB,EAAE,SAAS;KAC7B;IACD,OAAO,EAAE;QACP,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,SAAS;QACjB,iBAAiB,EAAE,8BAA8B;KAClD;IACD,OAAO,EAAE;QACP,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,SAAS;QACjB,iBAAiB,EAAE,kCAAkC;KACtD;IACD,OAAO,EAAE;QACP,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,QAAQ;QAChB,iBAAiB,EAAE,0BAA0B;KAC9C;IACD,OAAO,EAAE;QACP,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,MAAM;QACd,iBAAiB,EAAE,aAAa;KACjC;IACD,OAAO,EAAE;QACP,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,KAAK;QACb,iBAAiB,EAAE,YAAY;KAChC;IACD,OAAO,EAAE;QACP,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,SAAS;QACjB,iBAAiB,EAAE,4BAA4B;KAChD;IACD,OAAO,EAAE;QACP,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,QAAQ;QAChB,iBAAiB,EAAE,gCAAgC;KACpD;IACD,OAAO,EAAE;QACP,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,QAAQ;QAChB,iBAAiB,EAAE,qBAAqB;KACzC;CACF,CAAC;AAEF,SAAS,yBAAyB;IAChC,IAAI,OAAO,SAAS,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IAChD,OAAO,SAAS,CAAC,SAAS,EAAE,MAAM;QAChC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC;QAC1B,CAAC,CAAC,SAAS,CAAC,QAAQ;YAClB,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC;YACtB,CAAC,CAAC,EAAE,CAAC;AACX,CAAC;AAED,SAAS,oBAAoB;IAC3B,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,CAAC;QACH,OAAO,+BAA+B,CACpC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAChD,CAAC,MAAM,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,UAA4B;IACzD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAC1C,IAAI,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;IAC9E,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB;IAC3B,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IAC7C,OAAO,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,mBAAmB,CAAC,IAG5B;IACC,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,+BAA+B,CAChD,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAAC,UAAU,IAAI,oBAAoB,EAAE,CACzE,CAAC,MAAM,CAAC;IACT,MAAM,MAAM,GACV,IAAI,CAAC,aAAa;QAClB,SAAS,CAAC,MAAM;QAChB,2BAA2B,CAAC,UAAU,EAAE,yBAAyB,EAAE,CAAC,CAAC;IACvE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,YAAY,GAAI,KAA+B,CAAC,OAAO,CAAC;IAC9D,IACE,YAAY;QACZ,OAAO,YAAY,KAAK,QAAQ;QAChC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAC5B,CAAC;QACD,OAAO,YAA8B,CAAC;IACxC,CAAC;IACD,OAAO,KAAuB,CAAC;AACjC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAM3B;IACC,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAmD;QAChE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACnB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,QAAQ;SAChC;KACF,CAAC;IACF,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACrE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG;YAC9B,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,eAAe;SACvC,CAAC;IACJ,CAAC;IACD,KAAK,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC;QACvC,SAAS;QACT,GAAG,EAAE,IAAI,CAAC,aAAa;QACvB,WAAW,EAAE,IAAI,CAAC,YAAY;QAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;QACpB,aAAa,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;QACrC,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;QAC7B,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,EACtC,QAAQ,EACR,OAAO,EACP,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,GAAG,IAAI,GACK;IAC7B,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,aAAa,CAAC;IACtD,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,cAAc,CAAC;IAC7D,MAAM,cAAc,GAAG,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC/C,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,CAAC;IAC3C,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;IACzC,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC,EAC/D,CAAC,aAAa,EAAE,iBAAiB,CAAC,CACnC,CAAC;IACF,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAC/C,YAAY,CAAC,UAAU,CACxB,CAAC;IACF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAa,YAAY,CAAC,MAAM,CAAC,CAAC;IACtE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAC;IAElD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,iBAAiB,GAAG,uBAAuB,CAC/C,SAAS,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,IAAI,SAAS,CAAC,QAAQ;YAC5D,CAAC,CAAC,SAAS,CAAC,QAAQ;YACpB,CAAC,CAAC,eAAe,CACpB,CAAC;QACF,OAAO,CAAC,OAAO,GAAG,kBAAkB,CAAC;YACnC,SAAS;YACT,YAAY;YACZ,QAAQ,EACN,SAAS,CAAC,MAAM,KAAK,YAAY,IAAI,SAAS,CAAC,QAAQ;gBACrD,CAAC,CAAC,SAAS,CAAC,QAAQ;gBACpB,CAAC,CAAC,cAAc;YACpB,aAAa,EAAE,YAAY,CAAC,MAAM;YAClC,eAAe,EAAE,iBAAiB;SACnC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAE7B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC,iBAAiB,CACpB,YAAY,EACZ,SAAS,EACT,cAAc,EACd,IAAI,EACJ,IAAI,CACL,CAAC;QACJ,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;IAEpD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GACd,UAAU,KAAK,QAAQ;YACrB,CAAC,CAAC,2BAA2B,CAAC,yBAAyB,EAAE,CAAC;YAC1D,CAAC,CAAC,UAAU,CAAC;QACjB,SAAS,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,KAAK,UAAU,WAAW;YACxB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,CAAC;gBACH,IACE,MAAM,KAAK,YAAY;oBACvB,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,EAC1C,CAAC;oBACD,MAAM,SAAS,GACb,SAAS,CAAC,MAAM,KAAK,MAAM,IAAI,SAAS,CAAC,QAAQ;wBAC/C,CAAC,CAAC,SAAS,CAAC,QAAQ;wBACpB,CAAC,CAAC,aAAa,KAAK,MAAM,IAAI,eAAe;4BAC3C,CAAC,CAAC,eAAe;4BACjB,CAAC,CAAC,IAAI,CAAC;oBACb,MAAM,MAAM,GAAG,SAAS,IAAI,CAAC,MAAM,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC3D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;oBACjD,IAAI,QAAQ,EAAE,CAAC;wBACb,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAClE,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,SAAS;oBAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,KAAK,WAAW,EAAE,CAAC;QACnB,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE;QACD,SAAS,CAAC,MAAM;QAChB,SAAS,CAAC,QAAQ;QAClB,IAAI;QACJ,aAAa;QACb,eAAe;QACf,YAAY;QACZ,MAAM;QACN,SAAS;QACT,YAAY;KACb,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO;QAC5C,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC;QACtC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAC/B,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,UAAU,CACR,6BAA6B,EAC7B,SAAS,EACT,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB;aACE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACd,IAAI,SAAS;gBAAE,OAAO;YACtB,MAAM,UAAU,GAAG,+BAA+B,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;YACjE,kBAAkB,CAAC,UAAU,CAAC,CAAC;YAC/B,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,kEAAkE;QACpE,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAC1C,MAAM,SAAS,GAAG,CAAC,KAAmB,EAAE,EAAE;YACxC,IAAI,KAAK,CAAC,GAAG,KAAK,kBAAkB,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI;gBAAE,OAAO;YACvE,kBAAkB,CAChB,+BAA+B,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CACvD,CAAC;QACJ,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9C,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,iBAAiB,CACpB,cAAc,EACd;YACE,MAAM;YACN,UAAU;YACV,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC;SAC7B,EACD,EAAE,aAAa,EAAE,cAAc,EAAE,CAClC,CAAC,KAAK,CAAC,GAAG,EAAE;YACX,2EAA2E;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAEzB,MAAM,aAAa,GAAG,WAAW,CAC/B,KAAK,EAAE,IAAsB,EAAE,EAAE;QAC/B,MAAM,UAAU,GAAG,+BAA+B,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAChE,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC/B,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAC/B,IAAI,CAAC;YACH,MAAM,UAAU,CACd,6BAA6B,EAC7B;gBACE,MAAM,EAAE,UAAU;aACnB,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAI,KAA8B,EAAE,MAAM,CAAC;YACvD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBACrC,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC,EACD,CAAC,iBAAiB,CAAC,CACpB,CAAC;IAEF,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CAAC,CAAC;QACL,MAAM;QACN,YAAY;QACZ,UAAU;QACV,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC;QAC5B,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC;QACjC,aAAa;QACb,OAAO;KACR,CAAC,EACF,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,CAAC,CAC3D,CAAC;IAEF,OAAO,CACL,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YACpC,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,YAAG,QAAQ,GAAmB,GAClC,CAC1B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,sBAAsB,GAA2B;IACrD,eAAe,EAAE,MAAM;IACvB,oBAAoB,EAAE,YAAY;IAClC,wBAAwB,EAAE,sBAAsB;IAChD,0BAA0B,EAAE,uBAAuB;IACnD,wBAAwB,EAAE,sBAAsB;IAChD,0BAA0B,EAAE,uBAAuB;IACnD,qBAAqB,EAAE,aAAa;IACpC,uBAAuB,EAAE,gBAAgB;IACzC,wBAAwB,EAAE,uBAAuB;IACjD,yBAAyB,EAAE,yBAAyB;IACpD,+BAA+B,EAC7B,oDAAoD;IACtD,4BAA4B,EAAE,sBAAsB;IACpD,8BAA8B,EAAE,uBAAuB;IACvD,2BAA2B,EAAE,qBAAqB;IAClD,2BAA2B,EACzB,6EAA6E;IAC/E,eAAe,EAAE,MAAM;IACvB,kBAAkB,EAAE,gBAAgB;IACpC,kBAAkB,EAAE,gBAAgB;IACpC,wBAAwB,EAAE,SAAS;IACnC,qBAAqB,EAAE,MAAM;IAC7B,uBAAuB,EAAE,QAAQ;IACjC,wBAAwB,EAAE,SAAS;IACnC,yBAAyB,EAAE,kBAAkB;IAC7C,0BAA0B,EAAE,mBAAmB;IAC/C,yBAAyB,EAAE,wBAAwB;IACnD,0BAA0B,EAAE,yBAAyB;IACrD,uBAAuB,EAAE,wBAAwB;IACjD,wBAAwB,EAAE,yBAAyB;IACnD,sBAAsB,EAAE,kBAAkB;IAC1C,uBAAuB,EAAE,mBAAmB;IAC5C,6BAA6B,EAC3B,kHAAkH;IACpH,6BAA6B,EAAE,6CAA6C;IAC5E,0BAA0B,EAAE,yBAAyB;IACrD,oBAAoB,EAAE,uBAAuB;IAC7C,kCAAkC,EAChC,kGAAkG;IACpG,uBAAuB,EACrB,gGAAgG;IAClG,2BAA2B,EAAE,0BAA0B;IACvD,iCAAiC,EAC/B,4EAA4E;IAC9E,gCAAgC,EAAE,sBAAsB;IACxD,sCAAsC,EACpC,wFAAwF;IAC1F,8BAA8B,EAAE,6BAA6B;IAC7D,8BAA8B,EAAE,aAAa;IAC7C,kCAAkC,EAAE,oBAAoB;IACxD,wCAAwC,EACtC,mEAAmE;IACrE,4BAA4B,EAAE,gBAAgB;IAC9C,4BAA4B,EAAE,gBAAgB;IAC9C,oBAAoB,EAAE,OAAO;IAC7B,uBAAuB,EAAE,aAAa;IACtC,kCAAkC,EAAE,2BAA2B;IAC/D,uCAAuC,EACrC,mFAAmF;IACrF,4BAA4B,EAAE,kBAAkB;IAChD,qBAAqB,EAAE,WAAW;IAClC,iBAAiB,EAAE,MAAM;IACzB,4BAA4B,EAAE,mBAAmB;IACjD,gBAAgB,EAAE,KAAK;IACvB,0BAA0B,EAAE,4CAA4C;IACxE,sBAAsB,EAAE,WAAW;IACnC,oBAAoB,EAAE,UAAU;IAChC,wBAAwB,EAAE,cAAc;IACxC,yBAAyB,EAAE,qBAAqB;IAChD,4BAA4B,EAAE,kBAAkB;IAChD,sBAAsB,EAAE,YAAY;IACpC,qBAAqB,EAAE,WAAW;IAClC,qBAAqB,EAAE,UAAU;IACjC,qBAAqB,EAAE,UAAU;IACjC,2BAA2B,EAAE,iBAAiB;IAC9C,uBAAuB,EAAE,YAAY;IACrC,qBAAqB,EAAE,WAAW;IAClC,2BAA2B,EAAE,kBAAkB;IAC/C,yBAAyB,EAAE,gBAAgB;IAC3C,sBAAsB,EAAE,YAAY;IACpC,+BAA+B,EAAE,uBAAuB;IACxD,0CAA0C,EACxC,kFAAkF;IACpF,wBAAwB,EAAE,cAAc;CACzC,CAAC;AAEF,SAAS,eAAe,CACtB,KAAc,EACd,MAAM,GAAG,EAAE,EACX,GAAG,GAA2B,EAAE;IAEhC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAC5E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,wBAAwB,GAAG,eAAe,CAAC,sBAAsB,CAAC,CAAC;AAEzE,SAAS,0BAA0B,CACjC,QAAgB,EAChB,OAAiC;IAEjC,OAAO,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE;QAC5D,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW;IACtC,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC;IAChE,MAAM,KAAK,GAAG,WAAW;SACtB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,IAAI,EAAE;SACN,WAAW,EAAE,CAAC;IACjB,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACtE,CAAC;AAED,SAAS,eAAe,CAAC,GAAW,EAAE,OAAiC;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACrC,MAAM,SAAS,GACb,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC;IACxE,MAAM,QAAQ,GACZ,wBAAwB,CAAC,SAAS,CAAC;QACnC,wBAAwB,CAAC,GAAG,CAAC;QAC7B,sBAAsB,CAAC,SAAS,CAAC;QACjC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,QAAQ;QACb,CAAC,CAAC,0BAA0B,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC/C,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,IAAI;IAClB,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,cAAc,CAAC;IAC7D,OAAO,WAAW,CAChB,CAAC,GAAW,EAAE,OAAiC,EAAE,EAAE;QACjD,MAAM,UAAU,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACnC,IAAI,UAAU,KAAK,GAAG;YAAE,OAAO,UAAU,CAAC;QAC1C,MAAM,SAAS,GACb,IACD,CAAC,SAAS,CAAC;QACZ,MAAM,cAAc,GAAG,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC/D,IAAI,cAAc,IAAI,cAAc,KAAK,GAAG;YAAE,OAAO,cAAc,CAAC;QACpE,OAAO,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC,EACD,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,cAAc,CAAC;IACjD,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,UAAU,CACR,KAA6B,EAC7B,OAAoC;YAEpC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CACpD,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAChD,CAAC;QACJ,CAAC;QACD,YAAY,CAAC,KAAa,EAAE,OAAkC;YAC5D,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9D,CAAC;QACD,kBAAkB,CAChB,KAAa,EACb,IAAiC,EACjC,OAAwC;YAExC,OAAO,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC1E,CAAC;QACD,UAAU,CAAC,KAAe,EAAE,OAAgC;YAC1D,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5D,CAAC;KACF,CAAC,EACF,CAAC,MAAM,CAAC,CACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,SAAS,EACT,aAAa,GAAG,IAAI,EACpB,KAAK,EACL,OAAO,GAAG,QAAQ,GAMnB;IACC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE,CAAC;IAC1D,MAAM,IAAI,GACR,oBAAoB,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAC,cAAc,CAAC,CAAC;IACvE,MAAM,aAAa,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;IAC1C,MAAM,OAAO,GAAG;QACd,GAAG,CAAC,aAAa;YACf,CAAC,CAAC;gBACE;oBACE,KAAK,EAAE,QAAiB;oBACxB,KAAK,EAAE,IAAI,CAAC,MAAM;oBAClB,WAAW,EAAE,IAAI,CAAC,iBAAiB;iBACpC;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClC,KAAK,EAAE,IAAI;YACX,KAAK,EACH,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,eAAe,CAAC,IAAI,CAAC,CAAC,WAAW;gBACpE,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU;gBAClC,CAAC,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,eAAe,CAAC,IAAI,CAAC,CAAC,WAAW,GAAG;YAClF,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;KACJ,CAAC;IACF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC;IAEvE,OAAO,CACL,cAAK,SAAS,EAAE,SAAS,YACvB,MAAC,eAAe,CAAC,IAAI,IACnB,KAAK,EAAE,UAAU,EACjB,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CACvB,KAAK,aAAa,CAAC,+BAA+B,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAGnE,MAAC,eAAe,CAAC,OAAO,IACtB,SAAS,EACP,OAAO,KAAK,MAAM;wBAChB,CAAC,CAAC,mMAAmM;wBACrM,CAAC,CAAC,mOAAmO,gBAE7N,aAAa,EACzB,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,aAAa,aAEvC,gBAAM,SAAS,EAAC,iCAAiC,aAC/C,KAAC,YAAY,IAAC,SAAS,EAAC,wCAAwC,GAAG,EAClE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CACtB,KAAC,eAAe,CAAC,KAAK,cACpB,eAAM,SAAS,EAAC,UAAU,YACvB,QAAQ,EAAE,KAAK,IAAI,UAAU,GACzB,GACe,CACzB,CAAC,CAAC,CAAC,IAAI,IACH,EACN,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CACtB,KAAC,eAAe,CAAC,IAAI,IAAC,OAAO,kBAC3B,KAAC,eAAe,IAAC,SAAS,EAAC,mCAAmC,GAAG,GAC5C,CACxB,CAAC,CAAC,CAAC,IAAI,IACgB,EAC1B,KAAC,eAAe,CAAC,MAAM,cACrB,KAAC,eAAe,CAAC,OAAO,IACtB,QAAQ,EAAC,QAAQ,EACjB,UAAU,EAAE,CAAC,EACb,SAAS,EACP,OAAO,KAAK,MAAM;4BAChB,CAAC,CAAC,wFAAwF;4BAC1F,CAAC,CAAC,qHAAqH,YAG3H,KAAC,eAAe,CAAC,QAAQ,IAAC,SAAS,EAAC,KAAK,YACtC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,MAAC,eAAe,CAAC,IAAI,IAEnB,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,SAAS,EAAC,qLAAqL,aAE/L,eAAM,SAAS,EAAC,yFAAyF,YACvG,KAAC,eAAe,CAAC,aAAa,cAC5B,KAAC,SAAS,IAAC,SAAS,EAAC,aAAa,GAAG,GACP,GAC3B,EACP,eAAK,SAAS,EAAC,uBAAuB,aACpC,KAAC,eAAe,CAAC,QAAQ,cACvB,eAAM,SAAS,EAAC,iBAAiB,YAAE,MAAM,CAAC,KAAK,GAAQ,GAC9B,EAC3B,eAAM,SAAS,EAAC,0DAA0D,YACvE,MAAM,CAAC,WAAW,GACd,IACH,KAhBD,MAAM,CAAC,KAAK,CAiBI,CACxB,CAAC,GACuB,GACH,GACH,IACJ,GACnB,CACP,CAAC;AACJ,CAAC","sourcesContent":["import * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { IconCheck, IconChevronDown, IconLanguage } from \"@tabler/icons-react\";\nimport i18next, { type i18n as I18nInstance } from \"i18next\";\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n I18nextProvider,\n initReactI18next,\n useTranslation,\n} from \"react-i18next\";\n\nimport defaultEnglishMessages from \"../localization/default-messages.js\";\nimport {\n DEFAULT_LOCALE,\n LOCALE_HYDRATION_GLOBAL,\n LOCALE_METADATA,\n LOCALE_STORAGE_KEY,\n SUPPORTED_LOCALES,\n localeDirection,\n normalizeLocalizationPreference,\n resolveLocaleFromCandidates,\n resolveLocaleFromPreference,\n type LocaleCode,\n type LocaleMetadata,\n type LocalePreference,\n type LocalizationPreference,\n} from \"../localization/shared.js\";\nimport { setClientAppState } from \"./application-state.js\";\nimport { callAction } from \"./use-action.js\";\n\nexport {\n DEFAULT_LOCALE,\n LOCALE_HYDRATION_GLOBAL,\n LOCALE_METADATA,\n LOCALE_STORAGE_KEY,\n SUPPORTED_LOCALES,\n localeDirection,\n normalizeLocaleCode,\n normalizeLocalePreference,\n normalizeLocalizationPreference,\n resolveLocaleFromCandidates,\n resolveLocaleFromPreference,\n type LocaleCode,\n type LocaleMetadata,\n type LocalePreference,\n type LocalizationPreference,\n} from \"../localization/shared.js\";\nexport { getLocaleInitScript } from \"../localization/server.js\";\n\nexport type LocaleMessages = Record<string, unknown>;\n\nexport interface LocaleHydrationPayload {\n locale?: LocaleCode;\n preference?: LocalizationPreference;\n dir?: \"ltr\" | \"rtl\";\n messages?: LocaleMessages;\n}\n\nexport interface AgentNativeI18nCatalog {\n namespace?: string;\n sourceLocale?: LocaleCode;\n messages?: LocaleMessages;\n loadMessages?: (locale: LocaleCode) => Promise<LocaleMessages | null>;\n}\n\nexport interface AgentNativeI18nProviderProps {\n children: React.ReactNode;\n catalog?: AgentNativeI18nCatalog;\n initialLocale?: LocaleCode;\n initialPreference?: LocalizationPreference | LocalePreference;\n initialMessages?: LocaleMessages | null;\n persistPreference?: boolean;\n}\n\ninterface LocaleContextValue {\n locale: LocaleCode;\n sourceLocale: LocaleCode;\n preference: LocalePreference;\n dir: \"ltr\" | \"rtl\";\n metadata: LocaleMetadata;\n setPreference: (preference: LocalePreference) => Promise<void>;\n loading: boolean;\n}\n\ndeclare global {\n interface Window {\n __AGENT_NATIVE_LOCALE__?: LocaleHydrationPayload;\n }\n}\n\nconst LocaleContext = createContext<LocaleContextValue | null>(null);\n\nconst LANGUAGE_PICKER_COPY: Record<\n LocaleCode,\n { label: string; system: string; systemDescription: string }\n> = {\n \"en-US\": {\n label: \"Language\",\n system: \"System\",\n systemDescription: \"Use your browser language\",\n },\n \"zh-CN\": {\n label: \"语言\",\n system: \"系统\",\n systemDescription: \"使用浏览器语言\",\n },\n \"zh-TW\": {\n label: \"語言\",\n system: \"系統\",\n systemDescription: \"使用瀏覽器語言\",\n },\n \"es-ES\": {\n label: \"Idioma\",\n system: \"Sistema\",\n systemDescription: \"Usar el idioma del navegador\",\n },\n \"fr-FR\": {\n label: \"Langue\",\n system: \"Système\",\n systemDescription: \"Utiliser la langue du navigateur\",\n },\n \"de-DE\": {\n label: \"Sprache\",\n system: \"System\",\n systemDescription: \"Browsersprache verwenden\",\n },\n \"ja-JP\": {\n label: \"言語\",\n system: \"システム\",\n systemDescription: \"ブラウザーの言語を使用\",\n },\n \"ko-KR\": {\n label: \"언어\",\n system: \"시스템\",\n systemDescription: \"브라우저 언어 사용\",\n },\n \"pt-BR\": {\n label: \"Idioma\",\n system: \"Sistema\",\n systemDescription: \"Usar o idioma do navegador\",\n },\n \"hi-IN\": {\n label: \"भाषा\",\n system: \"सिस्टम\",\n systemDescription: \"ब्राउज़र की भाषा का उपयोग करें\",\n },\n \"ar-SA\": {\n label: \"اللغة\",\n system: \"النظام\",\n systemDescription: \"استخدام لغة المتصفح\",\n },\n};\n\nfunction browserLanguageCandidates(): string[] {\n if (typeof navigator === \"undefined\") return [];\n return navigator.languages?.length\n ? [...navigator.languages]\n : navigator.language\n ? [navigator.language]\n : [];\n}\n\nfunction readStoredPreference(): LocalePreference | null {\n if (typeof window === \"undefined\") return null;\n try {\n return normalizeLocalizationPreference(\n window.localStorage.getItem(LOCALE_STORAGE_KEY),\n ).locale;\n } catch {\n return null;\n }\n}\n\nfunction writeStoredPreference(preference: LocalePreference) {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(LOCALE_STORAGE_KEY, preference);\n } catch {\n // Ignore storage-denied browsers; the in-memory provider state still works.\n }\n}\n\nfunction readHydrationPayload(): LocaleHydrationPayload {\n if (typeof window === \"undefined\") return {};\n return window[LOCALE_HYDRATION_GLOBAL] ?? {};\n}\n\nfunction resolveInitialState(args: {\n initialLocale?: LocaleCode;\n initialPreference?: LocalizationPreference | LocalePreference;\n}): { locale: LocaleCode; preference: LocalePreference } {\n const hydration = readHydrationPayload();\n const preference = normalizeLocalizationPreference(\n args.initialPreference ?? hydration.preference ?? readStoredPreference(),\n ).locale;\n const locale =\n args.initialLocale ??\n hydration.locale ??\n resolveLocaleFromPreference(preference, browserLanguageCandidates());\n return { locale, preference };\n}\n\nfunction normalizeLoadedMessages(value: unknown): LocaleMessages | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n const maybeDefault = (value as { default?: unknown }).default;\n if (\n maybeDefault &&\n typeof maybeDefault === \"object\" &&\n !Array.isArray(maybeDefault)\n ) {\n return maybeDefault as LocaleMessages;\n }\n return value as LocaleMessages;\n}\n\nfunction createI18nInstance(args: {\n namespace: string;\n sourceLocale: LocaleCode;\n messages: LocaleMessages;\n initialLocale: LocaleCode;\n initialMessages?: LocaleMessages | null;\n}): I18nInstance {\n const instance = i18next.createInstance();\n const resources: Record<string, Record<string, LocaleMessages>> = {\n [args.sourceLocale]: {\n [args.namespace]: args.messages,\n },\n };\n if (args.initialLocale !== args.sourceLocale && args.initialMessages) {\n resources[args.initialLocale] = {\n [args.namespace]: args.initialMessages,\n };\n }\n void instance.use(initReactI18next).init({\n resources,\n lng: args.initialLocale,\n fallbackLng: args.sourceLocale,\n defaultNS: args.namespace,\n ns: [args.namespace],\n interpolation: { escapeValue: false },\n react: { useSuspense: false },\n returnNull: false,\n initAsync: false,\n });\n return instance;\n}\n\nexport function AgentNativeI18nProvider({\n children,\n catalog,\n initialLocale,\n initialPreference,\n initialMessages,\n persistPreference = true,\n}: AgentNativeI18nProviderProps) {\n const namespace = catalog?.namespace ?? \"translation\";\n const sourceLocale = catalog?.sourceLocale ?? DEFAULT_LOCALE;\n const sourceMessages = catalog?.messages ?? {};\n const loadMessages = catalog?.loadMessages;\n const hydration = readHydrationPayload();\n const initialState = useMemo(\n () => resolveInitialState({ initialLocale, initialPreference }),\n [initialLocale, initialPreference],\n );\n const [preference, setPreferenceState] = useState<LocalePreference>(\n initialState.preference,\n );\n const [locale, setLocale] = useState<LocaleCode>(initialState.locale);\n const [loading, setLoading] = useState(false);\n const i18nRef = useRef<I18nInstance | null>(null);\n\n if (!i18nRef.current) {\n const preloadedMessages = normalizeLoadedMessages(\n hydration.locale === initialState.locale && hydration.messages\n ? hydration.messages\n : initialMessages,\n );\n i18nRef.current = createI18nInstance({\n namespace,\n sourceLocale,\n messages:\n hydration.locale === sourceLocale && hydration.messages\n ? hydration.messages\n : sourceMessages,\n initialLocale: initialState.locale,\n initialMessages: preloadedMessages,\n });\n }\n\n const i18n = i18nRef.current;\n\n useEffect(() => {\n if (i18n.hasResourceBundle(sourceLocale, namespace)) {\n i18n.addResourceBundle(\n sourceLocale,\n namespace,\n sourceMessages,\n true,\n true,\n );\n }\n }, [i18n, namespace, sourceLocale, sourceMessages]);\n\n useEffect(() => {\n const nextLocale =\n preference === \"system\"\n ? resolveLocaleFromCandidates(browserLanguageCandidates())\n : preference;\n setLocale(nextLocale);\n }, [preference]);\n\n useEffect(() => {\n let cancelled = false;\n\n async function applyLocale() {\n setLoading(true);\n try {\n if (\n locale !== sourceLocale &&\n !i18n.hasResourceBundle(locale, namespace)\n ) {\n const preloaded =\n hydration.locale === locale && hydration.messages\n ? hydration.messages\n : initialLocale === locale && initialMessages\n ? initialMessages\n : null;\n const loaded = preloaded ?? (await loadMessages?.(locale));\n const messages = normalizeLoadedMessages(loaded);\n if (messages) {\n i18n.addResourceBundle(locale, namespace, messages, true, true);\n }\n }\n if (!cancelled) {\n await i18n.changeLanguage(locale);\n }\n } finally {\n if (!cancelled) setLoading(false);\n }\n }\n\n void applyLocale();\n return () => {\n cancelled = true;\n };\n }, [\n hydration.locale,\n hydration.messages,\n i18n,\n initialLocale,\n initialMessages,\n loadMessages,\n locale,\n namespace,\n sourceLocale,\n ]);\n\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n const dir = localeDirection(locale);\n const root = document.documentElement;\n root.setAttribute(\"lang\", locale);\n root.setAttribute(\"dir\", dir);\n root.setAttribute(\"data-locale\", locale);\n }, [locale]);\n\n useEffect(() => {\n if (!persistPreference) return;\n let cancelled = false;\n callAction<LocalizationPreference>(\n \"get-localization-preference\",\n undefined,\n { method: \"GET\" },\n )\n .then((value) => {\n if (cancelled) return;\n const normalized = normalizeLocalizationPreference(value).locale;\n setPreferenceState(normalized);\n writeStoredPreference(normalized);\n })\n .catch(() => {\n // Anonymous/public routes use localStorage/browser language only.\n });\n return () => {\n cancelled = true;\n };\n }, [persistPreference]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const onStorage = (event: StorageEvent) => {\n if (event.key !== LOCALE_STORAGE_KEY || event.newValue == null) return;\n setPreferenceState(\n normalizeLocalizationPreference(event.newValue).locale,\n );\n };\n window.addEventListener(\"storage\", onStorage);\n return () => window.removeEventListener(\"storage\", onStorage);\n }, []);\n\n useEffect(() => {\n void setClientAppState(\n \"localization\",\n {\n locale,\n preference,\n dir: localeDirection(locale),\n },\n { requestSource: \"localization\" },\n ).catch(() => {\n // Public/anonymous pages cannot write app-state; localization still works.\n });\n }, [locale, preference]);\n\n const setPreference = useCallback(\n async (next: LocalePreference) => {\n const normalized = normalizeLocalizationPreference(next).locale;\n setPreferenceState(normalized);\n writeStoredPreference(normalized);\n if (!persistPreference) return;\n try {\n await callAction<LocalizationPreference>(\n \"set-localization-preference\",\n {\n locale: normalized,\n },\n );\n } catch (error) {\n const status = (error as { status?: unknown })?.status;\n if (status !== 401 && status !== 403) {\n throw error;\n }\n }\n },\n [persistPreference],\n );\n\n const context = useMemo<LocaleContextValue>(\n () => ({\n locale,\n sourceLocale,\n preference,\n dir: localeDirection(locale),\n metadata: LOCALE_METADATA[locale],\n setPreference,\n loading,\n }),\n [loading, locale, preference, setPreference, sourceLocale],\n );\n\n return (\n <LocaleContext.Provider value={context}>\n <I18nextProvider i18n={i18n}>{children}</I18nextProvider>\n </LocaleContext.Provider>\n );\n}\n\nexport function useLocale(): LocaleContextValue {\n const value = useContext(LocaleContext);\n if (!value) {\n throw new Error(\"useLocale must be used within AgentNativeI18nProvider\");\n }\n return value;\n}\n\nexport function useOptionalLocale(): LocaleContextValue | null {\n return useContext(LocaleContext);\n}\n\nconst CORE_FALLBACK_MESSAGES: Record<string, string> = {\n \"runsTray.runs\": \"Runs\",\n \"runsTray.agentRuns\": \"Agent runs\",\n \"runsTray.activeRun_one\": \"{{count}} active run\",\n \"runsTray.activeRun_other\": \"{{count}} active runs\",\n \"runsTray.failedRun_one\": \"{{count}} failed run\",\n \"runsTray.failedRun_other\": \"{{count}} failed runs\",\n \"runsTray.recentRuns\": \"Recent runs\",\n \"runsTray.noRecentRuns\": \"No recent runs\",\n \"runsTray.ariaAgentRuns\": \"Agent runs, {{label}}\",\n \"runsTray.summaryRunning\": \"{{activeCount}} running\",\n \"runsTray.summaryRunningRecent\":\n \"{{activeCount}} running · {{terminalCount}} recent\",\n \"runsTray.summaryRecent_one\": \"{{count}} recent run\",\n \"runsTray.summaryRecent_other\": \"{{count}} recent runs\",\n \"runsTray.noTrackedWorkYet\": \"No tracked work yet\",\n \"runsTray.emptyDescription\":\n \"Background agent work will appear here while it runs and after it finishes.\",\n \"runsTray.open\": \"Open\",\n \"runsTray.stopRun\": \"Stop {{title}}\",\n \"runsTray.hideRun\": \"Hide {{title}}\",\n \"runsTray.statusRunning\": \"Running\",\n \"runsTray.statusDone\": \"Done\",\n \"runsTray.statusFailed\": \"Failed\",\n \"runsTray.statusStopped\": \"Stopped\",\n \"runsTray.updatedJustNow\": \"Updated just now\",\n \"runsTray.finishedJustNow\": \"Finished just now\",\n \"runsTray.updatedMinutes\": \"Updated {{count}}m ago\",\n \"runsTray.finishedMinutes\": \"Finished {{count}}m ago\",\n \"runsTray.updatedHours\": \"Updated {{count}}h ago\",\n \"runsTray.finishedHours\": \"Finished {{count}}h ago\",\n \"runsTray.updatedDate\": \"Updated {{date}}\",\n \"runsTray.finishedDate\": \"Finished {{date}}\",\n \"codeRequired.fallbackDetail\":\n \"Edit locally or use Builder.io to edit this code in the cloud and continue customizing the app any way you like.\",\n \"codeRequired.defaultFeature\": \"Make the requested code changes to this app\",\n \"codeRequired.branchError\": \"Failed to create branch\",\n \"codeRequired.title\": \"Code changes required\",\n \"codeRequired.subtitleWithFeature\":\n '\"{{feature}}\" creates or modifies source code, which needs Desktop or Builder from this surface.',\n \"codeRequired.subtitle\":\n \"This action creates or modifies source code, which needs Desktop or Builder from this surface.\",\n \"codeRequired.desktopTitle\": \"Use Agent Native Desktop\",\n \"codeRequired.desktopDescription\":\n \"Open the project in the desktop app to enable source edits and CLI access.\",\n \"codeRequired.builderAgentTitle\": \"Use Builder.io Agent\",\n \"codeRequired.builderAgentDescription\":\n \"Let our cloud agent make the changes for you. You'll get a link to preview and deploy.\",\n \"codeRequired.codeChangeTitle\": \"This requires a code change\",\n \"codeRequired.codeChangeBadge\": \"Code change\",\n \"codeRequired.connectBuilderTitle\": \"Connect Builder.io\",\n \"codeRequired.connectBuilderDescription\":\n \"Connect Builder to enable cloud-based code changes from this app.\",\n \"codeRequired.setupRequired\": \"Setup required\",\n \"codeRequired.branchCreated\": \"Branch created\",\n \"codeRequired.close\": \"Close\",\n \"agentPanel.useBuilder\": \"Use Builder\",\n \"agentPanel.openDesktopToEditCode\": \"Open Desktop to edit code\",\n \"agentPanel.codeUnavailableDescription\":\n \"Source-code changes and CLI access are available in the Agent Native Desktop app.\",\n \"agentPanel.downloadDesktop\": \"Download Desktop\",\n \"agentPanel.chatMode\": \"Chat mode\",\n \"agentPanel.chat\": \"Chat\",\n \"agentPanel.cliTerminalMode\": \"CLI terminal mode\",\n \"agentPanel.cli\": \"CLI\",\n \"agentPanel.workspaceMode\": \"Workspace files, agents, skills, and tasks\",\n \"agentPanel.workspace\": \"Workspace\",\n \"agentPanel.newChat\": \"New chat\",\n \"agentPanel.newTerminal\": \"New terminal\",\n \"agentPanel.panelOptions\": \"Agent panel options\",\n \"agentPanel.collapseSidebar\": \"Collapse sidebar\",\n \"agentPanel.hideChats\": \"Hide chats\",\n \"agentPanel.allChats\": \"All chats\",\n \"agentPanel.settings\": \"Settings\",\n \"agentPanel.feedback\": \"Feedback\",\n \"agentPanel.exitFullscreen\": \"Exit fullscreen\",\n \"agentPanel.fullscreen\": \"Fullscreen\",\n \"agentPanel.closeTab\": \"Close tab\",\n \"agentPanel.closeOtherTabs\": \"Close other tabs\",\n \"agentPanel.closeAllTabs\": \"Close all tabs\",\n \"agentPanel.clearChat\": \"Clear chat\",\n \"agentPanel.cliRequiresDevMode\": \"CLI requires dev mode\",\n \"agentPanel.cliRequiresDevModeDescription\":\n \"Run this app locally with pnpm dev or use Builder.io to access the CLI terminal.\",\n \"agentPanel.toggleAgent\": \"Toggle agent\",\n};\n\nfunction flattenMessages(\n value: unknown,\n prefix = \"\",\n out: Record<string, string> = {},\n) {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return out;\n for (const [key, child] of Object.entries(value)) {\n const nextKey = prefix ? `${prefix}.${key}` : key;\n if (typeof child === \"string\") {\n out[nextKey] = child;\n } else {\n flattenMessages(child, nextKey, out);\n }\n }\n return out;\n}\n\nconst DEFAULT_ENGLISH_MESSAGES = flattenMessages(defaultEnglishMessages);\n\nfunction interpolateFallbackMessage(\n template: string,\n options?: Record<string, unknown>,\n) {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, name: string) => {\n const value = options?.[name];\n return value == null ? \"\" : String(value);\n });\n}\n\nfunction humanizeFallbackKey(key: string) {\n const lastSegment = key.split(\".\").filter(Boolean).pop() ?? key;\n const words = lastSegment\n .replace(/[_-]+/g, \" \")\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .trim()\n .toLowerCase();\n return words ? words.charAt(0).toUpperCase() + words.slice(1) : key;\n}\n\nfunction fallbackMessage(key: string, options?: Record<string, unknown>) {\n const count = Number(options?.count);\n const pluralKey =\n Number.isFinite(count) && count === 1 ? `${key}_one` : `${key}_other`;\n const template =\n DEFAULT_ENGLISH_MESSAGES[pluralKey] ??\n DEFAULT_ENGLISH_MESSAGES[key] ??\n CORE_FALLBACK_MESSAGES[pluralKey] ??\n CORE_FALLBACK_MESSAGES[key];\n return template\n ? interpolateFallbackMessage(template, options)\n : humanizeFallbackKey(key);\n}\n\nexport function useT() {\n const { i18n, t } = useTranslation();\n const context = useContext(LocaleContext);\n const sourceLocale = context?.sourceLocale ?? DEFAULT_LOCALE;\n return useCallback(\n (key: string, options?: Record<string, unknown>) => {\n const translated = t(key, options);\n if (translated !== key) return translated;\n const getFixedT = (\n i18n as { getFixedT?: (locale: LocaleCode) => typeof t }\n ).getFixedT;\n const sourceFallback = getFixedT?.(sourceLocale)(key, options);\n if (sourceFallback && sourceFallback !== key) return sourceFallback;\n return fallbackMessage(key, options);\n },\n [i18n, sourceLocale, t],\n );\n}\n\nexport function useFormatters() {\n const context = useContext(LocaleContext);\n const locale = context?.locale ?? DEFAULT_LOCALE;\n return useMemo(\n () => ({\n formatDate(\n value: Date | number | string,\n options?: Intl.DateTimeFormatOptions,\n ) {\n return new Intl.DateTimeFormat(locale, options).format(\n value instanceof Date ? value : new Date(value),\n );\n },\n formatNumber(value: number, options?: Intl.NumberFormatOptions) {\n return new Intl.NumberFormat(locale, options).format(value);\n },\n formatRelativeTime(\n value: number,\n unit: Intl.RelativeTimeFormatUnit,\n options?: Intl.RelativeTimeFormatOptions,\n ) {\n return new Intl.RelativeTimeFormat(locale, options).format(value, unit);\n },\n formatList(value: string[], options?: Intl.ListFormatOptions) {\n return new Intl.ListFormat(locale, options).format(value);\n },\n }),\n [locale],\n );\n}\n\nexport function LanguagePicker({\n className,\n includeSystem = true,\n label,\n variant = \"select\",\n}: {\n className?: string;\n includeSystem?: boolean;\n label?: string;\n variant?: \"select\" | \"icon\";\n}) {\n const { locale, preference, setPreference } = useLocale();\n const copy =\n LANGUAGE_PICKER_COPY[locale] ?? LANGUAGE_PICKER_COPY[DEFAULT_LOCALE];\n const resolvedLabel = label ?? copy.label;\n const options = [\n ...(includeSystem\n ? [\n {\n value: \"system\" as const,\n label: copy.system,\n description: copy.systemDescription,\n },\n ]\n : []),\n ...SUPPORTED_LOCALES.map((code) => ({\n value: code,\n label:\n LOCALE_METADATA[code].nativeName === LOCALE_METADATA[code].englishName\n ? LOCALE_METADATA[code].nativeName\n : `${LOCALE_METADATA[code].nativeName} (${LOCALE_METADATA[code].englishName})`,\n description: code,\n })),\n ];\n const selected = options.find((option) => option.value === preference);\n\n return (\n <div className={className}>\n <SelectPrimitive.Root\n value={preference}\n onValueChange={(value) =>\n void setPreference(normalizeLocalizationPreference(value).locale)\n }\n >\n <SelectPrimitive.Trigger\n className={\n variant === \"icon\"\n ? \"flex h-8 w-8 items-center justify-center rounded-md border border-border bg-background text-foreground outline-none transition-colors hover:bg-accent/40 data-[placeholder]:text-muted-foreground\"\n : \"flex h-9 w-full items-center justify-between rounded-md border border-border bg-background px-3 text-start text-[12px] text-foreground outline-none transition-colors hover:bg-accent/40 data-[placeholder]:text-muted-foreground\"\n }\n aria-label={resolvedLabel}\n title={selected?.label ?? resolvedLabel}\n >\n <span className=\"flex min-w-0 items-center gap-2\">\n <IconLanguage className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n {variant === \"select\" ? (\n <SelectPrimitive.Value>\n <span className=\"truncate\">\n {selected?.label ?? preference}\n </span>\n </SelectPrimitive.Value>\n ) : null}\n </span>\n {variant === \"select\" ? (\n <SelectPrimitive.Icon asChild>\n <IconChevronDown className=\"h-3.5 w-3.5 text-muted-foreground\" />\n </SelectPrimitive.Icon>\n ) : null}\n </SelectPrimitive.Trigger>\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n position=\"popper\"\n sideOffset={6}\n className={\n variant === \"icon\"\n ? \"z-[9999] min-w-56 overflow-hidden rounded-lg border border-border bg-popover shadow-lg\"\n : \"z-[9999] w-[var(--radix-select-trigger-width)] overflow-hidden rounded-lg border border-border bg-popover shadow-lg\"\n }\n >\n <SelectPrimitive.Viewport className=\"p-1\">\n {options.map((option) => (\n <SelectPrimitive.Item\n key={option.value}\n value={option.value}\n className=\"relative flex w-full cursor-pointer select-none items-start gap-2 rounded-md px-8 py-2.5 text-[12px] outline-none data-[highlighted]:bg-accent/60 data-[state=checked]:bg-accent/40\"\n >\n <span className=\"absolute start-2 top-2.5 flex h-4 w-4 items-center justify-center text-muted-foreground\">\n <SelectPrimitive.ItemIndicator>\n <IconCheck className=\"h-3.5 w-3.5\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <div className=\"flex min-w-0 flex-col\">\n <SelectPrimitive.ItemText>\n <span className=\"text-foreground\">{option.label}</span>\n </SelectPrimitive.ItemText>\n <span className=\"mt-0.5 text-[11px] leading-relaxed text-muted-foreground\">\n {option.description}\n </span>\n </div>\n </SelectPrimitive.Item>\n ))}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n </SelectPrimitive.Root>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/client/i18n.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { IconCheck, IconChevronDown, IconLanguage } from \"@tabler/icons-react\";\nimport i18next, { type i18n as I18nInstance } from \"i18next\";\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n I18nextProvider,\n initReactI18next,\n useTranslation,\n} from \"react-i18next\";\n\nimport defaultEnglishMessages from \"../localization/default-messages.js\";\nimport {\n DEFAULT_LOCALE,\n LOCALE_HYDRATION_GLOBAL,\n LOCALE_METADATA,\n LOCALE_STORAGE_KEY,\n SUPPORTED_LOCALES,\n localeDirection,\n normalizeLocalizationPreference,\n resolveLocaleFromCandidates,\n resolveLocaleFromPreference,\n type LocaleCode,\n type LocaleMetadata,\n type LocalePreference,\n type LocalizationPreference,\n} from \"../localization/shared.js\";\nimport { setClientAppState } from \"./application-state.js\";\nimport { callAction } from \"./use-action.js\";\nimport { cn } from \"./utils.js\";\n\nexport {\n DEFAULT_LOCALE,\n LOCALE_HYDRATION_GLOBAL,\n LOCALE_METADATA,\n LOCALE_STORAGE_KEY,\n SUPPORTED_LOCALES,\n localeDirection,\n normalizeLocaleCode,\n normalizeLocalePreference,\n normalizeLocalizationPreference,\n resolveLocaleFromCandidates,\n resolveLocaleFromPreference,\n type LocaleCode,\n type LocaleMetadata,\n type LocalePreference,\n type LocalizationPreference,\n} from \"../localization/shared.js\";\nexport { getLocaleInitScript } from \"../localization/server.js\";\n\nexport type LocaleMessages = Record<string, unknown>;\n\nexport interface LocaleHydrationPayload {\n locale?: LocaleCode;\n preference?: LocalizationPreference;\n dir?: \"ltr\" | \"rtl\";\n messages?: LocaleMessages;\n}\n\nexport interface AgentNativeI18nCatalog {\n namespace?: string;\n sourceLocale?: LocaleCode;\n messages?: LocaleMessages;\n loadMessages?: (locale: LocaleCode) => Promise<LocaleMessages | null>;\n}\n\nexport interface AgentNativeI18nProviderProps {\n children: React.ReactNode;\n catalog?: AgentNativeI18nCatalog;\n initialLocale?: LocaleCode;\n initialPreference?: LocalizationPreference | LocalePreference;\n initialMessages?: LocaleMessages | null;\n persistPreference?: boolean;\n}\n\ninterface LocaleContextValue {\n locale: LocaleCode;\n sourceLocale: LocaleCode;\n preference: LocalePreference;\n dir: \"ltr\" | \"rtl\";\n metadata: LocaleMetadata;\n setPreference: (preference: LocalePreference) => Promise<void>;\n loading: boolean;\n}\n\ndeclare global {\n interface Window {\n __AGENT_NATIVE_LOCALE__?: LocaleHydrationPayload;\n }\n}\n\nconst LocaleContext = createContext<LocaleContextValue | null>(null);\n\nconst LANGUAGE_PICKER_COPY: Record<\n LocaleCode,\n { label: string; system: string; systemDescription: string }\n> = {\n \"en-US\": {\n label: \"Language\",\n system: \"System\",\n systemDescription: \"Use your browser language\",\n },\n \"zh-CN\": {\n label: \"语言\",\n system: \"系统\",\n systemDescription: \"使用浏览器语言\",\n },\n \"zh-TW\": {\n label: \"語言\",\n system: \"系統\",\n systemDescription: \"使用瀏覽器語言\",\n },\n \"es-ES\": {\n label: \"Idioma\",\n system: \"Sistema\",\n systemDescription: \"Usar el idioma del navegador\",\n },\n \"fr-FR\": {\n label: \"Langue\",\n system: \"Système\",\n systemDescription: \"Utiliser la langue du navigateur\",\n },\n \"de-DE\": {\n label: \"Sprache\",\n system: \"System\",\n systemDescription: \"Browsersprache verwenden\",\n },\n \"ja-JP\": {\n label: \"言語\",\n system: \"システム\",\n systemDescription: \"ブラウザーの言語を使用\",\n },\n \"ko-KR\": {\n label: \"언어\",\n system: \"시스템\",\n systemDescription: \"브라우저 언어 사용\",\n },\n \"pt-BR\": {\n label: \"Idioma\",\n system: \"Sistema\",\n systemDescription: \"Usar o idioma do navegador\",\n },\n \"hi-IN\": {\n label: \"भाषा\",\n system: \"सिस्टम\",\n systemDescription: \"ब्राउज़र की भाषा का उपयोग करें\",\n },\n \"ar-SA\": {\n label: \"اللغة\",\n system: \"النظام\",\n systemDescription: \"استخدام لغة المتصفح\",\n },\n};\n\nfunction browserLanguageCandidates(): string[] {\n if (typeof navigator === \"undefined\") return [];\n return navigator.languages?.length\n ? [...navigator.languages]\n : navigator.language\n ? [navigator.language]\n : [];\n}\n\nfunction readStoredPreference(): LocalePreference | null {\n if (typeof window === \"undefined\") return null;\n try {\n return normalizeLocalizationPreference(\n window.localStorage.getItem(LOCALE_STORAGE_KEY),\n ).locale;\n } catch {\n return null;\n }\n}\n\nfunction writeStoredPreference(preference: LocalePreference) {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(LOCALE_STORAGE_KEY, preference);\n } catch {\n // Ignore storage-denied browsers; the in-memory provider state still works.\n }\n}\n\nfunction readHydrationPayload(): LocaleHydrationPayload {\n if (typeof window === \"undefined\") return {};\n return window[LOCALE_HYDRATION_GLOBAL] ?? {};\n}\n\nfunction resolveInitialState(args: {\n initialLocale?: LocaleCode;\n initialPreference?: LocalizationPreference | LocalePreference;\n}): { locale: LocaleCode; preference: LocalePreference } {\n const hydration = readHydrationPayload();\n const preference = normalizeLocalizationPreference(\n args.initialPreference ?? hydration.preference ?? readStoredPreference(),\n ).locale;\n const locale =\n args.initialLocale ??\n hydration.locale ??\n resolveLocaleFromPreference(preference, browserLanguageCandidates());\n return { locale, preference };\n}\n\nfunction normalizeLoadedMessages(value: unknown): LocaleMessages | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n const maybeDefault = (value as { default?: unknown }).default;\n if (\n maybeDefault &&\n typeof maybeDefault === \"object\" &&\n !Array.isArray(maybeDefault)\n ) {\n return maybeDefault as LocaleMessages;\n }\n return value as LocaleMessages;\n}\n\nfunction createI18nInstance(args: {\n namespace: string;\n sourceLocale: LocaleCode;\n messages: LocaleMessages;\n initialLocale: LocaleCode;\n initialMessages?: LocaleMessages | null;\n}): I18nInstance {\n const instance = i18next.createInstance();\n const resources: Record<string, Record<string, LocaleMessages>> = {\n [args.sourceLocale]: {\n [args.namespace]: args.messages,\n },\n };\n if (args.initialLocale !== args.sourceLocale && args.initialMessages) {\n resources[args.initialLocale] = {\n [args.namespace]: args.initialMessages,\n };\n }\n void instance.use(initReactI18next).init({\n resources,\n lng: args.initialLocale,\n fallbackLng: args.sourceLocale,\n defaultNS: args.namespace,\n ns: [args.namespace],\n interpolation: { escapeValue: false },\n react: { useSuspense: false },\n returnNull: false,\n initAsync: false,\n });\n return instance;\n}\n\nexport function AgentNativeI18nProvider({\n children,\n catalog,\n initialLocale,\n initialPreference,\n initialMessages,\n persistPreference = true,\n}: AgentNativeI18nProviderProps) {\n const namespace = catalog?.namespace ?? \"translation\";\n const sourceLocale = catalog?.sourceLocale ?? DEFAULT_LOCALE;\n const sourceMessages = catalog?.messages ?? {};\n const loadMessages = catalog?.loadMessages;\n const hydration = readHydrationPayload();\n const initialState = useMemo(\n () => resolveInitialState({ initialLocale, initialPreference }),\n [initialLocale, initialPreference],\n );\n const [preference, setPreferenceState] = useState<LocalePreference>(\n initialState.preference,\n );\n const [locale, setLocale] = useState<LocaleCode>(initialState.locale);\n const [loading, setLoading] = useState(false);\n const i18nRef = useRef<I18nInstance | null>(null);\n\n if (!i18nRef.current) {\n const preloadedMessages = normalizeLoadedMessages(\n hydration.locale === initialState.locale && hydration.messages\n ? hydration.messages\n : initialMessages,\n );\n i18nRef.current = createI18nInstance({\n namespace,\n sourceLocale,\n messages:\n hydration.locale === sourceLocale && hydration.messages\n ? hydration.messages\n : sourceMessages,\n initialLocale: initialState.locale,\n initialMessages: preloadedMessages,\n });\n }\n\n const i18n = i18nRef.current;\n\n useEffect(() => {\n if (i18n.hasResourceBundle(sourceLocale, namespace)) {\n i18n.addResourceBundle(\n sourceLocale,\n namespace,\n sourceMessages,\n true,\n true,\n );\n }\n }, [i18n, namespace, sourceLocale, sourceMessages]);\n\n useEffect(() => {\n const nextLocale =\n preference === \"system\"\n ? resolveLocaleFromCandidates(browserLanguageCandidates())\n : preference;\n setLocale(nextLocale);\n }, [preference]);\n\n useEffect(() => {\n let cancelled = false;\n\n async function applyLocale() {\n setLoading(true);\n try {\n if (\n locale !== sourceLocale &&\n !i18n.hasResourceBundle(locale, namespace)\n ) {\n const preloaded =\n hydration.locale === locale && hydration.messages\n ? hydration.messages\n : initialLocale === locale && initialMessages\n ? initialMessages\n : null;\n const loaded = preloaded ?? (await loadMessages?.(locale));\n const messages = normalizeLoadedMessages(loaded);\n if (messages) {\n i18n.addResourceBundle(locale, namespace, messages, true, true);\n }\n }\n if (!cancelled) {\n await i18n.changeLanguage(locale);\n }\n } finally {\n if (!cancelled) setLoading(false);\n }\n }\n\n void applyLocale();\n return () => {\n cancelled = true;\n };\n }, [\n hydration.locale,\n hydration.messages,\n i18n,\n initialLocale,\n initialMessages,\n loadMessages,\n locale,\n namespace,\n sourceLocale,\n ]);\n\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n const dir = localeDirection(locale);\n const root = document.documentElement;\n root.setAttribute(\"lang\", locale);\n root.setAttribute(\"dir\", dir);\n root.setAttribute(\"data-locale\", locale);\n }, [locale]);\n\n useEffect(() => {\n if (!persistPreference) return;\n let cancelled = false;\n callAction<LocalizationPreference>(\n \"get-localization-preference\",\n undefined,\n { method: \"GET\" },\n )\n .then((value) => {\n if (cancelled) return;\n const normalized = normalizeLocalizationPreference(value).locale;\n setPreferenceState(normalized);\n writeStoredPreference(normalized);\n })\n .catch(() => {\n // Anonymous/public routes use localStorage/browser language only.\n });\n return () => {\n cancelled = true;\n };\n }, [persistPreference]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n const onStorage = (event: StorageEvent) => {\n if (event.key !== LOCALE_STORAGE_KEY || event.newValue == null) return;\n setPreferenceState(\n normalizeLocalizationPreference(event.newValue).locale,\n );\n };\n window.addEventListener(\"storage\", onStorage);\n return () => window.removeEventListener(\"storage\", onStorage);\n }, []);\n\n useEffect(() => {\n void setClientAppState(\n \"localization\",\n {\n locale,\n preference,\n dir: localeDirection(locale),\n },\n { requestSource: \"localization\" },\n ).catch(() => {\n // Public/anonymous pages cannot write app-state; localization still works.\n });\n }, [locale, preference]);\n\n const setPreference = useCallback(\n async (next: LocalePreference) => {\n const normalized = normalizeLocalizationPreference(next).locale;\n setPreferenceState(normalized);\n writeStoredPreference(normalized);\n if (!persistPreference) return;\n try {\n await callAction<LocalizationPreference>(\n \"set-localization-preference\",\n {\n locale: normalized,\n },\n );\n } catch (error) {\n const status = (error as { status?: unknown })?.status;\n if (status !== 401 && status !== 403) {\n throw error;\n }\n }\n },\n [persistPreference],\n );\n\n const context = useMemo<LocaleContextValue>(\n () => ({\n locale,\n sourceLocale,\n preference,\n dir: localeDirection(locale),\n metadata: LOCALE_METADATA[locale],\n setPreference,\n loading,\n }),\n [loading, locale, preference, setPreference, sourceLocale],\n );\n\n return (\n <LocaleContext.Provider value={context}>\n <I18nextProvider i18n={i18n}>{children}</I18nextProvider>\n </LocaleContext.Provider>\n );\n}\n\nexport function useLocale(): LocaleContextValue {\n const value = useContext(LocaleContext);\n if (!value) {\n throw new Error(\"useLocale must be used within AgentNativeI18nProvider\");\n }\n return value;\n}\n\nexport function useOptionalLocale(): LocaleContextValue | null {\n return useContext(LocaleContext);\n}\n\nconst CORE_FALLBACK_MESSAGES: Record<string, string> = {\n \"runsTray.runs\": \"Runs\",\n \"runsTray.agentRuns\": \"Agent runs\",\n \"runsTray.activeRun_one\": \"{{count}} active run\",\n \"runsTray.activeRun_other\": \"{{count}} active runs\",\n \"runsTray.failedRun_one\": \"{{count}} failed run\",\n \"runsTray.failedRun_other\": \"{{count}} failed runs\",\n \"runsTray.recentRuns\": \"Recent runs\",\n \"runsTray.noRecentRuns\": \"No recent runs\",\n \"runsTray.ariaAgentRuns\": \"Agent runs, {{label}}\",\n \"runsTray.summaryRunning\": \"{{activeCount}} running\",\n \"runsTray.summaryRunningRecent\":\n \"{{activeCount}} running · {{terminalCount}} recent\",\n \"runsTray.summaryRecent_one\": \"{{count}} recent run\",\n \"runsTray.summaryRecent_other\": \"{{count}} recent runs\",\n \"runsTray.noTrackedWorkYet\": \"No tracked work yet\",\n \"runsTray.emptyDescription\":\n \"Background agent work will appear here while it runs and after it finishes.\",\n \"runsTray.open\": \"Open\",\n \"runsTray.stopRun\": \"Stop {{title}}\",\n \"runsTray.hideRun\": \"Hide {{title}}\",\n \"runsTray.statusRunning\": \"Running\",\n \"runsTray.statusDone\": \"Done\",\n \"runsTray.statusFailed\": \"Failed\",\n \"runsTray.statusStopped\": \"Stopped\",\n \"runsTray.updatedJustNow\": \"Updated just now\",\n \"runsTray.finishedJustNow\": \"Finished just now\",\n \"runsTray.updatedMinutes\": \"Updated {{count}}m ago\",\n \"runsTray.finishedMinutes\": \"Finished {{count}}m ago\",\n \"runsTray.updatedHours\": \"Updated {{count}}h ago\",\n \"runsTray.finishedHours\": \"Finished {{count}}h ago\",\n \"runsTray.updatedDate\": \"Updated {{date}}\",\n \"runsTray.finishedDate\": \"Finished {{date}}\",\n \"codeRequired.fallbackDetail\":\n \"Edit locally or use Builder.io to edit this code in the cloud and continue customizing the app any way you like.\",\n \"codeRequired.defaultFeature\": \"Make the requested code changes to this app\",\n \"codeRequired.branchError\": \"Failed to create branch\",\n \"codeRequired.title\": \"Code changes required\",\n \"codeRequired.subtitleWithFeature\":\n '\"{{feature}}\" creates or modifies source code, which needs Desktop or Builder from this surface.',\n \"codeRequired.subtitle\":\n \"This action creates or modifies source code, which needs Desktop or Builder from this surface.\",\n \"codeRequired.desktopTitle\": \"Use Agent Native Desktop\",\n \"codeRequired.desktopDescription\":\n \"Open the project in the desktop app to enable source edits and CLI access.\",\n \"codeRequired.builderAgentTitle\": \"Use Builder.io Agent\",\n \"codeRequired.builderAgentDescription\":\n \"Let our cloud agent make the changes for you. You'll get a link to preview and deploy.\",\n \"codeRequired.codeChangeTitle\": \"This requires a code change\",\n \"codeRequired.codeChangeBadge\": \"Code change\",\n \"codeRequired.connectBuilderTitle\": \"Connect Builder.io\",\n \"codeRequired.connectBuilderDescription\":\n \"Connect Builder to enable cloud-based code changes from this app.\",\n \"codeRequired.setupRequired\": \"Setup required\",\n \"codeRequired.branchCreated\": \"Branch created\",\n \"codeRequired.close\": \"Close\",\n \"agentPanel.useBuilder\": \"Use Builder\",\n \"agentPanel.openDesktopToEditCode\": \"Open Desktop to edit code\",\n \"agentPanel.codeUnavailableDescription\":\n \"Source-code changes and CLI access are available in the Agent Native Desktop app.\",\n \"agentPanel.downloadDesktop\": \"Download Desktop\",\n \"agentPanel.chatMode\": \"Chat mode\",\n \"agentPanel.chat\": \"Chat\",\n \"agentPanel.cliTerminalMode\": \"CLI terminal mode\",\n \"agentPanel.cli\": \"CLI\",\n \"agentPanel.workspaceMode\": \"Workspace files, agents, skills, and tasks\",\n \"agentPanel.workspace\": \"Workspace\",\n \"agentPanel.newChat\": \"New chat\",\n \"agentPanel.newTerminal\": \"New terminal\",\n \"agentPanel.panelOptions\": \"Agent panel options\",\n \"agentPanel.collapseSidebar\": \"Collapse sidebar\",\n \"agentPanel.hideChats\": \"Hide chats\",\n \"agentPanel.allChats\": \"All chats\",\n \"agentPanel.settings\": \"Settings\",\n \"agentPanel.feedback\": \"Feedback\",\n \"agentPanel.exitFullscreen\": \"Exit fullscreen\",\n \"agentPanel.fullscreen\": \"Fullscreen\",\n \"agentPanel.closeTab\": \"Close tab\",\n \"agentPanel.closeOtherTabs\": \"Close other tabs\",\n \"agentPanel.closeAllTabs\": \"Close all tabs\",\n \"agentPanel.clearChat\": \"Clear chat\",\n \"agentPanel.cliRequiresDevMode\": \"CLI requires dev mode\",\n \"agentPanel.cliRequiresDevModeDescription\":\n \"Run this app locally with pnpm dev or use Builder.io to access the CLI terminal.\",\n \"agentPanel.toggleAgent\": \"Toggle agent\",\n};\n\nfunction flattenMessages(\n value: unknown,\n prefix = \"\",\n out: Record<string, string> = {},\n) {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return out;\n for (const [key, child] of Object.entries(value)) {\n const nextKey = prefix ? `${prefix}.${key}` : key;\n if (typeof child === \"string\") {\n out[nextKey] = child;\n } else {\n flattenMessages(child, nextKey, out);\n }\n }\n return out;\n}\n\nconst DEFAULT_ENGLISH_MESSAGES = flattenMessages(defaultEnglishMessages);\n\nfunction interpolateFallbackMessage(\n template: string,\n options?: Record<string, unknown>,\n) {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, name: string) => {\n const value = options?.[name];\n return value == null ? \"\" : String(value);\n });\n}\n\nfunction humanizeFallbackKey(key: string) {\n const lastSegment = key.split(\".\").filter(Boolean).pop() ?? key;\n const words = lastSegment\n .replace(/[_-]+/g, \" \")\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .trim()\n .toLowerCase();\n return words ? words.charAt(0).toUpperCase() + words.slice(1) : key;\n}\n\nfunction fallbackMessage(key: string, options?: Record<string, unknown>) {\n const count = Number(options?.count);\n const pluralKey =\n Number.isFinite(count) && count === 1 ? `${key}_one` : `${key}_other`;\n const template =\n DEFAULT_ENGLISH_MESSAGES[pluralKey] ??\n DEFAULT_ENGLISH_MESSAGES[key] ??\n CORE_FALLBACK_MESSAGES[pluralKey] ??\n CORE_FALLBACK_MESSAGES[key];\n return template\n ? interpolateFallbackMessage(template, options)\n : humanizeFallbackKey(key);\n}\n\nexport function useT() {\n const { i18n, t } = useTranslation();\n const context = useContext(LocaleContext);\n const sourceLocale = context?.sourceLocale ?? DEFAULT_LOCALE;\n return useCallback(\n (key: string, options?: Record<string, unknown>) => {\n const translated = t(key, options);\n if (translated !== key) return translated;\n const getFixedT = (\n i18n as { getFixedT?: (locale: LocaleCode) => typeof t }\n ).getFixedT;\n const sourceFallback = getFixedT?.(sourceLocale)(key, options);\n if (sourceFallback && sourceFallback !== key) return sourceFallback;\n return fallbackMessage(key, options);\n },\n [i18n, sourceLocale, t],\n );\n}\n\nexport function useFormatters() {\n const context = useContext(LocaleContext);\n const locale = context?.locale ?? DEFAULT_LOCALE;\n return useMemo(\n () => ({\n formatDate(\n value: Date | number | string,\n options?: Intl.DateTimeFormatOptions,\n ) {\n return new Intl.DateTimeFormat(locale, options).format(\n value instanceof Date ? value : new Date(value),\n );\n },\n formatNumber(value: number, options?: Intl.NumberFormatOptions) {\n return new Intl.NumberFormat(locale, options).format(value);\n },\n formatRelativeTime(\n value: number,\n unit: Intl.RelativeTimeFormatUnit,\n options?: Intl.RelativeTimeFormatOptions,\n ) {\n return new Intl.RelativeTimeFormat(locale, options).format(value, unit);\n },\n formatList(value: string[], options?: Intl.ListFormatOptions) {\n return new Intl.ListFormat(locale, options).format(value);\n },\n }),\n [locale],\n );\n}\n\nexport function LanguagePicker({\n className,\n includeSystem = true,\n label,\n variant = \"select\",\n}: {\n className?: string;\n includeSystem?: boolean;\n label?: string;\n variant?: \"select\" | \"icon\";\n}) {\n const { locale, preference, setPreference } = useLocale();\n const [open, setOpen] = useState(false);\n const copy =\n LANGUAGE_PICKER_COPY[locale] ?? LANGUAGE_PICKER_COPY[DEFAULT_LOCALE];\n const resolvedLabel = label ?? copy.label;\n const options = [\n ...(includeSystem\n ? [\n {\n value: \"system\" as const,\n label: copy.system,\n description: copy.systemDescription,\n },\n ]\n : []),\n ...SUPPORTED_LOCALES.map((code) => ({\n value: code,\n label: `${LOCALE_METADATA[code].nativeName} (${code})`,\n description: code,\n })),\n ];\n const selected = options.find((option) => option.value === preference);\n const selectedLabel = selected?.label ?? preference;\n const triggerLabel = `${resolvedLabel}: ${selectedLabel}`;\n\n function handleOptionClick(value: LocalePreference) {\n setOpen(false);\n void setPreference(normalizeLocalizationPreference(value).locale);\n }\n\n return (\n <div className={className}>\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n aria-label={triggerLabel}\n title={triggerLabel}\n data-language-picker-trigger\n className={cn(\n \"shrink-0 rounded-md border border-border bg-background text-foreground outline-none transition-colors hover:border-foreground/30 hover:bg-accent/40 hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 data-[state=open]:border-foreground/30 data-[state=open]:bg-accent/40\",\n variant === \"icon\"\n ? \"flex h-8 w-8 items-center justify-center\"\n : \"flex h-9 w-full items-center justify-between gap-2 px-3 text-start text-sm\",\n )}\n >\n <span className=\"flex min-w-0 items-center gap-2\">\n <IconLanguage className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n {variant === \"select\" ? (\n <span className=\"truncate\">{selectedLabel}</span>\n ) : (\n <span className=\"sr-only\">{triggerLabel}</span>\n )}\n </span>\n {variant === \"select\" ? (\n <IconChevronDown\n className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\"\n aria-hidden=\"true\"\n />\n ) : null}\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align={variant === \"icon\" ? \"end\" : \"start\"}\n sideOffset={6}\n role=\"menu\"\n className={cn(\n \"z-[9999] max-h-[min(20rem,var(--radix-popover-content-available-height))] overflow-y-auto rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-lg outline-none will-change-[transform,opacity] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:duration-100 data-[state=open]:duration-150 data-[state=closed]:ease-in data-[state=open]:ease-out data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1\",\n variant === \"icon\"\n ? \"min-w-56\"\n : \"w-[min(20rem,calc(100vw-2rem))] min-w-[var(--radix-popover-trigger-width)]\",\n )}\n >\n {options.map((option) => {\n const optionSelected = option.value === preference;\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={optionSelected}\n title={option.description}\n onClick={() => handleOptionClick(option.value)}\n className={cn(\n \"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-start text-sm outline-none transition-colors hover:bg-accent/60 hover:text-foreground focus-visible:bg-accent/60 focus-visible:text-foreground\",\n optionSelected\n ? \"bg-accent/40 text-foreground\"\n : \"text-muted-foreground\",\n )}\n >\n <IconCheck\n className={cn(\n \"h-3.5 w-3.5 shrink-0\",\n optionSelected ? \"opacity-100\" : \"opacity-0\",\n )}\n aria-hidden=\"true\"\n />\n <span className=\"truncate\">{option.label}</span>\n </button>\n );\n })}\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n </div>\n );\n}\n"]}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -64,7 +64,7 @@ export * from "./chat/runtime.js";
|
|
|
64
64
|
export { ACTION_CHAT_UI_DATA_CHART_RENDERER, ACTION_CHAT_UI_DATA_INSIGHTS_RENDERER, ACTION_CHAT_UI_DATA_TABLE_RENDERER, ACTION_CHAT_UI_DATA_WIDGET_RENDERER, ACTION_CHAT_UI_INLINE_EXTENSION_RENDERER, type ActionChatUIConfig, } from "../action-ui.js";
|
|
65
65
|
export { DATA_CHART_WIDGET, DATA_INSIGHTS_WIDGET, DATA_TABLE_WIDGET, createDataChartWidgetResult, createDataInsightsWidgetResult, createDataTableWidgetResult, dataChartWidgetResultSchema, dataChartWidgetSchema, dataInsightsWidgetResultSchema, dataTableWidgetResultSchema, dataTableWidgetSchema, dataWidgetResultSchema, isDataChartWidget, isDataTableWidget, isDataWidgetResult, normalizeDataWidgetKind, normalizeDataWidgetResult, type DataChartSeriesDefinition, type DataChartWidget, type DataChartWidgetResult, type DataChartWidgetResultInput, type DataInsightsWidgetResult, type DataInsightsWidgetResultInput, type DataTableColumn, type DataTableWidget, type DataTableWidgetResult, type DataTableWidgetResultInput, type DataWidgetDisplay, type DataWidgetKind, type DataWidgetResult, type DataWidgetResultMetadata, } from "./chat/widgets/data-widget-types.js";
|
|
66
66
|
export { AgentNativeIcon } from "./components/icons/AgentNativeIcon.js";
|
|
67
|
-
export { SettingsPanel, type SettingsPanelProps } from "./settings/index.js";
|
|
67
|
+
export { SettingsPanel, SettingsTabsPage, type SettingsPanelProps, type SettingsTabItem, type SettingsTabsPageProps, } from "./settings/index.js";
|
|
68
68
|
export { useBuilderStatus } from "./settings/useBuilderStatus.js";
|
|
69
69
|
export { openBuilderConnectPopup, useBuilderConnectFlow, type BuilderConnectFlow, type BuilderConnectFlowOptions, type OpenBuilderConnectPopupOptions, } from "./settings/useBuilderStatus.js";
|
|
70
70
|
export { ProductionAgentPanel, type ProductionAgentPanelProps, } from "./ProductionAgentPanel.js";
|