@agent-native/core 0.82.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.
Files changed (474) hide show
  1. package/README.md +2 -2
  2. package/corpus/README.md +1 -1
  3. package/corpus/core/CHANGELOG.md +34 -0
  4. package/corpus/core/README.md +2 -2
  5. package/corpus/core/docs/content/cloneable-saas.mdx +2 -2
  6. package/corpus/core/docs/content/faq.mdx +1 -1
  7. package/corpus/core/docs/content/locales/ar-SA/cloneable-saas.mdx +2 -2
  8. package/corpus/core/docs/content/locales/ar-SA/faq.mdx +1 -1
  9. package/corpus/core/docs/content/locales/ar-SA/template-chat.mdx +1 -1
  10. package/corpus/core/docs/content/locales/de-DE/cloneable-saas.mdx +2 -2
  11. package/corpus/core/docs/content/locales/de-DE/faq.mdx +1 -1
  12. package/corpus/core/docs/content/locales/de-DE/template-chat.mdx +1 -1
  13. package/corpus/core/docs/content/locales/es-ES/cloneable-saas.mdx +2 -2
  14. package/corpus/core/docs/content/locales/es-ES/faq.mdx +1 -1
  15. package/corpus/core/docs/content/locales/es-ES/template-chat.mdx +1 -1
  16. package/corpus/core/docs/content/locales/fr-FR/cloneable-saas.mdx +2 -2
  17. package/corpus/core/docs/content/locales/fr-FR/faq.mdx +1 -1
  18. package/corpus/core/docs/content/locales/fr-FR/template-chat.mdx +1 -1
  19. package/corpus/core/docs/content/locales/hi-IN/cloneable-saas.mdx +2 -2
  20. package/corpus/core/docs/content/locales/hi-IN/faq.mdx +1 -1
  21. package/corpus/core/docs/content/locales/hi-IN/template-chat.mdx +1 -1
  22. package/corpus/core/docs/content/locales/ja-JP/cloneable-saas.mdx +2 -2
  23. package/corpus/core/docs/content/locales/ja-JP/faq.mdx +1 -1
  24. package/corpus/core/docs/content/locales/ja-JP/template-chat.mdx +1 -1
  25. package/corpus/core/docs/content/locales/ko-KR/cloneable-saas.mdx +2 -2
  26. package/corpus/core/docs/content/locales/ko-KR/faq.mdx +1 -1
  27. package/corpus/core/docs/content/locales/ko-KR/template-chat.mdx +1 -1
  28. package/corpus/core/docs/content/locales/pt-BR/cloneable-saas.mdx +2 -2
  29. package/corpus/core/docs/content/locales/pt-BR/faq.mdx +1 -1
  30. package/corpus/core/docs/content/locales/pt-BR/template-chat.mdx +1 -1
  31. package/corpus/core/docs/content/locales/zh-CN/cloneable-saas.mdx +2 -2
  32. package/corpus/core/docs/content/locales/zh-CN/faq.mdx +1 -1
  33. package/corpus/core/docs/content/locales/zh-CN/template-chat.mdx +1 -1
  34. package/corpus/core/docs/content/locales/zh-TW/cloneable-saas.mdx +2 -2
  35. package/corpus/core/docs/content/locales/zh-TW/faq.mdx +1 -1
  36. package/corpus/core/docs/content/locales/zh-TW/template-chat.mdx +1 -1
  37. package/corpus/core/docs/content/template-chat.mdx +1 -1
  38. package/corpus/core/package.json +1 -1
  39. package/corpus/core/src/agent/engine/builtin.ts +1 -1
  40. package/corpus/core/src/agent/engine/output-tokens.ts +1 -1
  41. package/corpus/core/src/agent/harness/acp-adapter.ts +28 -4
  42. package/corpus/core/src/agent/harness/ai-sdk-adapter.ts +3 -0
  43. package/corpus/core/src/agent/harness/translate.ts +3 -0
  44. package/corpus/core/src/agent/harness/types.ts +1 -0
  45. package/corpus/core/src/agent/model-config.ts +34 -13
  46. package/corpus/core/src/agent/production-agent.ts +87 -10
  47. package/corpus/core/src/agent/thread-data-builder.ts +29 -4
  48. package/corpus/core/src/agent/tool-call-journal.ts +109 -48
  49. package/corpus/core/src/agent/types.ts +6 -1
  50. package/corpus/core/src/cli/design-connect.ts +106 -0
  51. package/corpus/core/src/cli/gateway-helpers.ts +17 -0
  52. package/corpus/core/src/cli/recap.ts +0 -2
  53. package/corpus/core/src/cli/skills.ts +54 -16
  54. package/corpus/core/src/cli/workspace-dev.ts +29 -5
  55. package/corpus/core/src/client/AssistantChat.tsx +89 -42
  56. package/corpus/core/src/client/CommandMenu.tsx +34 -12
  57. package/corpus/core/src/client/DefaultSpinner.tsx +8 -1
  58. package/corpus/core/src/client/chat/message-components.tsx +49 -1
  59. package/corpus/core/src/client/chat/repo-helpers.ts +71 -0
  60. package/corpus/core/src/client/chat/run-recovery.tsx +15 -5
  61. package/corpus/core/src/client/components/ApiKeySettings.tsx +8 -8
  62. package/corpus/core/src/client/components/CodeRequiredDialog.tsx +26 -15
  63. package/corpus/core/src/client/components/MissingKeyCard.tsx +13 -6
  64. package/corpus/core/src/client/composer/TiptapComposer.tsx +4 -3
  65. package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +0 -1
  66. package/corpus/core/src/client/guided-questions.tsx +21 -27
  67. package/corpus/core/src/client/integrations/IntegrationCard.tsx +1 -1
  68. package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +1 -1
  69. package/corpus/core/src/client/onboarding/OnboardingBanner.tsx +2 -2
  70. package/corpus/core/src/client/onboarding/OnboardingPanel.tsx +23 -19
  71. package/corpus/core/src/client/resources/ResourceEditor.tsx +18 -10
  72. package/corpus/core/src/client/resources/ResourcesPanel.tsx +5 -1
  73. package/corpus/core/src/client/settings/SettingsPanel.tsx +8 -3
  74. package/corpus/core/src/client/settings/useBuilderStatus.ts +8 -41
  75. package/corpus/core/src/client/useProductionAgent.ts +6 -2
  76. package/corpus/core/src/deploy/build.ts +1 -1
  77. package/corpus/core/src/observability/traces.ts +3 -3
  78. package/corpus/core/src/onboarding/default-steps.ts +1 -1
  79. package/corpus/core/src/scripts/agent-engines/manage-agent-engine.ts +1 -1
  80. package/corpus/core/src/scripts/agent-engines/set-agent-engine.ts +1 -1
  81. package/corpus/core/src/server/agent-chat-plugin.ts +177 -81
  82. package/corpus/core/src/server/core-routes-plugin.ts +7 -1
  83. package/corpus/core/src/server/open-route.ts +59 -40
  84. package/corpus/core/src/shared/reasoning-effort.ts +2 -0
  85. package/corpus/core/src/sharing/access.ts +22 -2
  86. package/corpus/core/src/sharing/registry.ts +18 -0
  87. package/corpus/core/src/styles/agent-native.css +104 -20
  88. package/corpus/core/src/styles/rich-markdown-editor.css +11 -10
  89. package/corpus/templates/analytics/actions/hubspot-deals.ts +64 -4
  90. package/corpus/templates/analytics/app/components/dashboard/CumulativeNetChart.tsx +10 -10
  91. package/corpus/templates/analytics/app/components/dashboard/RevenueChart.tsx +10 -10
  92. package/corpus/templates/analytics/app/components/dashboard/RevenueComparisonChart.tsx +6 -5
  93. package/corpus/templates/analytics/app/components/dashboard/TimeSeriesChart.tsx +9 -9
  94. package/corpus/templates/analytics/app/global.css +4 -0
  95. package/corpus/templates/analytics/app/lib/chart-theme.ts +13 -0
  96. package/corpus/templates/analytics/app/pages/adhoc/_shared/KpiChart.tsx +22 -24
  97. package/corpus/templates/analytics/changelog/2026-06-30-dashboard-charts-now-use-theme-aware-tooltip-and-grid-colors.md +6 -0
  98. package/corpus/templates/analytics/changelog/2026-06-30-fixed-ask-composer-spacing-so-the-chat-field-has-a-comfortab.md +6 -0
  99. package/corpus/templates/calendar/AGENTS.md +4 -0
  100. package/corpus/templates/calendar/actions/connect-google-calendar.ts +80 -0
  101. package/corpus/templates/calendar/changelog/2026-06-30-calendar-now-gives-the-agent-a-safe-google-connection-link-i.md +6 -0
  102. package/corpus/templates/calendar/server/plugins/agent-chat.ts +4 -0
  103. package/corpus/templates/content/.env.local.example +6 -0
  104. package/corpus/templates/content/AGENTS.md +10 -1
  105. package/corpus/templates/content/actions/_builder-cms-read-client.ts +14 -1
  106. package/corpus/templates/content/actions/_builder-cms-source-adapter.ts +43 -0
  107. package/corpus/templates/content/actions/_builder-cms-write-adapter.ts +79 -7
  108. package/corpus/templates/content/actions/_database-source-utils.ts +987 -22
  109. package/corpus/templates/content/actions/_database-utils.ts +41 -0
  110. package/corpus/templates/content/actions/_local-file-documents.ts +74 -1
  111. package/corpus/templates/content/actions/attach-content-database-source.ts +33 -8
  112. package/corpus/templates/content/actions/change-content-database-source-role.ts +14 -0
  113. package/corpus/templates/content/actions/disconnect-content-database-source.ts +3 -0
  114. package/corpus/templates/content/actions/execute-builder-source-execution.ts +71 -3
  115. package/corpus/templates/content/actions/list-content-databases.ts +41 -33
  116. package/corpus/templates/content/actions/process-builder-body-hydration.ts +47 -0
  117. package/corpus/templates/content/actions/update-document.ts +93 -0
  118. package/corpus/templates/content/app/blocks/SourceComponentBlock.tsx +277 -0
  119. package/corpus/templates/content/app/blocks/contentBlockRegistry.tsx +2 -0
  120. package/corpus/templates/content/app/components/editor/BubbleToolbar.tsx +5 -5
  121. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +45 -4
  122. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +5 -1
  123. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +92 -0
  124. package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +5 -3
  125. package/corpus/templates/content/app/components/editor/extensions/registryBlocks.ts +41 -0
  126. package/corpus/templates/content/app/components/editor/registrySlashItems.ts +4 -0
  127. package/corpus/templates/content/app/global.css +16 -8
  128. package/corpus/templates/content/app/hooks/use-content-database.ts +24 -0
  129. package/corpus/templates/content/app/i18n/zh-TW.ts +24 -0
  130. package/corpus/templates/content/app/i18n-data.ts +212 -0
  131. package/corpus/templates/content/app/lib/content-command-search.ts +64 -0
  132. package/corpus/templates/content/app/root.tsx +236 -8
  133. package/corpus/templates/content/changelog/2026-06-29-builder-cms-sources-now-sync-article-bodies-through-content.md +6 -0
  134. package/corpus/templates/content/changelog/2026-06-30-builder-article-media-now-render-as-images-and-embeds-when-r.md +6 -0
  135. package/corpus/templates/content/changelog/2026-06-30-builder-source-components-now-render-as-preserved-preview-bl.md +6 -0
  136. package/corpus/templates/content/changelog/2026-06-30-cmd-k-search-now-opens-from-the-editor-and-finds-real-content.md +6 -0
  137. package/corpus/templates/content/changelog/2026-06-30-editor-floating-toolbars-now-use-theme-aware-colors-in-light.md +6 -0
  138. package/corpus/templates/content/package.json +3 -1
  139. package/corpus/templates/content/scripts/check-native-deps.mjs +57 -0
  140. package/corpus/templates/content/scripts/dev-database.mjs +83 -0
  141. package/corpus/templates/content/scripts/seed-demo-user.mjs +107 -0
  142. package/corpus/templates/content/server/db/schema.ts +27 -0
  143. package/corpus/templates/content/server/plugins/db.ts +33 -0
  144. package/corpus/templates/content/shared/api.ts +45 -0
  145. package/corpus/templates/content/shared/builder-mdx.ts +905 -5
  146. package/corpus/templates/content/shared/nfm-registry.ts +2 -0
  147. package/corpus/templates/content/shared/source-component-block.ts +141 -0
  148. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +6 -1
  149. package/corpus/templates/design/actions/add-localhost-screens.ts +63 -8
  150. package/corpus/templates/design/actions/apply-motion-edit.ts +12 -46
  151. package/corpus/templates/design/actions/list-design-native-assets.ts +2 -1
  152. package/corpus/templates/design/actions/migrate-board-objects-to-file.ts +49 -1
  153. package/corpus/templates/design/actions/navigate.ts +3 -12
  154. package/corpus/templates/design/actions/open-visual-edit.ts +341 -0
  155. package/corpus/templates/design/actions/view-screen.ts +1 -1
  156. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +1 -1
  157. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +350 -15
  158. package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +71 -91
  159. package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +25 -27
  160. package/corpus/templates/design/app/components/design/DeviceFrame.tsx +1 -1
  161. package/corpus/templates/design/app/components/design/DrawOverlay.tsx +2 -2
  162. package/corpus/templates/design/app/components/design/EditPanel.tsx +1111 -570
  163. package/corpus/templates/design/app/components/design/LayersPanel.tsx +162 -32
  164. package/corpus/templates/design/app/components/design/MotionDock.tsx +268 -240
  165. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +1193 -207
  166. package/corpus/templates/design/app/components/design/QuestionFlow.tsx +1 -1
  167. package/corpus/templates/design/app/components/design/ReviewPanel.tsx +81 -102
  168. package/corpus/templates/design/app/components/design/StatesPanel.tsx +6 -6
  169. package/corpus/templates/design/app/components/design/TokensPanel.tsx +11 -11
  170. package/corpus/templates/design/app/components/design/TweaksPanel.tsx +9 -7
  171. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +1225 -154
  172. package/corpus/templates/design/app/components/design/bridge/hit-test.bridge.ts +130 -37
  173. package/corpus/templates/design/app/components/design/canvas-primitive-style.ts +24 -11
  174. package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +184 -162
  175. package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +137 -79
  176. package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +13 -13
  177. package/corpus/templates/design/app/components/design/inspector/ExportSettingsPanel.tsx +8 -8
  178. package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +2 -2
  179. package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +4 -4
  180. package/corpus/templates/design/app/components/design/inspector/InspectorAiActions.tsx +3 -3
  181. package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +13 -7
  182. package/corpus/templates/design/app/components/design/inspector/ShaderControls.tsx +14 -11
  183. package/corpus/templates/design/app/components/design/inspector/ShaderFillsPanel.tsx +4 -4
  184. package/corpus/templates/design/app/components/design/inspector/index.ts +2 -0
  185. package/corpus/templates/design/app/components/design/types.ts +19 -0
  186. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +61 -78
  187. package/corpus/templates/design/app/components/layout/Header.tsx +0 -1
  188. package/corpus/templates/design/app/components/layout/Layout.tsx +3 -2
  189. package/corpus/templates/design/app/components/layout/Sidebar.tsx +0 -2
  190. package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +5 -4
  191. package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +1 -1
  192. package/corpus/templates/design/app/components/visual-editor/SaveStatusIndicator.tsx +2 -2
  193. package/corpus/templates/design/app/global.css +56 -0
  194. package/corpus/templates/design/app/hooks/use-agent-generating.ts +4 -5
  195. package/corpus/templates/design/app/hooks/use-navigation-state.ts +6 -7
  196. package/corpus/templates/design/app/hooks/use-question-flow.ts +3 -2
  197. package/corpus/templates/design/app/hooks/useAgentEditRequest.ts +6 -4
  198. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +6 -3
  199. package/corpus/templates/design/app/i18n/zh-TW.ts +5 -14
  200. package/corpus/templates/design/app/i18n-data.ts +63 -188
  201. package/corpus/templates/design/app/lib/agent-chat.ts +13 -0
  202. package/corpus/templates/design/app/pages/DesignEditor.tsx +1755 -401
  203. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +9 -5
  204. package/corpus/templates/design/app/pages/DesignSystems.tsx +2 -2
  205. package/corpus/templates/design/app/pages/Index.tsx +49 -26
  206. package/corpus/templates/design/app/pages/NotFound.tsx +25 -8
  207. package/corpus/templates/design/app/pages/VisualEdit.tsx +17 -5
  208. package/corpus/templates/design/app/routes/examples.tsx +1 -7
  209. package/corpus/templates/design/app/routes/templates.tsx +7 -4
  210. package/corpus/templates/design/changelog/2026-06-30-board-shapes-and-auto-layout-controls-are-clearer.md +6 -0
  211. package/corpus/templates/design/changelog/2026-06-30-canvas-editing-now-keeps-undo-redo-and-cross-screen-layer-mo.md +6 -0
  212. package/corpus/templates/design/changelog/2026-06-30-component-selections-now-use-purple-component-chrome-and-sho.md +6 -0
  213. package/corpus/templates/design/changelog/2026-06-30-constraints-now-stay-tucked-into-a-compact-inspector-preview.md +6 -0
  214. package/corpus/templates/design/changelog/2026-06-30-creating-a-component-now-opens-in-a-compact-inspector-popove.md +6 -0
  215. package/corpus/templates/design/changelog/2026-06-30-design-cards-no-longer-show-legacy-project-type-badges.md +6 -0
  216. package/corpus/templates/design/changelog/2026-06-30-design-chat-now-keeps-new-turns-in-the-visible-design-agent-.md +6 -0
  217. package/corpus/templates/design/changelog/2026-06-30-design-editor-panels-now-keep-their-compact-text-sizing-cons.md +6 -0
  218. package/corpus/templates/design/changelog/2026-06-30-design-no-longer-shows-the-connected-local-code-warning-bann.md +6 -0
  219. package/corpus/templates/design/changelog/2026-06-30-design-now-opens-to-the-files-panel-unless-a-generation-is-a.md +6 -0
  220. package/corpus/templates/design/changelog/2026-06-30-design-opens-with-a-cleaner-empty-canvas-and-loading-preview.md +6 -0
  221. package/corpus/templates/design/changelog/2026-06-30-design-tools-use-simpler-less-decorative-icons.md +6 -0
  222. package/corpus/templates/design/changelog/2026-06-30-dragging-absolute-elements-no-longer-shows-coordinate-labels.md +6 -0
  223. package/corpus/templates/design/changelog/2026-06-30-fixed-all-screens-opening-too-zoomed-in-by-default.md +6 -0
  224. package/corpus/templates/design/changelog/2026-06-30-fixed-the-public-design-assets-sidebar-so-native-components-.md +6 -0
  225. package/corpus/templates/design/changelog/2026-06-30-fixed-the-screen-overview-board-so-empty-board-space-no-long.md +6 -0
  226. package/corpus/templates/design/changelog/2026-06-30-full-view-screens-can-now-scroll-while-remaining-editable.md +6 -0
  227. package/corpus/templates/design/changelog/2026-06-30-inspector-element-headers-show-the-selected-html-tag-and-the.md +6 -0
  228. package/corpus/templates/design/changelog/2026-06-30-inspector-inputs-stay-compact-across-desktop-breakpoints.md +6 -0
  229. package/corpus/templates/design/changelog/2026-06-30-layers-can-be-multi-selected-from-the-canvas-and-edited-toge.md +6 -0
  230. package/corpus/templates/design/changelog/2026-06-30-local-visual-edit-links-can-edit-localhost-frames-without-si.md +6 -0
  231. package/corpus/templates/design/changelog/2026-06-30-localhost-visual-edit-frames-can-now-be-selected-and-edited.md +6 -0
  232. package/corpus/templates/design/changelog/2026-06-30-marquee-selection-now-works-inside-screens-multi-selected-la.md +6 -0
  233. package/corpus/templates/design/changelog/2026-06-30-motion-is-now-available-from-the-persistent-left-rail-and-th.md +6 -0
  234. package/corpus/templates/design/changelog/2026-06-30-motion-timeline-collapse-and-reopen-animations-feel-smoother.md +6 -0
  235. package/corpus/templates/design/changelog/2026-06-30-multi-select-outlines-now-stay-consistent-across-all-screens.md +6 -0
  236. package/corpus/templates/design/changelog/2026-06-30-new-board-shapes-now-start-with-neutral-gray-styling.md +6 -0
  237. package/corpus/templates/design/changelog/2026-06-30-new-designs-open-into-a-steadier-loading-state-before-the-ed.md +6 -0
  238. package/corpus/templates/design/changelog/2026-06-30-new-designs-show-a-loading-state-during-handoff-and-keep-edi.md +6 -0
  239. package/corpus/templates/design/changelog/2026-06-30-public-visual-edit-design-links-now-open-directly-instead-of.md +6 -0
  240. package/corpus/templates/design/changelog/2026-06-30-removed-the-confusing-states-section-from-the-design-editor-.md +6 -0
  241. package/corpus/templates/design/changelog/2026-06-30-removed-the-templates-gallery-from-design-navigation.md +6 -0
  242. package/corpus/templates/design/changelog/2026-06-30-share-stays-visible-as-soon-as-editable-designs-load.md +6 -0
  243. package/corpus/templates/design/changelog/2026-06-30-signed-out-save-and-share-controls-use-simpler-labels-and-op.md +6 -0
  244. package/corpus/templates/design/changelog/2026-06-30-text-added-on-the-canvas-now-focuses-cleanly-with-the-right-.md +6 -0
  245. package/corpus/templates/design/changelog/2026-06-30-the-design-editor-loading-skeleton-is-simpler-and-its-bottom.md +6 -0
  246. package/corpus/templates/design/changelog/2026-06-30-the-design-editor-loading-skeleton-now-follows-the-current-t.md +6 -0
  247. package/corpus/templates/design/changelog/2026-06-30-the-design-inspector-no-longer-shows-child-layout-controls-o.md +6 -0
  248. package/corpus/templates/design/changelog/2026-06-30-the-design-inspector-no-longer-shows-the-ask-ai-section-abov.md +6 -0
  249. package/corpus/templates/design/changelog/2026-06-30-the-design-review-panel-no-longer-shows-a-separate-inline-au.md +6 -0
  250. package/corpus/templates/design/changelog/2026-06-30-the-empty-designs-page-now-focuses-on-a-single-primary-new-d.md +6 -0
  251. package/corpus/templates/design/changelog/2026-06-30-the-layers-panel-header-stays-as-layers-while-multiple-items.md +6 -0
  252. package/corpus/templates/design/changelog/2026-06-30-the-missing-design-screen-now-uses-a-neutral-back-button.md +6 -0
  253. package/corpus/templates/design/changelog/2026-06-30-the-motion-timeline-now-closes-without-squeezing-the-canvas-.md +6 -0
  254. package/corpus/templates/design/changelog/2026-06-30-the-new-design-connect-ai-setup-now-lines-up-with-the-compos.md +6 -0
  255. package/corpus/templates/design/changelog/2026-06-30-the-screen-overview-board-now-blends-into-the-canvas-and-new.md +6 -0
  256. package/corpus/templates/design/changelog/2026-06-30-top-level-canvas-drops-now-show-screen-guides.md +6 -0
  257. package/corpus/templates/design/changelog/2026-06-30-top-level-canvas-layers-now-keep-a-transparent-backdrop-and-.md +6 -0
  258. package/corpus/templates/design/changelog/2026-06-30-top-level-canvas-layers-now-select-reliably-from-all-screens.md +6 -0
  259. package/corpus/templates/design/changelog/2026-06-30-visual-edit-can-open-and-refresh-localhost-screens-in-one-au.md +6 -0
  260. package/corpus/templates/design/e2e/helpers.ts +15 -4
  261. package/corpus/templates/design/server/db/index.ts +52 -0
  262. package/corpus/templates/design/server/plugins/agent-chat.ts +5 -0
  263. package/corpus/templates/design/server/plugins/auth.ts +1 -0
  264. package/corpus/templates/design/server/plugins/core-routes.ts +4 -0
  265. package/corpus/templates/design/shared/board-file.ts +380 -5
  266. package/corpus/templates/design/shared/board-objects.ts +2 -2
  267. package/corpus/templates/design/shared/code-layer.ts +50 -6
  268. package/corpus/templates/design/shared/motion-compiler.ts +27 -0
  269. package/corpus/templates/macros/app/components/DailyProgress.tsx +41 -37
  270. package/corpus/templates/macros/app/components/ExerciseCard.tsx +2 -2
  271. package/corpus/templates/macros/app/components/MealCard.tsx +2 -2
  272. package/corpus/templates/macros/app/components/VoiceDictation.tsx +1 -1
  273. package/corpus/templates/macros/app/components/WeeklyCaloriesChart.tsx +1 -1
  274. package/corpus/templates/macros/app/components/WeightCard.tsx +2 -2
  275. package/corpus/templates/macros/app/components/WeightTracker.tsx +1 -1
  276. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +1 -1
  277. package/corpus/templates/macros/app/routes/_index.tsx +5 -5
  278. package/corpus/templates/macros/app/routes/analytics.tsx +1 -1
  279. package/corpus/templates/macros/changelog/2026-06-30-dashboard-loading-and-chart-surfaces-now-use-theme-aware-col.md +6 -0
  280. package/corpus/templates/mail/app/components/email/ComposeBubbleToolbar.tsx +14 -11
  281. package/corpus/templates/mail/app/global.css +3 -2
  282. package/corpus/templates/mail/changelog/2026-06-30-compose-floating-toolbars-now-use-theme-aware-colors-in-ligh.md +6 -0
  283. package/corpus/templates/plan/app/pages/PlansPage.tsx +2 -2
  284. package/corpus/templates/slides/app/components/deck/DeckCard.tsx +3 -3
  285. package/corpus/templates/slides/app/global.css +10 -0
  286. package/corpus/templates/slides/app/pages/Index.tsx +55 -51
  287. package/corpus/templates/slides/changelog/2026-06-30-deck-thumbnails-collapse-cleanly-to-one-column-when-the-chat.md +6 -0
  288. package/dist/agent/engine/anthropic-engine.d.ts +2 -2
  289. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  290. package/dist/agent/engine/builder-engine.d.ts +2 -2
  291. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  292. package/dist/agent/engine/builtin.js +1 -1
  293. package/dist/agent/engine/builtin.js.map +1 -1
  294. package/dist/agent/engine/output-tokens.js +1 -1
  295. package/dist/agent/engine/output-tokens.js.map +1 -1
  296. package/dist/agent/harness/acp-adapter.d.ts +4 -1
  297. package/dist/agent/harness/acp-adapter.d.ts.map +1 -1
  298. package/dist/agent/harness/acp-adapter.js +19 -2
  299. package/dist/agent/harness/acp-adapter.js.map +1 -1
  300. package/dist/agent/harness/ai-sdk-adapter.d.ts.map +1 -1
  301. package/dist/agent/harness/ai-sdk-adapter.js +3 -0
  302. package/dist/agent/harness/ai-sdk-adapter.js.map +1 -1
  303. package/dist/agent/harness/translate.d.ts.map +1 -1
  304. package/dist/agent/harness/translate.js +3 -0
  305. package/dist/agent/harness/translate.js.map +1 -1
  306. package/dist/agent/harness/types.d.ts +1 -0
  307. package/dist/agent/harness/types.d.ts.map +1 -1
  308. package/dist/agent/harness/types.js.map +1 -1
  309. package/dist/agent/model-config.d.ts +21 -20
  310. package/dist/agent/model-config.d.ts.map +1 -1
  311. package/dist/agent/model-config.js +31 -13
  312. package/dist/agent/model-config.js.map +1 -1
  313. package/dist/agent/production-agent.d.ts.map +1 -1
  314. package/dist/agent/production-agent.js +85 -10
  315. package/dist/agent/production-agent.js.map +1 -1
  316. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  317. package/dist/agent/thread-data-builder.js +27 -6
  318. package/dist/agent/thread-data-builder.js.map +1 -1
  319. package/dist/agent/tool-call-journal.d.ts +11 -9
  320. package/dist/agent/tool-call-journal.d.ts.map +1 -1
  321. package/dist/agent/tool-call-journal.js +92 -40
  322. package/dist/agent/tool-call-journal.js.map +1 -1
  323. package/dist/agent/types.d.ts +5 -1
  324. package/dist/agent/types.d.ts.map +1 -1
  325. package/dist/agent/types.js.map +1 -1
  326. package/dist/cli/design-connect.d.ts.map +1 -1
  327. package/dist/cli/design-connect.js +84 -0
  328. package/dist/cli/design-connect.js.map +1 -1
  329. package/dist/cli/gateway-helpers.d.ts +4 -0
  330. package/dist/cli/gateway-helpers.d.ts.map +1 -1
  331. package/dist/cli/gateway-helpers.js +9 -0
  332. package/dist/cli/gateway-helpers.js.map +1 -1
  333. package/dist/cli/recap.d.ts.map +1 -1
  334. package/dist/cli/recap.js +0 -2
  335. package/dist/cli/recap.js.map +1 -1
  336. package/dist/cli/skills.d.ts.map +1 -1
  337. package/dist/cli/skills.js +54 -16
  338. package/dist/cli/skills.js.map +1 -1
  339. package/dist/cli/workspace-dev.d.ts.map +1 -1
  340. package/dist/cli/workspace-dev.js +33 -6
  341. package/dist/cli/workspace-dev.js.map +1 -1
  342. package/dist/client/AssistantChat.d.ts.map +1 -1
  343. package/dist/client/AssistantChat.js +72 -26
  344. package/dist/client/AssistantChat.js.map +1 -1
  345. package/dist/client/CommandMenu.d.ts +6 -2
  346. package/dist/client/CommandMenu.d.ts.map +1 -1
  347. package/dist/client/CommandMenu.js +25 -14
  348. package/dist/client/CommandMenu.js.map +1 -1
  349. package/dist/client/DefaultSpinner.d.ts.map +1 -1
  350. package/dist/client/DefaultSpinner.js +8 -1
  351. package/dist/client/DefaultSpinner.js.map +1 -1
  352. package/dist/client/chat/message-components.d.ts +7 -1
  353. package/dist/client/chat/message-components.d.ts.map +1 -1
  354. package/dist/client/chat/message-components.js +37 -1
  355. package/dist/client/chat/message-components.js.map +1 -1
  356. package/dist/client/chat/repo-helpers.d.ts +1 -0
  357. package/dist/client/chat/repo-helpers.d.ts.map +1 -1
  358. package/dist/client/chat/repo-helpers.js +59 -0
  359. package/dist/client/chat/repo-helpers.js.map +1 -1
  360. package/dist/client/chat/run-recovery.d.ts.map +1 -1
  361. package/dist/client/chat/run-recovery.js +4 -4
  362. package/dist/client/chat/run-recovery.js.map +1 -1
  363. package/dist/client/components/ApiKeySettings.js +8 -8
  364. package/dist/client/components/ApiKeySettings.js.map +1 -1
  365. package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
  366. package/dist/client/components/CodeRequiredDialog.js +24 -15
  367. package/dist/client/components/CodeRequiredDialog.js.map +1 -1
  368. package/dist/client/components/MissingKeyCard.d.ts.map +1 -1
  369. package/dist/client/components/MissingKeyCard.js +11 -6
  370. package/dist/client/components/MissingKeyCard.js.map +1 -1
  371. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  372. package/dist/client/composer/TiptapComposer.js +4 -3
  373. package/dist/client/composer/TiptapComposer.js.map +1 -1
  374. package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
  375. package/dist/client/extensions/ExtensionsSidebarSection.js +1 -1
  376. package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
  377. package/dist/client/guided-questions.d.ts.map +1 -1
  378. package/dist/client/guided-questions.js +6 -6
  379. package/dist/client/guided-questions.js.map +1 -1
  380. package/dist/client/integrations/IntegrationCard.js +1 -1
  381. package/dist/client/integrations/IntegrationCard.js.map +1 -1
  382. package/dist/client/integrations/IntegrationsPanel.js +1 -1
  383. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  384. package/dist/client/onboarding/OnboardingBanner.js +2 -2
  385. package/dist/client/onboarding/OnboardingBanner.js.map +1 -1
  386. package/dist/client/onboarding/OnboardingPanel.js +23 -19
  387. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  388. package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
  389. package/dist/client/resources/ResourceEditor.js +13 -10
  390. package/dist/client/resources/ResourceEditor.js.map +1 -1
  391. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  392. package/dist/client/resources/ResourcesPanel.js +2 -1
  393. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  394. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  395. package/dist/client/settings/SettingsPanel.js +8 -3
  396. package/dist/client/settings/SettingsPanel.js.map +1 -1
  397. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  398. package/dist/client/settings/useBuilderStatus.js +6 -38
  399. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  400. package/dist/client/useProductionAgent.d.ts +2 -1
  401. package/dist/client/useProductionAgent.d.ts.map +1 -1
  402. package/dist/client/useProductionAgent.js.map +1 -1
  403. package/dist/deploy/build.js +1 -1
  404. package/dist/deploy/build.js.map +1 -1
  405. package/dist/notifications/routes.d.ts +3 -3
  406. package/dist/observability/routes.d.ts +3 -3
  407. package/dist/observability/traces.d.ts.map +1 -1
  408. package/dist/observability/traces.js.map +1 -1
  409. package/dist/onboarding/default-steps.js +1 -1
  410. package/dist/onboarding/default-steps.js.map +1 -1
  411. package/dist/scripts/agent-engines/manage-agent-engine.js +1 -1
  412. package/dist/scripts/agent-engines/manage-agent-engine.js.map +1 -1
  413. package/dist/scripts/agent-engines/set-agent-engine.js +1 -1
  414. package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -1
  415. package/dist/server/agent-chat-plugin.d.ts +3 -0
  416. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  417. package/dist/server/agent-chat-plugin.js +134 -72
  418. package/dist/server/agent-chat-plugin.js.map +1 -1
  419. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  420. package/dist/server/core-routes-plugin.d.ts +3 -0
  421. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  422. package/dist/server/core-routes-plugin.js +4 -1
  423. package/dist/server/core-routes-plugin.js.map +1 -1
  424. package/dist/server/open-route.d.ts +9 -0
  425. package/dist/server/open-route.d.ts.map +1 -1
  426. package/dist/server/open-route.js +48 -38
  427. package/dist/server/open-route.js.map +1 -1
  428. package/dist/shared/reasoning-effort.js +3 -0
  429. package/dist/shared/reasoning-effort.js.map +1 -1
  430. package/dist/sharing/access.d.ts.map +1 -1
  431. package/dist/sharing/access.js +18 -2
  432. package/dist/sharing/access.js.map +1 -1
  433. package/dist/sharing/registry.d.ts +10 -0
  434. package/dist/sharing/registry.d.ts.map +1 -1
  435. package/dist/sharing/registry.js.map +1 -1
  436. package/dist/styles/agent-native.css +104 -20
  437. package/dist/styles/rich-markdown-editor.css +11 -10
  438. package/docs/content/cloneable-saas.mdx +2 -2
  439. package/docs/content/faq.mdx +1 -1
  440. package/docs/content/locales/ar-SA/cloneable-saas.mdx +2 -2
  441. package/docs/content/locales/ar-SA/faq.mdx +1 -1
  442. package/docs/content/locales/ar-SA/template-chat.mdx +1 -1
  443. package/docs/content/locales/de-DE/cloneable-saas.mdx +2 -2
  444. package/docs/content/locales/de-DE/faq.mdx +1 -1
  445. package/docs/content/locales/de-DE/template-chat.mdx +1 -1
  446. package/docs/content/locales/es-ES/cloneable-saas.mdx +2 -2
  447. package/docs/content/locales/es-ES/faq.mdx +1 -1
  448. package/docs/content/locales/es-ES/template-chat.mdx +1 -1
  449. package/docs/content/locales/fr-FR/cloneable-saas.mdx +2 -2
  450. package/docs/content/locales/fr-FR/faq.mdx +1 -1
  451. package/docs/content/locales/fr-FR/template-chat.mdx +1 -1
  452. package/docs/content/locales/hi-IN/cloneable-saas.mdx +2 -2
  453. package/docs/content/locales/hi-IN/faq.mdx +1 -1
  454. package/docs/content/locales/hi-IN/template-chat.mdx +1 -1
  455. package/docs/content/locales/ja-JP/cloneable-saas.mdx +2 -2
  456. package/docs/content/locales/ja-JP/faq.mdx +1 -1
  457. package/docs/content/locales/ja-JP/template-chat.mdx +1 -1
  458. package/docs/content/locales/ko-KR/cloneable-saas.mdx +2 -2
  459. package/docs/content/locales/ko-KR/faq.mdx +1 -1
  460. package/docs/content/locales/ko-KR/template-chat.mdx +1 -1
  461. package/docs/content/locales/pt-BR/cloneable-saas.mdx +2 -2
  462. package/docs/content/locales/pt-BR/faq.mdx +1 -1
  463. package/docs/content/locales/pt-BR/template-chat.mdx +1 -1
  464. package/docs/content/locales/zh-CN/cloneable-saas.mdx +2 -2
  465. package/docs/content/locales/zh-CN/faq.mdx +1 -1
  466. package/docs/content/locales/zh-CN/template-chat.mdx +1 -1
  467. package/docs/content/locales/zh-TW/cloneable-saas.mdx +2 -2
  468. package/docs/content/locales/zh-TW/faq.mdx +1 -1
  469. package/docs/content/locales/zh-TW/template-chat.mdx +1 -1
  470. package/docs/content/template-chat.mdx +1 -1
  471. package/package.json +1 -1
  472. package/corpus/templates/design/app/components/design/LocalSourceEditBanner.tsx +0 -157
  473. package/corpus/templates/design/app/lib/design-templates.ts +0 -1305
  474. package/corpus/templates/design/app/pages/Templates.tsx +0 -279
