@weasel-js/ui 1.5.2 → 1.6.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-DCq16yFA.js +57 -0
- package/dist/chunks/ActionBar-DCq16yFA.js.map +1 -0
- package/dist/chunks/{Badge-CW9pBPFl.js → Badge-CyAIZSDo.js} +758 -741
- package/dist/chunks/Badge-CyAIZSDo.js.map +1 -0
- package/dist/chunks/{BandEditor-jY-PFKY6.js → BandEditor-Dhm_Xrlr.js} +37 -36
- package/dist/chunks/BandEditor-Dhm_Xrlr.js.map +1 -0
- package/dist/chunks/Button-BIdXHQOx.js +111 -0
- package/dist/chunks/Button-BIdXHQOx.js.map +1 -0
- package/dist/chunks/ButtonBar-D5Vi0aj_.js +46 -0
- package/dist/chunks/ButtonBar-D5Vi0aj_.js.map +1 -0
- package/dist/chunks/Callout-yEn9iPlh.js +119 -0
- package/dist/chunks/Callout-yEn9iPlh.js.map +1 -0
- package/dist/chunks/{Checkbox-BOsDAY2F.js → Checkbox-DHXTUHO9.js} +1 -1
- package/dist/chunks/Checkbox-DHXTUHO9.js.map +1 -0
- package/dist/chunks/Code-AsKpgnv6.js +24 -0
- package/dist/chunks/Code-AsKpgnv6.js.map +1 -0
- package/dist/chunks/{ColorField-BYzgZM9o.js → ColorField-BcMcW8Sa.js} +16 -16
- package/dist/chunks/ColorField-BcMcW8Sa.js.map +1 -0
- package/dist/chunks/ColorModeControl-ke5PXbBa.js +47 -0
- package/dist/chunks/ColorModeControl-ke5PXbBa.js.map +1 -0
- package/dist/chunks/{ComboBox-Cz3f0Y_8.js → ComboBox-DpT8lc3p.js} +3 -3
- package/dist/chunks/ComboBox-DpT8lc3p.js.map +1 -0
- package/dist/chunks/{CurveEditor-DXwSP-iA.js → CurveEditor-BDJXjEvK.js} +35 -35
- package/dist/chunks/CurveEditor-BDJXjEvK.js.map +1 -0
- package/dist/chunks/DataGrid-D-dZj1BD.js +152 -0
- package/dist/chunks/DataGrid-D-dZj1BD.js.map +1 -0
- package/dist/chunks/DetailList-BMER1LUZ.js +43 -0
- package/dist/chunks/DetailList-BMER1LUZ.js.map +1 -0
- package/dist/chunks/{DetentSlider-CAubVX0J.js → DetentSlider-CL8TlX3S.js} +2 -2
- package/dist/chunks/DetentSlider-CL8TlX3S.js.map +1 -0
- package/dist/chunks/Dialog-BWyNMgpf.js +66 -0
- package/dist/chunks/Dialog-BWyNMgpf.js.map +1 -0
- package/dist/chunks/Disclosure-0G0uh2fa.js +58 -0
- package/dist/chunks/Disclosure-0G0uh2fa.js.map +1 -0
- package/dist/chunks/DragGhost-B5_hb9W9.js +30 -0
- package/dist/chunks/DragGhost-B5_hb9W9.js.map +1 -0
- package/dist/chunks/{DragHandleGlyph-CppAz4_8.js → DragHandleGlyph-Dr7Fgo0I.js} +1 -1
- package/dist/chunks/DragHandleGlyph-Dr7Fgo0I.js.map +1 -0
- package/dist/chunks/{Field-DWnV8WZY.js → Field--onYxXTF.js} +7 -6
- package/dist/chunks/Field--onYxXTF.js.map +1 -0
- package/dist/chunks/FillStrokeSwatch-DNb0KXPk.js +111 -0
- package/dist/chunks/FillStrokeSwatch-DNb0KXPk.js.map +1 -0
- package/dist/chunks/{FontFamilySelect-DxfgTC3G.js → FontFamilySelect-DXlMKWfK.js} +2 -2
- package/dist/chunks/FontFamilySelect-DXlMKWfK.js.map +1 -0
- package/dist/chunks/GradientEditor-B3a-MsVJ.js +335 -0
- package/dist/chunks/GradientEditor-B3a-MsVJ.js.map +1 -0
- package/dist/chunks/{Icon-DT0x6HaQ.js → Icon-Cgzy8VgC.js} +28 -20
- package/dist/chunks/Icon-Cgzy8VgC.js.map +1 -0
- package/dist/chunks/InlineRange-eOj6JpJl.js +29 -0
- package/dist/chunks/InlineRange-eOj6JpJl.js.map +1 -0
- package/dist/chunks/{Input-DbMKpkXy.js → Input-CHmkfYaD.js} +24 -19
- package/dist/chunks/Input-CHmkfYaD.js.map +1 -0
- package/dist/chunks/ItemList-Cm-HUWCi.js +174 -0
- package/dist/chunks/ItemList-Cm-HUWCi.js.map +1 -0
- package/dist/chunks/ItemList.module-BSpCSxan.js +14 -0
- package/dist/chunks/ItemList.module-BSpCSxan.js.map +1 -0
- package/dist/chunks/{Jog-DkkTlL3_.js → Jog-DESxZ44P.js} +6 -6
- package/dist/chunks/Jog-DESxZ44P.js.map +1 -0
- package/dist/chunks/{Keycaps-DunVpejA.js → Keycaps-C0H_v2gO.js} +71 -65
- package/dist/chunks/Keycaps-C0H_v2gO.js.map +1 -0
- package/dist/chunks/LayerList-nz-QYvTF.js +427 -0
- package/dist/chunks/LayerList-nz-QYvTF.js.map +1 -0
- package/dist/chunks/ListEditor-BQ6AV3Ac.js +74 -0
- package/dist/chunks/ListEditor-BQ6AV3Ac.js.map +1 -0
- package/dist/chunks/MenuButton-DtaGenKf.js +70 -0
- package/dist/chunks/MenuButton-DtaGenKf.js.map +1 -0
- package/dist/chunks/MeshEditor-qqGc6hlD.js +87 -0
- package/dist/chunks/MeshEditor-qqGc6hlD.js.map +1 -0
- package/dist/chunks/{NumberField-CCjEDZCg.js → NumberField-CwJOMmQR.js} +27 -22
- package/dist/chunks/NumberField-CwJOMmQR.js.map +1 -0
- package/dist/chunks/{OptionsBar-DeQ-vUeZ.js → OptionsBar-DbzAgIln.js} +3 -3
- package/dist/chunks/OptionsBar-DbzAgIln.js.map +1 -0
- package/dist/chunks/{PaintField-jBOJ32rL.js → PaintField-DaJukRc6.js} +21 -21
- package/dist/chunks/PaintField-DaJukRc6.js.map +1 -0
- package/dist/chunks/{PaintInput-Qs7Rul5R.js → PaintInput-Byhna3H-.js} +24 -24
- package/dist/chunks/PaintInput-Byhna3H-.js.map +1 -0
- package/dist/chunks/{PatternPicker-BMpXWboq.js → PatternPicker-B-cUt-JT.js} +2 -2
- package/dist/chunks/PatternPicker-B-cUt-JT.js.map +1 -0
- package/dist/chunks/{Plot2D-CXf_f7QD.js → Plot2D-CTXHkL5p.js} +13 -13
- package/dist/chunks/Plot2D-CTXHkL5p.js.map +1 -0
- package/dist/chunks/{PointPlotter-S_gz7VYt.js → PointPlotter-Bxo6haKe.js} +5 -4
- package/dist/chunks/PointPlotter-Bxo6haKe.js.map +1 -0
- package/dist/chunks/Powerline-ExO5GwEr.js +42 -0
- package/dist/chunks/Powerline-ExO5GwEr.js.map +1 -0
- package/dist/chunks/Prefs-DpqFKiwY.js +476 -0
- package/dist/chunks/Prefs-DpqFKiwY.js.map +1 -0
- package/dist/chunks/Properties-D_KzDN9K.js +282 -0
- package/dist/chunks/Properties-D_KzDN9K.js.map +1 -0
- package/dist/chunks/PropertyField-DGCecAnV.js +758 -0
- package/dist/chunks/PropertyField-DGCecAnV.js.map +1 -0
- package/dist/chunks/{RadioGroup-CsVp3SEu.js → RadioGroup-Bh4-12e-.js} +2 -2
- package/dist/chunks/RadioGroup-Bh4-12e-.js.map +1 -0
- package/dist/chunks/{RangeSlider-DNr-pJpZ.js → RangeSlider-BKRRTPTZ.js} +1 -1
- package/dist/chunks/RangeSlider-BKRRTPTZ.js.map +1 -0
- package/dist/chunks/{ResizeHandle-RXFf5fXr.js → ResizeHandle-BKT0XYpx.js} +15 -15
- package/dist/chunks/ResizeHandle-BKT0XYpx.js.map +1 -0
- package/dist/chunks/Select-CzyfaXzp.js +225 -0
- package/dist/chunks/Select-CzyfaXzp.js.map +1 -0
- package/dist/chunks/{SelectionPanel-CEbLS-0D.js → SelectionPanel-BgUM1h03.js} +21 -20
- package/dist/chunks/SelectionPanel-BgUM1h03.js.map +1 -0
- package/dist/chunks/{Sidebar-qn_oSCNX.js → Sidebar-BZ0m4afn.js} +8 -8
- package/dist/chunks/Sidebar-BZ0m4afn.js.map +1 -0
- package/dist/chunks/{SidebarPanel-Bs6V21hg.js → SidebarPanel-aoIqxbtq.js} +15 -19
- package/dist/chunks/SidebarPanel-aoIqxbtq.js.map +1 -0
- package/dist/chunks/{Slider-CIIrqiFS.js → Slider-CFwQYQ10.js} +94 -92
- package/dist/chunks/Slider-CFwQYQ10.js.map +1 -0
- package/dist/chunks/{StatusBar-B4L15DSm.js → StatusBar-DzoPDY4k.js} +8 -8
- package/dist/chunks/StatusBar-DzoPDY4k.js.map +1 -0
- package/dist/chunks/SwatchGrid-BARC3rnF.js +73 -0
- package/dist/chunks/SwatchGrid-BARC3rnF.js.map +1 -0
- package/dist/chunks/{Switch-DH5POG0T.js → Switch-CSYmcM8y.js} +1 -1
- package/dist/chunks/Switch-CSYmcM8y.js.map +1 -0
- package/dist/chunks/{Tabs-BFHikpml.js → Tabs-BbpzLLdY.js} +1 -1
- package/dist/chunks/Tabs-BbpzLLdY.js.map +1 -0
- package/dist/chunks/{Timeline-DNKY_yiK.js → Timeline--58F7MED.js} +141 -145
- package/dist/chunks/Timeline--58F7MED.js.map +1 -0
- package/dist/chunks/{Toast-CI1UDuK6.js → Toast-DNBb-24H.js} +1 -1
- package/dist/chunks/Toast-DNBb-24H.js.map +1 -0
- package/dist/chunks/ToggleBar-DTjGeS0Q.js +82 -0
- package/dist/chunks/ToggleBar-DTjGeS0Q.js.map +1 -0
- package/dist/chunks/{TokenPanel-BPHq24dc.js → TokenPanel-CMq7uydV.js} +50 -47
- package/dist/chunks/TokenPanel-CMq7uydV.js.map +1 -0
- package/dist/chunks/{ToolButton-9QzJCmuM.js → ToolButton-CR4sQlxF.js} +4 -4
- package/dist/chunks/ToolButton-CR4sQlxF.js.map +1 -0
- package/dist/chunks/{ToolGroup-BJiDrH_i.js → ToolGroup-Dpg1LN0l.js} +7 -7
- package/dist/chunks/ToolGroup-Dpg1LN0l.js.map +1 -0
- package/dist/chunks/{ToolOptionsBar-CAM6RcUH.js → ToolOptionsBar-CtzTlaN2.js} +6 -5
- package/dist/chunks/ToolOptionsBar-CtzTlaN2.js.map +1 -0
- package/dist/chunks/ToolPalette-CKG9qY6P.js +83 -0
- package/dist/chunks/ToolPalette-CKG9qY6P.js.map +1 -0
- package/dist/chunks/Tooltip-Clg2mhSt.js +42 -0
- package/dist/chunks/Tooltip-Clg2mhSt.js.map +1 -0
- package/dist/chunks/Tree-DVOtc9R5.js +203 -0
- package/dist/chunks/Tree-DVOtc9R5.js.map +1 -0
- package/dist/chunks/{createKeyframeLayer-DKtO0Sw_.js → createKeyframeLayer-Czj6Y235.js} +86 -86
- package/dist/chunks/createKeyframeLayer-Czj6Y235.js.map +1 -0
- package/dist/chunks/{dlog-CMYiRF3Q.js → dlog-F0I8KsIW.js} +2 -2
- package/dist/chunks/dlog-F0I8KsIW.js.map +1 -0
- package/dist/chunks/formatShortcut-DRQrVThu.js +15 -0
- package/dist/chunks/formatShortcut-DRQrVThu.js.map +1 -0
- package/dist/chunks/icons-Dk8SRS8g.js +162 -0
- package/dist/chunks/icons-Dk8SRS8g.js.map +1 -0
- package/dist/chunks/interactiveTarget-BNZmTow2.js +24 -0
- package/dist/chunks/interactiveTarget-BNZmTow2.js.map +1 -0
- package/dist/chunks/{keyGlyph-Bp0wnLHn.js → keyGlyph-C0qTakG-.js} +1 -1
- package/dist/chunks/keyGlyph-C0qTakG-.js.map +1 -0
- package/dist/chunks/model-Du7Lta4C.js +360 -0
- package/dist/chunks/model-Du7Lta4C.js.map +1 -0
- package/dist/chunks/{number-BHz66zQO.js → number-D3NEx_8r.js} +3 -3
- package/dist/chunks/number-D3NEx_8r.js.map +1 -0
- package/dist/chunks/paintPreview-CuSZiHpR.js +42 -0
- package/dist/chunks/paintPreview-CuSZiHpR.js.map +1 -0
- package/dist/chunks/paintValue-BpaGPjV3.js +18 -0
- package/dist/chunks/paintValue-BpaGPjV3.js.map +1 -0
- package/dist/chunks/{portalHost-CjpCnuGU.js → portalHost-yTOVuCej.js} +1 -1
- package/dist/chunks/portalHost-yTOVuCej.js.map +1 -0
- package/dist/chunks/prefField-Dnl7nmjQ.js +197 -0
- package/dist/chunks/prefField-Dnl7nmjQ.js.map +1 -0
- package/dist/chunks/segmentTooltip-CStYHKzd.js +29 -0
- package/dist/chunks/segmentTooltip-CStYHKzd.js.map +1 -0
- package/dist/chunks/segmentedControl.module-Bv7DEg8f.js +11 -0
- package/dist/chunks/segmentedControl.module-Bv7DEg8f.js.map +1 -0
- package/dist/chunks/{snap-CEjuWOhN.js → snap-DRjbOiG9.js} +1 -1
- package/dist/chunks/snap-DRjbOiG9.js.map +1 -0
- package/dist/chunks/stance-BFQpS_fL.js +17 -0
- package/dist/chunks/stance-BFQpS_fL.js.map +1 -0
- package/dist/chunks/useReorderDragList-B_-5L5Gu.js +131 -0
- package/dist/chunks/useReorderDragList-B_-5L5Gu.js.map +1 -0
- package/dist/chunks/{useRovingTabIndex-Dkpf_KhN.js → useRovingTabIndex-Bp_hYm_h.js} +1 -1
- package/dist/chunks/useRovingTabIndex-Bp_hYm_h.js.map +1 -0
- package/dist/color/ramp.d.ts +38 -0
- package/dist/color/ramp.d.ts.map +1 -0
- package/dist/components/ActionBar/ActionBar.d.ts +7 -5
- package/dist/components/ActionBar/ActionBar.d.ts.map +1 -1
- package/dist/components/ActionBar/index.js +1 -1
- package/dist/components/Badge/Badge.d.ts +21 -7
- package/dist/components/Badge/Badge.d.ts.map +1 -1
- package/dist/components/Badge/effects/Aqua.d.ts +1 -1
- package/dist/components/Badge/effects/Aqua.d.ts.map +1 -1
- package/dist/components/Badge/index.d.ts +1 -1
- package/dist/components/Badge/index.d.ts.map +1 -1
- package/dist/components/Badge/index.js +1 -1
- package/dist/components/Badge/types.d.ts +6 -5
- package/dist/components/Badge/types.d.ts.map +1 -1
- package/dist/components/BandEditor/index.js +1 -1
- package/dist/components/Button/Button.d.ts +17 -3
- package/dist/components/Button/Button.d.ts.map +1 -1
- package/dist/components/Button/index.d.ts +1 -1
- package/dist/components/Button/index.d.ts.map +1 -1
- package/dist/components/Button/index.js +1 -1
- package/dist/components/ButtonBar/ButtonBar.d.ts +36 -0
- package/dist/components/ButtonBar/ButtonBar.d.ts.map +1 -0
- package/dist/components/ButtonBar/index.d.ts +3 -0
- package/dist/components/ButtonBar/index.d.ts.map +1 -0
- package/dist/components/ButtonBar/index.js +2 -0
- package/dist/components/Callout/Callout.d.ts +3 -6
- package/dist/components/Callout/Callout.d.ts.map +1 -1
- package/dist/components/Callout/index.d.ts +1 -1
- package/dist/components/Callout/index.d.ts.map +1 -1
- package/dist/components/Callout/index.js +1 -1
- package/dist/components/Checkbox/index.js +1 -1
- package/dist/components/Code/Code.d.ts +28 -0
- package/dist/components/Code/Code.d.ts.map +1 -0
- package/dist/components/Code/index.d.ts +3 -0
- package/dist/components/Code/index.d.ts.map +1 -0
- package/dist/components/Code/index.js +2 -0
- package/dist/components/ColorField/ColorField.d.ts +1 -1
- package/dist/components/ColorField/ColorField.d.ts.map +1 -1
- package/dist/components/ColorField/index.js +1 -1
- package/dist/components/ColorModeControl/ColorModeControl.d.ts +21 -0
- package/dist/components/ColorModeControl/ColorModeControl.d.ts.map +1 -0
- package/dist/components/ColorModeControl/index.d.ts +3 -0
- package/dist/components/ColorModeControl/index.d.ts.map +1 -0
- package/dist/components/ColorModeControl/index.js +2 -0
- package/dist/components/ComboBox/ComboBox.d.ts +2 -2
- 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 +1 -1
- package/dist/components/CurveEditor/CurveEditor.d.ts.map +1 -1
- package/dist/components/CurveEditor/LayeredCurveEditor.d.ts +1 -1
- package/dist/components/CurveEditor/LayeredCurveEditor.d.ts.map +1 -1
- package/dist/components/CurveEditor/index.js +3 -3
- package/dist/components/DataGrid/DataGrid.d.ts +23 -1
- package/dist/components/DataGrid/DataGrid.d.ts.map +1 -1
- package/dist/components/DataGrid/index.js +1 -1
- package/dist/components/DetailList/DetailList.d.ts +36 -0
- package/dist/components/DetailList/DetailList.d.ts.map +1 -0
- package/dist/components/DetailList/index.d.ts +3 -0
- package/dist/components/DetailList/index.d.ts.map +1 -0
- package/dist/components/DetailList/index.js +2 -0
- package/dist/components/DetentSlider/index.js +1 -1
- package/dist/components/Dialog/Dialog.d.ts +9 -3
- package/dist/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/components/Dialog/index.js +1 -1
- package/dist/components/Disclosure/Disclosure.d.ts +26 -18
- package/dist/components/Disclosure/Disclosure.d.ts.map +1 -1
- package/dist/components/Disclosure/index.d.ts +2 -2
- package/dist/components/Disclosure/index.d.ts.map +1 -1
- package/dist/components/Disclosure/index.js +2 -2
- package/dist/components/DragGhost/DragGhost.d.ts +21 -0
- package/dist/components/DragGhost/DragGhost.d.ts.map +1 -0
- package/dist/components/DragGhost/index.d.ts +3 -0
- package/dist/components/DragGhost/index.d.ts.map +1 -0
- package/dist/components/DragGhost/index.js +2 -0
- package/dist/components/DragHandleGlyph/DragHandleGlyph.d.ts +1 -1
- package/dist/components/DragHandleGlyph/DragHandleGlyph.d.ts.map +1 -1
- package/dist/components/DragHandleGlyph/index.js +1 -1
- package/dist/components/Field/Field.d.ts +1 -1
- package/dist/components/Field/Field.d.ts.map +1 -1
- package/dist/components/Field/index.js +1 -1
- package/dist/components/FillStrokeSwatch/FillStrokeSwatch.d.ts +45 -0
- package/dist/components/FillStrokeSwatch/FillStrokeSwatch.d.ts.map +1 -0
- package/dist/components/FillStrokeSwatch/index.d.ts +3 -0
- package/dist/components/FillStrokeSwatch/index.d.ts.map +1 -0
- package/dist/components/FillStrokeSwatch/index.js +2 -0
- package/dist/components/FontFamilySelect/FontFamilySelect.d.ts +1 -1
- package/dist/components/FontFamilySelect/FontFamilySelect.d.ts.map +1 -1
- package/dist/components/FontFamilySelect/index.js +1 -1
- package/dist/components/GradientEditor/SceneGradientHandles.d.ts.map +1 -1
- package/dist/components/GradientEditor/index.js +1 -1
- package/dist/components/InlineRange/InlineRange.d.ts +6 -2
- package/dist/components/InlineRange/InlineRange.d.ts.map +1 -1
- package/dist/components/InlineRange/index.js +1 -1
- package/dist/components/Input/Input.d.ts +13 -0
- 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 +70 -10
- package/dist/components/ItemList/ItemList.d.ts.map +1 -1
- package/dist/components/ItemList/index.js +1 -1
- package/dist/components/Jog/Jog.d.ts +1 -1
- package/dist/components/Jog/Jog.d.ts.map +1 -1
- package/dist/components/Jog/index.js +1 -1
- package/dist/components/Keycaps/Keycap.d.ts +1 -1
- package/dist/components/Keycaps/Keycap.d.ts.map +1 -1
- package/dist/components/Keycaps/Keycaps.d.ts +1 -1
- package/dist/components/Keycaps/Keycaps.d.ts.map +1 -1
- package/dist/components/Keycaps/index.d.ts +1 -0
- package/dist/components/Keycaps/index.d.ts.map +1 -1
- package/dist/components/Keycaps/index.js +3 -3
- package/dist/components/Keycaps/keySpecsFromMods.d.ts +2 -0
- package/dist/components/Keycaps/keySpecsFromMods.d.ts.map +1 -1
- package/dist/components/Keycaps/keySpecsFromShortcut.d.ts +16 -0
- package/dist/components/Keycaps/keySpecsFromShortcut.d.ts.map +1 -0
- package/dist/components/LayerList/LayerList.d.ts +79 -0
- package/dist/components/LayerList/LayerList.d.ts.map +1 -0
- package/dist/components/LayerList/index.d.ts +3 -0
- package/dist/components/LayerList/index.d.ts.map +1 -0
- package/dist/components/LayerList/index.js +2 -0
- package/dist/components/LayerList/useSceneLayerList.d.ts +20 -0
- package/dist/components/LayerList/useSceneLayerList.d.ts.map +1 -0
- package/dist/components/ListEditor/ListEditor.d.ts +23 -0
- package/dist/components/ListEditor/ListEditor.d.ts.map +1 -0
- package/dist/components/ListEditor/index.d.ts +3 -0
- package/dist/components/ListEditor/index.d.ts.map +1 -0
- package/dist/components/ListEditor/index.js +2 -0
- package/dist/components/MenuButton/MenuButton.d.ts +6 -2
- package/dist/components/MenuButton/MenuButton.d.ts.map +1 -1
- package/dist/components/MenuButton/index.js +1 -1
- package/dist/components/MeshEditor/index.js +1 -1
- package/dist/components/NumberField/NumberField.d.ts +13 -0
- package/dist/components/NumberField/NumberField.d.ts.map +1 -1
- package/dist/components/NumberField/UnitField.d.ts +1 -1
- package/dist/components/NumberField/UnitField.d.ts.map +1 -1
- package/dist/components/NumberField/index.js +1 -1
- package/dist/components/OptionsBar/index.js +1 -1
- package/dist/components/PaintField/index.js +1 -1
- package/dist/components/PaintInput/index.js +1 -1
- package/dist/components/PatternPicker/index.js +1 -1
- package/dist/components/Plot2D/index.js +1 -1
- package/dist/components/PointPlotter/PointPlotter.d.ts +1 -1
- package/dist/components/PointPlotter/PointPlotter.d.ts.map +1 -1
- package/dist/components/PointPlotter/index.js +1 -1
- package/dist/components/Powerline/Powerline.d.ts +5 -4
- package/dist/components/Powerline/Powerline.d.ts.map +1 -1
- package/dist/components/Powerline/index.js +2 -2
- package/dist/components/Prefs/PrefsDialog.d.ts +11 -3
- package/dist/components/Prefs/PrefsDialog.d.ts.map +1 -1
- package/dist/components/Prefs/PrefsForm.d.ts +27 -26
- package/dist/components/Prefs/PrefsForm.d.ts.map +1 -1
- package/dist/components/Prefs/PrefsPane.d.ts +24 -0
- package/dist/components/Prefs/PrefsPane.d.ts.map +1 -0
- package/dist/components/Prefs/PrefsRail.d.ts +32 -0
- package/dist/components/Prefs/PrefsRail.d.ts.map +1 -0
- package/dist/components/Prefs/PrefsRow.d.ts +32 -0
- package/dist/components/Prefs/PrefsRow.d.ts.map +1 -0
- package/dist/components/Prefs/index.d.ts +5 -2
- package/dist/components/Prefs/index.d.ts.map +1 -1
- package/dist/components/Prefs/index.js +3 -3
- package/dist/components/Prefs/prefField.d.ts +36 -0
- package/dist/components/Prefs/prefField.d.ts.map +1 -0
- package/dist/components/Prefs/schema.d.ts +30 -0
- package/dist/components/Prefs/schema.d.ts.map +1 -1
- package/dist/components/Properties/CurveField.d.ts +1 -1
- package/dist/components/Properties/CurveField.d.ts.map +1 -1
- package/dist/components/Properties/DialogRow.d.ts +33 -0
- package/dist/components/Properties/DialogRow.d.ts.map +1 -0
- package/dist/components/Properties/PropertyField.d.ts +238 -0
- package/dist/components/Properties/PropertyField.d.ts.map +1 -0
- package/dist/components/Properties/PropertyGroup.d.ts +12 -3
- package/dist/components/Properties/PropertyGroup.d.ts.map +1 -1
- package/dist/components/Properties/PropertyPanel.d.ts +34 -238
- package/dist/components/Properties/PropertyPanel.d.ts.map +1 -1
- package/dist/components/Properties/Subpanel.d.ts +14 -0
- package/dist/components/Properties/Subpanel.d.ts.map +1 -0
- package/dist/components/Properties/index.d.ts +8 -4
- package/dist/components/Properties/index.d.ts.map +1 -1
- package/dist/components/Properties/index.js +3 -2
- package/dist/components/Properties/storyLayouts.d.ts +1 -1
- package/dist/components/Properties/storyLayouts.d.ts.map +1 -1
- package/dist/components/RadioGroup/RadioGroup.d.ts +2 -2
- package/dist/components/RadioGroup/RadioGroup.d.ts.map +1 -1
- package/dist/components/RadioGroup/index.js +1 -1
- package/dist/components/RangeSlider/RangeSlider.d.ts +1 -1
- package/dist/components/RangeSlider/RangeSlider.d.ts.map +1 -1
- package/dist/components/RangeSlider/index.js +1 -1
- package/dist/components/ResizeHandle/ResizeHandle.d.ts +1 -1
- 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 +40 -7
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/index.d.ts +2 -2
- package/dist/components/Select/index.d.ts.map +1 -1
- package/dist/components/Select/index.js +2 -2
- package/dist/components/SelectionPanel/SelectionPanel.d.ts +1 -1
- package/dist/components/SelectionPanel/SelectionPanel.d.ts.map +1 -1
- package/dist/components/SelectionPanel/index.js +2 -2
- package/dist/components/SelectionPanel/renderLeaf.d.ts +14 -8
- package/dist/components/SelectionPanel/renderLeaf.d.ts.map +1 -1
- package/dist/components/Sidebar/Sidebar.d.ts +1 -1
- package/dist/components/Sidebar/Sidebar.d.ts.map +1 -1
- package/dist/components/Sidebar/index.js +1 -1
- package/dist/components/SidebarPanel/SidebarPanel.d.ts +3 -3
- package/dist/components/SidebarPanel/SidebarPanel.d.ts.map +1 -1
- package/dist/components/SidebarPanel/index.js +1 -1
- package/dist/components/Slider/Slider.d.ts +2 -1
- package/dist/components/Slider/Slider.d.ts.map +1 -1
- package/dist/components/Slider/index.js +1 -1
- package/dist/components/StatusBar/StatusBar.d.ts +3 -3
- package/dist/components/StatusBar/StatusBar.d.ts.map +1 -1
- package/dist/components/StatusBar/index.js +1 -1
- package/dist/components/SwatchGrid/SwatchGrid.d.ts +34 -0
- package/dist/components/SwatchGrid/SwatchGrid.d.ts.map +1 -0
- package/dist/components/SwatchGrid/index.d.ts +3 -0
- package/dist/components/SwatchGrid/index.d.ts.map +1 -0
- package/dist/components/SwatchGrid/index.js +2 -0
- package/dist/components/Switch/index.js +1 -1
- package/dist/components/Tabs/Tabs.d.ts +4 -4
- package/dist/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/components/Tabs/index.js +1 -1
- package/dist/components/Timeline/Lane.d.ts.map +1 -1
- package/dist/components/Timeline/index.js +1 -1
- package/dist/components/Toast/Toast.d.ts +1 -1
- 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 +2 -1
- package/dist/components/ToggleBar/ToggleBar.d.ts.map +1 -1
- package/dist/components/ToggleBar/index.js +1 -1
- package/dist/components/TokenPanel/TokenPanel.d.ts +1 -1
- package/dist/components/TokenPanel/TokenPanel.d.ts.map +1 -1
- package/dist/components/TokenPanel/index.js +1 -1
- package/dist/components/ToolButton/ToolButton.d.ts +1 -1
- package/dist/components/ToolButton/ToolButton.d.ts.map +1 -1
- package/dist/components/ToolButton/index.js +1 -1
- package/dist/components/ToolGroup/ToolGroup.d.ts +1 -1
- package/dist/components/ToolGroup/ToolGroup.d.ts.map +1 -1
- package/dist/components/ToolGroup/index.js +1 -1
- package/dist/components/ToolOptionsBar/ToolOptionsBar.d.ts +1 -1
- package/dist/components/ToolOptionsBar/ToolOptionsBar.d.ts.map +1 -1
- package/dist/components/ToolOptionsBar/index.js +1 -1
- package/dist/components/ToolPalette/ToolPalette.d.ts +1 -1
- package/dist/components/ToolPalette/ToolPalette.d.ts.map +1 -1
- package/dist/components/ToolPalette/index.d.ts +1 -0
- package/dist/components/ToolPalette/index.d.ts.map +1 -1
- package/dist/components/ToolPalette/index.js +3 -2
- package/dist/components/Tooltip/Tooltip.d.ts +8 -4
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/Tooltip/index.d.ts +1 -1
- package/dist/components/Tooltip/index.d.ts.map +1 -1
- package/dist/components/Tooltip/index.js +2 -2
- package/dist/components/Tree/Tree.d.ts +84 -0
- package/dist/components/Tree/Tree.d.ts.map +1 -0
- package/dist/components/Tree/index.d.ts +3 -0
- package/dist/components/Tree/index.d.ts.map +1 -0
- package/dist/components/Tree/index.js +2 -0
- package/dist/components/segmentTooltip.d.ts +30 -0
- package/dist/components/segmentTooltip.d.ts.map +1 -0
- package/dist/components/stance.d.ts +30 -0
- package/dist/components/stance.d.ts.map +1 -0
- package/dist/components/stanceCss.d.ts +31 -0
- package/dist/components/stanceCss.d.ts.map +1 -0
- package/dist/components/stanceSurfaces.d.ts +4 -0
- package/dist/components/stanceSurfaces.d.ts.map +1 -0
- package/dist/format/number.d.ts +3 -2
- package/dist/format/number.d.ts.map +1 -1
- package/dist/icons/Icon.d.ts +1 -1
- package/dist/icons/Icon.d.ts.map +1 -1
- package/dist/icons/ShapeKindIcon.d.ts +10 -0
- package/dist/icons/ShapeKindIcon.d.ts.map +1 -0
- package/dist/icons/index.d.ts +55 -53
- 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 +17 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +130 -79
- package/dist/index.js.map +1 -1
- package/dist/interactiveTarget.d.ts +9 -0
- package/dist/interactiveTarget.d.ts.map +1 -0
- package/dist/overlays/portalHost.d.ts +1 -1
- package/dist/overlays/portalHost.d.ts.map +1 -1
- package/dist/style.css +1 -1
- package/dist/useReorderDragList.d.ts +36 -7
- package/dist/useReorderDragList.d.ts.map +1 -1
- package/dist/useRovingTabIndex.d.ts +1 -1
- package/dist/useScrollSpy.d.ts +48 -0
- package/dist/useScrollSpy.d.ts.map +1 -0
- package/package.json +8 -8
- package/dist/chunks/ActionBar-CLwiY3Jg.js +0 -62
- package/dist/chunks/ActionBar-CLwiY3Jg.js.map +0 -1
- package/dist/chunks/ActionsBar-D84a4eGy.js +0 -41
- package/dist/chunks/ActionsBar-D84a4eGy.js.map +0 -1
- package/dist/chunks/Badge-CW9pBPFl.js.map +0 -1
- package/dist/chunks/BandEditor-jY-PFKY6.js.map +0 -1
- package/dist/chunks/Button-DRSApvnK.js +0 -90
- package/dist/chunks/Button-DRSApvnK.js.map +0 -1
- package/dist/chunks/Callout-DrNu-9Qr.js +0 -122
- package/dist/chunks/Callout-DrNu-9Qr.js.map +0 -1
- package/dist/chunks/Checkbox-BOsDAY2F.js.map +0 -1
- package/dist/chunks/ColorField-BYzgZM9o.js.map +0 -1
- package/dist/chunks/ComboBox-Cz3f0Y_8.js.map +0 -1
- package/dist/chunks/CurveEditor-DXwSP-iA.js.map +0 -1
- package/dist/chunks/DataGrid-C8KrYtw7.js +0 -104
- package/dist/chunks/DataGrid-C8KrYtw7.js.map +0 -1
- package/dist/chunks/DetentSlider-CAubVX0J.js.map +0 -1
- package/dist/chunks/Dialog-fGqqQ6o_.js +0 -61
- package/dist/chunks/Dialog-fGqqQ6o_.js.map +0 -1
- package/dist/chunks/Disclosure-CILDfWsU.js +0 -47
- package/dist/chunks/Disclosure-CILDfWsU.js.map +0 -1
- package/dist/chunks/DragHandleGlyph-CppAz4_8.js.map +0 -1
- package/dist/chunks/Field-DWnV8WZY.js.map +0 -1
- package/dist/chunks/FontFamilySelect-DxfgTC3G.js.map +0 -1
- package/dist/chunks/GradientEditor-rRBmf3G0.js +0 -333
- package/dist/chunks/GradientEditor-rRBmf3G0.js.map +0 -1
- package/dist/chunks/Icon-DT0x6HaQ.js.map +0 -1
- package/dist/chunks/InlineRange-DdIlfGqG.js +0 -29
- package/dist/chunks/InlineRange-DdIlfGqG.js.map +0 -1
- package/dist/chunks/Input-DbMKpkXy.js.map +0 -1
- package/dist/chunks/ItemList-B9zYb0GE.js +0 -42
- package/dist/chunks/ItemList-B9zYb0GE.js.map +0 -1
- package/dist/chunks/Jog-DkkTlL3_.js.map +0 -1
- package/dist/chunks/Keycaps-DunVpejA.js.map +0 -1
- package/dist/chunks/LayerStack-CfQ6GsRz.js +0 -142
- package/dist/chunks/LayerStack-CfQ6GsRz.js.map +0 -1
- package/dist/chunks/MenuButton-C_4nox39.js +0 -60
- package/dist/chunks/MenuButton-C_4nox39.js.map +0 -1
- package/dist/chunks/MeshEditor-Bipz-Ocl.js +0 -123
- package/dist/chunks/MeshEditor-Bipz-Ocl.js.map +0 -1
- package/dist/chunks/NumberField-CCjEDZCg.js.map +0 -1
- package/dist/chunks/OptionsBar-DeQ-vUeZ.js.map +0 -1
- package/dist/chunks/PaintField-jBOJ32rL.js.map +0 -1
- package/dist/chunks/PaintInput-Qs7Rul5R.js.map +0 -1
- package/dist/chunks/PatternPicker-BMpXWboq.js.map +0 -1
- package/dist/chunks/Plot2D-CXf_f7QD.js.map +0 -1
- package/dist/chunks/PointPlotter-S_gz7VYt.js.map +0 -1
- package/dist/chunks/Powerline-Ak5AWUlK.js +0 -36
- package/dist/chunks/Powerline-Ak5AWUlK.js.map +0 -1
- package/dist/chunks/Prefs-CNC8tzyN.js +0 -308
- package/dist/chunks/Prefs-CNC8tzyN.js.map +0 -1
- package/dist/chunks/Properties-Rnb6TAbN.js +0 -891
- package/dist/chunks/Properties-Rnb6TAbN.js.map +0 -1
- package/dist/chunks/RadioGroup-CsVp3SEu.js.map +0 -1
- package/dist/chunks/RangeSlider-DNr-pJpZ.js.map +0 -1
- package/dist/chunks/ResizeHandle-RXFf5fXr.js.map +0 -1
- package/dist/chunks/Select-BEope086.js +0 -190
- package/dist/chunks/Select-BEope086.js.map +0 -1
- package/dist/chunks/SelectionPanel-CEbLS-0D.js.map +0 -1
- package/dist/chunks/Sidebar-qn_oSCNX.js.map +0 -1
- package/dist/chunks/SidebarPanel-Bs6V21hg.js.map +0 -1
- package/dist/chunks/Slider-CIIrqiFS.js.map +0 -1
- package/dist/chunks/StatusBar-B4L15DSm.js.map +0 -1
- package/dist/chunks/Switch-DH5POG0T.js.map +0 -1
- package/dist/chunks/Tabs-BFHikpml.js.map +0 -1
- package/dist/chunks/Timeline-DNKY_yiK.js.map +0 -1
- package/dist/chunks/Toast-CI1UDuK6.js.map +0 -1
- package/dist/chunks/ToggleBar-CClus5Cd.js +0 -75
- package/dist/chunks/ToggleBar-CClus5Cd.js.map +0 -1
- package/dist/chunks/TokenPanel-BPHq24dc.js.map +0 -1
- package/dist/chunks/ToolButton-9QzJCmuM.js.map +0 -1
- package/dist/chunks/ToolGroup-BJiDrH_i.js.map +0 -1
- package/dist/chunks/ToolOptionsBar-CAM6RcUH.js.map +0 -1
- package/dist/chunks/ToolPalette-DGkKwE7D.js +0 -97
- package/dist/chunks/ToolPalette-DGkKwE7D.js.map +0 -1
- package/dist/chunks/Tooltip-C4YBczLq.js +0 -42
- package/dist/chunks/Tooltip-C4YBczLq.js.map +0 -1
- package/dist/chunks/createKeyframeLayer-DKtO0Sw_.js.map +0 -1
- package/dist/chunks/dlog-CMYiRF3Q.js.map +0 -1
- package/dist/chunks/icons-DFLytcui.js +0 -165
- package/dist/chunks/icons-DFLytcui.js.map +0 -1
- package/dist/chunks/keyGlyph-Bp0wnLHn.js.map +0 -1
- package/dist/chunks/model-13kZ_-mE.js +0 -483
- package/dist/chunks/model-13kZ_-mE.js.map +0 -1
- package/dist/chunks/number-BHz66zQO.js.map +0 -1
- package/dist/chunks/portalHost-CjpCnuGU.js.map +0 -1
- package/dist/chunks/range.module-DSsOIq1R.js +0 -8
- package/dist/chunks/range.module-DSsOIq1R.js.map +0 -1
- package/dist/chunks/schema-Dft4Cu2p.js +0 -47
- package/dist/chunks/schema-Dft4Cu2p.js.map +0 -1
- package/dist/chunks/segmentedControl.module-DS72X1ns.js +0 -11
- package/dist/chunks/segmentedControl.module-DS72X1ns.js.map +0 -1
- package/dist/chunks/snap-CEjuWOhN.js.map +0 -1
- package/dist/chunks/useReorderDragList-CSQGd7zQ.js +0 -102
- package/dist/chunks/useReorderDragList-CSQGd7zQ.js.map +0 -1
- package/dist/chunks/useRovingTabIndex-Dkpf_KhN.js.map +0 -1
- package/dist/components/ActionsBar/ActionsBar.d.ts +0 -35
- package/dist/components/ActionsBar/ActionsBar.d.ts.map +0 -1
- package/dist/components/ActionsBar/index.d.ts +0 -3
- package/dist/components/ActionsBar/index.d.ts.map +0 -1
- package/dist/components/ActionsBar/index.js +0 -2
- package/dist/components/LayerStack/LayerStack.d.ts +0 -62
- package/dist/components/LayerStack/LayerStack.d.ts.map +0 -1
- package/dist/components/LayerStack/index.d.ts +0 -2
- package/dist/components/LayerStack/index.d.ts.map +0 -1
- package/dist/components/LayerStack/index.js +0 -2
- package/dist/components/Properties/EffectCard.d.ts +0 -69
- package/dist/components/Properties/EffectCard.d.ts.map +0 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { r as e } from "./portalHost-yTOVuCej.js";
|
|
2
|
+
import { n as t, r as n } from "./segmentTooltip-CStYHKzd.js";
|
|
3
|
+
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
4
|
+
import { Button as a, Menu as o, MenuItem as s, MenuTrigger as c, Popover as l } from "react-aria-components";
|
|
5
|
+
var u = {
|
|
6
|
+
trigger: "_trigger_1wmxr_1",
|
|
7
|
+
label: "_label_1wmxr_30",
|
|
8
|
+
chevron: "_chevron_1wmxr_34",
|
|
9
|
+
popover: "_popover_1wmxr_41",
|
|
10
|
+
menu: "_menu_1wmxr_47",
|
|
11
|
+
item: "_item_1wmxr_60"
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
//#region src/components/MenuButton/MenuButton.tsx
|
|
15
|
+
function d({ label: d, items: f, onAction: p, isDisabled: m, className: h, "aria-label": g, portalContainer: _, shortcut: v, tooltip: y }) {
|
|
16
|
+
let { anchor: b, portalProps: x } = e(_);
|
|
17
|
+
return /* @__PURE__ */ i(c, { children: [
|
|
18
|
+
b,
|
|
19
|
+
/* @__PURE__ */ r(t, {
|
|
20
|
+
content: n({
|
|
21
|
+
tooltip: y,
|
|
22
|
+
shortcut: v,
|
|
23
|
+
ariaLabel: g,
|
|
24
|
+
label: d
|
|
25
|
+
}),
|
|
26
|
+
disabled: m,
|
|
27
|
+
children: /* @__PURE__ */ i(a, {
|
|
28
|
+
className: [u.trigger, h].filter(Boolean).join(" "),
|
|
29
|
+
isDisabled: m,
|
|
30
|
+
"aria-label": g,
|
|
31
|
+
children: [/* @__PURE__ */ r("span", {
|
|
32
|
+
className: u.label,
|
|
33
|
+
children: d
|
|
34
|
+
}), /* @__PURE__ */ r("svg", {
|
|
35
|
+
className: u.chevron,
|
|
36
|
+
viewBox: "0 0 10 10",
|
|
37
|
+
"aria-hidden": "true",
|
|
38
|
+
children: /* @__PURE__ */ r("path", {
|
|
39
|
+
d: "M2 4 L5 7 L8 4",
|
|
40
|
+
fill: "none",
|
|
41
|
+
stroke: "currentColor",
|
|
42
|
+
strokeWidth: "1.5",
|
|
43
|
+
strokeLinecap: "round",
|
|
44
|
+
strokeLinejoin: "round"
|
|
45
|
+
})
|
|
46
|
+
})]
|
|
47
|
+
})
|
|
48
|
+
}),
|
|
49
|
+
/* @__PURE__ */ r(l, {
|
|
50
|
+
className: u.popover,
|
|
51
|
+
"data-weasel-overlay": "",
|
|
52
|
+
...x,
|
|
53
|
+
children: /* @__PURE__ */ r(o, {
|
|
54
|
+
className: u.menu,
|
|
55
|
+
onAction: (e) => p(e),
|
|
56
|
+
children: f.map((e) => /* @__PURE__ */ r(s, {
|
|
57
|
+
id: e.value,
|
|
58
|
+
className: u.item,
|
|
59
|
+
isDisabled: e.isDisabled,
|
|
60
|
+
textValue: e.textValue ?? (typeof e.label == "string" ? e.label : void 0),
|
|
61
|
+
children: e.label
|
|
62
|
+
}, e.value))
|
|
63
|
+
})
|
|
64
|
+
})
|
|
65
|
+
] });
|
|
66
|
+
}
|
|
67
|
+
//#endregion
|
|
68
|
+
export { d as t };
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=MenuButton-DtaGenKf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuButton-DtaGenKf.js","names":["RACButton","s","RACPopover","RACMenu","RACMenuItem","useOverlayPortal","TriggerTooltip","segmentTooltipContent","MenuButton_module_default","MenuButton","ariaLabel","portalContainer","MenuTrigger","anchor","isDisabled","Button","className","label","Popover","portalProps","Menu","onAction","key","items","MenuItem","item"],"sources":["../../src/components/MenuButton/MenuButton.module.css","../../src/components/MenuButton/MenuButton.tsx"],"sourcesContent":[".trigger {\n display: inline-flex;\n flex: none;\n align-items: center;\n gap: var(--wzl-space-3);\n height: var(--wzl-control-h);\n padding: 0 var(--wzl-space-3) 0 var(--wzl-space-5);\n background: var(--wzl-surface-sunken);\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-sm);\n color: var(--wzl-fg);\n font-family: var(--wzl-font-ui);\n font-size: var(--wzl-font-size);\n line-height: 1;\n white-space: nowrap;\n cursor: pointer;\n transition: border-color var(--wzl-motion-fast), box-shadow var(--wzl-motion-fast);\n}\n\n.trigger[data-focus-visible] {\n border-color: var(--wzl-focus-ring);\n box-shadow: 0 0 0 1px var(--wzl-focus-ring);\n}\n\n.trigger[data-disabled] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.label {\n color: var(--wzl-fg-subtle);\n}\n\n.chevron {\n width: 10px;\n height: 10px;\n color: var(--wzl-fg-muted);\n flex: 0 0 auto;\n}\n\n.popover {\n min-width: var(--trigger-width);\n max-height: inherit;\n outline: none;\n}\n\n.menu {\n background: var(--wzl-surface-raised);\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-md);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);\n padding: var(--wzl-space-2);\n max-height: 280px;\n overflow: auto;\n outline: none;\n font-family: var(--wzl-font-ui);\n font-size: var(--wzl-font-size);\n}\n\n.item {\n display: flex;\n align-items: center;\n padding: var(--wzl-space-2) var(--wzl-space-4);\n border-radius: var(--wzl-radius-sm);\n cursor: pointer;\n color: var(--wzl-fg);\n white-space: nowrap;\n outline: none;\n}\n\n.item[data-focused] {\n background: var(--wzl-surface-hover);\n}\n\n.item[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n}\n","import type { ReactNode } from 'react';\nimport {\n Button as RACButton,\n Menu as RACMenu,\n MenuItem as RACMenuItem,\n MenuTrigger,\n Popover as RACPopover,\n} from 'react-aria-components';\nimport { useOverlayPortal, type OverlayPortalProps } from '../../overlays/portalHost';\nimport s from './MenuButton.module.css';\nimport { TriggerTooltip, segmentTooltipContent, type SegmentTooltipFields } from '../segmentTooltip';\n\n/** One row in a {@link MenuButton}'s list. */\nexport type MenuButtonItem<T extends string = string> = {\n value: T;\n label: ReactNode;\n isDisabled?: boolean;\n /** Plain-text form of `label`, for type-to-select and screen readers. A\n * string label supplies this itself. */\n textValue?: string;\n};\n\n/** Props for {@link MenuButton}. */\nexport type MenuButtonProps<T extends string = string> = {\n /** What the button says. It never changes to show a chosen row. */\n label: ReactNode;\n items: ReadonlyArray<MenuButtonItem<T>>;\n /** Fired with the value of the row chosen. */\n onAction: (value: T) => void;\n isDisabled?: boolean;\n className?: string;\n 'aria-label'?: string;\n} & SegmentTooltipFields & OverlayPortalProps;\n\n/**\n * A button that opens a list and acts on the row chosen — \"Add trial…\",\n * \"Load…\". Unlike a {@link Select} it holds no value, so it sizes to its own\n * label rather than to its widest row.\n *\n * `shortcut` adds a kit tooltip reading `Name (⌘N)`, named by `aria-label` or\n * a string `label`, as `Button` does; `tooltip` replaces that text.\n */\nexport function MenuButton<T extends string = string>({\n label,\n items,\n onAction,\n isDisabled,\n className,\n 'aria-label': ariaLabel,\n portalContainer,\n shortcut,\n tooltip,\n}: MenuButtonProps<T>) {\n const { anchor, portalProps } = useOverlayPortal(portalContainer);\n return (\n <MenuTrigger>\n {anchor}\n <TriggerTooltip\n content={segmentTooltipContent({ tooltip, shortcut, ariaLabel, label })}\n disabled={isDisabled}\n >\n <RACButton\n className={[s.trigger, className].filter(Boolean).join(' ')}\n isDisabled={isDisabled}\n aria-label={ariaLabel}\n >\n <span className={s.label}>{label}</span>\n <svg className={s.chevron} viewBox=\"0 0 10 10\" aria-hidden=\"true\">\n <path d=\"M2 4 L5 7 L8 4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </RACButton>\n </TriggerTooltip>\n {/* `data-weasel-overlay`: see Select — the list renders in a portal,\n outside the subtree the trigger sits in. */}\n <RACPopover className={s.popover} data-weasel-overlay=\"\" {...portalProps}>\n <RACMenu className={s.menu} onAction={(key) => onAction(key as T)}>\n {items.map((item) => (\n <RACMenuItem\n key={item.value}\n id={item.value}\n className={s.item}\n isDisabled={item.isDisabled}\n textValue={item.textValue ?? (typeof item.label === 'string' ? item.label : undefined)}\n >\n {item.label}\n </RACMenuItem>\n ))}\n </RACMenu>\n </RACPopover>\n </MenuTrigger>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AC0CA,SAAgBS,EAAsC,EACpD,UACA,UACA,aACA,eACA,cACA,cAAcC,GACd,oBACA,aACA,cACqB;CACrB,IAAM,EAAE,WAAQ,mBAAgBL,EAAiBM,CAAe;CAChE,OACE,kBAACC,GAAD,EAAA,UAAA;EACGC;EACD,kBAACP,GAAD;GACE,SAASC,EAAsB;IAAE;IAAS;IAAU;IAAW;GAAM,CAAC;GACtE,UAAUO;GAEV,UAAA,kBAACd,GAAD;IACE,WAAW,CAACC,EAAE,SAASe,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;IAC9C;IACZ,cAAYN;IAHd,UAAA,CAKE,kBAAC,QAAD;KAAM,WAAWT,EAAE;KAAQ,UAAAgB;IAAY,CAAA,GACvC,kBAAC,OAAD;KAAK,WAAWhB,EAAE;KAAS,SAAQ;KAAY,eAAY;KACzD,UAAA,kBAAC,QAAD;MAAM,GAAE;MAAiB,MAAK;MAAO,QAAO;MAAe,aAAY;MAAM,eAAc;MAAQ,gBAAe;KAAS,CAAA;IACxH,CAAA,CACI;;EACG,CAAA;EAGhB,kBAACC,GAAD;GAAY,WAAWD,EAAE;GAAS,uBAAoB;GAAG,GAAIkB;GAC3D,UAAA,kBAAChB,GAAD;IAAS,WAAWF,EAAE;IAAM,WAAW,MAAQoB,EAASC,CAAQ;IAC7D,UAAAC,EAAM,KAAK,MACV,kBAACnB,GAAD;KAEE,IAAIqB,EAAK;KACT,WAAWxB,EAAE;KACb,YAAYwB,EAAK;KACjB,WAAWA,EAAK,cAAc,OAAOA,EAAK,SAAU,WAAWA,EAAK,QAAQ,KAAA;KAE3E,UAAAA,EAAK;IACK,GAPNA,EAAK,KAOC,CACd;GACM,CAAA;EACC,CAAA;CACD,EAAA,CAAA;AAEjB"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { t as e } from "./ColorField-BcMcW8Sa.js";
|
|
2
|
+
import { t } from "./paintPreview-CuSZiHpR.js";
|
|
3
|
+
import { t as n } from "./ToggleBar-DTjGeS0Q.js";
|
|
4
|
+
import { asPaint as r, isMeshGradientFill as i } from "@weasel-js/core";
|
|
5
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
6
|
+
import "react";
|
|
7
|
+
var s = {
|
|
8
|
+
root: "_root_g12ri_1",
|
|
9
|
+
patch: "_patch_g12ri_7",
|
|
10
|
+
preview: "_preview_g12ri_13",
|
|
11
|
+
corners: "_corners_g12ri_21",
|
|
12
|
+
corner: "_corner_g12ri_21"
|
|
13
|
+
}, c = [
|
|
14
|
+
{
|
|
15
|
+
value: "rgb",
|
|
16
|
+
label: "sRGB"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
value: "oklab",
|
|
20
|
+
label: "OKLab"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
value: "oklch",
|
|
24
|
+
label: "OKLCh"
|
|
25
|
+
}
|
|
26
|
+
];
|
|
27
|
+
function l(t) {
|
|
28
|
+
let { value: i, onInput: l, onChange: d, spaceSwitch: f = !0, className: p } = t, m = i.interpolate ?? "rgb", h = (e, t, n) => r({
|
|
29
|
+
...i,
|
|
30
|
+
patches: i.patches.map((r, i) => {
|
|
31
|
+
if (i !== e) return r;
|
|
32
|
+
let [a, o, s, c] = r.colors, l = [
|
|
33
|
+
a,
|
|
34
|
+
o,
|
|
35
|
+
s,
|
|
36
|
+
c
|
|
37
|
+
];
|
|
38
|
+
return l[t] = n, {
|
|
39
|
+
...r,
|
|
40
|
+
colors: l
|
|
41
|
+
};
|
|
42
|
+
})
|
|
43
|
+
});
|
|
44
|
+
return /* @__PURE__ */ o("div", {
|
|
45
|
+
className: [s.root, p].filter(Boolean).join(" "),
|
|
46
|
+
children: [i.patches.map((t, n) => /* @__PURE__ */ o("div", {
|
|
47
|
+
className: s.patch,
|
|
48
|
+
children: [/* @__PURE__ */ a("span", {
|
|
49
|
+
className: s.preview,
|
|
50
|
+
"aria-hidden": "true",
|
|
51
|
+
style: { background: u(i, n) }
|
|
52
|
+
}), /* @__PURE__ */ a("div", {
|
|
53
|
+
className: s.corners,
|
|
54
|
+
children: t.colors.map((t, r) => /* @__PURE__ */ a(e, {
|
|
55
|
+
value: t,
|
|
56
|
+
alpha: !0,
|
|
57
|
+
"aria-label": `Patch ${n + 1} corner ${r + 1}`,
|
|
58
|
+
className: s.corner,
|
|
59
|
+
onInput: (e) => l?.(h(n, r, e)),
|
|
60
|
+
onChange: (e) => d(h(n, r, e))
|
|
61
|
+
}, r))
|
|
62
|
+
})]
|
|
63
|
+
}, n)), f && /* @__PURE__ */ a(n, {
|
|
64
|
+
items: c,
|
|
65
|
+
value: m,
|
|
66
|
+
size: "sm",
|
|
67
|
+
ariaLabel: "Blend space",
|
|
68
|
+
onChange: (e) => e && d(r({
|
|
69
|
+
...i,
|
|
70
|
+
interpolate: e
|
|
71
|
+
}))
|
|
72
|
+
})]
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function u(e, n) {
|
|
76
|
+
return t({
|
|
77
|
+
...e,
|
|
78
|
+
patches: [e.patches[n]]
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
function d(e) {
|
|
82
|
+
return i(e);
|
|
83
|
+
}
|
|
84
|
+
//#endregion
|
|
85
|
+
export { d as n, l as t };
|
|
86
|
+
|
|
87
|
+
//# sourceMappingURL=MeshEditor-qqGc6hlD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MeshEditor-qqGc6hlD.js","names":["s","ColorField","ToggleBar","MeshEditor_module_default","SPACES","MeshEditor","props","space","value","withCorner","asPaint","patchIndex","patch","b","c","d","next","corner","color","className","previewOf","onInput","onChange","spaceSwitch","paintPreviewCss","isMeshPaint","isMeshGradientFill","fill"],"sources":["../../src/components/MeshEditor/MeshEditor.module.css","../../src/components/MeshEditor/MeshEditor.tsx"],"sourcesContent":[".root {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-4);\n}\n\n.patch {\n display: flex;\n align-items: center;\n gap: var(--wzl-space-4);\n}\n\n.preview {\n inline-size: 34px;\n block-size: 34px;\n flex: 0 0 auto;\n border-radius: var(--wzl-radius-sm);\n box-shadow: inset 0 0 0 1px var(--wzl-border);\n}\n\n.corners {\n display: grid;\n grid-template-columns: repeat(2, auto);\n gap: var(--wzl-space-2) var(--wzl-space-3);\n min-inline-size: 0;\n}\n\n.corner {\n min-inline-size: 0;\n}\n","import { type ReactElement } from 'react';\nimport {\n asPaint,\n isMeshGradientFill,\n type ColorSpace,\n type FillStyle,\n type MeshGradientFill,\n} from '@weasel-js/core';\nimport { ColorField } from '../ColorField';\nimport { ToggleBar, type ToggleBarItem } from '../ToggleBar';\nimport { paintPreviewCss } from '../../paintPreview';\nimport s from './MeshEditor.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/** Props for {@link MeshEditor}. `onInput` fires throughout a gesture and\n * `onChange` once at its end. */\nexport interface MeshEditorProps {\n value: MeshGradientFill;\n /** Emitted as a `FillStyle`, which is what every paint control passes\n * around — `FillStyle`'s discriminant stays closed over the built-in\n * members, so a registered kind's own shape only travels through it. */\n onInput?: (next: FillStyle) => void;\n onChange: (next: FillStyle) => void;\n /** Show the sRGB / OKLab / OKLCh switch. Default true. */\n spaceSwitch?: boolean;\n className?: string;\n}\n\n/**\n * Editor for a mesh gradient's colors.\n *\n * Geometry is absent for the same reason it is absent from `GradientEditor`:\n * a patch's twelve control points are a thing to drag on the artwork, not a\n * column of numbers in a panel. What is left is what a panel is good at — the\n * color at each corner, and the space the four of them blend through.\n *\n * Corners are numbered in the patch's own walk order, which is the order the\n * paint stores them in, so a corner's number is stable while it is dragged.\n */\nexport function MeshEditor(props: MeshEditorProps): ReactElement {\n const { value, onInput, onChange, spaceSwitch = true, className } = props;\n const space = value.interpolate ?? 'rgb';\n\n const withCorner = (patchIndex: number, corner: number, color: string): FillStyle => asPaint({\n ...value,\n patches: value.patches.map((patch, i) => {\n if (i !== patchIndex) return patch;\n const [a, b, c, d] = patch.colors;\n const next: [string, string, string, string] = [a, b, c, d];\n next[corner] = color;\n return { ...patch, colors: next };\n }),\n });\n\n return (\n <div className={[s.root, className].filter(Boolean).join(' ')}>\n {value.patches.map((patch, patchIndex) => (\n // A patch has no id; its position in the list is its identity, the way\n // a gradient stop's is.\n <div key={patchIndex} className={s.patch}>\n <span\n className={s.preview}\n aria-hidden=\"true\"\n style={{ background: previewOf(value, patchIndex) }}\n />\n <div className={s.corners}>\n {patch.colors.map((color, corner) => (\n <ColorField\n key={corner}\n value={color}\n alpha\n aria-label={`Patch ${patchIndex + 1} corner ${corner + 1}`}\n className={s.corner}\n onInput={(next) => onInput?.(withCorner(patchIndex, corner, next))}\n onChange={(next) => onChange(withCorner(patchIndex, corner, next))}\n />\n ))}\n </div>\n </div>\n ))}\n\n {spaceSwitch && (\n <ToggleBar<ColorSpace>\n items={SPACES}\n value={space}\n size=\"sm\"\n ariaLabel=\"Blend space\"\n onChange={(next) => next && onChange(asPaint({ ...value, interpolate: next }))}\n />\n )}\n </div>\n );\n}\n\n/** One patch as a swatch: the paint with the other patches taken out, so a\n * multi-patch mesh shows which row belongs to which part of it. */\nfunction previewOf(value: MeshGradientFill, patchIndex: number): string | undefined {\n return paintPreviewCss(\n { ...value, patches: [value.patches[patchIndex]] } as unknown as FillStyle,\n );\n}\n\n/** Narrowing for a consumer rendering this behind a kind switch. */\nexport function isMeshPaint(fill: FillStyle | null | undefined): fill is FillStyle & MeshGradientFill {\n return isMeshGradientFill(fill);\n}\n"],"mappings":";;;;;;;;;;;;GCaMI,IAA+C;CACnD;EAAE,OAAO;EAAO,OAAO;CAAO;CAC9B;EAAE,OAAO;EAAS,OAAO;CAAQ;CACjC;EAAE,OAAO;EAAS,OAAO;CAAQ;AACnC;AA2BA,SAAgBC,EAAW,GAAsC;CAC/D,IAAM,EAAE,UAAO,YAAS,aAAU,iBAAc,IAAM,iBAAcC,GAC9DC,IAAQC,EAAM,eAAe,OAE7BC,KAAc,GAAoB,GAAgB,MAA6BC,EAAQ;EAC3F,GAAGF;EACH,SAASA,EAAM,QAAQ,KAAK,GAAO,MAAM;GACvC,IAAI,MAAMG,GAAY,OAAOC;GAC7B,IAAM,CAAC,GAAGC,GAAGC,GAAGC,KAAKH,EAAM,QACrBI,IAAyC;IAAC;IAAGH;IAAGC;IAAGC;GAAC;GAE1D,OADA,EAAKE,KAAUC,GACR;IAAE,GAAGN;IAAO,QAAQI;GAAK;EAClC,CAAC;CACH,CAAC;CAED,OACE,kBAAC,OAAD;EAAK,WAAW,CAAChB,EAAE,MAAMmB,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EAA5D,UAAA,CACGX,EAAM,QAAQ,KAAK,GAAO,MAGzB,kBAAC,OAAD;GAAsB,WAAWR,EAAE;GAAnC,UAAA,CACE,kBAAC,QAAD;IACE,WAAWA,EAAE;IACb,eAAY;IACZ,OAAO,EAAE,YAAYoB,EAAUZ,GAAOG,CAAU,EAAE;GACnD,CAAA,GACD,kBAAC,OAAD;IAAK,WAAWX,EAAE;IACf,UAAAY,EAAM,OAAO,KAAK,GAAO,MACxB,kBAACX,GAAD;KAEE,OAAOiB;KACP,OAAA;KACA,cAAY,SAASP,IAAa,EAAE,UAAUM,IAAS;KACvD,WAAWjB,EAAE;KACb,UAAU,MAASqB,IAAUZ,EAAWE,GAAYM,GAAQD,CAAI,CAAC;KACjE,WAAW,MAASM,EAASb,EAAWE,GAAYM,GAAQD,CAAI,CAAC;IAClE,GAPMC,CAON,CACF;GACE,CAAA,CACF;EAnBK,GAAAN,CAmBL,CACN,GAEAY,KACC,kBAACrB,GAAD;GACE,OAAOE;GACP,OAAOG;GACP,MAAK;GACL,WAAU;GACV,WAAW,MAASS,KAAQM,EAASZ,EAAQ;IAAE,GAAGF;IAAO,aAAaQ;GAAK,CAAC,CAAC;EAC9E,CAAA,CAEA;;AAET;AAIA,SAASI,EAAU,GAAyB,GAAwC;CAClF,OAAOI,EACL;EAAE,GAAGhB;EAAO,SAAS,CAACA,EAAM,QAAQG,EAAW;CAAE,CACnD;AACF;AAGA,SAAgBc,EAAY,GAA0E;CACpG,OAAOC,EAAmBC,CAAI;AAChC"}
|
|
@@ -1,36 +1,41 @@
|
|
|
1
|
-
import { a as e, r as t } from "./number-
|
|
2
|
-
import { n } from "./Field
|
|
1
|
+
import { a as e, r as t } from "./number-D3NEx_8r.js";
|
|
2
|
+
import { n } from "./Field--onYxXTF.js";
|
|
3
3
|
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
4
4
|
import { forwardRef as a, useRef as o, useState as s } from "react";
|
|
5
5
|
import { Button as c, FieldError as l, Group as u, Input as d, Label as f, NumberField as p, Text as m } from "react-aria-components";
|
|
6
6
|
var h = {
|
|
7
|
-
field: "
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
field: "_field_1v3hc_1",
|
|
8
|
+
row: "_row_1v3hc_12",
|
|
9
|
+
label: "_label_1v3hc_19",
|
|
10
|
+
fit: "_fit_1v3hc_20",
|
|
11
|
+
frame: "_frame_1v3hc_20",
|
|
12
|
+
below: "_below_1v3hc_22",
|
|
13
|
+
steppers: "_steppers_1v3hc_72",
|
|
14
|
+
stepper: "_stepper_1v3hc_72",
|
|
15
|
+
ghost: "_ghost_1v3hc_113"
|
|
13
16
|
}, g = a(function(e, t) {
|
|
14
|
-
let { label: a,
|
|
17
|
+
let { label: a, orientation: o = "stacked", description: s, errorMessage: g, hideSteppers: _, ghost: v, placeholder: y, width: b = "fill", className: x, ...S } = e;
|
|
15
18
|
return /* @__PURE__ */ i(p, {
|
|
16
|
-
...
|
|
19
|
+
...S,
|
|
17
20
|
className: [
|
|
18
21
|
h.field,
|
|
19
|
-
|
|
22
|
+
b === "fit" && h.fit,
|
|
20
23
|
n.root,
|
|
21
|
-
|
|
24
|
+
o === "row" && n.row,
|
|
25
|
+
o === "row" && h.row,
|
|
26
|
+
x
|
|
22
27
|
].filter(Boolean).join(" "),
|
|
23
28
|
children: [
|
|
24
29
|
a !== void 0 && /* @__PURE__ */ r(f, {
|
|
25
|
-
className: n.label
|
|
30
|
+
className: `${n.label} ${h.label}`,
|
|
26
31
|
children: a
|
|
27
32
|
}),
|
|
28
33
|
/* @__PURE__ */ i(u, {
|
|
29
|
-
className:
|
|
34
|
+
className: v ? `${h.frame} ${h.ghost}` : h.frame,
|
|
30
35
|
children: [/* @__PURE__ */ r(d, {
|
|
31
36
|
ref: t,
|
|
32
|
-
placeholder:
|
|
33
|
-
}), !
|
|
37
|
+
placeholder: y
|
|
38
|
+
}), !_ && /* @__PURE__ */ i("div", {
|
|
34
39
|
className: h.steppers,
|
|
35
40
|
children: [/* @__PURE__ */ r(c, {
|
|
36
41
|
slot: "increment",
|
|
@@ -45,14 +50,14 @@ var h = {
|
|
|
45
50
|
})]
|
|
46
51
|
})]
|
|
47
52
|
}),
|
|
48
|
-
|
|
53
|
+
s !== void 0 && /* @__PURE__ */ r(m, {
|
|
49
54
|
slot: "description",
|
|
50
|
-
className: n.hint
|
|
51
|
-
children:
|
|
55
|
+
className: `${n.hint} ${h.below}`,
|
|
56
|
+
children: s
|
|
52
57
|
}),
|
|
53
58
|
/* @__PURE__ */ r(l, {
|
|
54
|
-
className: n.error
|
|
55
|
-
children:
|
|
59
|
+
className: `${n.error} ${h.below}`,
|
|
60
|
+
children: g
|
|
56
61
|
})
|
|
57
62
|
]
|
|
58
63
|
});
|
|
@@ -109,4 +114,4 @@ function _({ value: i, onChange: a, minValue: c, maxValue: l, step: u = 1, accep
|
|
|
109
114
|
//#endregion
|
|
110
115
|
export { g as n, _ as t };
|
|
111
116
|
|
|
112
|
-
//# sourceMappingURL=NumberField-
|
|
117
|
+
//# sourceMappingURL=NumberField-CwJOMmQR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberField-CwJOMmQR.js","names":["NumberField","RACNumberField","s","RACInput","RACButton","s","parseNumber","formatNumber","NumberField_module_default","NumberField$1","forwardRef","rest","props","NumberField","width","fieldClasses","orientation","className","label","Label","Group","ghost","Input","hideSteppers","Button","description","Text","FieldError","errorMessage","UnitField","ariaLabel","draft","setDraft","useState","canceled","useRef","text","value","clamp","maxValue","minValue","n","commit","next","onChange","accepts","e","typed","step"],"sources":["../../src/components/NumberField/NumberField.module.css","../../src/components/NumberField/NumberField.tsx","../../src/components/NumberField/UnitField.tsx"],"sourcesContent":[".field {\n display: flex;\n flex-direction: column;\n width: 100%;\n min-width: 0;\n gap: var(--wzl-space-2);\n}\n\n/* `orientation='row'`: the label keeps its own width and the field takes the\n rest; description and error wrap onto a line of their own. A `fit` field\n keeps its own width and centers on the label instead. */\n.field.row {\n flex-direction: row;\n align-items: center;\n flex-wrap: wrap;\n column-gap: var(--wzl-space-4);\n row-gap: var(--wzl-space-2);\n}\n.field.row .label { flex: 0 0 auto; }\n.field.row:not(.fit) .frame { flex: 1 1 0; min-width: 0; }\n.field.row.fit { align-items: center; }\n.field.row .below { flex-basis: 100%; }\n\n.frame {\n display: flex;\n align-items: stretch;\n height: var(--wzl-field-h, var(--wzl-control-h));\n background: var(--wzl-surface-sunken);\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-sm);\n color: var(--wzl-fg);\n font-family: var(--wzl-font-ui);\n font-size: var(--wzl-font-size);\n line-height: 1;\n overflow: hidden;\n transition: border-color var(--wzl-motion-fast), box-shadow var(--wzl-motion-fast);\n}\n\n.frame:focus-within {\n border-color: var(--wzl-focus-ring);\n box-shadow: 0 0 0 1px var(--wzl-focus-ring);\n}\n\n.field[data-invalid] .frame {\n border-color: var(--wzl-danger);\n}\n\n.field[data-disabled] .frame {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.frame input {\n flex: 1;\n min-width: 0;\n background: transparent;\n border: none;\n outline: none;\n color: inherit;\n font: inherit;\n padding: 0 var(--wzl-field-pad-x);\n text-align: right;\n -moz-appearance: textfield;\n}\n\n.frame input::-webkit-outer-spin-button,\n.frame input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\n.steppers {\n display: flex;\n flex-direction: column;\n border-left: 1px solid var(--wzl-border);\n}\n\n.stepper {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--wzl-control-h-xs);\n flex: 1;\n background: transparent;\n border: none;\n color: var(--wzl-fg-muted);\n cursor: pointer;\n padding: 0;\n font-size: var(--wzl-font-size-2xs);\n line-height: 1;\n}\n\n.stepper:not(:last-child) {\n border-bottom: 1px solid var(--wzl-border);\n}\n\n.stepper[data-hovered]:not([data-disabled]) {\n background: var(--wzl-surface-hover);\n color: var(--wzl-fg);\n}\n\n.stepper[data-pressed]:not([data-disabled]) {\n background: var(--wzl-surface-pressed);\n}\n\n.stepper[data-disabled] {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n/* Mirrors the property rows' editable readout (`.readoutInput`), so a number\n sitting inside other chrome does not draw a second box around itself. */\n.ghost {\n height: auto;\n background: transparent;\n border-color: transparent;\n color: var(--wzl-accent-fg);\n font-weight: var(--wzl-font-weight-medium);\n}\n\n.ghost input {\n padding: 1px 0;\n}\n\n.ghost:hover {\n background: color-mix(in srgb, currentColor 8%, transparent);\n}\n\n.ghost:focus-within {\n background: var(--wzl-surface-sunken);\n border-color: var(--wzl-focus-ring);\n box-shadow: none;\n}\n\n/* `width='fit'` states the field's width in characters: left alone an `<input>`\n asks for its 20-character intrinsic width, wider than most rows it sits in. */\n.fit {\n width: auto;\n max-width: 100%;\n align-items: flex-start;\n}\n\n.fit .frame {\n width: fit-content;\n max-width: 100%;\n}\n\n.fit .frame input {\n flex: 0 0 auto;\n width: var(--wzl-number-field-width, 9ch);\n}\n","import { forwardRef, type ReactNode, type Ref } from 'react';\nimport {\n NumberField as RACNumberField,\n Label,\n Input as RACInput,\n Group,\n Button as RACButton,\n Text,\n FieldError,\n type NumberFieldProps as RACNumberFieldProps,\n type ValidationResult,\n} from 'react-aria-components';\nimport { fieldClasses, type FieldOrientation } from '../Field/Field';\nimport s from './NumberField.module.css';\n\n/** Props for {@link NumberField}, on top of React Aria's `NumberField` props. */\nexport type NumberFieldProps = Omit<RACNumberFieldProps, 'children' | 'className'> & {\n label?: ReactNode;\n /**\n * `'stacked'` (the default) puts the label above the field; `'row'` sets it\n * beside the field at its own width, with any description or error on a\n * line below. Same vocabulary as {@link Field}'s `orientation`.\n */\n orientation?: FieldOrientation;\n description?: ReactNode;\n errorMessage?: ReactNode | ((v: ValidationResult) => ReactNode);\n /** Hide the up/down stepper buttons. Defaults to false. */\n hideSteppers?: boolean;\n /** Render with no box until focused — the readout treatment the property\n * rows use, for a value that sits inside other chrome rather than in a form. */\n ghost?: boolean;\n /** Native input placeholder — e.g. `'Mixed'` for a multi-selection\n * editor with no shared value. */\n placeholder?: string;\n /**\n * `'fill'` (the default) takes the width of whatever row the field sits in.\n * `'fit'` sizes it to `--wzl-number-field-width` (`9ch` by default) plus its\n * own chrome, rather than to the input's 20-character intrinsic width.\n */\n width?: 'fill' | 'fit';\n className?: string;\n};\n\n/**\n * Numeric input with stepper buttons, wrapping React Aria's NumberField and\n * supplying the same label / description / errorMessage slots as `Input`.\n * Arrow keys and scroll step the value; parsing and formatting are React\n * Aria's.\n *\n * `ref` forwards to the underlying `<input>`.\n */\nexport const NumberField = forwardRef(function NumberField(\n props: NumberFieldProps,\n ref: Ref<HTMLInputElement>,\n) {\n const {\n label,\n orientation = 'stacked',\n description,\n errorMessage,\n hideSteppers,\n ghost,\n placeholder,\n width = 'fill',\n className,\n ...rest\n } = props;\n return (\n <RACNumberField\n {...rest}\n className={[\n s.field,\n width === 'fit' && s.fit,\n fieldClasses.root,\n orientation === 'row' && fieldClasses.row,\n orientation === 'row' && s.row,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {label !== undefined && <Label className={`${fieldClasses.label} ${s.label}`}>{label}</Label>}\n <Group className={ghost ? `${s.frame} ${s.ghost}` : s.frame}>\n <RACInput ref={ref} placeholder={placeholder} />\n {!hideSteppers && (\n <div className={s.steppers}>\n <RACButton slot=\"increment\" className={s.stepper} aria-label=\"Increment\">▲</RACButton>\n <RACButton slot=\"decrement\" className={s.stepper} aria-label=\"Decrement\">▼</RACButton>\n </div>\n )}\n </Group>\n {description !== undefined && (\n <Text slot=\"description\" className={`${fieldClasses.hint} ${s.below}`}>\n {description}\n </Text>\n )}\n <FieldError className={`${fieldClasses.error} ${s.below}`}>{errorMessage}</FieldError>\n </RACNumberField>\n );\n});\n","import { useRef, useState } from 'react';\nimport { formatNumber, parseNumber, type UnitTable } from '../../format/number';\nimport { fieldClasses } from '../Field/Field';\nimport s from './NumberField.module.css';\n\n/** Props for {@link UnitField}. */\nexport interface UnitFieldProps {\n /** The value in the unit the field shows. NaN shows an empty field. */\n value: number;\n /** Fired with a value the field read and clamped, in the unit it shows. */\n onChange: (value: number) => void;\n minValue?: number;\n maxValue?: number;\n /** What an arrow key adds or takes away. Defaults to 1. */\n step?: number;\n /** Units a person may type, each mapped to the factor that turns a number\n * in it into the unit the field shows: `{ mm: 0.1, cm: 1 }`. */\n accepts?: Readonly<UnitTable>;\n placeholder?: string;\n /** Render with no box until focused, as {@link NumberField}'s `ghost` does. */\n ghost?: boolean;\n /** As {@link NumberField}'s `width`. */\n width?: 'fill' | 'fit';\n className?: string;\n 'aria-label'?: string;\n}\n\n/**\n * A number typed as text, so it can carry a unit: `12mm` in a field showing\n * centimeters commits `1.2`. Commits on blur or Enter, reverts on Escape or on\n * text it cannot read, clamps to its bounds, and steps with the arrow keys.\n * React Aria's `NumberField` refuses letters as they are typed, which is why\n * this is not that.\n */\nexport function UnitField({\n value,\n onChange,\n minValue,\n maxValue,\n step = 1,\n accepts,\n placeholder,\n ghost,\n width = 'fill',\n className,\n 'aria-label': ariaLabel,\n}: UnitFieldProps) {\n const [draft, setDraft] = useState<string | null>(null);\n const canceled = useRef(false);\n const text = Number.isFinite(value)\n ? formatNumber(value, { useGrouping: false, maximumFractionDigits: 20 })\n : '';\n const clamp = (n: number) =>\n Math.min(maxValue ?? Infinity, Math.max(minValue ?? -Infinity, n));\n const commit = (n: number) => {\n const next = clamp(n);\n if (next !== value) onChange(next);\n };\n\n return (\n <div\n className={[s.field, width === 'fit' && s.fit, fieldClasses.root, className]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={ghost ? `${s.frame} ${s.ghost}` : s.frame}>\n <input\n type=\"text\"\n inputMode=\"decimal\"\n aria-label={ariaLabel}\n placeholder={placeholder}\n value={draft ?? text}\n onChange={(e) => setDraft(e.target.value)}\n onFocus={() => {\n canceled.current = false;\n }}\n onBlur={() => {\n if (draft !== null && !canceled.current) {\n const n = parseNumber(draft, accepts);\n if (Number.isFinite(n)) commit(n);\n }\n setDraft(null);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.currentTarget.blur();\n } else if (e.key === 'Escape') {\n canceled.current = true;\n e.currentTarget.blur();\n } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n const typed = draft === null ? value : parseNumber(draft, accepts);\n const from = Number.isFinite(typed) ? typed : 0;\n const next = clamp(from + (e.key === 'ArrowUp' ? step : -step));\n setDraft(null);\n if (next !== value) onChange(next);\n }\n }}\n />\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as e } from "./useRovingTabIndex-
|
|
2
|
-
import { t } from "./segmentedControl.module-
|
|
1
|
+
import { t as e } from "./useRovingTabIndex-Bp_hYm_h.js";
|
|
2
|
+
import { t } from "./segmentedControl.module-Bv7DEg8f.js";
|
|
3
3
|
import { jsx as n } from "react/jsx-runtime";
|
|
4
4
|
import "react";
|
|
5
5
|
//#region src/components/OptionsBar/OptionsBar.tsx
|
|
@@ -42,4 +42,4 @@ function r(r) {
|
|
|
42
42
|
//#endregion
|
|
43
43
|
export { r as t };
|
|
44
44
|
|
|
45
|
-
//# sourceMappingURL=OptionsBar-
|
|
45
|
+
//# sourceMappingURL=OptionsBar-DbzAgIln.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OptionsBar-DbzAgIln.js","names":["s","useRovingTabIndex","OptionsBar","props","toggle","item","items","index","roving","segmentedControl_module_default","style","height","rootCls","size","variant","className","ariaLabel","cls","i"],"sources":["../../src/components/OptionsBar/OptionsBar.tsx"],"sourcesContent":["import { type CSSProperties, type ReactElement, type ReactNode } from 'react';\nimport s from '../segmentedControl.module.css';\nimport { useRovingTabIndex } from '../../useRovingTabIndex';\n\n/**\n * One segment of an {@link OptionsBar}. Unlike `ToggleBar`, each item carries\n * its own selected state and its own `onChange`.\n */\nexport type OptionsBarItem<V extends string | number = string> = {\n value: V;\n label?: ReactNode;\n ariaLabel?: string;\n disabled?: boolean;\n selected: boolean;\n onChange: (next: boolean) => void;\n};\n\n/** Segment height and type scale for an {@link OptionsBar}. */\nexport type OptionsBarSize = 'sm' | 'md';\n/** Visual treatment of an {@link OptionsBar}. */\nexport type OptionsBarVariant = 'default' | 'minimal';\n\n/** Props for {@link OptionsBar}. */\nexport type OptionsBarProps<V extends string | number = string> = {\n items: readonly OptionsBarItem<V>[];\n ariaLabel?: string;\n className?: string;\n height?: number;\n /** Size variant. `sm` is ~60% of the default height with reduced padding\n * and font size — sized for dense surfaces like lab control panels. */\n size?: OptionsBarSize;\n /** Visual variant. `minimal` strips the pill track and glass treatment;\n * selection becomes a flat accent. For dense diagnostic surfaces. */\n variant?: OptionsBarVariant;\n};\n\n/**\n * Segmented strip of independent on/off options, each owning its own state.\n * Use it when the segments are unrelated booleans; use `ToggleBar` when they\n * are values of one setting.\n */\nexport function OptionsBar<V extends string | number = string>(props: OptionsBarProps<V>): ReactElement {\n const { items, ariaLabel, className, height, size, variant } = props;\n\n const toggle = (index: number) => {\n const item = items[index];\n if (item.disabled) return;\n item.onChange(!item.selected);\n };\n\n const roving = useRovingTabIndex({ items, itemClassName: s.segment, onActivate: toggle });\n\n const style: CSSProperties | undefined = height !== undefined\n ? ({ ['--wzl-tb-height' as string]: `${height}px` } as CSSProperties)\n : undefined;\n\n const rootCls = [\n s.root,\n size && s[`size_${size}`],\n variant && s[`variant_${variant}`],\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <div\n ref={roving.rootRef}\n className={rootCls}\n role=\"group\"\n aria-label={ariaLabel}\n style={style}\n >\n {items.map((item, i) => {\n const cls = `${s.segment}${item.selected ? ` ${s.segmentSelected}` : ''}`;\n return (\n <button\n key={item.value}\n type=\"button\"\n aria-pressed={item.selected}\n aria-label={item.ariaLabel}\n disabled={item.disabled}\n tabIndex={roving.tabIndexFor(i)}\n className={cls}\n onClick={() => toggle(i)}\n onKeyDown={roving.onKeyDown(i)}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;;AAyCA,SAAgBE,EAA+C,GAAyC;CACtG,IAAM,EAAE,UAAO,cAAW,cAAW,WAAQ,SAAM,eAAYC,GAEzDC,KAAU,MAAkB;EAChC,IAAMC,IAAOC,EAAMC;EACnB,AAAIF,EAAK,YACTA,EAAK,SAAS,CAACA,EAAK,QAAQ;CAC9B,GAEMG,IAASP,EAAkB;EAAE;EAAO,eAAeD,EAAE;EAAS,YAAYI;CAAO,CAAC,GAElFM,IAAmCC,MAAW,KAAA,IAEhD,KAAA,IADC,EAAG,mBAA8B,GAAGA,EAAO,IAAI,GAG9CC,IAAU;EACdZ,EAAE;EACFa,KAAQb,EAAE,QAAQa;EAClBC,KAAWd,EAAE,WAAWc;EACxBC;CACF,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CAE1B,OACE,kBAAC,OAAD;EACE,KAAKP,EAAO;EACZ,WAAWI;EACX,MAAK;EACL,cAAYI;EACL;EAEN,UAAAV,EAAM,KAAK,GAAM,MAAM;GACtB,IAAMW,IAAM,GAAGjB,EAAE,UAAUK,EAAK,WAAW,IAAIL,EAAE,oBAAoB;GACrE,OACE,kBAAC,UAAD;IAEE,MAAK;IACL,gBAAcK,EAAK;IACnB,cAAYA,EAAK;IACjB,UAAUA,EAAK;IACf,UAAUG,EAAO,YAAYU,CAAC;IAC9B,WAAWD;IACX,eAAeb,EAAOc,CAAC;IACvB,WAAWV,EAAO,UAAUU,CAAC;IAE5B,UAAAb,EAAK;GACA,GAXDA,EAAK,KAWJ;EAEZ,CAAC;CACE,CAAA;AAET"}
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import { r as e } from "./portalHost-
|
|
2
|
-
import {
|
|
3
|
-
import { t as n } from "./PaintInput-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { r as e } from "./portalHost-yTOVuCej.js";
|
|
2
|
+
import { t } from "./paintPreview-CuSZiHpR.js";
|
|
3
|
+
import { t as n } from "./PaintInput-Byhna3H-.js";
|
|
4
|
+
import { getPaintKind as r } from "@weasel-js/core";
|
|
5
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
6
6
|
import "react";
|
|
7
7
|
import { Button as o, Dialog as s, DialogTrigger as c, Popover as l } from "react-aria-components";
|
|
8
8
|
var u = {
|
|
9
|
-
trigger: "
|
|
10
|
-
swatch: "
|
|
11
|
-
label: "
|
|
12
|
-
popover: "
|
|
13
|
-
body: "
|
|
9
|
+
trigger: "_trigger_1p91w_1",
|
|
10
|
+
swatch: "_swatch_1p91w_27",
|
|
11
|
+
label: "_label_1p91w_48",
|
|
12
|
+
popover: "_popover_1p91w_57",
|
|
13
|
+
body: "_body_1p91w_61"
|
|
14
14
|
};
|
|
15
15
|
//#endregion
|
|
16
16
|
//#region src/components/PaintField/PaintField.tsx
|
|
17
17
|
function d(e, t) {
|
|
18
|
-
return t ? "Mixed" : e === null ? "None" : e === void 0 ? "—" :
|
|
18
|
+
return t ? "Mixed" : e === null ? "None" : e === void 0 ? "—" : r(e.fill ?? "solid")?.label ?? e.fill ?? "solid";
|
|
19
19
|
}
|
|
20
|
-
function f(
|
|
21
|
-
let { value: f, mixed: p = !1, unset: m = !1, kinds: h, allowNone: g = !0, onInput: _, onChange: v, className: y, portalContainer: b } =
|
|
22
|
-
return /* @__PURE__ */
|
|
20
|
+
function f(r) {
|
|
21
|
+
let { value: f, mixed: p = !1, unset: m = !1, kinds: h, allowNone: g = !0, onInput: _, onChange: v, className: y, portalContainer: b } = r, x = r["aria-label"], { anchor: S, portalProps: C } = e(b), w = p ? void 0 : t(f);
|
|
22
|
+
return /* @__PURE__ */ a(c, { children: [
|
|
23
23
|
S,
|
|
24
|
-
/* @__PURE__ */
|
|
24
|
+
/* @__PURE__ */ a(o, {
|
|
25
25
|
className: [u.trigger, y].filter(Boolean).join(" "),
|
|
26
26
|
"aria-label": x,
|
|
27
27
|
...m ? { "data-unset": "" } : {},
|
|
28
28
|
...p ? { "data-mixed": "" } : {},
|
|
29
|
-
children: [/* @__PURE__ */
|
|
29
|
+
children: [/* @__PURE__ */ i("span", {
|
|
30
30
|
className: u.swatch,
|
|
31
31
|
"aria-hidden": "true",
|
|
32
32
|
...w ? { style: { background: w } } : { "data-empty": "" }
|
|
33
|
-
}), /* @__PURE__ */
|
|
33
|
+
}), /* @__PURE__ */ i("span", {
|
|
34
34
|
className: u.label,
|
|
35
35
|
children: d(f, p)
|
|
36
36
|
})]
|
|
37
37
|
}),
|
|
38
|
-
/* @__PURE__ */
|
|
38
|
+
/* @__PURE__ */ i(l, {
|
|
39
39
|
className: u.popover,
|
|
40
40
|
"data-weasel-overlay": "",
|
|
41
41
|
...C,
|
|
42
|
-
children: /* @__PURE__ */
|
|
42
|
+
children: /* @__PURE__ */ i(s, {
|
|
43
43
|
className: u.body,
|
|
44
44
|
"aria-label": x ? `${x} editor` : "Paint editor",
|
|
45
|
-
children: /* @__PURE__ */
|
|
45
|
+
children: /* @__PURE__ */ i(n, {
|
|
46
46
|
value: f,
|
|
47
47
|
mixed: p,
|
|
48
48
|
unset: m,
|
|
@@ -59,4 +59,4 @@ function f(a) {
|
|
|
59
59
|
//#endregion
|
|
60
60
|
export { f as t };
|
|
61
61
|
|
|
62
|
-
//# sourceMappingURL=PaintField-
|
|
62
|
+
//# sourceMappingURL=PaintField-DaJukRc6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaintField-DaJukRc6.js","names":["RACButton","s","RACPopover","RACDialog","useOverlayPortal","PaintInput","PaintField_module_default","kindLabel","mixed","paint","getPaintKind","PaintField","props","ariaLabel","portalContainer","preview","paintPreviewCss","value","DialogTrigger","anchor","Button","className","unset","Popover","portalProps","Dialog"],"sources":["../../src/components/PaintField/PaintField.module.css","../../src/components/PaintField/PaintField.tsx"],"sourcesContent":[".trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--wzl-space-3);\n inline-size: 100%;\n min-inline-size: 0;\n padding: 1px var(--wzl-space-3) 1px 1px;\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-sm);\n background: var(--wzl-surface);\n color: var(--wzl-fg);\n font-family: var(--wzl-font-ui);\n font-size: var(--wzl-font-size-sm);\n cursor: pointer;\n}\n\n.trigger[data-unset] {\n opacity: 0.6;\n}\n\n.trigger[data-focus-visible] {\n outline: none;\n border-color: var(--wzl-focus-ring);\n box-shadow: 0 0 0 1px var(--wzl-focus-ring);\n}\n\n.swatch {\n /* A paint preview at a fixed 26:18 aspect, not a control box. */\n inline-size: 26px;\n block-size: 18px; /* not-a-control */\n flex: 0 0 auto;\n border-radius: calc(var(--wzl-radius-sm) - var(--wzl-border-w));\n /* Checker under the paint, so a translucent one reads as translucent. */\n background-color: var(--wzl-surface-raised);\n box-shadow: inset 0 0 0 1px var(--wzl-border);\n}\n\n/* No paint to show: the checker stands in rather than an invented color. */\n.swatch[data-empty],\n.trigger[data-mixed] .swatch {\n background: repeating-conic-gradient(\n var(--wzl-checker-a) 0% 25%,\n var(--wzl-checker-b) 0% 50%\n )\n 50% / var(--wzl-checker-size) var(--wzl-checker-size);\n}\n\n.label {\n flex: 1 1 auto;\n min-inline-size: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-align: start;\n}\n\n.popover {\n outline: none;\n}\n\n.body {\n inline-size: 240px;\n padding: var(--wzl-space-4);\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-md);\n background: var(--wzl-surface-raised);\n box-shadow: 0 8px 24px rgb(0 0 0 / 0.3);\n outline: none;\n font-family: var(--wzl-font-ui);\n font-size: var(--wzl-font-size);\n}\n","import { type ReactElement } from 'react';\nimport {\n Button as RACButton,\n Dialog as RACDialog,\n DialogTrigger,\n Popover as RACPopover,\n} from 'react-aria-components';\nimport { getPaintKind, type FillStyle, type PaintKind } from '@weasel-js/core';\nimport { useOverlayPortal, type OverlayPortalProps } from '../../overlays/portalHost';\nimport { paintPreviewCss } from '../../paintPreview';\nimport { PaintInput } from '../PaintInput';\nimport s from './PaintField.module.css';\n\n/** Props for {@link PaintField}. `onInput` fires throughout a gesture inside\n * the popover and `onChange` once at its end. */\nexport interface PaintFieldProps extends OverlayPortalProps {\n /** The paint being edited. `null` is an explicit \"no paint\"; `undefined` is\n * no value to show. */\n value: FillStyle | null | undefined;\n /** Indeterminate presentation: the trigger says \"Mixed\" and the editor\n * lights no kind. */\n mixed?: boolean;\n /** Dim the trigger — a value is in effect but was never chosen. */\n unset?: boolean;\n /** Restrict the editor's kind bar. Default: every registered kind. */\n kinds?: readonly PaintKind[];\n /** Offer \"None\" in the editor. Default `true`. */\n allowNone?: boolean;\n onInput?: (next: FillStyle | null) => void;\n onChange: (next: FillStyle | null) => void;\n /** Names the paint this field edits — `Fill`, `Color`. */\n 'aria-label'?: string;\n className?: string;\n}\n\n/** What the trigger says it is holding. */\nfunction kindLabel(paint: FillStyle | null | undefined, mixed: boolean): string {\n if (mixed) return 'Mixed';\n if (paint === null) return 'None';\n if (paint === undefined) return '—';\n return getPaintKind(paint.fill ?? 'solid')?.label ?? (paint.fill ?? 'solid');\n}\n\n/**\n * A whole `FillStyle` in one control slot: a swatch that says which kind it\n * holds, and a popover holding {@link PaintInput}.\n *\n * `PaintInput` itself is a kind bar over a body — six segments and a stop\n * editor — which a property row's control column cannot hold. This is the\n * shape for a narrow slot, and the difference that matters is fidelity: a\n * `ColorField` in that slot reads a gradient's first stop and writes a solid\n * back, so touching the control loses the paint.\n */\nexport function PaintField(props: PaintFieldProps): ReactElement {\n const {\n value, mixed = false, unset = false, kinds, allowNone = true,\n onInput, onChange, className, portalContainer,\n } = props;\n const ariaLabel = props['aria-label'];\n const { anchor, portalProps } = useOverlayPortal(portalContainer);\n const preview = mixed ? undefined : paintPreviewCss(value);\n\n return (\n <DialogTrigger>\n {anchor}\n <RACButton\n className={[s.trigger, className].filter(Boolean).join(' ')}\n aria-label={ariaLabel}\n {...(unset ? { 'data-unset': '' } : {})}\n {...(mixed ? { 'data-mixed': '' } : {})}\n >\n <span\n className={s.swatch}\n aria-hidden=\"true\"\n {...(preview ? { style: { background: preview } } : { 'data-empty': '' })}\n />\n <span className={s.label}>{kindLabel(value, mixed)}</span>\n </RACButton>\n {/* `data-weasel-overlay`: see Select — the popover renders in a portal,\n outside the subtree the trigger sits in. */}\n <RACPopover className={s.popover} data-weasel-overlay=\"\" {...portalProps}>\n <RACDialog className={s.body} aria-label={ariaLabel ? `${ariaLabel} editor` : 'Paint editor'}>\n <PaintInput\n value={value}\n mixed={mixed}\n unset={unset}\n kinds={kinds}\n allowNone={allowNone}\n onInput={onInput}\n onChange={onChange}\n aria-label={ariaLabel}\n />\n </RACDialog>\n </RACPopover>\n </DialogTrigger>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;ACoCA,SAASO,EAAU,GAAqC,GAAwB;CAI9E,OAHIC,IAAc,UACdC,MAAU,OAAa,SACvBA,MAAU,KAAA,IAAkB,MACzBC,EAAaD,EAAM,QAAQ,OAAO,CAAC,EAAE,SAAUA,EAAM,QAAQ;AACtE;AAYA,SAAgBE,EAAW,GAAsC;CAC/D,IAAM,EACJ,UAAO,WAAQ,IAAO,WAAQ,IAAO,UAAO,eAAY,IACxD,YAAS,aAAU,cAAW,uBAC5BC,GACEC,IAAYD,EAAM,eAClB,EAAE,WAAQ,mBAAgBR,EAAiBU,CAAe,GAC1DC,IAAUP,IAAQ,KAAA,IAAYQ,EAAgBC,CAAK;CAEzD,OACE,kBAACC,GAAD,EAAA,UAAA;EACGC;EACD,kBAACnB,GAAD;GACE,WAAW,CAACC,EAAE,SAASoB,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;GAC1D,cAAYR;GACZ,GAAKS,IAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;GACrC,GAAKd,IAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;GAJvC,UAAA,CAME,kBAAC,QAAD;IACE,WAAWP,EAAE;IACb,eAAY;IACZ,GAAKc,IAAU,EAAE,OAAO,EAAE,YAAYA,EAAQ,EAAE,IAAI,EAAE,cAAc,GAAG;GACxE,CAAA,GACD,kBAAC,QAAD;IAAM,WAAWd,EAAE;IAAQ,UAAAM,EAAUU,GAAOT,CAAK;GAAQ,CAAA,CAChD;;EAGX,kBAACN,GAAD;GAAY,WAAWD,EAAE;GAAS,uBAAoB;GAAG,GAAIuB;GAC3D,UAAA,kBAACrB,GAAD;IAAW,WAAWF,EAAE;IAAM,cAAYY,IAAY,GAAGA,EAAU,WAAW;IAC5E,UAAA,kBAACR,GAAD;KACS;KACA;KACA;KACA;KACI;KACF;KACC;KACV,cAAYQ;IACb,CAAA;GACQ,CAAA;EACD,CAAA;CACC,EAAA,CAAA;AAEnB"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { a as e, t } from "./Icon-
|
|
2
|
-
import { t as n } from "./
|
|
3
|
-
import { t as r } from "./
|
|
4
|
-
import { r as i } from "./GradientEditor-
|
|
5
|
-
import { n as a, t as o } from "./MeshEditor-
|
|
6
|
-
import { t as s } from "./PatternPicker-
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
1
|
+
import { a as e, t } from "./Icon-Cgzy8VgC.js";
|
|
2
|
+
import { t as n } from "./ColorField-BcMcW8Sa.js";
|
|
3
|
+
import { t as r } from "./ToggleBar-DTjGeS0Q.js";
|
|
4
|
+
import { r as i } from "./GradientEditor-B3a-MsVJ.js";
|
|
5
|
+
import { n as a, t as o } from "./MeshEditor-qqGc6hlD.js";
|
|
6
|
+
import { t as s } from "./PatternPicker-B-cUt-JT.js";
|
|
7
|
+
import { getPaintKind as c, listPaintKinds as l, withGradientKind as u } from "@weasel-js/core";
|
|
8
|
+
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
9
9
|
import { useCallback as p, useRef as m } from "react";
|
|
10
10
|
var h = {
|
|
11
11
|
root: "_root_1nsz3_2",
|
|
@@ -28,9 +28,9 @@ function x(e) {
|
|
|
28
28
|
function S(S) {
|
|
29
29
|
let { value: C, mixed: w = !1, unset: T = !1, kinds: E, allowNone: D = !0, onInput: O, onChange: k, className: A } = S, j = S["aria-label"], M = m(/* @__PURE__ */ new Map()), N = w ? null : x(C);
|
|
30
30
|
C != null && N !== null && M.current.set(N, C);
|
|
31
|
-
let P =
|
|
31
|
+
let P = l().filter((e) => E === void 0 || E.includes(e.id)), F = (n, r, i) => i && i in e ? {
|
|
32
32
|
value: n,
|
|
33
|
-
label: /* @__PURE__ */
|
|
33
|
+
label: /* @__PURE__ */ d(t, {
|
|
34
34
|
name: i,
|
|
35
35
|
size: 14
|
|
36
36
|
}),
|
|
@@ -38,7 +38,7 @@ function S(S) {
|
|
|
38
38
|
} : {
|
|
39
39
|
value: n,
|
|
40
40
|
label: r
|
|
41
|
-
}, I = [...D ? [F(_, "None", "paintNone")] : [], ...P.map((e) => F(e.id, e.label, e.icon))], L = p(() => C == null ? g :
|
|
41
|
+
}, I = [...D ? [F(_, "None", "paintNone")] : [], ...P.map((e) => F(e.id, e.label, e.icon))], L = p(() => C == null ? g : c(x(C) ?? "solid")?.colorOf(C) ?? g, [C]), R = (e) => {
|
|
42
42
|
if (e === N) return;
|
|
43
43
|
if (e === _) {
|
|
44
44
|
k(null);
|
|
@@ -50,20 +50,20 @@ function S(S) {
|
|
|
50
50
|
return;
|
|
51
51
|
}
|
|
52
52
|
if (C != null && y(C) && v.includes(e)) {
|
|
53
|
-
k(
|
|
53
|
+
k(u(C, e));
|
|
54
54
|
return;
|
|
55
55
|
}
|
|
56
|
-
let n =
|
|
56
|
+
let n = c(e);
|
|
57
57
|
n && k(n.seed(L()));
|
|
58
58
|
};
|
|
59
|
-
return /* @__PURE__ */
|
|
59
|
+
return /* @__PURE__ */ f("div", {
|
|
60
60
|
className: [
|
|
61
61
|
h.root,
|
|
62
62
|
T && h.unset,
|
|
63
63
|
A
|
|
64
64
|
].filter(Boolean).join(" "),
|
|
65
65
|
title: T ? "Not set" : void 0,
|
|
66
|
-
children: [/* @__PURE__ */
|
|
66
|
+
children: [/* @__PURE__ */ d(r, {
|
|
67
67
|
items: I,
|
|
68
68
|
value: N,
|
|
69
69
|
size: "sm",
|
|
@@ -72,7 +72,7 @@ function S(S) {
|
|
|
72
72
|
}), z()]
|
|
73
73
|
});
|
|
74
74
|
function z() {
|
|
75
|
-
if (w || C === void 0) return /* @__PURE__ */
|
|
75
|
+
if (w || C === void 0) return /* @__PURE__ */ d(n, {
|
|
76
76
|
mixed: !0,
|
|
77
77
|
"aria-label": j,
|
|
78
78
|
onChange: (e) => k({
|
|
@@ -81,33 +81,33 @@ function S(S) {
|
|
|
81
81
|
})
|
|
82
82
|
});
|
|
83
83
|
if (C === null) return null;
|
|
84
|
-
let e =
|
|
84
|
+
let e = c(x(C) ?? "solid");
|
|
85
85
|
if (e?.Editor) {
|
|
86
86
|
let t = e.Editor;
|
|
87
|
-
return /* @__PURE__ */
|
|
87
|
+
return /* @__PURE__ */ d(t, {
|
|
88
88
|
value: C,
|
|
89
89
|
onInput: O,
|
|
90
90
|
onChange: k
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
|
-
if (y(C)) return /* @__PURE__ */
|
|
93
|
+
if (y(C)) return /* @__PURE__ */ d(i, {
|
|
94
94
|
value: C,
|
|
95
95
|
kindSwitch: !1,
|
|
96
96
|
onInput: O,
|
|
97
97
|
onChange: k
|
|
98
98
|
});
|
|
99
|
-
if (b(C)) return /* @__PURE__ */
|
|
99
|
+
if (b(C)) return /* @__PURE__ */ d(s, {
|
|
100
100
|
value: C,
|
|
101
101
|
color: L(),
|
|
102
102
|
onChange: k
|
|
103
103
|
});
|
|
104
|
-
if (a(C)) return /* @__PURE__ */
|
|
104
|
+
if (a(C)) return /* @__PURE__ */ d(o, {
|
|
105
105
|
value: C,
|
|
106
106
|
onInput: O,
|
|
107
107
|
onChange: k
|
|
108
108
|
});
|
|
109
109
|
let t = x(C);
|
|
110
|
-
return t === "solid" ? /* @__PURE__ */
|
|
110
|
+
return t === "solid" ? /* @__PURE__ */ d(n, {
|
|
111
111
|
value: L(),
|
|
112
112
|
alpha: !0,
|
|
113
113
|
"aria-label": j,
|
|
@@ -119,7 +119,7 @@ function S(S) {
|
|
|
119
119
|
fill: "solid",
|
|
120
120
|
color: e
|
|
121
121
|
})
|
|
122
|
-
}) : /* @__PURE__ */
|
|
122
|
+
}) : /* @__PURE__ */ f("div", {
|
|
123
123
|
className: h.noEditor,
|
|
124
124
|
children: [e?.label ?? t, ": no editor"]
|
|
125
125
|
});
|
|
@@ -128,4 +128,4 @@ function S(S) {
|
|
|
128
128
|
//#endregion
|
|
129
129
|
export { S as t };
|
|
130
130
|
|
|
131
|
-
//# sourceMappingURL=PaintInput-
|
|
131
|
+
//# sourceMappingURL=PaintInput-Byhna3H-.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaintInput-Byhna3H-.js","names":["s","ICON_PATHS","ColorField","ToggleBar","GradientEditor","isMeshPaint","MeshEditor","PatternPicker","PaintInput_module_default","FALLBACK_COLOR","NONE","GRADIENT_KINDS","isGradient","paint","isPattern","kindOf","PaintInput","props","ariaLabel","remembered","useRef","active","mixed","value","entries","listPaintKinds","kinds","entry","segment","icon","id","Icon","label","items","allowNone","currentColor","useCallback","getPaintKind","switchKind","kind","seen","withGradientKind","onChange","unset","className","renderBody","Editor","onInput"],"sources":["../../src/components/PaintInput/PaintInput.module.css","../../src/components/PaintInput/PaintInput.tsx"],"sourcesContent":["/* Kind switch stacked over whichever paint body it selects. */\n.root {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-3);\n min-inline-size: 0;\n}\n\n/* A value is in effect but nobody chose it. Never louder than mixed. */\n.unset {\n opacity: 0.55;\n}\n\n/* A kind with no editor: named, not editable. */\n.noEditor {\n font-size: var(--wzl-font-size-sm);\n color: var(--wzl-fg-muted);\n}\n","import { useCallback, useRef, type ReactElement } from 'react';\nimport {\n getPaintKind,\n listPaintKinds,\n withGradientKind,\n type FillStyle,\n type GradientFill,\n type GradientKind,\n type PaintKind,\n} from '@weasel-js/core';\nimport { Icon } from '../../icons/Icon';\nimport { ICON_PATHS, type IconName } from '../../icons/paths';\nimport { ColorField } from '../ColorField';\nimport { GradientEditor } from '../GradientEditor';\nimport { MeshEditor, isMeshPaint } from '../MeshEditor';\nimport { PatternPicker, type PatternFill } from '../PatternPicker';\nimport { ToggleBar, type ToggleBarItem } from '../ToggleBar';\nimport s from './PaintInput.module.css';\n\n/** What a kind with no color of its own seeds from. */\nconst FALLBACK_COLOR = '#000000ff';\n\n/** The bar's answer for \"no paint at all\". Not a registered kind — absence\n * has no seed, no color and nothing to render — so it is this control's own\n * segment rather than a registry entry. */\nconst NONE = 'none';\n\nconst GRADIENT_KINDS: readonly string[] = [\n 'linear-gradient',\n 'radial-gradient',\n 'conic-gradient',\n];\n\nfunction isGradient(paint: FillStyle | undefined): paint is GradientFill {\n return paint !== undefined && GRADIENT_KINDS.includes(paint.fill ?? '');\n}\n\nfunction isPattern(paint: FillStyle | undefined): paint is PatternFill {\n return paint?.fill === 'pattern';\n}\n\n/** A paint's own discriminant. The solid member leaves `fill` off, and an\n * explicit `null` is the absence of paint rather than an unknown one. */\nfunction kindOf(paint: FillStyle | null | undefined): PaintKind | null {\n if (paint === null) return NONE;\n if (paint === undefined) return null;\n return paint.fill ?? 'solid';\n}\n\n/** Props for {@link PaintInput}. `onInput` fires throughout a gesture and\n * `onChange` once at its end. */\nexport interface PaintInputProps {\n /** The paint being edited. `null` is an explicit \"no paint\"; `undefined`\n * is no value to show. */\n value: FillStyle | null | undefined;\n /** Indeterminate presentation: no kind lit, and the body withheld because\n * there is no single paint to show. */\n mixed?: boolean;\n /** Dim the control — a value is in effect but was never chosen. */\n unset?: boolean;\n /** Restrict the kind bar. Default: every registered kind. */\n kinds?: readonly PaintKind[];\n /** Offer \"None\". Default `true` — the bar answers \"what kind of paint is\n * this?\" and no-paint is one of the answers. Turn it off where the slot\n * cannot express absence. */\n allowNone?: boolean;\n onInput?: (next: FillStyle | null) => void;\n onChange: (next: FillStyle | null) => void;\n /** Names the paint this control edits — `Fill`, `Color`. Carried by the\n * solid body's swatch, which is the part with a value to announce. */\n 'aria-label'?: string;\n className?: string;\n}\n\n/**\n * Editor for a whole `FillStyle` — a kind bar over whichever body that kind\n * wants.\n *\n * The bar is driven by the paint-kind registry rather than a fixed list, so a\n * consumer's registered kind appears in it and renders that entry's `Editor`.\n * The five built-in kinds keep their branch here: their editors live in this\n * package and `@weasel-js/core`, which owns the registry, cannot import it.\n *\n * Geometry is deliberately absent — on a canvas it belongs on the artwork,\n * via `<SceneGradientHandles>`.\n */\nexport function PaintInput(props: PaintInputProps): ReactElement {\n const {\n value, mixed = false, unset = false, kinds, allowNone = true,\n onInput, onChange, className,\n } = props;\n const ariaLabel = props['aria-label'];\n\n // Per-kind memory, so linear → solid → linear comes back with its stops.\n // A ref, not state: it must not survive the control being pointed at a\n // different selection, and nothing renders off it directly.\n const remembered = useRef(new Map<PaintKind, FillStyle>());\n\n const active = mixed ? null : kindOf(value);\n if (value != null && active !== null) remembered.current.set(active, value);\n\n const entries = listPaintKinds().filter(\n (entry) => kinds === undefined || kinds.includes(entry.id),\n );\n const segment = (id: string, label: string, icon: string | undefined): ToggleBarItem<PaintKind> =>\n icon && icon in ICON_PATHS\n // Icon-only: six labelled segments do not fit a property row, and the\n // full label stays the accessible name.\n // 14 to match the panel's other glyph segments. A `sm` bar is 17px tall\n // over 1px of padding, so 15 fills the segment box edge to edge.\n ? { value: id, label: <Icon name={icon as IconName} size={14} />, ariaLabel: label }\n : { value: id, label };\n\n const items: readonly ToggleBarItem<PaintKind>[] = [\n ...(allowNone ? [segment(NONE, 'None', 'paintNone')] : []),\n ...entries.map((entry) => segment(entry.id, entry.label, entry.icon)),\n ];\n\n /** The color a switch seeds from: whatever the current paint shows. */\n const currentColor = useCallback((): string => {\n if (value == null) return FALLBACK_COLOR;\n return getPaintKind(kindOf(value) ?? 'solid')?.colorOf(value) ?? FALLBACK_COLOR;\n }, [value]);\n\n const switchKind = (kind: PaintKind): void => {\n if (kind === active) return;\n if (kind === NONE) {\n onChange(null);\n return;\n }\n const seen = remembered.current.get(kind);\n if (seen !== undefined) {\n onChange(seen);\n return;\n }\n if (value != null && isGradient(value) && GRADIENT_KINDS.includes(kind)) {\n onChange(withGradientKind(value, kind as GradientKind));\n return;\n }\n const entry = getPaintKind(kind);\n if (entry) onChange(entry.seed(currentColor()));\n };\n\n return (\n <div\n className={[s.root, unset && s.unset, className].filter(Boolean).join(' ')}\n title={unset ? 'Not set' : undefined}\n >\n <ToggleBar<PaintKind>\n items={items}\n value={active}\n size=\"sm\"\n ariaLabel=\"Paint kind\"\n onChange={(kind) => kind && switchKind(kind)}\n />\n {renderBody()}\n </div>\n );\n\n function renderBody(): ReactElement | null {\n if (mixed || value === undefined) {\n return (\n <ColorField\n mixed\n aria-label={ariaLabel}\n onChange={(color) => onChange({ fill: 'solid', color })}\n />\n );\n }\n // Absence has nothing to edit. The lit segment is the whole statement.\n if (value === null) return null;\n // A registered `Editor` wins even for a built-in id: re-registering one is\n // how a consumer replaces a kit control, and the built-in branches below\n // are the fallback for the ids that ship without an entry editor.\n const entry = getPaintKind(kindOf(value) ?? 'solid');\n if (entry?.Editor) {\n const Editor = entry.Editor;\n return <Editor value={value} onInput={onInput} onChange={onChange} />;\n }\n if (isGradient(value)) {\n return (\n <GradientEditor\n value={value}\n kindSwitch={false}\n onInput={onInput}\n onChange={onChange}\n />\n );\n }\n if (isPattern(value)) {\n return <PatternPicker value={value} color={currentColor()} onChange={onChange} />;\n }\n if (isMeshPaint(value)) {\n return <MeshEditor value={value} onInput={onInput} onChange={onChange} />;\n }\n const kind = kindOf(value);\n if (kind !== 'solid') {\n // Editing a paint this control cannot represent would overwrite it, so\n // a kind with no editor is shown and left alone.\n return <div className={s.noEditor}>{entry?.label ?? kind}: no editor</div>;\n }\n return (\n <ColorField\n value={currentColor()}\n alpha\n aria-label={ariaLabel}\n onInput={(color) => onInput?.({ fill: 'solid', color })}\n onChange={(color) => onChange({ fill: 'solid', color })}\n />\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as e } from "./ToggleBar-
|
|
1
|
+
import { t as e } from "./ToggleBar-DTjGeS0Q.js";
|
|
2
2
|
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
3
3
|
import { tilePreviewCssUrl as r } from "@weasel-js/svg";
|
|
4
4
|
var i = {
|
|
@@ -90,4 +90,4 @@ function d(d) {
|
|
|
90
90
|
//#endregion
|
|
91
91
|
export { u as n, d as t };
|
|
92
92
|
|
|
93
|
-
//# sourceMappingURL=PatternPicker-
|
|
93
|
+
//# sourceMappingURL=PatternPicker-B-cUt-JT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatternPicker-B-cUt-JT.js","names":["s","ToggleBar","PatternPicker_module_default","TILES","TILE_SIZES","DEFAULT_TILE_SIZE","PREVIEW_SIZE","specOf","fill","seedPattern","spec","from","tile","PatternPicker","props","value","size","pick","color","resize","onChange","nextSize","className","preview","selected","tilePreviewCssUrl","v"],"sources":["../../src/components/PatternPicker/PatternPicker.module.css","../../src/components/PatternPicker/PatternPicker.tsx"],"sourcesContent":["/* Tile grid over the size switch. */\n.root {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-3);\n min-inline-size: 0;\n}\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(var(--wzl-swatch-size, 28px), 1fr));\n gap: 0;\n}\n\n/* The swatch's whole face is its own tile, so it must not carry a flat\n background — and the tile repeats at its own scale, not the swatch's. */\n.swatch {\n width: 100%;\n aspect-ratio: 1 / 1;\n min-width: 0;\n padding: 0;\n border: 0.5px solid var(--wzl-border);\n border-radius: 0;\n cursor: pointer;\n background-color: var(--wzl-surface-sunken);\n background-image: var(--tile-preview);\n background-repeat: repeat;\n background-size: 16px 16px;\n background-clip: padding-box;\n}\n\n.swatch:hover {\n border-color: var(--wzl-fg-muted);\n}\n\n.swatchActive {\n border-color: var(--wzl-accent);\n box-shadow: 0 0 0 1px var(--wzl-accent);\n}\n","import type { ReactElement } from 'react';\nimport type { CSSProperties } from 'react';\nimport type { FillStyle, TilePatternSpec } from '@weasel-js/core';\nimport { tilePreviewCssUrl } from '@weasel-js/svg';\nimport { ToggleBar } from '../ToggleBar';\nimport s from './PatternPicker.module.css';\n\n/** The `pattern` member of the paint union. */\nexport type PatternFill = Extract<FillStyle, { fill: 'pattern' }>;\n\nconst TILES: readonly TilePatternSpec['tile'][] = ['hatch', 'crosshatch', 'dots', 'chunks'];\n\n/** Tile sizes the picker offers, coarse enough that each reads as a\n * distinct texture rather than a nudge. */\nconst TILE_SIZES: readonly { value: number; label: string }[] = [\n { value: 4, label: 'S' },\n { value: 8, label: 'M' },\n { value: 16, label: 'L' },\n { value: 32, label: 'XL' },\n];\n\nconst DEFAULT_TILE_SIZE = 8;\n\n/** Every swatch previews at one size so the grid compares tiles, not scales. */\nconst PREVIEW_SIZE = 16;\n\n/** The spec a pattern paint carries, if it carries one. A consumer-built\n * `TextureHandle` has no spec, so the picker shows no tile selected and\n * replaces it wholesale on the next click. */\nfunction specOf(fill: PatternFill): TilePatternSpec | null {\n return 'tile' in fill.pattern ? fill.pattern : null;\n}\n\n/**\n * A pattern seeded from a color. `units: 'bounds'` anchors the tile to the\n * node's box, so the texture travels with the shape.\n */\nexport function seedPattern(\n tile: TilePatternSpec['tile'],\n from: string,\n size: number = DEFAULT_TILE_SIZE,\n): PatternFill {\n const spec: TilePatternSpec = { tile, color: from, size };\n // `chunks` is a scatter over a ground rather than a line texture; without a\n // background it reads as loose specks on whatever sits beneath.\n if (tile === 'chunks') spec.bg = '#00000000';\n return { fill: 'pattern', pattern: spec, units: 'bounds' };\n}\n\n/** Props for {@link PatternPicker}. */\nexport interface PatternPickerProps {\n /** The pattern paint being edited. */\n value: PatternFill;\n /** The color new tiles are seeded with — the paint's own, normally. */\n color: string;\n /** Committed value: one call per click. A tile pick and a size change are\n * each a complete gesture, so there is no `onInput`. */\n onChange: (next: PatternFill) => void;\n className?: string;\n}\n\n/**\n * Grid of tile swatches over a size switch, each swatch previewing the real\n * tile at the current color.\n *\n * The preview shares its shape mapper with what the renderer paints, so a\n * swatch cannot drift from the texture it selects.\n */\nexport function PatternPicker(props: PatternPickerProps): ReactElement {\n const { value, color, onChange, className } = props;\n const spec = specOf(value);\n const size = spec?.size ?? DEFAULT_TILE_SIZE;\n\n const pick = (tile: TilePatternSpec['tile']): void => {\n onChange(seedPattern(tile, color, size));\n };\n\n const resize = (nextSize: number): void => {\n if (!spec) return;\n onChange({ ...value, pattern: { ...spec, size: nextSize } });\n };\n\n return (\n <div className={[s.root, className].filter(Boolean).join(' ')}>\n <div className={s.grid}>\n {TILES.map((tile) => {\n const preview: TilePatternSpec = { tile, color, size: PREVIEW_SIZE };\n if (tile === 'chunks') preview.bg = '#00000000';\n const selected = spec?.tile === tile;\n return (\n <button\n key={tile}\n type=\"button\"\n className={[s.swatch, selected && s.swatchActive].filter(Boolean).join(' ')}\n style={{ ['--tile-preview' as string]: tilePreviewCssUrl(preview) } as CSSProperties}\n title={tile}\n aria-label={tile}\n aria-pressed={selected}\n onClick={() => pick(tile)}\n />\n );\n })}\n </div>\n <ToggleBar<number>\n items={TILE_SIZES}\n value={size}\n size=\"sm\"\n ariaLabel=\"Tile size\"\n onChange={(v) => v != null && resize(v)}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;GCUMG,IAA4C;CAAC;CAAS;CAAc;CAAQ;AAAQ,GAIpFC,IAA0D;CAC9D;EAAE,OAAO;EAAG,OAAO;CAAI;CACvB;EAAE,OAAO;EAAG,OAAO;CAAI;CACvB;EAAE,OAAO;EAAI,OAAO;CAAI;CACxB;EAAE,OAAO;EAAI,OAAO;CAAK;AAC3B,GAEMC,IAAoB,GAGpBC,IAAe;AAKrB,SAASC,EAAO,GAA2C;CACzD,OAAO,UAAUC,EAAK,UAAUA,EAAK,UAAU;AACjD;AAMA,SAAgBC,EACd,GACA,GACA,IAAeJ,GACF;CACb,IAAMK,IAAwB;EAAE;EAAM,OAAOC;EAAM;CAAK;CAIxD,OADIC,MAAS,aAAU,EAAK,KAAK,cAC1B;EAAE,MAAM;EAAW,SAASF;EAAM,OAAO;CAAS;AAC3D;AAqBA,SAAgBG,EAAc,GAAyC;CACrE,IAAM,EAAE,UAAO,UAAO,aAAU,iBAAcC,GACxCJ,IAAOH,EAAOQ,CAAK,GACnBC,IAAON,GAAM,QAAQL,GAErBY,KAAQ,MAAwC;EACpD,EAASR,EAAYG,GAAMM,GAAOF,CAAI,CAAC;CACzC,GAEMG,KAAU,MAA2B;EACzC,AAAKT,KACLU,EAAS;GAAE,GAAGL;GAAO,SAAS;IAAE,GAAGL;IAAM,MAAMW;GAAS;EAAE,CAAC;CAC7D;CAEA,OACE,kBAAC,OAAD;EAAK,WAAW,CAACrB,EAAE,MAAMsB,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EAA5D,UAAA,CACE,kBAAC,OAAD;GAAK,WAAWtB,EAAE;GACf,UAAAG,EAAM,KAAK,MAAS;IACnB,IAAMoB,IAA2B;KAAE;KAAM;KAAO,MAAMjB;IAAa;IACnE,AAAIM,MAAS,aAAU,EAAQ,KAAK;IACpC,IAAMY,IAAWd,GAAM,SAASE;IAChC,OACE,kBAAC,UAAD;KAEE,MAAK;KACL,WAAW,CAACZ,EAAE,QAAQwB,KAAYxB,EAAE,YAAY,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;KAC1E,OAAO,EAAG,kBAA6ByB,EAAkBF,CAAO,EAAE;KAClE,OAAOX;KACP,cAAYA;KACZ,gBAAcY;KACd,eAAeP,EAAKL,CAAI;IACzB,GARMA,CAQN;GAEL,CAAC;EACE,CAAA,GACL,kBAACX,GAAD;GACE,OAAOG;GACP,OAAOY;GACP,MAAK;GACL,WAAU;GACV,WAAW,MAAMU,KAAK,QAAQP,EAAOO,CAAC;EACvC,CAAA,CACE;;AAET"}
|