@agent-native/core 0.79.27 → 0.80.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 (346) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +26 -0
  3. package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +41 -0
  4. package/corpus/core/docs/content/locales/de-DE/template-design.mdx +51 -0
  5. package/corpus/core/docs/content/locales/es-ES/template-design.mdx +50 -0
  6. package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +49 -0
  7. package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +44 -0
  8. package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +46 -0
  9. package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +44 -0
  10. package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +48 -0
  11. package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +36 -0
  12. package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +38 -0
  13. package/corpus/core/docs/content/template-design.mdx +45 -0
  14. package/corpus/core/package.json +2 -1
  15. package/corpus/core/src/agent/engine/index.ts +1 -0
  16. package/corpus/core/src/agent/engine/registry.ts +40 -0
  17. package/corpus/core/src/agent/production-agent.ts +6 -2
  18. package/corpus/core/src/cli/design-connect.ts +490 -0
  19. package/corpus/core/src/cli/index.ts +16 -0
  20. package/corpus/core/src/cli/skills.ts +126 -3
  21. package/corpus/core/src/client/AssistantChat.tsx +43 -7
  22. package/corpus/core/src/client/agent-chat.ts +27 -3
  23. package/corpus/core/src/client/blocks/library/MermaidBlock.tsx +1 -1
  24. package/corpus/core/src/client/blocks/library/diagram.tsx +2 -2
  25. package/corpus/core/src/client/blocks/library/wireframe.tsx +1 -1
  26. package/corpus/core/src/client/chat/message-components.tsx +1 -1
  27. package/corpus/core/src/client/chat-model-groups.ts +1 -2
  28. package/corpus/core/src/client/components/LiveCursorOverlay.tsx +33 -66
  29. package/corpus/core/src/client/composer/TiptapComposer.tsx +99 -24
  30. package/corpus/core/src/client/composer/useVoiceDictation.ts +429 -260
  31. package/corpus/core/src/client/frame-protocol.ts +17 -2
  32. package/corpus/core/src/client/rich-markdown-editor/RegistryBlockNode.tsx +2 -2
  33. package/corpus/core/src/client/sharing/ShareButton.tsx +20 -15
  34. package/corpus/core/src/client/use-agent-engine-configured.ts +80 -28
  35. package/corpus/core/src/server/transcribe-voice.ts +57 -22
  36. package/corpus/core/src/shared/mcp-embed-headers.ts +23 -1
  37. package/corpus/core/src/styles/agent-native.css +56 -7
  38. package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
  39. package/corpus/core/src/vite/client.ts +2 -0
  40. package/corpus/core/src/voice/index.ts +18 -0
  41. package/corpus/core/src/voice/voice-cleanup-prompt.ts +38 -0
  42. package/corpus/core/src/voice/voice-context.ts +217 -0
  43. package/corpus/core/src/voice/voice-replacements.ts +75 -0
  44. package/corpus/templates/analytics/AGENTS.md +4 -3
  45. package/corpus/templates/analytics/actions/list-session-recordings.ts +6 -1
  46. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +557 -400
  47. package/corpus/templates/analytics/app/global.css +0 -4
  48. package/corpus/templates/analytics/app/i18n/zh-TW.ts +2 -0
  49. package/corpus/templates/analytics/app/i18n-data.ts +20 -0
  50. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +33 -8
  51. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +7 -0
  52. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +7 -0
  53. package/corpus/templates/analytics/changelog/2026-06-28-ask-tab-now-matches-the-darker-app-background.md +6 -0
  54. package/corpus/templates/analytics/changelog/2026-06-28-dashboard-email-reports-now-use-cleaner-light-mode-snapshots.md +6 -0
  55. package/corpus/templates/analytics/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  56. package/corpus/templates/analytics/changelog/2026-06-28-sessions-now-show-only-signed-in-recordings-with-playable-re.md +6 -0
  57. package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +3 -3
  58. package/corpus/templates/analytics/server/lib/dashboard-report.ts +29 -7
  59. package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +5 -2
  60. package/corpus/templates/analytics/server/lib/session-replay.ts +24 -4
  61. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +4 -4
  62. package/corpus/templates/assets/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  63. package/corpus/templates/brain/app/components/layout/Layout.tsx +29 -2
  64. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +131 -42
  65. package/corpus/templates/brain/app/i18n/zh-TW.ts +2 -0
  66. package/corpus/templates/brain/app/i18n-data.ts +20 -0
  67. package/corpus/templates/brain/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  68. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +29 -1
  69. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +417 -299
  70. package/corpus/templates/calendar/app/i18n/zh-TW.ts +2 -0
  71. package/corpus/templates/calendar/app/i18n-data.ts +20 -0
  72. package/corpus/templates/calendar/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  73. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +6 -19
  74. package/corpus/templates/chat/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  75. package/corpus/templates/clips/AGENTS.md +4 -0
  76. package/corpus/templates/clips/actions/cleanup-transcript.ts +39 -9
  77. package/corpus/templates/clips/actions/finalize-meeting.ts +81 -12
  78. package/corpus/templates/clips/actions/lib/agents-md-context.ts +4 -1
  79. package/corpus/templates/clips/app/components/library/library-layout.tsx +3 -3
  80. package/corpus/templates/clips/app/components/meetings/share-meeting-dialog.tsx +1 -1
  81. package/corpus/templates/clips/app/components/player/share-dialog.tsx +2 -2
  82. package/corpus/templates/clips/changelog/2026-06-28-left-sidebar-footer-controls-use-less-divider-chrome.md +6 -0
  83. package/corpus/templates/clips/desktop/src/lib/personal-vocabulary.ts +13 -8
  84. package/corpus/templates/clips/desktop/src/lib/voice-dictation.ts +60 -1
  85. package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +1 -1
  86. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +1 -1
  87. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +5 -5
  88. package/corpus/templates/content/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  89. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +137 -0
  90. package/corpus/templates/design/AGENTS.md +95 -5
  91. package/corpus/templates/design/DESIGN.md +82 -0
  92. package/corpus/templates/design/DEVELOPING.md +43 -0
  93. package/corpus/templates/design/actions/add-localhost-screens.ts +426 -0
  94. package/corpus/templates/design/actions/apply-shader.ts +277 -0
  95. package/corpus/templates/design/actions/apply-visual-edit.ts +303 -0
  96. package/corpus/templates/design/actions/connect-localhost.ts +183 -0
  97. package/corpus/templates/design/actions/edit-design.ts +195 -42
  98. package/corpus/templates/design/actions/generate-design.ts +71 -1
  99. package/corpus/templates/design/actions/generate-screens.ts +193 -0
  100. package/corpus/templates/design/actions/get-code-layer-projection.ts +191 -0
  101. package/corpus/templates/design/actions/get-shader.ts +119 -0
  102. package/corpus/templates/design/actions/list-localhost-connections.ts +95 -0
  103. package/corpus/templates/design/actions/navigate.ts +55 -2
  104. package/corpus/templates/design/actions/view-screen.ts +68 -1
  105. package/corpus/templates/design/agent-native.app-skill.json +10 -0
  106. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +761 -0
  107. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +2057 -103
  108. package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +74 -38
  109. package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +399 -0
  110. package/corpus/templates/design/app/components/design/EditPanel.tsx +3185 -439
  111. package/corpus/templates/design/app/components/design/LayersPanel.tsx +1124 -0
  112. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +3116 -147
  113. package/corpus/templates/design/app/components/design/QuestionFlow.tsx +700 -13
  114. package/corpus/templates/design/app/components/design/TweaksPanel.tsx +107 -63
  115. package/corpus/templates/design/app/components/design/index.ts +0 -5
  116. package/corpus/templates/design/app/components/design/inspector/AlignmentMatrix.tsx +286 -0
  117. package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +699 -0
  118. package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +461 -0
  119. package/corpus/templates/design/app/components/design/inspector/ExportSettingsPanel.tsx +166 -0
  120. package/corpus/templates/design/app/components/design/inspector/FigmaColorPicker.tsx +1420 -0
  121. package/corpus/templates/design/app/components/design/inspector/SHADER_INTEGRATION.md +420 -0
  122. package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +215 -0
  123. package/corpus/templates/design/app/components/design/inspector/ShaderControls.stories.tsx +71 -0
  124. package/corpus/templates/design/app/components/design/inspector/ShaderControls.tsx +518 -0
  125. package/corpus/templates/design/app/components/design/inspector/ShaderEffectRow.tsx +106 -0
  126. package/corpus/templates/design/app/components/design/inspector/figma-icons.tsx +361 -0
  127. package/corpus/templates/design/app/components/design/inspector/index.ts +60 -0
  128. package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +201 -0
  129. package/corpus/templates/design/app/components/design/types.ts +23 -0
  130. package/corpus/templates/design/app/components/layout/Layout.tsx +24 -13
  131. package/corpus/templates/design/app/components/layout/Sidebar.tsx +4 -4
  132. package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +474 -36
  133. package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +22 -5
  134. package/corpus/templates/design/app/components/visual-editor/SaveStatusIndicator.tsx +24 -11
  135. package/corpus/templates/design/app/global.css +121 -3
  136. package/corpus/templates/design/app/hooks/use-agent-generating.ts +4 -0
  137. package/corpus/templates/design/app/hooks/use-navigation-state.ts +130 -8
  138. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +329 -0
  139. package/corpus/templates/design/app/i18n/zh-TW.ts +264 -0
  140. package/corpus/templates/design/app/i18n-data.ts +2790 -1
  141. package/corpus/templates/design/app/pages/DesignEditor.tsx +5108 -851
  142. package/corpus/templates/design/changelog/2026-06-28-annotate-mode-now-combines-drawing-and-comment-pins-in-one-c.md +6 -0
  143. package/corpus/templates/design/changelog/2026-06-28-design-editor-panel-borders-are-cleaner-so-the-canvas-edge-s.md +6 -0
  144. package/corpus/templates/design/changelog/2026-06-28-drawing-prompts-now-reliably-open-and-submit-to-the-design-a.md +6 -0
  145. package/corpus/templates/design/changelog/2026-06-28-editor-app-menus-now-use-an-outline-agent-native-mark-with-b.md +6 -0
  146. package/corpus/templates/design/changelog/2026-06-28-figma-style-code-design-mode.md +6 -0
  147. package/corpus/templates/design/changelog/2026-06-28-layer-selection-now-updates-chat-context-without-opening-the.md +6 -0
  148. package/corpus/templates/design/changelog/2026-06-28-layer-selections-now-preserve-hidden-and-locked-canvas-state.md +6 -0
  149. package/corpus/templates/design/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  150. package/corpus/templates/design/changelog/2026-06-28-live-cursors-now-keep-names-beside-a-cleaner-pointer-marker.md +6 -0
  151. package/corpus/templates/design/changelog/2026-06-28-mode-switching-now-lives-in-a-compact-bottom-right-icon-dock.md +6 -0
  152. package/corpus/templates/design/changelog/2026-06-28-screen-overview-now-handles-zooming-drawing-opening-and-dele.md +6 -0
  153. package/corpus/templates/design/changelog/2026-06-28-screen-overview-now-selects-screens-on-click-and-opens-them-.md +6 -0
  154. package/corpus/templates/design/changelog/2026-06-28-screen-overview-zooms-into-the-active-screen-with-smoother-e.md +6 -0
  155. package/corpus/templates/design/changelog/2026-06-28-selected-element-chips-in-chat-are-shorter-and-easier-to-sca.md +6 -0
  156. package/corpus/templates/design/changelog/2026-06-28-the-design-editor-toolbar-is-more-compact-and-the-app-menu-m.md +6 -0
  157. package/corpus/templates/design/changelog/2026-06-28-tweaks-now-live-at-the-top-of-the-design-sidebar-instead-of-.md +6 -0
  158. package/corpus/templates/design/changelog/2026-06-28-tweaks-now-live-in-the-right-inspector-beside-the-design-tab.md +6 -0
  159. package/corpus/templates/design/changelog/2026-06-29-active-sidebar-rows-use-soft-highlights.md +6 -0
  160. package/corpus/templates/design/changelog/2026-06-29-agents-can-now-open-screen-overview-focus-screens-and-add.md +6 -0
  161. package/corpus/templates/design/changelog/2026-06-29-design-agents-now-edit-broad-copy-changes-more-reliably.md +6 -0
  162. package/corpus/templates/design/changelog/2026-06-29-design-editor-extensions-now-run-inline-beside-the-artboard.md +6 -0
  163. package/corpus/templates/design/changelog/2026-06-29-sidebars-use-darker-chrome-and-chat-warns-immediately.md +6 -0
  164. package/corpus/templates/design/changelog/2026-06-29-visual-edit-can-open-localhost-routes-as-url-backed-screens.md +6 -0
  165. package/corpus/templates/design/package.json +1 -0
  166. package/corpus/templates/design/server/db/schema.ts +26 -0
  167. package/corpus/templates/design/server/lib/design-snapshot.ts +1 -1
  168. package/corpus/templates/design/server/plugins/agent-chat.ts +3 -0
  169. package/corpus/templates/design/shared/api.ts +27 -0
  170. package/corpus/templates/design/shared/canvas-frames.ts +103 -0
  171. package/corpus/templates/design/shared/canvas-math.ts +1058 -0
  172. package/corpus/templates/design/shared/code-layer.ts +2212 -0
  173. package/corpus/templates/design/shared/color-utils.ts +180 -0
  174. package/corpus/templates/design/shared/generation-session.ts +61 -0
  175. package/corpus/templates/design/shared/shader-presets.ts +782 -0
  176. package/corpus/templates/design/shared/shader-safety.ts +137 -0
  177. package/corpus/templates/design/shared/source-mode.ts +237 -0
  178. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +149 -6
  179. package/corpus/templates/forms/app/i18n/ar-SA.ts +2 -0
  180. package/corpus/templates/forms/app/i18n/de-DE.ts +2 -0
  181. package/corpus/templates/forms/app/i18n/en-US.ts +2 -0
  182. package/corpus/templates/forms/app/i18n/es-ES.ts +2 -0
  183. package/corpus/templates/forms/app/i18n/fr-FR.ts +2 -0
  184. package/corpus/templates/forms/app/i18n/hi-IN.ts +2 -0
  185. package/corpus/templates/forms/app/i18n/ja-JP.ts +2 -0
  186. package/corpus/templates/forms/app/i18n/ko-KR.ts +2 -0
  187. package/corpus/templates/forms/app/i18n/pt-BR.ts +2 -0
  188. package/corpus/templates/forms/app/i18n/zh-CN.ts +2 -0
  189. package/corpus/templates/forms/app/i18n/zh-TW.ts +2 -0
  190. package/corpus/templates/forms/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  191. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +2 -2
  192. package/corpus/templates/macros/changelog/2026-06-28-left-sidebar-footer-controls-use-less-divider-chrome.md +6 -0
  193. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +408 -247
  194. package/corpus/templates/mail/app/i18n/ar-SA.ts +4 -0
  195. package/corpus/templates/mail/app/i18n/de-DE.ts +4 -0
  196. package/corpus/templates/mail/app/i18n/en-US.ts +4 -0
  197. package/corpus/templates/mail/app/i18n/es-ES.ts +4 -0
  198. package/corpus/templates/mail/app/i18n/fr-FR.ts +4 -0
  199. package/corpus/templates/mail/app/i18n/hi-IN.ts +4 -0
  200. package/corpus/templates/mail/app/i18n/ja-JP.ts +4 -0
  201. package/corpus/templates/mail/app/i18n/ko-KR.ts +4 -0
  202. package/corpus/templates/mail/app/i18n/pt-BR.ts +4 -0
  203. package/corpus/templates/mail/app/i18n/zh-CN.ts +4 -0
  204. package/corpus/templates/mail/app/i18n/zh-TW.ts +4 -0
  205. package/corpus/templates/mail/changelog/2026-06-28-pinned-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  206. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +6 -8
  207. package/corpus/templates/plan/app/components/plan/wireframe/Wireframe.tsx +1 -1
  208. package/corpus/templates/plan/app/global.css +61 -78
  209. package/corpus/templates/plan/app/pages/PlansPage.tsx +8 -0
  210. package/corpus/templates/plan/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  211. package/corpus/templates/plan/changelog/2026-06-28-plans-use-the-shared-neutral-light-and-dark-theme.md +6 -0
  212. package/corpus/templates/plan/changelog/2026-06-28-sending-open-feedback-from-a-plan-now-opens-the-inline-plan-.md +6 -0
  213. package/corpus/templates/slides/app/components/layout/Sidebar.tsx +5 -5
  214. package/corpus/templates/slides/changelog/2026-06-28-left-sidebar-collapse-motion-and-footer-chrome-are-quieter.md +6 -0
  215. package/corpus/templates/videos/app/components/Sidebar.tsx +2 -2
  216. package/corpus/templates/videos/app/components/layout/Layout.tsx +29 -2
  217. package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +113 -30
  218. package/corpus/templates/videos/app/i18n/ar-SA.ts +2 -0
  219. package/corpus/templates/videos/app/i18n/de-DE.ts +2 -0
  220. package/corpus/templates/videos/app/i18n/en-US.ts +2 -0
  221. package/corpus/templates/videos/app/i18n/es-ES.ts +2 -0
  222. package/corpus/templates/videos/app/i18n/fr-FR.ts +2 -0
  223. package/corpus/templates/videos/app/i18n/hi-IN.ts +2 -0
  224. package/corpus/templates/videos/app/i18n/ja-JP.ts +2 -0
  225. package/corpus/templates/videos/app/i18n/ko-KR.ts +2 -0
  226. package/corpus/templates/videos/app/i18n/pt-BR.ts +2 -0
  227. package/corpus/templates/videos/app/i18n/zh-CN.ts +2 -0
  228. package/corpus/templates/videos/app/i18n/zh-TW.ts +2 -0
  229. package/corpus/templates/videos/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +6 -0
  230. package/dist/agent/engine/index.d.ts +1 -1
  231. package/dist/agent/engine/index.d.ts.map +1 -1
  232. package/dist/agent/engine/index.js +1 -1
  233. package/dist/agent/engine/index.js.map +1 -1
  234. package/dist/agent/engine/registry.d.ts +9 -0
  235. package/dist/agent/engine/registry.d.ts.map +1 -1
  236. package/dist/agent/engine/registry.js +37 -0
  237. package/dist/agent/engine/registry.js.map +1 -1
  238. package/dist/agent/production-agent.d.ts.map +1 -1
  239. package/dist/agent/production-agent.js +4 -3
  240. package/dist/agent/production-agent.js.map +1 -1
  241. package/dist/cli/design-connect.d.ts +52 -0
  242. package/dist/cli/design-connect.d.ts.map +1 -0
  243. package/dist/cli/design-connect.js +409 -0
  244. package/dist/cli/design-connect.js.map +1 -0
  245. package/dist/cli/index.js +15 -0
  246. package/dist/cli/index.js.map +1 -1
  247. package/dist/cli/skills.d.ts +3 -0
  248. package/dist/cli/skills.d.ts.map +1 -1
  249. package/dist/cli/skills.js +121 -3
  250. package/dist/cli/skills.js.map +1 -1
  251. package/dist/client/AssistantChat.d.ts.map +1 -1
  252. package/dist/client/AssistantChat.js +38 -8
  253. package/dist/client/AssistantChat.js.map +1 -1
  254. package/dist/client/agent-chat.d.ts +6 -0
  255. package/dist/client/agent-chat.d.ts.map +1 -1
  256. package/dist/client/agent-chat.js +17 -3
  257. package/dist/client/agent-chat.js.map +1 -1
  258. package/dist/client/blocks/library/MermaidBlock.js +1 -1
  259. package/dist/client/blocks/library/MermaidBlock.js.map +1 -1
  260. package/dist/client/blocks/library/diagram.js +1 -1
  261. package/dist/client/blocks/library/diagram.js.map +1 -1
  262. package/dist/client/blocks/library/wireframe.js +1 -1
  263. package/dist/client/blocks/library/wireframe.js.map +1 -1
  264. package/dist/client/chat/message-components.js +1 -1
  265. package/dist/client/chat/message-components.js.map +1 -1
  266. package/dist/client/chat-model-groups.d.ts.map +1 -1
  267. package/dist/client/chat-model-groups.js +1 -2
  268. package/dist/client/chat-model-groups.js.map +1 -1
  269. package/dist/client/components/LiveCursorOverlay.d.ts +1 -2
  270. package/dist/client/components/LiveCursorOverlay.d.ts.map +1 -1
  271. package/dist/client/components/LiveCursorOverlay.js +19 -40
  272. package/dist/client/components/LiveCursorOverlay.js.map +1 -1
  273. package/dist/client/composer/TiptapComposer.d.ts +3 -1
  274. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  275. package/dist/client/composer/TiptapComposer.js +86 -24
  276. package/dist/client/composer/TiptapComposer.js.map +1 -1
  277. package/dist/client/composer/useVoiceDictation.d.ts +9 -0
  278. package/dist/client/composer/useVoiceDictation.d.ts.map +1 -1
  279. package/dist/client/composer/useVoiceDictation.js +154 -32
  280. package/dist/client/composer/useVoiceDictation.js.map +1 -1
  281. package/dist/client/frame-protocol.d.ts +17 -2
  282. package/dist/client/frame-protocol.d.ts.map +1 -1
  283. package/dist/client/frame-protocol.js.map +1 -1
  284. package/dist/client/rich-markdown-editor/RegistryBlockNode.js +2 -2
  285. package/dist/client/rich-markdown-editor/RegistryBlockNode.js.map +1 -1
  286. package/dist/client/sharing/ShareButton.d.ts +2 -0
  287. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  288. package/dist/client/sharing/ShareButton.js +7 -6
  289. package/dist/client/sharing/ShareButton.js.map +1 -1
  290. package/dist/client/use-agent-engine-configured.d.ts +5 -0
  291. package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
  292. package/dist/client/use-agent-engine-configured.js +51 -25
  293. package/dist/client/use-agent-engine-configured.js.map +1 -1
  294. package/dist/collab/awareness.d.ts +2 -2
  295. package/dist/collab/awareness.d.ts.map +1 -1
  296. package/dist/collab/routes.d.ts +1 -1
  297. package/dist/file-upload/actions/upload-image.d.ts +2 -2
  298. package/dist/notifications/routes.d.ts +3 -3
  299. package/dist/observability/routes.d.ts +8 -8
  300. package/dist/progress/routes.d.ts +1 -1
  301. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  302. package/dist/server/transcribe-voice.d.ts.map +1 -1
  303. package/dist/server/transcribe-voice.js +40 -24
  304. package/dist/server/transcribe-voice.js.map +1 -1
  305. package/dist/shared/mcp-embed-headers.d.ts +1 -0
  306. package/dist/shared/mcp-embed-headers.d.ts.map +1 -1
  307. package/dist/shared/mcp-embed-headers.js +20 -1
  308. package/dist/shared/mcp-embed-headers.js.map +1 -1
  309. package/dist/styles/agent-native.css +56 -7
  310. package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
  311. package/dist/vite/client.d.ts.map +1 -1
  312. package/dist/vite/client.js +2 -0
  313. package/dist/vite/client.js.map +1 -1
  314. package/dist/voice/index.d.ts +5 -0
  315. package/dist/voice/index.d.ts.map +1 -0
  316. package/dist/voice/index.js +4 -0
  317. package/dist/voice/index.js.map +1 -0
  318. package/dist/voice/voice-cleanup-prompt.d.ts +6 -0
  319. package/dist/voice/voice-cleanup-prompt.d.ts.map +1 -0
  320. package/dist/voice/voice-cleanup-prompt.js +26 -0
  321. package/dist/voice/voice-cleanup-prompt.js.map +1 -0
  322. package/dist/voice/voice-context.d.ts +25 -0
  323. package/dist/voice/voice-context.d.ts.map +1 -0
  324. package/dist/voice/voice-context.js +156 -0
  325. package/dist/voice/voice-context.js.map +1 -0
  326. package/dist/voice/voice-replacements.d.ts +4 -0
  327. package/dist/voice/voice-replacements.d.ts.map +1 -0
  328. package/dist/voice/voice-replacements.js +52 -0
  329. package/dist/voice/voice-replacements.js.map +1 -0
  330. package/docs/content/locales/ar-SA/template-design.mdx +41 -0
  331. package/docs/content/locales/de-DE/template-design.mdx +51 -0
  332. package/docs/content/locales/es-ES/template-design.mdx +50 -0
  333. package/docs/content/locales/fr-FR/template-design.mdx +49 -0
  334. package/docs/content/locales/hi-IN/template-design.mdx +44 -0
  335. package/docs/content/locales/ja-JP/template-design.mdx +46 -0
  336. package/docs/content/locales/ko-KR/template-design.mdx +44 -0
  337. package/docs/content/locales/pt-BR/template-design.mdx +48 -0
  338. package/docs/content/locales/zh-CN/template-design.mdx +36 -0
  339. package/docs/content/locales/zh-TW/template-design.mdx +38 -0
  340. package/docs/content/template-design.mdx +45 -0
  341. package/package.json +2 -1
  342. package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +10 -0
  343. package/corpus/templates/design/app/components/design/DesignToolbar.tsx +0 -339
  344. package/corpus/templates/design/app/components/design/PresentMode.tsx +0 -68
  345. package/corpus/templates/design/app/components/design/ViewportTabs.tsx +0 -149
  346. package/corpus/templates/design/app/components/design/ZoomControls.tsx +0 -157
