@agent-native/core 0.79.27 → 0.80.1
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 +34 -0
- package/corpus/core/docs/content/locales/ar-SA/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +55 -1
- package/corpus/core/docs/content/locales/de-DE/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/de-DE/template-design.mdx +66 -1
- package/corpus/core/docs/content/locales/es-ES/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/es-ES/template-design.mdx +65 -1
- package/corpus/core/docs/content/locales/fr-FR/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +64 -1
- package/corpus/core/docs/content/locales/hi-IN/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +59 -1
- package/corpus/core/docs/content/locales/ja-JP/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +62 -1
- package/corpus/core/docs/content/locales/ko-KR/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +58 -1
- package/corpus/core/docs/content/locales/pt-BR/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +62 -1
- package/corpus/core/docs/content/locales/zh-CN/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +50 -1
- package/corpus/core/docs/content/locales/zh-TW/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +52 -1
- package/corpus/core/docs/content/skills-guide.mdx +5 -0
- package/corpus/core/docs/content/template-design.mdx +59 -1
- package/corpus/core/package.json +2 -1
- package/corpus/core/src/agent/engine/index.ts +1 -0
- package/corpus/core/src/agent/engine/registry.ts +40 -0
- package/corpus/core/src/agent/production-agent.ts +6 -2
- package/corpus/core/src/application-state/handlers.ts +1 -1
- package/corpus/core/src/brand-kit/index.ts +1 -1
- package/corpus/core/src/cli/design-connect.ts +490 -0
- package/corpus/core/src/cli/index.ts +16 -0
- package/corpus/core/src/cli/skills.ts +144 -3
- package/corpus/core/src/client/AgentPanel.tsx +1 -1
- package/corpus/core/src/client/AssistantChat.tsx +43 -7
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +1 -1
- package/corpus/core/src/client/agent-chat.ts +27 -3
- package/corpus/core/src/client/blocks/library/MermaidBlock.tsx +1 -1
- package/corpus/core/src/client/blocks/library/diagram.tsx +2 -2
- package/corpus/core/src/client/blocks/library/wireframe.tsx +1 -1
- package/corpus/core/src/client/chat/message-components.tsx +1 -1
- package/corpus/core/src/client/chat-model-groups.ts +1 -2
- package/corpus/core/src/client/components/LiveCursorOverlay.tsx +33 -66
- package/corpus/core/src/client/composer/TiptapComposer.tsx +99 -24
- package/corpus/core/src/client/composer/useVoiceDictation.ts +429 -260
- package/corpus/core/src/client/extensions/portable-extension.ts +1 -1
- package/corpus/core/src/client/frame-protocol.ts +17 -2
- package/corpus/core/src/client/rich-markdown-editor/RegistryBlockNode.tsx +2 -2
- package/corpus/core/src/client/sharing/ShareButton.tsx +20 -15
- package/corpus/core/src/client/use-agent-engine-configured.ts +80 -28
- package/corpus/core/src/code-agents/transcript-normalizer.ts +1 -1
- package/corpus/core/src/extensions/path.ts +1 -4
- package/corpus/core/src/integrations/a2a-continuation-processor.ts +1 -1
- package/corpus/core/src/mcp/build-server.ts +1 -1
- package/corpus/core/src/org/handlers.ts +5 -5
- package/corpus/core/src/org/plugin.ts +2 -2
- package/corpus/core/src/scripts/call-agent.ts +1 -1
- package/corpus/core/src/scripts/db/safety.ts +1 -1
- package/corpus/core/src/server/auth.ts +3 -0
- package/corpus/core/src/server/builder-design-systems.ts +308 -0
- package/corpus/core/src/server/core-routes-plugin.ts +29 -3
- package/corpus/core/src/server/index.ts +8 -0
- package/corpus/core/src/server/transcribe-voice.ts +57 -22
- package/corpus/core/src/shared/mcp-embed-headers.ts +23 -1
- package/corpus/core/src/styles/agent-native.css +60 -4
- package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
- package/corpus/core/src/usage/store.ts +2 -2
- package/corpus/core/src/vite/client.ts +2 -0
- package/corpus/core/src/voice/index.ts +18 -0
- package/corpus/core/src/voice/voice-cleanup-prompt.ts +38 -0
- package/corpus/core/src/voice/voice-context.ts +217 -0
- package/corpus/core/src/voice/voice-replacements.ts +75 -0
- package/corpus/templates/analytics/AGENTS.md +4 -3
- package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +298 -15
- package/corpus/templates/analytics/actions/get-sql-dashboard.ts +9 -4
- package/corpus/templates/analytics/actions/list-session-recordings.ts +6 -1
- package/corpus/templates/analytics/actions/mutate-dashboard.ts +18 -2
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +12 -2
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +557 -400
- package/corpus/templates/analytics/app/global.css +0 -4
- package/corpus/templates/analytics/app/hooks/use-replay-storage-status.ts +66 -0
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +39 -0
- package/corpus/templates/analytics/app/i18n-data.ts +424 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +333 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +2 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dashboard-layout.ts +121 -3
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +82 -34
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +7 -0
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +144 -36
- package/corpus/templates/analytics/changelog/2026-06-28-ask-tab-now-matches-the-darker-app-background.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-28-dashboard-email-reports-now-use-cleaner-light-mode-snapshots.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-28-sessions-now-show-only-signed-in-recordings-with-playable-re.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-analytics-agents-can-now-place-new-charts-into-requested-das.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-analytics-queries-now-report-failed-source-query-errors-inst.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-charts-can-now-be-dropped-between-full-dashboard-rows-to-cre.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-dashboard-email-reports-include-the-full-dashboard-image-wit.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-main-surface-border-reaches-the-top.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-session-replay-now-records-playable-sessions-in-production-a.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-29-set-up-session-replay-storage-from-settings-connect-builder-.md +6 -0
- package/corpus/templates/analytics/scripts/cleanup-empty-session-recordings.ts +102 -0
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +3 -3
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +75 -30
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +5 -2
- package/corpus/templates/analytics/server/lib/real-data-actions.ts +81 -20
- package/corpus/templates/analytics/server/lib/replay-storage.ts +79 -0
- package/corpus/templates/analytics/server/lib/s3-upload-provider.ts +255 -0
- package/corpus/templates/analytics/server/lib/session-replay.ts +53 -12
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +11 -2
- package/corpus/templates/analytics/server/plugins/onboarding.ts +97 -0
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +4 -4
- package/corpus/templates/assets/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/brain/app/components/layout/Layout.tsx +29 -2
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +131 -42
- package/corpus/templates/brain/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/brain/app/i18n-data.ts +20 -0
- package/corpus/templates/brain/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +29 -1
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +417 -299
- package/corpus/templates/calendar/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/calendar/app/i18n-data.ts +20 -0
- package/corpus/templates/calendar/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +6 -19
- package/corpus/templates/chat/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/clips/AGENTS.md +4 -0
- package/corpus/templates/clips/actions/cleanup-transcript.ts +39 -9
- package/corpus/templates/clips/actions/finalize-meeting.ts +81 -12
- package/corpus/templates/clips/actions/lib/agents-md-context.ts +4 -1
- package/corpus/templates/clips/app/components/library/library-layout.tsx +3 -3
- package/corpus/templates/clips/app/components/meetings/share-meeting-dialog.tsx +1 -1
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +2 -2
- package/corpus/templates/clips/changelog/2026-06-28-left-sidebar-footer-controls-use-less-divider-chrome.md +6 -0
- package/corpus/templates/clips/desktop/src/lib/personal-vocabulary.ts +13 -8
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +24 -0
- package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +105 -5
- package/corpus/templates/clips/desktop/src/lib/voice-dictation.ts +60 -1
- package/corpus/templates/content/actions/set-image-alt-text.ts +1 -1
- package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +1 -1
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +1 -1
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +5 -5
- package/corpus/templates/content/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/content/shared/document-export.ts +1 -1
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +8 -18
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +154 -0
- package/corpus/templates/design/AGENTS.md +95 -5
- package/corpus/templates/design/DESIGN.md +82 -0
- package/corpus/templates/design/DEVELOPING.md +43 -0
- package/corpus/templates/design/actions/add-localhost-screens.ts +453 -0
- package/corpus/templates/design/actions/apply-shader.ts +277 -0
- package/corpus/templates/design/actions/apply-visual-edit.ts +303 -0
- package/corpus/templates/design/actions/connect-localhost.ts +183 -0
- package/corpus/templates/design/actions/edit-design.ts +195 -42
- package/corpus/templates/design/actions/generate-design.ts +71 -1
- package/corpus/templates/design/actions/generate-screens.ts +193 -0
- package/corpus/templates/design/actions/get-code-layer-projection.ts +191 -0
- package/corpus/templates/design/actions/get-shader.ts +119 -0
- package/corpus/templates/design/actions/index-design-system-with-builder.ts +259 -0
- package/corpus/templates/design/actions/list-localhost-connections.ts +95 -0
- package/corpus/templates/design/actions/navigate.ts +55 -2
- package/corpus/templates/design/actions/update-file.ts +9 -2
- package/corpus/templates/design/actions/view-screen.ts +68 -1
- package/corpus/templates/design/agent-native.app-skill.json +10 -0
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +719 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +2120 -103
- package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +74 -38
- package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +401 -0
- package/corpus/templates/design/app/components/design/EditPanel.tsx +3966 -440
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +1473 -0
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +3940 -147
- package/corpus/templates/design/app/components/design/QuestionFlow.tsx +700 -13
- package/corpus/templates/design/app/components/design/TweaksPanel.tsx +105 -63
- package/corpus/templates/design/app/components/design/index.ts +0 -5
- package/corpus/templates/design/app/components/design/inspector/AlignmentMatrix.tsx +353 -0
- package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +1589 -0
- package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +511 -0
- package/corpus/templates/design/app/components/design/inspector/ExportSettingsPanel.tsx +395 -0
- package/corpus/templates/design/app/components/design/inspector/FigmaColorPicker.tsx +2010 -0
- package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +601 -0
- package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +242 -0
- package/corpus/templates/design/app/components/design/inspector/SHADER_INTEGRATION.md +420 -0
- package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +238 -0
- package/corpus/templates/design/app/components/design/inspector/ShaderControls.stories.tsx +71 -0
- package/corpus/templates/design/app/components/design/inspector/ShaderControls.tsx +575 -0
- package/corpus/templates/design/app/components/design/inspector/ShaderEffectRow.tsx +106 -0
- package/corpus/templates/design/app/components/design/inspector/ShaderFillsPanel.tsx +423 -0
- package/corpus/templates/design/app/components/design/inspector/figma-icons.tsx +741 -0
- package/corpus/templates/design/app/components/design/inspector/index.ts +87 -0
- package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +201 -0
- package/corpus/templates/design/app/components/design/types.ts +23 -0
- package/corpus/templates/design/app/components/layout/Layout.tsx +24 -13
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +4 -4
- package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +474 -36
- package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +22 -5
- package/corpus/templates/design/app/components/visual-editor/SaveStatusIndicator.tsx +24 -11
- package/corpus/templates/design/app/global.css +149 -5
- package/corpus/templates/design/app/hooks/use-agent-generating.ts +4 -0
- package/corpus/templates/design/app/hooks/use-navigation-state.ts +130 -8
- package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +329 -0
- package/corpus/templates/design/app/i18n/zh-TW.ts +277 -0
- package/corpus/templates/design/app/i18n-data.ts +3028 -1
- package/corpus/templates/design/app/pages/DesignEditor.tsx +5831 -904
- package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +57 -221
- package/corpus/templates/design/changelog/2026-06-28-annotate-mode-now-combines-drawing-and-comment-pins-in-one-c.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-design-editor-panel-borders-are-cleaner-so-the-canvas-edge-s.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-drawing-prompts-now-reliably-open-and-submit-to-the-design-a.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-editor-app-menus-now-use-an-outline-agent-native-mark-with-b.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-figma-style-code-design-mode.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-layer-selection-now-updates-chat-context-without-opening-the.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-layer-selections-now-preserve-hidden-and-locked-canvas-state.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-live-cursors-now-keep-names-beside-a-cleaner-pointer-marker.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-mode-switching-now-lives-in-a-compact-bottom-right-icon-dock.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-screen-overview-now-handles-zooming-drawing-opening-and-dele.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-screen-overview-now-selects-screens-on-click-and-opens-them-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-screen-overview-zooms-into-the-active-screen-with-smoother-e.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-selected-element-chips-in-chat-are-shorter-and-easier-to-sca.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-the-design-editor-toolbar-is-more-compact-and-the-app-menu-m.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-tweaks-now-live-at-the-top-of-the-design-sidebar-instead-of-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-28-tweaks-now-live-in-the-right-inspector-beside-the-design-tab.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-active-sidebar-rows-use-soft-highlights.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-agents-can-now-open-screen-overview-focus-screens-and-add.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-canvas-selection-no-longer-flashes-broken-prototype-html-whe.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-command-menu-selections-are-clearer-in-dark-mode.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-agents-now-edit-broad-copy-changes-more-reliably.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-editor-extensions-now-run-inline-beside-the-artboard.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-design-mode-top-chrome-now-groups-collaborators-preview-shar.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-element-selection-now-stays-on-the-intended-layer-after-sele.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-full-view-controls-now-sit-above-frames-inst.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-screen-overview-tools-can-draw-shapes-create-screens-and-kee.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-sidebars-use-darker-chrome-and-chat-warns-immediately.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-the-pen-tool-now-creates-anchor-based-bezier-vectors-with-ha.md +6 -0
- package/corpus/templates/design/changelog/2026-06-29-visual-edit-can-open-localhost-routes-as-url-backed-screens.md +6 -0
- package/corpus/templates/design/package.json +1 -0
- package/corpus/templates/design/server/db/schema.ts +26 -0
- package/corpus/templates/design/server/handlers/import-figma-system.ts +38 -85
- package/corpus/templates/design/server/lib/design-snapshot.ts +9 -1
- package/corpus/templates/design/server/plugins/agent-chat.ts +3 -0
- package/corpus/templates/design/shared/api.ts +27 -0
- package/corpus/templates/design/shared/canvas-frames.ts +103 -0
- package/corpus/templates/design/shared/canvas-math.ts +1058 -0
- package/corpus/templates/design/shared/code-layer.ts +2412 -0
- package/corpus/templates/design/shared/color-utils.ts +180 -0
- package/corpus/templates/design/shared/generation-session.ts +61 -0
- package/corpus/templates/design/shared/html-content.ts +21 -0
- package/corpus/templates/design/shared/pen-path.ts +207 -0
- package/corpus/templates/design/shared/shader-presets.ts +782 -0
- package/corpus/templates/design/shared/shader-safety.ts +137 -0
- package/corpus/templates/design/shared/source-mode.ts +237 -0
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +149 -6
- package/corpus/templates/forms/app/i18n/ar-SA.ts +2 -0
- package/corpus/templates/forms/app/i18n/de-DE.ts +2 -0
- package/corpus/templates/forms/app/i18n/en-US.ts +2 -0
- package/corpus/templates/forms/app/i18n/es-ES.ts +2 -0
- package/corpus/templates/forms/app/i18n/fr-FR.ts +2 -0
- package/corpus/templates/forms/app/i18n/hi-IN.ts +2 -0
- package/corpus/templates/forms/app/i18n/ja-JP.ts +2 -0
- package/corpus/templates/forms/app/i18n/ko-KR.ts +2 -0
- package/corpus/templates/forms/app/i18n/pt-BR.ts +2 -0
- package/corpus/templates/forms/app/i18n/zh-CN.ts +2 -0
- package/corpus/templates/forms/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/forms/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +2 -2
- package/corpus/templates/macros/changelog/2026-06-28-left-sidebar-footer-controls-use-less-divider-chrome.md +6 -0
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +408 -247
- package/corpus/templates/mail/app/i18n/ar-SA.ts +4 -0
- package/corpus/templates/mail/app/i18n/de-DE.ts +4 -0
- package/corpus/templates/mail/app/i18n/en-US.ts +4 -0
- package/corpus/templates/mail/app/i18n/es-ES.ts +4 -0
- package/corpus/templates/mail/app/i18n/fr-FR.ts +4 -0
- package/corpus/templates/mail/app/i18n/hi-IN.ts +4 -0
- package/corpus/templates/mail/app/i18n/ja-JP.ts +4 -0
- package/corpus/templates/mail/app/i18n/ko-KR.ts +4 -0
- package/corpus/templates/mail/app/i18n/pt-BR.ts +4 -0
- package/corpus/templates/mail/app/i18n/zh-CN.ts +4 -0
- package/corpus/templates/mail/app/i18n/zh-TW.ts +4 -0
- package/corpus/templates/mail/app/lib/utils.ts +2 -2
- package/corpus/templates/mail/changelog/2026-06-28-pinned-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +6 -8
- package/corpus/templates/plan/app/components/plan/wireframe/Wireframe.tsx +1 -1
- package/corpus/templates/plan/app/global.css +61 -78
- package/corpus/templates/plan/app/pages/PlansPage.tsx +8 -0
- package/corpus/templates/plan/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/plan/changelog/2026-06-28-plans-use-the-shared-neutral-light-and-dark-theme.md +6 -0
- package/corpus/templates/plan/changelog/2026-06-28-sending-open-feedback-from-a-plan-now-opens-the-inline-plan-.md +6 -0
- package/corpus/templates/slides/.agents/skills/design-systems/SKILL.md +9 -10
- package/corpus/templates/slides/AGENTS.md +3 -2
- package/corpus/templates/slides/actions/import-file.ts +26 -17
- package/corpus/templates/slides/actions/index-design-system-with-builder.ts +259 -0
- package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +35 -167
- package/corpus/templates/slides/app/components/design-system/fig-import-response.ts +9 -13
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +5 -5
- package/corpus/templates/slides/app/context/DeckContext.tsx +1 -1
- package/corpus/templates/slides/app/i18n/ar-SA.ts +9 -37
- package/corpus/templates/slides/app/i18n/de-DE.ts +10 -25
- package/corpus/templates/slides/app/i18n/en-US.ts +9 -26
- package/corpus/templates/slides/app/i18n/es-ES.ts +10 -28
- package/corpus/templates/slides/app/i18n/fr-FR.ts +10 -28
- package/corpus/templates/slides/app/i18n/hi-IN.ts +9 -26
- package/corpus/templates/slides/app/i18n/ja-JP.ts +10 -22
- package/corpus/templates/slides/app/i18n/ko-KR.ts +9 -23
- package/corpus/templates/slides/app/i18n/pt-BR.ts +10 -28
- package/corpus/templates/slides/app/i18n/zh-CN.ts +9 -22
- package/corpus/templates/slides/app/i18n/zh-TW.ts +9 -22
- package/corpus/templates/slides/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
- package/corpus/templates/slides/server/handlers/import-figma-system.ts +44 -12
- package/corpus/templates/slides/server/lib/chat-attachments.ts +1 -1
- package/corpus/templates/videos/app/components/NewCompositionPopover.tsx +1 -1
- package/corpus/templates/videos/app/components/Sidebar.tsx +2 -2
- package/corpus/templates/videos/app/components/layout/Layout.tsx +29 -2
- package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +113 -30
- package/corpus/templates/videos/app/i18n/ar-SA.ts +2 -0
- package/corpus/templates/videos/app/i18n/de-DE.ts +2 -0
- package/corpus/templates/videos/app/i18n/en-US.ts +2 -0
- package/corpus/templates/videos/app/i18n/es-ES.ts +2 -0
- package/corpus/templates/videos/app/i18n/fr-FR.ts +2 -0
- package/corpus/templates/videos/app/i18n/hi-IN.ts +2 -0
- package/corpus/templates/videos/app/i18n/ja-JP.ts +2 -0
- package/corpus/templates/videos/app/i18n/ko-KR.ts +2 -0
- package/corpus/templates/videos/app/i18n/pt-BR.ts +2 -0
- package/corpus/templates/videos/app/i18n/zh-CN.ts +2 -0
- package/corpus/templates/videos/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/videos/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
- package/dist/agent/engine/index.d.ts +1 -1
- package/dist/agent/engine/index.d.ts.map +1 -1
- package/dist/agent/engine/index.js +1 -1
- package/dist/agent/engine/index.js.map +1 -1
- package/dist/agent/engine/registry.d.ts +9 -0
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +37 -0
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +4 -3
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/application-state/handlers.js +1 -1
- package/dist/application-state/handlers.js.map +1 -1
- package/dist/brand-kit/index.d.ts +1 -1
- package/dist/brand-kit/index.js +1 -1
- package/dist/brand-kit/index.js.map +1 -1
- package/dist/cli/design-connect.d.ts +52 -0
- package/dist/cli/design-connect.d.ts.map +1 -0
- package/dist/cli/design-connect.js +409 -0
- package/dist/cli/design-connect.js.map +1 -0
- package/dist/cli/index.js +15 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/skills.d.ts +3 -0
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +139 -3
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AgentPanel.js +1 -1
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +38 -8
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +1 -1
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat.d.ts +6 -0
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +17 -3
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/blocks/library/MermaidBlock.js +1 -1
- package/dist/client/blocks/library/MermaidBlock.js.map +1 -1
- package/dist/client/blocks/library/diagram.js +1 -1
- package/dist/client/blocks/library/diagram.js.map +1 -1
- package/dist/client/blocks/library/wireframe.js +1 -1
- package/dist/client/blocks/library/wireframe.js.map +1 -1
- package/dist/client/chat/message-components.js +1 -1
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat-model-groups.d.ts.map +1 -1
- package/dist/client/chat-model-groups.js +1 -2
- package/dist/client/chat-model-groups.js.map +1 -1
- package/dist/client/components/LiveCursorOverlay.d.ts +1 -2
- package/dist/client/components/LiveCursorOverlay.d.ts.map +1 -1
- package/dist/client/components/LiveCursorOverlay.js +19 -40
- package/dist/client/components/LiveCursorOverlay.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +3 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +86 -24
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/useVoiceDictation.d.ts +9 -0
- package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
- package/dist/client/composer/useVoiceDictation.js +154 -32
- package/dist/client/composer/useVoiceDictation.js.map +1 -1
- package/dist/client/extensions/portable-extension.d.ts +1 -1
- package/dist/client/extensions/portable-extension.d.ts.map +1 -1
- package/dist/client/extensions/portable-extension.js.map +1 -1
- package/dist/client/frame-protocol.d.ts +17 -2
- package/dist/client/frame-protocol.d.ts.map +1 -1
- package/dist/client/frame-protocol.js.map +1 -1
- package/dist/client/rich-markdown-editor/RegistryBlockNode.js +2 -2
- package/dist/client/rich-markdown-editor/RegistryBlockNode.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts +2 -0
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +7 -6
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/client/use-agent-engine-configured.d.ts +5 -0
- package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
- package/dist/client/use-agent-engine-configured.js +51 -25
- package/dist/client/use-agent-engine-configured.js.map +1 -1
- package/dist/code-agents/transcript-normalizer.js +1 -1
- package/dist/code-agents/transcript-normalizer.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/extensions/path.d.ts +1 -1
- package/dist/extensions/path.d.ts.map +1 -1
- package/dist/extensions/path.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +2 -2
- package/dist/integrations/a2a-continuation-processor.js +1 -1
- package/dist/integrations/a2a-continuation-processor.js.map +1 -1
- package/dist/mcp/build-server.d.ts +1 -1
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/observability/routes.d.ts +5 -5
- package/dist/org/handlers.js +5 -5
- package/dist/org/handlers.js.map +1 -1
- package/dist/org/plugin.js +2 -2
- package/dist/org/plugin.js.map +1 -1
- package/dist/scripts/call-agent.js +1 -1
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/scripts/db/safety.js +1 -1
- package/dist/scripts/db/safety.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +3 -0
- package/dist/server/auth.js.map +1 -1
- package/dist/server/builder-design-systems.d.ts +28 -0
- package/dist/server/builder-design-systems.d.ts.map +1 -0
- package/dist/server/builder-design-systems.js +217 -0
- package/dist/server/builder-design-systems.js.map +1 -0
- package/dist/server/core-routes-plugin.d.ts +1 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +20 -3
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts.map +1 -1
- package/dist/server/transcribe-voice.js +40 -24
- package/dist/server/transcribe-voice.js.map +1 -1
- package/dist/shared/mcp-embed-headers.d.ts +1 -0
- package/dist/shared/mcp-embed-headers.d.ts.map +1 -1
- package/dist/shared/mcp-embed-headers.js +20 -1
- package/dist/shared/mcp-embed-headers.js.map +1 -1
- package/dist/styles/agent-native.css +60 -4
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
- package/dist/usage/store.js +2 -2
- package/dist/usage/store.js.map +1 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +2 -0
- package/dist/vite/client.js.map +1 -1
- package/dist/voice/index.d.ts +5 -0
- package/dist/voice/index.d.ts.map +1 -0
- package/dist/voice/index.js +4 -0
- package/dist/voice/index.js.map +1 -0
- package/dist/voice/voice-cleanup-prompt.d.ts +6 -0
- package/dist/voice/voice-cleanup-prompt.d.ts.map +1 -0
- package/dist/voice/voice-cleanup-prompt.js +26 -0
- package/dist/voice/voice-cleanup-prompt.js.map +1 -0
- package/dist/voice/voice-context.d.ts +25 -0
- package/dist/voice/voice-context.d.ts.map +1 -0
- package/dist/voice/voice-context.js +156 -0
- package/dist/voice/voice-context.js.map +1 -0
- package/dist/voice/voice-replacements.d.ts +4 -0
- package/dist/voice/voice-replacements.d.ts.map +1 -0
- package/dist/voice/voice-replacements.js +52 -0
- package/dist/voice/voice-replacements.js.map +1 -0
- package/docs/content/locales/ar-SA/skills-guide.mdx +5 -0
- package/docs/content/locales/ar-SA/template-design.mdx +55 -1
- package/docs/content/locales/de-DE/skills-guide.mdx +5 -0
- package/docs/content/locales/de-DE/template-design.mdx +66 -1
- package/docs/content/locales/es-ES/skills-guide.mdx +5 -0
- package/docs/content/locales/es-ES/template-design.mdx +65 -1
- package/docs/content/locales/fr-FR/skills-guide.mdx +5 -0
- package/docs/content/locales/fr-FR/template-design.mdx +64 -1
- package/docs/content/locales/hi-IN/skills-guide.mdx +5 -0
- package/docs/content/locales/hi-IN/template-design.mdx +59 -1
- package/docs/content/locales/ja-JP/skills-guide.mdx +5 -0
- package/docs/content/locales/ja-JP/template-design.mdx +62 -1
- package/docs/content/locales/ko-KR/skills-guide.mdx +5 -0
- package/docs/content/locales/ko-KR/template-design.mdx +58 -1
- package/docs/content/locales/pt-BR/skills-guide.mdx +5 -0
- package/docs/content/locales/pt-BR/template-design.mdx +62 -1
- package/docs/content/locales/zh-CN/skills-guide.mdx +5 -0
- package/docs/content/locales/zh-CN/template-design.mdx +50 -1
- package/docs/content/locales/zh-TW/skills-guide.mdx +5 -0
- package/docs/content/locales/zh-TW/template-design.mdx +52 -1
- package/docs/content/skills-guide.mdx +5 -0
- package/docs/content/template-design.mdx +59 -1
- package/package.json +2 -1
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
- package/corpus/templates/design/actions/import-figma-file.ts +0 -166
- package/corpus/templates/design/app/components/design/DesignToolbar.tsx +0 -339
- package/corpus/templates/design/app/components/design/PresentMode.tsx +0 -68
- package/corpus/templates/design/app/components/design/ViewportTabs.tsx +0 -149
- package/corpus/templates/design/app/components/design/ZoomControls.tsx +0 -157
- package/corpus/templates/slides/server/lib/fig-design-system.ts +0 -110
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import {
|
|
3
|
+
startBuilderDesignSystemIndex,
|
|
4
|
+
type BuilderDesignSystemIndexFile,
|
|
5
|
+
} from "@agent-native/core/server";
|
|
6
|
+
import {
|
|
7
|
+
getRequestOrgId,
|
|
8
|
+
getRequestUserEmail,
|
|
9
|
+
} from "@agent-native/core/server/request-context";
|
|
10
|
+
import { eq } from "drizzle-orm";
|
|
11
|
+
import { nanoid } from "nanoid";
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
|
|
14
|
+
import { getDb, schema } from "../server/db/index.js";
|
|
15
|
+
|
|
16
|
+
const MAX_CODE_FILES = 50;
|
|
17
|
+
const MAX_TOTAL_CODE_BYTES = 2 * 1024 * 1024;
|
|
18
|
+
|
|
19
|
+
const codeFileSchema = z.object({
|
|
20
|
+
filename: z.string().trim().min(1).describe("File name or relative path"),
|
|
21
|
+
content: z.string().describe("Raw text content of the code/design file"),
|
|
22
|
+
mimeType: z.string().trim().optional().describe("Optional MIME type"),
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
function mimeTypeForFilename(filename: string, explicit?: string): string {
|
|
26
|
+
if (explicit?.trim()) return explicit.trim();
|
|
27
|
+
const lower = filename.toLowerCase();
|
|
28
|
+
if (lower.endsWith(".css")) return "text/css";
|
|
29
|
+
if (lower.endsWith(".json")) return "application/json";
|
|
30
|
+
if (lower.endsWith(".md") || lower.endsWith(".mdx")) return "text/markdown";
|
|
31
|
+
if (lower.endsWith(".html")) return "text/html";
|
|
32
|
+
if (lower.endsWith(".svg")) return "image/svg+xml";
|
|
33
|
+
return "text/plain";
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function makeFiles(
|
|
37
|
+
codeFiles: Array<z.infer<typeof codeFileSchema>> | undefined,
|
|
38
|
+
): BuilderDesignSystemIndexFile[] {
|
|
39
|
+
const encoder = new TextEncoder();
|
|
40
|
+
const files: BuilderDesignSystemIndexFile[] = [];
|
|
41
|
+
let totalBytes = 0;
|
|
42
|
+
for (const file of (codeFiles ?? []).slice(0, MAX_CODE_FILES)) {
|
|
43
|
+
const data = encoder.encode(file.content);
|
|
44
|
+
if (totalBytes + data.byteLength > MAX_TOTAL_CODE_BYTES) break;
|
|
45
|
+
totalBytes += data.byteLength;
|
|
46
|
+
files.push({
|
|
47
|
+
name: file.filename.replace(/^\/+/, "") || "code.txt",
|
|
48
|
+
data,
|
|
49
|
+
mimeType: mimeTypeForFilename(file.filename, file.mimeType),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return files;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function localBuilderDesignSystemId(builderDesignSystemId: string): string {
|
|
56
|
+
const slug = builderDesignSystemId
|
|
57
|
+
.replace(/[^a-zA-Z0-9_-]+/g, "-")
|
|
58
|
+
.replace(/^-+|-+$/g, "")
|
|
59
|
+
.slice(0, 96);
|
|
60
|
+
return `builder-${slug || "design-system"}`;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function builderProxyData({
|
|
64
|
+
builderDesignSystemId,
|
|
65
|
+
jobId,
|
|
66
|
+
builderUrl,
|
|
67
|
+
projectName,
|
|
68
|
+
description,
|
|
69
|
+
}: {
|
|
70
|
+
builderDesignSystemId: string;
|
|
71
|
+
jobId: string;
|
|
72
|
+
builderUrl: string;
|
|
73
|
+
projectName?: string;
|
|
74
|
+
description?: string;
|
|
75
|
+
}) {
|
|
76
|
+
return JSON.stringify({
|
|
77
|
+
source: "builder",
|
|
78
|
+
builderDesignSystemId,
|
|
79
|
+
builderJobId: jobId,
|
|
80
|
+
builderUrl,
|
|
81
|
+
colors: {
|
|
82
|
+
primary: "var(--primary)",
|
|
83
|
+
secondary: "var(--secondary)",
|
|
84
|
+
accent: "var(--accent)",
|
|
85
|
+
background: "var(--background)",
|
|
86
|
+
surface: "var(--card)",
|
|
87
|
+
text: "var(--foreground)",
|
|
88
|
+
textMuted: "var(--muted-foreground)",
|
|
89
|
+
},
|
|
90
|
+
typography: {
|
|
91
|
+
headingFont: "inherit",
|
|
92
|
+
bodyFont: "inherit",
|
|
93
|
+
headingWeight: "700",
|
|
94
|
+
bodyWeight: "400",
|
|
95
|
+
headingSizes: { h1: "48px", h2: "32px", h3: "24px" },
|
|
96
|
+
},
|
|
97
|
+
spacing: { elementGap: "24px", slidePadding: "48px" },
|
|
98
|
+
borders: { radius: "12px", accentWidth: "1px" },
|
|
99
|
+
logos: [],
|
|
100
|
+
notes: [
|
|
101
|
+
"This is a local proxy for a Builder-indexed design system.",
|
|
102
|
+
`Builder design system id: ${builderDesignSystemId}`,
|
|
103
|
+
`Builder indexing job id: ${jobId}`,
|
|
104
|
+
`Builder URL: ${builderUrl}`,
|
|
105
|
+
projectName ? `Requested name: ${projectName}` : "",
|
|
106
|
+
description ? `Context: ${description}` : "",
|
|
107
|
+
"Use Builder as the source of truth for extracted tokens and guidance.",
|
|
108
|
+
]
|
|
109
|
+
.filter(Boolean)
|
|
110
|
+
.join("\n"),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function builderProxyInstructions({
|
|
115
|
+
builderDesignSystemId,
|
|
116
|
+
jobId,
|
|
117
|
+
builderUrl,
|
|
118
|
+
}: {
|
|
119
|
+
builderDesignSystemId: string;
|
|
120
|
+
jobId: string;
|
|
121
|
+
builderUrl: string;
|
|
122
|
+
}) {
|
|
123
|
+
return [
|
|
124
|
+
"This design system is indexed and owned by Builder.",
|
|
125
|
+
`Builder design system id: ${builderDesignSystemId}`,
|
|
126
|
+
`Builder job id: ${jobId}`,
|
|
127
|
+
`Builder URL: ${builderUrl}`,
|
|
128
|
+
"When generating slides, treat Builder as the source of truth for the final extracted tokens, assets, and guidance.",
|
|
129
|
+
].join("\n");
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export default defineAction({
|
|
133
|
+
description:
|
|
134
|
+
"Start Builder design-system indexing from a GitHub repository and/or code files. " +
|
|
135
|
+
"Use this instead of local import-code/import-github when the user wants a reusable brand kit or slide design system. " +
|
|
136
|
+
"Requires Builder.io to be connected; Builder owns the indexed design-system docs, generated guidance, and job state.",
|
|
137
|
+
schema: z.object({
|
|
138
|
+
projectName: z
|
|
139
|
+
.string()
|
|
140
|
+
.optional()
|
|
141
|
+
.describe("Optional Builder project/design-system name"),
|
|
142
|
+
description: z
|
|
143
|
+
.string()
|
|
144
|
+
.optional()
|
|
145
|
+
.describe("Additional brand context or instructions for Builder"),
|
|
146
|
+
githubRepoUrl: z
|
|
147
|
+
.string()
|
|
148
|
+
.optional()
|
|
149
|
+
.describe("GitHub repository URL to index with Builder"),
|
|
150
|
+
connectedProjectId: z
|
|
151
|
+
.string()
|
|
152
|
+
.optional()
|
|
153
|
+
.describe("Optional existing Builder project id to attach indexing to"),
|
|
154
|
+
codeFiles: z
|
|
155
|
+
.array(codeFileSchema)
|
|
156
|
+
.optional()
|
|
157
|
+
.describe("Optional inlined code/design files to upload to Builder"),
|
|
158
|
+
}),
|
|
159
|
+
run: async ({
|
|
160
|
+
projectName,
|
|
161
|
+
description,
|
|
162
|
+
githubRepoUrl,
|
|
163
|
+
connectedProjectId,
|
|
164
|
+
codeFiles,
|
|
165
|
+
}) => {
|
|
166
|
+
const files = makeFiles(codeFiles);
|
|
167
|
+
const result = await startBuilderDesignSystemIndex({
|
|
168
|
+
projectName,
|
|
169
|
+
description,
|
|
170
|
+
githubRepoUrl,
|
|
171
|
+
connectedProjectId,
|
|
172
|
+
files,
|
|
173
|
+
});
|
|
174
|
+
const ownerEmail = getRequestUserEmail();
|
|
175
|
+
if (!ownerEmail) throw new Error("no authenticated user");
|
|
176
|
+
|
|
177
|
+
const db = getDb();
|
|
178
|
+
const now = new Date().toISOString();
|
|
179
|
+
const orgId = getRequestOrgId();
|
|
180
|
+
const baseLocalDesignSystemId = localBuilderDesignSystemId(
|
|
181
|
+
result.designSystemId,
|
|
182
|
+
);
|
|
183
|
+
const title = projectName?.trim() || "Builder indexed design system";
|
|
184
|
+
const localData = builderProxyData({
|
|
185
|
+
builderDesignSystemId: result.designSystemId,
|
|
186
|
+
jobId: result.jobId,
|
|
187
|
+
builderUrl: result.builderUrl,
|
|
188
|
+
projectName,
|
|
189
|
+
description,
|
|
190
|
+
});
|
|
191
|
+
const customInstructions = builderProxyInstructions({
|
|
192
|
+
builderDesignSystemId: result.designSystemId,
|
|
193
|
+
jobId: result.jobId,
|
|
194
|
+
builderUrl: result.builderUrl,
|
|
195
|
+
});
|
|
196
|
+
const [existing] = await db
|
|
197
|
+
.select({
|
|
198
|
+
id: schema.designSystems.id,
|
|
199
|
+
ownerEmail: schema.designSystems.ownerEmail,
|
|
200
|
+
})
|
|
201
|
+
.from(schema.designSystems)
|
|
202
|
+
.where(eq(schema.designSystems.id, baseLocalDesignSystemId))
|
|
203
|
+
.limit(1);
|
|
204
|
+
const localDesignSystemId =
|
|
205
|
+
existing && existing.ownerEmail !== ownerEmail
|
|
206
|
+
? `${baseLocalDesignSystemId}-${nanoid(8)}`
|
|
207
|
+
: baseLocalDesignSystemId;
|
|
208
|
+
if (existing && existing.ownerEmail === ownerEmail) {
|
|
209
|
+
await db
|
|
210
|
+
.update(schema.designSystems)
|
|
211
|
+
.set({
|
|
212
|
+
title,
|
|
213
|
+
description:
|
|
214
|
+
description ??
|
|
215
|
+
`Builder indexed design system ${result.designSystemId}`,
|
|
216
|
+
data: localData,
|
|
217
|
+
assets: "[]",
|
|
218
|
+
customInstructions,
|
|
219
|
+
updatedAt: now,
|
|
220
|
+
})
|
|
221
|
+
.where(eq(schema.designSystems.id, existing.id));
|
|
222
|
+
} else {
|
|
223
|
+
const [ownedSystem] = await db
|
|
224
|
+
.select({ id: schema.designSystems.id })
|
|
225
|
+
.from(schema.designSystems)
|
|
226
|
+
.where(eq(schema.designSystems.ownerEmail, ownerEmail))
|
|
227
|
+
.limit(1);
|
|
228
|
+
await db.insert(schema.designSystems).values({
|
|
229
|
+
id: localDesignSystemId,
|
|
230
|
+
title,
|
|
231
|
+
description:
|
|
232
|
+
description ??
|
|
233
|
+
`Builder indexed design system ${result.designSystemId}`,
|
|
234
|
+
data: localData,
|
|
235
|
+
assets: "[]",
|
|
236
|
+
customInstructions,
|
|
237
|
+
isDefault: !ownedSystem,
|
|
238
|
+
ownerEmail,
|
|
239
|
+
orgId,
|
|
240
|
+
createdAt: now,
|
|
241
|
+
updatedAt: now,
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return {
|
|
246
|
+
...result,
|
|
247
|
+
localDesignSystemId,
|
|
248
|
+
uploadedFileCount: files.length,
|
|
249
|
+
instructions: [
|
|
250
|
+
"Builder design-system indexing has started.",
|
|
251
|
+
`Builder design system: ${result.designSystemId}`,
|
|
252
|
+
`Local selectable design system: ${localDesignSystemId}`,
|
|
253
|
+
`Builder job: ${result.jobId}`,
|
|
254
|
+
`Open: ${result.builderUrl}`,
|
|
255
|
+
"Use the local design system id in Slides flows; Builder remains the source of truth for the indexed brand kit.",
|
|
256
|
+
].join("\n"),
|
|
257
|
+
};
|
|
258
|
+
},
|
|
259
|
+
});
|
|
@@ -4,7 +4,6 @@ import {
|
|
|
4
4
|
sendToAgentChat,
|
|
5
5
|
openAgentSidebar,
|
|
6
6
|
appApiPath,
|
|
7
|
-
useFormatters,
|
|
8
7
|
useT,
|
|
9
8
|
} from "@agent-native/core/client";
|
|
10
9
|
import {
|
|
@@ -18,6 +17,7 @@ import {
|
|
|
18
17
|
IconFileDescription,
|
|
19
18
|
IconPhoto,
|
|
20
19
|
IconCheck,
|
|
20
|
+
IconExternalLink,
|
|
21
21
|
} from "@tabler/icons-react";
|
|
22
22
|
import { useState, useCallback, useEffect, useRef, useMemo } from "react";
|
|
23
23
|
|
|
@@ -108,14 +108,11 @@ export function DesignSystemSetup({
|
|
|
108
108
|
const [figParsing, setFigParsing] = useState(false);
|
|
109
109
|
const [figResult, setFigResult] = useState<FigImportResult | null>(null);
|
|
110
110
|
const [figError, setFigError] = useState<string | null>(null);
|
|
111
|
-
const [figTitle, setFigTitle] = useState("");
|
|
112
|
-
const [figCreating, setFigCreating] = useState(false);
|
|
113
111
|
|
|
114
112
|
const codeInputRef = useRef<HTMLInputElement>(null);
|
|
115
113
|
const docInputRef = useRef<HTMLInputElement>(null);
|
|
116
114
|
const imageInputRef = useRef<HTMLInputElement>(null);
|
|
117
115
|
const figInputRef = useRef<HTMLInputElement>(null);
|
|
118
|
-
const createSystemMutation = useActionMutation("create-design-system");
|
|
119
116
|
const updateSystemMutation = useActionMutation("update-design-system");
|
|
120
117
|
|
|
121
118
|
const { data: existingDs } = useActionQuery<{
|
|
@@ -164,8 +161,6 @@ export function DesignSystemSetup({
|
|
|
164
161
|
setFigParsing(false);
|
|
165
162
|
setFigResult(null);
|
|
166
163
|
setFigError(null);
|
|
167
|
-
setFigTitle("");
|
|
168
|
-
setFigCreating(false);
|
|
169
164
|
}
|
|
170
165
|
}, [open]);
|
|
171
166
|
|
|
@@ -273,9 +268,6 @@ export function DesignSystemSetup({
|
|
|
273
268
|
});
|
|
274
269
|
const parsed = await readFigImportResponse(res);
|
|
275
270
|
setFigResult(parsed);
|
|
276
|
-
setFigTitle(
|
|
277
|
-
parsed.suggestedTitle || t("designSystemSetup.importedBrand"),
|
|
278
|
-
);
|
|
279
271
|
} catch (err) {
|
|
280
272
|
setFigError(
|
|
281
273
|
err instanceof Error
|
|
@@ -286,37 +278,9 @@ export function DesignSystemSetup({
|
|
|
286
278
|
setFigParsing(false);
|
|
287
279
|
}
|
|
288
280
|
},
|
|
289
|
-
[],
|
|
281
|
+
[t],
|
|
290
282
|
);
|
|
291
283
|
|
|
292
|
-
const handleCreateFromFig = useCallback(async () => {
|
|
293
|
-
if (!figResult) return;
|
|
294
|
-
const title =
|
|
295
|
-
figTitle.trim() ||
|
|
296
|
-
figResult.suggestedTitle ||
|
|
297
|
-
t("designSystemSetup.importedBrand");
|
|
298
|
-
setFigCreating(true);
|
|
299
|
-
try {
|
|
300
|
-
await createSystemMutation.mutateAsync({
|
|
301
|
-
title,
|
|
302
|
-
data: JSON.stringify(figResult.data),
|
|
303
|
-
customInstructions: figResult.customInstructions || "",
|
|
304
|
-
} as any);
|
|
305
|
-
toast({ title: t("designSystemSetup.figmaCreated") });
|
|
306
|
-
onComplete();
|
|
307
|
-
} catch (err) {
|
|
308
|
-
setFigCreating(false);
|
|
309
|
-
toast({
|
|
310
|
-
title: t("designSystemSetup.createFailed"),
|
|
311
|
-
description:
|
|
312
|
-
err instanceof Error
|
|
313
|
-
? err.message
|
|
314
|
-
: t("designSystemSetup.genericError"),
|
|
315
|
-
variant: "destructive",
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
}, [figResult, figTitle, createSystemMutation, onComplete, t]);
|
|
319
|
-
|
|
320
284
|
const handleEditSave = async () => {
|
|
321
285
|
if (!editingId) return;
|
|
322
286
|
setGenerating(true);
|
|
@@ -371,7 +335,7 @@ export function DesignSystemSetup({
|
|
|
371
335
|
|
|
372
336
|
if (githubLinks.length > 0) {
|
|
373
337
|
parts.push(
|
|
374
|
-
`\n## GitHub Repositories\
|
|
338
|
+
`\n## GitHub Repositories\nStart Builder design-system indexing for each repository with \`index-design-system-with-builder\`:\n${githubLinks.map((l) => `- ${l.url}`).join("\n")}\n\nBuilder is the source of truth for repo/code design-system indexing. The action also creates a local selectable proxy design system for Slides flows. If Builder is not connected, stop and tell me to connect Builder from Settings.`,
|
|
375
339
|
);
|
|
376
340
|
}
|
|
377
341
|
|
|
@@ -379,7 +343,7 @@ export function DesignSystemSetup({
|
|
|
379
343
|
const withContent = codeFiles.filter((f) => f.textContent);
|
|
380
344
|
if (withContent.length > 0) {
|
|
381
345
|
parts.push(
|
|
382
|
-
`\n## Code Files (${withContent.length} files)\
|
|
346
|
+
`\n## Code Files (${withContent.length} files)\nStart Builder design-system indexing with \`index-design-system-with-builder\` using these files:`,
|
|
383
347
|
);
|
|
384
348
|
for (const f of withContent) {
|
|
385
349
|
parts.push(
|
|
@@ -430,12 +394,12 @@ export function DesignSystemSetup({
|
|
|
430
394
|
|
|
431
395
|
if (customInstructions.trim()) {
|
|
432
396
|
parts.push(
|
|
433
|
-
`\n## Custom Instructions (durable — store on the design system)\
|
|
397
|
+
`\n## Custom Instructions (durable — store on the design system)\nIf you create a local design system from non-Builder sources, pass these verbatim as the \`customInstructions\` argument. They will be re-applied every time the design system is used to generate slides:\n\n${customInstructions.trim()}`,
|
|
434
398
|
);
|
|
435
399
|
}
|
|
436
400
|
|
|
437
401
|
parts.push(
|
|
438
|
-
`\n---\nAfter processing all sources, call \`create-design-system\` with the combined tokens${
|
|
402
|
+
`\n---\nAfter processing all sources, if you started Builder design-system indexing, report the Builder job/design-system URL plus the local selectable design-system id returned by \`index-design-system-with-builder\`. Do not call \`create-design-system\` again for those Builder-indexed sources. If you processed non-Builder sources into concrete tokens, call \`create-design-system\` with the combined tokens${
|
|
439
403
|
customInstructions.trim()
|
|
440
404
|
? " AND the verbatim --customInstructions string from above"
|
|
441
405
|
: ""
|
|
@@ -543,14 +507,9 @@ export function DesignSystemSetup({
|
|
|
543
507
|
) : (
|
|
544
508
|
<FigImportPreview
|
|
545
509
|
result={figResult}
|
|
546
|
-
title={figTitle}
|
|
547
|
-
onTitleChange={setFigTitle}
|
|
548
|
-
creating={figCreating}
|
|
549
|
-
onCreate={handleCreateFromFig}
|
|
550
510
|
onReset={() => {
|
|
551
511
|
setFigResult(null);
|
|
552
512
|
setFigError(null);
|
|
553
|
-
setFigTitle("");
|
|
554
513
|
}}
|
|
555
514
|
/>
|
|
556
515
|
)}
|
|
@@ -885,148 +844,57 @@ function TagList({
|
|
|
885
844
|
|
|
886
845
|
function FigImportPreview({
|
|
887
846
|
result,
|
|
888
|
-
title,
|
|
889
|
-
onTitleChange,
|
|
890
|
-
creating,
|
|
891
|
-
onCreate,
|
|
892
847
|
onReset,
|
|
893
848
|
}: {
|
|
894
849
|
result: FigImportResult;
|
|
895
|
-
title: string;
|
|
896
|
-
onTitleChange: (value: string) => void;
|
|
897
|
-
creating: boolean;
|
|
898
|
-
onCreate: () => void;
|
|
899
850
|
onReset: () => void;
|
|
900
851
|
}) {
|
|
901
852
|
const t = useT();
|
|
902
|
-
const { formatNumber } = useFormatters();
|
|
903
|
-
const colors = result.data.colors;
|
|
904
|
-
const colorEntries = (
|
|
905
|
-
[
|
|
906
|
-
[t("designSystemSetup.colorAccent"), "accent"],
|
|
907
|
-
[t("designSystemSetup.colorPrimary"), "primary"],
|
|
908
|
-
[t("designSystemSetup.colorSecondary"), "secondary"],
|
|
909
|
-
[t("designSystemSetup.colorBackground"), "background"],
|
|
910
|
-
[t("designSystemSetup.colorText"), "text"],
|
|
911
|
-
] as const
|
|
912
|
-
).filter(([, key]) => colors[key]);
|
|
913
|
-
const typography = result.data.typography;
|
|
914
|
-
const gradients = result.preview.gradients ?? [];
|
|
915
|
-
|
|
916
853
|
return (
|
|
917
854
|
<div className="space-y-4 rounded-lg border border-border bg-accent/40 p-4">
|
|
918
855
|
<div className="flex items-start gap-3">
|
|
919
|
-
|
|
920
|
-
<
|
|
921
|
-
|
|
922
|
-
alt={t("designSystemSetup.figmaThumbnailAlt")}
|
|
923
|
-
className="h-16 w-24 shrink-0 rounded-md border border-border object-cover"
|
|
924
|
-
/>
|
|
925
|
-
) : null}
|
|
856
|
+
<div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-[#609FF8]/10">
|
|
857
|
+
<IconBrandFigma className="h-5 w-5 text-[#609FF8]" />
|
|
858
|
+
</div>
|
|
926
859
|
<div className="min-w-0 flex-1 space-y-1.5">
|
|
927
|
-
<
|
|
928
|
-
{t("designSystemSetup.
|
|
929
|
-
</
|
|
930
|
-
<
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
placeholder={t("designSystemSetup.brandNamePlaceholder")}
|
|
935
|
-
/>
|
|
936
|
-
<p className="text-[11px] text-muted-foreground">
|
|
937
|
-
{t("designSystemSetup.figPreviewStats", {
|
|
938
|
-
nodes: t("designSystemSetup.nodeCount", {
|
|
939
|
-
count: result.preview.nodeCount,
|
|
940
|
-
formattedCount: formatNumber(result.preview.nodeCount),
|
|
941
|
-
}),
|
|
942
|
-
gradients: t("designSystemSetup.gradientCount", {
|
|
943
|
-
count: gradients.length,
|
|
944
|
-
formattedCount: formatNumber(gradients.length),
|
|
945
|
-
}),
|
|
946
|
-
images: t("designSystemSetup.imageCount", {
|
|
947
|
-
count: result.preview.imageCount,
|
|
948
|
-
formattedCount: formatNumber(result.preview.imageCount),
|
|
949
|
-
}),
|
|
860
|
+
<h4 className="text-sm font-medium text-foreground">
|
|
861
|
+
{t("designSystemSetup.builderIndexingStarted")}
|
|
862
|
+
</h4>
|
|
863
|
+
<p className="text-xs text-muted-foreground">
|
|
864
|
+
{t("designSystemSetup.builderIndexingDescription", {
|
|
865
|
+
title:
|
|
866
|
+
result.suggestedTitle || t("designSystemSetup.importedBrand"),
|
|
950
867
|
})}
|
|
951
868
|
</p>
|
|
952
869
|
</div>
|
|
953
870
|
</div>
|
|
954
871
|
|
|
955
|
-
|
|
956
|
-
<
|
|
957
|
-
{
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
</div>
|
|
970
|
-
))}
|
|
971
|
-
</div>
|
|
972
|
-
)}
|
|
973
|
-
|
|
974
|
-
{gradients.length > 0 && (
|
|
975
|
-
<div className="flex flex-wrap gap-2">
|
|
976
|
-
{gradients.slice(0, 4).map((gradient, index) => (
|
|
977
|
-
<div
|
|
978
|
-
key={index}
|
|
979
|
-
className="h-8 w-24 rounded-md border border-border"
|
|
980
|
-
style={{ backgroundImage: gradient }}
|
|
981
|
-
title={gradient}
|
|
982
|
-
/>
|
|
983
|
-
))}
|
|
984
|
-
</div>
|
|
985
|
-
)}
|
|
986
|
-
|
|
987
|
-
{(typography.headingFont || typography.bodyFont) && (
|
|
988
|
-
<div className="text-xs text-foreground/80">
|
|
989
|
-
{typography.headingFont && (
|
|
990
|
-
<span>
|
|
991
|
-
<span className="text-muted-foreground">
|
|
992
|
-
{t("designSystemSetup.headingsLabel")}
|
|
993
|
-
</span>{" "}
|
|
994
|
-
{typography.headingFont}
|
|
995
|
-
{typography.headingWeight ? ` ${typography.headingWeight}` : ""}
|
|
996
|
-
</span>
|
|
997
|
-
)}
|
|
998
|
-
{typography.bodyFont && (
|
|
999
|
-
<span className="ml-3">
|
|
1000
|
-
<span className="text-muted-foreground">
|
|
1001
|
-
{t("designSystemSetup.bodyLabel")}
|
|
1002
|
-
</span>{" "}
|
|
1003
|
-
{typography.bodyFont}
|
|
1004
|
-
</span>
|
|
1005
|
-
)}
|
|
1006
|
-
</div>
|
|
1007
|
-
)}
|
|
872
|
+
<dl className="grid grid-cols-[112px_minmax(0,1fr)] gap-x-3 gap-y-2 rounded-md border border-border bg-card/50 p-3 text-xs">
|
|
873
|
+
<dt className="text-muted-foreground">
|
|
874
|
+
{t("designSystemSetup.builderDesignSystemId")}
|
|
875
|
+
</dt>
|
|
876
|
+
<dd className="truncate font-mono text-foreground/80">
|
|
877
|
+
{result.designSystemId}
|
|
878
|
+
</dd>
|
|
879
|
+
<dt className="text-muted-foreground">
|
|
880
|
+
{t("designSystemSetup.builderJobId")}
|
|
881
|
+
</dt>
|
|
882
|
+
<dd className="truncate font-mono text-foreground/80">
|
|
883
|
+
{result.jobId}
|
|
884
|
+
</dd>
|
|
885
|
+
</dl>
|
|
1008
886
|
|
|
1009
887
|
<div className="flex flex-wrap items-center gap-2 border-t border-border pt-3">
|
|
1010
|
-
<Button
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
>
|
|
1016
|
-
{creating ? (
|
|
1017
|
-
<>
|
|
1018
|
-
<IconLoader2 className="w-3.5 h-3.5 animate-spin" />
|
|
1019
|
-
{t("designSystemSetup.creating")}
|
|
1020
|
-
</>
|
|
1021
|
-
) : (
|
|
1022
|
-
t("designSystemSetup.createDesignSystem")
|
|
1023
|
-
)}
|
|
888
|
+
<Button size="sm" asChild className="cursor-pointer">
|
|
889
|
+
<a href={result.builderUrl} target="_blank" rel="noreferrer">
|
|
890
|
+
<IconExternalLink className="w-3.5 h-3.5" />
|
|
891
|
+
{t("designSystemSetup.openInBuilder")}
|
|
892
|
+
</a>
|
|
1024
893
|
</Button>
|
|
1025
894
|
<Button
|
|
1026
895
|
size="sm"
|
|
1027
896
|
variant="ghost"
|
|
1028
897
|
onClick={onReset}
|
|
1029
|
-
disabled={creating}
|
|
1030
898
|
className="cursor-pointer"
|
|
1031
899
|
>
|
|
1032
900
|
{t("designSystemSetup.chooseAnotherFile")}
|
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
import type { DesignSystemData } from "../../../shared/api";
|
|
2
|
-
|
|
3
1
|
export interface FigImportResult {
|
|
4
2
|
ok: boolean;
|
|
3
|
+
source: "builder";
|
|
5
4
|
suggestedTitle: string;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
thumbnailDataUrl: string | null;
|
|
13
|
-
nodeCount: number;
|
|
14
|
-
imageCount: number;
|
|
15
|
-
};
|
|
5
|
+
projectId: string;
|
|
6
|
+
jobId: string;
|
|
7
|
+
designSystemId: string;
|
|
8
|
+
builderUrl: string;
|
|
9
|
+
status: "in-progress";
|
|
10
|
+
builderConnectUrl?: string;
|
|
16
11
|
}
|
|
17
12
|
|
|
18
13
|
export const MAX_FIG_UPLOAD_BYTES = 200 * 1024 * 1024;
|
|
@@ -51,7 +46,8 @@ export async function readFigImportResponse(
|
|
|
51
46
|
}
|
|
52
47
|
|
|
53
48
|
if (json && typeof json === "object" && "error" in json) {
|
|
54
|
-
const error = (json as { error?: unknown })
|
|
49
|
+
const error = (json as { error?: unknown; builderConnectUrl?: unknown })
|
|
50
|
+
.error;
|
|
55
51
|
throw new Error(
|
|
56
52
|
typeof error === "string"
|
|
57
53
|
? error
|
|
@@ -50,7 +50,7 @@ export function Sidebar({ collapsed, onToggleCollapsed }: SidebarProps) {
|
|
|
50
50
|
|
|
51
51
|
if (collapsed) {
|
|
52
52
|
return (
|
|
53
|
-
<aside className="flex h-full w-12 shrink-0 flex-col items-center gap-1 overflow-hidden border-e border-border bg-sidebar py-2 text-sidebar-foreground">
|
|
53
|
+
<aside className="flex h-full w-12 shrink-0 flex-col items-center gap-1 overflow-hidden border-e border-border bg-sidebar py-2 text-sidebar-foreground transition-[width] duration-200 ease-out">
|
|
54
54
|
{onToggleCollapsed && (
|
|
55
55
|
<Tooltip delayDuration={0}>
|
|
56
56
|
<TooltipTrigger asChild>
|
|
@@ -97,7 +97,7 @@ export function Sidebar({ collapsed, onToggleCollapsed }: SidebarProps) {
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
return (
|
|
100
|
-
<aside className="flex h-full w-56 min-w-0 shrink-0 flex-col overflow-hidden border-e border-border bg-sidebar text-sidebar-foreground">
|
|
100
|
+
<aside className="flex h-full w-56 min-w-0 shrink-0 flex-col overflow-hidden border-e border-border bg-sidebar text-sidebar-foreground transition-[width] duration-200 ease-out">
|
|
101
101
|
<div className="flex h-12 shrink-0 items-center justify-between border-b border-border px-4">
|
|
102
102
|
<div className="flex items-center gap-2">
|
|
103
103
|
<img
|
|
@@ -156,15 +156,15 @@ export function Sidebar({ collapsed, onToggleCollapsed }: SidebarProps) {
|
|
|
156
156
|
</nav>
|
|
157
157
|
|
|
158
158
|
<div className="mt-auto shrink-0">
|
|
159
|
-
<div className="
|
|
159
|
+
<div className="px-2 py-1">
|
|
160
160
|
<ExtensionsSidebarSection />
|
|
161
161
|
</div>
|
|
162
162
|
|
|
163
|
-
<div className="
|
|
163
|
+
<div className="px-3 py-2">
|
|
164
164
|
<OrgSwitcher />
|
|
165
165
|
</div>
|
|
166
166
|
|
|
167
|
-
<div className="
|
|
167
|
+
<div className="px-3 py-2">
|
|
168
168
|
<DevDatabaseLink />
|
|
169
169
|
<FeedbackButton />
|
|
170
170
|
</div>
|
|
@@ -1091,7 +1091,7 @@ export function DeckProvider({ children }: { children: ReactNode }) {
|
|
|
1091
1091
|
...updates,
|
|
1092
1092
|
};
|
|
1093
1093
|
void _slides;
|
|
1094
|
-
|
|
1094
|
+
_ca;
|
|
1095
1095
|
if (Object.keys(persistableUpdates).length > 0) {
|
|
1096
1096
|
enqueueDeckOp(id, {
|
|
1097
1097
|
op: "patch-deck-fields",
|