@agent-native/core 0.92.12 → 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 +39 -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 +15 -3
- package/corpus/core/src/agent/run-manager.ts +130 -10
- package/corpus/core/src/agent/run-store.ts +225 -15
- 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 +54 -5
- 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/hooks/use-library.ts +1 -1
- package/corpus/templates/clips/app/hooks/use-navigation-state.ts +10 -2
- 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-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 +10 -16
- package/corpus/templates/content/actions/_database-source-utils.ts +58 -11
- package/corpus/templates/content/actions/_property-utils.ts +30 -2
- package/corpus/templates/content/actions/add-content-database-source-field-property.ts +312 -114
- package/corpus/templates/content/actions/submit-content-database-form.ts +497 -0
- 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-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 +27 -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 +2 -2
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +15 -5
- 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 +90 -9
- 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 +206 -15
- 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 +49 -4
- 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/struct-routes.d.ts +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/observability/routes.d.ts +5 -5
- package/dist/progress/routes.d.ts +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 +3 -3
- 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
|
@@ -64,6 +64,7 @@ import {
|
|
|
64
64
|
type ContentDatabaseFilter,
|
|
65
65
|
type ContentDatabaseFilterMode,
|
|
66
66
|
type ContentDatabaseFilterOperator,
|
|
67
|
+
type ContentDatabaseFormQuestion,
|
|
67
68
|
type ContentDatabaseOpenPagesIn,
|
|
68
69
|
type ContentDatabaseRowDensity,
|
|
69
70
|
type ContentDatabaseSort,
|
|
@@ -75,6 +76,7 @@ import {
|
|
|
75
76
|
type DocumentPropertyType,
|
|
76
77
|
type DocumentPropertyValue,
|
|
77
78
|
} from "@shared/api";
|
|
79
|
+
import { contentDatabaseFormQuestions } from "@shared/database-form";
|
|
78
80
|
import {
|
|
79
81
|
type DocumentPropertyOptionColor,
|
|
80
82
|
countWords,
|
|
@@ -108,6 +110,7 @@ import {
|
|
|
108
110
|
IconEyeOff,
|
|
109
111
|
IconFilter,
|
|
110
112
|
IconFileText,
|
|
113
|
+
IconForms,
|
|
111
114
|
IconGripVertical,
|
|
112
115
|
IconLayoutKanban,
|
|
113
116
|
IconLayoutGrid,
|
|
@@ -229,6 +232,7 @@ import {
|
|
|
229
232
|
releasePreviewDocumentSaveController,
|
|
230
233
|
} from "../previewDocumentSaveRegistry";
|
|
231
234
|
import { VisualEditor } from "../VisualEditor";
|
|
235
|
+
import { DatabaseFormView } from "./FormView";
|
|
232
236
|
|
|
233
237
|
export interface DatabaseViewProps {
|
|
234
238
|
databaseId: string;
|
|
@@ -255,7 +259,7 @@ const DEFAULT_NAME_COLUMN_WIDTH = 240;
|
|
|
255
259
|
const DEFAULT_PROPERTY_COLUMN_WIDTH = 180;
|
|
256
260
|
const MIN_COLUMN_WIDTH = 96;
|
|
257
261
|
const MAX_COLUMN_WIDTH = 640;
|
|
258
|
-
const ACTION_COLUMN_WIDTH =
|
|
262
|
+
const ACTION_COLUMN_WIDTH = 36;
|
|
259
263
|
const EMPTY_DEFAULT_ADD_PROPERTY_COLUMN_WIDTH = 220;
|
|
260
264
|
const EMPTY_DEFAULT_BLANK_ROW_COUNT = 5;
|
|
261
265
|
const DATABASE_DRAG_THRESHOLD = 6;
|
|
@@ -266,6 +270,7 @@ const DATABASE_VIEW_TYPES: ContentDatabaseViewType[] = [
|
|
|
266
270
|
"list",
|
|
267
271
|
"timeline",
|
|
268
272
|
"calendar",
|
|
273
|
+
"form",
|
|
269
274
|
];
|
|
270
275
|
const DATABASE_OPEN_PAGES_IN: ContentDatabaseOpenPagesIn[] = [
|
|
271
276
|
"preview",
|
|
@@ -1330,6 +1335,10 @@ function DatabaseTable({
|
|
|
1330
1335
|
updateActiveView((view) => ({ ...view, openPagesIn }));
|
|
1331
1336
|
}
|
|
1332
1337
|
|
|
1338
|
+
function setFormQuestions(formQuestions: ContentDatabaseFormQuestion[]) {
|
|
1339
|
+
updateActiveView((view) => ({ ...view, formQuestions }));
|
|
1340
|
+
}
|
|
1341
|
+
|
|
1333
1342
|
function setGroupCollapsed(groupId: string, collapsed: boolean) {
|
|
1334
1343
|
updateActiveView((view) =>
|
|
1335
1344
|
setDatabaseViewCollapsedGroup(view, groupId, collapsed),
|
|
@@ -1805,7 +1814,16 @@ function DatabaseTable({
|
|
|
1805
1814
|
}}
|
|
1806
1815
|
/>
|
|
1807
1816
|
|
|
1808
|
-
{activeView.type === "
|
|
1817
|
+
{activeView.type === "form" ? (
|
|
1818
|
+
<DatabaseFormView
|
|
1819
|
+
databaseId={databaseId}
|
|
1820
|
+
databaseDocumentId={document.id}
|
|
1821
|
+
databaseTitle={data?.database.title ?? document.title}
|
|
1822
|
+
view={activeView}
|
|
1823
|
+
properties={orderedProperties}
|
|
1824
|
+
canEdit={canEdit}
|
|
1825
|
+
/>
|
|
1826
|
+
) : activeView.type === "board" ? (
|
|
1809
1827
|
<DatabaseBoardView
|
|
1810
1828
|
activeView={activeView}
|
|
1811
1829
|
properties={orderedProperties}
|
|
@@ -2177,6 +2195,7 @@ function DatabaseTable({
|
|
|
2177
2195
|
}
|
|
2178
2196
|
onWrapCellsChange={setWrapCells}
|
|
2179
2197
|
onOpenPagesInChange={setOpenPagesIn}
|
|
2198
|
+
onFormQuestionsChange={setFormQuestions}
|
|
2180
2199
|
onPropertyHiddenChange={setPropertyHiddenInActiveView}
|
|
2181
2200
|
onPropertiesHiddenChange={setPropertiesHiddenInActiveView}
|
|
2182
2201
|
onGroupByChange={(propertyId) =>
|
|
@@ -3812,7 +3831,7 @@ function DatabaseTableView({
|
|
|
3812
3831
|
/>
|
|
3813
3832
|
) : null}
|
|
3814
3833
|
<div
|
|
3815
|
-
className="grid border-y border-border/
|
|
3834
|
+
className="grid border-y border-border/35 text-xs font-medium text-muted-foreground/80"
|
|
3816
3835
|
style={{
|
|
3817
3836
|
gridTemplateColumns: databaseGridColumns(
|
|
3818
3837
|
properties,
|
|
@@ -3871,7 +3890,7 @@ function DatabaseTableView({
|
|
|
3871
3890
|
className={cn(
|
|
3872
3891
|
"flex h-8 items-center",
|
|
3873
3892
|
cleanDefaultTable
|
|
3874
|
-
? "justify-start border-r border-border/
|
|
3893
|
+
? "justify-start border-r border-border/30 px-1"
|
|
3875
3894
|
: "justify-center",
|
|
3876
3895
|
)}
|
|
3877
3896
|
>
|
|
@@ -4102,11 +4121,7 @@ function DatabaseActiveConstraintsBar({
|
|
|
4102
4121
|
return null;
|
|
4103
4122
|
const hasSearchOrSortConstraints =
|
|
4104
4123
|
searchQuery.trim().length > 0 || sorts.length > 0;
|
|
4105
|
-
const showViewActionControls =
|
|
4106
|
-
hasPersonalQueryChanges ||
|
|
4107
|
-
constraintCount > 0 ||
|
|
4108
|
-
filters.length > 0 ||
|
|
4109
|
-
hasSearchOrSortConstraints;
|
|
4124
|
+
const showViewActionControls = hasPersonalQueryChanges;
|
|
4110
4125
|
const filterEntries = filters.map((filter, index) => ({ filter, index }));
|
|
4111
4126
|
const advancedFilterEntries = filterEntries.filter(({ filter }) =>
|
|
4112
4127
|
isAdvancedDatabaseFilter(filter),
|
|
@@ -4117,7 +4132,7 @@ function DatabaseActiveConstraintsBar({
|
|
|
4117
4132
|
const hasSortFilterDivider = sorts.length > 0 && filterEntries.length > 0;
|
|
4118
4133
|
|
|
4119
4134
|
return (
|
|
4120
|
-
<div className="
|
|
4135
|
+
<div className="flex min-h-8 flex-wrap items-center gap-1 py-0.5 text-xs text-muted-foreground">
|
|
4121
4136
|
{sorts.map((sort, index) => (
|
|
4122
4137
|
<DatabaseInlineSortControl
|
|
4123
4138
|
key={`${sort.key}-${index}`}
|
|
@@ -4202,7 +4217,7 @@ function DatabaseActiveConstraintsBar({
|
|
|
4202
4217
|
/>
|
|
4203
4218
|
) : null}
|
|
4204
4219
|
<div className="ml-auto flex items-center gap-1 pl-2">
|
|
4205
|
-
{hasSearchOrSortConstraints ? (
|
|
4220
|
+
{hasSearchOrSortConstraints && !hasPersonalQueryChanges ? (
|
|
4206
4221
|
<Button
|
|
4207
4222
|
type="button"
|
|
4208
4223
|
size="sm"
|
|
@@ -4315,7 +4330,7 @@ function DatabaseInlineSortControl({
|
|
|
4315
4330
|
size="sm"
|
|
4316
4331
|
variant="ghost"
|
|
4317
4332
|
className={cn(
|
|
4318
|
-
"relative h-7 max-w-[16rem] rounded border border-[#2383e2]/30 bg-[#2383e2]/10 px-2 text-xs font-normal text-[#0f5ea8] shadow-none hover:bg-[#2383e2]/15 focus-visible:border-[#2383e2]/40 focus-visible:ring-[#2383e2]/25",
|
|
4333
|
+
"relative h-7 max-w-[16rem] rounded border border-[#2383e2]/30 bg-[#2383e2]/10 px-2 text-xs font-normal text-[#0f5ea8] shadow-none hover:bg-[#2383e2]/15 focus-visible:border-[#2383e2]/40 focus-visible:ring-[#2383e2]/25 dark:border-[#529cca]/35 dark:bg-[#529cca]/15 dark:text-[#8ec7ff] dark:hover:bg-[#529cca]/20",
|
|
4319
4334
|
open && "border-[#2383e2]/40 bg-[#2383e2]/15",
|
|
4320
4335
|
)}
|
|
4321
4336
|
>
|
|
@@ -4654,7 +4669,7 @@ function DatabaseAdvancedFilterGroupControl({
|
|
|
4654
4669
|
size="sm"
|
|
4655
4670
|
variant="ghost"
|
|
4656
4671
|
className={cn(
|
|
4657
|
-
"relative h-7 rounded border border-[#2383e2]/30 bg-[#2383e2]/10 px-2 text-xs font-normal text-[#0f5ea8] shadow-none hover:bg-[#2383e2]/15 focus-visible:border-[#2383e2]/40 focus-visible:ring-[#2383e2]/25",
|
|
4672
|
+
"relative h-7 rounded border border-[#2383e2]/30 bg-[#2383e2]/10 px-2 text-xs font-normal text-[#0f5ea8] shadow-none hover:bg-[#2383e2]/15 focus-visible:border-[#2383e2]/40 focus-visible:ring-[#2383e2]/25 dark:border-[#529cca]/35 dark:bg-[#529cca]/15 dark:text-[#8ec7ff] dark:hover:bg-[#529cca]/20",
|
|
4658
4673
|
open && "border-[#2383e2]/40 bg-[#2383e2]/15",
|
|
4659
4674
|
)}
|
|
4660
4675
|
>
|
|
@@ -5172,7 +5187,7 @@ function DatabaseInlineFilterControl({
|
|
|
5172
5187
|
className={cn(
|
|
5173
5188
|
"relative h-7 max-w-[16rem] rounded border border-border/70 bg-background px-2 text-xs font-normal text-foreground shadow-none hover:bg-muted focus-visible:border-[#2383e2]/40 focus-visible:ring-[#2383e2]/25",
|
|
5174
5189
|
filterIsComplete &&
|
|
5175
|
-
"border-[#2383e2]/30 bg-[#2383e2]/10 text-[#0f5ea8] hover:bg-[#2383e2]/15",
|
|
5190
|
+
"border-[#2383e2]/30 bg-[#2383e2]/10 text-[#0f5ea8] hover:bg-[#2383e2]/15 dark:border-[#529cca]/35 dark:bg-[#529cca]/15 dark:text-[#8ec7ff] dark:hover:bg-[#529cca]/20",
|
|
5176
5191
|
open && "border-[#2383e2]/40 bg-[#2383e2]/15",
|
|
5177
5192
|
!filterIsComplete && "text-muted-foreground",
|
|
5178
5193
|
)}
|
|
@@ -5445,6 +5460,7 @@ function DatabaseSettingsPanelSheet({
|
|
|
5445
5460
|
onViewTypeChange,
|
|
5446
5461
|
onWrapCellsChange,
|
|
5447
5462
|
onOpenPagesInChange,
|
|
5463
|
+
onFormQuestionsChange,
|
|
5448
5464
|
onPropertyHiddenChange,
|
|
5449
5465
|
onPropertiesHiddenChange,
|
|
5450
5466
|
onGroupByChange,
|
|
@@ -5487,6 +5503,7 @@ function DatabaseSettingsPanelSheet({
|
|
|
5487
5503
|
onViewTypeChange: (type: ContentDatabaseViewType) => void;
|
|
5488
5504
|
onWrapCellsChange: (wrapCells: boolean) => void;
|
|
5489
5505
|
onOpenPagesInChange: (openPagesIn: ContentDatabaseOpenPagesIn) => void;
|
|
5506
|
+
onFormQuestionsChange: (formQuestions: ContentDatabaseFormQuestion[]) => void;
|
|
5490
5507
|
onPropertyHiddenChange: (propertyId: string, hidden: boolean) => void;
|
|
5491
5508
|
onPropertiesHiddenChange: (propertyIds: string[], hidden: boolean) => void;
|
|
5492
5509
|
onGroupByChange: (propertyId: string | null) => void;
|
|
@@ -5586,9 +5603,11 @@ function DatabaseSettingsPanelSheet({
|
|
|
5586
5603
|
) : panel === "layout" ? (
|
|
5587
5604
|
<DatabaseSettingsLayoutPanel
|
|
5588
5605
|
activeView={activeView}
|
|
5606
|
+
properties={properties}
|
|
5589
5607
|
onViewTypeChange={onViewTypeChange}
|
|
5590
5608
|
onWrapCellsChange={onWrapCellsChange}
|
|
5591
5609
|
onOpenPagesInChange={onOpenPagesInChange}
|
|
5610
|
+
onFormQuestionsChange={onFormQuestionsChange}
|
|
5592
5611
|
/>
|
|
5593
5612
|
) : panel === "property_visibility" ? (
|
|
5594
5613
|
<DatabaseSettingsPropertyVisibilityPanel
|
|
@@ -5950,28 +5969,6 @@ function DatabaseSettingsSourcePanel({
|
|
|
5950
5969
|
isBuilderSource &&
|
|
5951
5970
|
(source?.syncState === "error" || Boolean(source?.lastError));
|
|
5952
5971
|
|
|
5953
|
-
// Auto-sync: the manual Refresh button is gone, so pull the read-only
|
|
5954
|
-
// snapshot when the panel opens and whenever the window regains focus.
|
|
5955
|
-
// Throttled so rapid focus changes don't hammer Builder; the refresh
|
|
5956
|
-
// mutation is silent (no toast), so this stays quiet in the background.
|
|
5957
|
-
const refreshSourceRef = useRef(onRefreshSource);
|
|
5958
|
-
refreshSourceRef.current = onRefreshSource;
|
|
5959
|
-
const lastAutoSyncRef = useRef(0);
|
|
5960
|
-
const autoSyncEnabled = Boolean(source) && isBuilderSource && canEdit;
|
|
5961
|
-
useEffect(() => {
|
|
5962
|
-
if (!autoSyncEnabled) return;
|
|
5963
|
-
const maybeSync = () => {
|
|
5964
|
-
const now = Date.now();
|
|
5965
|
-
if (now - lastAutoSyncRef.current < 15_000) return;
|
|
5966
|
-
lastAutoSyncRef.current = now;
|
|
5967
|
-
refreshSourceRef.current();
|
|
5968
|
-
};
|
|
5969
|
-
maybeSync();
|
|
5970
|
-
const onFocus = () => maybeSync();
|
|
5971
|
-
window.addEventListener("focus", onFocus);
|
|
5972
|
-
return () => window.removeEventListener("focus", onFocus);
|
|
5973
|
-
}, [autoSyncEnabled]);
|
|
5974
|
-
|
|
5975
5972
|
const top = nav[nav.length - 1];
|
|
5976
5973
|
|
|
5977
5974
|
// ── Sources list (root) ───────────────────────────────────────────────
|
|
@@ -6270,23 +6267,38 @@ function DatabaseSettingsSourcePanel({
|
|
|
6270
6267
|
<span className="truncate font-medium" title={source.sourceName}>
|
|
6271
6268
|
{source.sourceName}
|
|
6272
6269
|
</span>
|
|
6273
|
-
|
|
6274
|
-
|
|
6275
|
-
|
|
6276
|
-
<
|
|
6277
|
-
|
|
6278
|
-
|
|
6270
|
+
<div className="flex shrink-0 items-center gap-1">
|
|
6271
|
+
{isBuilderSource ? (
|
|
6272
|
+
source.capabilities.liveWritesEnabled ? (
|
|
6273
|
+
<span className="inline-flex items-center gap-1 rounded-full border border-border px-2 py-0.5 text-[11px] font-medium text-foreground">
|
|
6274
|
+
<IconPencil className="size-3" />
|
|
6275
|
+
{dbText("liveWritesOn")}
|
|
6276
|
+
</span>
|
|
6277
|
+
) : (
|
|
6278
|
+
<span className="inline-flex items-center gap-1 rounded-full border border-border px-2 py-0.5 text-[11px] font-medium text-muted-foreground">
|
|
6279
|
+
<IconLock className="size-3" />
|
|
6280
|
+
{dbText("readOnly")}
|
|
6281
|
+
</span>
|
|
6282
|
+
)
|
|
6279
6283
|
) : (
|
|
6280
|
-
<span className="
|
|
6281
|
-
|
|
6282
|
-
{dbText("readOnly")}
|
|
6284
|
+
<span className="rounded-full border border-border px-2 py-0.5 text-[11px] uppercase tracking-wide text-muted-foreground">
|
|
6285
|
+
{source.syncState}
|
|
6283
6286
|
</span>
|
|
6284
|
-
)
|
|
6285
|
-
|
|
6286
|
-
|
|
6287
|
-
|
|
6288
|
-
|
|
6289
|
-
|
|
6287
|
+
)}
|
|
6288
|
+
{isBuilderSource && !builderSyncFailed ? (
|
|
6289
|
+
<Button
|
|
6290
|
+
type="button"
|
|
6291
|
+
variant="ghost"
|
|
6292
|
+
size="sm"
|
|
6293
|
+
className="h-7 gap-1 px-2 text-xs"
|
|
6294
|
+
disabled={!canEdit || sourceActionPending}
|
|
6295
|
+
onClick={() => onRefreshSource(source.id)}
|
|
6296
|
+
>
|
|
6297
|
+
<IconRefresh className="size-3" />
|
|
6298
|
+
{dbText("refreshSource")}
|
|
6299
|
+
</Button>
|
|
6300
|
+
) : null}
|
|
6301
|
+
</div>
|
|
6290
6302
|
</div>
|
|
6291
6303
|
<div className="min-w-0 break-words text-xs text-muted-foreground">
|
|
6292
6304
|
{builderSyncFailed ? (
|
|
@@ -8206,14 +8218,18 @@ function DatabaseSettingsSwitch({
|
|
|
8206
8218
|
|
|
8207
8219
|
function DatabaseSettingsLayoutPanel({
|
|
8208
8220
|
activeView,
|
|
8221
|
+
properties,
|
|
8209
8222
|
onViewTypeChange,
|
|
8210
8223
|
onWrapCellsChange,
|
|
8211
8224
|
onOpenPagesInChange,
|
|
8225
|
+
onFormQuestionsChange,
|
|
8212
8226
|
}: {
|
|
8213
8227
|
activeView: ContentDatabaseView;
|
|
8228
|
+
properties: DocumentProperty[];
|
|
8214
8229
|
onViewTypeChange: (type: ContentDatabaseViewType) => void;
|
|
8215
8230
|
onWrapCellsChange: (wrapCells: boolean) => void;
|
|
8216
8231
|
onOpenPagesInChange: (openPagesIn: ContentDatabaseOpenPagesIn) => void;
|
|
8232
|
+
onFormQuestionsChange: (formQuestions: ContentDatabaseFormQuestion[]) => void;
|
|
8217
8233
|
}) {
|
|
8218
8234
|
const wrapCells = activeView.wrapCells === true;
|
|
8219
8235
|
const openPagesIn = activeView.openPagesIn ?? "preview";
|
|
@@ -8251,6 +8267,151 @@ function DatabaseSettingsLayoutPanel({
|
|
|
8251
8267
|
value={openPagesIn}
|
|
8252
8268
|
onChange={onOpenPagesInChange}
|
|
8253
8269
|
/>
|
|
8270
|
+
{activeView.type === "form" ? (
|
|
8271
|
+
<DatabaseFormQuestionsSetting
|
|
8272
|
+
activeView={activeView}
|
|
8273
|
+
properties={properties}
|
|
8274
|
+
onChange={onFormQuestionsChange}
|
|
8275
|
+
/>
|
|
8276
|
+
) : null}
|
|
8277
|
+
</div>
|
|
8278
|
+
);
|
|
8279
|
+
}
|
|
8280
|
+
|
|
8281
|
+
function DatabaseFormQuestionsSetting({
|
|
8282
|
+
activeView,
|
|
8283
|
+
properties,
|
|
8284
|
+
onChange,
|
|
8285
|
+
}: {
|
|
8286
|
+
activeView: ContentDatabaseView;
|
|
8287
|
+
properties: DocumentProperty[];
|
|
8288
|
+
onChange: (questions: ContentDatabaseFormQuestion[]) => void;
|
|
8289
|
+
}) {
|
|
8290
|
+
const questions = contentDatabaseFormQuestions(activeView, properties);
|
|
8291
|
+
const propertyById = new Map(
|
|
8292
|
+
properties.map((property) => [property.definition.id, property]),
|
|
8293
|
+
);
|
|
8294
|
+
|
|
8295
|
+
function updateQuestion(
|
|
8296
|
+
key: string,
|
|
8297
|
+
patch: Partial<ContentDatabaseFormQuestion>,
|
|
8298
|
+
) {
|
|
8299
|
+
onChange(
|
|
8300
|
+
questions.map((question) =>
|
|
8301
|
+
question.key === key ? { ...question, ...patch } : question,
|
|
8302
|
+
),
|
|
8303
|
+
);
|
|
8304
|
+
}
|
|
8305
|
+
|
|
8306
|
+
function moveQuestion(index: number, direction: -1 | 1) {
|
|
8307
|
+
const targetIndex = index + direction;
|
|
8308
|
+
if (targetIndex < 0 || targetIndex >= questions.length) return;
|
|
8309
|
+
const next = [...questions];
|
|
8310
|
+
const target = next[targetIndex];
|
|
8311
|
+
next[targetIndex] = next[index];
|
|
8312
|
+
next[index] = target;
|
|
8313
|
+
onChange(next);
|
|
8314
|
+
}
|
|
8315
|
+
|
|
8316
|
+
return (
|
|
8317
|
+
<div className="grid gap-2 border-t border-border pt-4">
|
|
8318
|
+
<div className="grid gap-0.5">
|
|
8319
|
+
<div className="text-sm font-medium text-foreground">
|
|
8320
|
+
{dbText("formQuestions")}
|
|
8321
|
+
</div>
|
|
8322
|
+
<div className="text-xs text-muted-foreground">
|
|
8323
|
+
{dbText("formQuestionsDescription")}
|
|
8324
|
+
</div>
|
|
8325
|
+
</div>
|
|
8326
|
+
<div className="grid gap-1">
|
|
8327
|
+
{questions.map((question, index) => {
|
|
8328
|
+
const label =
|
|
8329
|
+
question.key === "name"
|
|
8330
|
+
? dbText("formName")
|
|
8331
|
+
: (propertyById.get(question.key)?.definition.name ??
|
|
8332
|
+
question.key);
|
|
8333
|
+
return (
|
|
8334
|
+
<div
|
|
8335
|
+
key={question.key}
|
|
8336
|
+
className="grid grid-cols-[minmax(0,1fr)_auto] items-center gap-2 rounded-md border border-border px-2 py-2"
|
|
8337
|
+
>
|
|
8338
|
+
<div className="min-w-0 truncate text-sm text-foreground">
|
|
8339
|
+
{label}
|
|
8340
|
+
</div>
|
|
8341
|
+
<div className="flex items-center gap-1">
|
|
8342
|
+
<button
|
|
8343
|
+
type="button"
|
|
8344
|
+
aria-label={dbText("formMoveQuestionUp", { name: label })}
|
|
8345
|
+
disabled={index === 0}
|
|
8346
|
+
className="flex size-7 items-center justify-center rounded text-muted-foreground hover:bg-muted disabled:opacity-30"
|
|
8347
|
+
onClick={() => moveQuestion(index, -1)}
|
|
8348
|
+
>
|
|
8349
|
+
<IconArrowUp className="size-3.5" />
|
|
8350
|
+
</button>
|
|
8351
|
+
<button
|
|
8352
|
+
type="button"
|
|
8353
|
+
aria-label={dbText("formMoveQuestionDown", { name: label })}
|
|
8354
|
+
disabled={index === questions.length - 1}
|
|
8355
|
+
className="flex size-7 items-center justify-center rounded text-muted-foreground hover:bg-muted disabled:opacity-30"
|
|
8356
|
+
onClick={() => moveQuestion(index, 1)}
|
|
8357
|
+
>
|
|
8358
|
+
<IconArrowDown className="size-3.5" />
|
|
8359
|
+
</button>
|
|
8360
|
+
</div>
|
|
8361
|
+
<div className="col-span-2 flex items-center justify-between gap-3">
|
|
8362
|
+
<button
|
|
8363
|
+
type="button"
|
|
8364
|
+
role="checkbox"
|
|
8365
|
+
aria-checked={question.enabled}
|
|
8366
|
+
className="flex items-center gap-2 text-xs text-muted-foreground"
|
|
8367
|
+
onClick={() =>
|
|
8368
|
+
updateQuestion(question.key, {
|
|
8369
|
+
enabled: !question.enabled,
|
|
8370
|
+
required: question.enabled ? false : question.required,
|
|
8371
|
+
})
|
|
8372
|
+
}
|
|
8373
|
+
>
|
|
8374
|
+
<span
|
|
8375
|
+
className={cn(
|
|
8376
|
+
"flex size-4 items-center justify-center rounded border border-input",
|
|
8377
|
+
question.enabled &&
|
|
8378
|
+
"border-primary bg-primary text-primary-foreground",
|
|
8379
|
+
)}
|
|
8380
|
+
>
|
|
8381
|
+
{question.enabled ? <IconCheck className="size-3" /> : null}
|
|
8382
|
+
</span>
|
|
8383
|
+
{dbText("formShowQuestion")}
|
|
8384
|
+
</button>
|
|
8385
|
+
<button
|
|
8386
|
+
type="button"
|
|
8387
|
+
role="checkbox"
|
|
8388
|
+
aria-checked={question.required}
|
|
8389
|
+
disabled={!question.enabled}
|
|
8390
|
+
className="flex items-center gap-2 text-xs text-muted-foreground disabled:opacity-40"
|
|
8391
|
+
onClick={() =>
|
|
8392
|
+
updateQuestion(question.key, {
|
|
8393
|
+
required: !question.required,
|
|
8394
|
+
})
|
|
8395
|
+
}
|
|
8396
|
+
>
|
|
8397
|
+
<span
|
|
8398
|
+
className={cn(
|
|
8399
|
+
"flex size-4 items-center justify-center rounded border border-input",
|
|
8400
|
+
question.required &&
|
|
8401
|
+
"border-primary bg-primary text-primary-foreground",
|
|
8402
|
+
)}
|
|
8403
|
+
>
|
|
8404
|
+
{question.required ? (
|
|
8405
|
+
<IconCheck className="size-3" />
|
|
8406
|
+
) : null}
|
|
8407
|
+
</span>
|
|
8408
|
+
{dbText("formRequired")}
|
|
8409
|
+
</button>
|
|
8410
|
+
</div>
|
|
8411
|
+
</div>
|
|
8412
|
+
);
|
|
8413
|
+
})}
|
|
8414
|
+
</div>
|
|
8254
8415
|
</div>
|
|
8255
8416
|
);
|
|
8256
8417
|
}
|
|
@@ -11784,7 +11945,7 @@ function NewDatabaseRow({
|
|
|
11784
11945
|
aria-label={dbText("newDatabaseRow")}
|
|
11785
11946
|
disabled={disabled}
|
|
11786
11947
|
className={cn(
|
|
11787
|
-
"grid w-full border-t border-border/
|
|
11948
|
+
"grid w-full border-t border-border/35 text-left text-sm text-muted-foreground transition-colors hover:bg-muted/35 hover:text-foreground focus-visible:bg-muted/35 focus-visible:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60",
|
|
11788
11949
|
databaseTableRowDensityClass(rowDensity),
|
|
11789
11950
|
)}
|
|
11790
11951
|
style={{
|
|
@@ -11799,7 +11960,7 @@ function NewDatabaseRow({
|
|
|
11799
11960
|
>
|
|
11800
11961
|
<span
|
|
11801
11962
|
className={cn(
|
|
11802
|
-
"flex min-w-0 items-center gap-2 border-r border-border/
|
|
11963
|
+
"flex min-w-0 items-center gap-2 border-r border-border/35",
|
|
11803
11964
|
databaseTableCellDensityClass(rowDensity),
|
|
11804
11965
|
)}
|
|
11805
11966
|
>
|
|
@@ -11815,7 +11976,7 @@ function NewDatabaseRow({
|
|
|
11815
11976
|
{properties.map((property) => (
|
|
11816
11977
|
<span
|
|
11817
11978
|
key={property.definition.id}
|
|
11818
|
-
className="border-r border-border/
|
|
11979
|
+
className="border-r border-border/35 last:border-r-0"
|
|
11819
11980
|
/>
|
|
11820
11981
|
))}
|
|
11821
11982
|
<span />
|
|
@@ -11835,7 +11996,7 @@ function DatabaseBlankDefaultRows({
|
|
|
11835
11996
|
{Array.from({ length: rowCount }).map((_, index) => (
|
|
11836
11997
|
<div
|
|
11837
11998
|
key={index}
|
|
11838
|
-
className="grid h-
|
|
11999
|
+
className="grid h-8 border-t border-border/30"
|
|
11839
12000
|
style={{
|
|
11840
12001
|
gridTemplateColumns: databaseGridColumns(
|
|
11841
12002
|
[],
|
|
@@ -11922,6 +12083,7 @@ export function createDatabaseView(
|
|
|
11922
12083
|
wrapCells: values.wrapCells === true,
|
|
11923
12084
|
rowDensity: normalizeClientDatabaseRowDensity(values.rowDensity),
|
|
11924
12085
|
openPagesIn: normalizeClientDatabaseOpenPagesIn(values.openPagesIn),
|
|
12086
|
+
formQuestions: normalizeClientDatabaseFormQuestions(values.formQuestions),
|
|
11925
12087
|
};
|
|
11926
12088
|
}
|
|
11927
12089
|
|
|
@@ -12076,6 +12238,7 @@ export function duplicateDatabaseView(
|
|
|
12076
12238
|
wrapCells: view.wrapCells,
|
|
12077
12239
|
rowDensity: view.rowDensity,
|
|
12078
12240
|
openPagesIn: view.openPagesIn,
|
|
12241
|
+
formQuestions: view.formQuestions,
|
|
12079
12242
|
},
|
|
12080
12243
|
view.type,
|
|
12081
12244
|
);
|
|
@@ -12168,7 +12331,8 @@ function normalizeClientDatabaseView(
|
|
|
12168
12331
|
value.type === "list" ||
|
|
12169
12332
|
value.type === "gallery" ||
|
|
12170
12333
|
value.type === "calendar" ||
|
|
12171
|
-
value.type === "timeline"
|
|
12334
|
+
value.type === "timeline" ||
|
|
12335
|
+
value.type === "form"
|
|
12172
12336
|
? value.type
|
|
12173
12337
|
: "table";
|
|
12174
12338
|
return createDatabaseView(
|
|
@@ -12203,11 +12367,31 @@ function normalizeClientDatabaseView(
|
|
|
12203
12367
|
wrapCells: value.wrapCells === true,
|
|
12204
12368
|
rowDensity: normalizeClientDatabaseRowDensity(value.rowDensity),
|
|
12205
12369
|
openPagesIn: normalizeClientDatabaseOpenPagesIn(value.openPagesIn),
|
|
12370
|
+
formQuestions: normalizeClientDatabaseFormQuestions(value.formQuestions),
|
|
12206
12371
|
},
|
|
12207
12372
|
type,
|
|
12208
12373
|
);
|
|
12209
12374
|
}
|
|
12210
12375
|
|
|
12376
|
+
function normalizeClientDatabaseFormQuestions(value: unknown) {
|
|
12377
|
+
if (!Array.isArray(value)) return [];
|
|
12378
|
+
const seen = new Set<string>();
|
|
12379
|
+
return value.flatMap((candidate) => {
|
|
12380
|
+
if (!candidate || typeof candidate !== "object") return [];
|
|
12381
|
+
const question = candidate as Partial<ContentDatabaseFormQuestion>;
|
|
12382
|
+
const key = typeof question.key === "string" ? question.key.trim() : "";
|
|
12383
|
+
if (!key || seen.has(key)) return [];
|
|
12384
|
+
seen.add(key);
|
|
12385
|
+
return [
|
|
12386
|
+
{
|
|
12387
|
+
key,
|
|
12388
|
+
enabled: question.enabled !== false,
|
|
12389
|
+
required: question.required === true,
|
|
12390
|
+
},
|
|
12391
|
+
];
|
|
12392
|
+
});
|
|
12393
|
+
}
|
|
12394
|
+
|
|
12211
12395
|
function normalizeClientCalculations(value: unknown) {
|
|
12212
12396
|
if (!value || typeof value !== "object" || Array.isArray(value)) return {};
|
|
12213
12397
|
return Object.fromEntries(
|
|
@@ -12683,6 +12867,7 @@ function databaseViewIcon(type: ContentDatabaseViewType) {
|
|
|
12683
12867
|
if (type === "gallery") return IconLayoutGrid;
|
|
12684
12868
|
if (type === "calendar") return IconCalendar;
|
|
12685
12869
|
if (type === "timeline") return IconTimeline;
|
|
12870
|
+
if (type === "form") return IconForms;
|
|
12686
12871
|
return IconTable;
|
|
12687
12872
|
}
|
|
12688
12873
|
|
|
@@ -12692,6 +12877,7 @@ function databaseViewDefaultName(type: ContentDatabaseViewType) {
|
|
|
12692
12877
|
if (type === "gallery") return "Gallery";
|
|
12693
12878
|
if (type === "calendar") return "Calendar";
|
|
12694
12879
|
if (type === "timeline") return "Timeline";
|
|
12880
|
+
if (type === "form") return "Form";
|
|
12695
12881
|
return "Table";
|
|
12696
12882
|
}
|
|
12697
12883
|
|
|
@@ -13839,7 +14025,7 @@ function DatabaseNameHeader({
|
|
|
13839
14025
|
const partiallySelected = selectedCount > 0 && !allSelected;
|
|
13840
14026
|
|
|
13841
14027
|
return (
|
|
13842
|
-
<div className="group flex h-8 min-w-0 items-center border-r border-border/
|
|
14028
|
+
<div className="group flex h-8 min-w-0 items-center border-r border-border/35 px-1">
|
|
13843
14029
|
<DatabaseRowSelectionControl
|
|
13844
14030
|
checked={allSelected}
|
|
13845
14031
|
indeterminate={partiallySelected}
|
|
@@ -14639,7 +14825,7 @@ function DatabasePropertyHeader({
|
|
|
14639
14825
|
<div
|
|
14640
14826
|
data-database-property-id={property.definition.id}
|
|
14641
14827
|
className={cn(
|
|
14642
|
-
"group relative flex h-8 min-w-0 items-center border-r border-border/
|
|
14828
|
+
"group relative flex h-8 min-w-0 items-center border-r border-border/35 px-1 transition-colors",
|
|
14643
14829
|
canEdit && "cursor-grab active:cursor-grabbing",
|
|
14644
14830
|
isDragging && "opacity-45",
|
|
14645
14831
|
dropSide && "bg-accent/40",
|
|
@@ -16675,19 +16861,19 @@ export function normalizeClientDatabaseFilterMode(
|
|
|
16675
16861
|
export function databaseTableRowDensityClass(rowDensity: DatabaseRowDensity) {
|
|
16676
16862
|
if (rowDensity === "compact") return "min-h-8";
|
|
16677
16863
|
if (rowDensity === "comfortable") return "min-h-12";
|
|
16678
|
-
return "min-h-
|
|
16864
|
+
return "min-h-8";
|
|
16679
16865
|
}
|
|
16680
16866
|
|
|
16681
16867
|
export function databaseTableCellDensityClass(rowDensity: DatabaseRowDensity) {
|
|
16682
16868
|
if (rowDensity === "compact") return "px-2 py-0.5";
|
|
16683
16869
|
if (rowDensity === "comfortable") return "px-2.5 py-2";
|
|
16684
|
-
return "px-2 py-
|
|
16870
|
+
return "px-2 py-0.5";
|
|
16685
16871
|
}
|
|
16686
16872
|
|
|
16687
16873
|
function databaseRowNameCellDensityClass(rowDensity: DatabaseRowDensity) {
|
|
16688
16874
|
if (rowDensity === "compact") return "px-1 py-0.5";
|
|
16689
16875
|
if (rowDensity === "comfortable") return "px-1.5 py-2";
|
|
16690
|
-
return "px-1 py-
|
|
16876
|
+
return "px-1 py-0.5";
|
|
16691
16877
|
}
|
|
16692
16878
|
|
|
16693
16879
|
function databaseTitleButtonDensityClass(
|
|
@@ -16868,7 +17054,7 @@ function DatabaseTableRow({
|
|
|
16868
17054
|
return (
|
|
16869
17055
|
<div
|
|
16870
17056
|
className={cn(
|
|
16871
|
-
"group grid border-t border-border/
|
|
17057
|
+
"group grid border-t border-border/35 transition-colors",
|
|
16872
17058
|
databaseTableRowDensityClass(rowDensity),
|
|
16873
17059
|
selected && "bg-muted/20",
|
|
16874
17060
|
isDragging && "opacity-50",
|
|
@@ -16930,7 +17116,7 @@ function DatabaseTableRow({
|
|
|
16930
17116
|
<div
|
|
16931
17117
|
key={property.definition.id}
|
|
16932
17118
|
className={cn(
|
|
16933
|
-
"flex min-w-0 border-r border-border/
|
|
17119
|
+
"flex min-w-0 border-r border-border/35 last:border-r-0 hover:bg-muted/25",
|
|
16934
17120
|
databaseTableCellDensityClass(rowDensity),
|
|
16935
17121
|
wrapCells ? "items-start" : "items-center",
|
|
16936
17122
|
)}
|
|
@@ -17197,7 +17383,7 @@ function RowNameCell({
|
|
|
17197
17383
|
return (
|
|
17198
17384
|
<div
|
|
17199
17385
|
className={cn(
|
|
17200
|
-
"group group/name flex min-w-0 gap-1 border-r border-border/
|
|
17386
|
+
"group group/name flex min-w-0 gap-1 border-r border-border/35 hover:bg-muted/25",
|
|
17201
17387
|
databaseRowNameCellDensityClass(rowDensity),
|
|
17202
17388
|
wrapCells ? "items-start" : "items-center",
|
|
17203
17389
|
)}
|