@@ -72,6 +72,10 @@ export interface AutoLayoutMatrixValue {
72
72
  horizontal?: number;
73
73
  vertical?: number;
74
74
  };
75
+ mixedSize?: {
76
+ horizontal?: boolean;
77
+ vertical?: boolean;
78
+ };
75
79
  childSizing: {
76
80
  horizontal: AutoLayoutSizing;
77
81
  vertical: AutoLayoutSizing;
@@ -184,6 +188,7 @@ export interface AutoLayoutMatrixProps {
184
188
  availableChildSizing?: Partial<
185
189
  Record<AutoLayoutSizingAxis, AutoLayoutSizing[]>
186
190
  >;
191
+ showChildLayoutControls?: boolean;
187
192
  labels?: Partial<AutoLayoutMatrixLabels>;
188
193
  disabled?: boolean;
189
194
  className?: string;
@@ -254,6 +259,7 @@ export function AutoLayoutMatrix({
254
259
  onDisplayChange,
255
260
  onChildSizeChange,
256
261
  availableChildSizing,
262
+ showChildLayoutControls = true,
257
263
  labels,
258
264
  disabled = false,
259
265
  className,
@@ -297,69 +303,71 @@ export function AutoLayoutMatrix({
297
303
  <TooltipProvider delayDuration={250}>
298
304
  <div className={cn("space-y-3", className)}>
299
305
  {/* ── Flow ── */}
300
- <div className="space-y-1.5">
301
- <ControlLabel>
302
- {"Flow" /* i18n-ignore design inspector label */}
303
- </ControlLabel>
304
- <div className="flex items-center gap-1.5">
305
- {/* 4-segment flow bar: normal / vertical / horizontal / grid */}
306
- <div className="flex h-7 flex-1 items-center gap-0.5 rounded-md bg-[var(--design-editor-control-bg)] p-0.5">
307
- <FlowButton
308
- label={"Normal flow" /* i18n-ignore design inspector label */}
309
- active={activeFlow === "normal"}
310
- disabled={disabled}
311
- onClick={() => selectFlow("normal")}
312
- >
313
- <IconFlowNormal />
314
- </FlowButton>
315
- <FlowButton
316
- label={copy.vertical}
317
- active={activeFlow === "vertical"}
318
- disabled={disabled}
319
- onClick={() => selectFlow("vertical")}
320
- >
321
- <IconFlowVertical className="size-3.5" />
322
- </FlowButton>
323
- <FlowButton
324
- label={copy.horizontal}
325
- active={activeFlow === "horizontal"}
326
- disabled={disabled}
327
- onClick={() => selectFlow("horizontal")}
328
- >
329
- <IconFlowHorizontal className="size-3.5" />
330
- </FlowButton>
331
- <FlowButton
332
- label={"Grid" /* i18n-ignore design inspector label */}
333
- active={activeFlow === "grid"}
334
- disabled={disabled}
335
- onClick={() => selectFlow("grid")}
336
- >
337
- <IconFlowGrid className="size-3.5" />
338
- </FlowButton>
339
- </div>
340
- {/* Reset / reverse-flow button */}
341
- <Tooltip>
342
- <TooltipTrigger asChild>
343
- <Button
344
- type="button"
345
- variant="ghost"
346
- size="icon"
306
+ {showChildLayoutControls ? (
307
+ <div className="space-y-1.5">
308
+ <ControlLabel>
309
+ {"Flow" /* i18n-ignore design inspector label */}
310
+ </ControlLabel>
311
+ <div className="flex items-center gap-1.5">
312
+ {/* 4-segment flow bar: normal / vertical / horizontal / grid */}
313
+ <div className="flex h-7 flex-1 items-center gap-0.5 rounded-md bg-[var(--design-editor-control-bg)] p-0.5">
314
+ <FlowButton
315
+ label={"Normal flow" /* i18n-ignore design inspector label */}
316
+ active={activeFlow === "normal"}
317
+ disabled={disabled}
318
+ onClick={() => selectFlow("normal")}
319
+ >
320
+ <IconFlowNormal />
321
+ </FlowButton>
322
+ <FlowButton
323
+ label={copy.vertical}
324
+ active={activeFlow === "vertical"}
325
+ disabled={disabled}
326
+ onClick={() => selectFlow("vertical")}
327
+ >
328
+ <IconFlowVertical className="size-3.5" />
329
+ </FlowButton>
330
+ <FlowButton
331
+ label={copy.horizontal}
332
+ active={activeFlow === "horizontal"}
347
333
  disabled={disabled}
348
- aria-label={
349
- "Reset auto layout flow" /* i18n-ignore inspector tooltip */
350
- }
351
334
  onClick={() => selectFlow("horizontal")}
352
- className="size-7 shrink-0 rounded-md text-muted-foreground hover:bg-[var(--design-editor-control-bg)] hover:text-foreground"
353
335
  >
354
- <IconArrowBackUp className="size-4" />
355
- </Button>
356
- </TooltipTrigger>
357
- <TooltipContent>
358
- {"Reset auto layout flow" /* i18n-ignore inspector tooltip */}
359
- </TooltipContent>
360
- </Tooltip>
336
+ <IconFlowHorizontal className="size-3.5" />
337
+ </FlowButton>
338
+ <FlowButton
339
+ label={"Grid" /* i18n-ignore design inspector label */}
340
+ active={activeFlow === "grid"}
341
+ disabled={disabled}
342
+ onClick={() => selectFlow("grid")}
343
+ >
344
+ <IconFlowGrid className="size-3.5" />
345
+ </FlowButton>
346
+ </div>
347
+ {/* Reset / reverse-flow button */}
348
+ <Tooltip>
349
+ <TooltipTrigger asChild>
350
+ <Button
351
+ type="button"
352
+ variant="ghost"
353
+ size="icon"
354
+ disabled={disabled}
355
+ aria-label={
356
+ "Reset auto layout flow" /* i18n-ignore inspector tooltip */
357
+ }
358
+ onClick={() => selectFlow("horizontal")}
359
+ className="size-7 shrink-0 rounded-md text-muted-foreground hover:bg-[var(--design-editor-control-bg)] hover:text-foreground"
360
+ >
361
+ <IconArrowBackUp className="size-4" />
362
+ </Button>
363
+ </TooltipTrigger>
364
+ <TooltipContent>
365
+ {"Reset auto layout flow" /* i18n-ignore inspector tooltip */}
366
+ </TooltipContent>
367
+ </Tooltip>
368
+ </div>
361
369
  </div>
362
- </div>
370
+ ) : null}
363
371
 
364
372
  {/* ── Resizing ── */}
365
373
  <div className="space-y-1.5">
@@ -372,6 +380,7 @@ export function AutoLayoutMatrix({
372
380
  sizingAxis="horizontal"
373
381
  value={value.childSizing.horizontal}
374
382
  resolvedSize={value.resolvedSize?.horizontal}
383
+ mixed={Boolean(value.mixedSize?.horizontal)}
375
384
  minMax={value.childMinMax?.horizontal}
376
385
  options={resolveSizingOptions(
377
386
  availableChildSizing?.horizontal,
@@ -393,6 +402,7 @@ export function AutoLayoutMatrix({
393
402
  sizingAxis="vertical"
394
403
  value={value.childSizing.vertical}
395
404
  resolvedSize={value.resolvedSize?.vertical}
405
+ mixed={Boolean(value.mixedSize?.vertical)}
396
406
  minMax={value.childMinMax?.vertical}
397
407
  options={resolveSizingOptions(
398
408
  availableChildSizing?.vertical,
@@ -436,7 +446,7 @@ export function AutoLayoutMatrix({
436
446
  </div>
437
447
  </div>
438
448
 
439
- {!isBlock ? (
449
+ {showChildLayoutControls && !isBlock ? (
440
450
  <div className="grid grid-cols-[78px_1fr] items-start gap-3">
441
451
  <div className="space-y-1.5">
442
452
  <ControlLabel>
@@ -468,111 +478,115 @@ export function AutoLayoutMatrix({
468
478
  ) : null}
469
479
 
470
480
  {/* ── Padding ── */}
471
- <div className="space-y-1.5">
472
- <ControlLabel>{copy.padding}</ControlLabel>
473
- {value.paddingLinked ? (
474
- /* Default linked state: 2 compact fields + link toggle */
475
- <div className="grid grid-cols-[1fr_1fr_auto] items-center gap-1.5">
476
- <PaddingField
477
- icon={IconPaddingHorizontal}
478
- ariaLabel={copy.paddingLeft + " / " + copy.paddingRight}
479
- value={horizontalPaddingValue}
480
- onChange={(next) =>
481
- onPaddingChange({
482
- top: value.padding.top,
483
- bottom: value.padding.bottom,
484
- left: next,
485
- right: next,
486
- })
487
- }
488
- disabled={disabled}
489
- />
490
- <PaddingField
491
- icon={IconPaddingVertical}
492
- ariaLabel={copy.paddingTop + " / " + copy.paddingBottom}
493
- value={verticalPaddingValue}
494
- onChange={(next) =>
495
- onPaddingChange({
496
- top: next,
497
- bottom: next,
498
- left: value.padding.left,
499
- right: value.padding.right,
500
- })
501
- }
502
- disabled={disabled}
503
- />
504
- <PaddingLinkButton
505
- linked
506
- disabled={disabled}
507
- linkLabel={copy.linkPadding}
508
- unlinkLabel={copy.unlinkPadding}
509
- onToggle={() => onPaddingLinkedChange(false)}
510
- />
511
- </div>
512
- ) : (
513
- /* Unlinked state: expand to 4 separate T / R / B / L fields */
514
- <div className="grid grid-cols-[1fr_1fr_auto] items-center gap-1.5">
515
- <div className="col-span-2 grid grid-cols-2 gap-1.5">
481
+ {showChildLayoutControls ? (
482
+ <div className="space-y-1.5">
483
+ <ControlLabel>{copy.padding}</ControlLabel>
484
+ {value.paddingLinked ? (
485
+ /* Default linked state: 2 compact fields + link toggle */
486
+ <div className="grid grid-cols-[1fr_1fr_auto] items-center gap-1.5">
516
487
  <PaddingField
517
- icon={IconPaddingTopMini}
518
- ariaLabel={copy.paddingTop}
519
- value={value.padding.top}
488
+ icon={IconPaddingHorizontal}
489
+ ariaLabel={copy.paddingLeft + " / " + copy.paddingRight}
490
+ value={horizontalPaddingValue}
520
491
  onChange={(next) =>
521
- onPaddingChange({ ...value.padding, top: next })
492
+ onPaddingChange({
493
+ top: value.padding.top,
494
+ bottom: value.padding.bottom,
495
+ left: next,
496
+ right: next,
497
+ })
522
498
  }
523
499
  disabled={disabled}
524
500
  />
525
501
  <PaddingField
526
- icon={IconPaddingRightMini}
527
- ariaLabel={copy.paddingRight}
528
- value={value.padding.right}
502
+ icon={IconPaddingVertical}
503
+ ariaLabel={copy.paddingTop + " / " + copy.paddingBottom}
504
+ value={verticalPaddingValue}
529
505
  onChange={(next) =>
530
- onPaddingChange({ ...value.padding, right: next })
506
+ onPaddingChange({
507
+ top: next,
508
+ bottom: next,
509
+ left: value.padding.left,
510
+ right: value.padding.right,
511
+ })
531
512
  }
532
513
  disabled={disabled}
533
514
  />
534
- <PaddingField
535
- icon={IconPaddingBottomMini}
536
- ariaLabel={copy.paddingBottom}
537
- value={value.padding.bottom}
538
- onChange={(next) =>
539
- onPaddingChange({ ...value.padding, bottom: next })
540
- }
515
+ <PaddingLinkButton
516
+ linked
541
517
  disabled={disabled}
518
+ linkLabel={copy.linkPadding}
519
+ unlinkLabel={copy.unlinkPadding}
520
+ onToggle={() => onPaddingLinkedChange(false)}
542
521
  />
543
- <PaddingField
544
- icon={IconPaddingLeftMini}
545
- ariaLabel={copy.paddingLeft}
546
- value={value.padding.left}
547
- onChange={(next) =>
548
- onPaddingChange({ ...value.padding, left: next })
549
- }
522
+ </div>
523
+ ) : (
524
+ /* Unlinked state: expand to 4 separate T / R / B / L fields */
525
+ <div className="grid grid-cols-[1fr_1fr_auto] items-center gap-1.5">
526
+ <div className="col-span-2 grid grid-cols-2 gap-1.5">
527
+ <PaddingField
528
+ icon={IconPaddingTopMini}
529
+ ariaLabel={copy.paddingTop}
530
+ value={value.padding.top}
531
+ onChange={(next) =>
532
+ onPaddingChange({ ...value.padding, top: next })
533
+ }
534
+ disabled={disabled}
535
+ />
536
+ <PaddingField
537
+ icon={IconPaddingRightMini}
538
+ ariaLabel={copy.paddingRight}
539
+ value={value.padding.right}
540
+ onChange={(next) =>
541
+ onPaddingChange({ ...value.padding, right: next })
542
+ }
543
+ disabled={disabled}
544
+ />
545
+ <PaddingField
546
+ icon={IconPaddingBottomMini}
547
+ ariaLabel={copy.paddingBottom}
548
+ value={value.padding.bottom}
549
+ onChange={(next) =>
550
+ onPaddingChange({ ...value.padding, bottom: next })
551
+ }
552
+ disabled={disabled}
553
+ />
554
+ <PaddingField
555
+ icon={IconPaddingLeftMini}
556
+ ariaLabel={copy.paddingLeft}
557
+ value={value.padding.left}
558
+ onChange={(next) =>
559
+ onPaddingChange({ ...value.padding, left: next })
560
+ }
561
+ disabled={disabled}
562
+ />
563
+ </div>
564
+ <PaddingLinkButton
565
+ linked={false}
550
566
  disabled={disabled}
567
+ linkLabel={copy.linkPadding}
568
+ unlinkLabel={copy.unlinkPadding}
569
+ onToggle={() => onPaddingLinkedChange(true)}
551
570
  />
552
571
  </div>
553
- <PaddingLinkButton
554
- linked={false}
555
- disabled={disabled}
556
- linkLabel={copy.linkPadding}
557
- unlinkLabel={copy.unlinkPadding}
558
- onToggle={() => onPaddingLinkedChange(true)}
559
- />
560
- </div>
561
- )}
562
- </div>
572
+ )}
573
+ </div>
574
+ ) : null}
563
575
 
564
576
  {/* ── Clip content ── */}
565
- <label className="flex h-6 cursor-pointer items-center gap-2 text-[11px] text-foreground">
566
- <Checkbox
567
- checked={Boolean(value.clipContent)}
568
- disabled={disabled}
569
- onCheckedChange={(checked) =>
570
- onClipContentChange?.(checked === true)
571
- }
572
- className="size-3.5 rounded-[3px]"
573
- />
574
- <span>{copy.clipContent}</span>
575
- </label>
577
+ {showChildLayoutControls ? (
578
+ <label className="flex h-6 cursor-pointer items-center gap-2 !text-[11px] text-foreground">
579
+ <Checkbox
580
+ checked={Boolean(value.clipContent)}
581
+ disabled={disabled}
582
+ onCheckedChange={(checked) =>
583
+ onClipContentChange?.(checked === true)
584
+ }
585
+ className="size-3.5 rounded-[3px]"
586
+ />
587
+ <span>{copy.clipContent}</span>
588
+ </label>
589
+ ) : null}
576
590
  </div>
577
591
  </TooltipProvider>
578
592
  );
@@ -804,7 +818,7 @@ function AlignmentBars({
804
818
  /** Small uppercase muted section label, 11px. */
805
819
  function ControlLabel({ children }: { children: ReactNode }) {
806
820
  return (
807
- <span className="block text-[11px] font-medium text-muted-foreground">
821
+ <span className="block !text-[11px] font-medium text-muted-foreground">
808
822
  {children}
809
823
  </span>
810
824
  );
@@ -898,8 +912,8 @@ function GapField({
898
912
  precision={1}
899
913
  disabled={disabled}
900
914
  className="min-w-0 flex-1 gap-0"
901
- labelClassName="h-7 w-6 justify-center gap-0 rounded-l-md text-muted-foreground [&>span]:hidden"
902
- inputClassName="h-6 border-0 bg-transparent px-1 text-[11px] shadow-none focus-visible:ring-0"
915
+ labelClassName="h-7 w-6 justify-center gap-0 rounded-l-md rounded-r-none text-muted-foreground [&>span]:hidden"
916
+ inputClassName="h-6 border-0 bg-transparent px-1 !text-[11px] shadow-none focus-visible:ring-0"
903
917
  />
904
918
  {onDistribute != null ? (
905
919
  <DropdownMenu>
@@ -1013,8 +1027,8 @@ function PaddingField({
1013
1027
  precision={1}
1014
1028
  disabled={disabled}
1015
1029
  className="min-w-0 flex-1 gap-0"
1016
- labelClassName="h-7 w-6 justify-center gap-0 rounded-l-md text-muted-foreground [&>span]:hidden"
1017
- inputClassName="h-6 border-0 bg-transparent px-1 text-[11px] shadow-none focus-visible:ring-0"
1030
+ labelClassName="h-7 w-6 justify-center gap-0 rounded-l-md rounded-r-none text-muted-foreground [&>span]:hidden"
1031
+ inputClassName="h-6 border-0 bg-transparent px-1 !text-[11px] shadow-none focus-visible:ring-0"
1018
1032
  />
1019
1033
  </div>
1020
1034
  );
@@ -1071,6 +1085,7 @@ export interface SizingFieldProps {
1071
1085
  sizingAxis: AutoLayoutSizingAxis;
1072
1086
  value: AutoLayoutSizing;
1073
1087
  resolvedSize?: number;
1088
+ mixed?: boolean;
1074
1089
  /** Currently-set min/max constraints (px). */
1075
1090
  minMax?: SizingFieldMinMax;
1076
1091
  options?: AutoLayoutSizing[];
@@ -1109,6 +1124,7 @@ export function SizingField({
1109
1124
  sizingAxis,
1110
1125
  value,
1111
1126
  resolvedSize,
1127
+ mixed = false,
1112
1128
  minMax,
1113
1129
  options = SIZING_OPTIONS,
1114
1130
  labels: labelOverrides,
@@ -1225,7 +1241,7 @@ export function SizingField({
1225
1241
  <div
1226
1242
  className={cn(
1227
1243
  "flex h-7 w-full items-center overflow-hidden rounded-md",
1228
- "bg-[var(--design-editor-control-bg)] text-[11px]",
1244
+ "bg-[var(--design-editor-control-bg)] !text-[11px]",
1229
1245
  disabled && "pointer-events-none opacity-40",
1230
1246
  )}
1231
1247
  >
@@ -1235,16 +1251,17 @@ export function SizingField({
1235
1251
  ariaLabel={`${axis} size in pixels`}
1236
1252
  tooltipLabel={`${axis} size`}
1237
1253
  icon={null}
1238
- value={Math.round(resolvedSize ?? 0)}
1254
+ value={mixed ? 0 : Math.round(resolvedSize ?? 0)}
1239
1255
  onChange={(next) => onSizeChange!(Math.max(0, Math.round(next)))}
1256
+ mixed={mixed}
1240
1257
  unit="px"
1241
1258
  min={0}
1242
1259
  step={1}
1243
1260
  precision={0}
1244
1261
  disabled={disabled}
1245
1262
  className="min-w-0 flex-1 gap-0"
1246
- labelClassName="h-7 w-5 justify-center gap-0 rounded-l-md px-0 text-muted-foreground"
1247
- inputClassName="h-6 border-0 bg-transparent px-1 text-[11px] shadow-none focus-visible:ring-0"
1263
+ labelClassName="h-7 w-5 justify-center gap-0 rounded-l-md rounded-r-none px-0 text-muted-foreground"
1264
+ inputClassName="h-6 border-0 bg-transparent px-1 !text-[11px] shadow-none focus-visible:ring-0"
1248
1265
  />
1249
1266
  {/* Caret opens the mode picker */}
1250
1267
  <Tooltip>
@@ -1282,11 +1299,11 @@ export function SizingField({
1282
1299
  <DropdownMenuTrigger asChild>
1283
1300
  <button
1284
1301
  type="button"
1285
- aria-label={`${axis} ${Math.round(resolvedSize ?? 0)} ${labels[value]}`}
1302
+ aria-label={`${axis} ${mixed ? "Mixed" : Math.round(resolvedSize ?? 0)} ${labels[value]}`}
1286
1303
  disabled={disabled}
1287
1304
  className={cn(
1288
1305
  "flex h-7 w-full items-center gap-1 overflow-hidden rounded-md px-1.5",
1289
- "bg-[var(--design-editor-control-bg)] text-[11px]",
1306
+ "bg-[var(--design-editor-control-bg)] !text-[11px]",
1290
1307
  "hover:bg-[var(--design-editor-panel-raised-bg)]",
1291
1308
  "disabled:pointer-events-none disabled:opacity-40",
1292
1309
  "focus:outline-none focus-visible:ring-1 focus-visible:ring-[var(--design-editor-accent-color,hsl(var(--primary)))]",
@@ -1295,8 +1312,13 @@ export function SizingField({
1295
1312
  {/* Axis letter */}
1296
1313
  <span className="shrink-0 text-muted-foreground">{axis}</span>
1297
1314
  {/* Resolved size */}
1298
- <span className="min-w-0 flex-1 truncate text-left tabular-nums text-foreground">
1299
- {Math.round(resolvedSize ?? 0)}
1315
+ <span
1316
+ className={cn(
1317
+ "min-w-0 flex-1 truncate text-left tabular-nums",
1318
+ mixed ? "text-muted-foreground" : "text-foreground",
1319
+ )}
1320
+ >
1321
+ {mixed ? "Mixed" : Math.round(resolvedSize ?? 0)}
1300
1322
  </span>
1301
1323
  {/* Mode word (Hug/Fill only) */}
1302
1324
  {showWord ? (
@@ -1412,7 +1434,7 @@ function ConstraintSubRow({
1412
1434
  disabled={disabled}
1413
1435
  className="min-w-0 flex-1 gap-0"
1414
1436
  labelClassName="hidden"
1415
- inputClassName="h-5 border-0 bg-transparent px-1 text-[11px] shadow-none focus-visible:ring-0"
1437
+ inputClassName="h-5 border-0 bg-transparent px-1 !text-[11px] shadow-none focus-visible:ring-0"
1416
1438
  />
1417
1439
  <Tooltip>
1418
1440
  <TooltipTrigger asChild>