@weasel-js/ui 1.7.0 → 1.7.1
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/dist/chunks/ActionBar-xA73vzzF.js +64 -0
- package/dist/chunks/ActionBar-xA73vzzF.js.map +1 -0
- package/dist/chunks/{Badge-D2aD7xVL.js → Badge-jYQjrTKc.js} +235 -264
- package/dist/chunks/{Badge-D2aD7xVL.js.map → Badge-jYQjrTKc.js.map} +1 -1
- package/dist/chunks/BandEditor-Dd0egAgE.js.map +1 -1
- package/dist/chunks/{Button-BIdXHQOx.js → Button-XB-T75YL.js} +2 -2
- package/dist/chunks/{Button-BIdXHQOx.js.map → Button-XB-T75YL.js.map} +1 -1
- package/dist/chunks/{ButtonBar-DIQTe5GQ.js → ButtonBar-CIMKPPRS.js} +7 -9
- package/dist/chunks/{ButtonBar-DIQTe5GQ.js.map → ButtonBar-CIMKPPRS.js.map} +1 -1
- package/dist/chunks/Callout-BUn0dP_S.js +115 -0
- package/dist/chunks/Callout-BUn0dP_S.js.map +1 -0
- package/dist/chunks/Checkbox-DFn-x0JO.js +37 -0
- package/dist/chunks/Checkbox-DFn-x0JO.js.map +1 -0
- package/dist/chunks/{CloseButton-C2J7wVfo.js → CloseButton-BmNmRVtb.js} +3 -3
- package/dist/chunks/{CloseButton-C2J7wVfo.js.map → CloseButton-BmNmRVtb.js.map} +1 -1
- package/dist/chunks/ColorField-BLs9fbeq.js +90 -0
- package/dist/chunks/ColorField-BLs9fbeq.js.map +1 -0
- package/dist/chunks/{ColorModeControl-BewxA0rX.js → ColorModeControl-DaVJ-SyX.js} +3 -3
- package/dist/chunks/{ColorModeControl-BewxA0rX.js.map → ColorModeControl-DaVJ-SyX.js.map} +1 -1
- package/dist/chunks/ComboBox-CuTLRmUg.js +138 -0
- package/dist/chunks/ComboBox-CuTLRmUg.js.map +1 -0
- package/dist/chunks/{CurveEditor-DUVjd25R.js → CurveEditor-jVBEqqdv.js} +90 -87
- package/dist/chunks/CurveEditor-jVBEqqdv.js.map +1 -0
- package/dist/chunks/{DataGrid-LZ2JgY2Y.js → DataGrid-BklgBqS0.js} +2 -2
- package/dist/chunks/{DataGrid-LZ2JgY2Y.js.map → DataGrid-BklgBqS0.js.map} +1 -1
- package/dist/chunks/{DetailList-BKomDzg5.js → DetailList-DFtqdOJj.js} +7 -7
- package/dist/chunks/DetailList-DFtqdOJj.js.map +1 -0
- package/dist/chunks/{DetentSlider-5uQPFucv.js → DetentSlider-Bh7EpMqT.js} +2 -2
- package/dist/chunks/{DetentSlider-5uQPFucv.js.map → DetentSlider-Bh7EpMqT.js.map} +1 -1
- package/dist/chunks/{Dialog-DGFutQ--.js → Dialog-DKfsk5VN.js} +3 -3
- package/dist/chunks/{Dialog-DGFutQ--.js.map → Dialog-DKfsk5VN.js.map} +1 -1
- package/dist/chunks/{DragGhost-B5_hb9W9.js → DragGhost-BeYDJyLZ.js} +2 -2
- package/dist/chunks/{DragGhost-B5_hb9W9.js.map → DragGhost-BeYDJyLZ.js.map} +1 -1
- package/dist/chunks/{FallthroughDiagram-BEHiM5IS.js → FallthroughDiagram-C7BUe8eU.js} +3 -3
- package/dist/chunks/{FallthroughDiagram-BEHiM5IS.js.map → FallthroughDiagram-C7BUe8eU.js.map} +1 -1
- package/dist/chunks/Field-DsBlnFKf.js +25 -0
- package/dist/chunks/Field-DsBlnFKf.js.map +1 -0
- package/dist/chunks/FillStrokeSwatch-CgsYQgew.js +112 -0
- package/dist/chunks/FillStrokeSwatch-CgsYQgew.js.map +1 -0
- package/dist/chunks/{FontFamilySelect-DkRgNtag.js → FontFamilySelect-CGJ5OIOy.js} +2 -2
- package/dist/chunks/FontFamilySelect-CGJ5OIOy.js.map +1 -0
- package/dist/chunks/FontWeightSelect-RbcXYJPS.js +49 -0
- package/dist/chunks/FontWeightSelect-RbcXYJPS.js.map +1 -0
- package/dist/chunks/{GestureRoute-C_YGl7bJ.js → GestureRoute-BXESrHI0.js} +2 -2
- package/dist/chunks/{GestureRoute-C_YGl7bJ.js.map → GestureRoute-BXESrHI0.js.map} +1 -1
- package/dist/chunks/GradientEditor-DypXzMc-.js +325 -0
- package/dist/chunks/GradientEditor-DypXzMc-.js.map +1 -0
- package/dist/chunks/{Icon-CcVjdq2C.js → Icon--B1ME-6c.js} +3 -1
- package/dist/chunks/Icon--B1ME-6c.js.map +1 -0
- package/dist/chunks/{Input-CHmkfYaD.js → Input-CzwvCZs_.js} +10 -15
- package/dist/chunks/Input-CzwvCZs_.js.map +1 -0
- package/dist/chunks/{ItemList-Cm-HUWCi.js → ItemList-CRu9y7hL.js} +2 -2
- package/dist/chunks/ItemList-CRu9y7hL.js.map +1 -0
- package/dist/chunks/{Jog-DRmfrkCg.js → Jog-DfNUYejm.js} +8 -8
- package/dist/chunks/Jog-DfNUYejm.js.map +1 -0
- package/dist/chunks/{LayerList-wCI1EueM.js → LayerList-CsDqwYh-.js} +151 -153
- package/dist/chunks/LayerList-CsDqwYh-.js.map +1 -0
- package/dist/chunks/ListEditor-BnGzqERm.js +72 -0
- package/dist/chunks/ListEditor-BnGzqERm.js.map +1 -0
- package/dist/chunks/MenuButton-L9f5vido.js +75 -0
- package/dist/chunks/MenuButton-L9f5vido.js.map +1 -0
- package/dist/chunks/MeshEditor-GbqqiPk8.js +199 -0
- package/dist/chunks/MeshEditor-GbqqiPk8.js.map +1 -0
- package/dist/chunks/{NumberField-BnJxcazc.js → NumberField-DLXXgh48.js} +26 -23
- package/dist/chunks/NumberField-DLXXgh48.js.map +1 -0
- package/dist/chunks/{OptionsBar-ujxYidhj.js → OptionsBar-DeTAjVb7.js} +6 -8
- package/dist/chunks/{OptionsBar-ujxYidhj.js.map → OptionsBar-DeTAjVb7.js.map} +1 -1
- package/dist/chunks/PaintField-C0hoXc0Y.js +63 -0
- package/dist/chunks/PaintField-C0hoXc0Y.js.map +1 -0
- package/dist/chunks/PaintInput-jQRxM95Y.js +132 -0
- package/dist/chunks/PaintInput-jQRxM95Y.js.map +1 -0
- package/dist/chunks/PatternPicker-CaMYXzhF.js +135 -0
- package/dist/chunks/PatternPicker-CaMYXzhF.js.map +1 -0
- package/dist/chunks/{Plot2D-CTXHkL5p.js → Plot2D-BHNbgCAl.js} +7 -7
- package/dist/chunks/Plot2D-BHNbgCAl.js.map +1 -0
- package/dist/chunks/{PointPlotter-ldI4RrU1.js → PointPlotter-BZ_vk6gV.js} +2 -2
- package/dist/chunks/{PointPlotter-ldI4RrU1.js.map → PointPlotter-BZ_vk6gV.js.map} +1 -1
- package/dist/chunks/{Powerline-DNyH885r.js → Powerline-6wIFmDik.js} +2 -2
- package/dist/chunks/{Powerline-DNyH885r.js.map → Powerline-6wIFmDik.js.map} +1 -1
- package/dist/chunks/{Prefs-ByA-x51i.js → Prefs-CkyldX-e.js} +83 -70
- package/dist/chunks/Prefs-CkyldX-e.js.map +1 -0
- package/dist/chunks/{Properties-DmAeQ3mk.js → Properties-D15c8NP-.js} +25 -25
- package/dist/chunks/{Properties-DmAeQ3mk.js.map → Properties-D15c8NP-.js.map} +1 -1
- package/dist/chunks/PropertyField-CV_Gw57S.js +686 -0
- package/dist/chunks/PropertyField-CV_Gw57S.js.map +1 -0
- package/dist/chunks/{RadioGroup-Bh4-12e-.js → RadioGroup-4dbzqvGy.js} +2 -2
- package/dist/chunks/{RadioGroup-Bh4-12e-.js.map → RadioGroup-4dbzqvGy.js.map} +1 -1
- package/dist/chunks/{RangeSlider-SEGE-7VF.js → RangeSlider-BxokZViJ.js} +8 -8
- package/dist/chunks/RangeSlider-BxokZViJ.js.map +1 -0
- package/dist/chunks/RecentColorsProvider-DHcfk25u.js +84 -0
- package/dist/chunks/RecentColorsProvider-DHcfk25u.js.map +1 -0
- package/dist/chunks/ResizeHandle-CbAgCQOt.js +81 -0
- package/dist/chunks/ResizeHandle-CbAgCQOt.js.map +1 -0
- package/dist/chunks/Select-BppLsJTz.js +236 -0
- package/dist/chunks/Select-BppLsJTz.js.map +1 -0
- package/dist/chunks/{SelectionPanel-BaQnX4Bs.js → SelectionPanel-Cm1qu-ZX.js} +14 -13
- package/dist/chunks/{SelectionPanel-BaQnX4Bs.js.map → SelectionPanel-Cm1qu-ZX.js.map} +1 -1
- package/dist/chunks/{SidebarPanel-BblDEz4G.js → SidebarPanel-AXQ0jRDx.js} +2 -2
- package/dist/chunks/{SidebarPanel-BblDEz4G.js.map → SidebarPanel-AXQ0jRDx.js.map} +1 -1
- package/dist/chunks/{Slider-YofwGOI4.js → Slider-Cl5RCeZ7.js} +19 -19
- package/dist/chunks/Slider-Cl5RCeZ7.js.map +1 -0
- package/dist/chunks/SwatchGrid-9ZPiDmxd.js +78 -0
- package/dist/chunks/SwatchGrid-9ZPiDmxd.js.map +1 -0
- package/dist/chunks/SwatchStrip-Cw0l8Om7.js +577 -0
- package/dist/chunks/SwatchStrip-Cw0l8Om7.js.map +1 -0
- package/dist/chunks/{ThemeSwitcher-BlsInAmR.js → ThemeSwitcher-DiBmMh_B.js} +3 -3
- package/dist/chunks/{ThemeSwitcher-BlsInAmR.js.map → ThemeSwitcher-DiBmMh_B.js.map} +1 -1
- package/dist/chunks/{Timeline-B39cwfMB.js → Timeline-pqnYk5cV.js} +244 -246
- package/dist/chunks/Timeline-pqnYk5cV.js.map +1 -0
- package/dist/chunks/Toast-C3ozq11V.js +170 -0
- package/dist/chunks/Toast-C3ozq11V.js.map +1 -0
- package/dist/chunks/{ToggleBar-BTYkBXU9.js → ToggleBar-Z2jZiguF.js} +6 -8
- package/dist/chunks/{ToggleBar-BTYkBXU9.js.map → ToggleBar-Z2jZiguF.js.map} +1 -1
- package/dist/chunks/{TokenPanel-CMDAOfYH.js → TokenPanel-DAkL6vwQ.js} +32 -32
- package/dist/chunks/TokenPanel-DAkL6vwQ.js.map +1 -0
- package/dist/chunks/{ToolButton-CAHBa08P.js → ToolButton-BURp4YIO.js} +7 -9
- package/dist/chunks/ToolButton-BURp4YIO.js.map +1 -0
- package/dist/chunks/{ToolOptionsBar-D_GCrBAN.js → ToolOptionsBar-COsTJ1cu.js} +3 -2
- package/dist/chunks/{ToolOptionsBar-D_GCrBAN.js.map → ToolOptionsBar-COsTJ1cu.js.map} +1 -1
- package/dist/chunks/{ToolPalette-OOWN51Xx.js → ToolPalette-DKDFWOX-.js} +7 -9
- package/dist/chunks/{ToolPalette-OOWN51Xx.js.map → ToolPalette-DKDFWOX-.js.map} +1 -1
- package/dist/chunks/{Tooltip-Clg2mhSt.js → Tooltip-C6eFCYxw.js} +2 -2
- package/dist/chunks/{Tooltip-Clg2mhSt.js.map → Tooltip-C6eFCYxw.js.map} +1 -1
- package/dist/chunks/Tree-Cc8lIzgM.js.map +1 -1
- package/dist/chunks/checkbox.module-DLQV9tMX.js +5 -0
- package/dist/chunks/checkbox.module-DLQV9tMX.js.map +1 -0
- package/dist/chunks/{createKeyframeLayer-DVl321_l.js → createKeyframeLayer-BTa4LyJE.js} +194 -208
- package/dist/chunks/createKeyframeLayer-BTa4LyJE.js.map +1 -0
- package/dist/chunks/field.module-Bh7BTKMh.js +15 -0
- package/dist/chunks/field.module-Bh7BTKMh.js.map +1 -0
- package/dist/chunks/formatShortcut-DRQrVThu.js.map +1 -1
- package/dist/chunks/handles-CqVANLtu.js +17 -0
- package/dist/chunks/handles-CqVANLtu.js.map +1 -0
- package/dist/chunks/{icons-BhcR1l64.js → icons-Dr2-r30x.js} +2 -2
- package/dist/chunks/icons-Dr2-r30x.js.map +1 -0
- package/dist/chunks/listbox.module-BcdVJMbm.js +8 -0
- package/dist/chunks/listbox.module-BcdVJMbm.js.map +1 -0
- package/dist/chunks/model-B1-gMBIW.js +386 -0
- package/dist/chunks/model-B1-gMBIW.js.map +1 -0
- package/dist/chunks/{portalHost-yTOVuCej.js → portalHost-CE70wLzo.js} +10 -6
- package/dist/chunks/portalHost-CE70wLzo.js.map +1 -0
- package/dist/chunks/prefField-BE_Ytr2H.js +229 -0
- package/dist/chunks/prefField-BE_Ytr2H.js.map +1 -0
- package/dist/chunks/{segmentTooltip-CStYHKzd.js → segmentTooltip-CGxCOWNz.js} +2 -2
- package/dist/chunks/{segmentTooltip-CStYHKzd.js.map → segmentTooltip-CGxCOWNz.js.map} +1 -1
- package/dist/chunks/segmentedControl.module-BzGXUL5G.js +11 -0
- package/dist/chunks/segmentedControl.module-BzGXUL5G.js.map +1 -0
- package/dist/chunks/useReorderDragList-CStYKjHl.js +133 -0
- package/dist/chunks/useReorderDragList-CStYKjHl.js.map +1 -0
- package/dist/chunks/useRovingTabIndex-D7u22Ia_.js +91 -0
- package/dist/chunks/useRovingTabIndex-D7u22Ia_.js.map +1 -0
- package/dist/components/ActionBar/ActionBar.d.ts.map +1 -1
- package/dist/components/ActionBar/index.js +1 -1
- package/dist/components/Badge/bases/ChamferedRect.d.ts.map +1 -1
- package/dist/components/Badge/index.js +1 -1
- package/dist/components/BandEditor/BandEditor.d.ts +1 -0
- package/dist/components/BandEditor/BandEditor.d.ts.map +1 -1
- package/dist/components/Button/index.js +1 -1
- package/dist/components/ButtonBar/ButtonBar.d.ts.map +1 -1
- package/dist/components/ButtonBar/index.js +1 -1
- package/dist/components/Callout/Callout.d.ts.map +1 -1
- package/dist/components/Callout/index.js +1 -1
- package/dist/components/Checkbox/Checkbox.d.ts +28 -13
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/Checkbox/index.js +1 -1
- package/dist/components/CloseButton/index.js +1 -1
- package/dist/components/ColorField/ColorField.d.ts.map +1 -1
- package/dist/components/ColorField/OpacityRange.d.ts +18 -0
- package/dist/components/ColorField/OpacityRange.d.ts.map +1 -0
- package/dist/components/ColorField/index.js +1 -1
- package/dist/components/ColorModeControl/index.js +1 -1
- package/dist/components/ComboBox/ComboBox.d.ts +7 -0
- package/dist/components/ComboBox/ComboBox.d.ts.map +1 -1
- package/dist/components/ComboBox/index.js +1 -1
- package/dist/components/CurveEditor/CurveEditor.d.ts.map +1 -1
- package/dist/components/CurveEditor/LayeredCurveEditor.d.ts.map +1 -1
- package/dist/components/CurveEditor/index.js +2 -2
- package/dist/components/DataGrid/index.js +1 -1
- package/dist/components/DetailList/index.js +1 -1
- package/dist/components/DetentSlider/index.js +1 -1
- package/dist/components/Dialog/index.js +1 -1
- package/dist/components/DragGhost/index.js +1 -1
- package/dist/components/FallthroughDiagram/index.js +1 -1
- package/dist/components/Field/index.js +1 -1
- package/dist/components/FillStrokeSwatch/FillStrokeSwatch.d.ts.map +1 -1
- package/dist/components/FillStrokeSwatch/index.js +1 -1
- package/dist/components/FontFamilySelect/FontFamilySelect.d.ts +20 -0
- package/dist/components/FontFamilySelect/FontFamilySelect.d.ts.map +1 -1
- package/dist/components/FontFamilySelect/index.js +1 -1
- package/dist/components/FontWeightSelect/FontWeightSelect.d.ts +26 -0
- package/dist/components/FontWeightSelect/FontWeightSelect.d.ts.map +1 -0
- package/dist/components/FontWeightSelect/index.d.ts +3 -0
- package/dist/components/FontWeightSelect/index.d.ts.map +1 -0
- package/dist/components/FontWeightSelect/index.js +2 -0
- package/dist/components/GestureRoute/index.js +1 -1
- package/dist/components/GradientEditor/GradientHandles.d.ts +1 -8
- package/dist/components/GradientEditor/GradientHandles.d.ts.map +1 -1
- package/dist/components/GradientEditor/SceneGradientHandles.d.ts +7 -5
- package/dist/components/GradientEditor/SceneGradientHandles.d.ts.map +1 -1
- package/dist/components/GradientEditor/handleOverlay.d.ts +41 -0
- package/dist/components/GradientEditor/handleOverlay.d.ts.map +1 -0
- package/dist/components/GradientEditor/index.js +1 -1
- package/dist/components/Input/Input.d.ts +1 -1
- package/dist/components/Input/Input.d.ts.map +1 -1
- package/dist/components/Input/index.js +1 -1
- package/dist/components/ItemList/ItemList.d.ts +32 -31
- package/dist/components/ItemList/ItemList.d.ts.map +1 -1
- package/dist/components/ItemList/index.js +1 -1
- package/dist/components/Jog/index.js +1 -1
- package/dist/components/LayerList/LayerList.d.ts.map +1 -1
- package/dist/components/LayerList/index.js +1 -1
- package/dist/components/ListEditor/ListEditor.d.ts.map +1 -1
- package/dist/components/ListEditor/index.js +1 -1
- package/dist/components/MenuButton/MenuButton.d.ts.map +1 -1
- package/dist/components/MenuButton/index.js +1 -1
- package/dist/components/MeshEditor/MeshEditor.d.ts +4 -3
- package/dist/components/MeshEditor/MeshEditor.d.ts.map +1 -1
- package/dist/components/MeshEditor/MeshHandles.d.ts +38 -0
- package/dist/components/MeshEditor/MeshHandles.d.ts.map +1 -0
- package/dist/components/MeshEditor/index.d.ts +2 -0
- package/dist/components/MeshEditor/index.d.ts.map +1 -1
- package/dist/components/MeshEditor/index.js +2 -2
- package/dist/components/NumberField/NumberField.d.ts +1 -1
- package/dist/components/NumberField/NumberField.d.ts.map +1 -1
- package/dist/components/NumberField/index.js +1 -1
- package/dist/components/OptionsBar/OptionsBar.d.ts.map +1 -1
- package/dist/components/OptionsBar/index.js +1 -1
- package/dist/components/PaintField/PaintField.d.ts.map +1 -1
- package/dist/components/PaintField/index.js +1 -1
- package/dist/components/PaintInput/PaintInput.d.ts.map +1 -1
- package/dist/components/PaintInput/index.js +1 -1
- package/dist/components/PatternPicker/PatternPicker.d.ts +6 -5
- package/dist/components/PatternPicker/PatternPicker.d.ts.map +1 -1
- package/dist/components/PatternPicker/index.js +1 -1
- package/dist/components/Plot2D/index.js +1 -1
- package/dist/components/PointPlotter/index.js +1 -1
- package/dist/components/Powerline/index.js +2 -2
- package/dist/components/Prefs/PrefsForm.d.ts +8 -0
- package/dist/components/Prefs/PrefsForm.d.ts.map +1 -1
- package/dist/components/Prefs/PrefsRail.d.ts +3 -2
- package/dist/components/Prefs/PrefsRail.d.ts.map +1 -1
- package/dist/components/Prefs/index.js +2 -2
- package/dist/components/Prefs/prefField.d.ts +13 -0
- package/dist/components/Prefs/prefField.d.ts.map +1 -1
- package/dist/components/Properties/PropertyField.d.ts +13 -2
- package/dist/components/Properties/PropertyField.d.ts.map +1 -1
- package/dist/components/Properties/index.js +3 -3
- package/dist/components/RadioGroup/index.js +1 -1
- package/dist/components/RangeSlider/index.js +1 -1
- package/dist/components/RecentColors/RecentColorsProvider.d.ts +24 -0
- package/dist/components/RecentColors/RecentColorsProvider.d.ts.map +1 -0
- package/dist/components/RecentColors/index.d.ts +5 -0
- package/dist/components/RecentColors/index.d.ts.map +1 -0
- package/dist/components/RecentColors/index.js +2 -0
- package/dist/components/RecentColors/recentColors.d.ts +39 -0
- package/dist/components/RecentColors/recentColors.d.ts.map +1 -0
- package/dist/components/ResizeHandle/ResizeHandle.d.ts.map +1 -1
- package/dist/components/ResizeHandle/index.js +1 -1
- package/dist/components/Select/Select.d.ts +6 -2
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/index.js +1 -1
- package/dist/components/SelectionPanel/index.js +2 -2
- package/dist/components/SelectionPanel/renderLeaf.d.ts +12 -2
- package/dist/components/SelectionPanel/renderLeaf.d.ts.map +1 -1
- package/dist/components/SidebarPanel/index.js +1 -1
- package/dist/components/Slider/index.js +1 -1
- package/dist/components/SwatchGrid/SwatchGrid.d.ts.map +1 -1
- package/dist/components/SwatchGrid/index.js +1 -1
- package/dist/components/SwatchStrip/SwatchStrip.d.ts +44 -0
- package/dist/components/SwatchStrip/SwatchStrip.d.ts.map +1 -0
- package/dist/components/SwatchStrip/index.d.ts +5 -0
- package/dist/components/SwatchStrip/index.d.ts.map +1 -0
- package/dist/components/SwatchStrip/index.js +2 -0
- package/dist/components/SwatchStrip/palettes.d.ts +21 -0
- package/dist/components/SwatchStrip/palettes.d.ts.map +1 -0
- package/dist/components/ThemeSwitcher/index.js +1 -1
- package/dist/components/Timeline/AnimatedTimeline.d.ts +1 -0
- package/dist/components/Timeline/AnimatedTimeline.d.ts.map +1 -1
- package/dist/components/Timeline/EasingPicker.d.ts +3 -0
- package/dist/components/Timeline/EasingPicker.d.ts.map +1 -1
- package/dist/components/Timeline/LaneGraph.d.ts +1 -1
- package/dist/components/Timeline/LaneGraph.d.ts.map +1 -1
- package/dist/components/Timeline/Timeline.d.ts +10 -1
- package/dist/components/Timeline/Timeline.d.ts.map +1 -1
- package/dist/components/Timeline/Transport.d.ts +6 -0
- package/dist/components/Timeline/Transport.d.ts.map +1 -1
- package/dist/components/Timeline/index.js +1 -1
- package/dist/components/Timeline/keys.d.ts +1 -0
- package/dist/components/Timeline/keys.d.ts.map +1 -1
- package/dist/components/Toast/Toast.d.ts +12 -3
- package/dist/components/Toast/Toast.d.ts.map +1 -1
- package/dist/components/Toast/index.js +1 -1
- package/dist/components/ToggleBar/ToggleBar.d.ts.map +1 -1
- package/dist/components/ToggleBar/index.js +1 -1
- package/dist/components/TokenPanel/index.js +1 -1
- package/dist/components/TokenPanel/tokenTypes.d.ts +1 -0
- package/dist/components/TokenPanel/tokenTypes.d.ts.map +1 -1
- package/dist/components/ToolButton/ToolButton.d.ts +1 -10
- package/dist/components/ToolButton/ToolButton.d.ts.map +1 -1
- package/dist/components/ToolButton/index.js +1 -1
- package/dist/components/ToolOptionsBar/index.js +1 -1
- package/dist/components/ToolPalette/ToolPalette.d.ts.map +1 -1
- package/dist/components/ToolPalette/formatShortcut.d.ts +2 -0
- package/dist/components/ToolPalette/formatShortcut.d.ts.map +1 -1
- package/dist/components/ToolPalette/index.js +1 -1
- package/dist/components/Tooltip/index.js +1 -1
- package/dist/components/Tree/Tree.d.ts +27 -26
- package/dist/components/Tree/Tree.d.ts.map +1 -1
- package/dist/icons/index.d.ts +51 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/paths.d.ts +2 -0
- package/dist/icons/paths.d.ts.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -95
- package/dist/index.js.map +1 -1
- package/dist/overlays/portalHost.d.ts +6 -0
- package/dist/overlays/portalHost.d.ts.map +1 -1
- package/dist/style.css +1 -1
- package/dist/useAsyncOptions.d.ts.map +1 -1
- package/dist/useReorderDragList.d.ts.map +1 -1
- package/dist/useRovingTabIndex.d.ts +40 -39
- package/dist/useRovingTabIndex.d.ts.map +1 -1
- package/package.json +9 -9
- package/dist/chunks/ActionBar-DCq16yFA.js +0 -57
- package/dist/chunks/ActionBar-DCq16yFA.js.map +0 -1
- package/dist/chunks/Callout-ndW5_Bqx.js +0 -116
- package/dist/chunks/Callout-ndW5_Bqx.js.map +0 -1
- package/dist/chunks/Checkbox-DHXTUHO9.js +0 -47
- package/dist/chunks/Checkbox-DHXTUHO9.js.map +0 -1
- package/dist/chunks/ColorField-Yz_BkcCT.js +0 -69
- package/dist/chunks/ColorField-Yz_BkcCT.js.map +0 -1
- package/dist/chunks/ComboBox-B34H76CW.js +0 -138
- package/dist/chunks/ComboBox-B34H76CW.js.map +0 -1
- package/dist/chunks/CurveEditor-DUVjd25R.js.map +0 -1
- package/dist/chunks/DetailList-BKomDzg5.js.map +0 -1
- package/dist/chunks/Field--onYxXTF.js +0 -32
- package/dist/chunks/Field--onYxXTF.js.map +0 -1
- package/dist/chunks/FillStrokeSwatch-DNb0KXPk.js +0 -111
- package/dist/chunks/FillStrokeSwatch-DNb0KXPk.js.map +0 -1
- package/dist/chunks/FontFamilySelect-DkRgNtag.js.map +0 -1
- package/dist/chunks/GradientEditor-b7v4Ph3i.js +0 -363
- package/dist/chunks/GradientEditor-b7v4Ph3i.js.map +0 -1
- package/dist/chunks/Icon-CcVjdq2C.js.map +0 -1
- package/dist/chunks/Input-CHmkfYaD.js.map +0 -1
- package/dist/chunks/ItemList-Cm-HUWCi.js.map +0 -1
- package/dist/chunks/Jog-DRmfrkCg.js.map +0 -1
- package/dist/chunks/LayerList-wCI1EueM.js.map +0 -1
- package/dist/chunks/ListEditor-BeA60TAA.js +0 -71
- package/dist/chunks/ListEditor-BeA60TAA.js.map +0 -1
- package/dist/chunks/MenuButton-BSqEChJE.js +0 -70
- package/dist/chunks/MenuButton-BSqEChJE.js.map +0 -1
- package/dist/chunks/MeshEditor-D1HLZcAh.js +0 -87
- package/dist/chunks/MeshEditor-D1HLZcAh.js.map +0 -1
- package/dist/chunks/NumberField-BnJxcazc.js.map +0 -1
- package/dist/chunks/PaintField-DadOELMg.js +0 -62
- package/dist/chunks/PaintField-DadOELMg.js.map +0 -1
- package/dist/chunks/PaintInput-v8Y7MDbH.js +0 -121
- package/dist/chunks/PaintInput-v8Y7MDbH.js.map +0 -1
- package/dist/chunks/PatternPicker-R_EQtw2Q.js +0 -93
- package/dist/chunks/PatternPicker-R_EQtw2Q.js.map +0 -1
- package/dist/chunks/Plot2D-CTXHkL5p.js.map +0 -1
- package/dist/chunks/Prefs-ByA-x51i.js.map +0 -1
- package/dist/chunks/PropertyField-DfIJJ5GS.js +0 -673
- package/dist/chunks/PropertyField-DfIJJ5GS.js.map +0 -1
- package/dist/chunks/RangeSlider-SEGE-7VF.js.map +0 -1
- package/dist/chunks/ResizeHandle-rKVWyeTG.js +0 -79
- package/dist/chunks/ResizeHandle-rKVWyeTG.js.map +0 -1
- package/dist/chunks/Select-ClmKtyWg.js +0 -229
- package/dist/chunks/Select-ClmKtyWg.js.map +0 -1
- package/dist/chunks/Slider-YofwGOI4.js.map +0 -1
- package/dist/chunks/SwatchGrid-BYvA8Bmh.js +0 -73
- package/dist/chunks/SwatchGrid-BYvA8Bmh.js.map +0 -1
- package/dist/chunks/Timeline-B39cwfMB.js.map +0 -1
- package/dist/chunks/Toast-BF9GE0HC.js +0 -126
- package/dist/chunks/Toast-BF9GE0HC.js.map +0 -1
- package/dist/chunks/TokenPanel-CMDAOfYH.js.map +0 -1
- package/dist/chunks/ToolButton-CAHBa08P.js.map +0 -1
- package/dist/chunks/createKeyframeLayer-DVl321_l.js.map +0 -1
- package/dist/chunks/icons-BhcR1l64.js.map +0 -1
- package/dist/chunks/model-BaF65rnX.js +0 -365
- package/dist/chunks/model-BaF65rnX.js.map +0 -1
- package/dist/chunks/portalHost-yTOVuCej.js.map +0 -1
- package/dist/chunks/prefField-BopW9bjx.js +0 -201
- package/dist/chunks/prefField-BopW9bjx.js.map +0 -1
- package/dist/chunks/segmentedControl.module-D6SzYJD7.js +0 -11
- package/dist/chunks/segmentedControl.module-D6SzYJD7.js.map +0 -1
- package/dist/chunks/useReorderDragList-FCMoFIzH.js +0 -131
- package/dist/chunks/useReorderDragList-FCMoFIzH.js.map +0 -1
- package/dist/chunks/useRovingTabIndex-Bp_hYm_h.js +0 -65
- package/dist/chunks/useRovingTabIndex-Bp_hYm_h.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FontWeightSelect-RbcXYJPS.js","names":["Select","CSS_WEIGHTS","NAMES","fontWeightLabel","name","weight","FontWeightSelect","props","registered","family","listFontWeights","weights","value","mixed","options","a","b","w","onChange","key"],"sources":["../../src/components/FontWeightSelect/FontWeightSelect.tsx"],"sourcesContent":["import { listFontWeights } from '@weasel-js/font';\nimport { Select } from '../Select';\n\n/** Props for {@link FontWeightSelect}. */\nexport interface FontWeightSelectProps {\n /** Current weight, or `undefined` when the sources disagree (`mixed`). */\n value?: number;\n /** Indeterminate presentation — the aggregated sources differ in weight. */\n mixed?: boolean;\n /** The family whose weights to offer. Absent offers the CSS weights. */\n family?: string;\n onChange: (weight: number) => void;\n 'aria-label'?: string;\n className?: string;\n}\n\nconst CSS_WEIGHTS = [100, 200, 300, 400, 500, 600, 700, 800, 900] as const;\n\nconst NAMES: Readonly<Record<number, string>> = {\n 100: 'Thin',\n 200: 'Extra Light',\n 300: 'Light',\n 400: 'Regular',\n 500: 'Medium',\n 600: 'Semibold',\n 700: 'Bold',\n 800: 'Extra Bold',\n 900: 'Black',\n};\n\n/** A weight as the picker lists it: the number, then its common name. */\nexport function fontWeightLabel(weight: number): string {\n const name = NAMES[weight];\n return name ? `${weight} ${name}` : String(weight);\n}\n\n/**\n * Font-weight picker for one family, driven by the live font registry.\n *\n * It offers the weights `listFontWeights` reports for `family` — the faces\n * that will actually paint rather than be faked. A family with none on file\n * (the canvas tier, which rasterizes any weight it is asked for, or no family\n * at all because the selection spans several) gets the nine CSS weights. A\n * value outside the list is kept as its own entry, as `FontFamilySelect` keeps\n * an unregistered family: dropping it would rewrite the text on the next edit.\n */\nexport function FontWeightSelect(props: FontWeightSelectProps) {\n const { value, mixed = false, family, onChange, className } = props;\n const registered = family === undefined ? [] : listFontWeights(family);\n const weights = new Set<number>(registered.length > 0 ? registered : CSS_WEIGHTS);\n if (value !== undefined && !mixed) weights.add(value);\n const options = [...weights]\n .sort((a, b) => a - b)\n .map((w) => ({ value: String(w), label: fontWeightLabel(w) }));\n return (\n <Select<string>\n className={className}\n options={options}\n selectedKey={mixed || value === undefined ? null : String(value)}\n placeholder={mixed ? 'Mixed' : undefined}\n onSelectionChange={(key) => onChange(Number(key))}\n aria-label={props['aria-label'] ?? 'Weight'}\n />\n );\n}\n"],"mappings":";;;;AAgBA,IAAMC,IAAc;CAAC;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;AAAG,GAE1DC,IAA0C;CAC9C,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;CACL,KAAK;AACP;AAGA,SAAgBC,EAAgB,GAAwB;CACtD,IAAMC,IAAOF,EAAMG;CACnB,OAAOD,IAAO,GAAGC,EAAO,GAAGD,MAAS,OAAOC,CAAM;AACnD;AAYA,SAAgBC,EAAiB,GAA8B;CAC7D,IAAM,EAAE,UAAO,WAAQ,IAAO,WAAQ,aAAU,iBAAcC,GACxDC,IAAaC,MAAW,KAAA,IAAY,CAAC,IAAIC,EAAgBD,CAAM,GAC/DE,IAAU,IAAI,IAAYH,EAAW,SAAS,IAAIA,IAAaP,CAAW;CAChF,AAAIW,MAAU,KAAA,KAAa,CAACC,KAAOF,EAAQ,IAAIC,CAAK;CACpD,IAAME,IAAU,CAAC,GAAGH,CAAO,CAAC,CACzB,MAAM,GAAG,MAAMI,IAAIC,CAAC,CAAC,CACrB,KAAK,OAAO;EAAE,OAAO,OAAOC,CAAC;EAAG,OAAOd,EAAgBc,CAAC;CAAE,EAAE;CAC/D,OACE,kBAACjB,GAAD;EACa;EACF;EACT,aAAaa,KAASD,MAAU,KAAA,IAAY,OAAO,OAAOA,CAAK;EAC/D,aAAaC,IAAQ,UAAU,KAAA;EAC/B,oBAAoB,MAAQK,EAAS,OAAOC,CAAG,CAAC;EAChD,cAAYZ,EAAM,iBAAiB;CACpC,CAAA;AAEL"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { o as e, r as t, s as n } from "./Keycaps-C-FJyG8k.js";
|
|
2
|
-
import { t as r } from "./Powerline-
|
|
2
|
+
import { t as r } from "./Powerline-6wIFmDik.js";
|
|
3
3
|
import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
4
4
|
import { getGestureDescriptor as s, parseRoute as c } from "@weasel-js/core/routing";
|
|
5
5
|
var l = {
|
|
@@ -79,4 +79,4 @@ function p({ route: e, "aria-label": t, ...n }) {
|
|
|
79
79
|
//#endregion
|
|
80
80
|
export { f as n, p as t };
|
|
81
81
|
|
|
82
|
-
//# sourceMappingURL=GestureRoute-
|
|
82
|
+
//# sourceMappingURL=GestureRoute-BXESrHI0.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GestureRoute-
|
|
1
|
+
{"version":3,"file":"GestureRoute-BXESrHI0.js","names":["_Fragment","s","keySpecFromKey","KeyCap","keySpecsFromMods","Powerline","GestureRoute_module_default","MOD_DISPLAY_ORDER","modifierKeys","specs","name","req","modifiers","gestureRouteSegments","parsed","parseRoute","route","desc","getGestureDescriptor","hasArg","argIsKey","argIsDefault","hasTarget","targetIsWildcard","modKeys","segments","p","Fragment","text","k","i","GestureRoute","ariaLabel","rest"],"sources":["../../src/components/GestureRoute/GestureRoute.module.css","../../src/components/GestureRoute/GestureRoute.tsx"],"sourcesContent":[".muted { opacity: 0.55; }\n/* A gesture segment baseline-aligns its text; a KeyCap inside it has its own box and sits off-center without this. */\n.keyCap { align-self: center; }\n","import {\n getGestureDescriptor,\n parseRoute,\n type GestureName,\n type ModifierKey,\n type ParsedModifiers,\n} from '@weasel-js/core/routing';\nimport { Powerline, type PowerlineProps, type PowerlineSegment } from '../Powerline';\nimport { KeyCap, keySpecFromKey, keySpecsFromMods, type KeySpec, type LogicalModSpec } from '../Keycaps';\nimport s from './GestureRoute.module.css';\n\nconst MOD_DISPLAY_ORDER: readonly ModifierKey[] = ['mod', 'shift', 'alt', 'ctrl', 'meta'];\n\nfunction modifierKeys(modifiers: ParsedModifiers): readonly KeySpec[] | undefined {\n const specs: LogicalModSpec[] = [];\n for (const name of MOD_DISPLAY_ORDER) {\n const req = modifiers[name];\n if (req !== undefined) specs.push({ name, optional: req === 'optional' });\n }\n if (specs.length === 0) return undefined;\n return keySpecsFromMods(specs);\n}\n\n/**\n * The segments {@link GestureRoute} draws for a route string: phase atoms, then\n * `gesture(arg)`, then the held modifiers as one chord, then the target.\n * A descriptor's default arg and a wildcard target stay visible, muted, so\n * the strip shows the whole binding.\n */\nexport function gestureRouteSegments(route: string): PowerlineSegment[] {\n const parsed = parseRoute(route);\n const desc = getGestureDescriptor(parsed.gesture as GestureName);\n const hasArg = !!desc.arg && parsed.arg !== undefined;\n const argIsKey = hasArg && desc.arg?.name === 'key';\n const argIsDefault = hasArg && desc.arg?.default !== undefined && parsed.arg === desc.arg.default;\n const hasTarget = desc.hasTarget && parsed.target !== undefined;\n const targetIsWildcard = hasTarget && parsed.target === '*';\n const modKeys = modifierKeys(parsed.modifiers);\n\n const segments: PowerlineSegment[] = [];\n for (const p of parsed.phases) {\n if (p.channel !== '&') segments.push({ text: p.channel, status: 'neutral', variant: 'subtle' });\n segments.push({ text: p.phase, status: 'accent', variant: 'subtle' });\n }\n segments.push({\n text: hasArg ? (\n argIsKey ? (\n <>\n {parsed.gesture}{' '}\n <KeyCap label={keySpecFromKey(parsed.arg!).label} variant=\"minimal\" className={s.keyCap} />\n </>\n ) : (\n <>\n {parsed.gesture}\n <span className={argIsDefault ? s.muted : undefined}>({parsed.arg})</span>\n </>\n )\n ) : parsed.gesture,\n status: 'info',\n variant: 'outline',\n });\n if (modKeys) {\n // `+` marks a required modifier and `?` an optional one, so `+mod ?shift` reads `+⌘?⇧`.\n const text = modKeys.map((k) => `${k.optional ? '?' : '+'}${k.label}`).join('');\n segments.push({ text, status: 'muted', variant: 'solid' });\n }\n if (hasTarget) {\n segments.push({\n text: parsed.target,\n status: 'muted',\n variant: targetIsWildcard ? 'subtle' : 'outline',\n });\n }\n for (let i = 0; i < segments.length - 1; i++) segments[i].endCap = 'chevron';\n return segments;\n}\n\n/** Props for {@link GestureRoute}. */\nexport interface GestureRouteProps extends Omit<PowerlineProps, 'segments'> {\n /** A route in the dispatcher's grammar, e.g. `[initial] drag => node +shift`. */\n route: string;\n}\n\n/**\n * A dispatcher route drawn as a {@link Powerline}: phase, gesture, modifiers\n * and target as one chevron-linked chain.\n */\nexport function GestureRoute({ route, 'aria-label': ariaLabel, ...rest }: GestureRouteProps) {\n return <Powerline {...rest} segments={gestureRouteSegments(route)} aria-label={ariaLabel ?? route} />;\n}\n"],"mappings":";;;;;;;GCWMO,IAA4C;CAAC;CAAO;CAAS;CAAO;CAAQ;AAAM;AAExF,SAASC,EAAa,GAA4D;CAChF,IAAMC,IAA0B,CAAC;CACjC,KAAK,IAAMC,KAAQH,GAAmB;EACpC,IAAMI,IAAMC,EAAUF;EACtB,AAAIC,MAAQ,KAAA,KAAWF,EAAM,KAAK;GAAE;GAAM,UAAUE,MAAQ;EAAW,CAAC;CAC1E;CACA,IAAIF,EAAM,WAAW,GACrB,OAAOL,EAAiBK,CAAK;AAC/B;AAQA,SAAgBI,EAAqB,GAAmC;CACtE,IAAMC,IAASC,EAAWC,CAAK,GACzBC,IAAOC,EAAqBJ,EAAO,OAAsB,GACzDK,IAAS,CAAC,CAACF,EAAK,OAAOH,EAAO,QAAQ,KAAA,GACtCM,IAAWD,KAAUF,EAAK,KAAK,SAAS,OACxCI,IAAeF,KAAUF,EAAK,KAAK,YAAY,KAAA,KAAaH,EAAO,QAAQG,EAAK,IAAI,SACpFK,IAAYL,EAAK,aAAaH,EAAO,WAAW,KAAA,GAChDS,IAAmBD,KAAaR,EAAO,WAAW,KAClDU,IAAUhB,EAAaM,EAAO,SAAS,GAEvCW,IAA+B,CAAC;CACtC,KAAK,IAAMC,KAAKZ,EAAO,QAErB,AADIY,EAAE,YAAY,OAAKD,EAAS,KAAK;EAAE,MAAMC,EAAE;EAAS,QAAQ;EAAW,SAAS;CAAS,CAAC,GAC9FD,EAAS,KAAK;EAAE,MAAMC,EAAE;EAAO,QAAQ;EAAU,SAAS;CAAS,CAAC;CAmBtE,IAjBAD,EAAS,KAAK;EACZ,MAAMN,IACJC,IACE,kBAAApB,GAAA,EAAA,UAAA;GACGc,EAAO;GAAS;GACjB,kBAACX,GAAD;IAAQ,OAAOD,EAAeY,EAAO,GAAI,CAAC,CAAC;IAAO,SAAQ;IAAU,WAAWb,EAAE;GAAS,CAAA;EAC1F,EAAA,CAAA,IAEF,kBAAAD,GAAA,EAAA,UAAA,CACGc,EAAO,SACR,kBAAC,QAAD;GAAM,WAAWO,IAAepB,EAAE,QAAQ,KAAA;GAA1C,UAAA;IAAqD;IAAEa,EAAO;IAAI;GAAO;EACzE,CAAA,CAAA,EAAA,CAAA,IAEFA,EAAO;EACX,QAAQ;EACR,SAAS;CACX,CAAC,GACGU,GAAS;EAEX,IAAMI,IAAOJ,EAAQ,KAAK,MAAM,GAAGK,EAAE,WAAW,MAAM,MAAMA,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE;EAC9E,EAAS,KAAK;GAAE;GAAM,QAAQ;GAAS,SAAS;EAAQ,CAAC;CAC3D;CACA,AAAIP,KACFG,EAAS,KAAK;EACZ,MAAMX,EAAO;EACb,QAAQ;EACR,SAASS,IAAmB,WAAW;CACzC,CAAC;CAEH,KAAK,IAAIO,IAAI,GAAGA,IAAIL,EAAS,SAAS,GAAG,KAAK,EAASK,EAAE,CAAC,SAAS;CACnE,OAAOL;AACT;AAYA,SAAgBM,EAAa,EAAE,UAAO,cAAcC,GAAW,GAAGC,KAA2B;CAC3F,OAAO,kBAAC5B,GAAD;EAAW,GAAI4B;EAAM,UAAUpB,EAAqBG,CAAK;EAAG,cAAYgB,KAAahB;CAAQ,CAAA;AACtG"}
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
import { t as e } from "./ColorField-BLs9fbeq.js";
|
|
2
|
+
import { t } from "./Slider-Cl5RCeZ7.js";
|
|
3
|
+
import { t as n } from "./ToggleBar-Z2jZiguF.js";
|
|
4
|
+
import { a as r, i, n as a, o, r as s, s as c, t as l } from "./MeshEditor-GbqqiPk8.js";
|
|
5
|
+
import { fillInPoseFrame as u, fillToBoundsFrame as d, gradientGeometry as f, isGradientFill as p, sampleGradientStops as m, switchGradientKind as h, useGradientKinds as g, useNodeOverlayFrame as _, useOngoingAction as v, usePaintKind as y } from "@weasel-js/core";
|
|
6
|
+
import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
|
|
7
|
+
import "react";
|
|
8
|
+
import { nativeSvgKind as C, nativeSvgSpace as w } from "@weasel-js/svg";
|
|
9
|
+
import { isMeshGradientFill as T } from "@weasel-js/core/mesh";
|
|
10
|
+
//#region src/paintGradientTrack.tsx
|
|
11
|
+
var E = {
|
|
12
|
+
angleDeg: 135,
|
|
13
|
+
stripe: 2,
|
|
14
|
+
gap: 4,
|
|
15
|
+
dim: 75
|
|
16
|
+
};
|
|
17
|
+
function D(e) {
|
|
18
|
+
let { gradient: t, samples: n = 16, activeRange: r, hatch: i } = e;
|
|
19
|
+
return (e) => {
|
|
20
|
+
let a = [];
|
|
21
|
+
for (let r = 0; r <= n; r++) {
|
|
22
|
+
let i = r / n;
|
|
23
|
+
a.push(`${t(i)} ${e.fractionToPosition(i)}`);
|
|
24
|
+
}
|
|
25
|
+
let o = `linear-gradient(to right, ${a.join(", ")})`, s = [];
|
|
26
|
+
if (r) {
|
|
27
|
+
let t = e.valueToFraction(r[0]), n = e.valueToFraction(r[1]), a = {
|
|
28
|
+
...E,
|
|
29
|
+
...i
|
|
30
|
+
}, o = `repeating-linear-gradient(${a.angleDeg}deg, transparent 0 ${a.stripe}px, var(--wzl-surface) ${a.stripe}px ${a.stripe + a.gap}px)`, c = `color-mix(in srgb, var(--wzl-surface) ${a.dim}%, transparent)`, l = `linear-gradient(${c}, ${c})`;
|
|
31
|
+
if (t > 0) {
|
|
32
|
+
let n = e.fractionToPosition(t);
|
|
33
|
+
s.push(`${l} left 0 / ${n} 100% no-repeat`), s.push(`${o} left 0 / ${n} 100% no-repeat`);
|
|
34
|
+
}
|
|
35
|
+
if (n < 1) {
|
|
36
|
+
let t = `calc(100% - ${e.fractionToPosition(n)})`;
|
|
37
|
+
s.push(`${l} right 0 / ${t} 100% no-repeat`), s.push(`${o} right 0 / ${t} 100% no-repeat`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
s.push(o);
|
|
41
|
+
let c = {
|
|
42
|
+
position: "absolute",
|
|
43
|
+
inset: 0,
|
|
44
|
+
background: s.join(", ")
|
|
45
|
+
};
|
|
46
|
+
return /* @__PURE__ */ x("div", { style: c });
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
var O = {
|
|
50
|
+
root: "_root_nxcxi_1",
|
|
51
|
+
swatches: "_swatches_nxcxi_8",
|
|
52
|
+
swatch: "_swatch_nxcxi_8",
|
|
53
|
+
noEditor: "_noEditor_nxcxi_21"
|
|
54
|
+
}, k = [
|
|
55
|
+
{
|
|
56
|
+
value: "rgb",
|
|
57
|
+
label: "sRGB"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
value: "oklab",
|
|
61
|
+
label: "OKLab"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
value: "oklch",
|
|
65
|
+
label: "OKLCh"
|
|
66
|
+
}
|
|
67
|
+
], A = 2;
|
|
68
|
+
function j(e) {
|
|
69
|
+
let { value: t, onInput: r, onChange: i, kindSwitch: a = !0, spaceSwitch: s = !0, svg: l = !1, className: u } = e, d = t.fill ?? "solid", f = t.interpolate ?? "rgb", m = y(d), _ = g().filter((e) => !l || C(e.id) || e.id === d).map((e) => ({
|
|
70
|
+
value: e.id,
|
|
71
|
+
label: e.label
|
|
72
|
+
})), v = k.filter((e) => !l || w(e.value) || e.value === f), T = (e) => {
|
|
73
|
+
let n = h(t, e);
|
|
74
|
+
n && n !== t && i(n);
|
|
75
|
+
};
|
|
76
|
+
return /* @__PURE__ */ S("div", {
|
|
77
|
+
className: [O.root, u].filter(Boolean).join(" "),
|
|
78
|
+
children: [a && /* @__PURE__ */ x(n, {
|
|
79
|
+
items: _,
|
|
80
|
+
value: d,
|
|
81
|
+
size: "sm",
|
|
82
|
+
ariaLabel: "Gradient kind",
|
|
83
|
+
onChange: (e) => e && T(e)
|
|
84
|
+
}), E()]
|
|
85
|
+
});
|
|
86
|
+
function E() {
|
|
87
|
+
let e = s && v.length > 1 && /* @__PURE__ */ x(n, {
|
|
88
|
+
items: v,
|
|
89
|
+
value: f,
|
|
90
|
+
size: "sm",
|
|
91
|
+
ariaLabel: "Blend space",
|
|
92
|
+
onChange: (e) => e && i({
|
|
93
|
+
...t,
|
|
94
|
+
interpolate: e
|
|
95
|
+
})
|
|
96
|
+
});
|
|
97
|
+
if (m?.Editor) {
|
|
98
|
+
let n = m.Editor;
|
|
99
|
+
return /* @__PURE__ */ S(b, { children: [/* @__PURE__ */ x(n, {
|
|
100
|
+
value: t,
|
|
101
|
+
onInput: r,
|
|
102
|
+
onChange: i
|
|
103
|
+
}), e] });
|
|
104
|
+
}
|
|
105
|
+
return p(t) ? /* @__PURE__ */ x(M, {
|
|
106
|
+
value: t,
|
|
107
|
+
spaceBar: e,
|
|
108
|
+
onInput: r,
|
|
109
|
+
onChange: i
|
|
110
|
+
}) : c(t) ? /* @__PURE__ */ S(b, { children: [/* @__PURE__ */ x(o, {
|
|
111
|
+
value: t,
|
|
112
|
+
spaceSwitch: !1,
|
|
113
|
+
onInput: r,
|
|
114
|
+
onChange: i
|
|
115
|
+
}), e] }) : /* @__PURE__ */ S("div", {
|
|
116
|
+
className: O.noEditor,
|
|
117
|
+
children: [m?.label ?? d, ": no editor"]
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function M(n) {
|
|
122
|
+
let { value: r, spaceBar: i, onInput: a, onChange: o } = n, s = r.stops, c = r.interpolate ?? "rgb", l = (e) => ({
|
|
123
|
+
...r,
|
|
124
|
+
stops: e
|
|
125
|
+
}), u = s.map((e) => ({
|
|
126
|
+
value: e.offset,
|
|
127
|
+
color: e.color
|
|
128
|
+
})), d = (e) => e.map((e) => ({
|
|
129
|
+
offset: e.value,
|
|
130
|
+
color: e.color
|
|
131
|
+
})), f = (e, t) => s.map((n, r) => r === e ? {
|
|
132
|
+
...n,
|
|
133
|
+
color: t
|
|
134
|
+
} : n), p = s.map((e, t) => ({
|
|
135
|
+
stop: e,
|
|
136
|
+
index: t
|
|
137
|
+
})).sort((e, t) => e.stop.offset - t.stop.offset);
|
|
138
|
+
return /* @__PURE__ */ S(b, { children: [
|
|
139
|
+
/* @__PURE__ */ x(t, {
|
|
140
|
+
min: 0,
|
|
141
|
+
max: 1,
|
|
142
|
+
step: .005,
|
|
143
|
+
constraint: "free",
|
|
144
|
+
thumbs: u,
|
|
145
|
+
ariaLabel: "Gradient stops",
|
|
146
|
+
readoutPlacement: "none",
|
|
147
|
+
onInput: (e) => a?.(l(d(e))),
|
|
148
|
+
onChange: (e) => o(l(d(e))),
|
|
149
|
+
onAddThumb: (e) => ({
|
|
150
|
+
value: e,
|
|
151
|
+
color: m(s, e, c)
|
|
152
|
+
}),
|
|
153
|
+
onRemoveThumb: () => s.length > A,
|
|
154
|
+
renderTrack: D({
|
|
155
|
+
gradient: (e) => m(s, e, c),
|
|
156
|
+
samples: c === "rgb" ? 32 : 64
|
|
157
|
+
})
|
|
158
|
+
}),
|
|
159
|
+
i,
|
|
160
|
+
/* @__PURE__ */ x("div", {
|
|
161
|
+
className: O.swatches,
|
|
162
|
+
children: p.map(({ stop: t, index: n }) => /* @__PURE__ */ x(e, {
|
|
163
|
+
value: t.color,
|
|
164
|
+
alpha: !0,
|
|
165
|
+
"aria-label": `Stop ${n + 1} at ${Math.round(t.offset * 100)}%`,
|
|
166
|
+
className: O.swatch,
|
|
167
|
+
onInput: (e) => a?.(l(f(n, e))),
|
|
168
|
+
onChange: (e) => o(l(f(n, e)))
|
|
169
|
+
}, n))
|
|
170
|
+
})
|
|
171
|
+
] });
|
|
172
|
+
}
|
|
173
|
+
//#endregion
|
|
174
|
+
//#region src/components/GradientEditor/GradientHandles.tsx
|
|
175
|
+
function N(e) {
|
|
176
|
+
let { value: t, toScreen: n, toLocal: r, onInput: a, onChange: o, width: s, height: c, className: l } = e;
|
|
177
|
+
return /* @__PURE__ */ x(i, {
|
|
178
|
+
width: s,
|
|
179
|
+
height: c,
|
|
180
|
+
className: l,
|
|
181
|
+
children: P(t, n, r, a, o)
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
function P(e, t, n, i, o) {
|
|
185
|
+
let c = (e, t) => {
|
|
186
|
+
t === "input" ? i?.(e) : o(e);
|
|
187
|
+
};
|
|
188
|
+
if (e.fill === "linear-gradient") {
|
|
189
|
+
let r = t(e.from), i = t(e.to);
|
|
190
|
+
return /* @__PURE__ */ S(b, { children: [
|
|
191
|
+
/* @__PURE__ */ x(s, {
|
|
192
|
+
x1: r.x,
|
|
193
|
+
y1: r.y,
|
|
194
|
+
x2: i.x,
|
|
195
|
+
y2: i.y
|
|
196
|
+
}),
|
|
197
|
+
/* @__PURE__ */ x(a, {
|
|
198
|
+
radius: I,
|
|
199
|
+
at: r,
|
|
200
|
+
label: "Gradient start",
|
|
201
|
+
onDrag: (t, r) => c({
|
|
202
|
+
...e,
|
|
203
|
+
from: n(t)
|
|
204
|
+
}, r)
|
|
205
|
+
}),
|
|
206
|
+
/* @__PURE__ */ x(a, {
|
|
207
|
+
radius: I,
|
|
208
|
+
at: i,
|
|
209
|
+
label: "Gradient end",
|
|
210
|
+
onDrag: (t, r) => c({
|
|
211
|
+
...e,
|
|
212
|
+
to: n(t)
|
|
213
|
+
}, r)
|
|
214
|
+
})
|
|
215
|
+
] });
|
|
216
|
+
}
|
|
217
|
+
if (e.fill === "radial-gradient") {
|
|
218
|
+
let i = t(e.center), o = t({
|
|
219
|
+
x: e.center.x + e.radius,
|
|
220
|
+
y: e.center.y
|
|
221
|
+
}), s = Math.hypot(o.x - i.x, o.y - i.y);
|
|
222
|
+
return /* @__PURE__ */ S(b, { children: [
|
|
223
|
+
/* @__PURE__ */ x("circle", {
|
|
224
|
+
className: r.guide,
|
|
225
|
+
cx: i.x,
|
|
226
|
+
cy: i.y,
|
|
227
|
+
r: s
|
|
228
|
+
}),
|
|
229
|
+
/* @__PURE__ */ x(a, {
|
|
230
|
+
radius: I,
|
|
231
|
+
at: i,
|
|
232
|
+
label: "Gradient center",
|
|
233
|
+
onDrag: (t, r) => c({
|
|
234
|
+
...e,
|
|
235
|
+
center: n(t)
|
|
236
|
+
}, r)
|
|
237
|
+
}),
|
|
238
|
+
/* @__PURE__ */ x(a, {
|
|
239
|
+
radius: I,
|
|
240
|
+
at: o,
|
|
241
|
+
label: "Gradient radius",
|
|
242
|
+
onDrag: (t, r) => {
|
|
243
|
+
let i = n(t), a = Math.hypot(i.x - e.center.x, i.y - e.center.y);
|
|
244
|
+
c({
|
|
245
|
+
...e,
|
|
246
|
+
radius: Math.max(F, a)
|
|
247
|
+
}, r);
|
|
248
|
+
}
|
|
249
|
+
})
|
|
250
|
+
] });
|
|
251
|
+
}
|
|
252
|
+
let l = t(e.center), { radius: u } = f(e), d = t({
|
|
253
|
+
x: e.center.x + Math.cos(e.angle) * u,
|
|
254
|
+
y: e.center.y + Math.sin(e.angle) * u
|
|
255
|
+
});
|
|
256
|
+
return /* @__PURE__ */ S(b, { children: [
|
|
257
|
+
/* @__PURE__ */ x(s, {
|
|
258
|
+
x1: l.x,
|
|
259
|
+
y1: l.y,
|
|
260
|
+
x2: d.x,
|
|
261
|
+
y2: d.y
|
|
262
|
+
}),
|
|
263
|
+
/* @__PURE__ */ x(a, {
|
|
264
|
+
radius: I,
|
|
265
|
+
at: l,
|
|
266
|
+
label: "Gradient center",
|
|
267
|
+
onDrag: (t, r) => c({
|
|
268
|
+
...e,
|
|
269
|
+
center: n(t)
|
|
270
|
+
}, r)
|
|
271
|
+
}),
|
|
272
|
+
/* @__PURE__ */ x(a, {
|
|
273
|
+
radius: I,
|
|
274
|
+
at: d,
|
|
275
|
+
label: "Gradient angle",
|
|
276
|
+
onDrag: (t, r) => {
|
|
277
|
+
let i = n(t), a = Math.atan2(i.y - e.center.y, i.x - e.center.x);
|
|
278
|
+
c({
|
|
279
|
+
...e,
|
|
280
|
+
angle: a
|
|
281
|
+
}, r);
|
|
282
|
+
}
|
|
283
|
+
})
|
|
284
|
+
] });
|
|
285
|
+
}
|
|
286
|
+
var F = 1, I = 7;
|
|
287
|
+
//#endregion
|
|
288
|
+
//#region src/components/GradientEditor/SceneGradientHandles.tsx
|
|
289
|
+
function L(e) {
|
|
290
|
+
let { scene: t, containerRef: n, nodeId: r, slot: i, view: a, className: o } = e, s = _(t, n, r, { view: a }), c = v(i === "fill" ? "setFill" : "setStroke"), f = s ? R(t, r, i) : null;
|
|
291
|
+
if (!s || !f) return null;
|
|
292
|
+
let m = (e, t) => {
|
|
293
|
+
let n = d(e, s.box);
|
|
294
|
+
t === "commit" ? c.commit({ paint: n }) : c.input({ paint: n });
|
|
295
|
+
}, h = {
|
|
296
|
+
toScreen: s.toScreen,
|
|
297
|
+
toLocal: s.toLocal,
|
|
298
|
+
width: s.width,
|
|
299
|
+
height: s.height,
|
|
300
|
+
className: o,
|
|
301
|
+
onInput: (e) => m(e, "input"),
|
|
302
|
+
onChange: (e) => m(e, "commit")
|
|
303
|
+
};
|
|
304
|
+
if (p(f)) return /* @__PURE__ */ x(N, {
|
|
305
|
+
value: u(f, s.box),
|
|
306
|
+
...h
|
|
307
|
+
});
|
|
308
|
+
if (T(f)) {
|
|
309
|
+
let e = u(f, s.box);
|
|
310
|
+
return e.units === "bounds" ? null : /* @__PURE__ */ x(l, {
|
|
311
|
+
value: e,
|
|
312
|
+
...h
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
317
|
+
function R(e, t, n) {
|
|
318
|
+
if (t == null) return;
|
|
319
|
+
let r = e.nodes.get(t)?.data;
|
|
320
|
+
if (r) return n === "fill" ? r.fill : r.stroke?.paint;
|
|
321
|
+
}
|
|
322
|
+
//#endregion
|
|
323
|
+
export { D as i, N as n, j as r, L as t };
|
|
324
|
+
|
|
325
|
+
//# sourceMappingURL=GradientEditor-DypXzMc-.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GradientEditor-DypXzMc-.js","names":["s","_Fragment","_Fragment","s","ColorField","ToggleBar","handleOverlay_module_default","DragPoint","Guide","isMeshPaint","MeshHandles","DEFAULT_HATCH","paintGradientTrack","opts","stops","i","samples","t","gradient","ctx","baseGradient","layers","activeRange","low","high","h","hatch","stripe","dimColor","dimOverlay","wL","wR","style","GradientEditor_module_default","SPACES","MIN_STOPS","GradientEditor","props","kind","value","space","entry","usePaintKind","kinds","useGradientKinds","svg","nativeSvgKind","spaces","nativeSvgSpace","item","switchKind","converted","switchGradientKind","next","onChange","className","kindSwitch","renderBody","spaceBar","spaceSwitch","Editor","Fragment","isGradientFill","StopsBody","MeshEditor","withStops","thumbs","stop","applyThumbs","setStopColor","index","ordered","a","b","Slider","onInput","at","sampleGradientStops","hex","GradientHandles","HandleOverlay","renderForKind","toScreen","toLocal","emit","phase","from","to","HANDLE_RADIUS","p","center","edge","screenRadius","local","radius","MIN_RADIUS","gradientGeometry","tip","angle","SceneGradientHandles","frame","useNodeOverlayFrame","scene","containerRef","nodeId","edit","useOngoingAction","slot","paint","paintOf","dispatch","normalized","fillToBoundsFrame","common","fillInPoseFrame","isMeshGradientFill","resolved","data"],"sources":["../../src/paintGradientTrack.tsx","../../src/components/GradientEditor/GradientEditor.module.css","../../src/components/GradientEditor/GradientEditor.tsx","../../src/components/GradientEditor/GradientHandles.tsx","../../src/components/GradientEditor/SceneGradientHandles.tsx"],"sourcesContent":["import type { ReactNode, CSSProperties } from 'react';\nimport type { TrackCtx } from './components/Slider';\n\n/**\n * Options for {@link paintGradientTrack}.\n *\n * `gradient` maps a normalized position along the slider's value span (0 to\n * 1) to a CSS color; `samples` is how many stops the resulting\n * linear-gradient uses. The ramp is laid on the same span as the thumbs, so a\n * thumb at 0.3 sits over `gradient(0.3)`; any track beyond the span takes the\n * end colors.\n * `activeRange`, given in the slider's own value units, keeps that span at\n * full strength and dims + hatches the rest.\n */\nexport type GradientTrackOpts = {\n gradient: (t: number) => string;\n samples?: number;\n activeRange?: [number, number];\n hatch?: {\n angleDeg?: number;\n stripe?: number;\n gap?: number;\n dim?: number;\n };\n};\n\nconst DEFAULT_HATCH = { angleDeg: 135, stripe: 2, gap: 4, dim: 75 };\n\n/**\n * Builds a `Slider` `renderTrack` function that paints the track as a\n * sampled color gradient, optionally dimming and hatching the portions\n * outside an active range.\n */\nexport function paintGradientTrack(opts: GradientTrackOpts): (ctx: TrackCtx) => ReactNode {\n const { gradient, samples = 16, activeRange, hatch } = opts;\n\n return (ctx: TrackCtx) => {\n const stops: string[] = [];\n for (let i = 0; i <= samples; i++) {\n const t = i / samples;\n stops.push(`${gradient(t)} ${ctx.fractionToPosition(t)}`);\n }\n const baseGradient = `linear-gradient(to right, ${stops.join(', ')})`;\n\n const layers: string[] = [];\n if (activeRange) {\n const low = ctx.valueToFraction(activeRange[0]);\n const high = ctx.valueToFraction(activeRange[1]);\n const h = { ...DEFAULT_HATCH, ...hatch };\n const stripe = `repeating-linear-gradient(${h.angleDeg}deg, transparent 0 ${h.stripe}px, var(--wzl-surface) ${h.stripe}px ${h.stripe + h.gap}px)`;\n const dimColor = `color-mix(in srgb, var(--wzl-surface) ${h.dim}%, transparent)`;\n const dimOverlay = `linear-gradient(${dimColor}, ${dimColor})`;\n\n if (low > 0) {\n const wL = ctx.fractionToPosition(low);\n layers.push(`${dimOverlay} left 0 / ${wL} 100% no-repeat`);\n layers.push(`${stripe} left 0 / ${wL} 100% no-repeat`);\n }\n if (high < 1) {\n const wR = `calc(100% - ${ctx.fractionToPosition(high)})`;\n layers.push(`${dimOverlay} right 0 / ${wR} 100% no-repeat`);\n layers.push(`${stripe} right 0 / ${wR} 100% no-repeat`);\n }\n }\n layers.push(baseGradient);\n\n const style: CSSProperties = {\n position: 'absolute',\n inset: 0,\n background: layers.join(', '),\n };\n return <div style={style} />;\n };\n}\n",".root {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-4);\n min-inline-size: 0;\n}\n\n.swatches {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wzl-space-3);\n}\n\n/* Each stop's opacity slider would otherwise stretch the row to a width no\n * properties panel has; the chip stays legible, the slider yields. */\n.swatch {\n flex: 0 1 auto;\n min-inline-size: 0;\n}\n\n.noEditor {\n font-size: var(--wzl-font-size-sm);\n color: var(--wzl-fg-muted);\n}\n","import { type ReactElement, type ReactNode } from 'react';\nimport {\n isGradientFill,\n sampleGradientStops,\n switchGradientKind,\n useGradientKinds,\n usePaintKind,\n type ColorSpace,\n type FillStyle,\n type GradStop,\n type GradientFill,\n type PaintKind,\n} from '@weasel-js/core';\nimport { nativeSvgKind, nativeSvgSpace } from '@weasel-js/svg';\nimport { Slider, type Thumb } from '../Slider';\nimport { ColorField } from '../ColorField';\nimport { MeshEditor, isMeshPaint } from '../MeshEditor';\nimport { ToggleBar, type ToggleBarItem } from '../ToggleBar';\nimport { paintGradientTrack } from '../../paintGradientTrack';\nimport s from './GradientEditor.module.css';\n\nconst SPACES: readonly ToggleBarItem<ColorSpace>[] = [\n { value: 'rgb', label: 'sRGB' },\n { value: 'oklab', label: 'OKLab' },\n { value: 'oklch', label: 'OKLCh' },\n];\n\n/** Fewer than two stops is not a gradient any renderer can ramp between. */\nconst MIN_STOPS = 2;\n\n/**\n * Props for {@link GradientEditor}. `onInput` fires throughout a gesture and\n * `onChange` once at its end.\n */\nexport interface GradientEditorProps {\n /** The gradient being edited: a paint of any gradient kind — one that\n * `listGradientKinds` returns. */\n value: FillStyle;\n /**\n * Live value during a gesture — a stop drag, a color-picker scrub. Wire\n * it for preview; it fires many times per gesture and must not be\n * written to history.\n */\n onInput?: (next: FillStyle) => void;\n /** Committed value: one call per completed gesture. Pair with an\n * undoable write. */\n onChange: (next: FillStyle) => void;\n /** Show the kind switch — every registered gradient kind. Default true;\n * turn it off when the surrounding UI already owns the kind. */\n kindSwitch?: boolean;\n /** Show the sRGB / OKLab / OKLCh switch, which writes `interpolate`.\n * Default true. */\n spaceSwitch?: boolean;\n /**\n * Offer only what an SVG file carries natively: the linear and radial\n * gradients, which SVG has elements for, blended in sRGB, the only space\n * every SVG renderer honors. A conic or mesh gradient exports as a weasel\n * element that other renderers paint as one flat color, and an OKLab or\n * OKLCh blend exports as an attribute they ignore. A value already outside\n * that set keeps its own kind and space on offer, so it can be switched\n * back. Default false.\n */\n svg?: boolean;\n className?: string;\n}\n\ntype StopThumb = Thumb & { color: string };\n\n/**\n * Editor for a gradient's kind and colors: the stop list of a linear, radial\n * or conic gradient, a mesh's corner colors, or a registered kind's own\n * `Editor`. Switching kind goes through `switchGradientKind`, so the colors\n * carry across.\n *\n * Geometry (`from`/`to`, `center`, `radius`, `angle`) is deliberately not\n * edited here — on a canvas that belongs on the artwork, via\n * `<GradientHandles>`. This component owns the parts with no spatial\n * meaning, so it composes into a properties panel at any width.\n *\n * Stops are addressed by their position in `value.stops`, which is never\n * reordered — dragging one stop past another leaves both indices alone, so\n * a drag can cross a neighbour without the two swapping under the pointer.\n * Rendering sorts a copy.\n */\nexport function GradientEditor(props: GradientEditorProps): ReactElement {\n const { value, onInput, onChange, kindSwitch = true, spaceSwitch = true, svg = false, className } = props;\n const kind: PaintKind = value.fill ?? 'solid';\n const space: ColorSpace = (value as { interpolate?: ColorSpace }).interpolate ?? 'rgb';\n\n const entry = usePaintKind(kind);\n const kinds: readonly ToggleBarItem<PaintKind>[] = useGradientKinds()\n .filter((entry) => !svg || nativeSvgKind(entry.id) || entry.id === kind)\n .map((entry) => ({ value: entry.id, label: entry.label }));\n const spaces = SPACES.filter((item) => !svg || nativeSvgSpace(item.value) || item.value === space);\n\n const switchKind = (next: PaintKind): void => {\n const converted = switchGradientKind(value, next);\n if (converted && converted !== value) onChange(converted);\n };\n\n return (\n <div className={[s.root, className].filter(Boolean).join(' ')}>\n {kindSwitch && (\n <ToggleBar<PaintKind>\n items={kinds}\n value={kind}\n size=\"sm\"\n ariaLabel=\"Gradient kind\"\n onChange={(next) => next && switchKind(next)}\n />\n )}\n\n {renderBody()}\n </div>\n );\n\n function renderBody(): ReactElement {\n const spaceBar = spaceSwitch && spaces.length > 1 && (\n <ToggleBar<ColorSpace>\n items={spaces}\n value={space}\n size=\"sm\"\n ariaLabel=\"Blend space\"\n onChange={(next) => next && onChange({ ...value, interpolate: next } as FillStyle)}\n />\n );\n // A registered `Editor` wins even for a built-in id, as it does in `PaintInput`.\n if (entry?.Editor) {\n const Editor = entry.Editor;\n return <><Editor value={value} onInput={onInput} onChange={onChange} />{spaceBar}</>;\n }\n if (isGradientFill(value)) {\n return <StopsBody value={value} spaceBar={spaceBar} onInput={onInput} onChange={onChange} />;\n }\n if (isMeshPaint(value)) {\n return <><MeshEditor value={value} spaceSwitch={false} onInput={onInput} onChange={onChange} />{spaceBar}</>;\n }\n return <div className={s.noEditor}>{entry?.label ?? kind}: no editor</div>;\n }\n}\n\n/** The stop slider and swatch row of a linear, radial or conic gradient. */\nfunction StopsBody(props: {\n value: GradientFill;\n spaceBar: ReactNode;\n onInput?: (next: FillStyle) => void;\n onChange: (next: FillStyle) => void;\n}): ReactElement {\n const { value, spaceBar, onInput, onChange } = props;\n const stops = value.stops;\n const space = value.interpolate ?? 'rgb';\n\n const withStops = (next: GradStop[]): GradientFill => ({ ...value, stops: next });\n\n const thumbs: StopThumb[] = stops.map((stop) => ({ value: stop.offset, color: stop.color }));\n\n const applyThumbs = (next: StopThumb[]): GradStop[] =>\n next.map((t) => ({ offset: t.value, color: t.color }));\n\n const setStopColor = (index: number, color: string): GradStop[] =>\n stops.map((stop, i) => (i === index ? { ...stop, color } : stop));\n\n // Sorted view for the swatch row, carrying each stop's real index so a\n // recolor writes back to the right entry.\n const ordered = stops\n .map((stop, index) => ({ stop, index }))\n .sort((a, b) => a.stop.offset - b.stop.offset);\n\n return (\n <>\n <Slider<StopThumb>\n min={0}\n max={1}\n step={0.005}\n constraint=\"free\"\n thumbs={thumbs}\n ariaLabel=\"Gradient stops\"\n readoutPlacement=\"none\"\n onInput={(next) => onInput?.(withStops(applyThumbs(next)))}\n onChange={(next) => onChange(withStops(applyThumbs(next)))}\n onAddThumb={(at) => ({ value: at, color: sampleGradientStops(stops, at, space) })}\n onRemoveThumb={() => stops.length > MIN_STOPS}\n renderTrack={paintGradientTrack({\n gradient: (t) => sampleGradientStops(stops, t, space),\n // The track lerps between samples in sRGB whatever the gradient does,\n // so a hue arc needs more of them to not read as a straight line.\n samples: space === 'rgb' ? 32 : 64,\n })}\n />\n\n {spaceBar}\n\n <div className={s.swatches}>\n {ordered.map(({ stop, index }) => (\n <ColorField\n key={index}\n value={stop.color}\n alpha\n aria-label={`Stop ${index + 1} at ${Math.round(stop.offset * 100)}%`}\n className={s.swatch}\n onInput={(hex) => onInput?.(withStops(setStopColor(index, hex)))}\n onChange={(hex) => onChange(withStops(setStopColor(index, hex)))}\n />\n ))}\n </div>\n </>\n );\n}\n","import { type ReactElement, type ReactNode } from 'react';\nimport { gradientGeometry, type GradientFill } from '@weasel-js/core';\nimport { DragPoint, Guide, HandleOverlay, type EditPhase, type OverlayPoint as Point } from './handleOverlay';\nimport s from './handleOverlay.module.css';\n\n/**\n * Props for {@link GradientHandles}. `onInput` fires throughout a drag and\n * `onChange` once at its end.\n */\nexport interface GradientHandlesProps {\n /**\n * The gradient whose geometry these handles move, in a **resolved,\n * isotropic** frame — one where `radius` is a length in the same units as\n * `center.x` and a right angle is a right angle.\n *\n * A `units: 'bounds'` gradient is not such a frame: `x` and `y` are\n * fractions of two different lengths, so a circle there is an ellipse on\n * screen and polar math silently mixes scales. Resolve it first with\n * `fillInPoseFrame(fill, box)` and convert edits back with\n * `fillToBoundsFrame(next, box)`.\n */\n value: GradientFill;\n /**\n * Gradient space → overlay pixels. For a `units: 'local'` gradient this\n * is the node's local-to-screen transform; for `'world'`, the view.\n */\n toScreen: (p: Point) => Point;\n /** Overlay pixels → gradient space. Must invert `toScreen`. */\n toLocal: (p: Point) => Point;\n /** Live during a drag — wire for preview, do not write to history. */\n onInput?: (next: GradientFill) => void;\n /** Committed at drag end: one call per gesture. */\n onChange: (next: GradientFill) => void;\n /** Overlay size in CSS pixels. */\n width: number;\n height: number;\n className?: string;\n}\n\n/**\n * Direct-manipulation handles for a gradient's geometry, drawn as an SVG\n * overlay above a canvas: endpoints for linear, center and radius for\n * radial, center and angle arm for conic.\n *\n * Positioning is entirely the consumer's `toScreen` / `toLocal` — this\n * component never sees a view or a scene node, so the same handles serve a\n * node-local gradient, a world-space one, and a plain unzoomed preview.\n *\n * The overlay ignores pointer events except on the handles themselves, so\n * it can sit over live canvas content without swallowing tool input.\n */\nexport function GradientHandles(props: GradientHandlesProps): ReactElement {\n const { value, toScreen, toLocal, onInput, onChange, width, height, className } = props;\n\n return (\n <HandleOverlay width={width} height={height} className={className}>\n {renderForKind(value, toScreen, toLocal, onInput, onChange)}\n </HandleOverlay>\n );\n}\n\nfunction renderForKind(\n value: GradientFill,\n toScreen: (p: Point) => Point,\n toLocal: (p: Point) => Point,\n onInput: ((next: GradientFill) => void) | undefined,\n onChange: (next: GradientFill) => void,\n): ReactNode {\n const emit = (next: GradientFill, phase: EditPhase): void => {\n if (phase === 'input') onInput?.(next);\n else onChange(next);\n };\n\n if (value.fill === 'linear-gradient') {\n const from = toScreen(value.from);\n const to = toScreen(value.to);\n return (\n <>\n <Guide x1={from.x} y1={from.y} x2={to.x} y2={to.y} />\n <DragPoint\n radius={HANDLE_RADIUS}\n at={from}\n label=\"Gradient start\"\n onDrag={(p, phase) => emit({ ...value, from: toLocal(p) }, phase)}\n />\n <DragPoint\n radius={HANDLE_RADIUS}\n at={to}\n label=\"Gradient end\"\n onDrag={(p, phase) => emit({ ...value, to: toLocal(p) }, phase)}\n />\n </>\n );\n }\n\n if (value.fill === 'radial-gradient') {\n const center = toScreen(value.center);\n // The radius handle rides the +x axis of gradient space, so it stays on\n // the drawn circle under a rotated or anisotropic transform.\n const edge = toScreen({ x: value.center.x + value.radius, y: value.center.y });\n const screenRadius = Math.hypot(edge.x - center.x, edge.y - center.y);\n return (\n <>\n <circle className={s.guide} cx={center.x} cy={center.y} r={screenRadius} />\n <DragPoint\n radius={HANDLE_RADIUS}\n at={center}\n label=\"Gradient center\"\n onDrag={(p, phase) => emit({ ...value, center: toLocal(p) }, phase)}\n />\n <DragPoint\n radius={HANDLE_RADIUS}\n at={edge}\n label=\"Gradient radius\"\n onDrag={(p, phase) => {\n const local = toLocal(p);\n const radius = Math.hypot(local.x - value.center.x, local.y - value.center.y);\n emit({ ...value, radius: Math.max(MIN_RADIUS, radius) }, phase);\n }}\n />\n </>\n );\n }\n\n const center = toScreen(value.center);\n const { radius } = gradientGeometry(value);\n const tip = toScreen({\n x: value.center.x + Math.cos(value.angle) * radius,\n y: value.center.y + Math.sin(value.angle) * radius,\n });\n return (\n <>\n <Guide x1={center.x} y1={center.y} x2={tip.x} y2={tip.y} />\n <DragPoint\n radius={HANDLE_RADIUS}\n at={center}\n label=\"Gradient center\"\n onDrag={(p, phase) => emit({ ...value, center: toLocal(p) }, phase)}\n />\n <DragPoint\n radius={HANDLE_RADIUS}\n at={tip}\n label=\"Gradient angle\"\n onDrag={(p, phase) => {\n const local = toLocal(p);\n const angle = Math.atan2(local.y - value.center.y, local.x - value.center.x);\n emit({ ...value, angle }, phase);\n }}\n />\n </>\n );\n}\n\n/** A radius of zero divides by zero in the shader's `t`; keep it off the floor. */\nconst MIN_RADIUS = 1;\n\nconst HANDLE_RADIUS = 7;\n","import { type ReactElement, type RefObject } from 'react';\nimport {\n fillInPoseFrame,\n fillToBoundsFrame,\n isGradientFill,\n useNodeOverlayFrame,\n useOngoingAction,\n type FillStyle,\n type GradientFill,\n type RectPose,\n type Scene,\n type Stroke,\n type View,\n} from '@weasel-js/core';\nimport { isMeshGradientFill, type MeshGradientFill } from '@weasel-js/core/mesh';\nimport { MeshHandles } from '../MeshEditor/MeshHandles';\nimport { GradientHandles } from './GradientHandles';\n\n/** The paint slots a node carries. Either may hold a gradient, and each has\n * its own action, so the overlay is told which one it is editing. */\nexport type PaintSlot = 'fill' | 'stroke';\n\n/** What `SceneGradientHandles` reads off a node. Every field is optional, so\n * any richer app data shape satisfies it. */\nexport interface PaintedNodeData {\n fill?: FillStyle | null;\n stroke?: Stroke | null;\n}\n\n/** Props for {@link SceneGradientHandles}. */\nexport interface SceneGradientHandlesProps<\n TData extends PaintedNodeData,\n TLayer extends string,\n TPose extends RectPose,\n> {\n scene: Scene<TData, TLayer, TPose>;\n /** The element the overlay is positioned in. Must be the canvas's own box,\n * or the handles land somewhere other than the paint. */\n containerRef: RefObject<HTMLElement | null>;\n /** The node whose paint is being edited — usually the lone selected id. */\n nodeId: string | null | undefined;\n /** Which of the node's two paints these handles move. */\n slot: PaintSlot;\n /** Current viewport; a thunk is re-read per projection. See\n * `useNodeOverlayFrame`. */\n view?: View | (() => View);\n className?: string;\n}\n\n/**\n * Scene-aware paint handles: on-canvas geometry handles for the gradient in\n * one node's `fill` or `stroke` — `GradientHandles` for the three ramps,\n * `MeshHandles` for a mesh — committed through the `setFill` / `setStroke`\n * actions as a single undo entry per drag.\n *\n * Renders nothing unless the targeted slot holds a gradient or a mesh. The\n * node stores its gradient in `units: 'bounds'` — fractions of its own box, so the paint\n * survives pan, zoom and resize — which is not a frame polar math can work\n * in; the handles get it resolved onto the box and every edit is normalized\n * back on the way out.\n *\n * `slot` is a prop rather than state the kit keeps: an app that edits fill\n * and stroke separately already knows which one has focus.\n */\nexport function SceneGradientHandles<\n TData extends PaintedNodeData,\n TLayer extends string,\n TPose extends RectPose,\n>(props: SceneGradientHandlesProps<TData, TLayer, TPose>): ReactElement | null {\n const { scene, containerRef, nodeId, slot, view, className } = props;\n const frame = useNodeOverlayFrame(scene, containerRef, nodeId, { view });\n const edit = useOngoingAction(slot === 'fill' ? 'setFill' : 'setStroke');\n\n const paint = frame ? paintOf(scene, nodeId, slot) : null;\n if (!frame || !paint) return null;\n\n const dispatch = (next: FillStyle, phase: 'input' | 'commit'): void => {\n const normalized = fillToBoundsFrame(next, frame.box);\n if (phase === 'commit') edit.commit({ paint: normalized });\n else edit.input({ paint: normalized });\n };\n const common = {\n toScreen: frame.toScreen,\n toLocal: frame.toLocal,\n width: frame.width,\n height: frame.height,\n className,\n onInput: (next: FillStyle) => dispatch(next, 'input'),\n onChange: (next: FillStyle) => dispatch(next, 'commit'),\n };\n\n if (isGradientFill(paint)) {\n return <GradientHandles value={fillInPoseFrame(paint, frame.box) as GradientFill} {...common} />;\n }\n if (isMeshGradientFill(paint)) {\n const resolved = fillInPoseFrame(paint, frame.box) as unknown as MeshGradientFill;\n // Still in the bounds frame means the mesh kind has not loaded, and\n // handles drawn now would sit in fractions of the box.\n if (resolved.units === 'bounds') return null;\n return <MeshHandles value={resolved} {...common} />;\n }\n return null;\n}\n\nfunction paintOf<TData extends PaintedNodeData, TLayer extends string, TPose extends RectPose>(\n scene: Scene<TData, TLayer, TPose>,\n nodeId: string | null | undefined,\n slot: PaintSlot,\n): FillStyle | null | undefined {\n if (nodeId == null) return undefined;\n const data = (scene.nodes as ReadonlyMap<string, { data: TData }>).get(nodeId)?.data;\n if (!data) return undefined;\n return slot === 'fill' ? data.fill : data.stroke?.paint;\n}\n"],"mappings":"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"}
|
|
@@ -29,6 +29,7 @@ var n = {
|
|
|
29
29
|
textAlignLeft: "<path d=\"M3 4.375H17M3 8.125H12M3 11.875H17M3 15.625H12\"/>",
|
|
30
30
|
textAlignCenter: "<path d=\"M3 4.375H17M5.5 8.125H14.5M3 11.875H17M5.5 15.625H14.5\"/>",
|
|
31
31
|
textAlignRight: "<path d=\"M3 4.375H17M8 8.125H17M3 11.875H17M8 15.625H17\"/>",
|
|
32
|
+
textAlignJustify: "<path d=\"M3 4.375H17M3 8.125H17M3 11.875H17M3 15.625H12\"/>",
|
|
32
33
|
textAlignTop: "<rect x=\"1.875\" y=\"1.875\" width=\"16.25\" height=\"16.25\" rx=\"2\" stroke-width=\"1\"/><path d=\"M5.5 5.625H14.5M7 9.375H13\"/>",
|
|
33
34
|
textAlignMiddle: "<rect x=\"1.875\" y=\"1.875\" width=\"16.25\" height=\"16.25\" rx=\"2\" stroke-width=\"1\"/><path d=\"M5.5 8.125H14.5M7 11.875H13\"/>",
|
|
34
35
|
textAlignBottom: "<rect x=\"1.875\" y=\"1.875\" width=\"16.25\" height=\"16.25\" rx=\"2\" stroke-width=\"1\"/><path d=\"M5.5 10.625H14.5M7 14.375H13\"/>",
|
|
@@ -384,6 +385,7 @@ var n = {
|
|
|
384
385
|
"textAlignLeft",
|
|
385
386
|
"textAlignCenter",
|
|
386
387
|
"textAlignRight",
|
|
388
|
+
"textAlignJustify",
|
|
387
389
|
"textAlignTop",
|
|
388
390
|
"textAlignMiddle",
|
|
389
391
|
"textAlignBottom"
|
|
@@ -554,4 +556,4 @@ function l({ name: e, className: i, size: s = 20, label: l, filled: u = !1, fill
|
|
|
554
556
|
//#endregion
|
|
555
557
|
export { n as a, i, a as n, r, l as t };
|
|
556
558
|
|
|
557
|
-
//# sourceMappingURL=Icon-
|
|
559
|
+
//# sourceMappingURL=Icon--B1ME-6c.js.map
|