@@ -0,0 +1,329 @@
1
+ import { useEffect, useRef } from "react";
2
+
3
+ export type DesignHotkeyTool =
4
+ | "move"
5
+ | "frame"
6
+ | "rectangle"
7
+ | "text"
8
+ | "pen"
9
+ | "hand"
10
+ | "comment"
11
+ | "scale";
12
+
13
+ export type DesignHotkeyDirection = "up" | "right" | "down" | "left";
14
+
15
+ export interface DesignHotkeyDetails {
16
+ event: KeyboardEvent;
17
+ key: string;
18
+ primary: boolean;
19
+ shift: boolean;
20
+ alt: boolean;
21
+ repeat: boolean;
22
+ }
23
+
24
+ export interface DesignHotkeyNudgeDetails extends DesignHotkeyDetails {
25
+ direction: DesignHotkeyDirection;
26
+ largeStep: boolean;
27
+ }
28
+
29
+ export interface DesignHotkeyTabDetails extends DesignHotkeyDetails {
30
+ backwards: boolean;
31
+ }
32
+
33
+ export type DesignHotkeyTarget = Window | Document | HTMLElement;
34
+ export type DesignHotkeyHandler = (details: DesignHotkeyDetails) => void;
35
+ export type DesignHotkeyToolHandler = (
36
+ tool: DesignHotkeyTool,
37
+ details: DesignHotkeyDetails,
38
+ ) => void;
39
+ export type DesignHotkeyNudgeHandler = (
40
+ details: DesignHotkeyNudgeDetails,
41
+ ) => void;
42
+ export type DesignHotkeyTabHandler = (details: DesignHotkeyTabDetails) => void;
43
+
44
+ export interface UseDesignHotkeysProps {
45
+ enabled?: boolean;
46
+ capture?: boolean;
47
+ target?: DesignHotkeyTarget | null;
48
+ preventDefault?: boolean;
49
+ ignoreEditableTargets?: boolean;
50
+ shouldHandleEvent?: (event: KeyboardEvent) => boolean;
51
+ onToolChange?: DesignHotkeyToolHandler;
52
+ onMoveTool?: DesignHotkeyHandler;
53
+ onFrameTool?: DesignHotkeyHandler;
54
+ onRectangleTool?: DesignHotkeyHandler;
55
+ onTextTool?: DesignHotkeyHandler;
56
+ onPenTool?: DesignHotkeyHandler;
57
+ onHandTool?: DesignHotkeyHandler;
58
+ onCommentTool?: DesignHotkeyHandler;
59
+ onScaleTool?: DesignHotkeyHandler;
60
+ onCopy?: DesignHotkeyHandler;
61
+ onCut?: DesignHotkeyHandler;
62
+ onPaste?: DesignHotkeyHandler;
63
+ onPasteOver?: DesignHotkeyHandler;
64
+ onCopyProps?: DesignHotkeyHandler;
65
+ onPasteProps?: DesignHotkeyHandler;
66
+ onCopyAsCode?: DesignHotkeyHandler;
67
+ onDuplicate?: DesignHotkeyHandler;
68
+ onDelete?: DesignHotkeyHandler;
69
+ onRename?: DesignHotkeyHandler;
70
+ onSelectAll?: DesignHotkeyHandler;
71
+ onGroup?: DesignHotkeyHandler;
72
+ onUngroup?: DesignHotkeyHandler;
73
+ onUndo?: DesignHotkeyHandler;
74
+ onRedo?: DesignHotkeyHandler;
75
+ onBringForward?: DesignHotkeyHandler;
76
+ onBringToFront?: DesignHotkeyHandler;
77
+ onSendBackward?: DesignHotkeyHandler;
78
+ onSendToBack?: DesignHotkeyHandler;
79
+ onEscape?: DesignHotkeyHandler;
80
+ onEnter?: DesignHotkeyHandler;
81
+ onTab?: DesignHotkeyTabHandler;
82
+ onNudge?: DesignHotkeyNudgeHandler;
83
+ onZoomIn?: DesignHotkeyHandler;
84
+ onZoomOut?: DesignHotkeyHandler;
85
+ onZoomReset?: DesignHotkeyHandler;
86
+ onZoomToFit?: DesignHotkeyHandler;
87
+ onZoomToSelection?: DesignHotkeyHandler;
88
+ }
89
+
90
+ const TOOL_SHORTCUTS: Record<
91
+ string,
92
+ { tool: DesignHotkeyTool; handler: keyof UseDesignHotkeysProps }
93
+ > = {
94
+ v: { tool: "move", handler: "onMoveTool" },
95
+ f: { tool: "frame", handler: "onFrameTool" },
96
+ r: { tool: "rectangle", handler: "onRectangleTool" },
97
+ t: { tool: "text", handler: "onTextTool" },
98
+ p: { tool: "pen", handler: "onPenTool" },
99
+ h: { tool: "hand", handler: "onHandTool" },
100
+ c: { tool: "comment", handler: "onCommentTool" },
101
+ k: { tool: "scale", handler: "onScaleTool" },
102
+ };
103
+
104
+ const ARROW_DIRECTIONS: Record<string, DesignHotkeyDirection> = {
105
+ ArrowUp: "up",
106
+ ArrowRight: "right",
107
+ ArrowDown: "down",
108
+ ArrowLeft: "left",
109
+ };
110
+
111
+ export function isDesignHotkeyEditableTarget(target: EventTarget | null) {
112
+ if (!target || typeof Element === "undefined") return false;
113
+ if (!(target instanceof Element)) return false;
114
+
115
+ const editable = target.closest(
116
+ [
117
+ "input",
118
+ "textarea",
119
+ "select",
120
+ "[contenteditable]",
121
+ '[role="textbox"]',
122
+ '[data-hotkeys-scope="text"]',
123
+ ].join(","),
124
+ );
125
+
126
+ if (!editable) return false;
127
+ if (editable instanceof HTMLElement && editable.isContentEditable) {
128
+ return true;
129
+ }
130
+ const tagName = editable.tagName.toLowerCase();
131
+ return tagName === "input" || tagName === "textarea" || tagName === "select";
132
+ }
133
+
134
+ function isFocusableChromeTarget(target: EventTarget | null) {
135
+ if (!target || typeof Element === "undefined") return false;
136
+ if (!(target instanceof Element)) return false;
137
+ if (target === document.body || target === document.documentElement) {
138
+ return false;
139
+ }
140
+ return Boolean(
141
+ target.closest(
142
+ [
143
+ "a[href]",
144
+ "button",
145
+ "summary",
146
+ "input",
147
+ "textarea",
148
+ "select",
149
+ "[contenteditable]",
150
+ '[role="button"]',
151
+ '[role="menuitem"]',
152
+ '[role="option"]',
153
+ '[role="tab"]',
154
+ '[tabindex]:not([tabindex="-1"])',
155
+ ].join(","),
156
+ ),
157
+ );
158
+ }
159
+
160
+ export function useDesignHotkeys(props: UseDesignHotkeysProps) {
161
+ const propsRef = useRef(props);
162
+
163
+ useEffect(() => {
164
+ propsRef.current = props;
165
+ }, [props]);
166
+
167
+ useEffect(() => {
168
+ const eventTarget =
169
+ props.target ??
170
+ (typeof window === "undefined" ? null : (window as DesignHotkeyTarget));
171
+ if (!eventTarget || props.enabled === false) return;
172
+
173
+ const handleKeyDown = (event: Event) => {
174
+ if (!(event instanceof KeyboardEvent)) return;
175
+ const current = propsRef.current;
176
+ if (current.enabled === false) return;
177
+ if (event.defaultPrevented || event.isComposing) return;
178
+ if (current.shouldHandleEvent && !current.shouldHandleEvent(event))
179
+ return;
180
+ if (
181
+ current.ignoreEditableTargets !== false &&
182
+ isDesignHotkeyEditableTarget(event.target)
183
+ ) {
184
+ return;
185
+ }
186
+
187
+ handleDesignHotkey(event, current);
188
+ };
189
+
190
+ eventTarget.addEventListener("keydown", handleKeyDown, {
191
+ capture: props.capture,
192
+ });
193
+ return () => {
194
+ eventTarget.removeEventListener("keydown", handleKeyDown, {
195
+ capture: props.capture,
196
+ });
197
+ };
198
+ }, [props.capture, props.enabled, props.target]);
199
+ }
200
+
201
+ function handleDesignHotkey(
202
+ event: KeyboardEvent,
203
+ props: UseDesignHotkeysProps,
204
+ ) {
205
+ const key = normalizedKey(event);
206
+ const primary = event.metaKey || event.ctrlKey;
207
+ const details: DesignHotkeyDetails = {
208
+ event,
209
+ key,
210
+ primary,
211
+ shift: event.shiftKey,
212
+ alt: event.altKey,
213
+ repeat: event.repeat,
214
+ };
215
+
216
+ const prevent = () => {
217
+ if (props.preventDefault !== false) event.preventDefault();
218
+ };
219
+
220
+ const run = (handler: DesignHotkeyHandler | undefined) => {
221
+ if (!handler) return false;
222
+ prevent();
223
+ handler(details);
224
+ return true;
225
+ };
226
+
227
+ const runTool = (
228
+ tool: DesignHotkeyTool,
229
+ handler: DesignHotkeyHandler | undefined,
230
+ ) => {
231
+ if (!handler && !props.onToolChange) return false;
232
+ prevent();
233
+ handler?.(details);
234
+ props.onToolChange?.(tool, details);
235
+ return true;
236
+ };
237
+
238
+ const runNudge = (direction: DesignHotkeyDirection) => {
239
+ if (!props.onNudge) return false;
240
+ prevent();
241
+ props.onNudge({
242
+ ...details,
243
+ direction,
244
+ largeStep: event.shiftKey,
245
+ });
246
+ return true;
247
+ };
248
+
249
+ if (!primary && !event.altKey && !event.shiftKey) {
250
+ const toolShortcut = TOOL_SHORTCUTS[key];
251
+ if (toolShortcut) {
252
+ return runTool(
253
+ toolShortcut.tool,
254
+ props[toolShortcut.handler] as DesignHotkeyHandler | undefined,
255
+ );
256
+ }
257
+ }
258
+
259
+ if (event.key in ARROW_DIRECTIONS && !primary && !event.altKey) {
260
+ return runNudge(ARROW_DIRECTIONS[event.key]);
261
+ }
262
+
263
+ if (event.key === "Escape") return run(props.onEscape);
264
+ if (event.key === "Enter") return run(props.onEnter);
265
+ if (
266
+ event.key === "Tab" &&
267
+ props.onTab &&
268
+ !isFocusableChromeTarget(event.target)
269
+ ) {
270
+ prevent();
271
+ props.onTab({ ...details, backwards: event.shiftKey });
272
+ return true;
273
+ }
274
+ if ((event.key === "Delete" || event.key === "Backspace") && !primary) {
275
+ return run(props.onDelete);
276
+ }
277
+
278
+ if (primary && key === "z") {
279
+ return event.shiftKey ? run(props.onRedo) : run(props.onUndo);
280
+ }
281
+ if (primary && key === "y") return run(props.onRedo);
282
+ if (primary && key === "a") return run(props.onSelectAll);
283
+ if (primary && key === "x") return run(props.onCut);
284
+ if (primary && key === "c") {
285
+ if (event.altKey) return run(props.onCopyProps);
286
+ if (event.shiftKey) return run(props.onCopyAsCode);
287
+ return run(props.onCopy);
288
+ }
289
+ if (primary && key === "v") {
290
+ if (event.altKey) return run(props.onPasteProps);
291
+ if (event.shiftKey) return run(props.onPasteOver);
292
+ return run(props.onPaste);
293
+ }
294
+ if (primary && key === "d") return run(props.onDuplicate);
295
+ if (primary && key === "g") {
296
+ return event.shiftKey ? run(props.onUngroup) : run(props.onGroup);
297
+ }
298
+
299
+ if (primary && (key === "=" || key === "+")) return run(props.onZoomIn);
300
+ if (primary && key === "-") return run(props.onZoomOut);
301
+ if (primary && key === "0") return run(props.onZoomReset);
302
+
303
+ const digit = digitFromEvent(event);
304
+ if ((primary || event.shiftKey) && digit === "1") {
305
+ return run(props.onZoomToFit);
306
+ }
307
+ if ((primary || event.shiftKey) && digit === "2") {
308
+ return run(props.onZoomToSelection);
309
+ }
310
+
311
+ if (primary && key === "]") {
312
+ return event.altKey ? run(props.onBringToFront) : run(props.onBringForward);
313
+ }
314
+ if (primary && key === "[") {
315
+ return event.altKey ? run(props.onSendToBack) : run(props.onSendBackward);
316
+ }
317
+
318
+ return false;
319
+ }
320
+
321
+ function normalizedKey(event: KeyboardEvent) {
322
+ if (event.key === " ") return "space";
323
+ return event.key.length === 1 ? event.key.toLowerCase() : event.key;
324
+ }
325
+
326
+ function digitFromEvent(event: KeyboardEvent) {
327
+ if (event.code.startsWith("Digit")) return event.code.slice("Digit".length);
328
+ return /^[0-9]$/.test(event.key) ? event.key : "";
329
+ }
@@ -52,10 +52,16 @@ const messages = {
52
52
  page: "頁面",
53
53
  typography: "版式",
54
54
  flexLayout: "彈性布局",
55
+ autoLayout: "自動布局",
56
+ positionLayout: "位置",
55
57
  layout: "布局",
56
58
  spacing: "間距",
57
59
  border: "邊界",
58
60
  fill: "充滿",
61
+ stroke: "描邊",
62
+ effects: "效果",
63
+ codeConfidence: "程式碼",
64
+ export: "匯出",
59
65
  },
