@agent-native/core 0.90.1 → 0.90.3

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 (714) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +26 -0
  3. package/corpus/core/docs/content/agent-native-toolkit.mdx +87 -80
  4. package/corpus/core/docs/content/locales/ar-SA/agent-native-toolkit.mdx +89 -80
  5. package/corpus/core/docs/content/locales/de-DE/agent-native-toolkit.mdx +89 -80
  6. package/corpus/core/docs/content/locales/es-ES/agent-native-toolkit.mdx +89 -80
  7. package/corpus/core/docs/content/locales/fr-FR/agent-native-toolkit.mdx +89 -80
  8. package/corpus/core/docs/content/locales/hi-IN/agent-native-toolkit.mdx +89 -80
  9. package/corpus/core/docs/content/locales/ja-JP/agent-native-toolkit.mdx +89 -80
  10. package/corpus/core/docs/content/locales/ko-KR/agent-native-toolkit.mdx +89 -80
  11. package/corpus/core/docs/content/locales/pt-BR/agent-native-toolkit.mdx +89 -80
  12. package/corpus/core/docs/content/locales/zh-CN/agent-native-toolkit.mdx +89 -80
  13. package/corpus/core/docs/content/locales/zh-TW/agent-native-toolkit.mdx +89 -80
  14. package/corpus/core/docs/content/toolkit-agent-ux.mdx +43 -0
  15. package/corpus/core/docs/content/toolkit-app-adapters.mdx +9 -0
  16. package/corpus/core/docs/content/toolkit-collaboration-ui.mdx +12 -0
  17. package/corpus/core/docs/content/toolkit-collaboration.mdx +74 -0
  18. package/corpus/core/docs/content/toolkit-command-navigation.mdx +106 -0
  19. package/corpus/core/docs/content/toolkit-comments-review.mdx +98 -0
  20. package/corpus/core/docs/content/toolkit-history.mdx +95 -0
  21. package/corpus/core/docs/content/toolkit-observability.mdx +41 -0
  22. package/corpus/core/docs/content/toolkit-org-team.mdx +80 -0
  23. package/corpus/core/docs/content/toolkit-resources.mdx +57 -0
  24. package/corpus/core/docs/content/toolkit-settings.mdx +65 -0
  25. package/corpus/core/docs/content/toolkit-setup-connections.mdx +109 -0
  26. package/corpus/core/docs/content/toolkit-sharing-ui.mdx +18 -6
  27. package/corpus/core/docs/content/toolkit-sharing.mdx +81 -0
  28. package/corpus/core/docs/content/toolkit-shell-hooks.mdx +9 -0
  29. package/corpus/core/docs/content/toolkit-ui.mdx +9 -0
  30. package/corpus/core/package.json +35 -1
  31. package/corpus/core/src/agent/engine/ai-sdk-engine.ts +19 -1
  32. package/corpus/core/src/agent/engine/anthropic-engine.ts +25 -1
  33. package/corpus/core/src/agent/engine/registry.ts +23 -16
  34. package/corpus/core/src/agent/production-agent.ts +37 -6
  35. package/corpus/core/src/client/AgentPanel.tsx +1 -1
  36. package/corpus/core/src/client/command-navigation/index.ts +15 -0
  37. package/corpus/core/src/client/comments-review/index.ts +1 -0
  38. package/corpus/core/src/client/history/VersionHistoryPanel.tsx +145 -0
  39. package/corpus/core/src/client/history/index.ts +18 -0
  40. package/corpus/core/src/client/history/use-history.ts +86 -0
  41. package/corpus/core/src/client/index.ts +76 -9
  42. package/corpus/core/src/client/org/OrgSwitcher.tsx +6 -6
  43. package/corpus/core/src/client/org/RequireActiveOrg.tsx +2 -2
  44. package/corpus/core/src/client/org/TeamPage.tsx +3 -3
  45. package/corpus/core/src/client/org/hooks.ts +32 -0
  46. package/corpus/core/src/client/org/index.ts +30 -1
  47. package/corpus/core/src/client/org-team/index.ts +1 -0
  48. package/corpus/core/src/client/review/ReviewStatusBadge.tsx +39 -0
  49. package/corpus/core/src/client/review/ReviewThreadPanel.tsx +278 -0
  50. package/corpus/core/src/client/review/index.ts +25 -0
  51. package/corpus/core/src/client/review/use-review.ts +114 -0
  52. package/corpus/core/src/client/rich-markdown-editor/useCollabReconcile.ts +11 -6
  53. package/corpus/core/src/client/settings/index.ts +11 -1
  54. package/corpus/core/src/client/setup-connections/BuilderConnectCard.tsx +94 -0
  55. package/corpus/core/src/client/setup-connections/ProviderReadinessBadge.tsx +73 -0
  56. package/corpus/core/src/client/setup-connections/SetupConnectionsPage.tsx +94 -0
  57. package/corpus/core/src/client/setup-connections/index.ts +46 -0
  58. package/corpus/core/src/client/sharing/ShareButton.tsx +20 -14
  59. package/corpus/core/src/client/sharing/ShareDialog.tsx +3 -3
  60. package/corpus/core/src/client/use-action.ts +39 -2
  61. package/corpus/core/src/client/use-db-sync.ts +44 -18
  62. package/corpus/core/src/command-navigation/actions.ts +100 -0
  63. package/corpus/core/src/command-navigation/index.ts +12 -0
  64. package/corpus/core/src/comments-review/index.ts +1 -0
  65. package/corpus/core/src/db/create-get-db.ts +32 -2
  66. package/corpus/core/src/file-upload/builder.ts +24 -3
  67. package/corpus/core/src/file-upload/types.ts +3 -1
  68. package/corpus/core/src/history/actions/create-resource-version.ts +89 -0
  69. package/corpus/core/src/history/actions/get-resource-version.ts +60 -0
  70. package/corpus/core/src/history/actions/list-resource-history.ts +53 -0
  71. package/corpus/core/src/history/actions/list-resource-versions.ts +43 -0
  72. package/corpus/core/src/history/actions/restore-resource-version.ts +96 -0
  73. package/corpus/core/src/history/index.ts +27 -0
  74. package/corpus/core/src/history/registry.ts +99 -0
  75. package/corpus/core/src/history/store.ts +348 -0
  76. package/corpus/core/src/history/types.ts +69 -0
  77. package/corpus/core/src/index.ts +10 -0
  78. package/corpus/core/src/navigation/index.ts +170 -0
  79. package/corpus/core/src/org/index.ts +8 -0
  80. package/corpus/core/src/org/permissions.ts +30 -0
  81. package/corpus/core/src/org-team/index.ts +1 -0
  82. package/corpus/core/src/private-blob/registry.ts +1 -0
  83. package/corpus/core/src/review/actions/consume-review-feedback.ts +38 -0
  84. package/corpus/core/src/review/actions/create-review-comment.ts +107 -0
  85. package/corpus/core/src/review/actions/delete-review-comment.ts +55 -0
  86. package/corpus/core/src/review/actions/get-review-feedback.ts +54 -0
  87. package/corpus/core/src/review/actions/list-review-comments.ts +53 -0
  88. package/corpus/core/src/review/actions/reply-review-comment.ts +107 -0
  89. package/corpus/core/src/review/actions/resolve-review-thread.ts +60 -0
  90. package/corpus/core/src/review/actions/set-review-status.ts +58 -0
  91. package/corpus/core/src/review/index.ts +36 -0
  92. package/corpus/core/src/review/mentions.ts +44 -0
  93. package/corpus/core/src/review/registry.ts +99 -0
  94. package/corpus/core/src/review/store.ts +687 -0
  95. package/corpus/core/src/review/types.ts +97 -0
  96. package/corpus/core/src/server/action-discovery.ts +54 -0
  97. package/corpus/core/src/server/agent-engine-api-key-route.ts +5 -0
  98. package/corpus/core/src/server/credential-provider.ts +108 -0
  99. package/corpus/core/src/server/framework-request-handler.ts +52 -4
  100. package/corpus/core/src/setup-connections/index.ts +89 -0
  101. package/corpus/core/src/setup-connections/onboarding.ts +47 -0
  102. package/corpus/core/src/transcription/builder-transcription.ts +9 -2
  103. package/corpus/core/src/vite/action-types-plugin.ts +52 -0
  104. package/corpus/templates/analytics/app/components/layout/Layout.tsx +2 -1
  105. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +2 -2
  106. package/corpus/templates/analytics/app/global.css +22 -10
  107. package/corpus/templates/analytics/app/i18n/zh-TW.ts +6 -1
  108. package/corpus/templates/analytics/app/i18n-data.ts +81 -13
  109. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +2 -2
  110. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +2 -2
  111. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +528 -108
  112. package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +466 -183
  113. package/corpus/templates/analytics/changelog/2026-07-07-session-replays-load-sooner-show-clearer-activity-timelines-.md +6 -0
  114. package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +5 -0
  115. package/corpus/templates/assets/.agents/skills/logo-composite/SKILL.md +34 -6
  116. package/corpus/templates/assets/AGENTS.md +23 -4
  117. package/corpus/templates/assets/actions/_generation-preset-settings.ts +48 -0
  118. package/corpus/templates/assets/actions/_helpers.ts +8 -1
  119. package/corpus/templates/assets/actions/_preset-skeleton-validation.ts +64 -0
  120. package/corpus/templates/assets/actions/create-generation-preset.ts +11 -3
  121. package/corpus/templates/assets/actions/generate-image-batch.ts +7 -2
  122. package/corpus/templates/assets/actions/generate-image.ts +342 -25
  123. package/corpus/templates/assets/actions/get-library.ts +4 -3
  124. package/corpus/templates/assets/actions/navigate.ts +2 -1
  125. package/corpus/templates/assets/actions/refresh-generation-run.ts +5 -1
  126. package/corpus/templates/assets/actions/update-asset.ts +1 -0
  127. package/corpus/templates/assets/actions/update-generation-preset.ts +8 -1
  128. package/corpus/templates/assets/actions/view-screen.ts +8 -1
  129. package/corpus/templates/assets/app/components/generation/GenerationResults.tsx +9 -1
  130. package/corpus/templates/assets/app/hooks/use-image-model-menu.ts +1 -0
  131. package/corpus/templates/assets/app/hooks/use-navigation-state.ts +11 -0
  132. package/corpus/templates/assets/app/i18n/zh-TW.ts +64 -0
  133. package/corpus/templates/assets/app/i18n-data.ts +650 -0
  134. package/corpus/templates/assets/app/routes/asset.$id.tsx +2 -1
  135. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +44 -33
  136. package/corpus/templates/assets/app/routes/brand-kits.$id_.presets.$presetId.tsx +1474 -0
  137. package/corpus/templates/assets/app/routes/library.tsx +43 -1
  138. package/corpus/templates/assets/server/lib/generation.ts +366 -44
  139. package/corpus/templates/assets/server/lib/image-processing.ts +252 -0
  140. package/corpus/templates/assets/server/lib/preset-skeleton.ts +137 -0
  141. package/corpus/templates/assets/shared/api.ts +47 -0
  142. package/corpus/templates/brain/app/routes/settings.tsx +2 -2
  143. package/corpus/templates/calendar/app/components/calendar/AttendeeAutocomplete.tsx +32 -6
  144. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +120 -40
  145. package/corpus/templates/calendar/app/hooks/use-people.ts +55 -0
  146. package/corpus/templates/calendar/changelog/2026-07-07-guest-suggestions-now-find-coworkers-from-your-google-worksp.md +6 -0
  147. package/corpus/templates/calendar/changelog/2026-07-07-zoom-stays-selected-after-connecting-it-from-a-draft-event.md +6 -0
  148. package/corpus/templates/clips/actions/create-recording.ts +5 -1
  149. package/corpus/templates/clips/actions/finalize-recording.ts +140 -1
  150. package/corpus/templates/clips/actions/import-loom-recording.ts +1 -0
  151. package/corpus/templates/clips/actions/lib/ensure-seekable-video.ts +1 -0
  152. package/corpus/templates/clips/actions/request-transcript.ts +31 -0
  153. package/corpus/templates/clips/actions/set-thumbnail.ts +2 -0
  154. package/corpus/templates/clips/app/components/library/library-layout.tsx +7 -2
  155. package/corpus/templates/clips/app/components/library/organization-switcher.tsx +2 -2
  156. package/corpus/templates/clips/app/components/library/sort-menu.tsx +1 -1
  157. package/corpus/templates/clips/app/components/player/scrubber-position.ts +9 -0
  158. package/corpus/templates/clips/app/components/player/scrubber.tsx +5 -2
  159. package/corpus/templates/clips/app/components/player/share-dialog.tsx +69 -41
  160. package/corpus/templates/clips/app/components/player/video-player.tsx +38 -1
  161. package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +114 -33
  162. package/corpus/templates/clips/app/components/sharing/share-ui.tsx +3 -3
  163. package/corpus/templates/clips/app/components/sharing/slack-share-hint.tsx +9 -19
  164. package/corpus/templates/clips/app/routes/_app.library._index.tsx +27 -1
  165. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +9 -3
  166. package/corpus/templates/clips/app/routes/record.tsx +178 -80
  167. package/corpus/templates/clips/changelog/2026-07-02-recordings-now-wait-for-storage-media-to-serve-before-finishing.md +6 -0
  168. package/corpus/templates/clips/changelog/2026-07-07-a-pending-app-update-no-longer-blocks-screen-recording-updat.md +6 -0
  169. package/corpus/templates/clips/changelog/2026-07-07-chrome-extension-recordings-keep-audio-after-refreshing-tab.md +6 -0
  170. package/corpus/templates/clips/changelog/2026-07-07-clip-playback-progress-now-starts-and-finishes-at-the-right-times.md +6 -0
  171. package/corpus/templates/clips/changelog/2026-07-07-sharing-public-clips-now-stays-focused-on-the-normal-link-wi.md +6 -0
  172. package/corpus/templates/clips/chrome-extension/src/background.ts +18 -0
  173. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +23 -8
  174. package/corpus/templates/clips/desktop/src/app.tsx +40 -3
  175. package/corpus/templates/clips/desktop/src/hooks/useMediaDevices.ts +19 -7
  176. package/corpus/templates/clips/desktop/src/lib/permissions.ts +2 -0
  177. package/corpus/templates/clips/desktop/src/lib/updater.ts +25 -2
  178. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +7 -0
  179. package/corpus/templates/clips/server/routes/api/recordings/[recordingId]/thumbnail.post.ts +1 -0
  180. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +23 -6
  181. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +28 -3
  182. package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +13 -6
  183. package/corpus/templates/clips/shared/finalize-recovery.ts +35 -3
  184. package/corpus/templates/content/AGENTS.md +52 -52
  185. package/corpus/templates/content/actions/_builder-cms-read-client.ts +188 -8
  186. package/corpus/templates/content/actions/_builder-docs-client.ts +41 -3
  187. package/corpus/templates/content/actions/_database-source-utils.ts +998 -160
  188. package/corpus/templates/content/actions/_database-utils.ts +44 -4
  189. package/corpus/templates/content/actions/_notion-action-utils.ts +6 -2
  190. package/corpus/templates/content/actions/add-content-database-source-field-property.ts +23 -1
  191. package/corpus/templates/content/actions/attach-content-database-source.ts +85 -12
  192. package/corpus/templates/content/actions/change-content-database-source-role.ts +9 -1
  193. package/corpus/templates/content/actions/delete-content-database.ts +1 -0
  194. package/corpus/templates/content/actions/delete-document.ts +337 -52
  195. package/corpus/templates/content/actions/get-document.ts +11 -2
  196. package/corpus/templates/content/actions/list-content-databases.ts +57 -9
  197. package/corpus/templates/content/actions/prepare-builder-source-review.ts +23 -6
  198. package/corpus/templates/content/actions/refresh-content-database-source.ts +26 -3
  199. package/corpus/templates/content/actions/restore-content-database.ts +1 -0
  200. package/corpus/templates/content/actions/update-document.ts +43 -0
  201. package/corpus/templates/content/app/components/editor/BuilderBodySyncingNotice.tsx +21 -0
  202. package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +0 -1
  203. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +70 -28
  204. package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +69 -17
  205. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +4 -4
  206. package/corpus/templates/content/app/components/editor/body-hydration.ts +112 -0
  207. package/corpus/templates/content/app/components/editor/builder-body-hydration-pump.ts +52 -0
  208. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +9076 -2876
  209. package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +41 -1
  210. package/corpus/templates/content/app/components/editor/extensions/ImageBlock.tsx +36 -11
  211. package/corpus/templates/content/app/components/editor/previewDocumentSaveController.ts +21 -1
  212. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +11 -1
  213. package/corpus/templates/content/app/components/sidebar/DocumentTreeItem.tsx +11 -8
  214. package/corpus/templates/content/app/global.css +41 -0
  215. package/corpus/templates/content/app/hooks/use-content-database.ts +346 -42
  216. package/corpus/templates/content/app/hooks/use-db-sync.ts +9 -0
  217. package/corpus/templates/content/app/hooks/use-documents.ts +47 -0
  218. package/corpus/templates/content/app/hooks/use-notion.ts +12 -10
  219. package/corpus/templates/content/app/i18n/zh-TW.ts +35 -0
  220. package/corpus/templates/content/app/i18n-data.ts +355 -0
  221. package/corpus/templates/content/app/root.tsx +22 -0
  222. package/corpus/templates/content/changelog/2026-07-01-builder-database-sources-keep-loading-rows-in-the-background.md +6 -0
  223. package/corpus/templates/content/changelog/2026-07-01-builder-source-attach-starts-with-usable-rows.md +6 -0
  224. package/corpus/templates/content/changelog/2026-07-01-builder-source-attachment-now-stays-connected-after-large.md +6 -0
  225. package/corpus/templates/content/changelog/2026-07-01-builder-source-refreshes-now-show-progress-for-large-docs-blog.md +6 -0
  226. package/corpus/templates/content/changelog/2026-07-01-database-pages-now-delete-to-trash-without-route-errors.md +6 -0
  227. package/corpus/templates/content/changelog/2026-07-02-builder-source-refreshes-recover-from-stalled-background-row.md +6 -0
  228. package/corpus/templates/content/changelog/2026-07-02-builder-sourced-rows-open-with-sync-protection.md +6 -0
  229. package/corpus/templates/content/changelog/2026-07-02-database-rows-and-pages-open-faster-from-recently-loaded-dat.md +6 -0
  230. package/corpus/templates/content/changelog/2026-07-02-preview-panels-close-reliably-narrow-sidebar-row-actions-sta.md +6 -0
  231. package/corpus/templates/content/changelog/2026-07-06-builder-sync-progress-no-longer-shows-continue.md +6 -0
  232. package/corpus/templates/content/changelog/2026-07-07-permanently-deleting-trashed-databases-now-finishes-reliably.md +6 -0
  233. package/corpus/templates/content/shared/api.ts +13 -0
  234. package/corpus/templates/content/shared/builder-mdx.ts +16 -3
  235. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +23 -13
  236. package/corpus/templates/design/.agents/skills/responsive-breakpoints/SKILL.md +98 -0
  237. package/corpus/templates/design/.agents/skills/shader-fills/SKILL.md +162 -0
  238. package/corpus/templates/design/AGENTS.md +9 -2
  239. package/corpus/templates/design/actions/add-breakpoint.ts +6 -3
  240. package/corpus/templates/design/actions/apply-a11y-fix.ts +57 -37
  241. package/corpus/templates/design/actions/apply-component-prop-edit.ts +41 -20
  242. package/corpus/templates/design/actions/apply-motion-edit.ts +251 -38
  243. package/corpus/templates/design/actions/apply-shader-fill.ts +90 -66
  244. package/corpus/templates/design/actions/apply-visual-edit.ts +282 -55
  245. package/corpus/templates/design/actions/create-component.ts +29 -60
  246. package/corpus/templates/design/actions/create-file.ts +9 -2
  247. package/corpus/templates/design/actions/duplicate-design.ts +31 -2
  248. package/corpus/templates/design/actions/edit-design.ts +36 -38
  249. package/corpus/templates/design/actions/generate-design-title.ts +87 -0
  250. package/corpus/templates/design/actions/generate-design.ts +53 -18
  251. package/corpus/templates/design/actions/generate-screens.ts +108 -4
  252. package/corpus/templates/design/actions/get-motion-timeline.ts +35 -7
  253. package/corpus/templates/design/actions/insert-asset.ts +34 -29
  254. package/corpus/templates/design/actions/insert-design-native-asset.ts +129 -32
  255. package/corpus/templates/design/actions/insert-figma-library-asset.ts +35 -30
  256. package/corpus/templates/design/actions/present-design-variants.ts +7 -2
  257. package/corpus/templates/design/actions/remove-motion-timeline.ts +31 -36
  258. package/corpus/templates/design/actions/update-file.ts +190 -75
  259. package/corpus/templates/design/app/components/design/BreakpointBar.tsx +403 -0
  260. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +469 -222
  261. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +708 -53
  262. package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +83 -3
  263. package/corpus/templates/design/app/components/design/EditPanel.tsx +1091 -6948
  264. package/corpus/templates/design/app/components/design/LayersPanel.tsx +419 -85
  265. package/corpus/templates/design/app/components/design/MotionDock.tsx +1124 -103
  266. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +2610 -1398
  267. package/corpus/templates/design/app/components/design/ReadOnlyDesignBanner.tsx +22 -0
  268. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +2182 -235
  269. package/corpus/templates/design/app/components/design/bridge/motion-preview.bridge.ts +187 -11
  270. package/corpus/templates/design/app/components/design/bridge/shader-fill-preview.bridge.ts +376 -1
  271. package/corpus/templates/design/app/components/design/bridge/shader-runtime.bridge.ts +746 -0
  272. package/corpus/templates/design/app/components/design/canvas-primitive-style.ts +17 -0
  273. package/corpus/templates/design/app/components/design/code-workbench/SideBar.tsx +1 -1
  274. package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +1 -3
  275. package/corpus/templates/design/app/components/design/code-workbench/quickinput/QuickInput.tsx +1 -1
  276. package/corpus/templates/design/app/components/design/edit-panel/appearance-properties.tsx +518 -0
  277. package/corpus/templates/design/app/components/design/edit-panel/code-inspect-helpers.tsx +562 -0
  278. package/corpus/templates/design/app/components/design/edit-panel/component-section.tsx +763 -0
  279. package/corpus/templates/design/app/components/design/edit-panel/document-colors.ts +94 -0
  280. package/corpus/templates/design/app/components/design/edit-panel/effects-properties.tsx +780 -0
  281. package/corpus/templates/design/app/components/design/edit-panel/element-classification.ts +446 -0
  282. package/corpus/templates/design/app/components/design/edit-panel/element-identity.ts +79 -0
  283. package/corpus/templates/design/app/components/design/edit-panel/field-primitives.tsx +315 -0
  284. package/corpus/templates/design/app/components/design/edit-panel/fill-gradient-helpers.ts +344 -0
  285. package/corpus/templates/design/app/components/design/edit-panel/fill-properties.tsx +594 -0
  286. package/corpus/templates/design/app/components/design/edit-panel/frame-presets-panel.tsx +119 -0
  287. package/corpus/templates/design/app/components/design/edit-panel/inspector-controls.tsx +248 -0
  288. package/corpus/templates/design/app/components/design/edit-panel/interaction-state-helpers.ts +45 -0
  289. package/corpus/templates/design/app/components/design/edit-panel/layout-properties.tsx +693 -0
  290. package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +724 -0
  291. package/corpus/templates/design/app/components/design/edit-panel/position-helpers.ts +207 -0
  292. package/corpus/templates/design/app/components/design/edit-panel/position-layout-properties.tsx +628 -0
  293. package/corpus/templates/design/app/components/design/edit-panel/selection-helpers.ts +91 -0
  294. package/corpus/templates/design/app/components/design/edit-panel/stroke-properties.tsx +649 -0
  295. package/corpus/templates/design/app/components/design/edit-panel/style-change-types.ts +118 -0
  296. package/corpus/templates/design/app/components/design/edit-panel/style-options.ts +88 -0
  297. package/corpus/templates/design/app/components/design/edit-panel/transform-helpers.ts +100 -0
  298. package/corpus/templates/design/app/components/design/edit-panel/typography-helpers.ts +117 -0
  299. package/corpus/templates/design/app/components/design/edit-panel/typography-properties.tsx +501 -0
  300. package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +91 -40
  301. package/corpus/templates/design/app/components/design/inspector/BreakpointOverrideIndicator.tsx +82 -0
  302. package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +189 -87
  303. package/corpus/templates/design/app/components/design/inspector/GlslShaderPanel.tsx +1097 -0
  304. package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +44 -0
  305. package/corpus/templates/design/app/components/design/inspector/InteractionStatePanel.tsx +258 -0
  306. package/corpus/templates/design/app/components/design/inspector/MotionKeyframeDiamond.tsx +144 -0
  307. package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +99 -9
  308. package/corpus/templates/design/app/components/design/inspector/frame-size-presets.ts +116 -0
  309. package/corpus/templates/design/app/components/design/inspector/index.ts +26 -0
  310. package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +29 -0
  311. package/corpus/templates/design/app/components/design/multi-screen/alt-hover-measurement.ts +171 -0
  312. package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +220 -0
  313. package/corpus/templates/design/app/components/design/multi-screen/chrome-transitions.ts +35 -0
  314. package/corpus/templates/design/app/components/design/multi-screen/cross-screen-drop.ts +134 -0
  315. package/corpus/templates/design/app/components/design/multi-screen/culling.ts +185 -0
  316. package/corpus/templates/design/app/components/design/multi-screen/gradient-overlay-geometry.ts +120 -0
  317. package/corpus/templates/design/app/components/design/multi-screen/types.ts +892 -0
  318. package/corpus/templates/design/app/components/design/multi-screen/vector-edit-geometry.ts +21 -0
  319. package/corpus/templates/design/app/components/design/types.ts +15 -0
  320. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +109 -5
  321. package/corpus/templates/design/app/global.css +8 -8
  322. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +259 -2
  323. package/corpus/templates/design/app/i18n/zh-TW.ts +163 -9
  324. package/corpus/templates/design/app/i18n-breakpoints.ts +205 -0
  325. package/corpus/templates/design/app/i18n-data.ts +1664 -152
  326. package/corpus/templates/design/app/i18n-motion.ts +563 -0
  327. package/corpus/templates/design/app/lib/design-import.ts +73 -0
  328. package/corpus/templates/design/app/pages/Index.tsx +41 -22
  329. package/corpus/templates/design/changelog/2026-06-29-design-inspector-controls-now-match-figmas-softer-dark-chrome.md +1 -1
  330. package/corpus/templates/design/changelog/2026-06-30-design-now-has-a-figma-style-left-rail-for-file-agent-assets.md +1 -1
  331. package/corpus/templates/design/changelog/2026-06-30-design-tools-now-use-a-quieter-figma-style-list-layout.md +1 -1
  332. package/corpus/templates/design/changelog/2026-06-30-multi-select-outlines-now-stay-consistent-across-all-screens.md +1 -1
  333. package/corpus/templates/design/changelog/2026-07-03-canvas-interactions-now-match-figma-rotation-aware-resizing-.md +1 -1
  334. package/corpus/templates/design/changelog/2026-07-03-layers-panel-matches-figma-top-layer-on-top-drag-with-auto-s.md +1 -1
  335. package/corpus/templates/design/changelog/2026-07-05-designs-get-ai-generated-names-from-your-prompt.md +6 -0
  336. package/corpus/templates/design/changelog/2026-07-05-local-code-screens-keep-their-connection-when-duplicated-and.md +6 -0
  337. package/corpus/templates/design/changelog/2026-07-05-press-a-to-draw-screens-on-the-canvas-inside-a-screen-it-dr.md +6 -0
  338. package/corpus/templates/design/changelog/2026-07-06-3d-rotation-and-perspective-controls-on-every-element.md +6 -0
  339. package/corpus/templates/design/changelog/2026-07-06-ai-generated-and-duplicated-screens-now-get-their-editor-sel.md +6 -0
  340. package/corpus/templates/design/changelog/2026-07-06-applying-shaders-and-fills-in-quick-succession-can-no-longer.md +6 -0
  341. package/corpus/templates/design/changelog/2026-07-06-breakpoint-frames-in-the-overview-now-support-click-to-selec.md +6 -0
  342. package/corpus/templates/design/changelog/2026-07-06-breakpoint-segments-in-the-inspector-now-show-a-device-icon-.md +6 -0
  343. package/corpus/templates/design/changelog/2026-07-06-breakpoint-targeting-now-lives-in-one-compact-control-in-the.md +6 -0
  344. package/corpus/templates/design/changelog/2026-07-06-canvas-edits-can-no-longer-be-overwritten-by-stale-collabora.md +6 -0
  345. package/corpus/templates/design/changelog/2026-07-06-canvas-edits-inside-screens-save-reliably-again.md +6 -0
  346. package/corpus/templates/design/changelog/2026-07-06-cleaner-inspector-removed-the-ask-ai-box-from-the-design-tab.md +6 -0
  347. package/corpus/templates/design/changelog/2026-07-06-clicking-empty-canvas-space-now-deselects-an-element-inside-.md +6 -0
  348. package/corpus/templates/design/changelog/2026-07-06-dragging-an-element-onto-a-rectangle-now-nests-it-inside-wit.md +6 -0
  349. package/corpus/templates/design/changelog/2026-07-06-dragging-screens-and-objects-on-the-canvas-is-now-much-smoot.md +6 -0
  350. package/corpus/templates/design/changelog/2026-07-06-drawing-a-shape-or-text-on-the-canvas-no-longer-flashes-away.md +6 -0
  351. package/corpus/templates/design/changelog/2026-07-06-dropping-an-element-between-two-others-inside-a-screen-now-s.md +6 -0
  352. package/corpus/templates/design/changelog/2026-07-06-duplicating-a-screen-now-places-the-copy-exactly-where-you-d.md +6 -0
  353. package/corpus/templates/design/changelog/2026-07-06-edit-gradients-directly-on-elements-inside-screens-scale-str.md +6 -0
  354. package/corpus/templates/design/changelog/2026-07-06-edits-from-collaborators-and-the-agent-now-update-the-canvas.md +6 -0
  355. package/corpus/templates/design/changelog/2026-07-06-fixed-a-bug-where-most-style-position-and-text-edits-briefly.md +6 -0
  356. package/corpus/templates/design/changelog/2026-07-06-fixed-a-confusing-raw-error-message-when-a-file-upload-fails.md +6 -0
  357. package/corpus/templates/design/changelog/2026-07-06-fixed-a-rare-case-where-an-edit-could-be-silently-overwritte.md +6 -0
  358. package/corpus/templates/design/changelog/2026-07-06-fixed-inserted-assets-sometimes-disappearing-reappearing-or-.md +6 -0
  359. package/corpus/templates/design/changelog/2026-07-06-fixed-inspector-value-scrubbing-producing-erratic-numbers-an.md +6 -0
  360. package/corpus/templates/design/changelog/2026-07-06-fixed-padding-gap-and-min-max-size-scrubbing-not-updating-th.md +6 -0
  361. package/corpus/templates/design/changelog/2026-07-06-fixed-text-stroke-color-turning-black-and-glyphs-disappearin.md +6 -0
  362. package/corpus/templates/design/changelog/2026-07-06-fixed-the-collapsed-effects-and-stroke-inspector-sections-sh.md +6 -0
  363. package/corpus/templates/design/changelog/2026-07-06-fixed-the-new-design-dialog-closing-unexpectedly-when-using-.md +6 -0
  364. package/corpus/templates/design/changelog/2026-07-06-fixed-the-typography-section-missing-when-selecting-text-nes.md +6 -0
  365. package/corpus/templates/design/changelog/2026-07-06-full-view-no-longer-flashes-back-to-the-overview-on-entry-no.md +6 -0
  366. package/corpus/templates/design/changelog/2026-07-06-keyframe-animation-timeline-per-property-keyframes-easing-cu.md +6 -0
  367. package/corpus/templates/design/changelog/2026-07-06-moving-restyling-and-scrubbing-values-on-elements-in-ai-gene.md +6 -0
  368. package/corpus/templates/design/changelog/2026-07-06-padding-and-corner-radius-value-scrubbing-now-snaps-to-whole.md +6 -0
  369. package/corpus/templates/design/changelog/2026-07-06-padding-handles-now-only-resize-on-the-handle-line-itself-sh.md +6 -0
  370. package/corpus/templates/design/changelog/2026-07-06-preview-and-edit-hover-focus-and-pressed-states-with-real-cs.md +6 -0
  371. package/corpus/templates/design/changelog/2026-07-06-promoting-an-element-to-a-component-now-works-correctly-for-.md +6 -0
  372. package/corpus/templates/design/changelog/2026-07-06-reduced-url-history-churn-and-selection-overlay-flicker-whil.md +6 -0
  373. package/corpus/templates/design/changelog/2026-07-06-removed-the-decorative-dot-before-screen-names-in-the-overvi.md +6 -0
  374. package/corpus/templates/design/changelog/2026-07-06-responsive-breakpoints-edit-at-any-width-with-cascading-over.md +6 -0
  375. package/corpus/templates/design/changelog/2026-07-06-screen-labels-no-longer-turn-blue-when-you-hover-inside-the-.md +6 -0
  376. package/corpus/templates/design/changelog/2026-07-06-scrolling-a-screen-with-an-element-selected-stays-smooth-on-.md +6 -0
  377. package/corpus/templates/design/changelog/2026-07-06-selecting-multiple-elements-and-dragging-now-moves-the-whole.md +6 -0
  378. package/corpus/templates/design/changelog/2026-07-06-selection-borders-handles-and-value-readouts-now-stay-the-sa.md +6 -0
  379. package/corpus/templates/design/changelog/2026-07-06-selection-handles-and-editing-chrome-now-stay-a-constant-siz.md +6 -0
  380. package/corpus/templates/design/changelog/2026-07-06-shader-fills-and-effects-ai-authored-or-preset-glsl-shaders-.md +6 -0
  381. package/corpus/templates/design/changelog/2026-07-06-text-drawn-on-the-canvas-now-defaults-to-white-and-inter-in-.md +6 -0
  382. package/corpus/templates/design/changelog/2026-07-06-text-dropped-into-a-shape-now-stays-readable-instead-of-disa.md +6 -0
  383. package/corpus/templates/design/changelog/2026-07-06-the-add-tweak-controls-prompt-no-longer-jumps-to-the-corner-.md +6 -0
  384. package/corpus/templates/design/changelog/2026-07-06-the-padding-value-readout-now-stays-visible-while-you-hover-.md +6 -0
  385. package/corpus/templates/design/changelog/2026-07-06-the-selected-element-attachment-now-clears-from-the-chat-com.md +6 -0
  386. package/corpus/templates/design/changelog/2026-07-06-the-zoom-menu-is-more-compact-with-tight-rows-and-right-alig.md +6 -0
  387. package/corpus/templates/design/changelog/2026-07-06-undo-and-redo-no-longer-flash-the-screen-changes-now-apply-i.md +6 -0
  388. package/corpus/templates/design/changelog/2026-07-06-zoom-presets-like-zoom-to-50-now-stay-on-the-focused-screen-.md +6 -0
  389. package/corpus/templates/design/server/lib/import-design-files.ts +11 -2
  390. package/corpus/templates/design/server/source-workspace.ts +139 -59
  391. package/corpus/templates/design/shared/board-file.ts +11 -2
  392. package/corpus/templates/design/shared/breakpoint-media.ts +543 -0
  393. package/corpus/templates/design/shared/canvas-math.ts +354 -35
  394. package/corpus/templates/design/shared/code-layer.ts +277 -8
  395. package/corpus/templates/design/shared/design-state.ts +11 -4
  396. package/corpus/templates/design/shared/interaction-states.ts +548 -0
  397. package/corpus/templates/design/shared/motion-compiler.ts +186 -23
  398. package/corpus/templates/design/shared/motion-easing.ts +294 -0
  399. package/corpus/templates/design/shared/motion-timeline.ts +400 -34
  400. package/corpus/templates/design/shared/prompt-title.ts +95 -0
  401. package/corpus/templates/design/shared/responsive-classes.ts +448 -10
  402. package/corpus/templates/design/shared/screen-annotation.ts +46 -0
  403. package/corpus/templates/design/shared/shader-fills.ts +1009 -0
  404. package/corpus/templates/design/shared/shader-presets.ts +852 -4
  405. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +15 -2
  406. package/corpus/templates/slides/app/components/editor/ImportButton.tsx +10 -1
  407. package/corpus/templates/slides/app/lib/upload-response.ts +71 -0
  408. package/corpus/templates/slides/app/pages/DeckEditor.tsx +2 -2
  409. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  410. package/dist/agent/engine/ai-sdk-engine.js +15 -1
  411. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  412. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  413. package/dist/agent/engine/anthropic-engine.js +20 -1
  414. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  415. package/dist/agent/engine/registry.d.ts.map +1 -1
  416. package/dist/agent/engine/registry.js +22 -14
  417. package/dist/agent/engine/registry.js.map +1 -1
  418. package/dist/agent/production-agent.d.ts.map +1 -1
  419. package/dist/agent/production-agent.js +27 -7
  420. package/dist/agent/production-agent.js.map +1 -1
  421. package/dist/client/AgentPanel.js +1 -1
  422. package/dist/client/AgentPanel.js.map +1 -1
  423. package/dist/client/command-navigation/index.d.ts +4 -0
  424. package/dist/client/command-navigation/index.d.ts.map +1 -0
  425. package/dist/client/command-navigation/index.js +4 -0
  426. package/dist/client/command-navigation/index.js.map +1 -0
  427. package/dist/client/comments-review/index.d.ts +2 -0
  428. package/dist/client/comments-review/index.d.ts.map +1 -0
  429. package/dist/client/comments-review/index.js +2 -0
  430. package/dist/client/comments-review/index.js.map +1 -0
  431. package/dist/client/history/VersionHistoryPanel.d.ts +18 -0
  432. package/dist/client/history/VersionHistoryPanel.d.ts.map +1 -0
  433. package/dist/client/history/VersionHistoryPanel.js +24 -0
  434. package/dist/client/history/VersionHistoryPanel.js.map +1 -0
  435. package/dist/client/history/index.d.ts +3 -0
  436. package/dist/client/history/index.d.ts.map +1 -0
  437. package/dist/client/history/index.js +3 -0
  438. package/dist/client/history/index.js.map +1 -0
  439. package/dist/client/history/use-history.d.ts +46 -0
  440. package/dist/client/history/use-history.d.ts.map +1 -0
  441. package/dist/client/history/use-history.js +18 -0
  442. package/dist/client/history/use-history.js.map +1 -0
  443. package/dist/client/index.d.ts +6 -4
  444. package/dist/client/index.d.ts.map +1 -1
  445. package/dist/client/index.js +6 -4
  446. package/dist/client/index.js.map +1 -1
  447. package/dist/client/org/OrgSwitcher.js +5 -5
  448. package/dist/client/org/OrgSwitcher.js.map +1 -1
  449. package/dist/client/org/RequireActiveOrg.js +2 -2
  450. package/dist/client/org/RequireActiveOrg.js.map +1 -1
  451. package/dist/client/org/TeamPage.js +3 -3
  452. package/dist/client/org/TeamPage.js.map +1 -1
  453. package/dist/client/org/hooks.d.ts +12 -1
  454. package/dist/client/org/hooks.d.ts.map +1 -1
  455. package/dist/client/org/hooks.js +15 -0
  456. package/dist/client/org/hooks.js.map +1 -1
  457. package/dist/client/org/index.d.ts +4 -2
  458. package/dist/client/org/index.d.ts.map +1 -1
  459. package/dist/client/org/index.js +3 -1
  460. package/dist/client/org/index.js.map +1 -1
  461. package/dist/client/org-team/index.d.ts +2 -0
  462. package/dist/client/org-team/index.d.ts.map +1 -0
  463. package/dist/client/org-team/index.js +2 -0
  464. package/dist/client/org-team/index.js.map +1 -0
  465. package/dist/client/review/ReviewStatusBadge.d.ts +7 -0
  466. package/dist/client/review/ReviewStatusBadge.d.ts.map +1 -0
  467. package/dist/client/review/ReviewStatusBadge.js +19 -0
  468. package/dist/client/review/ReviewStatusBadge.js.map +1 -0
  469. package/dist/client/review/ReviewThreadPanel.d.ts +20 -0
  470. package/dist/client/review/ReviewThreadPanel.d.ts.map +1 -0
  471. package/dist/client/review/ReviewThreadPanel.js +84 -0
  472. package/dist/client/review/ReviewThreadPanel.js.map +1 -0
  473. package/dist/client/review/index.d.ts +4 -0
  474. package/dist/client/review/index.d.ts.map +1 -0
  475. package/dist/client/review/index.js +4 -0
  476. package/dist/client/review/index.js.map +1 -0
  477. package/dist/client/review/use-review.d.ts +68 -0
  478. package/dist/client/review/use-review.d.ts.map +1 -0
  479. package/dist/client/review/use-review.js +22 -0
  480. package/dist/client/review/use-review.js.map +1 -0
  481. package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts.map +1 -1
  482. package/dist/client/rich-markdown-editor/useCollabReconcile.js +11 -6
  483. package/dist/client/rich-markdown-editor/useCollabReconcile.js.map +1 -1
  484. package/dist/client/settings/index.d.ts +1 -1
  485. package/dist/client/settings/index.d.ts.map +1 -1
  486. package/dist/client/settings/index.js +1 -1
  487. package/dist/client/settings/index.js.map +1 -1
  488. package/dist/client/setup-connections/BuilderConnectCard.d.ts +9 -0
  489. package/dist/client/setup-connections/BuilderConnectCard.d.ts.map +1 -0
  490. package/dist/client/setup-connections/BuilderConnectCard.js +25 -0
  491. package/dist/client/setup-connections/BuilderConnectCard.js.map +1 -0
  492. package/dist/client/setup-connections/ProviderReadinessBadge.d.ts +8 -0
  493. package/dist/client/setup-connections/ProviderReadinessBadge.d.ts.map +1 -0
  494. package/dist/client/setup-connections/ProviderReadinessBadge.js +32 -0
  495. package/dist/client/setup-connections/ProviderReadinessBadge.js.map +1 -0
  496. package/dist/client/setup-connections/SetupConnectionsPage.d.ts +17 -0
  497. package/dist/client/setup-connections/SetupConnectionsPage.d.ts.map +1 -0
  498. package/dist/client/setup-connections/SetupConnectionsPage.js +10 -0
  499. package/dist/client/setup-connections/SetupConnectionsPage.js.map +1 -0
  500. package/dist/client/setup-connections/index.d.ts +7 -0
  501. package/dist/client/setup-connections/index.d.ts.map +1 -0
  502. package/dist/client/setup-connections/index.js +7 -0
  503. package/dist/client/setup-connections/index.js.map +1 -0
  504. package/dist/client/sharing/ShareButton.d.ts +4 -4
  505. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  506. package/dist/client/sharing/ShareButton.js +13 -7
  507. package/dist/client/sharing/ShareButton.js.map +1 -1
  508. package/dist/client/sharing/ShareDialog.js +3 -3
  509. package/dist/client/sharing/ShareDialog.js.map +1 -1
  510. package/dist/client/use-action.d.ts +3 -0
  511. package/dist/client/use-action.d.ts.map +1 -1
  512. package/dist/client/use-action.js +34 -3
  513. package/dist/client/use-action.js.map +1 -1
  514. package/dist/client/use-db-sync.d.ts +4 -0
  515. package/dist/client/use-db-sync.d.ts.map +1 -1
  516. package/dist/client/use-db-sync.js +37 -18
  517. package/dist/client/use-db-sync.js.map +1 -1
  518. package/dist/collab/routes.d.ts +1 -1
  519. package/dist/command-navigation/actions.d.ts +25 -0
  520. package/dist/command-navigation/actions.d.ts.map +1 -0
  521. package/dist/command-navigation/actions.js +64 -0
  522. package/dist/command-navigation/actions.js.map +1 -0
  523. package/dist/command-navigation/index.d.ts +4 -0
  524. package/dist/command-navigation/index.d.ts.map +1 -0
  525. package/dist/command-navigation/index.js +4 -0
  526. package/dist/command-navigation/index.js.map +1 -0
  527. package/dist/comments-review/index.d.ts +2 -0
  528. package/dist/comments-review/index.d.ts.map +1 -0
  529. package/dist/comments-review/index.js +2 -0
  530. package/dist/comments-review/index.js.map +1 -0
  531. package/dist/db/create-get-db.d.ts +25 -0
  532. package/dist/db/create-get-db.d.ts.map +1 -1
  533. package/dist/db/create-get-db.js +25 -2
  534. package/dist/db/create-get-db.js.map +1 -1
  535. package/dist/file-upload/builder.d.ts.map +1 -1
  536. package/dist/file-upload/builder.js +18 -2
  537. package/dist/file-upload/builder.js.map +1 -1
  538. package/dist/file-upload/types.d.ts +3 -0
  539. package/dist/file-upload/types.d.ts.map +1 -1
  540. package/dist/file-upload/types.js.map +1 -1
  541. package/dist/history/actions/create-resource-version.d.ts +10 -0
  542. package/dist/history/actions/create-resource-version.d.ts.map +1 -0
  543. package/dist/history/actions/create-resource-version.js +65 -0
  544. package/dist/history/actions/create-resource-version.js.map +1 -0
  545. package/dist/history/actions/get-resource-version.d.ts +10 -0
  546. package/dist/history/actions/get-resource-version.d.ts.map +1 -0
  547. package/dist/history/actions/get-resource-version.js +38 -0
  548. package/dist/history/actions/get-resource-version.js.map +1 -0
  549. package/dist/history/actions/list-resource-history.d.ts +10 -0
  550. package/dist/history/actions/list-resource-history.d.ts.map +1 -0
  551. package/dist/history/actions/list-resource-history.js +45 -0
  552. package/dist/history/actions/list-resource-history.js.map +1 -0
  553. package/dist/history/actions/list-resource-versions.d.ts +10 -0
  554. package/dist/history/actions/list-resource-versions.d.ts.map +1 -0
  555. package/dist/history/actions/list-resource-versions.js +35 -0
  556. package/dist/history/actions/list-resource-versions.js.map +1 -0
  557. package/dist/history/actions/restore-resource-version.d.ts +11 -0
  558. package/dist/history/actions/restore-resource-version.d.ts.map +1 -0
  559. package/dist/history/actions/restore-resource-version.js +59 -0
  560. package/dist/history/actions/restore-resource-version.js.map +1 -0
  561. package/dist/history/index.d.ts +4 -0
  562. package/dist/history/index.d.ts.map +1 -0
  563. package/dist/history/index.js +3 -0
  564. package/dist/history/index.js.map +1 -0
  565. package/dist/history/registry.d.ts +10 -0
  566. package/dist/history/registry.d.ts.map +1 -0
  567. package/dist/history/registry.js +61 -0
  568. package/dist/history/registry.js.map +1 -0
  569. package/dist/history/store.d.ts +34 -0
  570. package/dist/history/store.d.ts.map +1 -0
  571. package/dist/history/store.js +265 -0
  572. package/dist/history/store.js.map +1 -0
  573. package/dist/history/types.d.ts +55 -0
  574. package/dist/history/types.d.ts.map +1 -0
  575. package/dist/history/types.js +2 -0
  576. package/dist/history/types.js.map +1 -0
  577. package/dist/index.d.ts +6 -0
  578. package/dist/index.d.ts.map +1 -1
  579. package/dist/index.js +6 -0
  580. package/dist/index.js.map +1 -1
  581. package/dist/navigation/index.d.ts +53 -0
  582. package/dist/navigation/index.d.ts.map +1 -0
  583. package/dist/navigation/index.js +105 -0
  584. package/dist/navigation/index.js.map +1 -0
  585. package/dist/observability/routes.d.ts +3 -3
  586. package/dist/org/index.d.ts +1 -0
  587. package/dist/org/index.d.ts.map +1 -1
  588. package/dist/org/index.js +1 -0
  589. package/dist/org/index.js.map +1 -1
  590. package/dist/org/permissions.d.ts +7 -0
  591. package/dist/org/permissions.d.ts.map +1 -0
  592. package/dist/org/permissions.js +21 -0
  593. package/dist/org/permissions.js.map +1 -0
  594. package/dist/org-team/index.d.ts +2 -0
  595. package/dist/org-team/index.d.ts.map +1 -0
  596. package/dist/org-team/index.js +2 -0
  597. package/dist/org-team/index.js.map +1 -0
  598. package/dist/private-blob/registry.d.ts.map +1 -1
  599. package/dist/private-blob/registry.js +1 -0
  600. package/dist/private-blob/registry.js.map +1 -1
  601. package/dist/resources/handlers.d.ts +2 -2
  602. package/dist/review/actions/consume-review-feedback.d.ts +9 -0
  603. package/dist/review/actions/consume-review-feedback.d.ts.map +1 -0
  604. package/dist/review/actions/consume-review-feedback.js +29 -0
  605. package/dist/review/actions/consume-review-feedback.js.map +1 -0
  606. package/dist/review/actions/create-review-comment.d.ts +18 -0
  607. package/dist/review/actions/create-review-comment.d.ts.map +1 -0
  608. package/dist/review/actions/create-review-comment.js +81 -0
  609. package/dist/review/actions/create-review-comment.js.map +1 -0
  610. package/dist/review/actions/delete-review-comment.d.ts +10 -0
  611. package/dist/review/actions/delete-review-comment.d.ts.map +1 -0
  612. package/dist/review/actions/delete-review-comment.js +45 -0
  613. package/dist/review/actions/delete-review-comment.js.map +1 -0
  614. package/dist/review/actions/get-review-feedback.d.ts +10 -0
  615. package/dist/review/actions/get-review-feedback.d.ts.map +1 -0
  616. package/dist/review/actions/get-review-feedback.js +45 -0
  617. package/dist/review/actions/get-review-feedback.js.map +1 -0
  618. package/dist/review/actions/list-review-comments.d.ts +13 -0
  619. package/dist/review/actions/list-review-comments.d.ts.map +1 -0
  620. package/dist/review/actions/list-review-comments.js +44 -0
  621. package/dist/review/actions/list-review-comments.js.map +1 -0
  622. package/dist/review/actions/reply-review-comment.d.ts +16 -0
  623. package/dist/review/actions/reply-review-comment.d.ts.map +1 -0
  624. package/dist/review/actions/reply-review-comment.js +84 -0
  625. package/dist/review/actions/reply-review-comment.js.map +1 -0
  626. package/dist/review/actions/resolve-review-thread.d.ts +11 -0
  627. package/dist/review/actions/resolve-review-thread.d.ts.map +1 -0
  628. package/dist/review/actions/resolve-review-thread.js +46 -0
  629. package/dist/review/actions/resolve-review-thread.js.map +1 -0
  630. package/dist/review/actions/set-review-status.d.ts +9 -0
  631. package/dist/review/actions/set-review-status.d.ts.map +1 -0
  632. package/dist/review/actions/set-review-status.js +43 -0
  633. package/dist/review/actions/set-review-status.js.map +1 -0
  634. package/dist/review/index.d.ts +5 -0
  635. package/dist/review/index.d.ts.map +1 -0
  636. package/dist/review/index.js +4 -0
  637. package/dist/review/index.js.map +1 -0
  638. package/dist/review/mentions.d.ts +4 -0
  639. package/dist/review/mentions.d.ts.map +1 -0
  640. package/dist/review/mentions.js +39 -0
  641. package/dist/review/mentions.js.map +1 -0
  642. package/dist/review/registry.d.ts +10 -0
  643. package/dist/review/registry.d.ts.map +1 -0
  644. package/dist/review/registry.js +61 -0
  645. package/dist/review/registry.js.map +1 -0
  646. package/dist/review/store.d.ts +63 -0
  647. package/dist/review/store.d.ts.map +1 -0
  648. package/dist/review/store.js +558 -0
  649. package/dist/review/store.js.map +1 -0
  650. package/dist/review/types.d.ts +77 -0
  651. package/dist/review/types.d.ts.map +1 -0
  652. package/dist/review/types.js +2 -0
  653. package/dist/review/types.js.map +1 -0
  654. package/dist/secrets/routes.d.ts +9 -9
  655. package/dist/server/action-discovery.d.ts.map +1 -1
  656. package/dist/server/action-discovery.js +54 -0
  657. package/dist/server/action-discovery.js.map +1 -1
  658. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  659. package/dist/server/agent-engine-api-key-route.d.ts.map +1 -1
  660. package/dist/server/agent-engine-api-key-route.js +5 -0
  661. package/dist/server/agent-engine-api-key-route.js.map +1 -1
  662. package/dist/server/credential-provider.d.ts +26 -0
  663. package/dist/server/credential-provider.d.ts.map +1 -1
  664. package/dist/server/credential-provider.js +82 -0
  665. package/dist/server/credential-provider.js.map +1 -1
  666. package/dist/server/framework-request-handler.d.ts.map +1 -1
  667. package/dist/server/framework-request-handler.js +37 -1
  668. package/dist/server/framework-request-handler.js.map +1 -1
  669. package/dist/setup-connections/index.d.ts +6 -0
  670. package/dist/setup-connections/index.d.ts.map +1 -0
  671. package/dist/setup-connections/index.js +6 -0
  672. package/dist/setup-connections/index.js.map +1 -0
  673. package/dist/setup-connections/onboarding.d.ts +14 -0
  674. package/dist/setup-connections/onboarding.d.ts.map +1 -0
  675. package/dist/setup-connections/onboarding.js +23 -0
  676. package/dist/setup-connections/onboarding.js.map +1 -0
  677. package/dist/transcription/builder-transcription.d.ts +1 -0
  678. package/dist/transcription/builder-transcription.d.ts.map +1 -1
  679. package/dist/transcription/builder-transcription.js +5 -2
  680. package/dist/transcription/builder-transcription.js.map +1 -1
  681. package/dist/vite/action-types-plugin.d.ts.map +1 -1
  682. package/dist/vite/action-types-plugin.js +52 -0
  683. package/dist/vite/action-types-plugin.js.map +1 -1
  684. package/docs/content/agent-native-toolkit.mdx +87 -80
  685. package/docs/content/locales/ar-SA/agent-native-toolkit.mdx +89 -80
  686. package/docs/content/locales/de-DE/agent-native-toolkit.mdx +89 -80
  687. package/docs/content/locales/es-ES/agent-native-toolkit.mdx +89 -80
  688. package/docs/content/locales/fr-FR/agent-native-toolkit.mdx +89 -80
  689. package/docs/content/locales/hi-IN/agent-native-toolkit.mdx +89 -80
  690. package/docs/content/locales/ja-JP/agent-native-toolkit.mdx +89 -80
  691. package/docs/content/locales/ko-KR/agent-native-toolkit.mdx +89 -80
  692. package/docs/content/locales/pt-BR/agent-native-toolkit.mdx +89 -80
  693. package/docs/content/locales/zh-CN/agent-native-toolkit.mdx +89 -80
  694. package/docs/content/locales/zh-TW/agent-native-toolkit.mdx +89 -80
  695. package/docs/content/toolkit-agent-ux.mdx +43 -0
  696. package/docs/content/toolkit-app-adapters.mdx +9 -0
  697. package/docs/content/toolkit-collaboration-ui.mdx +12 -0
  698. package/docs/content/toolkit-collaboration.mdx +74 -0
  699. package/docs/content/toolkit-command-navigation.mdx +106 -0
  700. package/docs/content/toolkit-comments-review.mdx +98 -0
  701. package/docs/content/toolkit-history.mdx +95 -0
  702. package/docs/content/toolkit-observability.mdx +41 -0
  703. package/docs/content/toolkit-org-team.mdx +80 -0
  704. package/docs/content/toolkit-resources.mdx +57 -0
  705. package/docs/content/toolkit-settings.mdx +65 -0
  706. package/docs/content/toolkit-setup-connections.mdx +109 -0
  707. package/docs/content/toolkit-sharing-ui.mdx +18 -6
  708. package/docs/content/toolkit-sharing.mdx +81 -0
  709. package/docs/content/toolkit-shell-hooks.mdx +9 -0
  710. package/docs/content/toolkit-ui.mdx +9 -0
  711. package/package.json +36 -2
  712. package/corpus/templates/design/app/components/design/inspector/InspectorAiActions.tsx +0 -153
  713. package/corpus/templates/design/app/hooks/useAgentEditRequest.ts +0 -133
  714. package/corpus/templates/design/app/pages/DesignEditor.tsx +0 -22924
