@agent-native/core 0.92.11 → 0.93.0
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 +45 -0
- package/corpus/core/docs/content/automation-connectors.mdx +80 -0
- package/corpus/core/docs/content/extensions.mdx +8 -0
- package/corpus/core/docs/content/locales/ar-SA/extensions.mdx +8 -0
- package/corpus/core/docs/content/locales/ar-SA/messaging.mdx +84 -15
- package/corpus/core/docs/content/locales/ar-SA/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/de-DE/extensions.mdx +10 -0
- package/corpus/core/docs/content/locales/de-DE/messaging.mdx +92 -15
- package/corpus/core/docs/content/locales/de-DE/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/de-DE/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/es-ES/extensions.mdx +10 -0
- package/corpus/core/docs/content/locales/es-ES/messaging.mdx +91 -15
- package/corpus/core/docs/content/locales/es-ES/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/es-ES/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/fr-FR/extensions.mdx +10 -0
- package/corpus/core/docs/content/locales/fr-FR/messaging.mdx +91 -15
- package/corpus/core/docs/content/locales/fr-FR/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/hi-IN/extensions.mdx +8 -0
- package/corpus/core/docs/content/locales/hi-IN/messaging.mdx +81 -15
- package/corpus/core/docs/content/locales/hi-IN/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/ja-JP/extensions.mdx +9 -0
- package/corpus/core/docs/content/locales/ja-JP/messaging.mdx +81 -15
- package/corpus/core/docs/content/locales/ja-JP/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/ko-KR/extensions.mdx +8 -0
- package/corpus/core/docs/content/locales/ko-KR/messaging.mdx +80 -15
- package/corpus/core/docs/content/locales/ko-KR/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/pt-BR/extensions.mdx +9 -0
- package/corpus/core/docs/content/locales/pt-BR/messaging.mdx +88 -15
- package/corpus/core/docs/content/locales/pt-BR/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/zh-CN/extensions.mdx +6 -0
- package/corpus/core/docs/content/locales/zh-CN/messaging.mdx +78 -15
- package/corpus/core/docs/content/locales/zh-CN/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +1 -0
- package/corpus/core/docs/content/locales/zh-TW/extensions.mdx +6 -0
- package/corpus/core/docs/content/locales/zh-TW/messaging.mdx +78 -15
- package/corpus/core/docs/content/locales/zh-TW/template-clips.mdx +1 -0
- package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +1 -0
- package/corpus/core/docs/content/messaging.mdx +227 -45
- package/corpus/core/docs/content/template-clips.mdx +3 -0
- package/corpus/core/docs/content/template-design.mdx +4 -0
- package/corpus/core/package.json +5 -1
- package/corpus/core/src/a2a/artifact-response.ts +131 -2
- package/corpus/core/src/a2a/client.ts +10 -0
- package/corpus/core/src/a2a/handlers.ts +40 -76
- package/corpus/core/src/a2a/types.ts +2 -0
- package/corpus/core/src/agent/durable-background.ts +24 -0
- package/corpus/core/src/agent/production-agent.ts +48 -5
- package/corpus/core/src/agent/run-manager.ts +171 -20
- package/corpus/core/src/agent/run-store.ts +297 -42
- package/corpus/core/src/agent/types.ts +23 -0
- package/corpus/core/src/audit/record.ts +31 -0
- package/corpus/core/src/audit/store.ts +69 -3
- package/corpus/core/src/audit/types.ts +13 -0
- package/corpus/core/src/automation/index.ts +802 -0
- package/corpus/core/src/cli/create.ts +12 -5
- package/corpus/core/src/cli/design-connect.ts +596 -36
- package/corpus/core/src/client/AgentPanel.tsx +51 -6
- package/corpus/core/src/client/AssistantChat.tsx +274 -147
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +3 -0
- package/corpus/core/src/client/RunStuckBanner.tsx +69 -20
- package/corpus/core/src/client/agent-chat-adapter.ts +110 -17
- package/corpus/core/src/client/automation.ts +22 -0
- package/corpus/core/src/client/chat/run-recovery.tsx +67 -50
- package/corpus/core/src/client/composer/TiptapComposer.tsx +8 -0
- package/corpus/core/src/client/index.ts +30 -0
- package/corpus/core/src/client/integrations/api.ts +295 -0
- package/corpus/core/src/client/integrations/index.ts +26 -0
- package/corpus/core/src/client/transcription/use-live-transcription.ts +68 -5
- package/corpus/core/src/client/use-run-stuck-detection.ts +41 -3
- package/corpus/core/src/deploy/build.ts +59 -3
- package/corpus/core/src/deploy/workspace-deploy.ts +37 -2
- package/corpus/core/src/file-upload/types.ts +2 -0
- package/corpus/core/src/index.ts +37 -0
- package/corpus/core/src/integrations/a2a-continuations-store.ts +6 -4
- package/corpus/core/src/integrations/adapters/discord.ts +362 -0
- package/corpus/core/src/integrations/adapters/index.ts +29 -0
- package/corpus/core/src/integrations/adapters/microsoft-teams.ts +411 -0
- package/corpus/core/src/integrations/adapters/slack.ts +861 -27
- package/corpus/core/src/integrations/adapters/telegram.ts +54 -15
- package/corpus/core/src/integrations/adapters/whatsapp.ts +41 -17
- package/corpus/core/src/integrations/catalog.ts +571 -0
- package/corpus/core/src/integrations/controls-store.ts +187 -0
- package/corpus/core/src/integrations/index.ts +100 -0
- package/corpus/core/src/integrations/installations-store.ts +677 -0
- package/corpus/core/src/integrations/integration-memory.ts +187 -0
- package/corpus/core/src/integrations/pending-tasks-retry-job.ts +6 -6
- package/corpus/core/src/integrations/pending-tasks-store.ts +83 -5
- package/corpus/core/src/integrations/plugin.ts +685 -47
- package/corpus/core/src/integrations/scope-store.ts +498 -0
- package/corpus/core/src/integrations/slack-manifest.ts +78 -0
- package/corpus/core/src/integrations/slack-oauth.ts +343 -0
- package/corpus/core/src/integrations/types.ts +179 -0
- package/corpus/core/src/integrations/usage-budget-store.ts +906 -0
- package/corpus/core/src/integrations/webhook-handler.ts +562 -51
- package/corpus/core/src/jobs/scheduler.ts +100 -2
- package/corpus/core/src/jobs/tools.ts +45 -9
- package/corpus/core/src/provider-api/index.ts +72 -1
- package/corpus/core/src/resources/handlers.ts +88 -14
- package/corpus/core/src/resources/script-helpers.ts +36 -7
- package/corpus/core/src/resources/store.ts +59 -52
- package/corpus/core/src/scripts/call-agent.ts +107 -1
- package/corpus/core/src/server/agent-chat-plugin.ts +294 -119
- package/corpus/core/src/server/auth.ts +10 -14
- package/corpus/core/src/server/builder-design-systems.ts +16 -1
- package/corpus/core/src/server/edge.ts +18 -0
- package/corpus/core/src/server/index.ts +26 -0
- package/corpus/core/src/server/request-context.ts +18 -0
- package/corpus/core/src/server/social-og-image.ts +3 -2
- package/corpus/core/src/styles/agent-native.css +62 -44
- package/corpus/core/src/templates/default/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/core/src/templates/default/AGENTS.md +7 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +1 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/core/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +6 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +25 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +15 -0
- package/corpus/core/src/templates/workspace-core/AGENTS.md +3 -2
- package/corpus/core/src/usage/store.ts +37 -2
- package/corpus/templates/analytics/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/analytics/.agents/skills/provider-api/SKILL.md +23 -0
- package/corpus/templates/analytics/.builder/skills/provider-api/SKILL.md +15 -0
- package/corpus/templates/analytics/actions/save-monitor.ts +25 -2
- package/corpus/templates/analytics/app/lib/data-sources.ts +28 -0
- package/corpus/templates/analytics/changelog/2026-07-10-agent-created-uptime-monitors-now-return-a-direct-link-to-th.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-10-dashboard-email-reports-still-arrive-when-screenshot-capture-temporarily-fails.md +6 -0
- package/corpus/templates/analytics/server/jobs/dashboard-report.ts +3 -7
- package/corpus/templates/analytics/server/lib/credential-keys.ts +12 -0
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +5 -1
- package/corpus/templates/analytics/server/lib/provider-credentials.ts +2 -0
- package/corpus/templates/analytics/server/routes/api/test-connection.post.ts +16 -0
- package/corpus/templates/assets/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/brain/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/calendar/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/calendar/app/components/calendar/CommandPalette.tsx +98 -108
- package/corpus/templates/calendar/app/components/calendar/EventAttendeesSection.tsx +97 -90
- package/corpus/templates/calendar/changelog/2026-07-10-event-guest-details-and-option-menus-now-use-valid-accessibl.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-10-natural-language-event-phrases-stay-available-as-quick-creat.md +6 -0
- package/corpus/templates/chat/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/chat/changelog/2026-07-10-chat-now-makes-ai-connection-setup-clear-without-shifting-th.md +6 -0
- package/corpus/templates/clips/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/clips/.agents/skills/recording/SKILL.md +17 -1
- package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +8 -0
- package/corpus/templates/clips/AGENTS.md +8 -3
- package/corpus/templates/clips/actions/finalize-recording.ts +63 -23
- package/corpus/templates/clips/actions/get-recording-player-data.ts +6 -2
- package/corpus/templates/clips/actions/lib/ensure-seekable-video.ts +72 -9
- package/corpus/templates/clips/actions/list-recordings.ts +19 -3
- package/corpus/templates/clips/actions/navigate.ts +2 -0
- package/corpus/templates/clips/actions/reprocess-recording.ts +20 -6
- package/corpus/templates/clips/actions/request-transcript.ts +16 -31
- package/corpus/templates/clips/actions/view-screen.ts +57 -5
- package/corpus/templates/clips/app/components/layout/Header.tsx +1 -0
- package/corpus/templates/clips/app/components/library/empty-state.tsx +2 -0
- package/corpus/templates/clips/app/components/library/library-grid.tsx +69 -42
- package/corpus/templates/clips/app/components/library/library-layout.tsx +15 -1
- package/corpus/templates/clips/app/components/library/recording-card.tsx +81 -68
- package/corpus/templates/clips/app/components/library/search-bar.tsx +4 -3
- package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +9 -3
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +1 -1
- package/corpus/templates/clips/app/components/player/transcript-panel.tsx +27 -5
- package/corpus/templates/clips/app/hooks/use-library.ts +1 -1
- package/corpus/templates/clips/app/hooks/use-navigation-state.ts +10 -2
- package/corpus/templates/clips/app/hooks/use-player-shortcuts.ts +1 -0
- package/corpus/templates/clips/app/i18n/ar-SA.ts +7 -1
- package/corpus/templates/clips/app/i18n/de-DE.ts +7 -1
- package/corpus/templates/clips/app/i18n/en-US.ts +7 -1
- package/corpus/templates/clips/app/i18n/es-ES.ts +7 -1
- package/corpus/templates/clips/app/i18n/fr-FR.ts +7 -1
- package/corpus/templates/clips/app/i18n/hi-IN.ts +7 -1
- package/corpus/templates/clips/app/i18n/ja-JP.ts +7 -1
- package/corpus/templates/clips/app/i18n/ko-KR.ts +7 -1
- package/corpus/templates/clips/app/i18n/pt-BR.ts +7 -1
- package/corpus/templates/clips/app/i18n/zh-CN.ts +8 -1
- package/corpus/templates/clips/app/i18n/zh-TW.ts +8 -1
- package/corpus/templates/clips/app/lib/recording-visibility.ts +70 -0
- package/corpus/templates/clips/app/routes/_app.shared.tsx +20 -0
- package/corpus/templates/clips/app/routes/download.tsx +24 -8
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +115 -2
- package/corpus/templates/clips/app/routes/record.tsx +62 -0
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +25 -16
- package/corpus/templates/clips/changelog/2026-07-10-clips-desktop-is-now-available-for-linux-with-appimage-debia.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-clips-downloads-updates-sooner-in-the-background-and-offers-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-clips-shared-with-you-now-appear-in-a-searchable-shared-with.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-clips-with-missing-mobile-video-frames-can-be-repaired-witho.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-fixed-copying-agent-responses-and-transcript-text-from-recor.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-mobile-camera-recordings-pause-while-backgrounded.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-mp4-downloads-now-show-progress-immediately-after-the-option.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-recording-pages-now-open-as-soon-as-you-stop-with-a-share-li.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-recordings-now-seek-smoothly-downloads-use-the-correct-file-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-10-s3-compatible-storage-now-saves-hosted-recordings-without-re.md +6 -0
- package/corpus/templates/clips/desktop/README.md +22 -6
- package/corpus/templates/clips/desktop/package.json +1 -1
- package/corpus/templates/clips/desktop/src/app.tsx +32 -19
- package/corpus/templates/clips/desktop/src/components/ReadinessPanel.tsx +15 -9
- package/corpus/templates/clips/desktop/src/lib/finalization-guard.ts +22 -0
- package/corpus/templates/clips/desktop/src/lib/permissions.ts +3 -1
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +97 -120
- package/corpus/templates/clips/desktop/src/lib/updater.ts +26 -4
- package/corpus/templates/clips/desktop/src/overlays/finalizing.tsx +4 -8
- package/corpus/templates/clips/desktop/src-tauri/Cargo.toml +1 -1
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +2 -2
- package/corpus/templates/clips/desktop/src-tauri/src/permission_status.rs +11 -7
- package/corpus/templates/clips/desktop/src-tauri/tauri.linux.conf.json +11 -0
- package/corpus/templates/clips/netlify.toml +3 -0
- package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +106 -0
- package/corpus/templates/clips/server/lib/public-agent-context.ts +9 -1
- package/corpus/templates/clips/server/lib/resumable-upload-provider.ts +52 -0
- package/corpus/templates/clips/server/lib/s3-upload-provider.ts +433 -85
- package/corpus/templates/clips/server/lib/video-remux.ts +114 -0
- package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +109 -0
- package/corpus/templates/clips/server/routes/api/clips-updater.json.get.ts +22 -11
- package/corpus/templates/clips/server/routes/api/public-recording.get.ts +4 -2
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +47 -5
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +10 -2
- package/corpus/templates/clips/shared/share-loader-response.ts +12 -0
- package/corpus/templates/clips/shared/transcript-status.ts +40 -0
- package/corpus/templates/content/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/content/.agents/skills/content/SKILL.md +57 -5
- package/corpus/templates/content/AGENTS.md +65 -55
- package/corpus/templates/content/actions/_builder-cms-read-client.ts +92 -23
- package/corpus/templates/content/actions/_database-source-utils.ts +207 -41
- package/corpus/templates/content/actions/_property-utils.ts +30 -2
- package/corpus/templates/content/actions/add-content-database-source-field-property.ts +316 -121
- package/corpus/templates/content/actions/attach-content-database-source.ts +41 -17
- package/corpus/templates/content/actions/change-content-database-source-role.ts +46 -8
- package/corpus/templates/content/actions/submit-content-database-form.ts +497 -0
- package/corpus/templates/content/actions/suggest-source-join-key.ts +8 -1
- package/corpus/templates/content/actions/update-content-database-view.ts +8 -1
- package/corpus/templates/content/actions/view-screen.ts +4 -1
- package/corpus/templates/content/agent-native.app-skill.json +1 -1
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +250 -64
- package/corpus/templates/content/app/components/editor/database/FormView.tsx +460 -0
- package/corpus/templates/content/app/components/editor/database/navigation-state.ts +3 -0
- package/corpus/templates/content/app/components/editor/database/settings.tsx +30 -37
- package/corpus/templates/content/app/components/editor/database/shared.tsx +2 -0
- package/corpus/templates/content/app/components/editor/database/view-config.ts +29 -1
- package/corpus/templates/content/app/components/ui/textarea.tsx +1 -0
- package/corpus/templates/content/app/hooks/use-content-database.ts +22 -0
- package/corpus/templates/content/app/i18n/zh-TW.ts +21 -0
- package/corpus/templates/content/app/i18n-data.ts +225 -0
- package/corpus/templates/content/changelog/2026-07-09-builder-source-refreshes-now-keep-mapped-fields-such-as-topi.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-builder-backed-properties-now-load-current-source-values-as-.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-builder-database-refreshes-now-stay-explicit-and-accurate.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-database-form-views-now-collect-ordered-required-answers-and.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-database-tables-now-use-a-quieter-more-compact-layout-with-c.md +6 -0
- package/corpus/templates/content/changelog/2026-07-10-slack-intake-routes-to-content-database-forms.md +6 -0
- package/corpus/templates/content/parity/matrix.md +1 -0
- package/corpus/templates/content/parity/matrix.ts +18 -0
- package/corpus/templates/content/shared/api.ts +28 -1
- package/corpus/templates/content/shared/database-form.ts +53 -0
- package/corpus/templates/design/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +26 -0
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +85 -12
- package/corpus/templates/design/AGENTS.md +72 -18
- package/corpus/templates/design/DESIGN.md +1 -1
- package/corpus/templates/design/DEVELOPING.md +1 -1
- package/corpus/templates/design/FIGMA_INTEROPERABILITY.md +116 -0
- package/corpus/templates/design/actions/create-design-from-template.ts +220 -0
- package/corpus/templates/design/actions/create-design-system.ts +92 -16
- package/corpus/templates/design/actions/delete-design-template.ts +28 -0
- package/corpus/templates/design/actions/delete-file.ts +7 -0
- package/corpus/templates/design/actions/edit-design.ts +3 -0
- package/corpus/templates/design/actions/export-design-as-figma-svg.ts +137 -5
- package/corpus/templates/design/actions/export-pdf.ts +1 -1
- package/corpus/templates/design/actions/generate-design.ts +3 -0
- package/corpus/templates/design/actions/get-design-snapshot.ts +9 -0
- package/corpus/templates/design/actions/get-figma-connection-status.ts +26 -0
- package/corpus/templates/design/actions/get-figma-design-context.ts +138 -0
- package/corpus/templates/design/actions/get-figma-styles.ts +2 -2
- package/corpus/templates/design/actions/import-figma-clipboard.ts +112 -16
- package/corpus/templates/design/actions/import-figma-frame.ts +15 -4
- package/corpus/templates/design/actions/index-design-system-with-builder.ts +4 -0
- package/corpus/templates/design/actions/list-design-templates.ts +118 -0
- package/corpus/templates/design/actions/navigate.ts +16 -2
- package/corpus/templates/design/actions/provider-api-request.ts +11 -1
- package/corpus/templates/design/actions/save-design-as-template.ts +156 -0
- package/corpus/templates/design/actions/set-active-breakpoint.ts +13 -4
- package/corpus/templates/design/actions/take-design-screenshot.ts +73 -3
- package/corpus/templates/design/actions/update-file.ts +39 -22
- package/corpus/templates/design/actions/view-screen.ts +36 -1
- package/corpus/templates/design/actions/write-local-file.ts +50 -38
- package/corpus/templates/design/app/components/design/AutoLayoutSuggestionDialog.tsx +151 -0
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +20 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +251 -22
- package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +3 -3
- package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +384 -9
- package/corpus/templates/design/app/components/design/EditPanel.tsx +105 -32
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +58 -28
- package/corpus/templates/design/app/components/design/TweaksPanel.tsx +6 -0
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +539 -53
- package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +40 -0
- package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbench.tsx +1 -0
- package/corpus/templates/design/app/components/design/code-workbench/explorer/ExplorerView.tsx +1 -0
- package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +5 -1
- package/corpus/templates/design/app/components/design/code-workbench/workspace/create-providers.ts +2 -0
- package/corpus/templates/design/app/components/design/code-workbench/workspace/localhost-provider.ts +3 -1
- package/corpus/templates/design/app/components/design/code-workbench/workspace/types.ts +2 -0
- package/corpus/templates/design/app/components/design/edit-panel/element-identity.ts +19 -0
- package/corpus/templates/design/app/components/design/edit-panel/frame-presets-panel.tsx +1 -0
- package/corpus/templates/design/app/components/design/edit-panel/interaction-state-helpers.ts +27 -0
- package/corpus/templates/design/app/components/design/inspector/InteractionStatePanel.tsx +137 -81
- package/corpus/templates/design/app/components/design/inspector/frame-size-presets.ts +25 -5
- package/corpus/templates/design/app/components/design/multi-screen/chrome-transitions.ts +1 -1
- package/corpus/templates/design/app/components/design/multi-screen/frame-geometry.ts +220 -3
- package/corpus/templates/design/app/components/design/multi-screen/overview-layout.ts +13 -0
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +22 -1
- package/corpus/templates/design/app/components/design/types.ts +4 -0
- package/corpus/templates/design/app/components/design-system/ProductionDesignSystemShowcase.tsx +208 -0
- package/corpus/templates/design/app/components/editor/FigmaLinkComposerBubble.tsx +321 -0
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +24 -4
- package/corpus/templates/design/app/components/layout/Layout.tsx +16 -2
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +2 -0
- package/corpus/templates/design/app/components/templates/TemplatePreview.tsx +72 -0
- package/corpus/templates/design/app/global.css +2 -35
- package/corpus/templates/design/app/hooks/use-navigation-state.ts +10 -0
- package/corpus/templates/design/app/i18n/zh-TW.ts +127 -5
- package/corpus/templates/design/app/i18n-breakpoints.ts +209 -0
- package/corpus/templates/design/app/i18n-data.ts +1317 -59
- package/corpus/templates/design/app/i18n-template-feature.ts +458 -0
- package/corpus/templates/design/app/lib/design-clipboard.ts +202 -0
- package/corpus/templates/design/app/lib/design-file-upload.ts +87 -0
- package/corpus/templates/design/app/lib/design-import.ts +168 -11
- package/corpus/templates/design/app/lib/desktop-design-preview.ts +423 -0
- package/corpus/templates/design/app/lib/figma-clipboard.ts +74 -8
- package/corpus/templates/design/app/lib/figma-connection.ts +161 -0
- package/corpus/templates/design/app/lib/figma-svg-copy.ts +814 -22
- package/corpus/templates/design/app/lib/figma-url.ts +77 -0
- package/corpus/templates/design/app/lib/pending-generation.ts +35 -0
- package/corpus/templates/design/app/pages/DesignSystems.tsx +236 -177
- package/corpus/templates/design/app/pages/Index.tsx +38 -0
- package/corpus/templates/design/app/pages/Templates.tsx +498 -0
- package/corpus/templates/design/app/pages/design-editor/auto-layout-suggestion.ts +328 -0
- package/corpus/templates/design/app/pages/design-editor/clone-idrefs.ts +113 -0
- package/corpus/templates/design/app/pages/design-editor/created-screen-navigation.ts +55 -0
- package/corpus/templates/design/app/pages/design-editor/editor-session.ts +32 -0
- package/corpus/templates/design/app/pages/design-editor/editor-state.ts +49 -2
- package/corpus/templates/design/app/pages/design-editor/export-capture.ts +296 -0
- package/corpus/templates/design/app/pages/design-editor/history.ts +101 -2
- package/corpus/templates/design/app/pages/design-editor/layout-operations.ts +28 -1
- package/corpus/templates/design/app/pages/design-editor/overview-camera.ts +34 -0
- package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +202 -6
- package/corpus/templates/design/app/pages/design-editor/pending-structure-verification.ts +92 -0
- package/corpus/templates/design/app/pages/design-editor/save-failure.ts +58 -0
- package/corpus/templates/design/app/routes/templates.tsx +4 -6
- package/corpus/templates/design/changelog/2026-07-10-app-workspaces-now-use-clean-borderless-main-surfaces-throug.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-ask-chat-what-s-in-a-figma-file-or-frame-structure-screensho.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-canvas-edits-now-reject-malformed-html-before-it-can-corrupt.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-complex-designs-now-export-as-valid-secure-svgs-and-crisp-ra.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-complex-figma-masks-arcs-rich-text-transformed-images-and-ad.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-copied-layers-paste-across-designs-and-browser-tabs.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-copy-and-download-editable-figma-svg.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-copying-design-text-now-pastes-readable-text-into-other-apps.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-deleted-screens-can-be-restored-with-undo-and-removed-again-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-design-changes-now-save-before-switching-apps-and-retry-when.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-design-stays-usable-on-phones-by-keeping-editor-panels-and-f.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-download-all-screens-as-one-multi-page-pdf-from-the-overview.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-duplicated-layers-now-keep-labels-aria-relationships-fragmen.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fig-import-results-stay-compact.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-figma-imports-now-load-real-fonts-fix-rotated-gradient-dashe.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-figma-links-in-chat-and-the-import-tab-now-offer-secure-one-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-cmd-z-not-restoring-content-after-an-agent-driven-desi.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-download-pdf-being-unreachable-from-the-export-panel-e.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-dragging-a-layer-out-of-an-auto-layout-row-column-no-l.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-figma-svg-export-text-wrapping-sizing-and-inner-layer.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-hiding-or-locking-one-layer-no-longer-hides-or-blocks-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-png-screenshots-of-tall-screens-being-cropped-to-one-v.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-fixed-png-svg-exports-capturing-broken-layout-when-webfonts-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-frame-tool-now-offers-standard-ad-unit-size-presets-medium-r.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-full-view-controls-stay-within-their-frame-instead-of-coveri.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-hover-focus-focus-visible-pressed-and-disabled-states-now-pr.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-layer-drops-now-land-in-the-intended-grid-row-stay-visually-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-local-code-workspaces-now-keep-unsaved-edits-across-panel-sw.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-local-visual-editing-now-keeps-authenticated-sessions-shared.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-long-running-agent-work-no-longer-shows-a-premature-stuck-wa.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-managed-figma-connections-are-recognized-automatically.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-new-designs-can-open-directly-in-the-editor-without-a-pr.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-new-screens-are-selected-and-revealed-immediately.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-new-text-layers-undo-as-one-safe-creation.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-preview-and-apply-inferred-auto-layout-without-changing-yo.md +5 -0
- package/corpus/templates/design/changelog/2026-07-10-print-pdf-exports-and-paper-size-presets-letter-a4-now-match.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-responsive-frame-editing.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-reusable-design-templates.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-screen-overview-frames-now-use-a-clearer-interact-action-wit.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-start-designs-from-source-linked-material-3-carbon-or-primer.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-tweaks-guidance.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-uploaded-fig-files-can-now-become-editable-design-screens-wi.md +6 -0
- package/corpus/templates/design/e2e/helpers.ts +3 -3
- package/corpus/templates/design/package.json +2 -0
- package/corpus/templates/design/scripts/qa-figma-stress-import.ts +96 -0
- package/corpus/templates/design/server/db/index.ts +10 -0
- package/corpus/templates/design/server/db/schema.ts +44 -0
- package/corpus/templates/design/server/handlers/import-design-file.ts +114 -80
- package/corpus/templates/design/server/handlers/index-design-system-with-builder.ts +19 -6
- package/corpus/templates/design/server/lib/design-export.ts +240 -3
- package/corpus/templates/design/server/lib/design-template-data.ts +89 -0
- package/corpus/templates/design/server/lib/design-to-figma-svg.ts +250 -26
- package/corpus/templates/design/server/lib/fig-file-decoder.ts +839 -0
- package/corpus/templates/design/server/lib/fig-file-import.ts +287 -0
- package/corpus/templates/design/server/lib/fig-file-limits.ts +3 -0
- package/corpus/templates/design/server/lib/fig-file-to-html.ts +2568 -0
- package/corpus/templates/design/server/lib/figma-design-context.ts +359 -0
- package/corpus/templates/design/server/lib/figma-node-import.ts +478 -22
- package/corpus/templates/design/server/lib/figma-node-to-html.ts +554 -29
- package/corpus/templates/design/server/lib/local-figma-qa-upload.ts +112 -0
- package/corpus/templates/design/server/lib/verify-write-grant.ts +16 -2
- package/corpus/templates/design/server/lib/visible-clipboard-html.ts +13 -3
- package/corpus/templates/design/server/plugins/agent-chat.ts +7 -0
- package/corpus/templates/design/server/plugins/db.ts +42 -0
- package/corpus/templates/design/server/plugins/local-figma-qa-upload.ts +7 -0
- package/corpus/templates/design/server/register-secrets.ts +8 -8
- package/corpus/templates/design/server/routes/api/qa-figma-import-assets/[assetId].get.ts +46 -0
- package/corpus/templates/design/server/source-workspace.ts +104 -12
- package/corpus/templates/design/shared/code-layer.ts +105 -28
- package/corpus/templates/design/shared/design-system-templates.ts +301 -0
- package/corpus/templates/design/shared/design-template-presets.ts +195 -0
- package/corpus/templates/design/shared/figma-url.ts +8 -0
- package/corpus/templates/design/shared/html-integrity.ts +306 -0
- package/corpus/templates/design/shared/interaction-states.ts +318 -23
- package/corpus/templates/design/shared/locked-layers.ts +151 -0
- package/corpus/templates/dispatch/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/dispatch/app/i18n/zh-TW.ts +48 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +536 -1
- package/corpus/templates/dispatch/changelog/2026-07-10-connect-slack-workspaces-with-oauth-and-manage-channel-ident.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-10-microsoft-teams-bots-and-discord-slash-commands-can-now-conn.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-10-slack-and-telegram-now-route-uptime-monitor-requests-to-anal.md +6 -0
- package/corpus/templates/forms/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/forms/.agents/skills/form-publishing/SKILL.md +7 -0
- package/corpus/templates/forms/AGENTS.md +4 -0
- package/corpus/templates/forms/actions/create-form.ts +44 -7
- package/corpus/templates/forms/actions/lib/assert-publishable-form.ts +38 -0
- package/corpus/templates/forms/actions/patch-form-fields.ts +4 -0
- package/corpus/templates/forms/actions/update-form.ts +2 -36
- package/corpus/templates/forms/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/forms/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/forms/app/i18n/en-US.ts +3 -0
- package/corpus/templates/forms/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/forms/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/forms/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/forms/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/forms/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/forms/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/forms/app/i18n/zh-CN.ts +2 -0
- package/corpus/templates/forms/app/i18n/zh-TW.ts +3 -0
- package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +17 -0
- package/corpus/templates/forms/changelog/2026-07-10-agent-created-published-forms-now-return-the-anonymous-publi.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-10-published-forms-can-no-longer-be-edited-into-an-unusable-emp.md +6 -0
- package/corpus/templates/forms/server/handlers/submissions.ts +4 -3
- package/corpus/templates/forms/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/forms/shared/types.ts +5 -0
- package/corpus/templates/mail/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +2 -2
- package/corpus/templates/mail/changelog/2026-07-10-mail-navigation-now-uses-a-clean-borderless-drawer.md +6 -0
- package/corpus/templates/plan/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/corpus/templates/plan/app/lib/plan-local-bridge.ts +4 -1
- package/corpus/templates/plan/changelog/2026-07-10-local-plans-now-keep-valid-content-visible-when-one-generate.md +6 -0
- package/corpus/templates/plan/server/lib/local-plan-files.ts +4 -1
- package/corpus/templates/slides/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/dist/a2a/artifact-response.d.ts.map +1 -1
- package/dist/a2a/artifact-response.js +88 -2
- package/dist/a2a/artifact-response.js.map +1 -1
- package/dist/a2a/client.d.ts +9 -0
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +1 -0
- package/dist/a2a/client.js.map +1 -1
- package/dist/a2a/handlers.d.ts.map +1 -1
- package/dist/a2a/handlers.js +24 -69
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/a2a/types.d.ts +2 -0
- package/dist/a2a/types.d.ts.map +1 -1
- package/dist/a2a/types.js.map +1 -1
- package/dist/agent/durable-background.d.ts +11 -0
- package/dist/agent/durable-background.d.ts.map +1 -1
- package/dist/agent/durable-background.js +17 -0
- package/dist/agent/durable-background.js.map +1 -1
- package/dist/agent/production-agent.d.ts +5 -3
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +34 -8
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts +44 -2
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +124 -18
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +109 -0
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +274 -37
- package/dist/agent/run-store.js.map +1 -1
- package/dist/agent/types.d.ts +22 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/audit/record.d.ts.map +1 -1
- package/dist/audit/record.js +29 -0
- package/dist/audit/record.js.map +1 -1
- package/dist/audit/store.d.ts.map +1 -1
- package/dist/audit/store.js +62 -3
- package/dist/audit/store.js.map +1 -1
- package/dist/audit/types.d.ts +13 -0
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/audit/types.js.map +1 -1
- package/dist/automation/index.d.ts +193 -0
- package/dist/automation/index.d.ts.map +1 -0
- package/dist/automation/index.js +464 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +10 -3
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/design-connect.d.ts.map +1 -1
- package/dist/cli/design-connect.js +492 -35
- package/dist/cli/design-connect.js.map +1 -1
- package/dist/client/AgentPanel.d.ts +7 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +32 -8
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +15 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +115 -47
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +1 -1
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/RunStuckBanner.d.ts +14 -1
- package/dist/client/RunStuckBanner.d.ts.map +1 -1
- package/dist/client/RunStuckBanner.js +35 -7
- package/dist/client/RunStuckBanner.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts +4 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +97 -16
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/automation.d.ts +14 -0
- package/dist/client/automation.d.ts.map +1 -0
- package/dist/client/automation.js +9 -0
- package/dist/client/automation.js.map +1 -0
- package/dist/client/chat/run-recovery.d.ts +4 -0
- package/dist/client/chat/run-recovery.d.ts.map +1 -1
- package/dist/client/chat/run-recovery.js +12 -10
- package/dist/client/chat/run-recovery.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +8 -0
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/integrations/api.d.ts +115 -0
- package/dist/client/integrations/api.d.ts.map +1 -0
- package/dist/client/integrations/api.js +123 -0
- package/dist/client/integrations/api.js.map +1 -0
- package/dist/client/integrations/index.d.ts +1 -0
- package/dist/client/integrations/index.d.ts.map +1 -1
- package/dist/client/integrations/index.js +1 -0
- package/dist/client/integrations/index.js.map +1 -1
- package/dist/client/transcription/use-live-transcription.d.ts.map +1 -1
- package/dist/client/transcription/use-live-transcription.js +59 -5
- package/dist/client/transcription/use-live-transcription.js.map +1 -1
- package/dist/client/use-run-stuck-detection.d.ts +16 -1
- package/dist/client/use-run-stuck-detection.d.ts.map +1 -1
- package/dist/client/use-run-stuck-detection.js +23 -4
- package/dist/client/use-run-stuck-detection.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +49 -4
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/workspace-deploy.d.ts.map +1 -1
- package/dist/deploy/workspace-deploy.js +31 -2
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/dist/file-upload/types.d.ts +2 -0
- package/dist/file-upload/types.d.ts.map +1 -1
- package/dist/file-upload/types.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/a2a-continuations-store.d.ts.map +1 -1
- package/dist/integrations/a2a-continuations-store.js +6 -4
- package/dist/integrations/a2a-continuations-store.js.map +1 -1
- package/dist/integrations/adapters/discord.d.ts +3 -0
- package/dist/integrations/adapters/discord.d.ts.map +1 -0
- package/dist/integrations/adapters/discord.js +261 -0
- package/dist/integrations/adapters/discord.js.map +1 -0
- package/dist/integrations/adapters/index.d.ts +4 -0
- package/dist/integrations/adapters/index.d.ts.map +1 -0
- package/dist/integrations/adapters/index.js +26 -0
- package/dist/integrations/adapters/index.js.map +1 -0
- package/dist/integrations/adapters/microsoft-teams.d.ts +5 -0
- package/dist/integrations/adapters/microsoft-teams.d.ts.map +1 -0
- package/dist/integrations/adapters/microsoft-teams.js +295 -0
- package/dist/integrations/adapters/microsoft-teams.js.map +1 -0
- package/dist/integrations/adapters/slack.d.ts +8 -2
- package/dist/integrations/adapters/slack.d.ts.map +1 -1
- package/dist/integrations/adapters/slack.js +736 -27
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/adapters/telegram.d.ts +0 -2
- package/dist/integrations/adapters/telegram.d.ts.map +1 -1
- package/dist/integrations/adapters/telegram.js +49 -15
- package/dist/integrations/adapters/telegram.js.map +1 -1
- package/dist/integrations/adapters/whatsapp.d.ts +0 -2
- package/dist/integrations/adapters/whatsapp.d.ts.map +1 -1
- package/dist/integrations/adapters/whatsapp.js +40 -17
- package/dist/integrations/adapters/whatsapp.js.map +1 -1
- package/dist/integrations/catalog.d.ts +75 -0
- package/dist/integrations/catalog.d.ts.map +1 -0
- package/dist/integrations/catalog.js +451 -0
- package/dist/integrations/catalog.js.map +1 -0
- package/dist/integrations/controls-store.d.ts +44 -0
- package/dist/integrations/controls-store.d.ts.map +1 -0
- package/dist/integrations/controls-store.js +129 -0
- package/dist/integrations/controls-store.js.map +1 -0
- package/dist/integrations/index.d.ts +13 -1
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +9 -0
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/installations-store.d.ts +112 -0
- package/dist/integrations/installations-store.d.ts.map +1 -0
- package/dist/integrations/installations-store.js +493 -0
- package/dist/integrations/installations-store.js.map +1 -0
- package/dist/integrations/integration-memory.d.ts +24 -0
- package/dist/integrations/integration-memory.d.ts.map +1 -0
- package/dist/integrations/integration-memory.js +136 -0
- package/dist/integrations/integration-memory.js.map +1 -0
- package/dist/integrations/pending-tasks-retry-job.d.ts.map +1 -1
- package/dist/integrations/pending-tasks-retry-job.js +6 -5
- package/dist/integrations/pending-tasks-retry-job.js.map +1 -1
- package/dist/integrations/pending-tasks-store.d.ts +17 -0
- package/dist/integrations/pending-tasks-store.d.ts.map +1 -1
- package/dist/integrations/pending-tasks-store.js +71 -5
- package/dist/integrations/pending-tasks-store.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +520 -35
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/scope-store.d.ts +65 -0
- package/dist/integrations/scope-store.d.ts.map +1 -0
- package/dist/integrations/scope-store.js +361 -0
- package/dist/integrations/scope-store.js.map +1 -0
- package/dist/integrations/slack-manifest.d.ts +66 -0
- package/dist/integrations/slack-manifest.d.ts.map +1 -0
- package/dist/integrations/slack-manifest.js +70 -0
- package/dist/integrations/slack-manifest.js.map +1 -0
- package/dist/integrations/slack-oauth.d.ts +99 -0
- package/dist/integrations/slack-oauth.d.ts.map +1 -0
- package/dist/integrations/slack-oauth.js +226 -0
- package/dist/integrations/slack-oauth.js.map +1 -0
- package/dist/integrations/types.d.ts +144 -0
- package/dist/integrations/types.d.ts.map +1 -1
- package/dist/integrations/types.js +16 -1
- package/dist/integrations/types.js.map +1 -1
- package/dist/integrations/usage-budget-store.d.ts +84 -0
- package/dist/integrations/usage-budget-store.d.ts.map +1 -0
- package/dist/integrations/usage-budget-store.js +650 -0
- package/dist/integrations/usage-budget-store.js.map +1 -0
- package/dist/integrations/webhook-handler.d.ts +4 -0
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +415 -47
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/jobs/scheduler.d.ts +6 -0
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +83 -4
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/jobs/tools.d.ts.map +1 -1
- package/dist/jobs/tools.js +43 -11
- package/dist/jobs/tools.js.map +1 -1
- package/dist/provider-api/index.d.ts +4 -4
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +72 -1
- package/dist/provider-api/index.js.map +1 -1
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +57 -15
- package/dist/resources/handlers.js.map +1 -1
- package/dist/resources/script-helpers.d.ts.map +1 -1
- package/dist/resources/script-helpers.js +34 -8
- package/dist/resources/script-helpers.js.map +1 -1
- package/dist/resources/store.d.ts +10 -0
- package/dist/resources/store.d.ts.map +1 -1
- package/dist/resources/store.js +54 -47
- package/dist/resources/store.js.map +1 -1
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +106 -1
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +15 -4
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +248 -113
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +10 -14
- package/dist/server/auth.js.map +1 -1
- package/dist/server/builder-design-systems.d.ts +3 -1
- package/dist/server/builder-design-systems.d.ts.map +1 -1
- package/dist/server/builder-design-systems.js +9 -2
- package/dist/server/builder-design-systems.js.map +1 -1
- package/dist/server/edge.d.ts +1 -1
- package/dist/server/edge.d.ts.map +1 -1
- package/dist/server/edge.js +1 -1
- package/dist/server/edge.js.map +1 -1
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/request-context.d.ts +18 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/social-og-image.d.ts.map +1 -1
- package/dist/server/social-og-image.js +3 -2
- package/dist/server/social-og-image.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/styles/agent-native.css +62 -44
- package/dist/templates/default/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/dist/templates/default/AGENTS.md +7 -3
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +6 -3
- package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +25 -0
- package/dist/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +15 -0
- package/dist/templates/workspace-core/AGENTS.md +3 -2
- package/dist/usage/store.d.ts +7 -0
- package/dist/usage/store.d.ts.map +1 -1
- package/dist/usage/store.js +24 -3
- package/dist/usage/store.js.map +1 -1
- package/docs/content/automation-connectors.mdx +80 -0
- package/docs/content/extensions.mdx +8 -0
- package/docs/content/locales/ar-SA/extensions.mdx +8 -0
- package/docs/content/locales/ar-SA/messaging.mdx +84 -15
- package/docs/content/locales/ar-SA/template-clips.mdx +1 -0
- package/docs/content/locales/ar-SA/template-design.mdx +1 -0
- package/docs/content/locales/de-DE/extensions.mdx +10 -0
- package/docs/content/locales/de-DE/messaging.mdx +92 -15
- package/docs/content/locales/de-DE/template-clips.mdx +1 -0
- package/docs/content/locales/de-DE/template-design.mdx +1 -0
- package/docs/content/locales/es-ES/extensions.mdx +10 -0
- package/docs/content/locales/es-ES/messaging.mdx +91 -15
- package/docs/content/locales/es-ES/template-clips.mdx +1 -0
- package/docs/content/locales/es-ES/template-design.mdx +1 -0
- package/docs/content/locales/fr-FR/extensions.mdx +10 -0
- package/docs/content/locales/fr-FR/messaging.mdx +91 -15
- package/docs/content/locales/fr-FR/template-clips.mdx +1 -0
- package/docs/content/locales/fr-FR/template-design.mdx +1 -0
- package/docs/content/locales/hi-IN/extensions.mdx +8 -0
- package/docs/content/locales/hi-IN/messaging.mdx +81 -15
- package/docs/content/locales/hi-IN/template-clips.mdx +1 -0
- package/docs/content/locales/hi-IN/template-design.mdx +1 -0
- package/docs/content/locales/ja-JP/extensions.mdx +9 -0
- package/docs/content/locales/ja-JP/messaging.mdx +81 -15
- package/docs/content/locales/ja-JP/template-clips.mdx +1 -0
- package/docs/content/locales/ja-JP/template-design.mdx +1 -0
- package/docs/content/locales/ko-KR/extensions.mdx +8 -0
- package/docs/content/locales/ko-KR/messaging.mdx +80 -15
- package/docs/content/locales/ko-KR/template-clips.mdx +1 -0
- package/docs/content/locales/ko-KR/template-design.mdx +1 -0
- package/docs/content/locales/pt-BR/extensions.mdx +9 -0
- package/docs/content/locales/pt-BR/messaging.mdx +88 -15
- package/docs/content/locales/pt-BR/template-clips.mdx +1 -0
- package/docs/content/locales/pt-BR/template-design.mdx +1 -0
- package/docs/content/locales/zh-CN/extensions.mdx +6 -0
- package/docs/content/locales/zh-CN/messaging.mdx +78 -15
- package/docs/content/locales/zh-CN/template-clips.mdx +1 -0
- package/docs/content/locales/zh-CN/template-design.mdx +1 -0
- package/docs/content/locales/zh-TW/extensions.mdx +6 -0
- package/docs/content/locales/zh-TW/messaging.mdx +78 -15
- package/docs/content/locales/zh-TW/template-clips.mdx +1 -0
- package/docs/content/locales/zh-TW/template-design.mdx +1 -0
- package/docs/content/messaging.mdx +227 -45
- package/docs/content/template-clips.mdx +3 -0
- package/docs/content/template-design.mdx +4 -0
- package/package.json +5 -1
- package/src/templates/default/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/src/templates/default/AGENTS.md +7 -3
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +22 -9
- package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +6 -3
- package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +25 -0
- package/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +15 -0
- package/src/templates/workspace-core/AGENTS.md +3 -2
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
import { propNameToDataAttribute } from "@shared/component-model";
|
|
25
25
|
import {
|
|
26
26
|
listInteractionStates,
|
|
27
|
-
|
|
27
|
+
readResolvedStateStyles,
|
|
28
28
|
type InteractionState,
|
|
29
29
|
} from "@shared/interaction-states";
|
|
30
30
|
import {
|
|
@@ -186,7 +186,7 @@ import {
|
|
|
186
186
|
} from "./edit-panel/element-classification";
|
|
187
187
|
import {
|
|
188
188
|
deriveLockedAspectSize,
|
|
189
|
-
|
|
189
|
+
interactionStateSelectionKey,
|
|
190
190
|
useAspectRatioLock,
|
|
191
191
|
} from "./edit-panel/element-identity";
|
|
192
192
|
import {
|
|
@@ -227,6 +227,7 @@ import {
|
|
|
227
227
|
} from "./edit-panel/inspector-controls";
|
|
228
228
|
import {
|
|
229
229
|
authoredStyleValue,
|
|
230
|
+
elementWithInteractionStateStyles,
|
|
230
231
|
resolveInteractionStateValue,
|
|
231
232
|
} from "./edit-panel/interaction-state-helpers";
|
|
232
233
|
import {
|
|
@@ -383,6 +384,14 @@ export { ComponentSection };
|
|
|
383
384
|
export { extractDocumentColorPalette, type DocumentColorSourceFile };
|
|
384
385
|
export type { StyleChangeHandler, StyleChangeMeta, StylesChangeHandler };
|
|
385
386
|
|
|
387
|
+
export function mergeOptimisticInteractionStateStyles(
|
|
388
|
+
persisted: Record<string, string> | undefined,
|
|
389
|
+
pending: Record<string, string> | undefined,
|
|
390
|
+
): Record<string, string> | undefined {
|
|
391
|
+
if (!persisted && !pending) return undefined;
|
|
392
|
+
return { ...(persisted ?? {}), ...(pending ?? {}) };
|
|
393
|
+
}
|
|
394
|
+
|
|
386
395
|
export type InspectorTab = "design" | "tweaks";
|
|
387
396
|
|
|
388
397
|
interface EditPanelProps {
|
|
@@ -407,6 +416,10 @@ interface EditPanelProps {
|
|
|
407
416
|
fileId?: string;
|
|
408
417
|
/** Latest active file HTML, used to compose rapid sequential source edits. */
|
|
409
418
|
activeContent?: string;
|
|
419
|
+
/** Optimistic localhost state styles that are not persisted into activeContent. */
|
|
420
|
+
pendingInteractionStateStyles?: Partial<
|
|
421
|
+
Record<InteractionState, Record<string, string>>
|
|
422
|
+
>;
|
|
410
423
|
/** Server revision for activeContent. */
|
|
411
424
|
activeFileUpdatedAt?: string | null;
|
|
412
425
|
/**
|
|
@@ -1347,6 +1360,7 @@ export const EditPanel = memo(function EditPanel({
|
|
|
1347
1360
|
exporting = false,
|
|
1348
1361
|
fileId,
|
|
1349
1362
|
activeContent,
|
|
1363
|
+
pendingInteractionStateStyles,
|
|
1350
1364
|
activeFileUpdatedAt,
|
|
1351
1365
|
files,
|
|
1352
1366
|
designId,
|
|
@@ -1384,6 +1398,14 @@ export const EditPanel = memo(function EditPanel({
|
|
|
1384
1398
|
// silently active (matches the export-settings reset effect below).
|
|
1385
1399
|
const [interactionState, setInteractionState] =
|
|
1386
1400
|
useState<ActiveInteractionState>(null);
|
|
1401
|
+
// Own the Radix menu state above InteractionStatePanel's conditional
|
|
1402
|
+
// element subtree. A source commit can briefly remove/recreate that subtree
|
|
1403
|
+
// while the selected runtime element is reconciled; panel-local uncontrolled
|
|
1404
|
+
// state interpreted that refresh as an outside close immediately after the
|
|
1405
|
+
// user's click. This state survives the transient remount and is reset only
|
|
1406
|
+
// when the stable selection identity genuinely changes.
|
|
1407
|
+
const [interactionStateMenuOpen, setInteractionStateMenuOpen] =
|
|
1408
|
+
useState(false);
|
|
1387
1409
|
|
|
1388
1410
|
const effectiveSelectedElements = useMemo(
|
|
1389
1411
|
() =>
|
|
@@ -1450,8 +1472,25 @@ export const EditPanel = memo(function EditPanel({
|
|
|
1450
1472
|
!selectionAlreadyComponent,
|
|
1451
1473
|
);
|
|
1452
1474
|
const selectedElementKey = inspectorElement
|
|
1453
|
-
?
|
|
1475
|
+
? interactionStateSelectionKey(inspectorElement, fileId, selectedCount)
|
|
1454
1476
|
: "none";
|
|
1477
|
+
// A committed source update can make the projected inspector element
|
|
1478
|
+
// disappear for one render before the iframe's refreshed element-select
|
|
1479
|
+
// payload restores the exact same stable selection. Keep the state picker
|
|
1480
|
+
// mounted through that gap while a non-default state or its menu is active;
|
|
1481
|
+
// unmounting Radix's root synchronously reports onOpenChange(false), which
|
|
1482
|
+
// otherwise closes a menu the user opened during the refresh. A genuine
|
|
1483
|
+
// selection change still resets both values in the selectedElementKey
|
|
1484
|
+
// effect below, so this cache cannot carry a picker to another element.
|
|
1485
|
+
const lastInteractionStateSourceIdRef = useRef<string | null>(null);
|
|
1486
|
+
if (selectedCount <= 1 && inspectorElement?.sourceId) {
|
|
1487
|
+
lastInteractionStateSourceIdRef.current = inspectorElement.sourceId;
|
|
1488
|
+
}
|
|
1489
|
+
const shouldRenderInteractionStatePanel = Boolean(
|
|
1490
|
+
(selectedCount <= 1 && inspectorElement?.sourceId) ||
|
|
1491
|
+
((interactionState !== null || interactionStateMenuOpen) &&
|
|
1492
|
+
lastInteractionStateSourceIdRef.current),
|
|
1493
|
+
);
|
|
1455
1494
|
const selectionHasTextElement = effectiveSelectedElements.some((element) =>
|
|
1456
1495
|
isTextElement(element),
|
|
1457
1496
|
);
|
|
@@ -1493,6 +1532,7 @@ export const EditPanel = memo(function EditPanel({
|
|
|
1493
1532
|
// "multi-selection", both of which the state selector doesn't support.
|
|
1494
1533
|
useEffect(() => {
|
|
1495
1534
|
setInteractionState(null);
|
|
1535
|
+
setInteractionStateMenuOpen(false);
|
|
1496
1536
|
onInteractionStateChange?.(null);
|
|
1497
1537
|
// eslint-disable-next-line react-hooks/exhaustive-deps -- intentionally omits onInteractionStateChange: this only needs to fire when the SELECTION changes, not when the parent passes a new callback identity.
|
|
1498
1538
|
}, [selectedElementKey]);
|
|
@@ -1518,8 +1558,17 @@ export const EditPanel = memo(function EditPanel({
|
|
|
1518
1558
|
const nodeId = inspectorElement?.sourceId;
|
|
1519
1559
|
if (!nodeId) return undefined;
|
|
1520
1560
|
const states = listInteractionStates(activeContent, nodeId);
|
|
1521
|
-
|
|
1522
|
-
|
|
1561
|
+
const pendingStates = Object.entries(pendingInteractionStateStyles ?? {})
|
|
1562
|
+
.filter(([, styles]) => styles && Object.keys(styles).length > 0)
|
|
1563
|
+
.map(([state]) => state as InteractionState);
|
|
1564
|
+
const combined = [...states, ...pendingStates];
|
|
1565
|
+
return combined.length > 0 ? new Set(combined) : undefined;
|
|
1566
|
+
}, [
|
|
1567
|
+
activeContent,
|
|
1568
|
+
pendingInteractionStateStyles,
|
|
1569
|
+
selectedCount,
|
|
1570
|
+
inspectorElement?.sourceId,
|
|
1571
|
+
]);
|
|
1523
1572
|
|
|
1524
1573
|
// The active state's declared property/value overrides for the selected
|
|
1525
1574
|
// element, used below to resolve each style-section field's displayed
|
|
@@ -1533,14 +1582,35 @@ export const EditPanel = memo(function EditPanel({
|
|
|
1533
1582
|
}
|
|
1534
1583
|
const nodeId = inspectorElement?.sourceId;
|
|
1535
1584
|
if (!nodeId) return undefined;
|
|
1536
|
-
return
|
|
1585
|
+
return mergeOptimisticInteractionStateStyles(
|
|
1586
|
+
readResolvedStateStyles(
|
|
1587
|
+
activeContent,
|
|
1588
|
+
nodeId,
|
|
1589
|
+
interactionState,
|
|
1590
|
+
breakpointContext?.activeWidthPx,
|
|
1591
|
+
),
|
|
1592
|
+
pendingInteractionStateStyles?.[interactionState],
|
|
1593
|
+
);
|
|
1537
1594
|
}, [
|
|
1538
1595
|
activeContent,
|
|
1539
1596
|
interactionState,
|
|
1540
1597
|
selectedCount,
|
|
1541
1598
|
inspectorElement?.sourceId,
|
|
1599
|
+
breakpointContext?.activeWidthPx,
|
|
1600
|
+
pendingInteractionStateStyles,
|
|
1542
1601
|
]);
|
|
1543
1602
|
|
|
1603
|
+
const stateResolvedInspectorElement = useMemo(
|
|
1604
|
+
() =>
|
|
1605
|
+
inspectorElement
|
|
1606
|
+
? elementWithInteractionStateStyles(
|
|
1607
|
+
inspectorElement,
|
|
1608
|
+
activeInteractionStateStyles,
|
|
1609
|
+
)
|
|
1610
|
+
: null,
|
|
1611
|
+
[activeInteractionStateStyles, inspectorElement],
|
|
1612
|
+
);
|
|
1613
|
+
|
|
1544
1614
|
// Motion keyframe diamonds (Figma Motion parity) — see `motionKeyframeState`
|
|
1545
1615
|
// on EditPanelProps. `undefined` (feature off, or a multi-selection, which
|
|
1546
1616
|
// has no single element to keyframe) hides every diamond below.
|
|
@@ -1788,26 +1858,21 @@ export const EditPanel = memo(function EditPanel({
|
|
|
1788
1858
|
/>
|
|
1789
1859
|
)}
|
|
1790
1860
|
|
|
1861
|
+
{shouldRenderInteractionStatePanel ? (
|
|
1862
|
+
<InteractionStatePanel
|
|
1863
|
+
activeState={interactionState}
|
|
1864
|
+
onActiveStateChange={handleInteractionStateChange}
|
|
1865
|
+
open={interactionStateMenuOpen}
|
|
1866
|
+
onOpenChange={setInteractionStateMenuOpen}
|
|
1867
|
+
availableStates={availableInteractionStates}
|
|
1868
|
+
statesWithOverrides={interactionStatesWithOverrides}
|
|
1869
|
+
/>
|
|
1870
|
+
) : null}
|
|
1871
|
+
|
|
1791
1872
|
{inspectorElement && (
|
|
1792
1873
|
<>
|
|
1793
|
-
{/* Element interaction-state selector (Default / Hover /
|
|
1794
|
-
Focus / Focus-visible / Pressed / Disabled) — Webflow-
|
|
1795
|
-
style state picker for THIS element's pseudo-class
|
|
1796
|
-
styling. Distinct from the app-level Design states in
|
|
1797
|
-
StatesPanel (Loading/Empty/Error/fixtures/captures),
|
|
1798
|
-
which apply to the whole screen, not one element. Only
|
|
1799
|
-
offered for a single, source-backed selection (needs a
|
|
1800
|
-
stable node id — see shared/interaction-states.ts). */}
|
|
1801
|
-
{selectedCount <= 1 && inspectorElement.sourceId && (
|
|
1802
|
-
<InteractionStatePanel
|
|
1803
|
-
activeState={interactionState}
|
|
1804
|
-
onActiveStateChange={handleInteractionStateChange}
|
|
1805
|
-
availableStates={availableInteractionStates}
|
|
1806
|
-
statesWithOverrides={interactionStatesWithOverrides}
|
|
1807
|
-
/>
|
|
1808
|
-
)}
|
|
1809
1874
|
<PositionLayoutProperties
|
|
1810
|
-
element={inspectorElement}
|
|
1875
|
+
element={stateResolvedInspectorElement ?? inspectorElement}
|
|
1811
1876
|
onStyleChange={onStyleChange}
|
|
1812
1877
|
onStylesChange={onStylesChange}
|
|
1813
1878
|
onAlignSelection={onAlignSelection}
|
|
@@ -1815,26 +1880,26 @@ export const EditPanel = memo(function EditPanel({
|
|
|
1815
1880
|
breakpointOverrideContext={breakpointOverrideFieldContext}
|
|
1816
1881
|
/>
|
|
1817
1882
|
<LayoutContextProperties
|
|
1818
|
-
element={inspectorElement}
|
|
1883
|
+
element={stateResolvedInspectorElement ?? inspectorElement}
|
|
1819
1884
|
onStyleChange={onStyleChange}
|
|
1820
1885
|
onStylesChange={onStylesChange}
|
|
1821
1886
|
motionKeyframeContext={motionKeyframeFieldContext}
|
|
1822
1887
|
breakpointOverrideContext={breakpointOverrideFieldContext}
|
|
1823
1888
|
/>
|
|
1824
1889
|
<AppearanceProperties
|
|
1825
|
-
element={inspectorElement}
|
|
1890
|
+
element={stateResolvedInspectorElement ?? inspectorElement}
|
|
1826
1891
|
onStyleChange={onStyleChange}
|
|
1827
1892
|
motionKeyframeContext={motionKeyframeFieldContext}
|
|
1828
1893
|
breakpointOverrideContext={breakpointOverrideFieldContext}
|
|
1829
1894
|
/>
|
|
1830
1895
|
{selectionHasTextElement ? (
|
|
1831
1896
|
<TypographyProperties
|
|
1832
|
-
element={inspectorElement}
|
|
1897
|
+
element={stateResolvedInspectorElement ?? inspectorElement}
|
|
1833
1898
|
onStyleChange={onStyleChange}
|
|
1834
1899
|
/>
|
|
1835
1900
|
) : null}
|
|
1836
1901
|
<FillProperties
|
|
1837
|
-
element={inspectorElement}
|
|
1902
|
+
element={stateResolvedInspectorElement ?? inspectorElement}
|
|
1838
1903
|
onStyleChange={onStyleChange}
|
|
1839
1904
|
onStylesChange={onStylesChange}
|
|
1840
1905
|
documentColorPalette={documentColorPalette}
|
|
@@ -1843,26 +1908,26 @@ export const EditPanel = memo(function EditPanel({
|
|
|
1843
1908
|
breakpointOverrideContext={breakpointOverrideFieldContext}
|
|
1844
1909
|
/>
|
|
1845
1910
|
<StrokeProperties
|
|
1846
|
-
element={inspectorElement}
|
|
1911
|
+
element={stateResolvedInspectorElement ?? inspectorElement}
|
|
1847
1912
|
onStyleChange={onStyleChange}
|
|
1848
1913
|
onStylesChange={onStylesChange}
|
|
1849
1914
|
motionKeyframeContext={motionKeyframeFieldContext}
|
|
1850
1915
|
breakpointOverrideContext={breakpointOverrideFieldContext}
|
|
1851
1916
|
/>
|
|
1852
1917
|
<EffectsProperties
|
|
1853
|
-
element={inspectorElement}
|
|
1918
|
+
element={stateResolvedInspectorElement ?? inspectorElement}
|
|
1854
1919
|
onStyleChange={onStyleChange}
|
|
1855
1920
|
onStylesChange={onStylesChange}
|
|
1856
1921
|
glslShaderContext={glslShaderContext}
|
|
1857
1922
|
motionKeyframeContext={motionKeyframeFieldContext}
|
|
1858
1923
|
/>
|
|
1859
1924
|
<SelectionColorsProperties
|
|
1860
|
-
element={inspectorElement}
|
|
1925
|
+
element={stateResolvedInspectorElement ?? inspectorElement}
|
|
1861
1926
|
onStyleChange={onStyleChange}
|
|
1862
1927
|
/>
|
|
1863
1928
|
{selectionHasContainerElement ? (
|
|
1864
1929
|
<LayoutGuideProperties
|
|
1865
|
-
element={inspectorElement}
|
|
1930
|
+
element={stateResolvedInspectorElement ?? inspectorElement}
|
|
1866
1931
|
onStyleChange={onStyleChange}
|
|
1867
1932
|
/>
|
|
1868
1933
|
) : null}
|
|
@@ -1888,7 +1953,15 @@ export const EditPanel = memo(function EditPanel({
|
|
|
1888
1953
|
<ExportSettingsPanel
|
|
1889
1954
|
key={selectedElementKey}
|
|
1890
1955
|
value={exportSettings}
|
|
1891
|
-
|
|
1956
|
+
// "pdf" was previously missing here even though the format
|
|
1957
|
+
// dropdown's type, the default format list, and
|
|
1958
|
+
// handleDownloadPdf/createSinglePageRasterPdf were already
|
|
1959
|
+
// fully implemented — Download PDF was unreachable from any
|
|
1960
|
+
// UI surface (this panel and the "More" export menu are the
|
|
1961
|
+
// only two, and the menu has no PDF item either). Users had
|
|
1962
|
+
// no way to trigger it at all, let alone hit a pagination
|
|
1963
|
+
// or clipping bug in it.
|
|
1964
|
+
formats={["png", "svg", "pdf"]}
|
|
1892
1965
|
exporting={exporting}
|
|
1893
1966
|
onChange={(patch) =>
|
|
1894
1967
|
setExportSettings((current) => ({ ...current, ...patch }))
|
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
import {
|
|
45
45
|
IconCopy,
|
|
46
46
|
IconDots,
|
|
47
|
-
|
|
47
|
+
IconHandClick,
|
|
48
48
|
IconPlus,
|
|
49
49
|
} from "@tabler/icons-react";
|
|
50
50
|
import {
|
|
@@ -131,8 +131,9 @@ const DRAG_THRESHOLD = 3;
|
|
|
131
131
|
* live zoom) to count as "equal" for the smart-spacing guides (CV11). */
|
|
132
132
|
const EQUAL_GAP_TOLERANCE_SCREEN_PX = 2;
|
|
133
133
|
const FRAME_LABEL_HEIGHT = 28;
|
|
134
|
-
const
|
|
134
|
+
const FRAME_HEADER_BUTTON_COMPACT_WIDTH = 260;
|
|
135
135
|
const FRAME_HEADER_BUTTON_RESERVE = 116;
|
|
136
|
+
const FRAME_HEADER_COMPACT_BUTTON_RESERVE = 32;
|
|
136
137
|
const TRANSFORM_BADGE_OFFSET = 12;
|
|
137
138
|
const TRANSFORM_BADGE_EDGE_PADDING = 8;
|
|
138
139
|
const TRANSFORM_BADGE_HEIGHT = 28;
|
|
@@ -207,6 +208,7 @@ import {
|
|
|
207
208
|
getBoardSurfaceStaticPreviewViewport,
|
|
208
209
|
isLineupShrinkOnlyChange,
|
|
209
210
|
OVERVIEW_FRAME_WIDTH,
|
|
211
|
+
shouldDeferLineupRecenterToCameraCommand,
|
|
210
212
|
shouldRenderBoardSurfaceStaticPreview,
|
|
211
213
|
shouldSuppressLineupRecenter,
|
|
212
214
|
SURFACE_PADDING,
|
|
@@ -412,6 +414,7 @@ export const MultiScreenCanvas = memo(function MultiScreenCanvas({
|
|
|
412
414
|
onDeleteSelection,
|
|
413
415
|
onZoomChange,
|
|
414
416
|
renderScreenContent,
|
|
417
|
+
renderBreakpointContent,
|
|
415
418
|
onScreenSelectionChange,
|
|
416
419
|
selectAllRequest,
|
|
417
420
|
clearSelectionRequest,
|
|
@@ -1289,6 +1292,7 @@ export const MultiScreenCanvas = memo(function MultiScreenCanvas({
|
|
|
1289
1292
|
screens: screens.map((screen) => ({
|
|
1290
1293
|
id: screen.id,
|
|
1291
1294
|
metadata: getResolvedMetadata(screen),
|
|
1295
|
+
breakpointWidths: screen.breakpointWidths,
|
|
1292
1296
|
})),
|
|
1293
1297
|
currentGeometryById: frameGeometryRef.current,
|
|
1294
1298
|
persistedGeometryById: geometryById,
|
|
@@ -1405,6 +1409,14 @@ export const MultiScreenCanvas = memo(function MultiScreenCanvas({
|
|
|
1405
1409
|
) {
|
|
1406
1410
|
return;
|
|
1407
1411
|
}
|
|
1412
|
+
if (
|
|
1413
|
+
shouldDeferLineupRecenterToCameraCommand({
|
|
1414
|
+
cameraCommandNonce: cameraCommand?.nonce,
|
|
1415
|
+
lastHandledCameraCommandNonce: lastCameraCommandNonceRef.current,
|
|
1416
|
+
})
|
|
1417
|
+
) {
|
|
1418
|
+
return;
|
|
1419
|
+
}
|
|
1408
1420
|
// A duplicate (alt-drag drop or Cmd+D) placed the new screen(s)
|
|
1409
1421
|
// deliberately: keep the camera still for exactly those screen-count
|
|
1410
1422
|
// transitions (see shouldSuppressLineupRecenter's doc for what this must
|
|
@@ -7522,6 +7534,7 @@ export const MultiScreenCanvas = memo(function MultiScreenCanvas({
|
|
|
7522
7534
|
geometry={geometry}
|
|
7523
7535
|
locked={lockedScreenIdSet.has(screen.id)}
|
|
7524
7536
|
screenContent={screenContentById.get(screen.id)}
|
|
7537
|
+
renderBreakpointContent={renderBreakpointContent}
|
|
7525
7538
|
cullTier={screenCullTierById.get(screen.id) ?? "visible"}
|
|
7526
7539
|
isActive={screen.id === activeId}
|
|
7527
7540
|
isTopScreen={screen.id === topScreenId}
|
|
@@ -8803,6 +8816,7 @@ interface ScreenProps {
|
|
|
8803
8816
|
chromeScale: number;
|
|
8804
8817
|
chromeSettling: boolean;
|
|
8805
8818
|
screenContent?: ReactNode;
|
|
8819
|
+
renderBreakpointContent?: MultiScreenCanvasProps["renderBreakpointContent"];
|
|
8806
8820
|
/** Overview viewport culling tier (PF22) — see computeScreenCullTier.
|
|
8807
8821
|
* "visible": render screenContent normally. "culled": screenContent (if
|
|
8808
8822
|
* any) stays mounted but is hidden from paint (visibility/
|
|
@@ -8874,6 +8888,7 @@ const Screen = memo(function Screen({
|
|
|
8874
8888
|
onStartRotate,
|
|
8875
8889
|
onStartDuplicateGesture,
|
|
8876
8890
|
screenContent,
|
|
8891
|
+
renderBreakpointContent,
|
|
8877
8892
|
cullTier,
|
|
8878
8893
|
onAddBreakpoint,
|
|
8879
8894
|
onActiveBreakpointChange,
|
|
@@ -8951,21 +8966,19 @@ const Screen = memo(function Screen({
|
|
|
8951
8966
|
}, []);
|
|
8952
8967
|
const frameLabelHeight = FRAME_LABEL_HEIGHT * chromeScale;
|
|
8953
8968
|
const frameScreenWidth = geometry.width / Math.max(chromeScale, 0.001);
|
|
8954
|
-
//
|
|
8955
|
-
//
|
|
8956
|
-
//
|
|
8957
|
-
|
|
8958
|
-
// breakpoint frames, always keep the pill INSIDE the frame header —
|
|
8959
|
-
// labelInfoMaxWidth already reserves room for the inside placement.
|
|
8960
|
-
const fullViewOutsideFrame =
|
|
8961
|
-
frameScreenWidth < FRAME_HEADER_BUTTON_OUTSIDE_WIDTH &&
|
|
8962
|
-
!(screen.breakpointWidths && screen.breakpointWidths.length > 0);
|
|
8969
|
+
// Keep frame actions inside their own frame so closely spaced screens cannot
|
|
8970
|
+
// cover one another. Narrow frames collapse Interact to its familiar icon;
|
|
8971
|
+
// the accessible name and native tooltip preserve the action's meaning.
|
|
8972
|
+
const compactFullView = frameScreenWidth < FRAME_HEADER_BUTTON_COMPACT_WIDTH;
|
|
8963
8973
|
const labelInfoMaxWidth = Math.max(
|
|
8964
8974
|
64,
|
|
8965
|
-
frameScreenWidth -
|
|
8975
|
+
frameScreenWidth -
|
|
8976
|
+
(compactFullView
|
|
8977
|
+
? FRAME_HEADER_COMPACT_BUTTON_RESERVE
|
|
8978
|
+
: FRAME_HEADER_BUTTON_RESERVE),
|
|
8966
8979
|
);
|
|
8967
|
-
const fullViewMaxWidth =
|
|
8968
|
-
?
|
|
8980
|
+
const fullViewMaxWidth = compactFullView
|
|
8981
|
+
? 20
|
|
8969
8982
|
: Math.max(84, Math.min(180, frameScreenWidth * 0.46));
|
|
8970
8983
|
|
|
8971
8984
|
return (
|
|
@@ -9076,22 +9089,21 @@ const Screen = memo(function Screen({
|
|
|
9076
9089
|
<button
|
|
9077
9090
|
type="button"
|
|
9078
9091
|
data-frame-full-view
|
|
9092
|
+
data-compact={compactFullView || undefined}
|
|
9079
9093
|
className={cn(
|
|
9080
|
-
"absolute top-1/2 z-40 flex h-5 shrink-0 items-center
|
|
9094
|
+
"absolute right-1 top-1/2 z-40 flex h-5 shrink-0 items-center overflow-hidden rounded-md border border-border bg-background/95 text-[10px] font-medium text-foreground opacity-0 shadow-sm transition-opacity",
|
|
9095
|
+
compactFullView ? "w-5 justify-center px-0" : "gap-1 px-1.5",
|
|
9081
9096
|
"hover:bg-accent hover:text-accent-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
9082
9097
|
fullViewVisible && "opacity-100",
|
|
9083
|
-
fullViewOutsideFrame ? "left-full" : "right-1",
|
|
9084
9098
|
)}
|
|
9085
9099
|
style={{
|
|
9086
9100
|
maxWidth: fullViewMaxWidth,
|
|
9087
9101
|
transform: `translateY(-50%) scale(${chromeScale})`,
|
|
9088
|
-
transformOrigin:
|
|
9089
|
-
? "left center"
|
|
9090
|
-
: "right center",
|
|
9102
|
+
transformOrigin: "right center",
|
|
9091
9103
|
transition: getChromeLabelTransition(chromeSettling),
|
|
9092
9104
|
}}
|
|
9093
|
-
aria-label={t("
|
|
9094
|
-
title={t("
|
|
9105
|
+
aria-label={t("designEditor.modes.interact")}
|
|
9106
|
+
title={t("designEditor.modes.interact")}
|
|
9095
9107
|
onClick={(event) => onEdit(screen.id, event)}
|
|
9096
9108
|
onMouseDown={(event) => {
|
|
9097
9109
|
event.preventDefault();
|
|
@@ -9100,8 +9112,10 @@ const Screen = memo(function Screen({
|
|
|
9100
9112
|
onMouseEnter={() => updateDirectHover(true)}
|
|
9101
9113
|
onMouseLeave={() => updateDirectHover(false)}
|
|
9102
9114
|
>
|
|
9103
|
-
<
|
|
9104
|
-
<span className="truncate"
|
|
9115
|
+
<IconHandClick className="size-3 shrink-0" />
|
|
9116
|
+
<span className={cn("truncate", compactFullView && "sr-only")}>
|
|
9117
|
+
{t("designEditor.modes.interact")}
|
|
9118
|
+
</span>
|
|
9105
9119
|
</button>
|
|
9106
9120
|
</div>
|
|
9107
9121
|
<div
|
|
@@ -9321,6 +9335,8 @@ const Screen = memo(function Screen({
|
|
|
9321
9335
|
naturalAspect={metadata.height / Math.max(1, metadata.width)}
|
|
9322
9336
|
previewUrl={previewUrl}
|
|
9323
9337
|
srcdocWithHitTest={srcdocWithHitTest}
|
|
9338
|
+
metadata={metadata}
|
|
9339
|
+
renderBreakpointContent={renderBreakpointContent}
|
|
9324
9340
|
activeBreakpointWidth={screen.activeBreakpointWidth}
|
|
9325
9341
|
isScreenSelected={isSelected}
|
|
9326
9342
|
penActive={penActive}
|
|
@@ -9369,6 +9385,7 @@ function areScreenPropsEqual(prev: ScreenProps, next: ScreenProps) {
|
|
|
9369
9385
|
return (
|
|
9370
9386
|
prev.screen === next.screen &&
|
|
9371
9387
|
prev.screenContent === next.screenContent &&
|
|
9388
|
+
prev.renderBreakpointContent === next.renderBreakpointContent &&
|
|
9372
9389
|
prev.cullTier === next.cullTier &&
|
|
9373
9390
|
sameResolvedMetadata(prev.metadata, next.metadata) &&
|
|
9374
9391
|
sameFrameGeometry(prev.geometry, next.geometry) &&
|
|
@@ -9442,6 +9459,8 @@ function BreakpointPreviewRow({
|
|
|
9442
9459
|
naturalAspect,
|
|
9443
9460
|
previewUrl,
|
|
9444
9461
|
srcdocWithHitTest,
|
|
9462
|
+
metadata,
|
|
9463
|
+
renderBreakpointContent,
|
|
9445
9464
|
activeBreakpointWidth,
|
|
9446
9465
|
isScreenSelected,
|
|
9447
9466
|
penActive,
|
|
@@ -9478,6 +9497,8 @@ function BreakpointPreviewRow({
|
|
|
9478
9497
|
* the active edit scope (see getActiveScreenIframeId).
|
|
9479
9498
|
*/
|
|
9480
9499
|
srcdocWithHitTest: string;
|
|
9500
|
+
metadata: ResolvedScreenMetadata;
|
|
9501
|
+
renderBreakpointContent?: MultiScreenCanvasProps["renderBreakpointContent"];
|
|
9481
9502
|
activeBreakpointWidth: number | undefined;
|
|
9482
9503
|
/** Whether the OWNING screen (base frame) is the current selection —
|
|
9483
9504
|
* mirrors `Screen`'s own `isSelected`, used so a breakpoint frame's chrome
|
|
@@ -9510,12 +9531,12 @@ function BreakpointPreviewRow({
|
|
|
9510
9531
|
/** Item 8b — "…" menu "Change width" for one breakpoint frame. */
|
|
9511
9532
|
onChangeBreakpointWidth?: (widthPx: number, nextWidthPx: number) => void;
|
|
9512
9533
|
/** Item 8b — full-view entry for one breakpoint frame (double-click or its
|
|
9513
|
-
* own
|
|
9534
|
+
* own Interact button), mirroring the base frame's onEdit/full-view
|
|
9514
9535
|
* affordance. */
|
|
9515
9536
|
onEditBreakpoint?: (widthPx: number) => void;
|
|
9516
9537
|
/** Gates the "…" menu's mutating items (Remove / Change width) — mirrors
|
|
9517
9538
|
* BreakpointBar's own canEdit. Full-view entry is never gated by this,
|
|
9518
|
-
* same as the base frame's own
|
|
9539
|
+
* same as the base frame's own Interact button. */
|
|
9519
9540
|
canEdit?: boolean;
|
|
9520
9541
|
}) {
|
|
9521
9542
|
const t = useT();
|
|
@@ -9540,6 +9561,13 @@ function BreakpointPreviewRow({
|
|
|
9540
9561
|
const { frameWidth, frameHeight, naturalHeight, scale } =
|
|
9541
9562
|
getBreakpointFrameGeometry({ widthPx, naturalAspect, primaryScale });
|
|
9542
9563
|
const isActive = activeBreakpointWidth === widthPx;
|
|
9564
|
+
const editableContent = renderBreakpointContent?.(screen, metadata, {
|
|
9565
|
+
widthPx,
|
|
9566
|
+
viewportHeight: naturalHeight,
|
|
9567
|
+
displayWidth: frameWidth,
|
|
9568
|
+
displayHeight: frameHeight,
|
|
9569
|
+
active: isActive,
|
|
9570
|
+
});
|
|
9543
9571
|
const currentOffsetX = offsetX;
|
|
9544
9572
|
offsetX += frameWidth + BREAKPOINT_FRAME_GAP;
|
|
9545
9573
|
// BP-DEEP item 5 — clicking a frame in the group always SELECTS it
|
|
@@ -9801,8 +9829,8 @@ function BreakpointPreviewRow({
|
|
|
9801
9829
|
transform: `scale(${chromeScale})`,
|
|
9802
9830
|
transformOrigin: "right center",
|
|
9803
9831
|
}}
|
|
9804
|
-
aria-label={t("
|
|
9805
|
-
title={t("
|
|
9832
|
+
aria-label={t("designEditor.modes.interact")}
|
|
9833
|
+
title={t("designEditor.modes.interact")}
|
|
9806
9834
|
onClick={(e) => {
|
|
9807
9835
|
e.stopPropagation();
|
|
9808
9836
|
activateThisFrame(e);
|
|
@@ -9813,7 +9841,7 @@ function BreakpointPreviewRow({
|
|
|
9813
9841
|
e.stopPropagation();
|
|
9814
9842
|
}}
|
|
9815
9843
|
>
|
|
9816
|
-
<
|
|
9844
|
+
<IconHandClick className="size-3" />
|
|
9817
9845
|
</button>
|
|
9818
9846
|
) : null}
|
|
9819
9847
|
<span
|
|
@@ -9835,6 +9863,8 @@ function BreakpointPreviewRow({
|
|
|
9835
9863
|
{breakpointLabel(widthPx)}
|
|
9836
9864
|
</span>
|
|
9837
9865
|
</div>
|
|
9866
|
+
) : editableContent ? (
|
|
9867
|
+
editableContent
|
|
9838
9868
|
) : (
|
|
9839
9869
|
<iframe
|
|
9840
9870
|
// Distinct id per breakpoint sub-frame — the primary iframe
|
|
@@ -73,6 +73,12 @@ export function TweaksPanelContent({
|
|
|
73
73
|
)}
|
|
74
74
|
</div>
|
|
75
75
|
)}
|
|
76
|
+
<p
|
|
77
|
+
data-tweaks-help
|
|
78
|
+
className="mt-2 border-t border-border/60 pt-2 !text-[10px] leading-relaxed text-muted-foreground/70"
|
|
79
|
+
>
|
|
80
|
+
{t("designEditor.tweaksHelp")}
|
|
81
|
+
</p>
|
|
76
82
|
</div>
|
|
77
83
|
);
|
|
78
84
|
}
|