60
66
  labels: {
61
67
  background: "背景",
@@ -76,6 +82,71 @@ const messages = {
76
82
  padding: "填充",
77
83
  margin: "利潤",
78
84
  radius: "半徑",
85
+ flexGrow: "增長",
86
+ flexShrink: "收縮",
87
+ flexBasis: "基準",
88
+ order: "順序",
89
+ alignSelf: "自身對齊",
90
+ gridColumn: "欄",
91
+ gridRow: "列",
92
+ position: "位置",
93
+ display: "顯示",
94
+ image: "圖片",
95
+ style: "樣式",
96
+ rotation: "旋轉",
97
+ flipHorizontal: "水平翻轉",
98
+ flipVertical: "垂直翻轉",
99
+ shadow: "陰影",
100
+ filter: "濾鏡",
101
+ addLayer: "新增圖層",
102
+ removeLayer: "移除圖層",
103
+ showLayer: "顯示圖層",
104
+ hideLayer: "隱藏圖層",
105
+ linkSides: "連結四邊",
106
+ unlinkSides: "取消連結四邊",
107
+ allSides: "全部",
108
+ cornerRadius: "圓角半徑",
109
+ independentCorners: "獨立圓角",
110
+ topLeft: "左上",
111
+ topRight: "右上",
112
+ bottomLeft: "左下",
113
+ bottomRight: "右下",
114
+ blend: "混合",
115
+ border: "邊框",
116
+ outline: "外框",
117
+ inside: "內側",
118
+ outside: "外側",
119
+ dropShadow: "投影",
120
+ addDropShadow: "新增投影",
121
+ innerShadow: "內陰影",
122
+ layerBlur: "圖層模糊",
123
+ blur: "模糊",
124
+ spread: "擴散",
125
+ },
126
+ selection: {
127
+ pageContext: "頁面預設",
128
+ },
129
+ layoutContext: {
130
+ container: "容器",
131
+ child: "子層",
132
+ gridChild: "格線子層",
133
+ parent: "父層",
134
+ flexContainer: "彈性",
135
+ notContainer: "一般流",
136
+ flexChild: "彈性子層",
137
+ flowChild: "流式子層",
138
+ flowDescription:
139
+ "此圖層位於一般文件流中。可使用位置控制進行明確偏移,或請代理調整結構布局。",
140
+ },
141
+ codeStatus: {
142
+ safeStyle: "安全樣式編輯",
143
+ safeStyleDescription:
144
+ "這些控制項會先套用即時樣式,再持久寫回 HTML 原始碼。",
145
+ classTarget: "穩定 class/id 目標",
146
+ selectorFallback: "選擇器備援",
147
+ agentStructural: "結構移動需要代理",
148
+ agentStructuralDescription:
149
+ "移動、包裹層與父層布局重寫需要代理保留意圖。",
79
150
  },
80
151
  sidePlaceholders: {
81
152
  top: "時間",
@@ -131,6 +202,36 @@ const messages = {
131
202
  stretch: "拉緊",
132
203
  baseline: "基線",
133
204
  },
205
+ alignSelfOptions: {
206
+ auto: "自動",
207
+ start: "起點",
208
+ center: "置中",
209
+ end: "終點",
210
+ stretch: "延展",
211
+ baseline: "基線",
212
+ },
213
+ displayOptions: {
214
+ block: "區塊",
215
+ flex: "彈性",
216
+ grid: "格線",
217
+ inline: "行內",
218
+ inlineBlock: "行內區塊",
219
+ none: "無",
220
+ },
221
+ positionOptions: {
222
+ static: "靜態",
223
+ relative: "相對",
224
+ absolute: "絕對",
225
+ fixed: "固定",
226
+ sticky: "黏著",
227
+ },
228
+ borderStyleOptions: {
229
+ none: "無",
230
+ solid: "實線",
231
+ dashed: "虛線",
232
+ dotted: "點線",
233
+ double: "雙線",
234
+ },
134
235
  },
135
236
  designEditor: {
136
237
  generationMayHaveStopped:
@@ -142,14 +243,30 @@ const messages = {
142
243
  backToDesigns: "返回設計",
143
244
  clickToRename: "點選重新命名",
144
245
  modes: {
246
+ annotate: "註解",
145
247
  comment: "評論",
146
248
  edit: "編輯",
147
249
  draw: "畫",
250
+ interact: "Interact",
251
+ screens: "螢幕",
252
+ },
253
+ fileTabs: "檔案",
254
+ tools: {
255
+ move: "移動",
256
+ frame: "畫框",
257
+ rect: "矩形",
258
+ text: "文字",
259
+ pen: "鋼筆",
260
+ hand: "手形",
261
+ scale: "縮放",
148
262
  },
149
263
  undo: "復原",
150
264
  undoShortcut: "復原 (⌘Z)",
151
265
  redo: "重做",
152
266
  redoShortcut: "重做 (⇧⌘Z)",
267
+ duplicate: "複製",
268
+ delete: "刪除",
269
+ view: "檢視",
153
270
  returnToCurrentScreen: "返回目前螢幕",
154
271
  openScreenOverview: "開啟螢幕概覽",
155
272
  currentScreen: "目前螢幕",
@@ -196,6 +313,16 @@ const messages = {
196
313
  addTweakControls: "新增調整控制項",
197
314
  closeTweaks: "關閉調整",
198
315
  noTweakControls: "還沒有調整控制項。",
316
+ extensions: "擴充功能",
317
+ addExtension: "擴充功能",
318
+ extensionsDocs: "文件",
319
+ extensionsPromptTitle: "這個擴充功能應該做什麼?",
320
+ extensionsPlaceholder: "樣式工具、選取輔助、畫板操作...",
321
+ extensionsEmptyTitle: "還沒有編輯器擴充功能",
322
+ extensionsEmptyDescription:
323
+ "建立一個小型檢查器擴充功能,用來讀取所選元素、呼叫操作,或請代理更新畫板。",
324
+ extensionsAvailable: "可用",
325
+ extensionsInstall: "新增",
199
326
  generatePlaceholder: "描述您想要建置的內容...",
200
327
  tweaksPromptTitle: "您想要哪些調整?",
201
328
  tweaksPlaceholder: "強調色選項、密度、圓角、深色模式...",
@@ -213,6 +340,29 @@ const messages = {
213
340
  closeOtherTabs: "關閉其他",
214
341
  closeTab: "關閉",
215
342
  fitToScreen: "適合螢幕",
343
+ patchProof: {
344
+ title: "補丁證明",
345
+ file: "檔案",
346
+ source: "來源",
347
+ capability: "能力",
348
+ pending: "已套用即時預覽;來源寫入待處理",
349
+ verified: "來源寫入已驗證;可回復",
350
+ rollback: "回復",
351
+ keep: "保留",
352
+ selectorMissing: "選取的元素已不在此畫面中。",
353
+ status: {
354
+ runtime: "已套用即時樣式",
355
+ queued: "正在寫入來源補丁",
356
+ applied: "補丁已套用",
357
+ failed: "補丁失敗",
358
+ rolledBack: "已回復",
359
+ },
360
+ },
361
+ capabilities: {
362
+ "deterministic-style-edit": "安全樣式編輯",
363
+ "deterministic-class-edit": "安全 class 編輯",
364
+ "agent-structural-edit": "結構移動需要代理",
365
+ },
216
366
  toasts: {
217
367
  codingHandoffError: "無法建立編碼交接",
218
368
  codingHandoffCopied: "編碼交接已複製",
@@ -231,7 +381,82 @@ const messages = {
231
381
  openScreenSvg: "匯出 SVG 前請先開啟一個螢幕",
232
382
  svgDownloaded: "SVG 已下載",
233
383
  svgExportError: "無法匯出 SVG",
384
+ screenDuplicated: "畫面已複製",
385
+ screenDuplicateError: "無法複製畫面",
386
+ copied: "已複製",
387
+ pasted: "已貼上",
388
+ deleted: "已刪除",
389
+ propsCopied: "屬性已複製",
390
+ propsPasted: "屬性已貼上",
391
+ primitiveInsertFailed: "無法將該圖層新增到畫面",
392
+ layerMoveFailed: "無法移動該圖層",
393
+ },
394
+ },
395
+ layersPanel: {
396
+ title: "圖層",
397
+ screens: "畫面",
398
+ addScreen: "新增畫面",
399
+ searchPlaceholder: "搜尋圖層...",
400
+ empty: "沒有圖層",
401
+ noMatches: "沒有符合的圖層",
402
+ designLayers: "設計圖層",
403
+ codeLayers: "程式碼圖層",
404
+ elementLayers: "元素圖層",
405
+ collapse: "收合圖層",
406
+ expand: "展開圖層",
407
+ lock: "鎖定圖層",
408
+ unlock: "解除鎖定圖層",
409
+ hide: "隱藏圖層",
410
+ show: "顯示圖層",
411
+ rename: "重新命名圖層",
412
+ selected: "已選取 {{count}} 個",
413
+ },
414
+ multiScreenCanvas: {
415
+ duplicate: "複製",
416
+ fork: "分支",
417
+ fullView: "完整檢視",
418
+ preview: "預覽",
419
+ openAndDuplicate: "選取 {{display}}。使用完整檢視進行聚焦捲動。",
420
+ openAndPreview: "選取 {{display}}。使用完整檢視進行聚焦捲動。",
421
+ doubleClickToEdit: "使用完整檢視進行聚焦捲動",
422
+ sources: {
423
+ localhost: { label: "本機", title: "由本機開發伺服器渲染" },
424
+ fusion: { label: "Fusion 遠端", title: "由 Fusion 渲染" },
425
+ inline: { label: "內嵌", title: "由內嵌程式碼渲染" },
234
426
  },
427
+ previews: {
428
+ live: { label: "即時", shortLabel: "即時框架", title: "即時預覽" },
429
+ snapshot: { label: "快照", shortLabel: "快照", title: "靜態快取快照" },
430
+ preview: { label: "預覽", shortLabel: "預覽", title: "內嵌預覽" },
431
+ },
432
+ },
433
+ questionFlow: {
434
+ defaultTitle: "先塑造設計",
435
+ defaultDescription: "回答高槓桿選項。代理可判斷的部分可以略過。",
436
+ answeredCount: "已回答 {{answered}} / {{total}}",
437
+ requiredCount: "必填 {{answered}} / {{total}}",
438
+ multiSelectHelp: "多選題可選多個籤。方向很精確時請使用其他。",
439
+ ready: "已可繼續。",
440
+ answerRequired: "回答必填卡片後才能繼續。",
441
+ skip: "略過",
442
+ continue: "繼續",
443
+ chooseAny: "選取所有適用項目",
444
+ chooseOne: "選擇一項",
445
+ required: "必填",
446
+ textPlaceholder: "輸入您的回答...",
447
+ selectedCount: "已選取 {{count}} 個。繼續前可新增或移除籤。",
448
+ selectUseful: "選取所有有用項目。",
449
+ other: "其他",
450
+ otherDescription: "清楚告訴代理您的意思。",
451
+ customPlaceholder: "輸入自訂回答...",
452
+ recommended: "建議",
453
+ dragFiles: "將檔案拖到這裡或",
454
+ browse: "瀏覽",
455
+ removeFile: "移除 {{name}}",
456
+ exploreLabel: "探索幾個選項",
457
+ exploreDescription: "定案前先展示不同方向。",
458
+ decideLabel: "幫我決定",
459
+ decideDescription: "用判斷力繼續推進。",
235
460
  },
236
461
  promptDialog: {
237
462
  assetsTitle: "Assets",
@@ -270,6 +495,45 @@ const messages = {
270
495
  send: "傳送",
271
496
  commentSent: "評論已傳送",
272
497
  comment: "評論",
498
+ annotationQueue: "註記佇列",
499
+ annotationQueueCounts: "{{queued}} 排隊 · {{sent}} 已送出",
500
+ batchApply: "批次套用",
501
+ queued: "已排隊",
502
+ queuedStatus: "已排隊 - {{status}}",
503
+ commentSentStatus: "評論已傳送 - {{status}}",
504
+ commentStatus: "評論 - {{status}}",
505
+ anchorLabel: "錨點 {{id}}",
506
+ nearText: "靠近「{{text}}」",
507
+ submitShortcut: "{{mod}}+Enter 送出",
508
+ queue: "排隊",
509
+ pinStatus: {
510
+ deterministic: {
511
+ label: "確定性",
512
+ shortLabel: "直接",
513
+ detail: "已錨定到圖層或選擇器,通常可直接處理。",
514
+ },
515
+ "needs-agent": {
516
+ label: "需要代理",
517
+ shortLabel: "代理",
518
+ detail: "需要解讀,或只有畫布位置脈絡。",
519
+ },
520
+ conflict: {
521
+ label: "衝突",
522
+ shortLabel: "衝突",
523
+ detail: "可能與另一個佇列中的註解重疊或衝突。",
524
+ },
525
+ unsupported: {
526
+ label: "不支援",
527
+ shortLabel: "阻擋",
528
+ detail: "可能超出此畫布編輯範圍。",
529
+ },
530
+ },
531
+ pinStatusCount: {
532
+ direct: "直接 {{count}}",
533
+ agent: "代理 {{count}}",
534
+ conflict: "衝突 {{count}}",
535
+ blocked: "阻擋 {{count}}",
536
+ },
273
537
  },
274
538
  home: {
275
539
  pageTitle: "Design",