@agent-native/core 0.83.0 → 0.84.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +34 -0
- package/corpus/core/README.md +2 -2
- package/corpus/core/docs/content/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/evals.mdx +34 -12
- package/corpus/core/docs/content/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/ar-SA/evals.mdx +7 -0
- package/corpus/core/docs/content/locales/ar-SA/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/de-DE/evals.mdx +8 -0
- package/corpus/core/docs/content/locales/de-DE/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/es-ES/evals.mdx +8 -0
- package/corpus/core/docs/content/locales/es-ES/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/fr-FR/evals.mdx +8 -0
- package/corpus/core/docs/content/locales/fr-FR/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/hi-IN/evals.mdx +8 -0
- package/corpus/core/docs/content/locales/hi-IN/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/ja-JP/evals.mdx +7 -0
- package/corpus/core/docs/content/locales/ja-JP/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/ko-KR/evals.mdx +7 -0
- package/corpus/core/docs/content/locales/ko-KR/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/pt-BR/evals.mdx +8 -0
- package/corpus/core/docs/content/locales/pt-BR/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-CN/evals.mdx +7 -0
- package/corpus/core/docs/content/locales/zh-CN/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/template-chat.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/cloneable-saas.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-TW/evals.mdx +7 -0
- package/corpus/core/docs/content/locales/zh-TW/faq.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/template-chat.mdx +1 -1
- package/corpus/core/docs/content/template-chat.mdx +1 -1
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/engine/builtin.ts +1 -1
- package/corpus/core/src/agent/engine/output-tokens.ts +1 -1
- package/corpus/core/src/agent/harness/acp-adapter.ts +28 -4
- package/corpus/core/src/agent/harness/ai-sdk-adapter.ts +3 -0
- package/corpus/core/src/agent/harness/translate.ts +3 -0
- package/corpus/core/src/agent/harness/types.ts +1 -0
- package/corpus/core/src/agent/model-config.ts +34 -13
- package/corpus/core/src/agent/production-agent.ts +87 -10
- package/corpus/core/src/agent/thread-data-builder.ts +29 -4
- package/corpus/core/src/agent/tool-call-journal.ts +109 -48
- package/corpus/core/src/agent/types.ts +6 -1
- package/corpus/core/src/cli/design-connect.ts +106 -0
- package/corpus/core/src/cli/gateway-helpers.ts +17 -0
- package/corpus/core/src/cli/recap.ts +0 -2
- package/corpus/core/src/cli/skills.ts +54 -16
- package/corpus/core/src/cli/workspace-dev.ts +29 -5
- package/corpus/core/src/client/AssistantChat.tsx +89 -42
- package/corpus/core/src/client/DefaultSpinner.tsx +8 -1
- package/corpus/core/src/client/chat/message-components.tsx +49 -1
- package/corpus/core/src/client/chat/repo-helpers.ts +71 -0
- package/corpus/core/src/client/chat/run-recovery.tsx +15 -5
- package/corpus/core/src/client/components/ApiKeySettings.tsx +8 -8
- package/corpus/core/src/client/components/CodeRequiredDialog.tsx +26 -15
- package/corpus/core/src/client/components/MissingKeyCard.tsx +13 -6
- package/corpus/core/src/client/composer/TiptapComposer.tsx +4 -3
- package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +0 -1
- package/corpus/core/src/client/guided-questions.tsx +21 -27
- package/corpus/core/src/client/integrations/IntegrationCard.tsx +1 -1
- package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +1 -1
- package/corpus/core/src/client/onboarding/OnboardingBanner.tsx +2 -2
- package/corpus/core/src/client/onboarding/OnboardingPanel.tsx +23 -19
- package/corpus/core/src/client/resources/ResourceEditor.tsx +18 -10
- package/corpus/core/src/client/resources/ResourcesPanel.tsx +5 -1
- package/corpus/core/src/client/settings/SettingsPanel.tsx +8 -3
- package/corpus/core/src/client/settings/useBuilderStatus.ts +8 -41
- package/corpus/core/src/client/useProductionAgent.ts +6 -2
- package/corpus/core/src/deploy/build.ts +1 -1
- package/corpus/core/src/eval/define-eval.ts +4 -1
- package/corpus/core/src/eval/report.ts +23 -8
- package/corpus/core/src/eval/runner.ts +41 -6
- package/corpus/core/src/eval/types.ts +11 -0
- package/corpus/core/src/observability/traces.ts +3 -3
- package/corpus/core/src/onboarding/default-steps.ts +1 -1
- package/corpus/core/src/scripts/agent-engines/manage-agent-engine.ts +1 -1
- package/corpus/core/src/scripts/agent-engines/set-agent-engine.ts +1 -1
- package/corpus/core/src/server/agent-chat-plugin.ts +177 -81
- package/corpus/core/src/server/core-routes-plugin.ts +7 -1
- package/corpus/core/src/server/open-route.ts +59 -40
- package/corpus/core/src/shared/reasoning-effort.ts +2 -0
- package/corpus/core/src/sharing/access.ts +22 -2
- package/corpus/core/src/sharing/registry.ts +18 -0
- package/corpus/core/src/styles/agent-native.css +104 -20
- package/corpus/core/src/styles/rich-markdown-editor.css +11 -10
- package/corpus/templates/analytics/app/components/dashboard/CumulativeNetChart.tsx +10 -10
- package/corpus/templates/analytics/app/components/dashboard/RevenueChart.tsx +10 -10
- package/corpus/templates/analytics/app/components/dashboard/RevenueComparisonChart.tsx +6 -5
- package/corpus/templates/analytics/app/components/dashboard/TimeSeriesChart.tsx +9 -9
- package/corpus/templates/analytics/app/global.css +4 -0
- package/corpus/templates/analytics/app/lib/chart-theme.ts +13 -0
- package/corpus/templates/analytics/app/pages/adhoc/_shared/KpiChart.tsx +22 -24
- package/corpus/templates/analytics/changelog/2026-06-30-dashboard-charts-now-use-theme-aware-tooltip-and-grid-colors.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-30-fixed-ask-composer-spacing-so-the-chat-field-has-a-comfortab.md +6 -0
- package/corpus/templates/calendar/AGENTS.md +4 -0
- package/corpus/templates/calendar/actions/connect-google-calendar.ts +80 -0
- package/corpus/templates/calendar/changelog/2026-06-30-calendar-now-gives-the-agent-a-safe-google-connection-link-i.md +6 -0
- package/corpus/templates/calendar/server/plugins/agent-chat.ts +4 -0
- package/corpus/templates/content/AGENTS.md +9 -2
- package/corpus/templates/content/actions/_database-row-batch.ts +230 -0
- package/corpus/templates/content/actions/_database-utils.ts +17 -9
- package/corpus/templates/content/actions/_notion-action-utils.ts +26 -0
- package/corpus/templates/content/actions/connect-notion-status.ts +13 -4
- package/corpus/templates/content/actions/create-and-link-notion-page.ts +23 -0
- package/corpus/templates/content/actions/delete-database-items.ts +55 -0
- package/corpus/templates/content/actions/delete-document.ts +4 -4
- package/corpus/templates/content/actions/disconnect-notion.ts +16 -0
- package/corpus/templates/content/actions/duplicate-database-item.ts +1 -1
- package/corpus/templates/content/actions/duplicate-database-items.ts +191 -0
- package/corpus/templates/content/actions/link-notion-page.ts +10 -7
- package/corpus/templates/content/actions/list-notion-links.ts +3 -4
- package/corpus/templates/content/actions/pull-notion-page.ts +7 -9
- package/corpus/templates/content/actions/push-notion-page.ts +7 -9
- package/corpus/templates/content/actions/refresh-notion-sync-status.ts +24 -0
- package/corpus/templates/content/actions/resolve-notion-sync-conflict.ts +23 -0
- package/corpus/templates/content/actions/search-notion-pages.ts +67 -0
- package/corpus/templates/content/actions/unlink-notion-page.ts +23 -0
- package/corpus/templates/content/app/components/editor/BubbleToolbar.tsx +5 -5
- package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +27 -34
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +16 -13
- package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +10 -10
- package/corpus/templates/content/app/components/editor/NotionConflictBanner.tsx +1 -1
- package/corpus/templates/content/app/components/editor/NotionSyncBar.tsx +18 -9
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +27 -34
- package/corpus/templates/content/app/components/editor/database/navigation-state.ts +10 -4
- package/corpus/templates/content/app/components/sidebar/NotionButton.tsx +32 -17
- package/corpus/templates/content/app/global.css +6 -5
- package/corpus/templates/content/app/hooks/use-content-database.ts +35 -0
- package/corpus/templates/content/app/hooks/use-notion.ts +108 -99
- package/corpus/templates/content/changelog/2026-06-30-editor-floating-toolbars-now-use-theme-aware-colors-in-light.md +6 -0
- package/corpus/templates/content/package.json +3 -0
- package/corpus/templates/content/parity/README.md +69 -0
- package/corpus/templates/content/parity/eval-scenarios.ts +118 -0
- package/corpus/templates/content/parity/exceptions.allowlist.ts +17 -0
- package/corpus/templates/content/parity/matrix.md +28 -0
- package/corpus/templates/content/parity/matrix.ts +606 -0
- package/corpus/templates/content/parity/matrix.types.ts +42 -0
- package/corpus/templates/content/parity/parity-evals.eval.ts +4 -0
- package/corpus/templates/content/parity/render-matrix.ts +90 -0
- package/corpus/templates/content/parity/scenario-to-eval.ts +57 -0
- package/corpus/templates/content/shared/api.ts +11 -0
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +6 -1
- package/corpus/templates/design/actions/add-localhost-screens.ts +63 -8
- package/corpus/templates/design/actions/apply-motion-edit.ts +12 -46
- package/corpus/templates/design/actions/list-design-native-assets.ts +2 -1
- package/corpus/templates/design/actions/migrate-board-objects-to-file.ts +49 -1
- package/corpus/templates/design/actions/navigate.ts +3 -12
- package/corpus/templates/design/actions/open-visual-edit.ts +341 -0
- package/corpus/templates/design/actions/view-screen.ts +1 -1
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +1 -1
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +345 -14
- package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +71 -91
- package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +25 -27
- package/corpus/templates/design/app/components/design/DeviceFrame.tsx +1 -1
- package/corpus/templates/design/app/components/design/DrawOverlay.tsx +2 -2
- package/corpus/templates/design/app/components/design/EditPanel.tsx +1111 -570
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +162 -32
- package/corpus/templates/design/app/components/design/MotionDock.tsx +268 -240
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +1038 -150
- package/corpus/templates/design/app/components/design/QuestionFlow.tsx +1 -1
- package/corpus/templates/design/app/components/design/ReviewPanel.tsx +81 -102
- package/corpus/templates/design/app/components/design/StatesPanel.tsx +6 -6
- package/corpus/templates/design/app/components/design/TokensPanel.tsx +11 -11
- package/corpus/templates/design/app/components/design/TweaksPanel.tsx +9 -7
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +1129 -155
- package/corpus/templates/design/app/components/design/bridge/hit-test.bridge.ts +130 -37
- package/corpus/templates/design/app/components/design/canvas-primitive-style.ts +24 -11
- package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +184 -162
- package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +137 -79
- package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +13 -13
- package/corpus/templates/design/app/components/design/inspector/ExportSettingsPanel.tsx +8 -8
- package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +2 -2
- package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +4 -4
- package/corpus/templates/design/app/components/design/inspector/InspectorAiActions.tsx +3 -3
- package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +13 -7
- package/corpus/templates/design/app/components/design/inspector/ShaderControls.tsx +14 -11
- package/corpus/templates/design/app/components/design/inspector/ShaderFillsPanel.tsx +4 -4
- package/corpus/templates/design/app/components/design/inspector/index.ts +2 -0
- package/corpus/templates/design/app/components/design/types.ts +19 -0
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +61 -78
- package/corpus/templates/design/app/components/layout/Header.tsx +0 -1
- package/corpus/templates/design/app/components/layout/Layout.tsx +3 -2
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +0 -2
- package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +5 -4
- package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +1 -1
- package/corpus/templates/design/app/components/visual-editor/SaveStatusIndicator.tsx +2 -2
- package/corpus/templates/design/app/global.css +56 -0
- package/corpus/templates/design/app/hooks/use-agent-generating.ts +4 -5
- package/corpus/templates/design/app/hooks/use-navigation-state.ts +6 -7
- package/corpus/templates/design/app/hooks/use-question-flow.ts +3 -2
- package/corpus/templates/design/app/hooks/useAgentEditRequest.ts +6 -4
- package/corpus/templates/design/app/i18n/zh-TW.ts +5 -14
- package/corpus/templates/design/app/i18n-data.ts +63 -188
- package/corpus/templates/design/app/lib/agent-chat.ts +13 -0
- package/corpus/templates/design/app/pages/DesignEditor.tsx +1428 -384
- package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +9 -5
- package/corpus/templates/design/app/pages/DesignSystems.tsx +2 -2
- package/corpus/templates/design/app/pages/Index.tsx +49 -26
- package/corpus/templates/design/app/pages/NotFound.tsx +25 -8
- package/corpus/templates/design/app/pages/VisualEdit.tsx +17 -5
- package/corpus/templates/design/app/routes/examples.tsx +1 -7
- package/corpus/templates/design/app/routes/templates.tsx +7 -4
- package/corpus/templates/design/changelog/2026-06-30-board-shapes-and-auto-layout-controls-are-clearer.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-component-selections-now-use-purple-component-chrome-and-sho.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-constraints-now-stay-tucked-into-a-compact-inspector-preview.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-creating-a-component-now-opens-in-a-compact-inspector-popove.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-design-cards-no-longer-show-legacy-project-type-badges.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-design-chat-now-keeps-new-turns-in-the-visible-design-agent-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-design-editor-panels-now-keep-their-compact-text-sizing-cons.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-design-no-longer-shows-the-connected-local-code-warning-bann.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-design-now-opens-to-the-files-panel-unless-a-generation-is-a.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-design-opens-with-a-cleaner-empty-canvas-and-loading-preview.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-design-tools-use-simpler-less-decorative-icons.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-dragging-absolute-elements-no-longer-shows-coordinate-labels.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-fixed-all-screens-opening-too-zoomed-in-by-default.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-fixed-the-public-design-assets-sidebar-so-native-components-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-fixed-the-screen-overview-board-so-empty-board-space-no-long.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-full-view-screens-can-now-scroll-while-remaining-editable.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-inspector-element-headers-show-the-selected-html-tag-and-the.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-inspector-inputs-stay-compact-across-desktop-breakpoints.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-layers-can-be-multi-selected-from-the-canvas-and-edited-toge.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-local-visual-edit-links-can-edit-localhost-frames-without-si.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-localhost-visual-edit-frames-can-now-be-selected-and-edited.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-marquee-selection-now-works-inside-screens-multi-selected-la.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-motion-is-now-available-from-the-persistent-left-rail-and-th.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-motion-timeline-collapse-and-reopen-animations-feel-smoother.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-multi-select-outlines-now-stay-consistent-across-all-screens.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-new-board-shapes-now-start-with-neutral-gray-styling.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-new-designs-open-into-a-steadier-loading-state-before-the-ed.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-new-designs-show-a-loading-state-during-handoff-and-keep-edi.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-public-visual-edit-design-links-now-open-directly-instead-of.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-removed-the-confusing-states-section-from-the-design-editor-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-removed-the-templates-gallery-from-design-navigation.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-share-stays-visible-as-soon-as-editable-designs-load.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-signed-out-save-and-share-controls-use-simpler-labels-and-op.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-text-added-on-the-canvas-now-focuses-cleanly-with-the-right-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-design-editor-loading-skeleton-is-simpler-and-its-bottom.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-design-editor-loading-skeleton-now-follows-the-current-t.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-design-inspector-no-longer-shows-child-layout-controls-o.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-design-inspector-no-longer-shows-the-ask-ai-section-abov.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-design-review-panel-no-longer-shows-a-separate-inline-au.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-empty-designs-page-now-focuses-on-a-single-primary-new-d.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-layers-panel-header-stays-as-layers-while-multiple-items.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-missing-design-screen-now-uses-a-neutral-back-button.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-motion-timeline-now-closes-without-squeezing-the-canvas-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-new-design-connect-ai-setup-now-lines-up-with-the-compos.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-the-screen-overview-board-now-blends-into-the-canvas-and-new.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-top-level-canvas-drops-now-show-screen-guides.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-top-level-canvas-layers-now-keep-a-transparent-backdrop-and-.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-top-level-canvas-layers-now-select-reliably-from-all-screens.md +6 -0
- package/corpus/templates/design/changelog/2026-06-30-visual-edit-can-open-and-refresh-localhost-screens-in-one-au.md +6 -0
- package/corpus/templates/design/e2e/helpers.ts +15 -4
- package/corpus/templates/design/server/db/index.ts +52 -0
- package/corpus/templates/design/server/plugins/agent-chat.ts +5 -0
- package/corpus/templates/design/server/plugins/auth.ts +1 -0
- package/corpus/templates/design/server/plugins/core-routes.ts +4 -0
- package/corpus/templates/design/shared/board-file.ts +380 -5
- package/corpus/templates/design/shared/board-objects.ts +2 -2
- package/corpus/templates/design/shared/code-layer.ts +50 -6
- package/corpus/templates/design/shared/motion-compiler.ts +27 -0
- package/corpus/templates/macros/app/components/DailyProgress.tsx +41 -37
- package/corpus/templates/macros/app/components/ExerciseCard.tsx +2 -2
- package/corpus/templates/macros/app/components/MealCard.tsx +2 -2
- package/corpus/templates/macros/app/components/VoiceDictation.tsx +1 -1
- package/corpus/templates/macros/app/components/WeeklyCaloriesChart.tsx +1 -1
- package/corpus/templates/macros/app/components/WeightCard.tsx +2 -2
- package/corpus/templates/macros/app/components/WeightTracker.tsx +1 -1
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +1 -1
- package/corpus/templates/macros/app/routes/_index.tsx +5 -5
- package/corpus/templates/macros/app/routes/analytics.tsx +1 -1
- package/corpus/templates/macros/changelog/2026-06-30-dashboard-loading-and-chart-surfaces-now-use-theme-aware-col.md +6 -0
- package/corpus/templates/mail/app/components/email/ComposeBubbleToolbar.tsx +14 -11
- package/corpus/templates/mail/app/global.css +3 -2
- package/corpus/templates/mail/changelog/2026-06-30-compose-floating-toolbars-now-use-theme-aware-colors-in-ligh.md +6 -0
- package/corpus/templates/plan/app/pages/PlansPage.tsx +2 -2
- package/corpus/templates/slides/app/components/deck/DeckCard.tsx +3 -3
- package/corpus/templates/slides/app/global.css +10 -0
- package/corpus/templates/slides/app/pages/Index.tsx +55 -51
- package/corpus/templates/slides/changelog/2026-06-30-deck-thumbnails-collapse-cleanly-to-one-column-when-the-chat.md +6 -0
- package/dist/agent/engine/anthropic-engine.d.ts +2 -2
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts +2 -2
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builtin.js +1 -1
- package/dist/agent/engine/builtin.js.map +1 -1
- package/dist/agent/engine/output-tokens.js +1 -1
- package/dist/agent/engine/output-tokens.js.map +1 -1
- package/dist/agent/harness/acp-adapter.d.ts +4 -1
- package/dist/agent/harness/acp-adapter.d.ts.map +1 -1
- package/dist/agent/harness/acp-adapter.js +19 -2
- package/dist/agent/harness/acp-adapter.js.map +1 -1
- package/dist/agent/harness/ai-sdk-adapter.d.ts.map +1 -1
- package/dist/agent/harness/ai-sdk-adapter.js +3 -0
- package/dist/agent/harness/ai-sdk-adapter.js.map +1 -1
- package/dist/agent/harness/translate.d.ts.map +1 -1
- package/dist/agent/harness/translate.js +3 -0
- package/dist/agent/harness/translate.js.map +1 -1
- package/dist/agent/harness/types.d.ts +1 -0
- package/dist/agent/harness/types.d.ts.map +1 -1
- package/dist/agent/harness/types.js.map +1 -1
- package/dist/agent/model-config.d.ts +21 -20
- package/dist/agent/model-config.d.ts.map +1 -1
- package/dist/agent/model-config.js +31 -13
- package/dist/agent/model-config.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +85 -10
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/thread-data-builder.d.ts.map +1 -1
- package/dist/agent/thread-data-builder.js +27 -6
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/agent/tool-call-journal.d.ts +11 -9
- package/dist/agent/tool-call-journal.d.ts.map +1 -1
- package/dist/agent/tool-call-journal.js +92 -40
- package/dist/agent/tool-call-journal.js.map +1 -1
- package/dist/agent/types.d.ts +5 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/cli/design-connect.d.ts.map +1 -1
- package/dist/cli/design-connect.js +84 -0
- package/dist/cli/design-connect.js.map +1 -1
- package/dist/cli/gateway-helpers.d.ts +4 -0
- package/dist/cli/gateway-helpers.d.ts.map +1 -1
- package/dist/cli/gateway-helpers.js +9 -0
- package/dist/cli/gateway-helpers.js.map +1 -1
- package/dist/cli/recap.d.ts.map +1 -1
- package/dist/cli/recap.js +0 -2
- package/dist/cli/recap.js.map +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +54 -16
- package/dist/cli/skills.js.map +1 -1
- package/dist/cli/workspace-dev.d.ts.map +1 -1
- package/dist/cli/workspace-dev.js +33 -6
- package/dist/cli/workspace-dev.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +72 -26
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/DefaultSpinner.d.ts.map +1 -1
- package/dist/client/DefaultSpinner.js +8 -1
- package/dist/client/DefaultSpinner.js.map +1 -1
- package/dist/client/chat/message-components.d.ts +7 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +37 -1
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/chat/repo-helpers.d.ts +1 -0
- package/dist/client/chat/repo-helpers.d.ts.map +1 -1
- package/dist/client/chat/repo-helpers.js +59 -0
- package/dist/client/chat/repo-helpers.js.map +1 -1
- package/dist/client/chat/run-recovery.d.ts.map +1 -1
- package/dist/client/chat/run-recovery.js +4 -4
- package/dist/client/chat/run-recovery.js.map +1 -1
- package/dist/client/components/ApiKeySettings.js +8 -8
- package/dist/client/components/ApiKeySettings.js.map +1 -1
- package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
- package/dist/client/components/CodeRequiredDialog.js +24 -15
- package/dist/client/components/CodeRequiredDialog.js.map +1 -1
- package/dist/client/components/MissingKeyCard.d.ts.map +1 -1
- package/dist/client/components/MissingKeyCard.js +11 -6
- package/dist/client/components/MissingKeyCard.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +4 -3
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
- package/dist/client/guided-questions.d.ts.map +1 -1
- package/dist/client/guided-questions.js +6 -6
- package/dist/client/guided-questions.js.map +1 -1
- package/dist/client/integrations/IntegrationCard.js +1 -1
- package/dist/client/integrations/IntegrationCard.js.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.js +1 -1
- package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
- package/dist/client/onboarding/OnboardingBanner.js +2 -2
- package/dist/client/onboarding/OnboardingBanner.js.map +1 -1
- package/dist/client/onboarding/OnboardingPanel.js +23 -19
- package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
- package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
- package/dist/client/resources/ResourceEditor.js +13 -10
- package/dist/client/resources/ResourceEditor.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +2 -1
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +8 -3
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +6 -38
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/client/useProductionAgent.d.ts +2 -1
- package/dist/client/useProductionAgent.d.ts.map +1 -1
- package/dist/client/useProductionAgent.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/deploy/build.js +1 -1
- package/dist/deploy/build.js.map +1 -1
- package/dist/eval/define-eval.d.ts.map +1 -1
- package/dist/eval/define-eval.js +2 -1
- package/dist/eval/define-eval.js.map +1 -1
- package/dist/eval/report.d.ts.map +1 -1
- package/dist/eval/report.js +19 -4
- package/dist/eval/report.js.map +1 -1
- package/dist/eval/runner.d.ts.map +1 -1
- package/dist/eval/runner.js +38 -6
- package/dist/eval/runner.js.map +1 -1
- package/dist/eval/types.d.ts +11 -0
- package/dist/eval/types.d.ts.map +1 -1
- package/dist/eval/types.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +2 -2
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/observability/routes.d.ts +5 -5
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js.map +1 -1
- package/dist/onboarding/default-steps.js +1 -1
- package/dist/onboarding/default-steps.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/scripts/agent-engines/manage-agent-engine.js +1 -1
- package/dist/scripts/agent-engines/manage-agent-engine.js.map +1 -1
- package/dist/scripts/agent-engines/set-agent-engine.js +1 -1
- package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +3 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +134 -72
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +3 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +4 -1
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/open-route.d.ts +9 -0
- package/dist/server/open-route.d.ts.map +1 -1
- package/dist/server/open-route.js +48 -38
- package/dist/server/open-route.js.map +1 -1
- package/dist/shared/reasoning-effort.js +3 -0
- package/dist/shared/reasoning-effort.js.map +1 -1
- package/dist/sharing/access.d.ts.map +1 -1
- package/dist/sharing/access.js +18 -2
- package/dist/sharing/access.js.map +1 -1
- package/dist/sharing/registry.d.ts +10 -0
- package/dist/sharing/registry.d.ts.map +1 -1
- package/dist/sharing/registry.js.map +1 -1
- package/dist/styles/agent-native.css +104 -20
- package/dist/styles/rich-markdown-editor.css +11 -10
- package/docs/content/cloneable-saas.mdx +2 -2
- package/docs/content/evals.mdx +34 -12
- package/docs/content/faq.mdx +1 -1
- package/docs/content/locales/ar-SA/cloneable-saas.mdx +2 -2
- package/docs/content/locales/ar-SA/evals.mdx +7 -0
- package/docs/content/locales/ar-SA/faq.mdx +1 -1
- package/docs/content/locales/ar-SA/template-chat.mdx +1 -1
- package/docs/content/locales/de-DE/cloneable-saas.mdx +2 -2
- package/docs/content/locales/de-DE/evals.mdx +8 -0
- package/docs/content/locales/de-DE/faq.mdx +1 -1
- package/docs/content/locales/de-DE/template-chat.mdx +1 -1
- package/docs/content/locales/es-ES/cloneable-saas.mdx +2 -2
- package/docs/content/locales/es-ES/evals.mdx +8 -0
- package/docs/content/locales/es-ES/faq.mdx +1 -1
- package/docs/content/locales/es-ES/template-chat.mdx +1 -1
- package/docs/content/locales/fr-FR/cloneable-saas.mdx +2 -2
- package/docs/content/locales/fr-FR/evals.mdx +8 -0
- package/docs/content/locales/fr-FR/faq.mdx +1 -1
- package/docs/content/locales/fr-FR/template-chat.mdx +1 -1
- package/docs/content/locales/hi-IN/cloneable-saas.mdx +2 -2
- package/docs/content/locales/hi-IN/evals.mdx +8 -0
- package/docs/content/locales/hi-IN/faq.mdx +1 -1
- package/docs/content/locales/hi-IN/template-chat.mdx +1 -1
- package/docs/content/locales/ja-JP/cloneable-saas.mdx +2 -2
- package/docs/content/locales/ja-JP/evals.mdx +7 -0
- package/docs/content/locales/ja-JP/faq.mdx +1 -1
- package/docs/content/locales/ja-JP/template-chat.mdx +1 -1
- package/docs/content/locales/ko-KR/cloneable-saas.mdx +2 -2
- package/docs/content/locales/ko-KR/evals.mdx +7 -0
- package/docs/content/locales/ko-KR/faq.mdx +1 -1
- package/docs/content/locales/ko-KR/template-chat.mdx +1 -1
- package/docs/content/locales/pt-BR/cloneable-saas.mdx +2 -2
- package/docs/content/locales/pt-BR/evals.mdx +8 -0
- package/docs/content/locales/pt-BR/faq.mdx +1 -1
- package/docs/content/locales/pt-BR/template-chat.mdx +1 -1
- package/docs/content/locales/zh-CN/cloneable-saas.mdx +2 -2
- package/docs/content/locales/zh-CN/evals.mdx +7 -0
- package/docs/content/locales/zh-CN/faq.mdx +1 -1
- package/docs/content/locales/zh-CN/template-chat.mdx +1 -1
- package/docs/content/locales/zh-TW/cloneable-saas.mdx +2 -2
- package/docs/content/locales/zh-TW/evals.mdx +7 -0
- package/docs/content/locales/zh-TW/faq.mdx +1 -1
- package/docs/content/locales/zh-TW/template-chat.mdx +1 -1
- package/docs/content/template-chat.mdx +1 -1
- package/package.json +1 -1
- package/corpus/templates/content/server/routes/api/notion/disconnect.post.ts +0 -12
- package/corpus/templates/design/app/components/design/LocalSourceEditBanner.tsx +0 -157
- package/corpus/templates/design/app/lib/design-templates.ts +0 -1305
- package/corpus/templates/design/app/pages/Templates.tsx +0 -279
|
@@ -299,6 +299,12 @@ export type CodeLayerTreeNodeType =
|
|
|
299
299
|
| "group"
|
|
300
300
|
| "component"
|
|
301
301
|
| "shape"
|
|
302
|
+
| "ellipse"
|
|
303
|
+
| "vector"
|
|
304
|
+
| "line"
|
|
305
|
+
| "arrow"
|
|
306
|
+
| "polygon"
|
|
307
|
+
| "star"
|
|
302
308
|
| "text"
|
|
303
309
|
| "image"
|
|
304
310
|
| "element";
|
|
@@ -1668,6 +1674,22 @@ function treeTypeForNode(node: CodeLayerNode): CodeLayerTreeNodeType {
|
|
|
1668
1674
|
if (primitiveKind === "text") return "text";
|
|
1669
1675
|
if (primitiveKind === "frame") return "frame";
|
|
1670
1676
|
if (primitiveKind === "image") return "image";
|
|
1677
|
+
if (
|
|
1678
|
+
primitiveKind === "ellipse" ||
|
|
1679
|
+
primitiveKind === "circle" ||
|
|
1680
|
+
primitiveKind === "oval"
|
|
1681
|
+
) {
|
|
1682
|
+
return "ellipse";
|
|
1683
|
+
}
|
|
1684
|
+
// SVG-based vector primitives each get their own type so the layers panel
|
|
1685
|
+
// renders a true pen/line/arrow/polygon/star icon instead of falling
|
|
1686
|
+
// through to the rectangle ("shape") glyph.
|
|
1687
|
+
if (primitiveKind === "path") return "vector";
|
|
1688
|
+
if (primitiveKind === "line") return "line";
|
|
1689
|
+
if (primitiveKind === "arrow") return "arrow";
|
|
1690
|
+
if (primitiveKind === "polygon") return "polygon";
|
|
1691
|
+
if (primitiveKind === "star") return "star";
|
|
1692
|
+
// rectangle/rect and anything else still classify as a generic shape.
|
|
1671
1693
|
return "shape";
|
|
1672
1694
|
}
|
|
1673
1695
|
if (TEXT_LAYER_TAGS.has(node.tag)) return "text";
|
|
@@ -1716,11 +1738,12 @@ function compactCodeLayerTreeNodes(
|
|
|
1716
1738
|
nextAncestors,
|
|
1717
1739
|
);
|
|
1718
1740
|
const compactedNode: CodeLayerTreeNode = { ...node, children };
|
|
1719
|
-
const promotedNodes =
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1741
|
+
const promotedNodes = isCollapsibleDocumentShellNode(
|
|
1742
|
+
compactedNode,
|
|
1743
|
+
nodesById,
|
|
1744
|
+
)
|
|
1745
|
+
? children
|
|
1746
|
+
: [compactedNode];
|
|
1724
1747
|
|
|
1725
1748
|
for (const promotedNode of promotedNodes) {
|
|
1726
1749
|
if (siblingIds.has(promotedNode.id)) continue;
|
|
@@ -1794,6 +1817,25 @@ function capabilitiesFor(element: ParsedElement): EditCapability[] {
|
|
|
1794
1817
|
return capabilities;
|
|
1795
1818
|
}
|
|
1796
1819
|
|
|
1820
|
+
// Internal nodes of an <svg> (the <path>/<polygon>/<circle>/... geometry) are
|
|
1821
|
+
// rendering primitives, never selectable design layers. Projecting them adds a
|
|
1822
|
+
// meaningless expandable child to every pen vector / line / arrow / polygon /
|
|
1823
|
+
// star (and to any inline SVG icon). Treat the <svg> as a leaf: skip everything
|
|
1824
|
+
// that has an <svg> ancestor.
|
|
1825
|
+
function hasSvgAncestor(
|
|
1826
|
+
element: ParsedElement,
|
|
1827
|
+
elements: ParsedElement[],
|
|
1828
|
+
): boolean {
|
|
1829
|
+
let parentIndex = element.parentIndex;
|
|
1830
|
+
while (parentIndex !== undefined) {
|
|
1831
|
+
const parent = elements[parentIndex];
|
|
1832
|
+
if (!parent) break;
|
|
1833
|
+
if (parent.tag === "svg") return true;
|
|
1834
|
+
parentIndex = parent.parentIndex;
|
|
1835
|
+
}
|
|
1836
|
+
return false;
|
|
1837
|
+
}
|
|
1838
|
+
|
|
1797
1839
|
function buildProjection(
|
|
1798
1840
|
html: string,
|
|
1799
1841
|
source: CodeLayerSource,
|
|
@@ -1808,6 +1850,7 @@ function buildProjection(
|
|
|
1808
1850
|
|
|
1809
1851
|
for (const element of elements) {
|
|
1810
1852
|
if (NON_VISUAL_TAGS.has(element.tag)) continue;
|
|
1853
|
+
if (hasSvgAncestor(element, elements)) continue;
|
|
1811
1854
|
const nodeId = nodeIdFor(element, elements, source);
|
|
1812
1855
|
nodeIdByElementIndex.set(element.index, nodeId);
|
|
1813
1856
|
}
|
|
@@ -2038,9 +2081,10 @@ export function buildCodeLayerTree(
|
|
|
2038
2081
|
const treeById = new Map<string, CodeLayerTreeNode>();
|
|
2039
2082
|
|
|
2040
2083
|
for (const node of projection.nodes) {
|
|
2084
|
+
const componentName = node.componentInstance?.name;
|
|
2041
2085
|
treeById.set(node.id, {
|
|
2042
2086
|
id: node.id,
|
|
2043
|
-
name: node.layerName,
|
|
2087
|
+
name: componentName ?? node.layerName,
|
|
2044
2088
|
type: treeTypeForNode(node),
|
|
2045
2089
|
tag: node.tag,
|
|
2046
2090
|
selector: node.selector,
|
|
@@ -166,6 +166,33 @@ export function extractManagedMotionCss(html: string): string | null {
|
|
|
166
166
|
return afterOpen.slice(0, closeMatch.index).trim();
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
+
/**
|
|
170
|
+
* Inject or replace the managed `<style data-agent-native-motion>` block in an
|
|
171
|
+
* HTML document. Inserts before `</head>` when no managed block exists, or at
|
|
172
|
+
* the top of the document when there is no `<head>`.
|
|
173
|
+
*/
|
|
174
|
+
export function injectManagedMotionCss(html: string, css: string): string {
|
|
175
|
+
const openRe = /<style\b(?=[^>]*\bdata-agent-native-motion\b)[^>]*>/i;
|
|
176
|
+
const openMatch = openRe.exec(html);
|
|
177
|
+
const block = `<style data-agent-native-motion>\n${css}\n</style>`;
|
|
178
|
+
|
|
179
|
+
if (openMatch) {
|
|
180
|
+
const bodyStart = openMatch.index + openMatch[0].length;
|
|
181
|
+
const afterOpen = html.slice(bodyStart);
|
|
182
|
+
const closeMatch = /<\s*\/\s*style\b[^>]*>/i.exec(afterOpen);
|
|
183
|
+
if (closeMatch) {
|
|
184
|
+
const closeEnd = bodyStart + closeMatch.index + closeMatch[0].length;
|
|
185
|
+
return html.slice(0, openMatch.index) + block + html.slice(closeEnd);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const headClose = html.lastIndexOf("</head>");
|
|
190
|
+
if (headClose !== -1) {
|
|
191
|
+
return html.slice(0, headClose) + block + "\n" + html.slice(headClose);
|
|
192
|
+
}
|
|
193
|
+
return block + "\n" + html;
|
|
194
|
+
}
|
|
195
|
+
|
|
169
196
|
/**
|
|
170
197
|
* Return the djb2 hash of a CSS string — useful for verifying stored
|
|
171
198
|
* `compiled_hash` values without re-compiling a full timeline.
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
IconChartBar,
|
|
6
6
|
} from "@tabler/icons-react";
|
|
7
7
|
import { subDays } from "date-fns";
|
|
8
|
+
import type { CSSProperties } from "react";
|
|
8
9
|
import { useState, useEffect } from "react";
|
|
9
10
|
import { Link } from "react-router";
|
|
10
11
|
import {
|
|
@@ -56,6 +57,15 @@ interface DailyProgressProps {
|
|
|
56
57
|
fat: number;
|
|
57
58
|
}
|
|
58
59
|
|
|
60
|
+
const chartTooltipContentStyle = {
|
|
61
|
+
backgroundColor: "hsl(var(--popover))",
|
|
62
|
+
border: "1px solid hsl(var(--border))",
|
|
63
|
+
borderRadius: "8px",
|
|
64
|
+
boxShadow: "0 4px 12px hsl(var(--foreground) / 0.12)",
|
|
65
|
+
color: "hsl(var(--popover-foreground))",
|
|
66
|
+
fontSize: "12px",
|
|
67
|
+
} satisfies CSSProperties;
|
|
68
|
+
|
|
59
69
|
export function DailyProgress({
|
|
60
70
|
totalCalories,
|
|
61
71
|
totalBurnedCalories,
|
|
@@ -105,7 +115,7 @@ export function DailyProgress({
|
|
|
105
115
|
};
|
|
106
116
|
|
|
107
117
|
return (
|
|
108
|
-
<div className="relative overflow-hidden rounded-2xl border border-
|
|
118
|
+
<div className="relative overflow-hidden rounded-2xl border border-border bg-card p-4 sm:p-5">
|
|
109
119
|
<div className="macros-summary-grid">
|
|
110
120
|
{/* Left Side */}
|
|
111
121
|
<div className="space-y-8 flex flex-col justify-center">
|
|
@@ -115,7 +125,7 @@ export function DailyProgress({
|
|
|
115
125
|
{t("daily.summary")}
|
|
116
126
|
</p>
|
|
117
127
|
</div>
|
|
118
|
-
<div className="px-3 py-1.5 rounded-full bg-
|
|
128
|
+
<div className="px-3 py-1.5 rounded-full bg-muted/40 border border-border flex items-center">
|
|
119
129
|
<span className="text-[10px] font-medium text-muted-foreground uppercase tracking-widest leading-none">
|
|
120
130
|
{t("daily.goalWithValue", { value: goalCalories })}
|
|
121
131
|
</span>
|
|
@@ -174,7 +184,7 @@ export function DailyProgress({
|
|
|
174
184
|
</span>
|
|
175
185
|
</div>
|
|
176
186
|
</div>
|
|
177
|
-
<div className="h-1.5 bg-
|
|
187
|
+
<div className="h-1.5 bg-muted rounded-full overflow-hidden">
|
|
178
188
|
<div
|
|
179
189
|
className={cn(
|
|
180
190
|
"h-full transition-all duration-500 ease-out rounded-full",
|
|
@@ -194,7 +204,7 @@ export function DailyProgress({
|
|
|
194
204
|
].map((m) => (
|
|
195
205
|
<div
|
|
196
206
|
key={m.label}
|
|
197
|
-
className="p-2.5 sm:p-3 rounded-xl bg-
|
|
207
|
+
className="p-2.5 sm:p-3 rounded-xl bg-muted/30 border border-border"
|
|
198
208
|
>
|
|
199
209
|
<p className="text-[10px] uppercase tracking-wider text-muted-foreground mb-1">
|
|
200
210
|
{m.label}
|
|
@@ -209,14 +219,14 @@ export function DailyProgress({
|
|
|
209
219
|
</div>
|
|
210
220
|
|
|
211
221
|
{/* Right Side: Charts */}
|
|
212
|
-
<div className="macros-summary-chart border-l border-
|
|
222
|
+
<div className="macros-summary-chart border-l border-border pl-8 flex-col justify-center transition-all duration-300">
|
|
213
223
|
<Tabs
|
|
214
224
|
value={activeChart}
|
|
215
225
|
onValueChange={setActiveChart}
|
|
216
226
|
className="flex flex-col space-y-6"
|
|
217
227
|
>
|
|
218
228
|
<div className="flex items-center justify-between">
|
|
219
|
-
<TabsList className="bg-
|
|
229
|
+
<TabsList className="bg-muted/40 border border-border h-8">
|
|
220
230
|
<TabsTrigger
|
|
221
231
|
value="weight"
|
|
222
232
|
className="gap-2 text-[10px] uppercase tracking-wider h-6 px-3"
|
|
@@ -237,7 +247,7 @@ export function DailyProgress({
|
|
|
237
247
|
<Button
|
|
238
248
|
variant="ghost"
|
|
239
249
|
size="sm"
|
|
240
|
-
className="h-8 px-2.5 text-[10px] uppercase tracking-widest text-muted-foreground/50 hover:text-foreground hover:bg-
|
|
250
|
+
className="h-8 px-2.5 text-[10px] uppercase tracking-widest text-muted-foreground/50 hover:text-foreground hover:bg-accent gap-2"
|
|
241
251
|
>
|
|
242
252
|
{t("daily.last30Days")}{" "}
|
|
243
253
|
<IconChartBar className="h-3.5 w-3.5" />
|
|
@@ -246,7 +256,7 @@ export function DailyProgress({
|
|
|
246
256
|
</TooltipTrigger>
|
|
247
257
|
<TooltipContent
|
|
248
258
|
side="bottom"
|
|
249
|
-
className="bg-
|
|
259
|
+
className="bg-popover border-border text-popover-foreground text-[10px] uppercase tracking-widest py-1.5 px-3"
|
|
250
260
|
>
|
|
251
261
|
{t("daily.viewFullAnalytics")}
|
|
252
262
|
</TooltipContent>
|
|
@@ -260,7 +270,7 @@ export function DailyProgress({
|
|
|
260
270
|
>
|
|
261
271
|
<div className="h-[140px] w-full">
|
|
262
272
|
{weightLoading ? (
|
|
263
|
-
<Skeleton className="h-full w-full rounded-xl bg-
|
|
273
|
+
<Skeleton className="h-full w-full rounded-xl bg-muted" />
|
|
264
274
|
) : weightHistory.length > 0 ? (
|
|
265
275
|
<ResponsiveContainer width="100%" height="100%">
|
|
266
276
|
<LineChart
|
|
@@ -273,15 +283,10 @@ export function DailyProgress({
|
|
|
273
283
|
hide
|
|
274
284
|
/>
|
|
275
285
|
<ChartTooltip
|
|
276
|
-
contentStyle={
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
borderRadius: "8px",
|
|
280
|
-
boxShadow: "0 4px 12px rgba(0,0,0,0.5)",
|
|
281
|
-
fontSize: "12px",
|
|
282
|
-
color: "#fff",
|
|
286
|
+
contentStyle={chartTooltipContentStyle}
|
|
287
|
+
cursor={{
|
|
288
|
+
stroke: "hsl(var(--muted-foreground) / 0.25)",
|
|
283
289
|
}}
|
|
284
|
-
cursor={{ stroke: "rgba(255,255,255,0.1)" }}
|
|
285
290
|
formatter={(value: any, name: any) => [
|
|
286
291
|
`${value} lbs`,
|
|
287
292
|
name === "trendWeight"
|
|
@@ -292,34 +297,34 @@ export function DailyProgress({
|
|
|
292
297
|
<Line
|
|
293
298
|
type="monotone"
|
|
294
299
|
dataKey="weight"
|
|
295
|
-
stroke="
|
|
300
|
+
stroke="hsl(var(--muted-foreground) / 0.35)"
|
|
296
301
|
strokeWidth={1}
|
|
297
302
|
dot={{
|
|
298
|
-
fill: "
|
|
303
|
+
fill: "hsl(var(--muted-foreground) / 0.35)",
|
|
299
304
|
r: 2,
|
|
300
305
|
}}
|
|
301
306
|
activeDot={{
|
|
302
307
|
r: 4,
|
|
303
308
|
strokeWidth: 0,
|
|
304
|
-
fill: "
|
|
309
|
+
fill: "hsl(var(--foreground))",
|
|
305
310
|
}}
|
|
306
311
|
/>
|
|
307
312
|
<Line
|
|
308
313
|
type="monotone"
|
|
309
314
|
dataKey="trendWeight"
|
|
310
|
-
stroke="
|
|
315
|
+
stroke="hsl(var(--foreground))"
|
|
311
316
|
strokeWidth={2}
|
|
312
317
|
dot={false}
|
|
313
318
|
activeDot={{
|
|
314
319
|
r: 4,
|
|
315
320
|
strokeWidth: 0,
|
|
316
|
-
fill: "
|
|
321
|
+
fill: "hsl(var(--foreground))",
|
|
317
322
|
}}
|
|
318
323
|
/>
|
|
319
324
|
</LineChart>
|
|
320
325
|
</ResponsiveContainer>
|
|
321
326
|
) : (
|
|
322
|
-
<div className="h-full flex items-center justify-center border border-dashed border-
|
|
327
|
+
<div className="h-full flex items-center justify-center border border-dashed border-border rounded-xl">
|
|
323
328
|
<p className="text-xs text-muted-foreground">
|
|
324
329
|
{t("daily.noWeightData")}
|
|
325
330
|
</p>
|
|
@@ -341,7 +346,7 @@ export function DailyProgress({
|
|
|
341
346
|
>
|
|
342
347
|
<div className="h-[140px] w-full">
|
|
343
348
|
{calorieLoading ? (
|
|
344
|
-
<Skeleton className="h-full w-full rounded-xl bg-
|
|
349
|
+
<Skeleton className="h-full w-full rounded-xl bg-muted" />
|
|
345
350
|
) : calorieHistory.length > 0 ? (
|
|
346
351
|
<ResponsiveContainer width="100%" height="100%">
|
|
347
352
|
<AreaChart
|
|
@@ -358,10 +363,14 @@ export function DailyProgress({
|
|
|
358
363
|
>
|
|
359
364
|
<stop
|
|
360
365
|
offset="5%"
|
|
361
|
-
stopColor="
|
|
366
|
+
stopColor="hsl(var(--foreground))"
|
|
362
367
|
stopOpacity={0.1}
|
|
363
368
|
/>
|
|
364
|
-
<stop
|
|
369
|
+
<stop
|
|
370
|
+
offset="95%"
|
|
371
|
+
stopColor="hsl(var(--foreground))"
|
|
372
|
+
stopOpacity={0}
|
|
373
|
+
/>
|
|
365
374
|
</linearGradient>
|
|
366
375
|
</defs>
|
|
367
376
|
<XAxis dataKey="displayDate" hide />
|
|
@@ -370,15 +379,10 @@ export function DailyProgress({
|
|
|
370
379
|
hide
|
|
371
380
|
/>
|
|
372
381
|
<ChartTooltip
|
|
373
|
-
contentStyle={
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
borderRadius: "8px",
|
|
377
|
-
boxShadow: "0 4px 12px rgba(0,0,0,0.5)",
|
|
378
|
-
fontSize: "12px",
|
|
379
|
-
color: "#fff",
|
|
382
|
+
contentStyle={chartTooltipContentStyle}
|
|
383
|
+
cursor={{
|
|
384
|
+
stroke: "hsl(var(--muted-foreground) / 0.25)",
|
|
380
385
|
}}
|
|
381
|
-
cursor={{ stroke: "rgba(255,255,255,0.1)" }}
|
|
382
386
|
formatter={(value: any) => [
|
|
383
387
|
`${value} kcal`,
|
|
384
388
|
t("daily.netCalories"),
|
|
@@ -387,20 +391,20 @@ export function DailyProgress({
|
|
|
387
391
|
<Area
|
|
388
392
|
type="monotone"
|
|
389
393
|
dataKey="netCalories"
|
|
390
|
-
stroke="
|
|
394
|
+
stroke="hsl(var(--foreground))"
|
|
391
395
|
strokeWidth={2}
|
|
392
396
|
fillOpacity={1}
|
|
393
397
|
fill="url(#colorNet)"
|
|
394
398
|
activeDot={{
|
|
395
399
|
r: 4,
|
|
396
400
|
strokeWidth: 0,
|
|
397
|
-
fill: "
|
|
401
|
+
fill: "hsl(var(--foreground))",
|
|
398
402
|
}}
|
|
399
403
|
/>
|
|
400
404
|
</AreaChart>
|
|
401
405
|
</ResponsiveContainer>
|
|
402
406
|
) : (
|
|
403
|
-
<div className="h-full flex items-center justify-center border border-dashed border-
|
|
407
|
+
<div className="h-full flex items-center justify-center border border-dashed border-border rounded-xl">
|
|
404
408
|
<p className="text-xs text-muted-foreground">
|
|
405
409
|
{t("daily.noActivityData")}
|
|
406
410
|
</p>
|
|
@@ -26,7 +26,7 @@ export function ExerciseCard({
|
|
|
26
26
|
}: ExerciseCardProps) {
|
|
27
27
|
const t = useT();
|
|
28
28
|
return (
|
|
29
|
-
<div className="group relative flex items-center gap-3
|
|
29
|
+
<div className="group relative flex items-center gap-3 overflow-hidden rounded-xl border border-border bg-card p-3 hover:bg-accent/40 sm:gap-4 sm:p-4">
|
|
30
30
|
<div className="flex items-center justify-center w-9 h-9 shrink-0 rounded-lg bg-orange-500/10 border border-orange-500/20">
|
|
31
31
|
<IconFlame className="h-4 w-4 text-orange-400" />
|
|
32
32
|
</div>
|
|
@@ -59,7 +59,7 @@ export function ExerciseCard({
|
|
|
59
59
|
variant="ghost"
|
|
60
60
|
size="icon"
|
|
61
61
|
aria-label={t("common.editNamed", { name: exercise.name })}
|
|
62
|
-
className="h-9 w-9
|
|
62
|
+
className="h-9 w-9 text-muted-foreground/50 hover:bg-accent hover:text-foreground md:h-7 md:w-7"
|
|
63
63
|
onClick={() => onEdit(exercise)}
|
|
64
64
|
>
|
|
65
65
|
<IconPencil className="h-4 w-4 md:h-3.5 md:w-3.5" />
|
|
@@ -26,7 +26,7 @@ export function MealCard({
|
|
|
26
26
|
}: MealCardProps) {
|
|
27
27
|
const t = useT();
|
|
28
28
|
return (
|
|
29
|
-
<div className="group relative flex items-center gap-3
|
|
29
|
+
<div className="group relative flex items-center gap-3 overflow-hidden rounded-xl border border-border bg-card p-3 hover:bg-accent/40 sm:gap-4 sm:p-4">
|
|
30
30
|
<div className="flex items-center justify-center w-9 h-9 shrink-0 rounded-lg bg-emerald-500/10 border border-emerald-500/20">
|
|
31
31
|
<IconToolsKitchen2 className="h-4 w-4 text-emerald-400" />
|
|
32
32
|
</div>
|
|
@@ -65,7 +65,7 @@ export function MealCard({
|
|
|
65
65
|
variant="ghost"
|
|
66
66
|
size="icon"
|
|
67
67
|
aria-label={t("common.editNamed", { name: meal.name })}
|
|
68
|
-
className="h-9 w-9
|
|
68
|
+
className="h-9 w-9 text-muted-foreground/50 hover:bg-accent hover:text-foreground md:h-7 md:w-7"
|
|
69
69
|
onClick={() => onEdit(meal)}
|
|
70
70
|
>
|
|
71
71
|
<IconPencil className="h-4 w-4 md:h-3.5 md:w-3.5" />
|
|
@@ -193,7 +193,7 @@ export function VoiceDictation({ currentDate }: VoiceDictationProps) {
|
|
|
193
193
|
>
|
|
194
194
|
{(state === "listening" || state === "processing") && (
|
|
195
195
|
<div className="animate-in fade-in slide-in-from-bottom-2 duration-200">
|
|
196
|
-
<div className="
|
|
196
|
+
<div className="max-w-[300px] rounded-2xl border border-border bg-card/95 px-4 py-3 shadow-2xl backdrop-blur-xl md:max-w-[250px]">
|
|
197
197
|
{state === "listening" && (
|
|
198
198
|
<div className="flex items-center gap-2">
|
|
199
199
|
<div className="flex gap-1">
|
|
@@ -40,7 +40,7 @@ export function WeightCard({
|
|
|
40
40
|
const [showDeleteConfirm, setShowDeleteConfirm] = useState(false);
|
|
41
41
|
|
|
42
42
|
return (
|
|
43
|
-
<div className="group relative flex items-center gap-3
|
|
43
|
+
<div className="group relative flex items-center gap-3 rounded-xl border border-border bg-card p-3 hover:bg-accent/40 sm:gap-4 sm:p-4">
|
|
44
44
|
<div className="flex items-center justify-center w-9 h-9 shrink-0 rounded-lg bg-blue-500/10 border border-blue-500/20">
|
|
45
45
|
<IconScale className="h-4 w-4 text-blue-400" />
|
|
46
46
|
</div>
|
|
@@ -71,7 +71,7 @@ export function WeightCard({
|
|
|
71
71
|
aria-label={t("weight.editWeightLabel", {
|
|
72
72
|
weight: weight.weight,
|
|
73
73
|
})}
|
|
74
|
-
className="h-9 w-9
|
|
74
|
+
className="h-9 w-9 text-muted-foreground/50 hover:bg-accent hover:text-foreground md:h-7 md:w-7"
|
|
75
75
|
onClick={() => onEdit(weight)}
|
|
76
76
|
>
|
|
77
77
|
<IconPencil className="h-4 w-4 md:h-3.5 md:w-3.5" />
|
|
@@ -73,7 +73,7 @@ export function WeightTracker({ currentDate }: WeightTrackerProps) {
|
|
|
73
73
|
{isLoading && !hasOptimisticRows ? (
|
|
74
74
|
<Skeleton className="h-16 w-full rounded-xl" />
|
|
75
75
|
) : !todayWeight ? (
|
|
76
|
-
<div className="flex flex-col items-center justify-center
|
|
76
|
+
<div className="flex flex-col items-center justify-center rounded-2xl border border-dashed border-border bg-muted/30 py-12 text-center">
|
|
77
77
|
<div className="p-3 rounded-full bg-blue-500/10 mb-3">
|
|
78
78
|
<IconScale className="h-5 w-5 text-blue-500/50" />
|
|
79
79
|
</div>
|
|
@@ -335,7 +335,7 @@ function SyncIndicator({ sidebarCollapsed }: { sidebarCollapsed: boolean }) {
|
|
|
335
335
|
return (
|
|
336
336
|
<div
|
|
337
337
|
className={cn(
|
|
338
|
-
"pointer-events-none fixed bottom-10 start-4 z-50 flex h-8 items-center gap-2 rounded-full border border-
|
|
338
|
+
"pointer-events-none fixed bottom-10 start-4 z-50 flex h-8 items-center gap-2 rounded-full border border-border bg-muted/80 px-3 text-xs text-muted-foreground shadow-sm backdrop-blur-sm md:bottom-8",
|
|
339
339
|
sidebarCollapsed
|
|
340
340
|
? "md:start-[calc(3.5rem+1rem)]"
|
|
341
341
|
: "md:start-[calc(14rem+1rem)]",
|
|
@@ -129,12 +129,12 @@ export default function IndexPage() {
|
|
|
129
129
|
<Button
|
|
130
130
|
variant="ghost"
|
|
131
131
|
size="icon"
|
|
132
|
-
className="h-11 w-11 sm:h-8 sm:w-8 rounded-full text-muted-foreground hover:text-foreground hover:bg-
|
|
132
|
+
className="h-11 w-11 sm:h-8 sm:w-8 rounded-full text-muted-foreground hover:text-foreground hover:bg-accent"
|
|
133
133
|
onClick={() => setDate(subDays(date, 1))}
|
|
134
134
|
>
|
|
135
135
|
<IconChevronLeft className="h-5 w-5 sm:h-4 sm:w-4 rtl:-scale-x-100" />
|
|
136
136
|
</Button>
|
|
137
|
-
<div className="min-w-[140px] sm:min-w-[160px] text-center px-3 sm:px-4 py-2 rounded-full bg-
|
|
137
|
+
<div className="min-w-[140px] sm:min-w-[160px] text-center px-3 sm:px-4 py-2 rounded-full bg-card border border-border">
|
|
138
138
|
<span className="text-sm font-medium text-foreground">
|
|
139
139
|
{isSameDay(date, new Date())
|
|
140
140
|
? t("entry.today")
|
|
@@ -144,7 +144,7 @@ export default function IndexPage() {
|
|
|
144
144
|
<Button
|
|
145
145
|
variant="ghost"
|
|
146
146
|
size="icon"
|
|
147
|
-
className="h-11 w-11 sm:h-8 sm:w-8 rounded-full text-muted-foreground hover:text-foreground hover:bg-
|
|
147
|
+
className="h-11 w-11 sm:h-8 sm:w-8 rounded-full text-muted-foreground hover:text-foreground hover:bg-accent disabled:opacity-30"
|
|
148
148
|
onClick={() => setDate(addDays(date, 1))}
|
|
149
149
|
disabled={isSameDay(date, new Date())}
|
|
150
150
|
>
|
|
@@ -197,7 +197,7 @@ export default function IndexPage() {
|
|
|
197
197
|
<Skeleton className="h-16 w-full rounded-xl" />
|
|
198
198
|
</>
|
|
199
199
|
) : meals.length === 0 ? (
|
|
200
|
-
<div className="flex flex-col items-center justify-center py-12 text-center rounded-2xl bg-
|
|
200
|
+
<div className="flex flex-col items-center justify-center py-12 text-center rounded-2xl bg-card border border-dashed border-border">
|
|
201
201
|
<div className="p-3 rounded-full bg-emerald-500/10 mb-3">
|
|
202
202
|
<IconToolsKitchen2 className="h-5 w-5 text-emerald-500/50" />
|
|
203
203
|
</div>
|
|
@@ -255,7 +255,7 @@ export default function IndexPage() {
|
|
|
255
255
|
{exercisesLoading && !hasOptimisticExercises ? (
|
|
256
256
|
<Skeleton className="h-16 w-full rounded-xl" />
|
|
257
257
|
) : exercises.length === 0 ? (
|
|
258
|
-
<div className="flex flex-col items-center justify-center py-12 text-center rounded-2xl bg-
|
|
258
|
+
<div className="flex flex-col items-center justify-center py-12 text-center rounded-2xl bg-card border border-dashed border-border">
|
|
259
259
|
<div className="p-3 rounded-full bg-orange-500/10 mb-3">
|
|
260
260
|
<IconBarbell className="h-5 w-5 text-orange-500/50" />
|
|
261
261
|
</div>
|
|
@@ -54,7 +54,7 @@ export default function AnalyticsPage() {
|
|
|
54
54
|
<IconCalendar className="w-3.5 h-3.5 me-1.5 sm:me-2 opacity-50" />
|
|
55
55
|
<SelectValue placeholder={t("analytics.selectRange")} />
|
|
56
56
|
</SelectTrigger>
|
|
57
|
-
<SelectContent className="bg-
|
|
57
|
+
<SelectContent className="bg-popover border-border text-popover-foreground">
|
|
58
58
|
<SelectItem value="7">
|
|
59
59
|
{t("analytics.lastDays", { count: 7 })}
|
|
60
60
|
</SelectItem>
|
|
@@ -306,11 +306,11 @@ export function ComposeBubbleToolbar({
|
|
|
306
306
|
setLinkUrl("");
|
|
307
307
|
}
|
|
308
308
|
}}
|
|
309
|
-
className="bg-transparent border-none outline-none text-
|
|
309
|
+
className="bg-transparent border-none outline-none text-popover-foreground text-sm w-48 px-1 py-0.5 placeholder:text-muted-foreground"
|
|
310
310
|
/>
|
|
311
311
|
<button
|
|
312
312
|
onClick={handleSetLink}
|
|
313
|
-
className="text-xs text-
|
|
313
|
+
className="text-xs text-primary hover:text-primary/80 px-1.5 py-0.5 font-medium"
|
|
314
314
|
>
|
|
315
315
|
{t("mail.compose.apply")}
|
|
316
316
|
</button>
|
|
@@ -319,8 +319,11 @@ export function ComposeBubbleToolbar({
|
|
|
319
319
|
<div className="flex items-center gap-1 px-1">
|
|
320
320
|
{isGenerating ? (
|
|
321
321
|
<>
|
|
322
|
-
<IconLoader2
|
|
323
|
-
|
|
322
|
+
<IconLoader2
|
|
323
|
+
size={14}
|
|
324
|
+
className="animate-spin text-muted-foreground"
|
|
325
|
+
/>
|
|
326
|
+
<span className="text-xs text-muted-foreground px-1">
|
|
324
327
|
{t("mail.compose.generating")}
|
|
325
328
|
</span>
|
|
326
329
|
</>
|
|
@@ -344,13 +347,13 @@ export function ComposeBubbleToolbar({
|
|
|
344
347
|
setAiPrompt("");
|
|
345
348
|
}
|
|
346
349
|
}}
|
|
347
|
-
className="bg-transparent border-none outline-none text-
|
|
350
|
+
className="bg-transparent border-none outline-none text-popover-foreground text-sm w-52 px-1 py-0.5 placeholder:text-muted-foreground resize-none leading-snug"
|
|
348
351
|
/>
|
|
349
352
|
<Tooltip>
|
|
350
353
|
<TooltipTrigger asChild>
|
|
351
354
|
<button
|
|
352
355
|
onClick={() => void handleAiAssist()}
|
|
353
|
-
className="text-xs text-
|
|
356
|
+
className="text-xs text-primary hover:text-primary/80 px-1.5 py-0.5 font-medium shrink-0 self-end pb-1"
|
|
354
357
|
>
|
|
355
358
|
{t("mail.compose.generate")}
|
|
356
359
|
</button>
|
|
@@ -369,7 +372,7 @@ export function ComposeBubbleToolbar({
|
|
|
369
372
|
{items.map((item, i) => {
|
|
370
373
|
if ("type" in item && item.type === "divider") {
|
|
371
374
|
return (
|
|
372
|
-
<div key={`d-${i}`} className="w-px h-5 bg-
|
|
375
|
+
<div key={`d-${i}`} className="w-px h-5 bg-border mx-0.5" />
|
|
373
376
|
);
|
|
374
377
|
}
|
|
375
378
|
const {
|
|
@@ -391,8 +394,8 @@ export function ComposeBubbleToolbar({
|
|
|
391
394
|
className={cn(
|
|
392
395
|
"p-1.5 rounded transition-colors",
|
|
393
396
|
active
|
|
394
|
-
? "bg-
|
|
395
|
-
: "text-
|
|
397
|
+
? "bg-accent text-accent-foreground"
|
|
398
|
+
: "text-popover-foreground/75 hover:bg-accent hover:text-accent-foreground",
|
|
396
399
|
)}
|
|
397
400
|
>
|
|
398
401
|
<Icon size={14} strokeWidth={2.5} />
|
|
@@ -402,7 +405,7 @@ export function ComposeBubbleToolbar({
|
|
|
402
405
|
</Tooltip>
|
|
403
406
|
);
|
|
404
407
|
})}
|
|
405
|
-
<div className="w-px h-5 bg-
|
|
408
|
+
<div className="w-px h-5 bg-border mx-0.5" />
|
|
406
409
|
<Tooltip>
|
|
407
410
|
<TooltipTrigger asChild>
|
|
408
411
|
<button
|
|
@@ -412,7 +415,7 @@ export function ComposeBubbleToolbar({
|
|
|
412
415
|
setShowAiInput(true);
|
|
413
416
|
setShowLinkInput(false);
|
|
414
417
|
}}
|
|
415
|
-
className="p-1.5 rounded transition-colors text-
|
|
418
|
+
className="p-1.5 rounded transition-colors text-popover-foreground/75 hover:bg-accent hover:text-accent-foreground"
|
|
416
419
|
>
|
|
417
420
|
<IconPencil size={14} strokeWidth={2.5} />
|
|
418
421
|
</button>
|
|
@@ -525,12 +525,13 @@
|
|
|
525
525
|
.bubble-toolbar {
|
|
526
526
|
display: flex;
|
|
527
527
|
align-items: center;
|
|
528
|
-
background: hsl(
|
|
528
|
+
background: hsl(var(--popover));
|
|
529
|
+
color: hsl(var(--popover-foreground));
|
|
529
530
|
border-radius: 8px;
|
|
530
531
|
padding: 4px;
|
|
531
532
|
box-shadow:
|
|
532
533
|
0 4px 20px rgb(0 0 0 / 0.25),
|
|
533
|
-
0 0 0 1px
|
|
534
|
+
0 0 0 1px hsl(var(--border));
|
|
534
535
|
}
|
|
535
536
|
|
|
536
537
|
/* ===== Slash Command Menu ===== */
|