@@ -22,14 +22,46 @@ import {
22
22
  } from "@/components/ui/context-menu";
23
23
  import { cn } from "@/lib/utils";
24
24
 
25
+ // LIVE-VERIFIED (real Figma, UI3) canvas context menus:
26
+ //
27
+ // WITH a selection:
28
+ // Copy ⌘C · Paste here · Paste to replace ⇧⌘R · Copy/Paste as ▸
29
+ // (Copy as code · Copy as SVG · Copy as PNG ⇧⌘C · [sep] ·
30
+ // Copy properties ⌥⌘C · Paste properties ⌥⌘V · [sep] ·
31
+ // Copy animation · Paste animation)
32
+ // [sep]
33
+ // Bring to front ] · Send to back [
34
+ // [sep]
35
+ // Group selection ⌘G · Frame selection ⌥⌘G
36
+ // [sep]
37
+ // Add auto layout ⇧A · Create component ⌥⌘K
38
+ // [sep]
39
+ // Show/Hide ⇧⌘H · Lock/Unlock ⇧⌘L
40
+ // [sep]
41
+ // Flip horizontal ⇧H · Flip vertical ⇧V
42
+ //
43
+ // EMPTY canvas (no selection):
44
+ // Paste here
45
+ // [sep]
46
+ // Show/Hide UI ⌘\ · Show/Hide comments ⇧C
47
+ //
48
+ // Real Figma has no Duplicate/Delete/Select-all/Zoom items on either canvas
49
+ // menu (all keyboard-only there) — those are intentionally NOT rendered here
50
+ // even though some callers may still pass the callback/capability props for
51
+ // back-compat. App-specific extras with no Figma equivalent (e.g. "Edit
52
+ // screen") are appended at the very bottom, below one more separator, so the
53
+ // Figma-muscle-memory zone above stays byte-identical to the real menu.
25
54
  export type CanvasContextMenuAction =
