@agent-native/core 0.117.0 → 0.117.2
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 +16 -0
- package/corpus/core/package.json +2 -1
- package/corpus/core/src/cli/context-xray-local.ts +1 -1
- package/corpus/core/src/client/extensions/ExtensionViewer.tsx +4 -4
- package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +11 -11
- package/corpus/core/src/client/extensions/agent-native-extension-runtime.ts +1 -1
- package/corpus/core/src/client/extensions/delete-extension.ts +2 -2
- package/corpus/core/src/client/org/OrgSwitcher.tsx +25 -1
- package/corpus/core/src/client/settings/SettingsPanel.tsx +102 -10
- package/corpus/core/src/client/sharing/ShareButton.tsx +7 -6
- package/corpus/core/src/db/client.ts +13 -10
- package/corpus/core/src/deploy/workspace-deploy.ts +14 -4
- package/corpus/core/src/extensions/actions.ts +13 -5
- package/corpus/core/src/extensions/local.ts +1 -0
- package/corpus/core/src/extensions/routes.ts +10 -5
- package/corpus/core/src/extensions/schema.ts +5 -0
- package/corpus/core/src/extensions/slots/store.ts +14 -4
- package/corpus/core/src/extensions/store.ts +55 -19
- package/corpus/core/src/extensions/theme.ts +1 -1
- package/corpus/core/src/file-upload/registry.ts +9 -0
- package/corpus/core/src/index.browser.ts +5 -0
- package/corpus/core/src/index.ts +1 -0
- package/corpus/core/src/localization/default-messages.ts +23 -6
- package/corpus/core/src/server/action-discovery.ts +8 -0
- package/corpus/core/src/server/better-auth-instance.ts +7 -2
- package/corpus/core/src/server/email-template.ts +18 -0
- package/corpus/core/src/server/email-templates.ts +3 -0
- package/corpus/core/src/server/email.ts +40 -4
- package/corpus/core/src/sharing/actions/share-resource.ts +1 -0
- package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/core/src/templates/default/app/global.css +1 -1
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +6 -6
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +7 -7
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +7 -7
- package/corpus/core/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/core/src/user-profile/actions/get-user-profile.ts +16 -0
- package/corpus/core/src/user-profile/actions/update-user-profile.ts +24 -0
- package/corpus/core/src/user-profile/index.ts +5 -0
- package/corpus/core/src/user-profile/shared.ts +14 -0
- package/corpus/core/src/user-profile/store.ts +50 -0
- package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/assets/app/global.css +1 -1
- package/corpus/templates/assets/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/brain/app/global.css +2 -2
- package/corpus/templates/brain/app/lib/brain.ts +2 -2
- package/corpus/templates/brain/app/root.tsx +2 -2
- package/corpus/templates/brain/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +6 -2
- package/corpus/templates/calendar/app/global.css +1 -1
- package/corpus/templates/calendar/app/root.tsx +2 -2
- package/corpus/templates/calendar/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/chat/app/global.css +1 -1
- package/corpus/templates/chat/app/root.tsx +2 -2
- package/corpus/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/clips/actions/export-to-brain.ts +1 -1
- package/corpus/templates/clips/actions/invite-member.ts +1 -0
- package/corpus/templates/clips/app/components/library/library-layout.tsx +2 -2
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +20 -11
- package/corpus/templates/clips/app/global.css +1 -1
- package/corpus/templates/clips/app/root.tsx +7 -2
- package/corpus/templates/clips/app/routes/record.tsx +2 -88
- package/corpus/templates/clips/changelog/2026-07-22-builder-connected-recordings-start-resumable-upload-sessions.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-clip-thumbnails-now-come-from-the-recording-instead-of-the-p.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-clips-emails-now-render-the-agent-native-logo-in-gmail-and-o.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-dismissed-zoom-and-teams-meeting-note-prompts-now-stay-dismi.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-22-quieter-permissions-and-rewind-controls.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +86 -52
- package/corpus/templates/clips/desktop/src/lib/meeting-notification-dismissal.ts +31 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +4 -167
- package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +10 -1
- package/corpus/templates/clips/desktop/src/styles.css +98 -36
- package/corpus/templates/clips/desktop/src-tauri/src/adhoc_meetings_watcher.rs +67 -4
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +1 -1
- package/corpus/templates/clips/desktop/src-tauri/src/meetings_watcher.rs +51 -0
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen/custom_capture.rs +5 -1
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +0 -189
- package/corpus/templates/clips/desktop/src-tauri/src/notifications.rs +62 -0
- package/corpus/templates/clips/server/plugins/db.ts +6 -2
- package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +3 -3
- package/corpus/templates/content/app/global.css +1 -1
- package/corpus/templates/content/app/root.tsx +2 -2
- package/corpus/templates/content/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/crm/app/global.css +1 -1
- package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +19 -1
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +12 -1
- package/corpus/templates/design/app/components/design/EditPanel.tsx +177 -52
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +179 -59
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +74 -27
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +2 -0
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/design/app/global.css +1 -1
- package/corpus/templates/design/app/hooks/use-navigation-state.ts +6 -5
- package/corpus/templates/design/app/root.tsx +2 -2
- package/corpus/templates/design/changelog/2026-07-22-design-owners-can-keep-editing-their-designs-after-switching.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-inspector-tabs-keep-their-text-labels-at-narrow-widths.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-narrow-breakpoint-previews-keep-their-device-labels-readable.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-removed-the-draft-status-chip-from-the-design-editor.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-responsive-breakpoint-controls-stay-within-narrow-sidebars.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-responsive-peers-now-use-a-softer-selection-highlight-withou.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-rotate-from-context-menu.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-the-selection-outline-now-stays-attached-while-moving-screen.md +6 -0
- package/corpus/templates/design/changelog/2026-07-22-view-only-designs-now-support-figma-style-layer-inspection-w.md +6 -0
- package/corpus/templates/design/server/db/index.ts +4 -0
- package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/dispatch/app/dispatch-extensions.tsx +2 -2
- package/corpus/templates/dispatch/app/global.css +1 -1
- package/corpus/templates/dispatch/app/root.tsx +2 -2
- package/corpus/templates/dispatch/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/forms/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +3 -3
- package/corpus/templates/forms/app/global.css +1 -1
- package/corpus/templates/forms/app/hooks/use-forms.ts +55 -2
- package/corpus/templates/forms/app/i18n/en-US.ts +2 -0
- package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +3 -3
- package/corpus/templates/forms/app/pages/FormsListPage.tsx +23 -6
- package/corpus/templates/forms/app/root.tsx +2 -2
- package/corpus/templates/forms/changelog/2026-07-22-forms-now-archive-with-optimistic-feedback.md +6 -0
- package/corpus/templates/forms/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/forms/server/plugins/agent-chat.ts +1 -1
- package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +2 -2
- package/corpus/templates/macros/app/root.tsx +2 -2
- package/corpus/templates/macros/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +3 -3
- package/corpus/templates/mail/app/components/layout/CommandPalette.tsx +2 -2
- package/corpus/templates/mail/app/global.css +1 -1
- package/corpus/templates/mail/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/plan/app/global.css +1 -1
- package/corpus/templates/plan/app/root.tsx +2 -2
- package/corpus/templates/plan/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/slides/app/root.tsx +2 -2
- package/corpus/templates/slides/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-22-slides-no-longer-fail-intermittently-on-fresh-server-instances.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-22-uploaded-screenshots-can-now-be-analyzed-and-recreated-as-ed.md +6 -0
- package/corpus/templates/slides/server/lib/chat-attachments.ts +7 -3
- package/corpus/templates/slides/server/plugins/db.ts +44 -17
- package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/templates/tasks/app/global.css +1 -1
- package/dist/cli/context-xray-local.js +1 -1
- package/dist/cli/context-xray-local.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +2 -2
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js +11 -11
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
- package/dist/client/extensions/agent-native-extension-runtime.js +1 -1
- package/dist/client/extensions/agent-native-extension-runtime.js.map +1 -1
- package/dist/client/extensions/delete-extension.d.ts +1 -1
- package/dist/client/extensions/delete-extension.d.ts.map +1 -1
- package/dist/client/extensions/delete-extension.js +1 -1
- package/dist/client/extensions/delete-extension.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts +3 -1
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +12 -4
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +37 -4
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts +3 -4
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +3 -2
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/db/client.d.ts +7 -7
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +13 -10
- package/dist/db/client.js.map +1 -1
- package/dist/deploy/workspace-deploy.js +14 -4
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/dist/extensions/actions.d.ts.map +1 -1
- package/dist/extensions/actions.js +8 -5
- package/dist/extensions/actions.js.map +1 -1
- package/dist/extensions/local.d.ts.map +1 -1
- package/dist/extensions/local.js +1 -0
- package/dist/extensions/local.js.map +1 -1
- package/dist/extensions/routes.d.ts.map +1 -1
- package/dist/extensions/routes.js +9 -4
- package/dist/extensions/routes.js.map +1 -1
- package/dist/extensions/schema.d.ts +23 -2
- package/dist/extensions/schema.d.ts.map +1 -1
- package/dist/extensions/schema.js +5 -0
- package/dist/extensions/schema.js.map +1 -1
- package/dist/extensions/slots/store.d.ts +1 -1
- package/dist/extensions/slots/store.d.ts.map +1 -1
- package/dist/extensions/slots/store.js +4 -4
- package/dist/extensions/slots/store.js.map +1 -1
- package/dist/extensions/store.d.ts +1 -0
- package/dist/extensions/store.d.ts.map +1 -1
- package/dist/extensions/store.js +38 -21
- package/dist/extensions/store.js.map +1 -1
- package/dist/extensions/theme.js +1 -1
- package/dist/extensions/theme.js.map +1 -1
- package/dist/file-upload/registry.d.ts.map +1 -1
- package/dist/file-upload/registry.js +9 -0
- package/dist/file-upload/registry.js.map +1 -1
- package/dist/index.browser.d.ts +1 -0
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +1 -0
- package/dist/index.browser.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/localization/default-messages.d.ts +16 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +22 -6
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts +5 -5
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +7 -7
- package/dist/provider-api/actions/provider-api.d.ts +11 -11
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/secrets/routes.d.ts +6 -6
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +8 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/better-auth-instance.d.ts +7 -2
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/email-template.d.ts +3 -0
- package/dist/server/email-template.d.ts.map +1 -1
- package/dist/server/email-template.js +13 -0
- package/dist/server/email-template.js.map +1 -1
- package/dist/server/email-templates.d.ts.map +1 -1
- package/dist/server/email-templates.js +3 -0
- package/dist/server/email-templates.js.map +1 -1
- package/dist/server/email.d.ts.map +1 -1
- package/dist/server/email.js +27 -4
- package/dist/server/email.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/sharing/actions/share-resource.js +1 -0
- package/dist/sharing/actions/share-resource.js.map +1 -1
- package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/dist/templates/chat/app/components/layout/Sidebar.tsx +2 -2
- package/dist/templates/chat/app/global.css +1 -1
- package/dist/templates/chat/app/root.tsx +2 -2
- package/dist/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/dist/templates/default/app/global.css +1 -1
- package/dist/templates/default/app/i18n/ar-SA.ts +6 -6
- package/dist/templates/default/app/i18n/de-DE.ts +6 -6
- package/dist/templates/default/app/i18n/en-US.ts +6 -6
- package/dist/templates/default/app/i18n/es-ES.ts +6 -6
- package/dist/templates/default/app/i18n/fr-FR.ts +6 -6
- package/dist/templates/default/app/i18n/hi-IN.ts +6 -6
- package/dist/templates/default/app/i18n/ja-JP.ts +6 -6
- package/dist/templates/default/app/i18n/ko-KR.ts +6 -6
- package/dist/templates/default/app/i18n/pt-BR.ts +6 -6
- package/dist/templates/default/app/i18n/zh-CN.ts +7 -7
- package/dist/templates/default/app/i18n/zh-TW.ts +7 -7
- package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/dist/user-profile/actions/get-user-profile.d.ts +4 -0
- package/dist/user-profile/actions/get-user-profile.d.ts.map +1 -0
- package/dist/user-profile/actions/get-user-profile.js +14 -0
- package/dist/user-profile/actions/get-user-profile.js.map +1 -0
- package/dist/user-profile/actions/update-user-profile.d.ts +6 -0
- package/dist/user-profile/actions/update-user-profile.d.ts.map +1 -0
- package/dist/user-profile/actions/update-user-profile.js +20 -0
- package/dist/user-profile/actions/update-user-profile.js.map +1 -0
- package/dist/user-profile/index.d.ts +2 -0
- package/dist/user-profile/index.d.ts.map +1 -0
- package/dist/user-profile/index.js +2 -0
- package/dist/user-profile/index.js.map +1 -0
- package/dist/user-profile/shared.d.ts +7 -0
- package/dist/user-profile/shared.d.ts.map +1 -0
- package/dist/user-profile/shared.js +6 -0
- package/dist/user-profile/shared.js.map +1 -0
- package/dist/user-profile/store.d.ts +4 -0
- package/dist/user-profile/store.d.ts.map +1 -0
- package/dist/user-profile/store.js +38 -0
- package/dist/user-profile/store.js.map +1 -0
- package/package.json +2 -1
- package/src/cli/context-xray-local.ts +1 -1
- package/src/client/extensions/ExtensionViewer.tsx +4 -4
- package/src/client/extensions/ExtensionsSidebarSection.tsx +11 -11
- package/src/client/extensions/agent-native-extension-runtime.ts +1 -1
- package/src/client/extensions/delete-extension.ts +2 -2
- package/src/client/org/OrgSwitcher.tsx +25 -1
- package/src/client/settings/SettingsPanel.tsx +102 -10
- package/src/client/sharing/ShareButton.tsx +7 -6
- package/src/db/client.ts +13 -10
- package/src/deploy/workspace-deploy.ts +14 -4
- package/src/extensions/actions.ts +13 -5
- package/src/extensions/local.ts +1 -0
- package/src/extensions/routes.ts +10 -5
- package/src/extensions/schema.ts +5 -0
- package/src/extensions/slots/store.ts +14 -4
- package/src/extensions/store.ts +55 -19
- package/src/extensions/theme.ts +1 -1
- package/src/file-upload/registry.ts +9 -0
- package/src/index.browser.ts +5 -0
- package/src/index.ts +1 -0
- package/src/localization/default-messages.ts +23 -6
- package/src/server/action-discovery.ts +8 -0
- package/src/server/better-auth-instance.ts +7 -2
- package/src/server/email-template.ts +18 -0
- package/src/server/email-templates.ts +3 -0
- package/src/server/email.ts +40 -4
- package/src/sharing/actions/share-resource.ts +1 -0
- package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/src/templates/chat/app/components/layout/Sidebar.tsx +2 -2
- package/src/templates/chat/app/global.css +1 -1
- package/src/templates/chat/app/root.tsx +2 -2
- package/src/templates/chat/changelog/2026-07-22-manage-agent-navigation-now-uses-the-connected-nodes-icon.md +6 -0
- package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/src/templates/default/app/global.css +1 -1
- package/src/templates/default/app/i18n/ar-SA.ts +6 -6
- package/src/templates/default/app/i18n/de-DE.ts +6 -6
- package/src/templates/default/app/i18n/en-US.ts +6 -6
- package/src/templates/default/app/i18n/es-ES.ts +6 -6
- package/src/templates/default/app/i18n/fr-FR.ts +6 -6
- package/src/templates/default/app/i18n/hi-IN.ts +6 -6
- package/src/templates/default/app/i18n/ja-JP.ts +6 -6
- package/src/templates/default/app/i18n/ko-KR.ts +6 -6
- package/src/templates/default/app/i18n/pt-BR.ts +6 -6
- package/src/templates/default/app/i18n/zh-CN.ts +7 -7
- package/src/templates/default/app/i18n/zh-TW.ts +7 -7
- package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/src/user-profile/actions/get-user-profile.ts +16 -0
- package/src/user-profile/actions/update-user-profile.ts +24 -0
- package/src/user-profile/index.ts +5 -0
- package/src/user-profile/shared.ts +14 -0
- package/src/user-profile/store.ts +50 -0
|
@@ -106,6 +106,7 @@ export type CanvasContextMenuAction =
|
|
|
106
106
|
| "copy-as-code"
|
|
107
107
|
| "copy-as-svg"
|
|
108
108
|
| "copy-as-png"
|
|
109
|
+
| "rotate-clockwise"
|
|
109
110
|
| "flip-horizontal"
|
|
110
111
|
| "flip-vertical"
|
|
111
112
|
| "toggle-ui"
|
|
@@ -176,6 +177,7 @@ export interface CanvasContextMenuLabels {
|
|
|
176
177
|
copyAsCode: string;
|
|
177
178
|
copyAsSvg: string;
|
|
178
179
|
copyAsPng: string;
|
|
180
|
+
rotateClockwise: string;
|
|
179
181
|
flipHorizontal: string;
|
|
180
182
|
flipVertical: string;
|
|
181
183
|
toggleUiShow: string;
|
|
@@ -219,6 +221,7 @@ export interface CanvasContextMenuShortcuts {
|
|
|
219
221
|
copyAsCode: string;
|
|
220
222
|
copyAsSvg: string;
|
|
221
223
|
copyAsPng: string;
|
|
224
|
+
rotateClockwise: string;
|
|
222
225
|
flipHorizontal: string;
|
|
223
226
|
flipVertical: string;
|
|
224
227
|
toggleUi: string;
|
|
@@ -296,6 +299,7 @@ export interface CanvasContextMenuProps {
|
|
|
296
299
|
canCopyAsCode?: boolean;
|
|
297
300
|
canCopyAsSvg?: boolean;
|
|
298
301
|
canCopyAsPng?: boolean;
|
|
302
|
+
canRotateClockwise?: boolean;
|
|
299
303
|
canFlipHorizontal?: boolean;
|
|
300
304
|
canFlipVertical?: boolean;
|
|
301
305
|
canToggleUi?: boolean;
|
|
@@ -356,6 +360,7 @@ export interface CanvasContextMenuProps {
|
|
|
356
360
|
onCopyAsCode?: CanvasContextMenuActionHandler;
|
|
357
361
|
onCopyAsSvg?: CanvasContextMenuActionHandler;
|
|
358
362
|
onCopyAsPng?: CanvasContextMenuActionHandler;
|
|
363
|
+
onRotateClockwise?: CanvasContextMenuActionHandler;
|
|
359
364
|
onFlipHorizontal?: CanvasContextMenuActionHandler;
|
|
360
365
|
onFlipVertical?: CanvasContextMenuActionHandler;
|
|
361
366
|
onToggleUi?: CanvasContextMenuActionHandler;
|
|
@@ -409,6 +414,7 @@ const DEFAULT_LABELS: CanvasContextMenuLabels = {
|
|
|
409
414
|
copyAsCode: "Copy as code",
|
|
410
415
|
copyAsSvg: "Copy as SVG",
|
|
411
416
|
copyAsPng: "Copy as PNG",
|
|
417
|
+
rotateClockwise: "Rotate 90° clockwise",
|
|
412
418
|
flipHorizontal: "Flip horizontal",
|
|
413
419
|
flipVertical: "Flip vertical",
|
|
414
420
|
toggleUiShow: "Show UI",
|
|
@@ -452,6 +458,7 @@ const DEFAULT_SHORTCUTS: CanvasContextMenuShortcuts = {
|
|
|
452
458
|
copyAsCode: "",
|
|
453
459
|
copyAsSvg: "",
|
|
454
460
|
copyAsPng: "⇧⌘C",
|
|
461
|
+
rotateClockwise: "",
|
|
455
462
|
flipHorizontal: "⇧H",
|
|
456
463
|
flipVertical: "⇧V",
|
|
457
464
|
toggleUi: "⌘\\",
|
|
@@ -464,7 +471,7 @@ type ActionCallbackMap = Partial<
|
|
|
464
471
|
|
|
465
472
|
// design-editor menu chrome: compact, dark-border, subtle shadow, no animation jitter
|
|
466
473
|
const MENU_CONTENT_CLASS =
|
|
467
|
-
"w-52 min-w-[200px] rounded-[6px] border border-[var(--design-editor-control-border)] bg-[var(--design-editor-panel-bg)] py-[3px] px-[3px] text-[12px] text-foreground shadow-[0_4px_16px_rgba(0,0,0,0.16),0_0_0_0.5px_rgba(0,0,0,0.08)] outline-none";
|
|
474
|
+
"w-52 min-w-[200px] rounded-[6px] border border-[var(--design-editor-control-border)] bg-[var(--design-editor-panel-bg)] py-[3px] px-[3px] text-[12px] text-foreground shadow-[0_4px_16px_rgba(0,0,0,0.16),0_0_0_0.5px_rgba(0,0,0,0.08)] outline-none data-[state=open]:!animate-none data-[state=closed]:!animate-none";
|
|
468
475
|
// design row height ~28px, full-width highlight on hover, no icon gap waste
|
|
469
476
|
const MENU_ITEM_CLASS =
|
|
470
477
|
"flex h-7 cursor-default select-none items-center rounded-[4px] px-2 py-0 text-[12px] leading-none gap-0 focus:bg-[var(--design-editor-selection-color)] focus:text-white data-[disabled]:pointer-events-none data-[disabled]:opacity-35";
|
|
@@ -525,6 +532,7 @@ export const CanvasContextMenu = forwardRef<
|
|
|
525
532
|
canCopyAsCode = selectedCount > 0,
|
|
526
533
|
canCopyAsSvg = selectedCount > 0,
|
|
527
534
|
canCopyAsPng = selectedCount > 0,
|
|
535
|
+
canRotateClockwise = false,
|
|
528
536
|
canFlipHorizontal = selectedCount > 0,
|
|
529
537
|
canFlipVertical = selectedCount > 0,
|
|
530
538
|
canToggleUi = true,
|
|
@@ -565,6 +573,7 @@ export const CanvasContextMenu = forwardRef<
|
|
|
565
573
|
onCopyAsCode,
|
|
566
574
|
onCopyAsSvg,
|
|
567
575
|
onCopyAsPng,
|
|
576
|
+
onRotateClockwise,
|
|
568
577
|
onFlipHorizontal,
|
|
569
578
|
onFlipVertical,
|
|
570
579
|
onToggleUi,
|
|
@@ -650,6 +659,7 @@ export const CanvasContextMenu = forwardRef<
|
|
|
650
659
|
"copy-as-code": onCopyAsCode,
|
|
651
660
|
"copy-as-svg": onCopyAsSvg,
|
|
652
661
|
"copy-as-png": onCopyAsPng,
|
|
662
|
+
"rotate-clockwise": onRotateClockwise,
|
|
653
663
|
"flip-horizontal": onFlipHorizontal,
|
|
654
664
|
"flip-vertical": onFlipVertical,
|
|
655
665
|
"toggle-ui": onToggleUi,
|
|
@@ -665,6 +675,7 @@ export const CanvasContextMenu = forwardRef<
|
|
|
665
675
|
onCopyAsCode,
|
|
666
676
|
onCopyAsPng,
|
|
667
677
|
onCopyAsSvg,
|
|
678
|
+
onRotateClockwise,
|
|
668
679
|
onCopyProps,
|
|
669
680
|
onCreateComponent,
|
|
670
681
|
onReprompt,
|
|
@@ -1073,6 +1084,13 @@ export const CanvasContextMenu = forwardRef<
|
|
|
1073
1084
|
<CanvasMenuSeparator />
|
|
1074
1085
|
|
|
1075
1086
|
<ContextMenuGroup>
|
|
1087
|
+
<CanvasMenuItem
|
|
1088
|
+
hidden={isHiddenAction("rotate-clockwise")}
|
|
1089
|
+
disabled={!canRun("rotate-clockwise", canRotateClockwise)}
|
|
1090
|
+
label={labels.rotateClockwise}
|
|
1091
|
+
shortcut={shortcuts.rotateClockwise}
|
|
1092
|
+
onSelect={(event) => runAction("rotate-clockwise", event)}
|
|
1093
|
+
/>
|
|
1076
1094
|
<CanvasMenuItem
|
|
1077
1095
|
hidden={isHiddenAction("flip-horizontal")}
|
|
1078
1096
|
disabled={!canRun("flip-horizontal", canFlipHorizontal)}
|
|
@@ -533,6 +533,8 @@ interface DesignCanvasProps {
|
|
|
533
533
|
selectedSelector?: string | null;
|
|
534
534
|
selectedSelectorCandidates?: string[];
|
|
535
535
|
selectedSelectorGroups?: string[][];
|
|
536
|
+
/** Visual treatment for selection mirrors in responsive peer previews. */
|
|
537
|
+
passiveSelectionStyle?: "default" | "soft";
|
|
536
538
|
hoveredSelector?: string | null;
|
|
537
539
|
hoveredSelectorCandidates?: string[];
|
|
538
540
|
lockedSelectors?: string[];
|
|
@@ -1058,6 +1060,7 @@ export function DesignCanvas({
|
|
|
1058
1060
|
selectedSelector,
|
|
1059
1061
|
selectedSelectorCandidates = [],
|
|
1060
1062
|
selectedSelectorGroups = [],
|
|
1063
|
+
passiveSelectionStyle = "default",
|
|
1061
1064
|
hoveredSelector,
|
|
1062
1065
|
hoveredSelectorCandidates = [],
|
|
1063
1066
|
lockedSelectors = [],
|
|
@@ -2969,6 +2972,7 @@ export function DesignCanvas({
|
|
|
2969
2972
|
{
|
|
2970
2973
|
type: "select-elements",
|
|
2971
2974
|
selectorGroups: selectedSelectorGroups,
|
|
2975
|
+
passiveSelectionStyle,
|
|
2972
2976
|
},
|
|
2973
2977
|
"*",
|
|
2974
2978
|
);
|
|
@@ -2978,8 +2982,14 @@ export function DesignCanvas({
|
|
|
2978
2982
|
type: "hover-element",
|
|
2979
2983
|
selector: hoveredSelector,
|
|
2980
2984
|
selectorCandidates: hoveredSelectorCandidates,
|
|
2985
|
+
hoverStyle: passiveSelectionStyle,
|
|
2981
2986
|
}
|
|
2982
|
-
: {
|
|
2987
|
+
: {
|
|
2988
|
+
type: "hover-element",
|
|
2989
|
+
selector: "",
|
|
2990
|
+
selectorCandidates: [],
|
|
2991
|
+
hoverStyle: passiveSelectionStyle,
|
|
2992
|
+
},
|
|
2983
2993
|
"*",
|
|
2984
2994
|
);
|
|
2985
2995
|
// Re-send motion tracks so the preview bridge is ready after a reload.
|
|
@@ -3038,6 +3048,7 @@ export function DesignCanvas({
|
|
|
3038
3048
|
selectedSelector,
|
|
3039
3049
|
selectedSelectorCandidates,
|
|
3040
3050
|
selectedSelectorGroups,
|
|
3051
|
+
passiveSelectionStyle,
|
|
3041
3052
|
shaderFillPreview,
|
|
3042
3053
|
spacePanActive,
|
|
3043
3054
|
statePreviewTarget,
|
|
@@ -28,7 +28,6 @@ import {
|
|
|
28
28
|
type InteractionState,
|
|
29
29
|
} from "@shared/interaction-states";
|
|
30
30
|
import {
|
|
31
|
-
IconAdjustmentsHorizontal,
|
|
32
31
|
IconAlignCenter,
|
|
33
32
|
IconAlignJustified,
|
|
34
33
|
IconAlignLeft,
|
|
@@ -44,7 +43,6 @@ import {
|
|
|
44
43
|
IconBorderCorners,
|
|
45
44
|
IconBorderRadius,
|
|
46
45
|
IconBorderStyle,
|
|
47
|
-
IconBrush,
|
|
48
46
|
IconCheck,
|
|
49
47
|
IconChevronDown,
|
|
50
48
|
IconChevronRight,
|
|
@@ -74,7 +72,6 @@ import {
|
|
|
74
72
|
IconLink,
|
|
75
73
|
IconLinkOff,
|
|
76
74
|
IconMinus,
|
|
77
|
-
IconMessageCircle,
|
|
78
75
|
IconPerspective,
|
|
79
76
|
IconPhoto,
|
|
80
77
|
IconPlus,
|
|
@@ -399,7 +396,7 @@ export function mergeOptimisticInteractionStateStyles(
|
|
|
399
396
|
return { ...(persisted ?? {}), ...(pending ?? {}) };
|
|
400
397
|
}
|
|
401
398
|
|
|
402
|
-
export type InspectorTab = "design" | "tweaks" | "comments";
|
|
399
|
+
export type InspectorTab = "design" | "tweaks" | "comments" | "code";
|
|
403
400
|
|
|
404
401
|
interface EditPanelProps {
|
|
405
402
|
selectedElement: ElementInfo | null;
|
|
@@ -409,6 +406,8 @@ interface EditPanelProps {
|
|
|
409
406
|
zoom?: number;
|
|
410
407
|
headerTrailing?: ReactNode;
|
|
411
408
|
width?: number;
|
|
409
|
+
/** Viewer mode exposes inspection and comments, never editing controls. */
|
|
410
|
+
readOnly?: boolean;
|
|
412
411
|
activeTab?: InspectorTab;
|
|
413
412
|
onActiveTabChange?: (tab: InspectorTab) => void;
|
|
414
413
|
tweaks?: TweakDefinition[];
|
|
@@ -933,6 +932,130 @@ function InspectCodePopover({ data }: { data: InspectCodeData }) {
|
|
|
933
932
|
);
|
|
934
933
|
}
|
|
935
934
|
|
|
935
|
+
function CodeInspectPanel({
|
|
936
|
+
data,
|
|
937
|
+
element,
|
|
938
|
+
screen,
|
|
939
|
+
}: {
|
|
940
|
+
data?: InspectCodeData;
|
|
941
|
+
element: ElementInfo | null;
|
|
942
|
+
screen: ScreenGeometrySelection | null | undefined;
|
|
943
|
+
}) {
|
|
944
|
+
const [copied, setCopied] = useState(false);
|
|
945
|
+
const snippet = data
|
|
946
|
+
? (elementHtmlPreview(data) ??
|
|
947
|
+
data.sourceLocation?.snippet ??
|
|
948
|
+
data.html?.trim() ??
|
|
949
|
+
null)
|
|
950
|
+
: null;
|
|
951
|
+
const bounds = element?.boundingRect ?? screen;
|
|
952
|
+
const measurements = bounds
|
|
953
|
+
? [
|
|
954
|
+
["X", bounds.x],
|
|
955
|
+
["Y", bounds.y],
|
|
956
|
+
["W", bounds.width],
|
|
957
|
+
["H", bounds.height],
|
|
958
|
+
]
|
|
959
|
+
: [];
|
|
960
|
+
const styles = element
|
|
961
|
+
? [
|
|
962
|
+
["Display", element.computedStyles.display],
|
|
963
|
+
["Position", element.computedStyles.position],
|
|
964
|
+
["Font", element.computedStyles.fontSize],
|
|
965
|
+
["Color", element.computedStyles.color],
|
|
966
|
+
].filter(([, value]) => value)
|
|
967
|
+
: [];
|
|
968
|
+
|
|
969
|
+
const handleCopy = () => {
|
|
970
|
+
if (!snippet) return;
|
|
971
|
+
void navigator.clipboard
|
|
972
|
+
?.writeText(snippet)
|
|
973
|
+
.then(() => {
|
|
974
|
+
setCopied(true);
|
|
975
|
+
window.setTimeout(() => setCopied(false), 1200);
|
|
976
|
+
})
|
|
977
|
+
.catch(() => {});
|
|
978
|
+
};
|
|
979
|
+
|
|
980
|
+
return (
|
|
981
|
+
<div className="design-inspector-scroll min-h-0 flex-1 overflow-y-auto overscroll-contain">
|
|
982
|
+
<div className="flex h-10 items-center justify-between gap-2 border-b border-border/90 px-3">
|
|
983
|
+
<div className="flex min-w-0 items-center gap-1.5">
|
|
984
|
+
<IconCode className="size-3.5 text-muted-foreground" />
|
|
985
|
+
<h3 className="truncate text-[13px] font-semibold text-foreground">
|
|
986
|
+
{"Code & measurements" /* i18n-ignore design inspector heading */}
|
|
987
|
+
</h3>
|
|
988
|
+
</div>
|
|
989
|
+
<Button
|
|
990
|
+
type="button"
|
|
991
|
+
variant="ghost"
|
|
992
|
+
size="sm"
|
|
993
|
+
className="h-6 px-2 text-[10px]"
|
|
994
|
+
onClick={handleCopy}
|
|
995
|
+
disabled={!snippet}
|
|
996
|
+
>
|
|
997
|
+
{
|
|
998
|
+
copied
|
|
999
|
+
? "Copied" /* i18n-ignore design inspector action */
|
|
1000
|
+
: "Copy" /* i18n-ignore design inspector action */
|
|
1001
|
+
}
|
|
1002
|
+
</Button>
|
|
1003
|
+
</div>
|
|
1004
|
+
|
|
1005
|
+
{measurements.length > 0 ? (
|
|
1006
|
+
<PanelSection
|
|
1007
|
+
title={"Measurements" /* i18n-ignore design inspector section */}
|
|
1008
|
+
>
|
|
1009
|
+
<div className="grid grid-cols-2 gap-2">
|
|
1010
|
+
{measurements.map(([label, value]) => (
|
|
1011
|
+
<div
|
|
1012
|
+
key={label}
|
|
1013
|
+
className="flex items-center justify-between rounded border border-border/70 bg-[var(--design-editor-control-bg)] px-2 py-1.5 text-[11px]"
|
|
1014
|
+
>
|
|
1015
|
+
<span className="text-muted-foreground">{label}</span>
|
|
1016
|
+
<span className="font-mono text-foreground">
|
|
1017
|
+
{Math.round(Number(value))}px
|
|
1018
|
+
</span>
|
|
1019
|
+
</div>
|
|
1020
|
+
))}
|
|
1021
|
+
</div>
|
|
1022
|
+
</PanelSection>
|
|
1023
|
+
) : null}
|
|
1024
|
+
|
|
1025
|
+
{styles.length > 0 ? (
|
|
1026
|
+
<PanelSection
|
|
1027
|
+
title={"Computed styles" /* i18n-ignore design inspector section */}
|
|
1028
|
+
>
|
|
1029
|
+
<div className="space-y-1 text-[11px]">
|
|
1030
|
+
{styles.map(([label, value]) => (
|
|
1031
|
+
<div key={label} className="flex justify-between gap-3">
|
|
1032
|
+
<span className="text-muted-foreground">{label}</span>
|
|
1033
|
+
<span className="max-w-[65%] truncate font-mono text-foreground">
|
|
1034
|
+
{value}
|
|
1035
|
+
</span>
|
|
1036
|
+
</div>
|
|
1037
|
+
))}
|
|
1038
|
+
</div>
|
|
1039
|
+
</PanelSection>
|
|
1040
|
+
) : null}
|
|
1041
|
+
|
|
1042
|
+
<PanelSection title={"Code" /* i18n-ignore design inspector section */}>
|
|
1043
|
+
{snippet ? (
|
|
1044
|
+
<pre className="max-h-80 overflow-auto rounded bg-[var(--design-editor-control-bg)] p-2 font-mono text-[10px] leading-relaxed text-foreground">
|
|
1045
|
+
<code>{highlightedHtml(snippet)}</code>
|
|
1046
|
+
</pre>
|
|
1047
|
+
) : (
|
|
1048
|
+
<p className="text-[11px] leading-4 text-muted-foreground">
|
|
1049
|
+
{
|
|
1050
|
+
"Select a layer to inspect its code and measurements." /* i18n-ignore design inspector empty */
|
|
1051
|
+
}
|
|
1052
|
+
</p>
|
|
1053
|
+
)}
|
|
1054
|
+
</PanelSection>
|
|
1055
|
+
</div>
|
|
1056
|
+
);
|
|
1057
|
+
}
|
|
1058
|
+
|
|
936
1059
|
function elementTypeIcon(element: ElementInfo) {
|
|
937
1060
|
if (elementIsComponentSelection(element)) return IconComponents;
|
|
938
1061
|
const tag = normalizedElementTagName(element.tagName);
|
|
@@ -1099,16 +1222,16 @@ function ScreenGeometryProperties({
|
|
|
1099
1222
|
|
|
1100
1223
|
function InspectorTabsHeader({
|
|
1101
1224
|
activeTab,
|
|
1225
|
+
readOnly,
|
|
1102
1226
|
onActiveTabChange,
|
|
1103
1227
|
trailing,
|
|
1104
1228
|
commentsCount = 0,
|
|
1105
|
-
compact = false,
|
|
1106
1229
|
}: {
|
|
1107
1230
|
activeTab: InspectorTab;
|
|
1231
|
+
readOnly: boolean;
|
|
1108
1232
|
onActiveTabChange: (tab: InspectorTab) => void;
|
|
1109
1233
|
trailing?: ReactNode;
|
|
1110
1234
|
commentsCount?: number;
|
|
1111
|
-
compact?: boolean;
|
|
1112
1235
|
}) {
|
|
1113
1236
|
const t = useT();
|
|
1114
1237
|
|
|
@@ -1120,20 +1243,15 @@ function InspectorTabsHeader({
|
|
|
1120
1243
|
className="min-w-0"
|
|
1121
1244
|
>
|
|
1122
1245
|
<TabsList className="h-7 max-w-full justify-start gap-0.5 overflow-hidden rounded-none bg-transparent p-0">
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
"h-6 rounded-md !text-[11px] font-semibold text-muted-foreground shadow-none transition-colors hover:text-foreground data-[state=active]:bg-[var(--design-editor-panel-raised-bg)] data-[state=active]:text-foreground data-[state=active]:shadow-none"
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
<IconBrush className="size-3.5" />
|
|
1133
|
-
) : (
|
|
1134
|
-
t("navigation.brand")
|
|
1135
|
-
)}
|
|
1136
|
-
</TabsTrigger>
|
|
1246
|
+
{!readOnly ? (
|
|
1247
|
+
<TabsTrigger
|
|
1248
|
+
value="design"
|
|
1249
|
+
aria-label={t("navigation.brand")}
|
|
1250
|
+
className="h-6 rounded-md px-1.5 !text-[11px] font-semibold text-muted-foreground shadow-none transition-colors hover:text-foreground data-[state=active]:bg-[var(--design-editor-panel-raised-bg)] data-[state=active]:text-foreground data-[state=active]:shadow-none"
|
|
1251
|
+
>
|
|
1252
|
+
{t("navigation.brand")}
|
|
1253
|
+
</TabsTrigger>
|
|
1254
|
+
) : null}
|
|
1137
1255
|
<TabsTrigger
|
|
1138
1256
|
value="comments"
|
|
1139
1257
|
aria-label={
|
|
@@ -1141,43 +1259,37 @@ function InspectorTabsHeader({
|
|
|
1141
1259
|
? t("review.commentsTab", { count: commentsCount })
|
|
1142
1260
|
: t("review.comments")
|
|
1143
1261
|
}
|
|
1144
|
-
className=
|
|
1145
|
-
"group h-6 min-w-0 rounded-md !text-[11px] font-semibold text-muted-foreground shadow-none transition-colors hover:text-foreground data-[state=active]:bg-[var(--design-editor-panel-raised-bg)] data-[state=active]:text-foreground data-[state=active]:shadow-none",
|
|
1146
|
-
compact ? "w-auto gap-0.5 px-1" : "gap-1 px-1.5",
|
|
1147
|
-
)}
|
|
1262
|
+
className="group h-6 min-w-0 rounded-md gap-1 px-1.5 !text-[11px] font-semibold text-muted-foreground shadow-none transition-colors hover:text-foreground data-[state=active]:bg-[var(--design-editor-panel-raised-bg)] data-[state=active]:text-foreground data-[state=active]:shadow-none"
|
|
1148
1263
|
>
|
|
1149
|
-
{
|
|
1150
|
-
<IconMessageCircle className="size-3.5" />
|
|
1151
|
-
) : (
|
|
1152
|
-
<span className="truncate">{t("review.comments")}</span>
|
|
1153
|
-
)}
|
|
1264
|
+
<span className="truncate">{t("review.comments")}</span>
|
|
1154
1265
|
{commentsCount > 0 ? (
|
|
1155
1266
|
<span
|
|
1156
1267
|
className={cn(
|
|
1157
1268
|
"flex shrink-0 items-center justify-center rounded-full bg-muted tabular-nums text-muted-foreground group-data-[state=active]:bg-background",
|
|
1158
|
-
|
|
1159
|
-
? "h-3.5 min-w-3.5 px-0.5 text-[8px]"
|
|
1160
|
-
: "h-4 min-w-4 px-1 text-[9px]",
|
|
1269
|
+
"h-4 min-w-4 px-1 text-[9px]",
|
|
1161
1270
|
)}
|
|
1162
1271
|
>
|
|
1163
1272
|
{commentsCount > 99 ? "99+" : commentsCount}
|
|
1164
1273
|
</span>
|
|
1165
1274
|
) : null}
|
|
1166
1275
|
</TabsTrigger>
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
"h-6 rounded-md !text-[11px] font-semibold text-muted-foreground shadow-none transition-colors hover:text-foreground data-[state=active]:bg-[var(--design-editor-panel-raised-bg)] data-[state=active]:text-foreground data-[state=active]:shadow-none"
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1276
|
+
{!readOnly ? (
|
|
1277
|
+
<TabsTrigger
|
|
1278
|
+
value="tweaks"
|
|
1279
|
+
aria-label={t("designEditor.tweaks")}
|
|
1280
|
+
className="h-6 rounded-md px-1.5 !text-[11px] font-semibold text-muted-foreground shadow-none transition-colors hover:text-foreground data-[state=active]:bg-[var(--design-editor-panel-raised-bg)] data-[state=active]:text-foreground data-[state=active]:shadow-none"
|
|
1281
|
+
>
|
|
1282
|
+
{t("designEditor.tweaks")}
|
|
1283
|
+
</TabsTrigger>
|
|
1284
|
+
) : (
|
|
1285
|
+
<TabsTrigger
|
|
1286
|
+
value="code"
|
|
1287
|
+
aria-label={"Code" /* i18n-ignore design inspector tab */}
|
|
1288
|
+
className="h-6 rounded-md px-1.5 !text-[11px] font-semibold text-muted-foreground shadow-none transition-colors hover:text-foreground data-[state=active]:bg-[var(--design-editor-panel-raised-bg)] data-[state=active]:text-foreground data-[state=active]:shadow-none"
|
|
1289
|
+
>
|
|
1290
|
+
{"Code" /* i18n-ignore design inspector tab */}
|
|
1291
|
+
</TabsTrigger>
|
|
1292
|
+
)}
|
|
1181
1293
|
</TabsList>
|
|
1182
1294
|
</Tabs>
|
|
1183
1295
|
{trailing ? <div className="shrink-0">{trailing}</div> : null}
|
|
@@ -1410,6 +1522,7 @@ export const EditPanel = memo(function EditPanel({
|
|
|
1410
1522
|
pageStyles = {},
|
|
1411
1523
|
headerTrailing,
|
|
1412
1524
|
width = 256,
|
|
1525
|
+
readOnly = false,
|
|
1413
1526
|
activeTab = "design",
|
|
1414
1527
|
onActiveTabChange,
|
|
1415
1528
|
tweaks = [],
|
|
@@ -1770,10 +1883,16 @@ export const EditPanel = memo(function EditPanel({
|
|
|
1770
1883
|
const userScrollIntentRef = useRef(false);
|
|
1771
1884
|
const scrollTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
1772
1885
|
|
|
1886
|
+
const resolvedActiveTab: InspectorTab =
|
|
1887
|
+
readOnly && (activeTab === "design" || activeTab === "tweaks")
|
|
1888
|
+
? "code"
|
|
1889
|
+
: activeTab;
|
|
1890
|
+
|
|
1773
1891
|
// Frame presets belong to the Design inspector. Keep Comments and Tweaks
|
|
1774
1892
|
// visible when the Frame tool remains armed while another tab is active.
|
|
1775
1893
|
const showFramePresets =
|
|
1776
|
-
|
|
1894
|
+
!readOnly &&
|
|
1895
|
+
resolvedActiveTab === "design" &&
|
|
1777
1896
|
activeTool === "frame" &&
|
|
1778
1897
|
Boolean(onCreateScreenFromPreset);
|
|
1779
1898
|
|
|
@@ -1787,18 +1906,18 @@ export const EditPanel = memo(function EditPanel({
|
|
|
1787
1906
|
style={{ width }}
|
|
1788
1907
|
>
|
|
1789
1908
|
<InspectorTabsHeader
|
|
1790
|
-
activeTab={
|
|
1909
|
+
activeTab={resolvedActiveTab}
|
|
1910
|
+
readOnly={readOnly}
|
|
1791
1911
|
onActiveTabChange={handleActiveTabChange}
|
|
1792
1912
|
trailing={headerTrailing}
|
|
1793
1913
|
commentsCount={reviewCommentsCount}
|
|
1794
|
-
compact={width < 280}
|
|
1795
1914
|
/>
|
|
1796
1915
|
|
|
1797
1916
|
{showFramePresets ? (
|
|
1798
1917
|
<FramePresetsPanel
|
|
1799
1918
|
onPick={(preset) => onCreateScreenFromPreset?.(preset)}
|
|
1800
1919
|
/>
|
|
1801
|
-
) :
|
|
1920
|
+
) : resolvedActiveTab === "design" ? (
|
|
1802
1921
|
<>
|
|
1803
1922
|
<SelectionHeader
|
|
1804
1923
|
element={inspectorElement}
|
|
@@ -2090,7 +2209,7 @@ export const EditPanel = memo(function EditPanel({
|
|
|
2090
2209
|
) : null}
|
|
2091
2210
|
</div>
|
|
2092
2211
|
</>
|
|
2093
|
-
) :
|
|
2212
|
+
) : resolvedActiveTab === "tweaks" ? (
|
|
2094
2213
|
<div className="flex min-h-0 flex-1 flex-col overflow-hidden">
|
|
2095
2214
|
<div className="flex h-10 shrink-0 items-center justify-between gap-2 border-b border-border/90 px-3">
|
|
2096
2215
|
<h3 className="min-w-0 flex-1 truncate text-[13px] font-semibold text-foreground">
|
|
@@ -2127,7 +2246,13 @@ export const EditPanel = memo(function EditPanel({
|
|
|
2127
2246
|
/>
|
|
2128
2247
|
</div>
|
|
2129
2248
|
</div>
|
|
2130
|
-
) :
|
|
2249
|
+
) : resolvedActiveTab === "code" ? (
|
|
2250
|
+
<CodeInspectPanel
|
|
2251
|
+
data={inspectCode}
|
|
2252
|
+
element={inspectorElement}
|
|
2253
|
+
screen={selectedScreenGeometry}
|
|
2254
|
+
/>
|
|
2255
|
+
) : resolvedActiveTab === "comments" && reviewCommentsPanelProps ? (
|
|
2131
2256
|
<ReviewCommentsPanel {...reviewCommentsPanelProps} />
|
|
2132
2257
|
) : null}
|
|
2133
2258
|
</div>
|