@agent-native/core 0.92.9 → 0.92.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +29 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/agent/production-agent.ts +181 -15
- package/corpus/core/src/agent/run-manager.ts +31 -4
- package/corpus/core/src/agent/run-store.ts +80 -0
- package/corpus/core/src/cli/design-connect.ts +433 -151
- package/corpus/core/src/cli/skills.ts +14 -0
- package/corpus/core/src/client/AssistantChat.tsx +25 -0
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +40 -6
- package/corpus/core/src/client/agent-chat.ts +165 -1
- package/corpus/core/src/client/chat/index.ts +9 -1
- package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +38 -2
- package/corpus/core/src/client/index.ts +5 -0
- package/corpus/core/src/client/rich-markdown-editor/useCollabReconcile.ts +18 -7
- package/corpus/core/src/collab/awareness-store.ts +23 -12
- package/corpus/core/src/collab/client.ts +16 -5
- package/corpus/core/src/collab/index.ts +4 -0
- package/corpus/core/src/collab/recent-edits.ts +65 -2
- package/corpus/core/src/deploy/build.ts +133 -5
- package/corpus/core/src/index.browser.ts +1 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +98 -11
- package/corpus/core/src/server/builder-design-systems.ts +30 -4
- package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +1 -1
- package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +12 -6
- package/corpus/templates/clips/AGENTS.md +4 -0
- package/corpus/templates/clips/actions/create-recording.ts +2 -0
- package/corpus/templates/clips/actions/lib/create-recording-schema.ts +5 -3
- package/corpus/templates/clips/actions/request-transcript.ts +102 -33
- package/corpus/templates/clips/app/components/library/library-grid.tsx +1 -0
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +59 -19
- package/corpus/templates/clips/app/components/player/transcript-panel.tsx +48 -4
- package/corpus/templates/clips/app/components/player/video-player.tsx +17 -12
- package/corpus/templates/clips/app/i18n/ar-SA.ts +1 -0
- package/corpus/templates/clips/app/i18n/de-DE.ts +1 -0
- package/corpus/templates/clips/app/i18n/en-US.ts +1 -0
- package/corpus/templates/clips/app/i18n/es-ES.ts +1 -0
- package/corpus/templates/clips/app/i18n/fr-FR.ts +1 -0
- package/corpus/templates/clips/app/i18n/hi-IN.ts +1 -0
- package/corpus/templates/clips/app/i18n/ja-JP.ts +1 -0
- package/corpus/templates/clips/app/i18n/ko-KR.ts +1 -0
- package/corpus/templates/clips/app/i18n/pt-BR.ts +1 -0
- package/corpus/templates/clips/app/i18n/zh-CN.ts +1 -0
- package/corpus/templates/clips/app/i18n/zh-TW.ts +1 -0
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +70 -37
- package/corpus/templates/clips/app/routes/record.tsx +17 -4
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +2 -0
- package/corpus/templates/clips/changelog/2026-07-09-desktop-popover-sits-closer-to-the-menu-bar.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-desktop-recording-optimization-progress-stays-visible-until-the-clip-opens.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-fixed-large-video-file-uploads-failing-before-their-resumabl.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-fixed-new-video-uploads-defaulting-to-private.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-long-recordings-now-get-enough-time-to-download-their-media-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-meeting-notes-no-longer-lowers-your-microphone-volume-for-ot.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-on-mobile-tapping-a-playing-clip-reveals-playback-controls-w.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-regenerate-any-clip-transcript-from-its-saved-recording-or-r.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-09-slack-previews-now-show-the-clip-length-alongside-its-descri.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +12 -2
- package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +8 -1
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +8 -5
- package/corpus/templates/clips/desktop/src/lib/transcription-engine.ts +5 -5
- package/corpus/templates/clips/desktop/src/lib/voice-dictation.ts +3 -0
- package/corpus/templates/clips/desktop/src/styles.css +6 -3
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +29 -11
- package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +1 -1
- package/corpus/templates/clips/desktop/src-tauri/src/system_audio.rs +103 -21
- package/corpus/templates/clips/desktop/src-tauri/src/whisper_speech.rs +117 -39
- package/corpus/templates/clips/server/lib/slack-unfurls.ts +20 -1
- package/corpus/templates/clips/server/lib/streaming-upload-mode.ts +10 -4
- package/corpus/templates/clips/shared/recording-core.ts +12 -0
- package/corpus/templates/content/AGENTS.md +7 -6
- package/corpus/templates/content/actions/_document-flush.ts +132 -17
- package/corpus/templates/content/actions/_notion-action-utils.ts +15 -0
- package/corpus/templates/content/actions/create-and-link-notion-page.ts +2 -0
- package/corpus/templates/content/actions/link-notion-page.ts +2 -0
- package/corpus/templates/content/actions/pull-document.ts +5 -7
- package/corpus/templates/content/actions/pull-notion-page.ts +2 -0
- package/corpus/templates/content/actions/push-notion-page.ts +10 -0
- package/corpus/templates/content/actions/resolve-notion-sync-conflict.ts +2 -0
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +88 -23
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +32 -2
- package/corpus/templates/content/app/hooks/use-notion.ts +6 -6
- package/corpus/templates/content/app/i18n/zh-TW.ts +1 -0
- package/corpus/templates/content/app/i18n-data.ts +18 -0
- package/corpus/templates/content/changelog/2026-07-09-notion-conflict-choices-and-version-restores-preserve-docume.md +6 -0
- package/corpus/templates/content/server/lib/notion-sync.ts +80 -64
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +29 -2
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +86 -0
- package/corpus/templates/design/.agents/skills/export-handoff/SKILL.md +57 -0
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +11 -0
- package/corpus/templates/design/AGENTS.md +45 -10
- package/corpus/templates/design/actions/add-localhost-screens.ts +66 -13
- package/corpus/templates/design/actions/apply-component-prop-edit.ts +45 -36
- package/corpus/templates/design/actions/apply-motion-edit.ts +25 -31
- package/corpus/templates/design/actions/apply-shader-fill.ts +29 -42
- package/corpus/templates/design/actions/detach-component-instance.ts +337 -0
- package/corpus/templates/design/actions/export-design-as-figma-svg.ts +219 -0
- package/corpus/templates/design/actions/generate-design.ts +79 -12
- package/corpus/templates/design/actions/generate-screens.ts +57 -12
- package/corpus/templates/design/actions/get-figma-styles.ts +115 -0
- package/corpus/templates/design/actions/go-to-main-component.ts +254 -0
- package/corpus/templates/design/actions/grant-localhost-write-consent.ts +4 -3
- package/corpus/templates/design/actions/import-design-source.ts +4 -31
- package/corpus/templates/design/actions/import-figma-clipboard.ts +134 -0
- package/corpus/templates/design/actions/import-figma-frame.ts +95 -0
- package/corpus/templates/design/actions/index-design-system-with-builder.ts +16 -1
- package/corpus/templates/design/actions/list-design-components.ts +104 -0
- package/corpus/templates/design/actions/list-figma-library-assets.ts +1 -24
- package/corpus/templates/design/actions/open-component-source.ts +2 -4
- package/corpus/templates/design/actions/present-design-variants.ts +412 -16
- package/corpus/templates/design/actions/preview-source-edit.ts +14 -1
- package/corpus/templates/design/actions/run-design-audit.ts +25 -3
- package/corpus/templates/design/actions/show-design-questions.ts +10 -0
- package/corpus/templates/design/actions/swap-component-instance.ts +544 -0
- package/corpus/templates/design/actions/take-design-screenshot.ts +45 -60
- package/corpus/templates/design/actions/write-local-file.ts +25 -1
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +152 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +1077 -58
- package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +5 -5
- package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +73 -21
- package/corpus/templates/design/app/components/design/EditPanel.tsx +16 -11
- package/corpus/templates/design/app/components/design/KeyboardShortcutsPanel.tsx +364 -0
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +180 -53
- package/corpus/templates/design/app/components/design/LocalhostWriteConsentDialog.tsx +0 -2
- package/corpus/templates/design/app/components/design/MotionDock.tsx +144 -21
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +1152 -167
- package/corpus/templates/design/app/components/design/QuestionFlow.tsx +27 -5
- package/corpus/templates/design/app/components/design/ReviewPanel.tsx +23 -2
- package/corpus/templates/design/app/components/design/TokensPanel.tsx +63 -49
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +1293 -54
- package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +7 -0
- package/corpus/templates/design/app/components/design/bridge/hit-test.bridge.ts +6 -1
- package/corpus/templates/design/app/components/design/bridge/motion-preview.bridge.ts +23 -6
- package/corpus/templates/design/app/components/design/bridge/sample.bridge.ts +7 -0
- package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbench.tsx +5 -0
- package/corpus/templates/design/app/components/design/code-workbench/editor/MonacoHost.tsx +14 -2
- package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +37 -2
- package/corpus/templates/design/app/components/design/code-workbench/format/format-on-open-guard.ts +25 -0
- package/corpus/templates/design/app/components/design/code-workbench/format/format-on-open.ts +19 -1
- package/corpus/templates/design/app/components/design/code-workbench/model-registry.ts +43 -5
- package/corpus/templates/design/app/components/design/code-workbench/search/SearchView.tsx +27 -2
- package/corpus/templates/design/app/components/design/code-workbench/search/search-engine.ts +10 -1
- package/corpus/templates/design/app/components/design/code-workbench/store.tsx +19 -2
- package/corpus/templates/design/app/components/design/design-canvas/annotation-snapshot.ts +265 -0
- package/corpus/templates/design/app/components/design/design-canvas/annotation-submit.ts +16 -5
- package/corpus/templates/design/app/components/design/design-canvas/coordinate-transforms.ts +16 -2
- package/corpus/templates/design/app/components/design/design-canvas/embedded-frame.ts +7 -2
- package/corpus/templates/design/app/components/design/design-canvas/iframe-events.ts +3 -1
- package/corpus/templates/design/app/components/design/edit-panel/code-inspect-helpers.tsx +78 -8
- package/corpus/templates/design/app/components/design/edit-panel/component-section.tsx +451 -73
- package/corpus/templates/design/app/components/design/edit-panel/document-colors.ts +12 -4
- package/corpus/templates/design/app/components/design/edit-panel/effects-properties.tsx +398 -272
- package/corpus/templates/design/app/components/design/edit-panel/element-classification.ts +41 -7
- package/corpus/templates/design/app/components/design/edit-panel/element-identity.ts +16 -3
- package/corpus/templates/design/app/components/design/edit-panel/field-primitives.tsx +24 -4
- package/corpus/templates/design/app/components/design/edit-panel/fill-gradient-helpers.ts +222 -4
- package/corpus/templates/design/app/components/design/edit-panel/fill-properties.tsx +171 -78
- package/corpus/templates/design/app/components/design/edit-panel/inspector-controls.tsx +45 -5
- package/corpus/templates/design/app/components/design/edit-panel/layout-properties.tsx +299 -28
- package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +120 -150
- package/corpus/templates/design/app/components/design/edit-panel/position-helpers.ts +53 -1
- package/corpus/templates/design/app/components/design/edit-panel/position-layout-properties.tsx +284 -117
- package/corpus/templates/design/app/components/design/edit-panel/selection-helpers.ts +81 -0
- package/corpus/templates/design/app/components/design/edit-panel/stroke-properties.tsx +19 -14
- package/corpus/templates/design/app/components/design/edit-panel/style-options.ts +7 -0
- package/corpus/templates/design/app/components/design/edit-panel/typography-helpers.ts +155 -0
- package/corpus/templates/design/app/components/design/edit-panel/typography-properties.tsx +268 -46
- package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +350 -31
- package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +13 -4
- package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +233 -23
- package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +72 -2
- package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +51 -11
- package/corpus/templates/design/app/components/design/inspector/ShaderFillsPanel.tsx +84 -11
- package/corpus/templates/design/app/components/design/inspector/index.ts +3 -0
- package/corpus/templates/design/app/components/design/keyboard-shortcuts.ts +552 -0
- package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +157 -0
- package/corpus/templates/design/app/components/design/multi-screen/frame-geometry.ts +53 -0
- package/corpus/templates/design/app/components/design/multi-screen/overview-layout.ts +184 -0
- package/corpus/templates/design/app/components/design/multi-screen/primitive-drop-target.ts +403 -26
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +20 -1
- package/corpus/templates/design/app/components/design/types.ts +33 -0
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +59 -7
- package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +119 -17
- package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +275 -63
- package/corpus/templates/design/app/hooks/use-question-flow.ts +14 -3
- package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +67 -10
- package/corpus/templates/design/app/i18n/zh-TW.ts +91 -1
- package/corpus/templates/design/app/i18n-data.ts +1217 -10
- package/corpus/templates/design/app/i18n-keyboard-shortcuts.ts +577 -0
- package/corpus/templates/design/app/lib/agent-chat.ts +23 -0
- package/corpus/templates/design/app/lib/design-import.ts +24 -0
- package/corpus/templates/design/app/lib/figma-clipboard.ts +157 -0
- package/corpus/templates/design/app/lib/figma-svg-copy.ts +221 -0
- package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +143 -30
- package/corpus/templates/design/app/pages/design-editor/collab-sync.ts +15 -0
- package/corpus/templates/design/app/pages/design-editor/editor-session.ts +33 -0
- package/corpus/templates/design/app/pages/design-editor/editor-state.ts +38 -0
- package/corpus/templates/design/app/pages/design-editor/overview-annotation-context.ts +157 -0
- package/corpus/templates/design/app/pages/design-editor/overview-camera.ts +62 -6
- package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +245 -0
- package/corpus/templates/design/app/pages/design-editor/react-semantic-handoff.ts +586 -0
- package/corpus/templates/design/app/pages/design-editor/screen-auto-layout.ts +169 -0
- package/corpus/templates/design/app/pages/design-editor/selection-state.ts +201 -1
- package/corpus/templates/design/changelog/2026-07-09-added-underline-strikethrough-and-text-case-uppercase-lowerc.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-annotate-now-draws-across-the-all-screens-canvas-without-swi.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-auto-layout-children-can-now-be-dragged-into-freeform-screen.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-board-shapes-now-stay-visible-and-nest-correctly-across-the-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-component-source-navigation-now-opens-reliably-from-the-insp.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-cross-screen-local-react-layer-moves-now-hand-off-exact-sour.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-cross-screen-moves-undo-and-redo-now-keep-both-screens-stabl.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-detach-a-component-instance-into-plain-editable-eleme.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-dragging-layers-into-auto-layout-now-respects-ignore-auto-la.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-drawing-annotations-sent-to-the-agent-now-include-a-rendered.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-editor-sidebars-now-use-figma-matched-default-widths-for-a-r.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-empty-frames-and-rectangles-now-expose-full-auto-layout-cont.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-export-any-design-screen-as-a-real-vector-svg-for-figma-with.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-grid-auto-layout-now-uses-true-responsive-rows-and-columns-w.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-hidden-and-locked-screens-now-behave-consistently-between-la.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-image-fills-now-preserve-valid-urls-and-layered-fit-settings.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-import-figma-frames-as-pixel-accurate-design-screens-via-a-s.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-inspect-code-now-hides-internal-styling-metadata-and-wraps-l.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-inspector-blur-and-shadow-effects-now-preserve-other-effects.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-jump-to-a-components-other-instances-from-the-inspecto.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-keyboard-shortcuts-are-now-discoverable-in-a-figma-style-bot.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-layer-selection-now-keeps-cmd-or-ctrl-toggles-and-shift-rang.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-layers-dropped-into-auto-layout-now-participate-correctly-in.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-local-live-edit-screens-now-enter-and-leave-full-view-withou.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-local-preview-urls-now-live-in-the-inspector-instead-of-taki.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-local-react-layers-can-now-be-hidden-and-locked-from-layers-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-local-react-layers-now-keep-exact-source-provenance-and-supp.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-local-react-visual-editing-now-loads-reliably-and-shows-live.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-paste-from-figma-cmd-v-now-imports-exact-editable-nodes-when.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-pressing-escape-after-selecting-a-screen-now-reveals-page-pr.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-right-click-overlapping-or-nested-objects-to-choose-the-exac.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-scale-edge-stretch-and-center-constraints-now-preserve-layer.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-screen-rows-can-now-be-reordered-in-layers-with-matching-can.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-screen-selection-stays-responsive-in-designs-with-hundreds-o.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-shift-a-now-enables-auto-layout-on-a-selected-screen-with-fl.md +6 -0
- package/corpus/templates/design/changelog/2026-07-09-swap-a-component-instance-for-another-from-the-libra.md +6 -0
- package/corpus/templates/design/changelog/2026-07-10-drawing-annotations-now-stay-available-to-retry-when-the.md +6 -0
- package/corpus/templates/design/e2e/global-setup.ts +3 -6
- package/corpus/templates/design/e2e/helpers.ts +27 -6
- package/corpus/templates/design/server/lib/design-to-figma-svg.ts +1412 -0
- package/corpus/templates/design/server/lib/figma-clipboard-match.ts +196 -0
- package/corpus/templates/design/server/lib/figma-node-import.ts +311 -0
- package/corpus/templates/design/server/lib/figma-node-to-html.ts +1334 -0
- package/corpus/templates/design/server/lib/figma-paste-fallback.ts +64 -0
- package/corpus/templates/design/server/lib/playwright-runtime.ts +78 -0
- package/corpus/templates/design/server/plugins/db.ts +41 -0
- package/corpus/templates/design/server/source-workspace.ts +64 -0
- package/corpus/templates/design/shared/board-file.ts +13 -2
- package/corpus/templates/design/shared/canvas-math.ts +231 -33
- package/corpus/templates/design/shared/code-layer.ts +122 -8
- package/corpus/templates/design/shared/component-library.ts +161 -0
- package/corpus/templates/design/shared/db-conflict.ts +27 -0
- package/corpus/templates/design/shared/design-source-capabilities.ts +2 -1
- package/corpus/templates/design/shared/figma-url.ts +149 -0
- package/corpus/templates/design/shared/pen-path.ts +16 -7
- package/corpus/templates/design/shared/source-mode.ts +1 -0
- package/corpus/templates/plan/app/components/plan/CanvasArea.tsx +7 -19
- package/corpus/templates/plan/changelog/2026-07-09-canvas-panning-now-keeps-zoom-fixed-even-at-the-edges.md +6 -0
- package/corpus/templates/slides/actions/index-design-system-with-builder.ts +16 -1
- package/corpus/templates/slides/app/context/DeckContext.tsx +311 -70
- package/corpus/templates/slides/changelog/2026-07-09-fixed-the-slide-rail-going-permanently-stale-during-a-long-a.md +6 -0
- package/dist/agent/production-agent.d.ts +79 -6
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +161 -14
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +29 -5
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +46 -0
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +61 -0
- package/dist/agent/run-store.js.map +1 -1
- package/dist/cli/design-connect.d.ts +6 -0
- package/dist/cli/design-connect.d.ts.map +1 -1
- package/dist/cli/design-connect.js +336 -139
- package/dist/cli/design-connect.js.map +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +14 -0
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +2 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +19 -3
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +38 -18
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/agent-chat.d.ts +60 -0
- package/dist/client/agent-chat.d.ts.map +1 -1
- package/dist/client/agent-chat.js +122 -1
- package/dist/client/agent-chat.js.map +1 -1
- package/dist/client/chat/index.d.ts +1 -1
- package/dist/client/chat/index.d.ts.map +1 -1
- package/dist/client/chat/index.js +1 -1
- package/dist/client/chat/index.js.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.d.ts +12 -0
- package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.js +36 -2
- package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/useCollabReconcile.js +18 -6
- package/dist/client/rich-markdown-editor/useCollabReconcile.js.map +1 -1
- package/dist/collab/awareness-store.d.ts +5 -0
- package/dist/collab/awareness-store.d.ts.map +1 -1
- package/dist/collab/awareness-store.js +19 -12
- package/dist/collab/awareness-store.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/client.d.ts.map +1 -1
- package/dist/collab/client.js +13 -5
- package/dist/collab/client.js.map +1 -1
- package/dist/collab/index.d.ts +1 -0
- package/dist/collab/index.d.ts.map +1 -1
- package/dist/collab/index.js +1 -0
- package/dist/collab/index.js.map +1 -1
- package/dist/collab/recent-edits.d.ts +3 -1
- package/dist/collab/recent-edits.d.ts.map +1 -1
- package/dist/collab/recent-edits.js +57 -2
- package/dist/collab/recent-edits.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/deploy/build.d.ts +24 -0
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +102 -5
- package/dist/deploy/build.js.map +1 -1
- package/dist/index.browser.d.ts +1 -1
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/observability/routes.d.ts +5 -5
- package/dist/progress/routes.d.ts +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +87 -10
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/builder-design-systems.d.ts +15 -0
- package/dist/server/builder-design-systems.d.ts.map +1 -1
- package/dist/server/builder-design-systems.js +9 -4
- package/dist/server/builder-design-systems.js.map +1 -1
- package/package.json +1 -1
|
@@ -60,6 +60,7 @@ const ALLOWED_EXTENSIONS = new Set([
|
|
|
60
60
|
".yaml",
|
|
61
61
|
".svg",
|
|
62
62
|
]);
|
|
63
|
+
const SHA256_VERSION_HASH = /^[a-f0-9]{64}$/i;
|
|
63
64
|
|
|
64
65
|
/**
|
|
65
66
|
* Secret-looking paths are never writable, regardless of extension. All
|
|
@@ -207,6 +208,14 @@ export default defineAction({
|
|
|
207
208
|
"version-conflict error if the file changed on disk since that " +
|
|
208
209
|
"hash was read.",
|
|
209
210
|
),
|
|
211
|
+
requireExpectedVersionHash: z
|
|
212
|
+
.boolean()
|
|
213
|
+
.optional()
|
|
214
|
+
.describe(
|
|
215
|
+
"Set true for semantic/compiled-source edits. The bridge rejects the " +
|
|
216
|
+
"write unless expectedVersionHash is present and still exact. Leave " +
|
|
217
|
+
"false only for legacy writes or deliberate new-file creation.",
|
|
218
|
+
),
|
|
210
219
|
}),
|
|
211
220
|
run: async ({
|
|
212
221
|
designId,
|
|
@@ -215,6 +224,7 @@ export default defineAction({
|
|
|
215
224
|
content,
|
|
216
225
|
patch,
|
|
217
226
|
expectedVersionHash,
|
|
227
|
+
requireExpectedVersionHash,
|
|
218
228
|
}) => {
|
|
219
229
|
// --- Gate 1: access ---
|
|
220
230
|
await assertAccess("design", designId, "editor");
|
|
@@ -246,6 +256,14 @@ export default defineAction({
|
|
|
246
256
|
"content and patch are mutually exclusive. Provide one or the other.",
|
|
247
257
|
);
|
|
248
258
|
}
|
|
259
|
+
if (
|
|
260
|
+
requireExpectedVersionHash &&
|
|
261
|
+
(!expectedVersionHash || !SHA256_VERSION_HASH.test(expectedVersionHash))
|
|
262
|
+
) {
|
|
263
|
+
throw new Error(
|
|
264
|
+
"A SHA-256 expectedVersionHash is required when requireExpectedVersionHash is true. Re-read the file through the current local Design bridge before retrying.",
|
|
265
|
+
);
|
|
266
|
+
}
|
|
249
267
|
|
|
250
268
|
// --- Resolve bridge URL + current token ---
|
|
251
269
|
const db = getDb();
|
|
@@ -289,7 +307,12 @@ export default defineAction({
|
|
|
289
307
|
const res = await fetch(`${bridgeUrl}/write-file`, {
|
|
290
308
|
method: "POST",
|
|
291
309
|
headers,
|
|
292
|
-
body: JSON.stringify({
|
|
310
|
+
body: JSON.stringify({
|
|
311
|
+
relPath,
|
|
312
|
+
content,
|
|
313
|
+
expectedVersionHash,
|
|
314
|
+
requireExpectedVersionHash,
|
|
315
|
+
}),
|
|
293
316
|
});
|
|
294
317
|
if (!res.ok) {
|
|
295
318
|
if (res.status === 409) {
|
|
@@ -321,6 +344,7 @@ export default defineAction({
|
|
|
321
344
|
search: patch!.search,
|
|
322
345
|
replace: patch!.replace,
|
|
323
346
|
expectedVersionHash,
|
|
347
|
+
requireExpectedVersionHash,
|
|
324
348
|
}),
|
|
325
349
|
});
|
|
326
350
|
if (!applyRes.ok) {
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IconComponents,
|
|
3
|
+
IconFrame,
|
|
4
|
+
IconPhoto,
|
|
5
|
+
IconTypography,
|
|
6
|
+
IconVector,
|
|
7
|
+
} from "@tabler/icons-react";
|
|
1
8
|
import {
|
|
2
9
|
forwardRef,
|
|
3
10
|
useCallback,
|
|
@@ -22,6 +29,8 @@ import {
|
|
|
22
29
|
} from "@/components/ui/context-menu";
|
|
23
30
|
import { cn } from "@/lib/utils";
|
|
24
31
|
|
|
32
|
+
import type { CanvasLayerHitCandidate } from "./types";
|
|
33
|
+
|
|
25
34
|
// LIVE-VERIFIED (real Figma, UI3) canvas context menus:
|
|
26
35
|
//
|
|
27
36
|
// WITH a selection:
|
|
@@ -51,6 +60,15 @@ import { cn } from "@/lib/utils";
|
|
|
51
60
|
// back-compat. App-specific extras with no Figma equivalent (e.g. "Edit
|
|
52
61
|
// screen") are appended at the very bottom, below one more separator, so the
|
|
53
62
|
// Figma-muscle-memory zone above stays byte-identical to the real menu.
|
|
63
|
+
//
|
|
64
|
+
// NOTE — instance-only cluster (Go to main component / Swap instance /
|
|
65
|
+
// Detach instance): added for component-instance selections, gated behind
|
|
66
|
+
// `isComponentInstance` so it renders nothing for existing callers (fully
|
|
67
|
+
// backward compatible). Real Figma groups these together for an instance
|
|
68
|
+
// selection, but this exact placement (right after Add auto layout / Create
|
|
69
|
+
// component) was NOT independently re-verified against a live Figma session
|
|
70
|
+
// in this pass — reposition if a future LIVE-VERIFIED sweep finds a
|
|
71
|
+
// different spot.
|
|
54
72
|
export type CanvasContextMenuAction =
|
|
55
73
|
| "paste-here"
|
|
56
74
|
| "select-all"
|
|
@@ -73,6 +91,9 @@ export type CanvasContextMenuAction =
|
|
|
73
91
|
| "frame-selection"
|
|
74
92
|
| "add-auto-layout"
|
|
75
93
|
| "create-component"
|
|
94
|
+
| "go-to-main-component"
|
|
95
|
+
| "swap-instance"
|
|
96
|
+
| "detach-instance"
|
|
76
97
|
| "rename"
|
|
77
98
|
| "toggle-lock"
|
|
78
99
|
| "toggle-hide"
|
|
@@ -112,6 +133,7 @@ export type CanvasContextMenuActionHandler = (
|
|
|
112
133
|
) => void;
|
|
113
134
|
|
|
114
135
|
export interface CanvasContextMenuLabels {
|
|
136
|
+
selectLayer: string;
|
|
115
137
|
pasteHere: string;
|
|
116
138
|
selectAll: string;
|
|
117
139
|
zoomToFit: string;
|
|
@@ -134,6 +156,9 @@ export interface CanvasContextMenuLabels {
|
|
|
134
156
|
frameSelection: string;
|
|
135
157
|
addAutoLayout: string;
|
|
136
158
|
createComponent: string;
|
|
159
|
+
goToMainComponent: string;
|
|
160
|
+
swapInstance: string;
|
|
161
|
+
detachInstance: string;
|
|
137
162
|
rename: string;
|
|
138
163
|
lock: string;
|
|
139
164
|
unlock: string;
|
|
@@ -177,6 +202,9 @@ export interface CanvasContextMenuShortcuts {
|
|
|
177
202
|
frameSelection: string;
|
|
178
203
|
addAutoLayout: string;
|
|
179
204
|
createComponent: string;
|
|
205
|
+
goToMainComponent: string;
|
|
206
|
+
swapInstance: string;
|
|
207
|
+
detachInstance: string;
|
|
180
208
|
rename: string;
|
|
181
209
|
toggleLock: string;
|
|
182
210
|
toggleHide: string;
|
|
@@ -199,6 +227,8 @@ export interface CanvasContextMenuProps {
|
|
|
199
227
|
className?: string;
|
|
200
228
|
contentClassName?: string;
|
|
201
229
|
selectedCount?: number;
|
|
230
|
+
layerCandidates?: readonly CanvasLayerHitCandidate[];
|
|
231
|
+
onSelectLayer?: (candidate: CanvasLayerHitCandidate) => void;
|
|
202
232
|
hasClipboard?: boolean;
|
|
203
233
|
hasPropsClipboard?: boolean;
|
|
204
234
|
hasAnimationClipboard?: boolean;
|
|
@@ -228,6 +258,14 @@ export interface CanvasContextMenuProps {
|
|
|
228
258
|
canFrameSelection?: boolean;
|
|
229
259
|
canAddAutoLayout?: boolean;
|
|
230
260
|
canCreateComponent?: boolean;
|
|
261
|
+
// Whether the current selection IS a component instance — gates the
|
|
262
|
+
// whole Go to main component / Swap instance / Detach instance cluster on
|
|
263
|
+
// (rather than showing them permanently disabled for non-instance
|
|
264
|
+
// selections, since real Figma doesn't show this cluster at all then).
|
|
265
|
+
isComponentInstance?: boolean;
|
|
266
|
+
canGoToMainComponent?: boolean;
|
|
267
|
+
canSwapInstance?: boolean;
|
|
268
|
+
canDetachInstance?: boolean;
|
|
231
269
|
// L12: this menu is target-agnostic — it has no built-in notion of "design
|
|
232
270
|
// title" vs "layer". Rename is enabled by default for a single selection
|
|
233
271
|
// (see the canRename default below) and fires through the onRename
|
|
@@ -288,6 +326,9 @@ export interface CanvasContextMenuProps {
|
|
|
288
326
|
onFrameSelection?: CanvasContextMenuActionHandler;
|
|
289
327
|
onAddAutoLayout?: CanvasContextMenuActionHandler;
|
|
290
328
|
onCreateComponent?: CanvasContextMenuActionHandler;
|
|
329
|
+
onGoToMainComponent?: CanvasContextMenuActionHandler;
|
|
330
|
+
onSwapInstance?: CanvasContextMenuActionHandler;
|
|
331
|
+
onDetachInstance?: CanvasContextMenuActionHandler;
|
|
291
332
|
// L12: fired when the Rename item is selected (details.selectedCount tells
|
|
292
333
|
// the caller how many things are selected). The caller decides what
|
|
293
334
|
// "rename" means for the current target — e.g. calling a LayersPanel
|
|
@@ -315,6 +356,7 @@ export interface CanvasContextMenuProps {
|
|
|
315
356
|
}
|
|
316
357
|
|
|
317
358
|
const DEFAULT_LABELS: CanvasContextMenuLabels = {
|
|
359
|
+
selectLayer: "Select layer",
|
|
318
360
|
pasteHere: "Paste here",
|
|
319
361
|
selectAll: "Select all",
|
|
320
362
|
zoomToFit: "Zoom to fit",
|
|
@@ -337,6 +379,9 @@ const DEFAULT_LABELS: CanvasContextMenuLabels = {
|
|
|
337
379
|
frameSelection: "Frame selection",
|
|
338
380
|
addAutoLayout: "Add auto layout",
|
|
339
381
|
createComponent: "Create component",
|
|
382
|
+
goToMainComponent: "Go to main component",
|
|
383
|
+
swapInstance: "Swap instance",
|
|
384
|
+
detachInstance: "Detach instance",
|
|
340
385
|
rename: "Rename",
|
|
341
386
|
lock: "Lock",
|
|
342
387
|
unlock: "Unlock",
|
|
@@ -380,6 +425,9 @@ const DEFAULT_SHORTCUTS: CanvasContextMenuShortcuts = {
|
|
|
380
425
|
frameSelection: "⌥⌘G",
|
|
381
426
|
addAutoLayout: "⇧A",
|
|
382
427
|
createComponent: "⌥⌘K",
|
|
428
|
+
goToMainComponent: "",
|
|
429
|
+
swapInstance: "",
|
|
430
|
+
detachInstance: "⌥⌘B",
|
|
383
431
|
rename: "⌘R",
|
|
384
432
|
toggleLock: "⇧⌘L",
|
|
385
433
|
toggleHide: "⇧⌘H",
|
|
@@ -426,6 +474,8 @@ export const CanvasContextMenu = forwardRef<
|
|
|
426
474
|
className,
|
|
427
475
|
contentClassName,
|
|
428
476
|
selectedCount = 0,
|
|
477
|
+
layerCandidates = [],
|
|
478
|
+
onSelectLayer,
|
|
429
479
|
hasClipboard = false,
|
|
430
480
|
hasPropsClipboard = false,
|
|
431
481
|
hasAnimationClipboard = false,
|
|
@@ -444,6 +494,10 @@ export const CanvasContextMenu = forwardRef<
|
|
|
444
494
|
canFrameSelection = selectedCount > 0,
|
|
445
495
|
canAddAutoLayout = selectedCount > 0,
|
|
446
496
|
canCreateComponent = selectedCount > 0,
|
|
497
|
+
isComponentInstance = false,
|
|
498
|
+
canGoToMainComponent = isComponentInstance,
|
|
499
|
+
canSwapInstance = isComponentInstance,
|
|
500
|
+
canDetachInstance = isComponentInstance,
|
|
447
501
|
canRename = selectedCount === 1,
|
|
448
502
|
canToggleLocked = selectedCount > 0,
|
|
449
503
|
canToggleHidden = selectedCount > 0,
|
|
@@ -479,6 +533,9 @@ export const CanvasContextMenu = forwardRef<
|
|
|
479
533
|
onFrameSelection,
|
|
480
534
|
onAddAutoLayout,
|
|
481
535
|
onCreateComponent,
|
|
536
|
+
onGoToMainComponent,
|
|
537
|
+
onSwapInstance,
|
|
538
|
+
onDetachInstance,
|
|
482
539
|
onRename,
|
|
483
540
|
onToggleLocked,
|
|
484
541
|
onToggleHidden,
|
|
@@ -559,6 +616,9 @@ export const CanvasContextMenu = forwardRef<
|
|
|
559
616
|
"frame-selection": onFrameSelection,
|
|
560
617
|
"add-auto-layout": onAddAutoLayout,
|
|
561
618
|
"create-component": onCreateComponent,
|
|
619
|
+
"go-to-main-component": onGoToMainComponent,
|
|
620
|
+
"swap-instance": onSwapInstance,
|
|
621
|
+
"detach-instance": onDetachInstance,
|
|
562
622
|
rename: onRename,
|
|
563
623
|
"toggle-lock": onToggleLocked,
|
|
564
624
|
"toggle-hide": onToggleHidden,
|
|
@@ -585,9 +645,11 @@ export const CanvasContextMenu = forwardRef<
|
|
|
585
645
|
onCopyAsSvg,
|
|
586
646
|
onCopyProps,
|
|
587
647
|
onCreateComponent,
|
|
648
|
+
onDetachInstance,
|
|
588
649
|
onFlipHorizontal,
|
|
589
650
|
onFlipVertical,
|
|
590
651
|
onFrameSelection,
|
|
652
|
+
onGoToMainComponent,
|
|
591
653
|
onGroup,
|
|
592
654
|
onPaste,
|
|
593
655
|
onPasteAnimation,
|
|
@@ -598,6 +660,7 @@ export const CanvasContextMenu = forwardRef<
|
|
|
598
660
|
onRename,
|
|
599
661
|
onSendBackward,
|
|
600
662
|
onSendToBack,
|
|
663
|
+
onSwapInstance,
|
|
601
664
|
onToggleComments,
|
|
602
665
|
onToggleHidden,
|
|
603
666
|
onToggleLocked,
|
|
@@ -674,6 +737,32 @@ export const CanvasContextMenu = forwardRef<
|
|
|
674
737
|
className={cn(MENU_CONTENT_CLASS, contentClassName)}
|
|
675
738
|
style={manualContentStyle}
|
|
676
739
|
>
|
|
740
|
+
{layerCandidates.length > 0 && onSelectLayer ? (
|
|
741
|
+
<>
|
|
742
|
+
<ContextMenuGroup>
|
|
743
|
+
<ContextMenuSub>
|
|
744
|
+
<ContextMenuSubTrigger className={MENU_SUB_TRIGGER_CLASS}>
|
|
745
|
+
{labels.selectLayer}
|
|
746
|
+
</ContextMenuSubTrigger>
|
|
747
|
+
<ContextMenuSubContent
|
|
748
|
+
className={cn(MENU_CONTENT_CLASS, "w-56")}
|
|
749
|
+
>
|
|
750
|
+
{layerCandidates.map((candidate) => (
|
|
751
|
+
<CanvasLayerCandidateItem
|
|
752
|
+
key={candidate.key}
|
|
753
|
+
candidate={candidate}
|
|
754
|
+
onSelect={() => {
|
|
755
|
+
onSelectLayer(candidate);
|
|
756
|
+
handleOpenChange(false);
|
|
757
|
+
}}
|
|
758
|
+
/>
|
|
759
|
+
))}
|
|
760
|
+
</ContextMenuSubContent>
|
|
761
|
+
</ContextMenuSub>
|
|
762
|
+
</ContextMenuGroup>
|
|
763
|
+
<CanvasMenuSeparator />
|
|
764
|
+
</>
|
|
765
|
+
) : null}
|
|
677
766
|
{hasSelection ? (
|
|
678
767
|
<>
|
|
679
768
|
{/* LIVE-VERIFIED Figma "with selection" canvas menu. */}
|
|
@@ -839,6 +928,39 @@ export const CanvasContextMenu = forwardRef<
|
|
|
839
928
|
/>
|
|
840
929
|
</ContextMenuGroup>
|
|
841
930
|
|
|
931
|
+
{isComponentInstance ? (
|
|
932
|
+
<>
|
|
933
|
+
<CanvasMenuSeparator />
|
|
934
|
+
<ContextMenuGroup>
|
|
935
|
+
<CanvasMenuItem
|
|
936
|
+
hidden={isHiddenAction("go-to-main-component")}
|
|
937
|
+
disabled={
|
|
938
|
+
!canRun("go-to-main-component", canGoToMainComponent)
|
|
939
|
+
}
|
|
940
|
+
label={labels.goToMainComponent}
|
|
941
|
+
shortcut={shortcuts.goToMainComponent}
|
|
942
|
+
onSelect={(event) =>
|
|
943
|
+
runAction("go-to-main-component", event)
|
|
944
|
+
}
|
|
945
|
+
/>
|
|
946
|
+
<CanvasMenuItem
|
|
947
|
+
hidden={isHiddenAction("swap-instance")}
|
|
948
|
+
disabled={!canRun("swap-instance", canSwapInstance)}
|
|
949
|
+
label={labels.swapInstance}
|
|
950
|
+
shortcut={shortcuts.swapInstance}
|
|
951
|
+
onSelect={(event) => runAction("swap-instance", event)}
|
|
952
|
+
/>
|
|
953
|
+
<CanvasMenuItem
|
|
954
|
+
hidden={isHiddenAction("detach-instance")}
|
|
955
|
+
disabled={!canRun("detach-instance", canDetachInstance)}
|
|
956
|
+
label={labels.detachInstance}
|
|
957
|
+
shortcut={shortcuts.detachInstance}
|
|
958
|
+
onSelect={(event) => runAction("detach-instance", event)}
|
|
959
|
+
/>
|
|
960
|
+
</ContextMenuGroup>
|
|
961
|
+
</>
|
|
962
|
+
) : null}
|
|
963
|
+
|
|
842
964
|
<CanvasMenuSeparator />
|
|
843
965
|
|
|
844
966
|
<ContextMenuGroup>
|
|
@@ -936,6 +1058,36 @@ export const CanvasContextMenu = forwardRef<
|
|
|
936
1058
|
);
|
|
937
1059
|
});
|
|
938
1060
|
|
|
1061
|
+
function CanvasLayerCandidateItem({
|
|
1062
|
+
candidate,
|
|
1063
|
+
onSelect,
|
|
1064
|
+
}: {
|
|
1065
|
+
candidate: CanvasLayerHitCandidate;
|
|
1066
|
+
onSelect: () => void;
|
|
1067
|
+
}) {
|
|
1068
|
+
const tag = candidate.info.tagName.toLowerCase();
|
|
1069
|
+
const Icon = candidate.info.componentName
|
|
1070
|
+
? IconComponents
|
|
1071
|
+
: /^(h[1-6]|p|span|label|input|textarea)$/.test(tag)
|
|
1072
|
+
? IconTypography
|
|
1073
|
+
: /^(img|picture|video)$/.test(tag)
|
|
1074
|
+
? IconPhoto
|
|
1075
|
+
: /^(svg|path|circle|ellipse|polygon|line)$/.test(tag)
|
|
1076
|
+
? IconVector
|
|
1077
|
+
: tag === "button" || tag === "a"
|
|
1078
|
+
? IconComponents
|
|
1079
|
+
: IconFrame;
|
|
1080
|
+
return (
|
|
1081
|
+
<ContextMenuItem
|
|
1082
|
+
className={cn(MENU_ITEM_CLASS, "gap-2")}
|
|
1083
|
+
onSelect={onSelect}
|
|
1084
|
+
>
|
|
1085
|
+
<Icon className="size-3.5 shrink-0 text-muted-foreground" />
|
|
1086
|
+
<span className="min-w-0 truncate">{candidate.label}</span>
|
|
1087
|
+
</ContextMenuItem>
|
|
1088
|
+
);
|
|
1089
|
+
}
|
|
1090
|
+
|
|
939
1091
|
function CanvasMenuItem({
|
|
940
1092
|
hidden,
|
|
941
1093
|
disabled,
|