26
55
  | "paste-here"
27
56
  | "select-all"
28
57
  | "zoom-to-fit"
29
58
  | "zoom-to-selection"
59
+ | "zoom-in"
60
+ | "zoom-out"
30
61
  | "copy"
31
62
  | "paste"
32
63
  | "paste-over"
64
+ | "paste-to-replace"
33
65
  | "duplicate"
34
66
  | "delete"
35
67
  | "bring-forward"
@@ -38,12 +70,23 @@ export type CanvasContextMenuAction =
38
70
  | "send-to-back"
39
71
  | "group"
40
72
  | "ungroup"
73
+ | "frame-selection"
74
+ | "add-auto-layout"
75
+ | "create-component"
41
76
  | "rename"
42
77
  | "toggle-lock"
43
78
  | "toggle-hide"
44
79
  | "copy-props"
45
80
  | "paste-props"
46
- | "copy-as-code";
81
+ | "copy-animation"
82
+ | "paste-animation"
83
+ | "copy-as-code"
84
+ | "copy-as-svg"
85
+ | "copy-as-png"
86
+ | "flip-horizontal"
87
+ | "flip-vertical"
88
+ | "toggle-ui"
89
+ | "toggle-comments";
47
90
 
48
91
  export interface CanvasContextMenuPoint {
49
92
  clientX: number;
@@ -73,9 +116,12 @@ export interface CanvasContextMenuLabels {
73
116
  selectAll: string;
74
117
  zoomToFit: string;
75
118
  zoomToSelection: string;
119
+ zoomIn: string;
120
+ zoomOut: string;
76
121
  copy: string;
77
122
  paste: string;
78
123
  pasteOver: string;
124
+ pasteToReplace: string;
79
125
  duplicate: string;
80
126
  delete: string;
81
127
  order: string;
@@ -85,14 +131,28 @@ export interface CanvasContextMenuLabels {
85
131
  sendToBack: string;
86
132
  group: string;
87
133
  ungroup: string;
134
+ frameSelection: string;
135
+ addAutoLayout: string;
136
+ createComponent: string;
88
137
  rename: string;
89
138
  lock: string;
90
139
  unlock: string;
91
140
  hide: string;
92
141
  show: string;
142
+ copyAs: string;
93
143
  copyProps: string;
94
144
  pasteProps: string;
145
+ copyAnimation: string;
146
+ pasteAnimation: string;
95
147
  copyAsCode: string;
148
+ copyAsSvg: string;
149
+ copyAsPng: string;
150
+ flipHorizontal: string;
151
+ flipVertical: string;
152
+ toggleUiShow: string;
153
+ toggleUiHide: string;
154
+ toggleCommentsShow: string;
155
+ toggleCommentsHide: string;
96
156
  }
97
157
 
98
158
  export interface CanvasContextMenuShortcuts {
@@ -100,9 +160,12 @@ export interface CanvasContextMenuShortcuts {
100
160
  selectAll: string;
101
161
  zoomToFit: string;
102
162
  zoomToSelection: string;
163
+ zoomIn: string;
164
+ zoomOut: string;
103
165
  copy: string;
104
166
  paste: string;
105
167
  pasteOver: string;
168
+ pasteToReplace: string;
106
169
  duplicate: string;
107
170
  delete: string;
108
171
  bringForward: string;
@@ -111,10 +174,23 @@ export interface CanvasContextMenuShortcuts {
111
174
  sendToBack: string;
112
175
  group: string;
113
176
  ungroup: string;
177
+ frameSelection: string;
178
+ addAutoLayout: string;
179
+ createComponent: string;
114
180
  rename: string;
181
+ toggleLock: string;
182
+ toggleHide: string;
115
183
  copyProps: string;
116
184
  pasteProps: string;
185
+ copyAnimation: string;
186
+ pasteAnimation: string;
117
187
  copyAsCode: string;
188
+ copyAsSvg: string;
189
+ copyAsPng: string;
190
+ flipHorizontal: string;
191
+ flipVertical: string;
192
+ toggleUi: string;
193
+ toggleComments: string;
118
194
  }
119
195
 
120
196
  export interface CanvasContextMenuProps {
@@ -125,20 +201,33 @@ export interface CanvasContextMenuProps {
125
201
  selectedCount?: number;
126
202
  hasClipboard?: boolean;
127
203
  hasPropsClipboard?: boolean;
204
+ hasAnimationClipboard?: boolean;
128
205
  isLocked?: boolean;
129
206
  isHidden?: boolean;
207
+ isUiHidden?: boolean;
208
+ isCommentsHidden?: boolean;
130
209
  canPasteHere?: boolean;
210
+ // Kept for back-compat with existing callers; real Figma has no
211
+ // select-all/zoom items on this menu, so these no longer render anything.
131
212
  canSelectAll?: boolean;
132
213
  canZoomToFit?: boolean;
133
214
  canZoomToSelection?: boolean;
215
+ canZoomIn?: boolean;
216
+ canZoomOut?: boolean;
134
217
  canCopy?: boolean;
135
218
  canPaste?: boolean;
136
219
  canPasteOver?: boolean;
220
+ canPasteToReplace?: boolean;
221
+ // Kept for back-compat; real Figma has no Duplicate/Delete on this menu
222
+ // (keyboard-only there), so these no longer render anything.
137
223
  canDuplicate?: boolean;
138
224
  canDelete?: boolean;
139
225
  canReorder?: boolean;
140
226
  canGroup?: boolean;
141
227
  canUngroup?: boolean;
228
+ canFrameSelection?: boolean;
229
+ canAddAutoLayout?: boolean;
230
+ canCreateComponent?: boolean;
142
231
  // L12: this menu is target-agnostic — it has no built-in notion of "design
143
232
  // title" vs "layer". Rename is enabled by default for a single selection
144
233
  // (see the canRename default below) and fires through the onRename
@@ -146,12 +235,23 @@ export interface CanvasContextMenuProps {
146
235
  // "only rename the design title" restriction is a CALL-SITE decision (e.g.
147
236
  // passing canRename={false} and/or hiddenActions={["rename"]} when a layer
148
237
  // is selected instead of the design title) — it does not live here.
238
+ // NOTE: real Figma's canvas menu doesn't show Rename at all — only the
239
+ // layer-row menu does. Kept here (opt-in via a wired-up onRename) purely
240
+ // for existing callers; no default UI relies on it being shown.
149
241
  canRename?: boolean;
150
242
  canToggleLocked?: boolean;
151
243
  canToggleHidden?: boolean;
152
244
  canCopyProps?: boolean;
153
245
  canPasteProps?: boolean;
246
+ canCopyAnimation?: boolean;
247
+ canPasteAnimation?: boolean;
154
248
  canCopyAsCode?: boolean;
249
+ canCopyAsSvg?: boolean;
250
+ canCopyAsPng?: boolean;
251
+ canFlipHorizontal?: boolean;
252
+ canFlipVertical?: boolean;
253
+ canToggleUi?: boolean;
254
+ canToggleComments?: boolean;
155
255
  hiddenActions?: readonly CanvasContextMenuAction[];
156
256
  disabledActions?: readonly CanvasContextMenuAction[];
157
257
  labels?: Partial<CanvasContextMenuLabels>;
@@ -166,12 +266,17 @@ export interface CanvasContextMenuProps {
166
266
  details: CanvasContextMenuActionDetails,
167
267
  ) => void;
168
268
  onPasteHere?: CanvasContextMenuActionHandler;
269
+ // Kept for back-compat; no longer rendered (see canSelectAll/canZoomToFit).
169
270
  onSelectAll?: CanvasContextMenuActionHandler;
170
271
  onZoomToFit?: CanvasContextMenuActionHandler;
171
272
  onZoomToSelection?: CanvasContextMenuActionHandler;
273
+ onZoomIn?: CanvasContextMenuActionHandler;
274
+ onZoomOut?: CanvasContextMenuActionHandler;
172
275
  onCopy?: CanvasContextMenuActionHandler;
173
276
  onPaste?: CanvasContextMenuActionHandler;
174
277
  onPasteOver?: CanvasContextMenuActionHandler;
278
+ onPasteToReplace?: CanvasContextMenuActionHandler;
279
+ // Kept for back-compat; no longer rendered (see canDuplicate/canDelete).
175
280
  onDuplicate?: CanvasContextMenuActionHandler;
176
281
  onDelete?: CanvasContextMenuActionHandler;
177
282
  onBringForward?: CanvasContextMenuActionHandler;
@@ -180,6 +285,9 @@ export interface CanvasContextMenuProps {
180
285
  onSendToBack?: CanvasContextMenuActionHandler;
181
286
  onGroup?: CanvasContextMenuActionHandler;
182
287
  onUngroup?: CanvasContextMenuActionHandler;
288
+ onFrameSelection?: CanvasContextMenuActionHandler;
289
+ onAddAutoLayout?: CanvasContextMenuActionHandler;
290
+ onCreateComponent?: CanvasContextMenuActionHandler;
183
291
  // L12: fired when the Rename item is selected (details.selectedCount tells
184
292
  // the caller how many things are selected). The caller decides what
185
293
  // "rename" means for the current target — e.g. calling a LayersPanel
@@ -190,7 +298,20 @@ export interface CanvasContextMenuProps {
190
298
  onToggleHidden?: CanvasContextMenuActionHandler;
191
299
  onCopyProps?: CanvasContextMenuActionHandler;
192
300
  onPasteProps?: CanvasContextMenuActionHandler;
301
+ onCopyAnimation?: CanvasContextMenuActionHandler;
302
+ onPasteAnimation?: CanvasContextMenuActionHandler;
193
303
  onCopyAsCode?: CanvasContextMenuActionHandler;
304
+ onCopyAsSvg?: CanvasContextMenuActionHandler;
305
+ onCopyAsPng?: CanvasContextMenuActionHandler;
306
+ onFlipHorizontal?: CanvasContextMenuActionHandler;
307
+ onFlipVertical?: CanvasContextMenuActionHandler;
308
+ onToggleUi?: CanvasContextMenuActionHandler;
309
+ onToggleComments?: CanvasContextMenuActionHandler;
310
+ // App-specific items with no Figma equivalent (e.g. "Edit screen"). Render
311
+ // below a trailing separator, after the Figma-muscle-memory zone, only for
312
+ // the WITH-selection menu — matching the existing call site's need without
313
+ // polluting the empty-canvas menu.
314
+ appendedItems?: ReactNode;
194
315
  }
195
316
 
196
317
  const DEFAULT_LABELS: CanvasContextMenuLabels = {
@@ -198,9 +319,12 @@ const DEFAULT_LABELS: CanvasContextMenuLabels = {
198
319
  selectAll: "Select all",
199
320
  zoomToFit: "Zoom to fit",
200
321
  zoomToSelection: "Zoom to selection",
322
+ zoomIn: "Zoom in",
323
+ zoomOut: "Zoom out",
201
324
  copy: "Copy",
202
325
  paste: "Paste",
203
326
  pasteOver: "Paste over",
327
+ pasteToReplace: "Paste to replace",
204
328
  duplicate: "Duplicate",
205
329
  delete: "Delete",
206
330
  order: "Order",
@@ -208,16 +332,30 @@ const DEFAULT_LABELS: CanvasContextMenuLabels = {
208
332
  bringToFront: "Bring to front",
209
333
  sendBackward: "Send backward",
210
334
  sendToBack: "Send to back",
211
- group: "Group",
335
+ group: "Group selection",
212
336
  ungroup: "Ungroup",
337
+ frameSelection: "Frame selection",
338
+ addAutoLayout: "Add auto layout",
339
+ createComponent: "Create component",
213
340
  rename: "Rename",
214
341
  lock: "Lock",
215
342
  unlock: "Unlock",
216
343
  hide: "Hide",
217
344
  show: "Show",
345
+ copyAs: "Copy/Paste as",
218
346
  copyProps: "Copy properties",
219
347
  pasteProps: "Paste properties",
348
+ copyAnimation: "Copy animation",
349
+ pasteAnimation: "Paste animation",
220
350
  copyAsCode: "Copy as code",
351
+ copyAsSvg: "Copy as SVG",
352
+ copyAsPng: "Copy as PNG",
353
+ flipHorizontal: "Flip horizontal",
354
+ flipVertical: "Flip vertical",
355
+ toggleUiShow: "Show UI",
356
+ toggleUiHide: "Hide UI",
357
+ toggleCommentsShow: "Show comments",
358
+ toggleCommentsHide: "Hide comments",
221
359
  };
222
360
 
223
361
  const DEFAULT_SHORTCUTS: CanvasContextMenuShortcuts = {
@@ -225,21 +363,37 @@ const DEFAULT_SHORTCUTS: CanvasContextMenuShortcuts = {
225
363
  selectAll: "⌘A",
226
364
  zoomToFit: "⇧1",
227
365
  zoomToSelection: "⇧2",
366
+ zoomIn: "+",
367
+ zoomOut: "-",
228
368
  copy: "⌘C",
229
369
  paste: "⌘V",
230
370
  pasteOver: "⇧⌘V",
371
+ pasteToReplace: "⇧⌘R",
231
372
  duplicate: "⌘D",
232
373
  delete: "⌫",
233
374
  bringForward: "⌘]",
234
- bringToFront: "⌥⌘]",
375
+ bringToFront: "]",
235
376
  sendBackward: "⌘[",
236
- sendToBack: "⌥⌘[",
377
+ sendToBack: "[",
237
378
  group: "⌘G",
238
379
  ungroup: "⇧⌘G",
380
+ frameSelection: "⌥⌘G",
381
+ addAutoLayout: "⇧A",
382
+ createComponent: "⌥⌘K",
239
383
  rename: "⌘R",
384
+ toggleLock: "⇧⌘L",
385
+ toggleHide: "⇧⌘H",
240
386
  copyProps: "⌥⌘C",
241
387
  pasteProps: "⌥⌘V",
242
- copyAsCode: "⇧⌘C",
388
+ copyAnimation: "",
389
+ pasteAnimation: "",
390
+ copyAsCode: "",
391
+ copyAsSvg: "",
392
+ copyAsPng: "⇧⌘C",
393
+ flipHorizontal: "⇧H",
394
+ flipVertical: "⇧V",
395
+ toggleUi: "⌘\\",
396
+ toggleComments: "⇧C",
243
397
  };
244
398
 
245
399
  type ActionCallbackMap = Partial<
@@ -274,26 +428,36 @@ export const CanvasContextMenu = forwardRef<
274
428
  selectedCount = 0,
275
429
  hasClipboard = false,
276
430
  hasPropsClipboard = false,
431
+ hasAnimationClipboard = false,
277
432
  isLocked = false,
278
433
  isHidden = false,
434
+ isUiHidden = false,
435
+ isCommentsHidden = false,
279
436
  canPasteHere = hasClipboard,
280
- canSelectAll = true,
281
- canZoomToFit = true,
282
- canZoomToSelection = selectedCount > 0,
283
437
  canCopy = selectedCount > 0,
284
438
  canPaste = hasClipboard,
285
439
  canPasteOver = hasClipboard && selectedCount > 0,
286
- canDuplicate = selectedCount > 0,
287
- canDelete = selectedCount > 0,
440
+ canPasteToReplace = hasClipboard && selectedCount > 0,
288
441
  canReorder = selectedCount > 0,
289
442
  canGroup = selectedCount > 1,
290
443
  canUngroup = false,
444
+ canFrameSelection = selectedCount > 0,
445
+ canAddAutoLayout = selectedCount > 0,
446
+ canCreateComponent = selectedCount > 0,
291
447
  canRename = selectedCount === 1,
292
448
  canToggleLocked = selectedCount > 0,
293
449
  canToggleHidden = selectedCount > 0,
294
450
  canCopyProps = selectedCount > 0,
295
451
  canPasteProps = hasPropsClipboard && selectedCount > 0,
452
+ canCopyAnimation = selectedCount > 0,
453
+ canPasteAnimation = hasAnimationClipboard && selectedCount > 0,
296
454
  canCopyAsCode = selectedCount > 0,
455
+ canCopyAsSvg = selectedCount > 0,
456
+ canCopyAsPng = selectedCount > 0,
457
+ canFlipHorizontal = selectedCount > 0,
458
+ canFlipVertical = selectedCount > 0,
459
+ canToggleUi = true,
460
+ canToggleComments = true,
297
461
  hiddenActions = [],
298
462
  disabledActions = [],
299
463
  labels: labelsProp,
@@ -302,26 +466,34 @@ export const CanvasContextMenu = forwardRef<
302
466
  onOpenChange,
303
467
  onAction,
304
468
  onPasteHere,
305
- onSelectAll,
306
- onZoomToFit,
307
- onZoomToSelection,
308
469
  onCopy,
309
470
  onPaste,
310
471
  onPasteOver,
311
- onDuplicate,
312
- onDelete,
472
+ onPasteToReplace,
313
473
  onBringForward,
314
474
  onBringToFront,
315
475
  onSendBackward,
316
476
  onSendToBack,
317
477
  onGroup,
318
478
  onUngroup,
479
+ onFrameSelection,
480
+ onAddAutoLayout,
481
+ onCreateComponent,
319
482
  onRename,
320
483
  onToggleLocked,
321
484
  onToggleHidden,
322
485
  onCopyProps,
323
486
  onPasteProps,
487
+ onCopyAnimation,
488
+ onPasteAnimation,
324
489
  onCopyAsCode,
490
+ onCopyAsSvg,
491
+ onCopyAsPng,
492
+ onFlipHorizontal,
493
+ onFlipVertical,
494
+ onToggleUi,
495
+ onToggleComments,
496
+ appendedItems,
325
497
  },
326
498
  ref,
327
499
  ) {
@@ -374,49 +546,63 @@ export const CanvasContextMenu = forwardRef<
374
546
  const callbacks = useMemo<ActionCallbackMap>(
375
547
  () => ({
376
548
  "paste-here": onPasteHere,
377
- "select-all": onSelectAll,
378
- "zoom-to-fit": onZoomToFit,
379
- "zoom-to-selection": onZoomToSelection,
380
549
  copy: onCopy,
381
550
  paste: onPaste,
382
551
  "paste-over": onPasteOver,
383
- duplicate: onDuplicate,
384
- delete: onDelete,
552
+ "paste-to-replace": onPasteToReplace,
385
553
  "bring-forward": onBringForward,
386
554
  "bring-to-front": onBringToFront,
387
555
  "send-backward": onSendBackward,
388
556
  "send-to-back": onSendToBack,
389
557
  group: onGroup,
390
558
  ungroup: onUngroup,
559
+ "frame-selection": onFrameSelection,
560
+ "add-auto-layout": onAddAutoLayout,
561
+ "create-component": onCreateComponent,
391
562
  rename: onRename,
392
563
  "toggle-lock": onToggleLocked,
393
564
  "toggle-hide": onToggleHidden,
394
565
  "copy-props": onCopyProps,
395
566
  "paste-props": onPasteProps,
567
+ "copy-animation": onCopyAnimation,
568
+ "paste-animation": onPasteAnimation,
396
569
  "copy-as-code": onCopyAsCode,
570
+ "copy-as-svg": onCopyAsSvg,
571
+ "copy-as-png": onCopyAsPng,
572
+ "flip-horizontal": onFlipHorizontal,
573
+ "flip-vertical": onFlipVertical,
574
+ "toggle-ui": onToggleUi,
575
+ "toggle-comments": onToggleComments,
397
576
  }),
398
577
  [
578
+ onAddAutoLayout,
399
579
  onBringForward,
400
580
  onBringToFront,
401
581
  onCopy,
582
+ onCopyAnimation,
402
583
  onCopyAsCode,
584
+ onCopyAsPng,
585
+ onCopyAsSvg,
403
586
  onCopyProps,
404
- onDelete,
405
- onDuplicate,
587
+ onCreateComponent,
588
+ onFlipHorizontal,
589
+ onFlipVertical,
590
+ onFrameSelection,
406
591
  onGroup,
407
592
  onPaste,
593
+ onPasteAnimation,
408
594
  onPasteHere,
409
595
  onPasteOver,
410
596
  onPasteProps,
597
+ onPasteToReplace,
411
598
  onRename,
412
- onSelectAll,
413
599
  onSendBackward,
414
600
  onSendToBack,
601
+ onToggleComments,
415
602
  onToggleHidden,
416
603
  onToggleLocked,
604
+ onToggleUi,
417
605
  onUngroup,
418
- onZoomToFit,
419
- onZoomToSelection,
420
606
  ],
421
607
  );
422
608
 
@@ -461,6 +647,8 @@ export const CanvasContextMenu = forwardRef<
461
647
  } satisfies CSSProperties)
462
648
  : undefined;
463
649
 
650
+ const hasSelection = selectedCount > 0;
651
+
464
652
  return (
465
653
  <ContextMenu open={open} onOpenChange={handleOpenChange}>
466
654
  <ContextMenuTrigger asChild>
@@ -486,204 +674,263 @@ export const CanvasContextMenu = forwardRef<
486
674
  className={cn(MENU_CONTENT_CLASS, contentClassName)}
487
675
  style={manualContentStyle}
488
676
  >
489
- <ContextMenuGroup>
490
- <CanvasMenuItem
491
- hidden={isHiddenAction("paste-here")}
492
- disabled={!canRun("paste-here", canPasteHere)}
493
- label={labels.pasteHere}
494
- shortcut={shortcuts.pasteHere}
495
- onSelect={(event) => runAction("paste-here", event)}
496
- />
497
- <CanvasMenuItem
498
- hidden={isHiddenAction("select-all")}
499
- disabled={!canRun("select-all", canSelectAll)}
500
- label={labels.selectAll}
501
- shortcut={shortcuts.selectAll}
502
- onSelect={(event) => runAction("select-all", event)}
503
- />
504
- </ContextMenuGroup>
505
-
506
- <CanvasMenuSeparator />
507
-
508
- <ContextMenuGroup>
509
- <CanvasMenuItem
510
- hidden={isHiddenAction("zoom-to-fit")}
511
- disabled={!canRun("zoom-to-fit", canZoomToFit)}
512
- label={labels.zoomToFit}
513
- shortcut={shortcuts.zoomToFit}
514
- onSelect={(event) => runAction("zoom-to-fit", event)}
515
- />
516
- <CanvasMenuItem
517
- hidden={isHiddenAction("zoom-to-selection")}
518
- disabled={!canRun("zoom-to-selection", canZoomToSelection)}
519
- label={labels.zoomToSelection}
520
- shortcut={shortcuts.zoomToSelection}
521
- onSelect={(event) => runAction("zoom-to-selection", event)}
522
- />
523
- </ContextMenuGroup>
524
-
525
- <CanvasMenuSeparator />
526
-
527
- <ContextMenuGroup>
528
- <CanvasMenuItem
529
- hidden={isHiddenAction("copy")}
530
- disabled={!canRun("copy", canCopy)}
531
- label={labels.copy}
532
- shortcut={shortcuts.copy}
533
- onSelect={(event) => runAction("copy", event)}
534
- />
535
- <CanvasMenuItem
536
- hidden={isHiddenAction("paste")}
537
- disabled={!canRun("paste", canPaste)}
538
- label={labels.paste}
539
- shortcut={shortcuts.paste}
540
- onSelect={(event) => runAction("paste", event)}
541
- />
542
- <CanvasMenuItem
543
- hidden={isHiddenAction("paste-over")}
544
- disabled={!canRun("paste-over", canPasteOver)}
545
- label={labels.pasteOver}
546
- shortcut={shortcuts.pasteOver}
547
- onSelect={(event) => runAction("paste-over", event)}
548
- />
549
- <CanvasMenuItem
550
- hidden={isHiddenAction("duplicate")}
551
- disabled={!canRun("duplicate", canDuplicate)}
552
- label={labels.duplicate}
553
- shortcut={shortcuts.duplicate}
554
- onSelect={(event) => runAction("duplicate", event)}
555
- />
556
- </ContextMenuGroup>
557
-
558
- <CanvasMenuSeparator />
559
-
560
- <ContextMenuGroup>
561
- {!isHiddenAction("bring-forward") ||
562
- !isHiddenAction("bring-to-front") ||
563
- !isHiddenAction("send-backward") ||
564
- !isHiddenAction("send-to-back") ? (
565
- <ContextMenuSub>
566
- <ContextMenuSubTrigger
567
- disabled={
568
- !(
569
- canRun("bring-forward", canReorder) ||
570
- canRun("bring-to-front", canReorder) ||
571
- canRun("send-backward", canReorder) ||
572
- canRun("send-to-back", canReorder)
573
- )
677
+ {hasSelection ? (
678
+ <>
679
+ {/* LIVE-VERIFIED Figma "with selection" canvas menu. */}
680
+ <ContextMenuGroup>
681
+ <CanvasMenuItem
682
+ hidden={isHiddenAction("copy")}
683
+ disabled={!canRun("copy", canCopy)}
684
+ label={labels.copy}
685
+ shortcut={shortcuts.copy}
686
+ onSelect={(event) => runAction("copy", event)}
687
+ />
688
+ <CanvasMenuItem
689
+ hidden={isHiddenAction("paste-here")}
690
+ disabled={!canRun("paste-here", canPasteHere)}
691
+ label={labels.pasteHere}
692
+ shortcut={shortcuts.pasteHere}
693
+ onSelect={(event) => runAction("paste-here", event)}
694
+ />
695
+ <CanvasMenuItem
696
+ hidden={isHiddenAction("paste-to-replace")}
697
+ disabled={!canRun("paste-to-replace", canPasteToReplace)}
698
+ label={labels.pasteToReplace}
699
+ shortcut={shortcuts.pasteToReplace}
700
+ onSelect={(event) => runAction("paste-to-replace", event)}
701
+ />
702
+ {!isHiddenAction("copy-as-code") ||
703
+ !isHiddenAction("copy-as-svg") ||
704
+ !isHiddenAction("copy-as-png") ||
705
+ !isHiddenAction("copy-props") ||
706
+ !isHiddenAction("paste-props") ||
707
+ !isHiddenAction("copy-animation") ||
708
+ !isHiddenAction("paste-animation") ? (
709
+ <ContextMenuSub>
710
+ <ContextMenuSubTrigger
711
+ disabled={
712
+ !(
713
+ canRun("copy-as-code", canCopyAsCode) ||
714
+ canRun("copy-as-svg", canCopyAsSvg) ||
715
+ canRun("copy-as-png", canCopyAsPng) ||
716
+ canRun("copy-props", canCopyProps) ||
717
+ canRun("paste-props", canPasteProps) ||
718
+ canRun("copy-animation", canCopyAnimation) ||
719
+ canRun("paste-animation", canPasteAnimation)
720
+ )
721
+ }
722
+ className={MENU_SUB_TRIGGER_CLASS}
723
+ >
724
+ {labels.copyAs}
725
+ </ContextMenuSubTrigger>
726
+ <ContextMenuSubContent
727
+ className={cn(MENU_CONTENT_CLASS, "w-52")}
728
+ >
729
+ <CanvasMenuItem
730
+ hidden={isHiddenAction("copy-as-code")}
731
+ disabled={!canRun("copy-as-code", canCopyAsCode)}
732
+ label={labels.copyAsCode}
733
+ shortcut={shortcuts.copyAsCode}
734
+ onSelect={(event) => runAction("copy-as-code", event)}
735
+ />
736
+ <CanvasMenuItem
737
+ hidden={isHiddenAction("copy-as-svg")}
738
+ disabled={!canRun("copy-as-svg", canCopyAsSvg)}
739
+ label={labels.copyAsSvg}
740
+ shortcut={shortcuts.copyAsSvg}
741
+ onSelect={(event) => runAction("copy-as-svg", event)}
742
+ />
743
+ <CanvasMenuItem
744
+ hidden={isHiddenAction("copy-as-png")}
745
+ disabled={!canRun("copy-as-png", canCopyAsPng)}
746
+ label={labels.copyAsPng}
747
+ shortcut={shortcuts.copyAsPng}
748
+ onSelect={(event) => runAction("copy-as-png", event)}
749
+ />
750
+ <CanvasMenuSeparator />
751
+ <CanvasMenuItem
752
+ hidden={isHiddenAction("copy-props")}
753
+ disabled={!canRun("copy-props", canCopyProps)}
754
+ label={labels.copyProps}
755
+ shortcut={shortcuts.copyProps}
756
+ onSelect={(event) => runAction("copy-props", event)}
757
+ />
758
+ <CanvasMenuItem
759
+ hidden={isHiddenAction("paste-props")}
760
+ disabled={!canRun("paste-props", canPasteProps)}
761
+ label={labels.pasteProps}
762
+ shortcut={shortcuts.pasteProps}
763
+ onSelect={(event) => runAction("paste-props", event)}
764
+ />
765
+ <CanvasMenuSeparator />
766
+ <CanvasMenuItem
767
+ hidden={isHiddenAction("copy-animation")}
768
+ disabled={!canRun("copy-animation", canCopyAnimation)}
769
+ label={labels.copyAnimation}
770
+ shortcut={shortcuts.copyAnimation}
771
+ onSelect={(event) => runAction("copy-animation", event)}
772
+ />
773
+ <CanvasMenuItem
774
+ hidden={isHiddenAction("paste-animation")}
775
+ disabled={!canRun("paste-animation", canPasteAnimation)}
776
+ label={labels.pasteAnimation}
777
+ shortcut={shortcuts.pasteAnimation}
778
+ onSelect={(event) => runAction("paste-animation", event)}
779
+ />
780
+ </ContextMenuSubContent>
781
+ </ContextMenuSub>
782
+ ) : null}
783
+ </ContextMenuGroup>
784
+
785
+ <CanvasMenuSeparator />
786
+
787
+ <ContextMenuGroup>
788
+ <CanvasMenuItem
789
+ hidden={isHiddenAction("bring-to-front")}
790
+ disabled={!canRun("bring-to-front", canReorder)}
791
+ label={labels.bringToFront}
792
+ shortcut={shortcuts.bringToFront}
793
+ onSelect={(event) => runAction("bring-to-front", event)}
794
+ />
795
+ <CanvasMenuItem
796
+ hidden={isHiddenAction("send-to-back")}
797
+ disabled={!canRun("send-to-back", canReorder)}
798
+ label={labels.sendToBack}
799
+ shortcut={shortcuts.sendToBack}
800
+ onSelect={(event) => runAction("send-to-back", event)}
801
+ />
802
+ </ContextMenuGroup>
803
+
804
+ <CanvasMenuSeparator />
805
+
806
+ <ContextMenuGroup>
807
+ <CanvasMenuItem
808
+ hidden={isHiddenAction("group")}
809
+ disabled={!canRun("group", canGroup)}
810
+ label={labels.group}
811
+ shortcut={shortcuts.group}
812
+ onSelect={(event) => runAction("group", event)}
813
+ />
814
+ <CanvasMenuItem
815
+ hidden={isHiddenAction("frame-selection")}
816
+ disabled={!canRun("frame-selection", canFrameSelection)}
817
+ label={labels.frameSelection}
818
+ shortcut={shortcuts.frameSelection}
819
+ onSelect={(event) => runAction("frame-selection", event)}
820
+ />
821
+ </ContextMenuGroup>
822
+
823
+ <CanvasMenuSeparator />
824
+
825
+ <ContextMenuGroup>
826
+ <CanvasMenuItem
827
+ hidden={isHiddenAction("add-auto-layout")}
828
+ disabled={!canRun("add-auto-layout", canAddAutoLayout)}
829
+ label={labels.addAutoLayout}
830
+ shortcut={shortcuts.addAutoLayout}
831
+ onSelect={(event) => runAction("add-auto-layout", event)}
832
+ />
833
+ <CanvasMenuItem
834
+ hidden={isHiddenAction("create-component")}
835
+ disabled={!canRun("create-component", canCreateComponent)}
836
+ label={labels.createComponent}
837
+ shortcut={shortcuts.createComponent}
838
+ onSelect={(event) => runAction("create-component", event)}
839
+ />
840
+ </ContextMenuGroup>
841
+
842
+ <CanvasMenuSeparator />
843
+
844
+ <ContextMenuGroup>
845
+ <CanvasMenuItem
846
+ hidden={isHiddenAction("toggle-hide")}
847
+ disabled={!canRun("toggle-hide", canToggleHidden)}
848
+ label={isHidden ? labels.show : labels.hide}
849
+ shortcut={shortcuts.toggleHide}
850
+ onSelect={(event) => runAction("toggle-hide", event)}
851
+ />
852
+ <CanvasMenuItem
853
+ hidden={isHiddenAction("toggle-lock")}
854
+ disabled={!canRun("toggle-lock", canToggleLocked)}
855
+ label={isLocked ? labels.unlock : labels.lock}
856
+ shortcut={shortcuts.toggleLock}
857
+ onSelect={(event) => runAction("toggle-lock", event)}
858
+ />
859
+ </ContextMenuGroup>
860
+
861
+ <CanvasMenuSeparator />
862
+
863
+ <ContextMenuGroup>
864
+ <CanvasMenuItem
865
+ hidden={isHiddenAction("flip-horizontal")}
866
+ disabled={!canRun("flip-horizontal", canFlipHorizontal)}
867
+ label={labels.flipHorizontal}
868
+ shortcut={shortcuts.flipHorizontal}
869
+ onSelect={(event) => runAction("flip-horizontal", event)}
870
+ />
871
+ <CanvasMenuItem
872
+ hidden={isHiddenAction("flip-vertical")}
873
+ disabled={!canRun("flip-vertical", canFlipVertical)}
874
+ label={labels.flipVertical}
875
+ shortcut={shortcuts.flipVertical}
876
+ onSelect={(event) => runAction("flip-vertical", event)}
877
+ />
878
+ </ContextMenuGroup>
879
+
880
+ {appendedItems ? (
881
+ <>
882
+ <CanvasMenuSeparator />
883
+ {appendedItems}
884
+ </>
885
+ ) : null}
886
+ </>
887
+ ) : (
888
+ <>
889
+ {/* LIVE-VERIFIED Figma "empty canvas" (no selection) menu — just
890
+ Paste here, then Show/Hide UI and Show/Hide comments. No
891
+ zoom/select-all items (real Figma's UI3 empty menu has
892
+ none). */}
893
+ <ContextMenuGroup>
894
+ <CanvasMenuItem
895
+ hidden={isHiddenAction("paste-here")}
896
+ disabled={!canRun("paste-here", canPasteHere)}
897
+ label={labels.pasteHere}
898
+ shortcut={shortcuts.pasteHere}
899
+ onSelect={(event) => runAction("paste-here", event)}
900
+ />
901
+ </ContextMenuGroup>
902
+
903
+ <CanvasMenuSeparator />
904
+
905
+ <ContextMenuGroup>
906
+ <CanvasMenuItem
907
+ hidden={isHiddenAction("toggle-ui")}
908
+ disabled={!canRun("toggle-ui", canToggleUi)}
909
+ label={isUiHidden ? labels.toggleUiShow : labels.toggleUiHide}
910
+ shortcut={shortcuts.toggleUi}
911
+ onSelect={(event) => runAction("toggle-ui", event)}
912
+ />
913
+ <CanvasMenuItem
914
+ hidden={isHiddenAction("toggle-comments")}
915
+ disabled={!canRun("toggle-comments", canToggleComments)}
916
+ label={
917
+ isCommentsHidden
918
+ ? labels.toggleCommentsShow
919
+ : labels.toggleCommentsHide
574
920
  }
575
- className={MENU_SUB_TRIGGER_CLASS}
576
- >
577
- {labels.order}
578
- </ContextMenuSubTrigger>
579
- <ContextMenuSubContent className={cn(MENU_CONTENT_CLASS, "w-52")}>
580
- <CanvasMenuItem
581
- hidden={isHiddenAction("bring-forward")}
582
- disabled={!canRun("bring-forward", canReorder)}
583
- label={labels.bringForward}
584
- shortcut={shortcuts.bringForward}
585
- onSelect={(event) => runAction("bring-forward", event)}
586
- />
587
- <CanvasMenuItem
588
- hidden={isHiddenAction("bring-to-front")}
589
- disabled={!canRun("bring-to-front", canReorder)}
590
- label={labels.bringToFront}
591
- shortcut={shortcuts.bringToFront}
592
- onSelect={(event) => runAction("bring-to-front", event)}
593
- />
594
- <CanvasMenuItem
595
- hidden={isHiddenAction("send-backward")}
596
- disabled={!canRun("send-backward", canReorder)}
597
- label={labels.sendBackward}
598
- shortcut={shortcuts.sendBackward}
599
- onSelect={(event) => runAction("send-backward", event)}
600
- />
601
- <CanvasMenuItem
602
- hidden={isHiddenAction("send-to-back")}
603
- disabled={!canRun("send-to-back", canReorder)}
604
- label={labels.sendToBack}
605
- shortcut={shortcuts.sendToBack}
606
- onSelect={(event) => runAction("send-to-back", event)}
607
- />
608
- </ContextMenuSubContent>
609
- </ContextMenuSub>
610
- ) : null}
611
- <CanvasMenuItem
612
- hidden={isHiddenAction("group")}
613
- disabled={!canRun("group", canGroup)}
614
- label={labels.group}
615
- shortcut={shortcuts.group}
616
- onSelect={(event) => runAction("group", event)}
617
- />
618
- <CanvasMenuItem
619
- hidden={isHiddenAction("ungroup")}
620
- disabled={!canRun("ungroup", canUngroup)}
621
- label={labels.ungroup}
622
- shortcut={shortcuts.ungroup}
623
- onSelect={(event) => runAction("ungroup", event)}
624
- />
625
- </ContextMenuGroup>
626
-
627
- <CanvasMenuSeparator />
628
-
629
- <ContextMenuGroup>
630
- <CanvasMenuItem
631
- hidden={isHiddenAction("rename")}
632
- disabled={!canRun("rename", canRename)}
633
- label={labels.rename}
634
- shortcut={shortcuts.rename}
635
- onSelect={(event) => runAction("rename", event)}
636
- />
637
- <CanvasMenuItem
638
- hidden={isHiddenAction("toggle-lock")}
639
- disabled={!canRun("toggle-lock", canToggleLocked)}
640
- label={isLocked ? labels.unlock : labels.lock}
641
- onSelect={(event) => runAction("toggle-lock", event)}
642
- />
643
- <CanvasMenuItem
644
- hidden={isHiddenAction("toggle-hide")}
645
- disabled={!canRun("toggle-hide", canToggleHidden)}
646
- label={isHidden ? labels.show : labels.hide}
647
- onSelect={(event) => runAction("toggle-hide", event)}
648
- />
649
- </ContextMenuGroup>
650
-
651
- <CanvasMenuSeparator />
652
-
653
- <ContextMenuGroup>
654
- <CanvasMenuItem
655
- hidden={isHiddenAction("copy-props")}
656
- disabled={!canRun("copy-props", canCopyProps)}
657
- label={labels.copyProps}
658
- shortcut={shortcuts.copyProps}
659
- onSelect={(event) => runAction("copy-props", event)}
660
- />
661
- <CanvasMenuItem
662
- hidden={isHiddenAction("paste-props")}
663
- disabled={!canRun("paste-props", canPasteProps)}
664
- label={labels.pasteProps}
665
- shortcut={shortcuts.pasteProps}
666
- onSelect={(event) => runAction("paste-props", event)}
667
- />
668
- <CanvasMenuItem
669
- hidden={isHiddenAction("copy-as-code")}
670
- disabled={!canRun("copy-as-code", canCopyAsCode)}
671
- label={labels.copyAsCode}
672
- shortcut={shortcuts.copyAsCode}
673
- onSelect={(event) => runAction("copy-as-code", event)}
674
- />
675
- </ContextMenuGroup>
676
-
677
- <CanvasMenuSeparator />
678
-
679
- <CanvasMenuItem
680
- hidden={isHiddenAction("delete")}
681
- disabled={!canRun("delete", canDelete)}
682
- label={labels.delete}
683
- shortcut={shortcuts.delete}
684
- destructive
685
- onSelect={(event) => runAction("delete", event)}
686
- />
921
+ shortcut={shortcuts.toggleComments}
922
+ onSelect={(event) => runAction("toggle-comments", event)}
923
+ />
924
+ </ContextMenuGroup>
925
+
926
+ {appendedItems ? (
927
+ <>
928
+ <CanvasMenuSeparator />
929
+ {appendedItems}
930
+ </>
931
+ ) : null}
932
+ </>
933
+ )}
687
934
  </ContextMenuContent>
688
935
  </ContextMenu>
689
936
  );