@agent-native/core 0.90.1 → 0.90.2
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 +14 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/client/AgentPanel.tsx +1 -1
- package/corpus/core/src/client/rich-markdown-editor/useCollabReconcile.ts +11 -6
- package/corpus/core/src/client/use-action.ts +39 -2
- package/corpus/core/src/client/use-db-sync.ts +44 -18
- package/corpus/core/src/db/create-get-db.ts +32 -2
- package/corpus/core/src/server/framework-request-handler.ts +52 -4
- package/corpus/templates/assets/.agents/skills/asset-generation/SKILL.md +5 -0
- package/corpus/templates/assets/.agents/skills/logo-composite/SKILL.md +34 -6
- package/corpus/templates/assets/AGENTS.md +23 -4
- package/corpus/templates/assets/actions/_generation-preset-settings.ts +48 -0
- package/corpus/templates/assets/actions/_helpers.ts +8 -1
- package/corpus/templates/assets/actions/_preset-skeleton-validation.ts +64 -0
- package/corpus/templates/assets/actions/create-generation-preset.ts +11 -3
- package/corpus/templates/assets/actions/generate-image-batch.ts +7 -2
- package/corpus/templates/assets/actions/generate-image.ts +342 -25
- package/corpus/templates/assets/actions/get-library.ts +4 -3
- package/corpus/templates/assets/actions/navigate.ts +2 -1
- package/corpus/templates/assets/actions/refresh-generation-run.ts +5 -1
- package/corpus/templates/assets/actions/update-asset.ts +1 -0
- package/corpus/templates/assets/actions/update-generation-preset.ts +8 -1
- package/corpus/templates/assets/actions/view-screen.ts +8 -1
- package/corpus/templates/assets/app/components/generation/GenerationResults.tsx +9 -1
- package/corpus/templates/assets/app/hooks/use-image-model-menu.ts +1 -0
- package/corpus/templates/assets/app/hooks/use-navigation-state.ts +11 -0
- package/corpus/templates/assets/app/i18n/zh-TW.ts +64 -0
- package/corpus/templates/assets/app/i18n-data.ts +650 -0
- package/corpus/templates/assets/app/routes/asset.$id.tsx +2 -1
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +44 -33
- package/corpus/templates/assets/app/routes/brand-kits.$id_.presets.$presetId.tsx +1474 -0
- package/corpus/templates/assets/app/routes/library.tsx +43 -1
- package/corpus/templates/assets/server/lib/generation.ts +366 -44
- package/corpus/templates/assets/server/lib/image-processing.ts +252 -0
- package/corpus/templates/assets/server/lib/preset-skeleton.ts +137 -0
- package/corpus/templates/assets/shared/api.ts +47 -0
- package/corpus/templates/clips/app/components/library/library-layout.tsx +7 -2
- package/corpus/templates/clips/app/components/library/sort-menu.tsx +1 -1
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +114 -33
- package/corpus/templates/clips/app/routes/_app.library._index.tsx +27 -1
- package/corpus/templates/clips/app/routes/record.tsx +157 -68
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +5 -5
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +20 -3
- package/corpus/templates/clips/shared/finalize-recovery.ts +23 -3
- package/corpus/templates/content/AGENTS.md +52 -52
- package/corpus/templates/content/actions/_builder-cms-read-client.ts +188 -8
- package/corpus/templates/content/actions/_builder-docs-client.ts +41 -3
- package/corpus/templates/content/actions/_database-source-utils.ts +998 -160
- package/corpus/templates/content/actions/_database-utils.ts +44 -4
- package/corpus/templates/content/actions/_notion-action-utils.ts +6 -2
- package/corpus/templates/content/actions/add-content-database-source-field-property.ts +23 -1
- package/corpus/templates/content/actions/attach-content-database-source.ts +85 -12
- package/corpus/templates/content/actions/change-content-database-source-role.ts +9 -1
- package/corpus/templates/content/actions/delete-content-database.ts +1 -0
- package/corpus/templates/content/actions/get-document.ts +11 -2
- package/corpus/templates/content/actions/list-content-databases.ts +57 -9
- package/corpus/templates/content/actions/prepare-builder-source-review.ts +23 -6
- package/corpus/templates/content/actions/refresh-content-database-source.ts +26 -3
- package/corpus/templates/content/actions/restore-content-database.ts +1 -0
- package/corpus/templates/content/actions/update-document.ts +43 -0
- package/corpus/templates/content/app/components/editor/BuilderBodySyncingNotice.tsx +21 -0
- package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +0 -1
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +70 -28
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +69 -17
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +4 -4
- package/corpus/templates/content/app/components/editor/body-hydration.ts +112 -0
- package/corpus/templates/content/app/components/editor/builder-body-hydration-pump.ts +52 -0
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +9076 -2876
- package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +41 -1
- package/corpus/templates/content/app/components/editor/extensions/ImageBlock.tsx +36 -11
- package/corpus/templates/content/app/components/editor/previewDocumentSaveController.ts +21 -1
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +11 -1
- package/corpus/templates/content/app/components/sidebar/DocumentTreeItem.tsx +11 -8
- package/corpus/templates/content/app/global.css +41 -0
- package/corpus/templates/content/app/hooks/use-content-database.ts +346 -42
- package/corpus/templates/content/app/hooks/use-db-sync.ts +9 -0
- package/corpus/templates/content/app/hooks/use-documents.ts +47 -0
- package/corpus/templates/content/app/hooks/use-notion.ts +12 -10
- package/corpus/templates/content/app/i18n/zh-TW.ts +35 -0
- package/corpus/templates/content/app/i18n-data.ts +355 -0
- package/corpus/templates/content/app/root.tsx +22 -0
- package/corpus/templates/content/changelog/2026-07-01-builder-database-sources-keep-loading-rows-in-the-background.md +6 -0
- package/corpus/templates/content/changelog/2026-07-01-builder-source-attach-starts-with-usable-rows.md +6 -0
- package/corpus/templates/content/changelog/2026-07-01-builder-source-attachment-now-stays-connected-after-large.md +6 -0
- package/corpus/templates/content/changelog/2026-07-01-builder-source-refreshes-now-show-progress-for-large-docs-blog.md +6 -0
- package/corpus/templates/content/changelog/2026-07-01-database-pages-now-delete-to-trash-without-route-errors.md +6 -0
- package/corpus/templates/content/changelog/2026-07-02-builder-source-refreshes-recover-from-stalled-background-row.md +6 -0
- package/corpus/templates/content/changelog/2026-07-02-builder-sourced-rows-open-with-sync-protection.md +6 -0
- package/corpus/templates/content/changelog/2026-07-02-database-rows-and-pages-open-faster-from-recently-loaded-dat.md +6 -0
- package/corpus/templates/content/changelog/2026-07-02-preview-panels-close-reliably-narrow-sidebar-row-actions-sta.md +6 -0
- package/corpus/templates/content/changelog/2026-07-06-builder-sync-progress-no-longer-shows-continue.md +6 -0
- package/corpus/templates/content/shared/api.ts +13 -0
- package/corpus/templates/content/shared/builder-mdx.ts +16 -3
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +23 -13
- package/corpus/templates/design/.agents/skills/responsive-breakpoints/SKILL.md +98 -0
- package/corpus/templates/design/.agents/skills/shader-fills/SKILL.md +162 -0
- package/corpus/templates/design/AGENTS.md +9 -2
- package/corpus/templates/design/actions/add-breakpoint.ts +6 -3
- package/corpus/templates/design/actions/apply-a11y-fix.ts +57 -37
- package/corpus/templates/design/actions/apply-component-prop-edit.ts +41 -20
- package/corpus/templates/design/actions/apply-motion-edit.ts +251 -38
- package/corpus/templates/design/actions/apply-shader-fill.ts +90 -66
- package/corpus/templates/design/actions/apply-visual-edit.ts +282 -55
- package/corpus/templates/design/actions/create-component.ts +29 -60
- package/corpus/templates/design/actions/create-file.ts +9 -2
- package/corpus/templates/design/actions/duplicate-design.ts +31 -2
- package/corpus/templates/design/actions/edit-design.ts +36 -38
- package/corpus/templates/design/actions/generate-design-title.ts +87 -0
- package/corpus/templates/design/actions/generate-design.ts +53 -18
- package/corpus/templates/design/actions/generate-screens.ts +108 -4
- package/corpus/templates/design/actions/get-motion-timeline.ts +35 -7
- package/corpus/templates/design/actions/insert-asset.ts +34 -29
- package/corpus/templates/design/actions/insert-design-native-asset.ts +129 -32
- package/corpus/templates/design/actions/insert-figma-library-asset.ts +35 -30
- package/corpus/templates/design/actions/present-design-variants.ts +7 -2
- package/corpus/templates/design/actions/remove-motion-timeline.ts +31 -36
- package/corpus/templates/design/actions/update-file.ts +190 -75
- package/corpus/templates/design/app/components/design/BreakpointBar.tsx +403 -0
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +469 -222
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +708 -53
- package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +83 -3
- package/corpus/templates/design/app/components/design/EditPanel.tsx +1091 -6948
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +419 -85
- package/corpus/templates/design/app/components/design/MotionDock.tsx +1124 -103
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +2610 -1398
- package/corpus/templates/design/app/components/design/ReadOnlyDesignBanner.tsx +22 -0
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +2182 -235
- package/corpus/templates/design/app/components/design/bridge/motion-preview.bridge.ts +187 -11
- package/corpus/templates/design/app/components/design/bridge/shader-fill-preview.bridge.ts +376 -1
- package/corpus/templates/design/app/components/design/bridge/shader-runtime.bridge.ts +746 -0
- package/corpus/templates/design/app/components/design/canvas-primitive-style.ts +17 -0
- package/corpus/templates/design/app/components/design/code-workbench/SideBar.tsx +1 -1
- package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +1 -3
- package/corpus/templates/design/app/components/design/code-workbench/quickinput/QuickInput.tsx +1 -1
- package/corpus/templates/design/app/components/design/edit-panel/appearance-properties.tsx +518 -0
- package/corpus/templates/design/app/components/design/edit-panel/code-inspect-helpers.tsx +562 -0
- package/corpus/templates/design/app/components/design/edit-panel/component-section.tsx +763 -0
- package/corpus/templates/design/app/components/design/edit-panel/document-colors.ts +94 -0
- package/corpus/templates/design/app/components/design/edit-panel/effects-properties.tsx +780 -0
- package/corpus/templates/design/app/components/design/edit-panel/element-classification.ts +446 -0
- package/corpus/templates/design/app/components/design/edit-panel/element-identity.ts +79 -0
- package/corpus/templates/design/app/components/design/edit-panel/field-primitives.tsx +315 -0
- package/corpus/templates/design/app/components/design/edit-panel/fill-gradient-helpers.ts +344 -0
- package/corpus/templates/design/app/components/design/edit-panel/fill-properties.tsx +594 -0
- package/corpus/templates/design/app/components/design/edit-panel/frame-presets-panel.tsx +119 -0
- package/corpus/templates/design/app/components/design/edit-panel/inspector-controls.tsx +248 -0
- package/corpus/templates/design/app/components/design/edit-panel/interaction-state-helpers.ts +45 -0
- package/corpus/templates/design/app/components/design/edit-panel/layout-properties.tsx +693 -0
- package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +724 -0
- package/corpus/templates/design/app/components/design/edit-panel/position-helpers.ts +207 -0
- package/corpus/templates/design/app/components/design/edit-panel/position-layout-properties.tsx +628 -0
- package/corpus/templates/design/app/components/design/edit-panel/selection-helpers.ts +91 -0
- package/corpus/templates/design/app/components/design/edit-panel/stroke-properties.tsx +649 -0
- package/corpus/templates/design/app/components/design/edit-panel/style-change-types.ts +118 -0
- package/corpus/templates/design/app/components/design/edit-panel/style-options.ts +88 -0
- package/corpus/templates/design/app/components/design/edit-panel/transform-helpers.ts +100 -0
- package/corpus/templates/design/app/components/design/edit-panel/typography-helpers.ts +117 -0
- package/corpus/templates/design/app/components/design/edit-panel/typography-properties.tsx +501 -0
- package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +91 -40
- package/corpus/templates/design/app/components/design/inspector/BreakpointOverrideIndicator.tsx +82 -0
- package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +189 -87
- package/corpus/templates/design/app/components/design/inspector/GlslShaderPanel.tsx +1097 -0
- package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +44 -0
- package/corpus/templates/design/app/components/design/inspector/InteractionStatePanel.tsx +258 -0
- package/corpus/templates/design/app/components/design/inspector/MotionKeyframeDiamond.tsx +144 -0
- package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +99 -9
- package/corpus/templates/design/app/components/design/inspector/frame-size-presets.ts +116 -0
- package/corpus/templates/design/app/components/design/inspector/index.ts +26 -0
- package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +29 -0
- package/corpus/templates/design/app/components/design/multi-screen/alt-hover-measurement.ts +171 -0
- package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +220 -0
- package/corpus/templates/design/app/components/design/multi-screen/chrome-transitions.ts +35 -0
- package/corpus/templates/design/app/components/design/multi-screen/cross-screen-drop.ts +134 -0
- package/corpus/templates/design/app/components/design/multi-screen/culling.ts +185 -0
- package/corpus/templates/design/app/components/design/multi-screen/gradient-overlay-geometry.ts +120 -0
- package/corpus/templates/design/app/components/design/multi-screen/types.ts +892 -0
- package/corpus/templates/design/app/components/design/multi-screen/vector-edit-geometry.ts +21 -0
- package/corpus/templates/design/app/components/design/types.ts +15 -0
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +109 -5
- package/corpus/templates/design/app/global.css +8 -8
- package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +259 -2
- package/corpus/templates/design/app/i18n/zh-TW.ts +163 -9
- package/corpus/templates/design/app/i18n-breakpoints.ts +205 -0
- package/corpus/templates/design/app/i18n-data.ts +1664 -152
- package/corpus/templates/design/app/i18n-motion.ts +563 -0
- package/corpus/templates/design/app/lib/design-import.ts +73 -0
- package/corpus/templates/design/app/pages/Index.tsx +41 -22
- package/corpus/templates/design/changelog/2026-06-29-design-inspector-controls-now-match-figmas-softer-dark-chrome.md +1 -1
- package/corpus/templates/design/changelog/2026-06-30-design-now-has-a-figma-style-left-rail-for-file-agent-assets.md +1 -1
- package/corpus/templates/design/changelog/2026-06-30-design-tools-now-use-a-quieter-figma-style-list-layout.md +1 -1
- package/corpus/templates/design/changelog/2026-06-30-multi-select-outlines-now-stay-consistent-across-all-screens.md +1 -1
- package/corpus/templates/design/changelog/2026-07-03-canvas-interactions-now-match-figma-rotation-aware-resizing-.md +1 -1
- package/corpus/templates/design/changelog/2026-07-03-layers-panel-matches-figma-top-layer-on-top-drag-with-auto-s.md +1 -1
- package/corpus/templates/design/changelog/2026-07-05-designs-get-ai-generated-names-from-your-prompt.md +6 -0
- package/corpus/templates/design/changelog/2026-07-05-local-code-screens-keep-their-connection-when-duplicated-and.md +6 -0
- package/corpus/templates/design/changelog/2026-07-05-press-a-to-draw-screens-on-the-canvas-inside-a-screen-it-dr.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-3d-rotation-and-perspective-controls-on-every-element.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-ai-generated-and-duplicated-screens-now-get-their-editor-sel.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-applying-shaders-and-fills-in-quick-succession-can-no-longer.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-breakpoint-frames-in-the-overview-now-support-click-to-selec.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-breakpoint-segments-in-the-inspector-now-show-a-device-icon-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-breakpoint-targeting-now-lives-in-one-compact-control-in-the.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-canvas-edits-can-no-longer-be-overwritten-by-stale-collabora.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-canvas-edits-inside-screens-save-reliably-again.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-cleaner-inspector-removed-the-ask-ai-box-from-the-design-tab.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-clicking-empty-canvas-space-now-deselects-an-element-inside-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-dragging-an-element-onto-a-rectangle-now-nests-it-inside-wit.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-dragging-screens-and-objects-on-the-canvas-is-now-much-smoot.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-drawing-a-shape-or-text-on-the-canvas-no-longer-flashes-away.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-dropping-an-element-between-two-others-inside-a-screen-now-s.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-duplicating-a-screen-now-places-the-copy-exactly-where-you-d.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-edit-gradients-directly-on-elements-inside-screens-scale-str.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-edits-from-collaborators-and-the-agent-now-update-the-canvas.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-a-bug-where-most-style-position-and-text-edits-briefly.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-a-confusing-raw-error-message-when-a-file-upload-fails.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-a-rare-case-where-an-edit-could-be-silently-overwritte.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-inserted-assets-sometimes-disappearing-reappearing-or-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-inspector-value-scrubbing-producing-erratic-numbers-an.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-padding-gap-and-min-max-size-scrubbing-not-updating-th.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-text-stroke-color-turning-black-and-glyphs-disappearin.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-the-collapsed-effects-and-stroke-inspector-sections-sh.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-the-new-design-dialog-closing-unexpectedly-when-using-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-fixed-the-typography-section-missing-when-selecting-text-nes.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-full-view-no-longer-flashes-back-to-the-overview-on-entry-no.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-keyframe-animation-timeline-per-property-keyframes-easing-cu.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-moving-restyling-and-scrubbing-values-on-elements-in-ai-gene.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-padding-and-corner-radius-value-scrubbing-now-snaps-to-whole.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-padding-handles-now-only-resize-on-the-handle-line-itself-sh.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-preview-and-edit-hover-focus-and-pressed-states-with-real-cs.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-promoting-an-element-to-a-component-now-works-correctly-for-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-reduced-url-history-churn-and-selection-overlay-flicker-whil.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-removed-the-decorative-dot-before-screen-names-in-the-overvi.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-responsive-breakpoints-edit-at-any-width-with-cascading-over.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-screen-labels-no-longer-turn-blue-when-you-hover-inside-the-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-scrolling-a-screen-with-an-element-selected-stays-smooth-on-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-selecting-multiple-elements-and-dragging-now-moves-the-whole.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-selection-borders-handles-and-value-readouts-now-stay-the-sa.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-selection-handles-and-editing-chrome-now-stay-a-constant-siz.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-shader-fills-and-effects-ai-authored-or-preset-glsl-shaders-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-text-drawn-on-the-canvas-now-defaults-to-white-and-inter-in-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-text-dropped-into-a-shape-now-stays-readable-instead-of-disa.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-the-add-tweak-controls-prompt-no-longer-jumps-to-the-corner-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-the-padding-value-readout-now-stays-visible-while-you-hover-.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-the-selected-element-attachment-now-clears-from-the-chat-com.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-the-zoom-menu-is-more-compact-with-tight-rows-and-right-alig.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-undo-and-redo-no-longer-flash-the-screen-changes-now-apply-i.md +6 -0
- package/corpus/templates/design/changelog/2026-07-06-zoom-presets-like-zoom-to-50-now-stay-on-the-focused-screen-.md +6 -0
- package/corpus/templates/design/server/lib/import-design-files.ts +11 -2
- package/corpus/templates/design/server/source-workspace.ts +139 -59
- package/corpus/templates/design/shared/board-file.ts +11 -2
- package/corpus/templates/design/shared/breakpoint-media.ts +543 -0
- package/corpus/templates/design/shared/canvas-math.ts +354 -35
- package/corpus/templates/design/shared/code-layer.ts +277 -8
- package/corpus/templates/design/shared/design-state.ts +11 -4
- package/corpus/templates/design/shared/interaction-states.ts +548 -0
- package/corpus/templates/design/shared/motion-compiler.ts +186 -23
- package/corpus/templates/design/shared/motion-easing.ts +294 -0
- package/corpus/templates/design/shared/motion-timeline.ts +400 -34
- package/corpus/templates/design/shared/prompt-title.ts +95 -0
- package/corpus/templates/design/shared/responsive-classes.ts +448 -10
- package/corpus/templates/design/shared/screen-annotation.ts +46 -0
- package/corpus/templates/design/shared/shader-fills.ts +1009 -0
- package/corpus/templates/design/shared/shader-presets.ts +852 -4
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +15 -2
- package/corpus/templates/slides/app/components/editor/ImportButton.tsx +10 -1
- package/corpus/templates/slides/app/lib/upload-response.ts +71 -0
- package/dist/client/AgentPanel.js +1 -1
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/useCollabReconcile.js +11 -6
- package/dist/client/rich-markdown-editor/useCollabReconcile.js.map +1 -1
- package/dist/client/use-action.d.ts +3 -0
- package/dist/client/use-action.d.ts.map +1 -1
- package/dist/client/use-action.js +34 -3
- package/dist/client/use-action.js.map +1 -1
- package/dist/client/use-db-sync.d.ts +4 -0
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +37 -18
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/db/create-get-db.d.ts +25 -0
- package/dist/db/create-get-db.d.ts.map +1 -1
- package/dist/db/create-get-db.js +25 -2
- package/dist/db/create-get-db.js.map +1 -1
- package/dist/observability/routes.d.ts +3 -3
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +37 -1
- package/dist/server/framework-request-handler.js.map +1 -1
- package/package.json +1 -1
- package/corpus/templates/design/app/components/design/inspector/InspectorAiActions.tsx +0 -153
- package/corpus/templates/design/app/hooks/useAgentEditRequest.ts +0 -133
- package/corpus/templates/design/app/pages/DesignEditor.tsx +0 -22924
|
@@ -40,13 +40,20 @@ import {
|
|
|
40
40
|
IconSizingRemove,
|
|
41
41
|
IconSizingVariable,
|
|
42
42
|
} from "./design-icons";
|
|
43
|
-
import { ScrubInput } from "./ScrubInput";
|
|
43
|
+
import { ScrubInput, type ScrubInputChangeMeta } from "./ScrubInput";
|
|
44
44
|
|
|
45
45
|
export type AutoLayoutDirection = "horizontal" | "vertical";
|
|
46
46
|
export type AutoLayoutWrap = "nowrap" | "wrap";
|
|
47
47
|
export type AutoLayoutSizing = "hug" | "fill" | "fixed";
|
|
48
48
|
export type AutoLayoutSizingAxis = "horizontal" | "vertical";
|
|
49
49
|
|
|
50
|
+
/** Round to one decimal place — matches the `precision={1}` ScrubInput fields
|
|
51
|
+
* advertise (e.g. X/Y position, stroke weight) so W/H commit sub-pixel values
|
|
52
|
+
* like Figma instead of silently flooring to whole pixels. */
|
|
53
|
+
function roundToOneDecimal(value: number): number {
|
|
54
|
+
return Math.round(value * 10) / 10;
|
|
55
|
+
}
|
|
56
|
+
|
|
50
57
|
/**
|
|
51
58
|
* The active flow option. "normal" represents block / normal-flow layout for
|
|
52
59
|
* non-flex containers; the other four map to flex direction + wrap state.
|
|
@@ -146,8 +153,19 @@ export interface AutoLayoutMatrixProps {
|
|
|
146
153
|
onDirectionChange: (direction: AutoLayoutDirection) => void;
|
|
147
154
|
onWrapChange: (wrap: AutoLayoutWrap) => void;
|
|
148
155
|
onAlignmentChange: (alignment: AlignmentMatrixValue) => void;
|
|
149
|
-
|
|
150
|
-
|
|
156
|
+
/**
|
|
157
|
+
* `meta` forwards the originating ScrubInput's gesture metadata
|
|
158
|
+
* (phase "preview" per drag tick / "commit" on release) so consumers can
|
|
159
|
+
* route preview ticks to the live style fast path and only persist on
|
|
160
|
+
* commit — same contract as `onChildSizeChange`. Dropping it forces every
|
|
161
|
+
* scrub tick down the slow full-persist path (B5-14: padding scrubs showed
|
|
162
|
+
* nothing until reselect).
|
|
163
|
+
*/
|
|
164
|
+
onGapChange: (gap: number, meta?: ScrubInputChangeMeta) => void;
|
|
165
|
+
onPaddingChange: (
|
|
166
|
+
padding: AutoLayoutPadding,
|
|
167
|
+
meta?: ScrubInputChangeMeta,
|
|
168
|
+
) => void;
|
|
151
169
|
onPaddingLinkedChange: (linked: boolean) => void;
|
|
152
170
|
onClipContentChange?: (clipContent: boolean) => void;
|
|
153
171
|
onDistribute?: (axis: DistributionAxis) => void;
|
|
@@ -160,8 +178,14 @@ export interface AutoLayoutMatrixProps {
|
|
|
160
178
|
* Invoked when the user directly edits the resolved size (scrub or type) in
|
|
161
179
|
* fixed-sizing mode. `value` is the new size in CSS pixels. Optional —
|
|
162
180
|
* when omitted the resolved-size display is read-only (mode-picker only).
|
|
181
|
+
* `meta` forwards the originating ScrubInput's gesture-coalescing metadata
|
|
182
|
+
* (see `SizingFieldProps.onSizeChange`).
|
|
163
183
|
*/
|
|
164
|
-
onChildSizeChange?: (
|
|
184
|
+
onChildSizeChange?: (
|
|
185
|
+
axis: AutoLayoutSizingAxis,
|
|
186
|
+
value: number,
|
|
187
|
+
meta?: ScrubInputChangeMeta,
|
|
188
|
+
) => void;
|
|
165
189
|
/**
|
|
166
190
|
* Set or clear a min/max constraint on an axis. `value === null` clears it.
|
|
167
191
|
* Optional — when omitted the "Add min/max…" rows and constraint sub-rows are
|
|
@@ -171,6 +195,8 @@ export interface AutoLayoutMatrixProps {
|
|
|
171
195
|
axis: AutoLayoutSizingAxis,
|
|
172
196
|
kind: "min" | "max",
|
|
173
197
|
value: number | null,
|
|
198
|
+
/** Scrub gesture meta — see onPaddingChange. Absent for remove (null). */
|
|
199
|
+
meta?: ScrubInputChangeMeta,
|
|
174
200
|
) => void;
|
|
175
201
|
/**
|
|
176
202
|
* Invoked when the user picks "Apply variable…". Optional — when omitted the
|
|
@@ -403,7 +429,7 @@ export function AutoLayoutMatrix({
|
|
|
403
429
|
onChange={(next) => onChildSizingChange("horizontal", next)}
|
|
404
430
|
onSizeChange={
|
|
405
431
|
onChildSizeChange
|
|
406
|
-
? (px) => onChildSizeChange("horizontal", px)
|
|
432
|
+
? (px, meta) => onChildSizeChange("horizontal", px, meta)
|
|
407
433
|
: undefined
|
|
408
434
|
}
|
|
409
435
|
onMinMaxChange={onChildMinMaxChange}
|
|
@@ -425,7 +451,7 @@ export function AutoLayoutMatrix({
|
|
|
425
451
|
onChange={(next) => onChildSizingChange("vertical", next)}
|
|
426
452
|
onSizeChange={
|
|
427
453
|
onChildSizeChange
|
|
428
|
-
? (px) => onChildSizeChange("vertical", px)
|
|
454
|
+
? (px, meta) => onChildSizeChange("vertical", px, meta)
|
|
429
455
|
: undefined
|
|
430
456
|
}
|
|
431
457
|
onMinMaxChange={onChildMinMaxChange}
|
|
@@ -500,13 +526,16 @@ export function AutoLayoutMatrix({
|
|
|
500
526
|
icon={IconPaddingHorizontal}
|
|
501
527
|
ariaLabel={copy.paddingLeft + " / " + copy.paddingRight}
|
|
502
528
|
value={horizontalPaddingValue}
|
|
503
|
-
onChange={(next) =>
|
|
504
|
-
onPaddingChange(
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
529
|
+
onChange={(next, meta) =>
|
|
530
|
+
onPaddingChange(
|
|
531
|
+
{
|
|
532
|
+
top: value.padding.top,
|
|
533
|
+
bottom: value.padding.bottom,
|
|
534
|
+
left: next,
|
|
535
|
+
right: next,
|
|
536
|
+
},
|
|
537
|
+
meta,
|
|
538
|
+
)
|
|
510
539
|
}
|
|
511
540
|
disabled={disabled}
|
|
512
541
|
/>
|
|
@@ -514,13 +543,16 @@ export function AutoLayoutMatrix({
|
|
|
514
543
|
icon={IconPaddingVertical}
|
|
515
544
|
ariaLabel={copy.paddingTop + " / " + copy.paddingBottom}
|
|
516
545
|
value={verticalPaddingValue}
|
|
517
|
-
onChange={(next) =>
|
|
518
|
-
onPaddingChange(
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
546
|
+
onChange={(next, meta) =>
|
|
547
|
+
onPaddingChange(
|
|
548
|
+
{
|
|
549
|
+
top: next,
|
|
550
|
+
bottom: next,
|
|
551
|
+
left: value.padding.left,
|
|
552
|
+
right: value.padding.right,
|
|
553
|
+
},
|
|
554
|
+
meta,
|
|
555
|
+
)
|
|
524
556
|
}
|
|
525
557
|
disabled={disabled}
|
|
526
558
|
/>
|
|
@@ -540,8 +572,8 @@ export function AutoLayoutMatrix({
|
|
|
540
572
|
icon={IconPaddingTopMini}
|
|
541
573
|
ariaLabel={copy.paddingTop}
|
|
542
574
|
value={value.padding.top}
|
|
543
|
-
onChange={(next) =>
|
|
544
|
-
onPaddingChange({ ...value.padding, top: next })
|
|
575
|
+
onChange={(next, meta) =>
|
|
576
|
+
onPaddingChange({ ...value.padding, top: next }, meta)
|
|
545
577
|
}
|
|
546
578
|
disabled={disabled}
|
|
547
579
|
/>
|
|
@@ -549,8 +581,8 @@ export function AutoLayoutMatrix({
|
|
|
549
581
|
icon={IconPaddingRightMini}
|
|
550
582
|
ariaLabel={copy.paddingRight}
|
|
551
583
|
value={value.padding.right}
|
|
552
|
-
onChange={(next) =>
|
|
553
|
-
onPaddingChange({ ...value.padding, right: next })
|
|
584
|
+
onChange={(next, meta) =>
|
|
585
|
+
onPaddingChange({ ...value.padding, right: next }, meta)
|
|
554
586
|
}
|
|
555
587
|
disabled={disabled}
|
|
556
588
|
/>
|
|
@@ -558,8 +590,8 @@ export function AutoLayoutMatrix({
|
|
|
558
590
|
icon={IconPaddingBottomMini}
|
|
559
591
|
ariaLabel={copy.paddingBottom}
|
|
560
592
|
value={value.padding.bottom}
|
|
561
|
-
onChange={(next) =>
|
|
562
|
-
onPaddingChange({ ...value.padding, bottom: next })
|
|
593
|
+
onChange={(next, meta) =>
|
|
594
|
+
onPaddingChange({ ...value.padding, bottom: next }, meta)
|
|
563
595
|
}
|
|
564
596
|
disabled={disabled}
|
|
565
597
|
/>
|
|
@@ -567,8 +599,8 @@ export function AutoLayoutMatrix({
|
|
|
567
599
|
icon={IconPaddingLeftMini}
|
|
568
600
|
ariaLabel={copy.paddingLeft}
|
|
569
601
|
value={value.padding.left}
|
|
570
|
-
onChange={(next) =>
|
|
571
|
-
onPaddingChange({ ...value.padding, left: next })
|
|
602
|
+
onChange={(next, meta) =>
|
|
603
|
+
onPaddingChange({ ...value.padding, left: next }, meta)
|
|
572
604
|
}
|
|
573
605
|
disabled={disabled}
|
|
574
606
|
/>
|
|
@@ -894,7 +926,8 @@ function GapField({
|
|
|
894
926
|
gapMode = "fixed",
|
|
895
927
|
}: {
|
|
896
928
|
value: number;
|
|
897
|
-
|
|
929
|
+
/** Forwards ScrubInput's gesture meta — see AutoLayoutMatrixProps.onGapChange. */
|
|
930
|
+
onGapChange: (gap: number, meta?: ScrubInputChangeMeta) => void;
|
|
898
931
|
onDistribute?: (axis: DistributionAxis) => void;
|
|
899
932
|
onGapModeChange?: (mode: "fixed" | "auto", axis: DistributionAxis) => void;
|
|
900
933
|
label: string;
|
|
@@ -917,7 +950,7 @@ function GapField({
|
|
|
917
950
|
tooltipLabel={label}
|
|
918
951
|
icon={IconGap}
|
|
919
952
|
value={value}
|
|
920
|
-
onChange={(next) => onGapChange(next)}
|
|
953
|
+
onChange={(next, meta) => onGapChange(next, meta)}
|
|
921
954
|
unit="px"
|
|
922
955
|
min={0}
|
|
923
956
|
step={1}
|
|
@@ -1016,7 +1049,8 @@ function PaddingField({
|
|
|
1016
1049
|
icon: (props: { className?: string }) => ReactNode;
|
|
1017
1050
|
ariaLabel: string;
|
|
1018
1051
|
value: number;
|
|
1019
|
-
|
|
1052
|
+
/** Forwards ScrubInput's gesture meta — see AutoLayoutMatrixProps.onPaddingChange. */
|
|
1053
|
+
onChange: (value: number, meta?: ScrubInputChangeMeta) => void;
|
|
1020
1054
|
disabled: boolean;
|
|
1021
1055
|
}) {
|
|
1022
1056
|
return (
|
|
@@ -1032,7 +1066,7 @@ function PaddingField({
|
|
|
1032
1066
|
tooltipLabel={ariaLabel}
|
|
1033
1067
|
icon={Icon}
|
|
1034
1068
|
value={value}
|
|
1035
|
-
onChange={(next) => onChange(next)}
|
|
1069
|
+
onChange={(next, meta) => onChange(next, meta)}
|
|
1036
1070
|
unit="px"
|
|
1037
1071
|
min={0}
|
|
1038
1072
|
step={1}
|
|
@@ -1109,12 +1143,22 @@ export interface SizingFieldProps {
|
|
|
1109
1143
|
* Invoked when the user directly scrubs or types a new pixel value while in
|
|
1110
1144
|
* "fixed" sizing mode. When omitted the numeric display is read-only and the
|
|
1111
1145
|
* entire trigger is a mode-picker dropdown (legacy behaviour).
|
|
1146
|
+
*
|
|
1147
|
+
* `meta` mirrors the same `ScrubInputChangeMeta` the X/Y position fields
|
|
1148
|
+
* already forward to `onStyleChange` (see `ScrubStyleInput` in
|
|
1149
|
+
* EditPanel.tsx) — in particular `meta.phase`, which lets the caller
|
|
1150
|
+
* coalesce a whole scrub-drag gesture (many "preview" ticks + one final
|
|
1151
|
+
* "commit") into a single undo step instead of one per tick. Callers that
|
|
1152
|
+
* ignore the second argument keep today's every-tick-commits behavior.
|
|
1112
1153
|
*/
|
|
1113
|
-
onSizeChange?: (px: number) => void;
|
|
1154
|
+
onSizeChange?: (px: number, meta?: ScrubInputChangeMeta) => void;
|
|
1114
1155
|
onMinMaxChange?: (
|
|
1115
1156
|
axis: AutoLayoutSizingAxis,
|
|
1116
1157
|
kind: "min" | "max",
|
|
1117
1158
|
value: number | null,
|
|
1159
|
+
/** Scrub gesture meta — same contract as onSizeChange. Absent for
|
|
1160
|
+
* remove (null) and the discrete add-constraint seed. */
|
|
1161
|
+
meta?: ScrubInputChangeMeta,
|
|
1118
1162
|
) => void;
|
|
1119
1163
|
onApplyVariable?: (axis: AutoLayoutSizingAxis) => void;
|
|
1120
1164
|
}
|
|
@@ -1263,13 +1307,15 @@ export function SizingField({
|
|
|
1263
1307
|
ariaLabel={`${axis} size in pixels`}
|
|
1264
1308
|
tooltipLabel={`${axis} size`}
|
|
1265
1309
|
icon={null}
|
|
1266
|
-
value={mixed ? 0 :
|
|
1267
|
-
onChange={(next) =>
|
|
1310
|
+
value={mixed ? 0 : roundToOneDecimal(resolvedSize ?? 0)}
|
|
1311
|
+
onChange={(next, meta) =>
|
|
1312
|
+
onSizeChange!(Math.max(0, roundToOneDecimal(next)), meta)
|
|
1313
|
+
}
|
|
1268
1314
|
mixed={mixed}
|
|
1269
1315
|
unit="px"
|
|
1270
1316
|
min={0}
|
|
1271
1317
|
step={1}
|
|
1272
|
-
precision={
|
|
1318
|
+
precision={1}
|
|
1273
1319
|
disabled={disabled}
|
|
1274
1320
|
className="min-w-0 flex-1 gap-0"
|
|
1275
1321
|
labelClassName="h-7 w-5 justify-center gap-0 rounded-l-md rounded-r-none px-0 text-muted-foreground"
|
|
@@ -1358,7 +1404,9 @@ export function SizingField({
|
|
|
1358
1404
|
value={minValue ?? 0}
|
|
1359
1405
|
disabled={disabled}
|
|
1360
1406
|
removeLabel={labels.removeConstraint}
|
|
1361
|
-
onChange={(next) =>
|
|
1407
|
+
onChange={(next, meta) =>
|
|
1408
|
+
onMinMaxChange?.(sizingAxis, "min", next, meta)
|
|
1409
|
+
}
|
|
1362
1410
|
onRemove={() => {
|
|
1363
1411
|
onMinMaxChange?.(sizingAxis, "min", null);
|
|
1364
1412
|
}}
|
|
@@ -1370,7 +1418,9 @@ export function SizingField({
|
|
|
1370
1418
|
value={maxValue ?? 0}
|
|
1371
1419
|
disabled={disabled}
|
|
1372
1420
|
removeLabel={labels.removeConstraint}
|
|
1373
|
-
onChange={(next) =>
|
|
1421
|
+
onChange={(next, meta) =>
|
|
1422
|
+
onMinMaxChange?.(sizingAxis, "max", next, meta)
|
|
1423
|
+
}
|
|
1374
1424
|
onRemove={() => {
|
|
1375
1425
|
onMinMaxChange?.(sizingAxis, "max", null);
|
|
1376
1426
|
}}
|
|
@@ -1424,7 +1474,8 @@ function ConstraintSubRow({
|
|
|
1424
1474
|
value: number;
|
|
1425
1475
|
disabled: boolean;
|
|
1426
1476
|
removeLabel: string;
|
|
1427
|
-
|
|
1477
|
+
/** Forwards ScrubInput's gesture meta — see AutoLayoutMatrixProps.onChildMinMaxChange. */
|
|
1478
|
+
onChange: (value: number, meta?: ScrubInputChangeMeta) => void;
|
|
1428
1479
|
onRemove: () => void;
|
|
1429
1480
|
}) {
|
|
1430
1481
|
return (
|
|
@@ -1438,7 +1489,7 @@ function ConstraintSubRow({
|
|
|
1438
1489
|
label={label}
|
|
1439
1490
|
ariaLabel={label}
|
|
1440
1491
|
value={value}
|
|
1441
|
-
onChange={(next) => onChange(Math.max(0, Math.round(next)))}
|
|
1492
|
+
onChange={(next, meta) => onChange(Math.max(0, Math.round(next)), meta)}
|
|
1442
1493
|
unit="px"
|
|
1443
1494
|
min={0}
|
|
1444
1495
|
step={1}
|
package/corpus/templates/design/app/components/design/inspector/BreakpointOverrideIndicator.tsx
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BreakpointOverrideIndicator — per-field accent dot + reset affordance for
|
|
3
|
+
* a style-section field whose property is overridden at the currently
|
|
4
|
+
* active breakpoint. Mirrors `InteractionStateOverrideIndicator`'s
|
|
5
|
+
* "dot + reset" shape (see `InteractionStatePanel.tsx`) so the two
|
|
6
|
+
* override conventions (interaction state, breakpoint) read consistently
|
|
7
|
+
* across the inspector.
|
|
8
|
+
*
|
|
9
|
+
* This component owns ONLY the indicator's rendering — it has no opinion on
|
|
10
|
+
* how the override state is computed (see `getBreakpointOverrideState` in
|
|
11
|
+
* `@shared/breakpoint-media`) or how a reset is persisted (the caller wires
|
|
12
|
+
* `onReset` to commit through the normal `onStyleChange` path with
|
|
13
|
+
* `meta.breakpointReset`, per the `EditPanel` `StyleChangeMeta` contract).
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { useT } from "@agent-native/core/client";
|
|
17
|
+
|
|
18
|
+
import {
|
|
19
|
+
Tooltip,
|
|
20
|
+
TooltipContent,
|
|
21
|
+
TooltipTrigger,
|
|
22
|
+
} from "@/components/ui/tooltip";
|
|
23
|
+
import { cn } from "@/lib/utils";
|
|
24
|
+
|
|
25
|
+
export interface BreakpointOverrideIndicatorProps {
|
|
26
|
+
/** True when the active breakpoint has an override for this property. */
|
|
27
|
+
overridden: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* The width (px) the override is scoped to — used only for the tooltip
|
|
30
|
+
* copy ("Overridden at 810px"). Required whenever `overridden` is true.
|
|
31
|
+
*/
|
|
32
|
+
maxWidthPx?: number | null;
|
|
33
|
+
onReset?: () => void;
|
|
34
|
+
className?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function BreakpointOverrideIndicator({
|
|
38
|
+
overridden,
|
|
39
|
+
maxWidthPx,
|
|
40
|
+
onReset,
|
|
41
|
+
className,
|
|
42
|
+
}: BreakpointOverrideIndicatorProps) {
|
|
43
|
+
const t = useT();
|
|
44
|
+
if (!overridden) return null;
|
|
45
|
+
const tooltip =
|
|
46
|
+
maxWidthPx != null
|
|
47
|
+
? t("editPanel.breakpointOverride.overriddenAtTooltip", {
|
|
48
|
+
width: String(Math.round(maxWidthPx)),
|
|
49
|
+
})
|
|
50
|
+
: t("editPanel.breakpointOverride.overriddenTooltip");
|
|
51
|
+
return (
|
|
52
|
+
<span className={cn("inline-flex shrink-0 items-center", className)}>
|
|
53
|
+
<Tooltip>
|
|
54
|
+
<TooltipTrigger asChild>
|
|
55
|
+
<span
|
|
56
|
+
className="inline-block size-1.5 shrink-0 rounded-full bg-[var(--design-editor-accent-color)]"
|
|
57
|
+
role="img"
|
|
58
|
+
aria-label={tooltip}
|
|
59
|
+
/>
|
|
60
|
+
</TooltipTrigger>
|
|
61
|
+
<TooltipContent>{tooltip}</TooltipContent>
|
|
62
|
+
</Tooltip>
|
|
63
|
+
{onReset ? (
|
|
64
|
+
<Tooltip>
|
|
65
|
+
<TooltipTrigger asChild>
|
|
66
|
+
<button
|
|
67
|
+
type="button"
|
|
68
|
+
onClick={onReset}
|
|
69
|
+
className="ml-0.5 cursor-pointer text-[10px] font-medium text-muted-foreground hover:text-foreground"
|
|
70
|
+
aria-label={t("editPanel.breakpointOverride.reset")}
|
|
71
|
+
>
|
|
72
|
+
{t("editPanel.breakpointOverride.resetShort")}
|
|
73
|
+
</button>
|
|
74
|
+
</TooltipTrigger>
|
|
75
|
+
<TooltipContent>
|
|
76
|
+
{t("editPanel.breakpointOverride.resetTooltip")}
|
|
77
|
+
</TooltipContent>
|
|
78
|
+
</Tooltip>
|
|
79
|
+
) : null}
|
|
80
|
+
</span>
|
|
81
|
+
);
|
|
82
|
+
}
|