From 579492649d04ba3b9b4bb89a732897c29e47bcee Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Tue, 17 Mar 2026 10:16:34 +0300 Subject: [PATCH] Phase 6: FillPicker, GradientEditor, ExportControls headless primitives MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New SDK components: - FillPickerRoot — fill type category (solid/gradient/image), swatch background, category switching. Events via emit, not callback props. - GradientEditorRoot — stop state, subtype, add/remove/drag/select stops, active color, bar background. All stop mutations + color updates as action slot props. - ExportControlsRoot — export settings list, scale/format options, selected node name. Fixed callback props passed as :on-xxx across all SDK components: - ScrubInputRoot: :on-keydown → :keydown - FillPickerRoot: removed :on-update (consumers use @update on the component itself) - GradientEditorRoot: :on-active-color-update → :update-active-color, :on-stop-drag → :drag-stop --- .../src/ExportControls/ExportControlsRoot.vue | 66 +++++++++ packages/vue/src/ExportControls/index.ts | 1 + .../vue/src/FillPicker/FillPickerRoot.vue | 71 ++++++++++ packages/vue/src/FillPicker/index.ts | 1 + .../src/GradientEditor/GradientEditorRoot.vue | 126 ++++++++++++++++++ packages/vue/src/GradientEditor/index.ts | 1 + .../vue/src/ScrubInput/ScrubInputRoot.vue | 2 +- packages/vue/src/index.ts | 4 + 8 files changed, 271 insertions(+), 1 deletion(-) create mode 100644 packages/vue/src/ExportControls/ExportControlsRoot.vue create mode 100644 packages/vue/src/ExportControls/index.ts create mode 100644 packages/vue/src/FillPicker/FillPickerRoot.vue create mode 100644 packages/vue/src/FillPicker/index.ts create mode 100644 packages/vue/src/GradientEditor/GradientEditorRoot.vue create mode 100644 packages/vue/src/GradientEditor/index.ts diff --git a/packages/vue/src/ExportControls/ExportControlsRoot.vue b/packages/vue/src/ExportControls/ExportControlsRoot.vue new file mode 100644 index 000000000..6adebc71a --- /dev/null +++ b/packages/vue/src/ExportControls/ExportControlsRoot.vue @@ -0,0 +1,66 @@ + + + diff --git a/packages/vue/src/ExportControls/index.ts b/packages/vue/src/ExportControls/index.ts new file mode 100644 index 000000000..0787402bd --- /dev/null +++ b/packages/vue/src/ExportControls/index.ts @@ -0,0 +1 @@ +export { default as ExportControlsRoot } from './ExportControlsRoot.vue' diff --git a/packages/vue/src/FillPicker/FillPickerRoot.vue b/packages/vue/src/FillPicker/FillPickerRoot.vue new file mode 100644 index 000000000..ea8bf27fa --- /dev/null +++ b/packages/vue/src/FillPicker/FillPickerRoot.vue @@ -0,0 +1,71 @@ + + + diff --git a/packages/vue/src/FillPicker/index.ts b/packages/vue/src/FillPicker/index.ts new file mode 100644 index 000000000..554f42ad9 --- /dev/null +++ b/packages/vue/src/FillPicker/index.ts @@ -0,0 +1 @@ +export { default as FillPickerRoot } from './FillPickerRoot.vue' diff --git a/packages/vue/src/GradientEditor/GradientEditorRoot.vue b/packages/vue/src/GradientEditor/GradientEditorRoot.vue new file mode 100644 index 000000000..44f864190 --- /dev/null +++ b/packages/vue/src/GradientEditor/GradientEditorRoot.vue @@ -0,0 +1,126 @@ + + + diff --git a/packages/vue/src/GradientEditor/index.ts b/packages/vue/src/GradientEditor/index.ts new file mode 100644 index 000000000..c6212dbd7 --- /dev/null +++ b/packages/vue/src/GradientEditor/index.ts @@ -0,0 +1 @@ +export { default as GradientEditorRoot } from './GradientEditorRoot.vue' diff --git a/packages/vue/src/ScrubInput/ScrubInputRoot.vue b/packages/vue/src/ScrubInput/ScrubInputRoot.vue index e0c9d99ce..ace5b3497 100644 --- a/packages/vue/src/ScrubInput/ScrubInputRoot.vue +++ b/packages/vue/src/ScrubInput/ScrubInputRoot.vue @@ -120,7 +120,7 @@ provideScrubInput(ctx) :start-scrub="startScrub" :start-edit="startEdit" :commit-edit="commitEdit" - :on-keydown="onKeydown" + :keydown="onKeydown" :placeholder="props.placeholder" /> diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts index 70b466a0a..8920098e6 100644 --- a/packages/vue/src/index.ts +++ b/packages/vue/src/index.ts @@ -36,6 +36,10 @@ export { PositionControlsRoot } from './PositionControls' export { LayerTreeRoot, LayerTreeItem, useLayerTree } from './LayerTree' export { EditorMenuRoot } from './EditorMenu' + +export { FillPickerRoot } from './FillPicker' +export { GradientEditorRoot } from './GradientEditor' +export { ExportControlsRoot } from './ExportControls' export type { LayerTreeContext, LayerNode } from './LayerTree' export type { CanvasContext } from './Canvas'