@agent-native/core 0.83.0 → 0.84.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/README.md +2 -2
- package/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +28 -0
- package/corpus/core/README.md +2 -2
- package/corpus/core/docs/content/cloneable-saas.mdx +2 -2
- 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/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/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/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/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/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/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/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/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/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/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/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/app/components/editor/BubbleToolbar.tsx +5 -5
- package/corpus/templates/content/app/global.css +6 -5
- package/corpus/templates/content/changelog/2026-06-30-editor-floating-toolbars-now-use-theme-aware-colors-in-light.md +6 -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/deploy/build.js +1 -1
- package/dist/deploy/build.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +2 -2
- package/dist/notifications/routes.d.ts +1 -1
- 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/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/faq.mdx +1 -1
- package/docs/content/locales/ar-SA/cloneable-saas.mdx +2 -2
- 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/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/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/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/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/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/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/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/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/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/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
|
@@ -346,7 +346,7 @@ function OptionButton({
|
|
|
346
346
|
<span className="sr-only">{option.description}</span>
|
|
347
347
|
)}
|
|
348
348
|
{option.preview && (
|
|
349
|
-
<span className="mt-2 block max-h-36 overflow-auto whitespace-pre-wrap rounded-md border border-border/60 bg-background/70 px-2 py-1.5 font-mono text-[11px] leading-4 text-muted-foreground">
|
|
349
|
+
<span className="mt-2 block max-h-36 overflow-auto whitespace-pre-wrap rounded-md border border-border/60 bg-background/70 px-2 py-1.5 font-mono !text-[11px] leading-4 text-muted-foreground">
|
|
350
350
|
{option.preview}
|
|
351
351
|
</span>
|
|
352
352
|
)}
|
|
@@ -23,15 +23,13 @@
|
|
|
23
23
|
import { useActionMutation } from "@agent-native/core/client";
|
|
24
24
|
import {
|
|
25
25
|
IconAlertCircle,
|
|
26
|
-
IconAlertTriangle,
|
|
27
26
|
IconArrowsLeftRight,
|
|
28
27
|
IconCheck,
|
|
29
28
|
IconChevronDown,
|
|
30
29
|
IconChevronRight,
|
|
31
|
-
IconInfoCircle,
|
|
32
30
|
IconRefresh,
|
|
33
31
|
IconShieldCheck,
|
|
34
|
-
|
|
32
|
+
IconTool,
|
|
35
33
|
} from "@tabler/icons-react";
|
|
36
34
|
import { useState } from "react";
|
|
37
35
|
|
|
@@ -131,24 +129,20 @@ export interface ReviewPanelProps {
|
|
|
131
129
|
|
|
132
130
|
interface SeverityConfig {
|
|
133
131
|
dot: string;
|
|
134
|
-
icon: React.ElementType;
|
|
135
132
|
label: string;
|
|
136
133
|
}
|
|
137
134
|
|
|
138
135
|
const SEVERITY_CONFIG: Record<A11ySeverity, SeverityConfig> = {
|
|
139
136
|
error: {
|
|
140
137
|
dot: "bg-destructive",
|
|
141
|
-
icon: IconAlertCircle,
|
|
142
138
|
label: "Error",
|
|
143
139
|
},
|
|
144
140
|
warning: {
|
|
145
141
|
dot: "bg-amber-400",
|
|
146
|
-
icon: IconAlertTriangle,
|
|
147
142
|
label: "Warning",
|
|
148
143
|
},
|
|
149
144
|
info: {
|
|
150
145
|
dot: "bg-blue-400",
|
|
151
|
-
icon: IconInfoCircle,
|
|
152
146
|
label: "Info",
|
|
153
147
|
},
|
|
154
148
|
};
|
|
@@ -194,7 +188,6 @@ function FindingRow({
|
|
|
194
188
|
onFixApplied?: (finding: A11yFinding, result?: ReviewFixResult) => void;
|
|
195
189
|
}) {
|
|
196
190
|
const cfg = SEVERITY_CONFIG[finding.severity];
|
|
197
|
-
const Icon = cfg.icon;
|
|
198
191
|
const [expanded, setExpanded] = useState(false);
|
|
199
192
|
const hasDetail = !!(finding.detail ?? finding.wcag);
|
|
200
193
|
|
|
@@ -246,8 +239,10 @@ function FindingRow({
|
|
|
246
239
|
return (
|
|
247
240
|
<div
|
|
248
241
|
className={cn(
|
|
249
|
-
"group rounded px-2 py-1.5 transition-colors",
|
|
250
|
-
onClick
|
|
242
|
+
"group rounded-[5px] px-2 py-1.5 transition-colors",
|
|
243
|
+
onClick
|
|
244
|
+
? "cursor-pointer hover:bg-[var(--design-editor-layer-hover-color)]"
|
|
245
|
+
: "cursor-default",
|
|
251
246
|
)}
|
|
252
247
|
role={onClick ? "button" : undefined}
|
|
253
248
|
tabIndex={onClick ? 0 : undefined}
|
|
@@ -257,28 +252,15 @@ function FindingRow({
|
|
|
257
252
|
}}
|
|
258
253
|
aria-label={finding.message}
|
|
259
254
|
>
|
|
260
|
-
<div className="flex items-start gap-2">
|
|
261
|
-
{/* Severity dot */}
|
|
255
|
+
<div className="flex items-start gap-2.5">
|
|
262
256
|
<span
|
|
263
257
|
className={cn("mt-[5px] size-1.5 shrink-0 rounded-full", cfg.dot)}
|
|
264
258
|
aria-hidden="true"
|
|
265
259
|
/>
|
|
266
260
|
|
|
267
|
-
{/* Message + expand toggle */}
|
|
268
261
|
<div className="min-w-0 flex-1">
|
|
269
|
-
<div className="flex items-center gap-1">
|
|
270
|
-
<
|
|
271
|
-
className={cn(
|
|
272
|
-
"size-3.5 shrink-0",
|
|
273
|
-
finding.severity === "error"
|
|
274
|
-
? "text-destructive"
|
|
275
|
-
: finding.severity === "warning"
|
|
276
|
-
? "text-amber-500"
|
|
277
|
-
: "text-blue-500",
|
|
278
|
-
)}
|
|
279
|
-
aria-hidden="true"
|
|
280
|
-
/>
|
|
281
|
-
<span className="truncate text-[11px] text-foreground leading-snug">
|
|
262
|
+
<div className="flex min-h-5 items-center gap-1">
|
|
263
|
+
<span className="truncate !text-[11px] font-medium leading-snug text-foreground">
|
|
282
264
|
{finding.message}
|
|
283
265
|
</span>
|
|
284
266
|
{hasDetail && (
|
|
@@ -301,16 +283,15 @@ function FindingRow({
|
|
|
301
283
|
)}
|
|
302
284
|
</div>
|
|
303
285
|
|
|
304
|
-
{
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
WCAG {finding.wcag}
|
|
286
|
+
{(finding.wcag || expanded) && (
|
|
287
|
+
<span className="text-[10px] capitalize text-muted-foreground/55">
|
|
288
|
+
{cfg.label}
|
|
289
|
+
{finding.wcag ? ` · WCAG ${finding.wcag}` : ""}
|
|
308
290
|
</span>
|
|
309
291
|
)}
|
|
310
292
|
|
|
311
|
-
{/* Expanded detail */}
|
|
312
293
|
{expanded && finding.detail && (
|
|
313
|
-
<p className="mt-1 text-[11px] leading-snug text-muted-foreground">
|
|
294
|
+
<p className="mt-1 !text-[11px] leading-snug text-muted-foreground">
|
|
314
295
|
{finding.detail}
|
|
315
296
|
</p>
|
|
316
297
|
)}
|
|
@@ -337,7 +318,7 @@ function FindingRow({
|
|
|
337
318
|
"h-5 shrink-0 gap-1 px-1.5 text-[10px]",
|
|
338
319
|
fixStatus === "error"
|
|
339
320
|
? "text-destructive hover:text-destructive"
|
|
340
|
-
: "text-muted-foreground hover:text-foreground",
|
|
321
|
+
: "text-muted-foreground opacity-0 hover:text-foreground group-hover:opacity-100 focus-visible:opacity-100",
|
|
341
322
|
)}
|
|
342
323
|
title={
|
|
343
324
|
fixStatus === "error"
|
|
@@ -349,7 +330,7 @@ function FindingRow({
|
|
|
349
330
|
{fixStatus === "pending" ? (
|
|
350
331
|
<IconRefresh className="size-3 animate-spin" />
|
|
351
332
|
) : (
|
|
352
|
-
<
|
|
333
|
+
<IconTool className="size-3" />
|
|
353
334
|
)}
|
|
354
335
|
{fixStatus === "error" ? "Retry" : "Fix"}
|
|
355
336
|
</Button>
|
|
@@ -368,7 +349,6 @@ function A11ySection({
|
|
|
368
349
|
loading,
|
|
369
350
|
auditedAt,
|
|
370
351
|
auditError,
|
|
371
|
-
onRunAudit,
|
|
372
352
|
onFindingClick,
|
|
373
353
|
fixSource,
|
|
374
354
|
onFixApplied,
|
|
@@ -377,7 +357,6 @@ function A11ySection({
|
|
|
377
357
|
loading?: boolean;
|
|
378
358
|
auditedAt?: string | null;
|
|
379
359
|
auditError?: string | null;
|
|
380
|
-
onRunAudit?: () => void;
|
|
381
360
|
onFindingClick?: (finding: A11yFinding) => void;
|
|
382
361
|
fixSource?: ReviewFixSource;
|
|
383
362
|
onFixApplied?: (finding: A11yFinding, result?: ReviewFixResult) => void;
|
|
@@ -388,20 +367,38 @@ function A11ySection({
|
|
|
388
367
|
|
|
389
368
|
const hasFindings = findings.length > 0;
|
|
390
369
|
const notRun = !auditedAt && !loading && !auditError && !hasFindings;
|
|
370
|
+
const statusLabel = loading
|
|
371
|
+
? "Scanning..."
|
|
372
|
+
: auditError
|
|
373
|
+
? "Could not scan"
|
|
374
|
+
: notRun
|
|
375
|
+
? "Not checked"
|
|
376
|
+
: hasFindings
|
|
377
|
+
? `${findings.length} ${findings.length === 1 ? "issue" : "issues"}`
|
|
378
|
+
: "No issues";
|
|
391
379
|
|
|
392
380
|
return (
|
|
393
381
|
<section aria-labelledby="review-a11y-heading">
|
|
394
|
-
|
|
395
|
-
<div className="flex h-7 items-center justify-between">
|
|
382
|
+
<div className="flex h-7 items-center justify-between gap-2">
|
|
396
383
|
<div className="flex items-center gap-1.5">
|
|
397
384
|
<IconShieldCheck className="size-3.5 text-muted-foreground" />
|
|
398
385
|
<span
|
|
399
386
|
id="review-a11y-heading"
|
|
400
|
-
className="text-[11px] font-semibold text-foreground"
|
|
387
|
+
className="!text-[11px] font-semibold text-foreground"
|
|
401
388
|
>
|
|
402
389
|
Accessibility
|
|
403
390
|
</span>
|
|
404
|
-
|
|
391
|
+
<span
|
|
392
|
+
className={cn(
|
|
393
|
+
"rounded px-1 py-0.5 text-[10px] font-medium text-muted-foreground/65",
|
|
394
|
+
!loading && !auditError && !notRun && !hasFindings
|
|
395
|
+
? "text-emerald-500"
|
|
396
|
+
: "",
|
|
397
|
+
)}
|
|
398
|
+
>
|
|
399
|
+
{statusLabel}
|
|
400
|
+
</span>
|
|
401
|
+
{hasFindings ? (
|
|
405
402
|
<div className="flex items-center gap-1">
|
|
406
403
|
{errors.length > 0 && (
|
|
407
404
|
<Badge
|
|
@@ -428,73 +425,46 @@ function A11ySection({
|
|
|
428
425
|
</Badge>
|
|
429
426
|
)}
|
|
430
427
|
</div>
|
|
431
|
-
)}
|
|
428
|
+
) : null}
|
|
432
429
|
</div>
|
|
433
|
-
|
|
434
|
-
{/* Run audit button */}
|
|
435
|
-
{onRunAudit && (
|
|
436
|
-
<Button
|
|
437
|
-
type="button"
|
|
438
|
-
variant="ghost"
|
|
439
|
-
size="sm"
|
|
440
|
-
disabled={loading}
|
|
441
|
-
onClick={onRunAudit}
|
|
442
|
-
className="h-6 gap-1 rounded-md px-1.5 text-[10px] text-muted-foreground hover:text-foreground"
|
|
443
|
-
>
|
|
444
|
-
{loading ? (
|
|
445
|
-
<IconRefresh className="size-3 animate-spin" />
|
|
446
|
-
) : (
|
|
447
|
-
<IconRefresh className="size-3" />
|
|
448
|
-
)}
|
|
449
|
-
{loading ? "Running…" : "Run"}
|
|
450
|
-
</Button>
|
|
451
|
-
)}
|
|
452
430
|
</div>
|
|
453
431
|
|
|
454
|
-
<Separator />
|
|
455
|
-
|
|
456
432
|
<div className="py-1">
|
|
457
|
-
{/* Error state */}
|
|
458
433
|
{auditError && (
|
|
459
|
-
<div className="flex min-h-7 items-center gap-2 rounded-[5px] px-2">
|
|
434
|
+
<div className="flex min-h-7 items-center gap-2 rounded-[5px] px-2 text-muted-foreground">
|
|
460
435
|
<IconAlertCircle className="size-3.5 shrink-0 text-destructive" />
|
|
461
|
-
<span className="text-[11px]
|
|
462
|
-
{auditError}
|
|
463
|
-
</span>
|
|
436
|
+
<span className="!text-[11px]">{auditError}</span>
|
|
464
437
|
</div>
|
|
465
438
|
)}
|
|
466
439
|
|
|
467
|
-
{/* Not yet run */}
|
|
468
440
|
{notRun && (
|
|
469
|
-
<div className="flex h-7 items-center
|
|
470
|
-
<
|
|
471
|
-
|
|
441
|
+
<div className="flex h-7 items-center rounded-[5px] px-2 text-muted-foreground/55">
|
|
442
|
+
<span className="truncate !text-[11px]">
|
|
443
|
+
Run a quick accessibility check.
|
|
444
|
+
</span>
|
|
472
445
|
</div>
|
|
473
446
|
)}
|
|
474
447
|
|
|
475
|
-
{/* Loading */}
|
|
476
448
|
{loading && !hasFindings && (
|
|
477
449
|
<div className="flex h-7 items-center gap-2 rounded-[5px] px-2">
|
|
478
450
|
<IconRefresh className="size-3.5 animate-spin text-muted-foreground/50" />
|
|
479
|
-
<span className="text-[11px] text-muted-foreground/60">
|
|
451
|
+
<span className="!text-[11px] text-muted-foreground/60">
|
|
480
452
|
Scanning…
|
|
481
453
|
</span>
|
|
482
454
|
</div>
|
|
483
455
|
)}
|
|
484
456
|
|
|
485
|
-
{/* All clear */}
|
|
486
457
|
{!loading && !auditError && !notRun && !hasFindings && (
|
|
487
458
|
<div className="flex h-7 items-center gap-2 rounded-[5px] px-2">
|
|
488
459
|
<IconCheck className="size-3.5 text-emerald-500" />
|
|
489
|
-
<span className="text-[11px] text-muted-foreground">
|
|
460
|
+
<span className="!text-[11px] text-muted-foreground">
|
|
490
461
|
No issues found.
|
|
491
462
|
</span>
|
|
492
463
|
</div>
|
|
493
464
|
)}
|
|
494
465
|
|
|
495
|
-
{/* Findings list */}
|
|
496
466
|
{hasFindings && (
|
|
497
|
-
<div className="
|
|
467
|
+
<div className="flex flex-col gap-0.5">
|
|
498
468
|
{[...errors, ...warnings, ...infos].map((finding) => (
|
|
499
469
|
<FindingRow
|
|
500
470
|
key={finding.id}
|
|
@@ -507,7 +477,6 @@ function A11ySection({
|
|
|
507
477
|
</div>
|
|
508
478
|
)}
|
|
509
479
|
|
|
510
|
-
{/* Audit timestamp */}
|
|
511
480
|
{auditedAt && (
|
|
512
481
|
<p className="mt-1 px-2 text-[10px] text-muted-foreground/40">
|
|
513
482
|
Last audited{" "}
|
|
@@ -565,7 +534,7 @@ function DiffRow({ entry }: { entry: VisualDiffEntry }) {
|
|
|
565
534
|
>
|
|
566
535
|
{cfg.label}
|
|
567
536
|
</Badge>
|
|
568
|
-
<span className="truncate text-[11px] text-foreground leading-snug">
|
|
537
|
+
<span className="truncate !text-[11px] text-foreground leading-snug">
|
|
569
538
|
{entry.description ?? entry.id}
|
|
570
539
|
</span>
|
|
571
540
|
</div>
|
|
@@ -592,6 +561,10 @@ function VisualDiffSection({
|
|
|
592
561
|
const hasDiff = diff.length > 0;
|
|
593
562
|
const hasVersions = versionOptions.length > 0;
|
|
594
563
|
const noVersionsSelected = !baseVersionId && !compareVersionId;
|
|
564
|
+
const shouldRender =
|
|
565
|
+
hasVersions || hasDiff || loading || !!diffError || !noVersionsSelected;
|
|
566
|
+
|
|
567
|
+
if (!shouldRender) return null;
|
|
595
568
|
|
|
596
569
|
return (
|
|
597
570
|
<section aria-labelledby="review-diff-heading">
|
|
@@ -599,7 +572,7 @@ function VisualDiffSection({
|
|
|
599
572
|
<IconArrowsLeftRight className="size-3.5 text-muted-foreground" />
|
|
600
573
|
<span
|
|
601
574
|
id="review-diff-heading"
|
|
602
|
-
className="text-[11px] font-semibold text-foreground"
|
|
575
|
+
className="!text-[11px] font-semibold text-foreground"
|
|
603
576
|
>
|
|
604
577
|
Visual diff
|
|
605
578
|
</span>
|
|
@@ -613,10 +586,7 @@ function VisualDiffSection({
|
|
|
613
586
|
)}
|
|
614
587
|
</div>
|
|
615
588
|
|
|
616
|
-
<Separator />
|
|
617
|
-
|
|
618
589
|
<div className="space-y-1.5 py-1">
|
|
619
|
-
{/* Version selectors */}
|
|
620
590
|
{hasVersions && (
|
|
621
591
|
<div className="flex items-center gap-1.5">
|
|
622
592
|
<span className="shrink-0 text-[10px] text-muted-foreground/70">
|
|
@@ -638,11 +608,10 @@ function VisualDiffSection({
|
|
|
638
608
|
</div>
|
|
639
609
|
)}
|
|
640
610
|
|
|
641
|
-
{/* States */}
|
|
642
611
|
{diffError && (
|
|
643
612
|
<div className="flex h-7 items-center gap-2 rounded-[5px] px-2">
|
|
644
613
|
<IconAlertCircle className="size-3.5 shrink-0 text-destructive" />
|
|
645
|
-
<span className="text-[11px] text-muted-foreground">
|
|
614
|
+
<span className="!text-[11px] text-muted-foreground">
|
|
646
615
|
{diffError}
|
|
647
616
|
</span>
|
|
648
617
|
</div>
|
|
@@ -651,14 +620,14 @@ function VisualDiffSection({
|
|
|
651
620
|
{loading && (
|
|
652
621
|
<div className="flex h-7 items-center gap-2 rounded-[5px] px-2">
|
|
653
622
|
<IconRefresh className="size-3.5 animate-spin text-muted-foreground/50" />
|
|
654
|
-
<span className="text-[11px] text-muted-foreground/60">
|
|
623
|
+
<span className="!text-[11px] text-muted-foreground/60">
|
|
655
624
|
Comparing…
|
|
656
625
|
</span>
|
|
657
626
|
</div>
|
|
658
627
|
)}
|
|
659
628
|
|
|
660
629
|
{!loading && !diffError && noVersionsSelected && !hasDiff && (
|
|
661
|
-
<div className="flex h-7 items-center rounded-[5px] px-2 text-[11px] text-muted-foreground/55">
|
|
630
|
+
<div className="flex h-7 items-center rounded-[5px] px-2 !text-[11px] text-muted-foreground/55">
|
|
662
631
|
{hasVersions ? "Choose versions to diff" : "No versions yet"}
|
|
663
632
|
</div>
|
|
664
633
|
)}
|
|
@@ -666,15 +635,14 @@ function VisualDiffSection({
|
|
|
666
635
|
{!loading && !diffError && !noVersionsSelected && !hasDiff && (
|
|
667
636
|
<div className="flex h-7 items-center gap-2 rounded-[5px] px-2">
|
|
668
637
|
<IconCheck className="size-3.5 text-emerald-500" />
|
|
669
|
-
<span className="text-[11px] text-muted-foreground">
|
|
638
|
+
<span className="!text-[11px] text-muted-foreground">
|
|
670
639
|
No structural changes detected.
|
|
671
640
|
</span>
|
|
672
641
|
</div>
|
|
673
642
|
)}
|
|
674
643
|
|
|
675
|
-
{/* Diff rows */}
|
|
676
644
|
{hasDiff && (
|
|
677
|
-
<div className="
|
|
645
|
+
<div className="flex flex-col gap-0.5">
|
|
678
646
|
{diff.map((entry) => (
|
|
679
647
|
<DiffRow key={entry.id} entry={entry} />
|
|
680
648
|
))}
|
|
@@ -704,7 +672,6 @@ export function ReviewPanel({
|
|
|
704
672
|
auditLoading,
|
|
705
673
|
auditedAt,
|
|
706
674
|
auditError,
|
|
707
|
-
onRunAudit,
|
|
708
675
|
visualDiff = [],
|
|
709
676
|
versionOptions = [],
|
|
710
677
|
baseVersionId,
|
|
@@ -717,9 +684,17 @@ export function ReviewPanel({
|
|
|
717
684
|
onFixApplied,
|
|
718
685
|
className,
|
|
719
686
|
}: ReviewPanelProps) {
|
|
687
|
+
const showDiffSection =
|
|
688
|
+
versionOptions.length > 0 ||
|
|
689
|
+
visualDiff.length > 0 ||
|
|
690
|
+
diffLoading ||
|
|
691
|
+
!!diffError ||
|
|
692
|
+
!!baseVersionId ||
|
|
693
|
+
!!compareVersionId;
|
|
694
|
+
|
|
720
695
|
return (
|
|
721
696
|
<div
|
|
722
|
-
className={cn("flex flex-col gap-
|
|
697
|
+
className={cn("flex flex-col gap-1 !text-[11px]", className)}
|
|
723
698
|
data-testid="review-panel"
|
|
724
699
|
>
|
|
725
700
|
<A11ySection
|
|
@@ -727,21 +702,25 @@ export function ReviewPanel({
|
|
|
727
702
|
loading={auditLoading}
|
|
728
703
|
auditedAt={auditedAt}
|
|
729
704
|
auditError={auditError}
|
|
730
|
-
onRunAudit={onRunAudit}
|
|
731
705
|
onFindingClick={onFindingClick}
|
|
732
706
|
fixSource={fixSource}
|
|
733
707
|
onFixApplied={onFixApplied}
|
|
734
708
|
/>
|
|
735
709
|
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
710
|
+
{showDiffSection ? (
|
|
711
|
+
<>
|
|
712
|
+
<Separator />
|
|
713
|
+
<VisualDiffSection
|
|
714
|
+
diff={visualDiff}
|
|
715
|
+
versionOptions={versionOptions}
|
|
716
|
+
baseVersionId={baseVersionId}
|
|
717
|
+
compareVersionId={compareVersionId}
|
|
718
|
+
onVersionChange={onVersionChange}
|
|
719
|
+
loading={diffLoading}
|
|
720
|
+
diffError={diffError}
|
|
721
|
+
/>
|
|
722
|
+
</>
|
|
723
|
+
) : null}
|
|
745
724
|
</div>
|
|
746
725
|
);
|
|
747
726
|
}
|
|
@@ -271,7 +271,7 @@ export function StatesPanel({
|
|
|
271
271
|
{/* ── Responsive breakpoints ── */}
|
|
272
272
|
<section aria-label="Breakpoints">
|
|
273
273
|
<div className="mb-1 flex items-center justify-between">
|
|
274
|
-
<span className="text-[11px] font-medium text-muted-foreground">
|
|
274
|
+
<span className="!text-[11px] font-medium text-muted-foreground">
|
|
275
275
|
Responsive
|
|
276
276
|
</span>
|
|
277
277
|
{onAddBreakpoint && (
|
|
@@ -346,7 +346,7 @@ export function StatesPanel({
|
|
|
346
346
|
{/* ── Design states ── */}
|
|
347
347
|
<section aria-label="Design states">
|
|
348
348
|
<div className="mb-1 flex items-center justify-between">
|
|
349
|
-
<span className="text-[11px] font-medium text-muted-foreground">
|
|
349
|
+
<span className="!text-[11px] font-medium text-muted-foreground">
|
|
350
350
|
States
|
|
351
351
|
</span>
|
|
352
352
|
<div className="flex items-center gap-0.5">
|
|
@@ -461,7 +461,7 @@ export function StatesPanel({
|
|
|
461
461
|
|
|
462
462
|
{/* Empty state (no user-created states yet) */}
|
|
463
463
|
{!isLoading && states.length === 0 && !isAdding && (
|
|
464
|
-
<div className="mt-1 flex h-7 items-center rounded-[5px] px-2 text-[11px] text-muted-foreground/55">
|
|
464
|
+
<div className="mt-1 flex h-7 items-center rounded-[5px] px-2 !text-[11px] text-muted-foreground/55">
|
|
465
465
|
No saved states
|
|
466
466
|
</div>
|
|
467
467
|
)}
|
|
@@ -480,7 +480,7 @@ export function StatesPanel({
|
|
|
480
480
|
value={newStateName}
|
|
481
481
|
onChange={(e) => setNewStateName(e.target.value)}
|
|
482
482
|
placeholder="State name…"
|
|
483
|
-
className="h-6 min-w-0 flex-1 rounded-md border border-[var(--design-editor-control-border)] bg-[var(--design-editor-control-bg)] px-1.5 text-[11px] text-foreground placeholder:text-muted-foreground/50 focus:outline-none focus:ring-1 focus:ring-[var(--design-editor-accent-color)]"
|
|
483
|
+
className="h-6 min-w-0 flex-1 rounded-md border border-[var(--design-editor-control-border)] bg-[var(--design-editor-control-bg)] px-1.5 !text-[11px] text-foreground placeholder:text-muted-foreground/50 focus:outline-none focus:ring-1 focus:ring-[var(--design-editor-accent-color)]"
|
|
484
484
|
onKeyDown={(e) => {
|
|
485
485
|
if (e.key === "Escape") {
|
|
486
486
|
setIsAdding(false);
|
|
@@ -491,7 +491,7 @@ export function StatesPanel({
|
|
|
491
491
|
<Button
|
|
492
492
|
type="submit"
|
|
493
493
|
size="sm"
|
|
494
|
-
className="h-6 cursor-pointer px-2 text-[11px]"
|
|
494
|
+
className="h-6 cursor-pointer px-2 !text-[11px]"
|
|
495
495
|
disabled={!newStateName.trim() || createState.isPending}
|
|
496
496
|
>
|
|
497
497
|
Add
|
|
@@ -500,7 +500,7 @@ export function StatesPanel({
|
|
|
500
500
|
type="button"
|
|
501
501
|
variant="ghost"
|
|
502
502
|
size="sm"
|
|
503
|
-
className="h-6 cursor-pointer px-2 text-[11px]"
|
|
503
|
+
className="h-6 cursor-pointer px-2 !text-[11px]"
|
|
504
504
|
onClick={() => {
|
|
505
505
|
setIsAdding(false);
|
|
506
506
|
setNewStateName("");
|
|
@@ -200,7 +200,7 @@ function TokenRow({
|
|
|
200
200
|
{/* Friendly name */}
|
|
201
201
|
<button
|
|
202
202
|
type="button"
|
|
203
|
-
className="min-w-0 flex-1 cursor-pointer truncate bg-transparent p-0 text-left text-[11px] text-foreground"
|
|
203
|
+
className="min-w-0 flex-1 cursor-pointer truncate bg-transparent p-0 text-left !text-[11px] text-foreground"
|
|
204
204
|
onClick={onStartEdit}
|
|
205
205
|
aria-label={`Edit ${token.name}`}
|
|
206
206
|
title={token.name}
|
|
@@ -220,7 +220,7 @@ function TokenRow({
|
|
|
220
220
|
if (e.key === "Escape") onCancelEdit();
|
|
221
221
|
}}
|
|
222
222
|
onBlur={onCommit}
|
|
223
|
-
className="h-5 w-24 px-1 py-0 text-[11px] font-mono"
|
|
223
|
+
className="h-5 w-24 px-1 py-0 !text-[11px] font-mono md:!text-[11px]"
|
|
224
224
|
/>
|
|
225
225
|
) : (
|
|
226
226
|
<button
|
|
@@ -360,7 +360,7 @@ function NewTokenPopover({ onAdd }: NewTokenPopoverProps) {
|
|
|
360
360
|
type="button"
|
|
361
361
|
variant="ghost"
|
|
362
362
|
size="sm"
|
|
363
|
-
className="h-6 cursor-pointer gap-1 px-2 text-[11px] text-muted-foreground hover:text-foreground"
|
|
363
|
+
className="h-6 cursor-pointer gap-1 px-2 !text-[11px] text-muted-foreground hover:text-foreground"
|
|
364
364
|
>
|
|
365
365
|
<IconPlus className="size-3" />
|
|
366
366
|
{t("designEditor.tokens.newToken")}
|
|
@@ -375,7 +375,7 @@ function NewTokenPopover({ onAdd }: NewTokenPopoverProps) {
|
|
|
375
375
|
<Input
|
|
376
376
|
value={cssVar}
|
|
377
377
|
onChange={(e) => setCssVar(e.target.value)}
|
|
378
|
-
className="h-6 font-mono text-[11px]"
|
|
378
|
+
className="h-6 font-mono !text-[11px] md:!text-[11px]"
|
|
379
379
|
placeholder="--my-token"
|
|
380
380
|
/>
|
|
381
381
|
</div>
|
|
@@ -386,13 +386,13 @@ function NewTokenPopover({ onAdd }: NewTokenPopoverProps) {
|
|
|
386
386
|
<Input
|
|
387
387
|
value={value}
|
|
388
388
|
onChange={(e) => setValue(e.target.value)}
|
|
389
|
-
className="h-6 font-mono text-[11px]"
|
|
389
|
+
className="h-6 font-mono !text-[11px] md:!text-[11px]"
|
|
390
390
|
placeholder="#3B82F6"
|
|
391
391
|
/>
|
|
392
392
|
</div>
|
|
393
393
|
<Button
|
|
394
394
|
type="button"
|
|
395
|
-
className="h-7 w-full cursor-pointer text-[11px]"
|
|
395
|
+
className="h-7 w-full cursor-pointer !text-[11px]"
|
|
396
396
|
onClick={handleAdd}
|
|
397
397
|
disabled={!cssVar || !value}
|
|
398
398
|
>
|
|
@@ -506,7 +506,7 @@ function ImportTokensPopover({
|
|
|
506
506
|
<PopoverContent align="end" className="w-72 p-3 text-[12px]">
|
|
507
507
|
<div className="space-y-3">
|
|
508
508
|
<div className="space-y-1">
|
|
509
|
-
<p className="text-[11px] font-medium text-foreground">
|
|
509
|
+
<p className="!text-[11px] font-medium text-foreground">
|
|
510
510
|
{t("designEditor.tokens.importTitle")}
|
|
511
511
|
</p>
|
|
512
512
|
<p className="text-[10px] leading-snug text-muted-foreground">
|
|
@@ -575,11 +575,11 @@ function ImportTokensPopover({
|
|
|
575
575
|
value={text}
|
|
576
576
|
onChange={(event) => setText(event.target.value)}
|
|
577
577
|
placeholder={t("designEditor.tokens.pastePlaceholder")}
|
|
578
|
-
className="min-h-24 resize-none font-mono text-[11px]"
|
|
578
|
+
className="min-h-24 resize-none font-mono !text-[11px]"
|
|
579
579
|
/>
|
|
580
580
|
<Button
|
|
581
581
|
type="button"
|
|
582
|
-
className="h-7 w-full cursor-pointer text-[11px]"
|
|
582
|
+
className="h-7 w-full cursor-pointer !text-[11px]"
|
|
583
583
|
disabled={isPending || !text.trim()}
|
|
584
584
|
onClick={() => void runImport(() => onImportText(text))}
|
|
585
585
|
>
|
|
@@ -720,7 +720,7 @@ export function TokensPanel({ designId, onTokensApplied }: TokensPanelProps) {
|
|
|
720
720
|
<div className="flex items-center justify-between border-b border-border/60 px-3 py-2">
|
|
721
721
|
<div className="flex items-center gap-1.5">
|
|
722
722
|
<IconCode className="size-3.5 text-muted-foreground/60" />
|
|
723
|
-
<span className="text-[11px] font-semibold text-foreground">
|
|
723
|
+
<span className="!text-[11px] font-semibold text-foreground">
|
|
724
724
|
{t("designEditor.tokens.title")}
|
|
725
725
|
</span>
|
|
726
726
|
{tokenCount > 0 && (
|
|
@@ -772,7 +772,7 @@ export function TokensPanel({ designId, onTokensApplied }: TokensPanelProps) {
|
|
|
772
772
|
{!isLoading && groups.length === 0 && (
|
|
773
773
|
<div className="flex flex-col items-center gap-2 px-4 py-8 text-center">
|
|
774
774
|
<IconPalette className="size-6 text-muted-foreground/30" />
|
|
775
|
-
<p className="text-[11px] leading-snug text-muted-foreground/60">
|
|
775
|
+
<p className="!text-[11px] leading-snug text-muted-foreground/60">
|
|
776
776
|
{t("designEditor.tokens.empty")}
|
|
777
777
|
</p>
|
|
778
778
|
<p className="text-[10px] text-muted-foreground/40">
|
|
@@ -58,7 +58,7 @@ export function TweaksPanelContent({
|
|
|
58
58
|
) : (
|
|
59
59
|
<div className="flex flex-col items-center gap-2 py-6 text-center">
|
|
60
60
|
<IconAdjustmentsHorizontal className="size-5 text-muted-foreground/40" />
|
|
61
|
-
<p className="text-[11px] leading-snug text-muted-foreground/70">
|
|
61
|
+
<p className="!text-[11px] leading-snug text-muted-foreground/70">
|
|
62
62
|
{t("designEditor.noTweakControls")}
|
|
63
63
|
</p>
|
|
64
64
|
{onRequestTweaks && (
|
|
@@ -66,7 +66,7 @@ export function TweaksPanelContent({
|
|
|
66
66
|
type="button"
|
|
67
67
|
variant="outline"
|
|
68
68
|
size="sm"
|
|
69
|
-
className="h-6 cursor-pointer border-[var(--design-editor-control-border)] bg-[var(--design-editor-control-bg)] px-2.5 text-[11px] text-foreground shadow-none hover:bg-[var(--design-editor-panel-raised-bg)] hover:text-foreground focus-visible:ring-1 focus-visible:ring-[var(--design-editor-accent-color)] focus-visible:ring-offset-0"
|
|
69
|
+
className="h-6 cursor-pointer border-[var(--design-editor-control-border)] bg-[var(--design-editor-control-bg)] px-2.5 !text-[11px] text-foreground shadow-none hover:bg-[var(--design-editor-panel-raised-bg)] hover:text-foreground focus-visible:ring-1 focus-visible:ring-[var(--design-editor-accent-color)] focus-visible:ring-offset-0"
|
|
70
70
|
onClick={(e) => onRequestTweaks(e.currentTarget)}
|
|
71
71
|
>
|
|
72
72
|
<IconPlus className="size-3" />
|
|
@@ -153,7 +153,7 @@ export function TweaksPanel({
|
|
|
153
153
|
type="button"
|
|
154
154
|
onMouseDown={(e) => e.stopPropagation()}
|
|
155
155
|
onClick={() => setCollapsed((c) => !c)}
|
|
156
|
-
className="cursor-pointer text-[11px] font-semibold text-foreground hover:text-foreground/80"
|
|
156
|
+
className="cursor-pointer !text-[11px] font-semibold text-foreground hover:text-foreground/80"
|
|
157
157
|
>
|
|
158
158
|
{t("designEditor.tweaks")}
|
|
159
159
|
</button>
|
|
@@ -225,7 +225,9 @@ function TweakControl({
|
|
|
225
225
|
if (tweak.type === "toggle") {
|
|
226
226
|
return (
|
|
227
227
|
<div className="flex h-6 items-center justify-between gap-1.5">
|
|
228
|
-
<span className="text-[11px] text-muted-foreground">
|
|
228
|
+
<span className="!text-[11px] text-muted-foreground">
|
|
229
|
+
{tweak.label}
|
|
230
|
+
</span>
|
|
229
231
|
<Switch
|
|
230
232
|
checked={!!value}
|
|
231
233
|
onCheckedChange={(checked) => onChange(checked)}
|
|
@@ -237,7 +239,7 @@ function TweakControl({
|
|
|
237
239
|
|
|
238
240
|
return (
|
|
239
241
|
<div className="space-y-1">
|
|
240
|
-
<span className="text-[11px] text-muted-foreground">{tweak.label}</span>
|
|
242
|
+
<span className="!text-[11px] text-muted-foreground">{tweak.label}</span>
|
|
241
243
|
|
|
242
244
|
{((tweak.type as string) === "color-swatch" ||
|
|
243
245
|
(tweak.type as string) === "color-swatches") && (
|
|
@@ -271,7 +273,7 @@ function TweakControl({
|
|
|
271
273
|
key={opt.value}
|
|
272
274
|
onClick={() => onChange(opt.value)}
|
|
273
275
|
className={cn(
|
|
274
|
-
"flex flex-1 cursor-pointer items-center justify-center px-2 text-[11px] font-medium transition-colors",
|
|
276
|
+
"flex flex-1 cursor-pointer items-center justify-center px-2 !text-[11px] font-medium transition-colors",
|
|
275
277
|
value === opt.value
|
|
276
278
|
? "bg-accent text-foreground"
|
|
277
279
|
: "text-muted-foreground/70 hover:bg-accent/50 hover:text-foreground",
|
|
@@ -302,7 +304,7 @@ function TweakControl({
|
|
|
302
304
|
onValueChange={([v]) => onChange(v)}
|
|
303
305
|
className="flex-1"
|
|
304
306
|
/>
|
|
305
|
-
<span className="min-w-[2ch] text-right text-[11px] tabular-nums text-muted-foreground">
|
|
307
|
+
<span className="min-w-[2ch] text-right !text-[11px] tabular-nums text-muted-foreground">
|
|
306
308
|
{sliderValue}
|
|
307
309
|
{tweak.unit ??
|
|
308
310
|
(tweak.cssVar?.toLowerCase().includes("radius")
|