@weasel-js/ui 1.6.1 → 1.7.0
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/Badge-CTc9Lkwn.js +14 -0
- package/dist/chunks/Badge-CTc9Lkwn.js.map +1 -0
- package/dist/chunks/{Badge-CyAIZSDo.js → Badge-D2aD7xVL.js} +277 -228
- package/dist/chunks/Badge-D2aD7xVL.js.map +1 -0
- package/dist/chunks/BandEditor-Dd0egAgE.js +292 -0
- package/dist/chunks/BandEditor-Dd0egAgE.js.map +1 -0
- package/dist/chunks/{ButtonBar-D5Vi0aj_.js → ButtonBar-DIQTe5GQ.js} +2 -2
- package/dist/chunks/{ButtonBar-D5Vi0aj_.js.map → ButtonBar-DIQTe5GQ.js.map} +1 -1
- package/dist/chunks/Callout-ndW5_Bqx.js +116 -0
- package/dist/chunks/Callout-ndW5_Bqx.js.map +1 -0
- package/dist/chunks/CloseButton-C2J7wVfo.js +26 -0
- package/dist/chunks/CloseButton-C2J7wVfo.js.map +1 -0
- package/dist/chunks/ColorField-Yz_BkcCT.js +69 -0
- package/dist/chunks/ColorField-Yz_BkcCT.js.map +1 -0
- package/dist/chunks/{ColorModeControl-ke5PXbBa.js → ColorModeControl-BewxA0rX.js} +3 -3
- package/dist/chunks/{ColorModeControl-ke5PXbBa.js.map → ColorModeControl-BewxA0rX.js.map} +1 -1
- package/dist/chunks/{ComboBox-DpT8lc3p.js → ComboBox-B34H76CW.js} +12 -12
- package/dist/chunks/ComboBox-B34H76CW.js.map +1 -0
- package/dist/chunks/{CurveEditor-BDJXjEvK.js → CurveEditor-DUVjd25R.js} +2 -2
- package/dist/chunks/{CurveEditor-BDJXjEvK.js.map → CurveEditor-DUVjd25R.js.map} +1 -1
- package/dist/chunks/{DataGrid-D-dZj1BD.js → DataGrid-LZ2JgY2Y.js} +17 -17
- package/dist/chunks/DataGrid-LZ2JgY2Y.js.map +1 -0
- package/dist/chunks/DetailList-BKomDzg5.js +52 -0
- package/dist/chunks/DetailList-BKomDzg5.js.map +1 -0
- package/dist/chunks/{DetentSlider-CL8TlX3S.js → DetentSlider-5uQPFucv.js} +2 -2
- package/dist/chunks/{DetentSlider-CL8TlX3S.js.map → DetentSlider-5uQPFucv.js.map} +1 -1
- package/dist/chunks/Dialog-DGFutQ--.js +63 -0
- package/dist/chunks/Dialog-DGFutQ--.js.map +1 -0
- package/dist/chunks/{Disclosure-0G0uh2fa.js → Disclosure-Ch2KxYuB.js} +7 -7
- package/dist/chunks/Disclosure-Ch2KxYuB.js.map +1 -0
- package/dist/chunks/{DragHandleGlyph-Dr7Fgo0I.js → DragGrip-AoIZXfZb.js} +2 -2
- package/dist/chunks/DragGrip-AoIZXfZb.js.map +1 -0
- package/dist/chunks/FallthroughDiagram-BEHiM5IS.js +284 -0
- package/dist/chunks/FallthroughDiagram-BEHiM5IS.js.map +1 -0
- package/dist/chunks/{FontFamilySelect-DXlMKWfK.js → FontFamilySelect-DkRgNtag.js} +2 -2
- package/dist/chunks/{FontFamilySelect-DXlMKWfK.js.map → FontFamilySelect-DkRgNtag.js.map} +1 -1
- package/dist/chunks/GestureRoute-C_YGl7bJ.js +82 -0
- package/dist/chunks/GestureRoute-C_YGl7bJ.js.map +1 -0
- package/dist/chunks/GradientEditor-b7v4Ph3i.js +363 -0
- package/dist/chunks/GradientEditor-b7v4Ph3i.js.map +1 -0
- package/dist/chunks/{Icon-Cgzy8VgC.js → Icon-CcVjdq2C.js} +31 -1
- package/dist/chunks/Icon-CcVjdq2C.js.map +1 -0
- package/dist/chunks/{InlineRange-eOj6JpJl.js → InlineRange-P01ABSzo.js} +3 -3
- package/dist/chunks/InlineRange-P01ABSzo.js.map +1 -0
- package/dist/chunks/{Jog-DESxZ44P.js → Jog-DRmfrkCg.js} +3 -3
- package/dist/chunks/{Jog-DESxZ44P.js.map → Jog-DRmfrkCg.js.map} +1 -1
- package/dist/chunks/{Keycaps-C0H_v2gO.js → Keycaps-C-FJyG8k.js} +14 -14
- package/dist/chunks/Keycaps-C-FJyG8k.js.map +1 -0
- package/dist/chunks/{LayerList-nz-QYvTF.js → LayerList-wCI1EueM.js} +148 -152
- package/dist/chunks/LayerList-wCI1EueM.js.map +1 -0
- package/dist/chunks/ListEditor-BeA60TAA.js +71 -0
- package/dist/chunks/ListEditor-BeA60TAA.js.map +1 -0
- package/dist/chunks/{MenuButton-DtaGenKf.js → MenuButton-BSqEChJE.js} +7 -7
- package/dist/chunks/MenuButton-BSqEChJE.js.map +1 -0
- package/dist/chunks/{MeshEditor-qqGc6hlD.js → MeshEditor-D1HLZcAh.js} +3 -3
- package/dist/chunks/{MeshEditor-qqGc6hlD.js.map → MeshEditor-D1HLZcAh.js.map} +1 -1
- package/dist/chunks/NumberField-BnJxcazc.js +206 -0
- package/dist/chunks/NumberField-BnJxcazc.js.map +1 -0
- package/dist/chunks/{OptionsBar-DbzAgIln.js → OptionsBar-ujxYidhj.js} +2 -2
- package/dist/chunks/{OptionsBar-DbzAgIln.js.map → OptionsBar-ujxYidhj.js.map} +1 -1
- package/dist/chunks/{PaintField-DaJukRc6.js → PaintField-DadOELMg.js} +2 -2
- package/dist/chunks/{PaintField-DaJukRc6.js.map → PaintField-DadOELMg.js.map} +1 -1
- package/dist/chunks/PaintInput-v8Y7MDbH.js +121 -0
- package/dist/chunks/PaintInput-v8Y7MDbH.js.map +1 -0
- package/dist/chunks/{PatternPicker-B-cUt-JT.js → PatternPicker-R_EQtw2Q.js} +2 -2
- package/dist/chunks/{PatternPicker-B-cUt-JT.js.map → PatternPicker-R_EQtw2Q.js.map} +1 -1
- package/dist/chunks/{PointPlotter-Bxo6haKe.js → PointPlotter-ldI4RrU1.js} +2 -2
- package/dist/chunks/{PointPlotter-Bxo6haKe.js.map → PointPlotter-ldI4RrU1.js.map} +1 -1
- package/dist/chunks/{Powerline-ExO5GwEr.js → Powerline-DNyH885r.js} +2 -2
- package/dist/chunks/{Powerline-ExO5GwEr.js.map → Powerline-DNyH885r.js.map} +1 -1
- package/dist/chunks/{Prefs-DpqFKiwY.js → Prefs-ByA-x51i.js} +46 -34
- package/dist/chunks/Prefs-ByA-x51i.js.map +1 -0
- package/dist/chunks/{Properties-D_KzDN9K.js → Properties-DmAeQ3mk.js} +35 -29
- package/dist/chunks/Properties-DmAeQ3mk.js.map +1 -0
- package/dist/chunks/PropertyField-DfIJJ5GS.js +673 -0
- package/dist/chunks/PropertyField-DfIJJ5GS.js.map +1 -0
- package/dist/chunks/{RangeSlider-BKRRTPTZ.js → RangeSlider-SEGE-7VF.js} +8 -8
- package/dist/chunks/RangeSlider-SEGE-7VF.js.map +1 -0
- package/dist/chunks/{ResizeHandle-BKT0XYpx.js → ResizeHandle-rKVWyeTG.js} +3 -3
- package/dist/chunks/ResizeHandle-rKVWyeTG.js.map +1 -0
- package/dist/chunks/Select-ClmKtyWg.js +229 -0
- package/dist/chunks/Select-ClmKtyWg.js.map +1 -0
- package/dist/chunks/SelectionPanel-BaQnX4Bs.js +106 -0
- package/dist/chunks/SelectionPanel-BaQnX4Bs.js.map +1 -0
- package/dist/chunks/SidebarPanel-BblDEz4G.js +53 -0
- package/dist/chunks/SidebarPanel-BblDEz4G.js.map +1 -0
- package/dist/chunks/Slider-YofwGOI4.js +389 -0
- package/dist/chunks/Slider-YofwGOI4.js.map +1 -0
- package/dist/chunks/{StatusBar-DzoPDY4k.js → StatusBar-Ca9Dvhhq.js} +6 -6
- package/dist/chunks/StatusBar-Ca9Dvhhq.js.map +1 -0
- package/dist/chunks/{SwatchGrid-BARC3rnF.js → SwatchGrid-BYvA8Bmh.js} +3 -3
- package/dist/chunks/SwatchGrid-BYvA8Bmh.js.map +1 -0
- package/dist/chunks/ThemeSwitcher-BlsInAmR.js +38 -0
- package/dist/chunks/ThemeSwitcher-BlsInAmR.js.map +1 -0
- package/dist/chunks/{Timeline--58F7MED.js → Timeline-B39cwfMB.js} +207 -203
- package/dist/chunks/Timeline-B39cwfMB.js.map +1 -0
- package/dist/chunks/{Toast-DNBb-24H.js → Toast-BF9GE0HC.js} +25 -27
- package/dist/chunks/Toast-BF9GE0HC.js.map +1 -0
- package/dist/chunks/{ToggleBar-DTjGeS0Q.js → ToggleBar-BTYkBXU9.js} +8 -8
- package/dist/chunks/ToggleBar-BTYkBXU9.js.map +1 -0
- package/dist/chunks/{TokenPanel-CMq7uydV.js → TokenPanel-CMDAOfYH.js} +5 -5
- package/dist/chunks/{TokenPanel-CMq7uydV.js.map → TokenPanel-CMDAOfYH.js.map} +1 -1
- package/dist/chunks/{ToolButton-CR4sQlxF.js → ToolButton-CAHBa08P.js} +6 -6
- package/dist/chunks/ToolButton-CAHBa08P.js.map +1 -0
- package/dist/chunks/{ToolOptionsBar-CtzTlaN2.js → ToolOptionsBar-D_GCrBAN.js} +8 -7
- package/dist/chunks/ToolOptionsBar-D_GCrBAN.js.map +1 -0
- package/dist/chunks/{ToolPalette-CKG9qY6P.js → ToolPalette-OOWN51Xx.js} +3 -3
- package/dist/chunks/ToolPalette-OOWN51Xx.js.map +1 -0
- package/dist/chunks/{Tree-DVOtc9R5.js → Tree-Cc8lIzgM.js} +2 -2
- package/dist/chunks/{Tree-DVOtc9R5.js.map → Tree-Cc8lIzgM.js.map} +1 -1
- package/dist/chunks/{createKeyframeLayer-Czj6Y235.js → createKeyframeLayer-DVl321_l.js} +15 -16
- package/dist/chunks/createKeyframeLayer-DVl321_l.js.map +1 -0
- package/dist/chunks/{icons-Dk8SRS8g.js → icons-BhcR1l64.js} +2 -2
- package/dist/chunks/icons-BhcR1l64.js.map +1 -0
- package/dist/chunks/{model-Du7Lta4C.js → model-BaF65rnX.js} +95 -90
- package/dist/chunks/model-BaF65rnX.js.map +1 -0
- package/dist/chunks/{prefField-Dnl7nmjQ.js → prefField-BopW9bjx.js} +17 -13
- package/dist/chunks/prefField-BopW9bjx.js.map +1 -0
- package/dist/chunks/segmentedControl.module-D6SzYJD7.js +11 -0
- package/dist/chunks/segmentedControl.module-D6SzYJD7.js.map +1 -0
- package/dist/chunks/{useReorderDragList-B_-5L5Gu.js → useReorderDragList-FCMoFIzH.js} +2 -2
- package/dist/chunks/useReorderDragList-FCMoFIzH.js.map +1 -0
- package/dist/components/Badge/bases/Powerline.d.ts.map +1 -1
- package/dist/components/Badge/bases/edgeProfiles.d.ts +31 -4
- package/dist/components/Badge/bases/edgeProfiles.d.ts.map +1 -1
- package/dist/components/Badge/index.d.ts +1 -0
- package/dist/components/Badge/index.d.ts.map +1 -1
- package/dist/components/Badge/index.js +3 -2
- package/dist/components/Badge/statusIcons.d.ts +5 -0
- package/dist/components/Badge/statusIcons.d.ts.map +1 -0
- package/dist/components/BandEditor/BandEditor.d.ts +16 -7
- package/dist/components/BandEditor/BandEditor.d.ts.map +1 -1
- package/dist/components/BandEditor/bands.d.ts +5 -2
- package/dist/components/BandEditor/bands.d.ts.map +1 -1
- package/dist/components/BandEditor/index.js +1 -1
- package/dist/components/ButtonBar/index.js +1 -1
- package/dist/components/Callout/Callout.d.ts +2 -2
- package/dist/components/Callout/Callout.d.ts.map +1 -1
- package/dist/components/Callout/index.js +1 -1
- package/dist/components/CloseButton/CloseButton.d.ts +21 -0
- package/dist/components/CloseButton/CloseButton.d.ts.map +1 -0
- package/dist/components/CloseButton/index.d.ts +3 -0
- package/dist/components/CloseButton/index.d.ts.map +1 -0
- package/dist/components/CloseButton/index.js +2 -0
- package/dist/components/ColorField/ColorField.d.ts +5 -1
- package/dist/components/ColorField/ColorField.d.ts.map +1 -1
- package/dist/components/ColorField/index.js +1 -1
- package/dist/components/ColorModeControl/index.js +1 -1
- package/dist/components/ComboBox/index.js +1 -1
- package/dist/components/CurveEditor/index.js +2 -2
- package/dist/components/DataGrid/index.js +1 -1
- package/dist/components/DetailList/DetailList.d.ts +31 -5
- package/dist/components/DetailList/DetailList.d.ts.map +1 -1
- package/dist/components/DetailList/index.d.ts +1 -1
- package/dist/components/DetailList/index.d.ts.map +1 -1
- package/dist/components/DetailList/index.js +1 -1
- package/dist/components/DetentSlider/index.js +1 -1
- 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 +1 -1
- package/dist/components/Disclosure/index.js +1 -1
- package/dist/components/{DragHandleGlyph/DragHandleGlyph.d.ts → DragGrip/DragGrip.d.ts} +4 -4
- package/dist/components/DragGrip/DragGrip.d.ts.map +1 -0
- package/dist/components/DragGrip/index.d.ts +3 -0
- package/dist/components/DragGrip/index.d.ts.map +1 -0
- package/dist/components/DragGrip/index.js +2 -0
- package/dist/components/FallthroughDiagram/FallthroughDiagram.d.ts +14 -0
- package/dist/components/FallthroughDiagram/FallthroughDiagram.d.ts.map +1 -0
- package/dist/components/FallthroughDiagram/fixtures.d.ts +17 -0
- package/dist/components/FallthroughDiagram/fixtures.d.ts.map +1 -0
- package/dist/components/FallthroughDiagram/index.d.ts +3 -0
- package/dist/components/FallthroughDiagram/index.d.ts.map +1 -0
- package/dist/components/FallthroughDiagram/index.js +2 -0
- package/dist/components/FontFamilySelect/index.js +1 -1
- package/dist/components/GestureRoute/GestureRoute.d.ts +19 -0
- package/dist/components/GestureRoute/GestureRoute.d.ts.map +1 -0
- package/dist/components/GestureRoute/index.d.ts +3 -0
- package/dist/components/GestureRoute/index.d.ts.map +1 -0
- package/dist/components/GestureRoute/index.js +2 -0
- package/dist/components/GradientEditor/GradientEditor.d.ts +22 -8
- package/dist/components/GradientEditor/GradientEditor.d.ts.map +1 -1
- package/dist/components/GradientEditor/index.js +1 -1
- package/dist/components/InlineRange/index.js +1 -1
- package/dist/components/Jog/index.js +1 -1
- package/dist/components/Keycaps/Keycaps.d.ts +11 -5
- package/dist/components/Keycaps/Keycaps.d.ts.map +1 -1
- package/dist/components/Keycaps/index.d.ts +1 -1
- package/dist/components/Keycaps/index.d.ts.map +1 -1
- package/dist/components/Keycaps/index.js +1 -1
- package/dist/components/LayerList/LayerList.d.ts +1 -1
- package/dist/components/LayerList/LayerList.d.ts.map +1 -1
- package/dist/components/LayerList/index.js +1 -1
- package/dist/components/ListEditor/ListEditor.d.ts.map +1 -1
- package/dist/components/ListEditor/index.js +1 -1
- package/dist/components/MenuButton/index.js +1 -1
- package/dist/components/MeshEditor/index.js +1 -1
- package/dist/components/NumberField/UnitField.d.ts +20 -7
- 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/PaintInput.d.ts.map +1 -1
- package/dist/components/PaintInput/index.js +1 -1
- package/dist/components/PatternPicker/index.js +1 -1
- package/dist/components/PointPlotter/index.js +1 -1
- package/dist/components/Powerline/index.d.ts +1 -1
- package/dist/components/Powerline/index.d.ts.map +1 -1
- package/dist/components/Powerline/index.js +2 -2
- package/dist/components/Prefs/PrefsRow.d.ts.map +1 -1
- package/dist/components/Prefs/index.d.ts +1 -1
- package/dist/components/Prefs/index.d.ts.map +1 -1
- package/dist/components/Prefs/index.js +2 -2
- package/dist/components/Prefs/prefField.d.ts.map +1 -1
- package/dist/components/Prefs/schema.d.ts +2 -2
- package/dist/components/Prefs/schema.d.ts.map +1 -1
- package/dist/components/Properties/PropertyField.d.ts +22 -30
- package/dist/components/Properties/PropertyField.d.ts.map +1 -1
- package/dist/components/Properties/PropertyGroup.d.ts.map +1 -1
- package/dist/components/Properties/PropertyPanel.d.ts +1 -8
- package/dist/components/Properties/PropertyPanel.d.ts.map +1 -1
- package/dist/components/Properties/index.d.ts +1 -1
- package/dist/components/Properties/index.d.ts.map +1 -1
- package/dist/components/Properties/index.js +2 -2
- package/dist/components/RangeSlider/index.js +1 -1
- package/dist/components/ResizeHandle/index.js +1 -1
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/index.js +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 +7 -0
- package/dist/components/SelectionPanel/renderLeaf.d.ts.map +1 -1
- package/dist/components/SidebarPanel/SidebarPanel.d.ts +1 -1
- 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 +19 -2
- package/dist/components/Slider/Slider.d.ts.map +1 -1
- package/dist/components/Slider/index.js +1 -1
- package/dist/components/StatusBar/index.js +1 -1
- package/dist/components/SwatchGrid/index.js +1 -1
- package/dist/components/ThemeSwitcher/ThemeSwitcher.d.ts +38 -0
- package/dist/components/ThemeSwitcher/ThemeSwitcher.d.ts.map +1 -0
- package/dist/components/ThemeSwitcher/index.d.ts +3 -0
- package/dist/components/ThemeSwitcher/index.d.ts.map +1 -0
- package/dist/components/ThemeSwitcher/index.js +2 -0
- package/dist/components/Timeline/Transport.d.ts.map +1 -1
- package/dist/components/Timeline/index.js +1 -1
- package/dist/components/Toast/Toast.d.ts.map +1 -1
- package/dist/components/Toast/index.js +1 -1
- package/dist/components/ToggleBar/index.js +1 -1
- package/dist/components/TokenPanel/index.js +1 -1
- package/dist/components/ToolButton/index.js +1 -1
- package/dist/components/ToolOptionsBar/index.js +1 -1
- package/dist/components/ToolPalette/ToolPalette.d.ts +2 -1
- package/dist/components/ToolPalette/ToolPalette.d.ts.map +1 -1
- package/dist/components/ToolPalette/index.js +1 -1
- package/dist/components/Tree/index.js +1 -1
- package/dist/components/spin.d.ts +16 -0
- package/dist/components/spin.d.ts.map +1 -0
- package/dist/components/stanceSurfaces.d.ts.map +1 -1
- package/dist/icons/index.d.ts +0 -2
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/paths.d.ts +10 -0
- package/dist/icons/paths.d.ts.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +83 -99
- package/dist/index.js.map +1 -1
- package/dist/paintGradientTrack.d.ts +5 -2
- package/dist/paintGradientTrack.d.ts.map +1 -1
- package/dist/style.css +1 -1
- package/dist/useReorderDragList.d.ts +1 -1
- package/dist/useReorderDragList.d.ts.map +1 -1
- package/package.json +9 -8
- package/dist/chunks/Badge-CyAIZSDo.js.map +0 -1
- package/dist/chunks/BandEditor-Dhm_Xrlr.js +0 -248
- package/dist/chunks/BandEditor-Dhm_Xrlr.js.map +0 -1
- package/dist/chunks/Callout-yEn9iPlh.js +0 -119
- package/dist/chunks/Callout-yEn9iPlh.js.map +0 -1
- package/dist/chunks/ColorField-BcMcW8Sa.js +0 -60
- package/dist/chunks/ColorField-BcMcW8Sa.js.map +0 -1
- package/dist/chunks/ComboBox-DpT8lc3p.js.map +0 -1
- package/dist/chunks/DataGrid-D-dZj1BD.js.map +0 -1
- package/dist/chunks/DetailList-BMER1LUZ.js +0 -43
- package/dist/chunks/DetailList-BMER1LUZ.js.map +0 -1
- package/dist/chunks/Dialog-BWyNMgpf.js +0 -66
- package/dist/chunks/Dialog-BWyNMgpf.js.map +0 -1
- package/dist/chunks/Disclosure-0G0uh2fa.js.map +0 -1
- package/dist/chunks/DragHandleGlyph-Dr7Fgo0I.js.map +0 -1
- package/dist/chunks/GradientEditor-B3a-MsVJ.js +0 -335
- package/dist/chunks/GradientEditor-B3a-MsVJ.js.map +0 -1
- package/dist/chunks/Icon-Cgzy8VgC.js.map +0 -1
- package/dist/chunks/InlineRange-eOj6JpJl.js.map +0 -1
- package/dist/chunks/Keycaps-C0H_v2gO.js.map +0 -1
- package/dist/chunks/LayerList-nz-QYvTF.js.map +0 -1
- package/dist/chunks/ListEditor-BQ6AV3Ac.js +0 -74
- package/dist/chunks/ListEditor-BQ6AV3Ac.js.map +0 -1
- package/dist/chunks/MenuButton-DtaGenKf.js.map +0 -1
- package/dist/chunks/NumberField-CwJOMmQR.js +0 -117
- package/dist/chunks/NumberField-CwJOMmQR.js.map +0 -1
- package/dist/chunks/PaintInput-Byhna3H-.js +0 -131
- package/dist/chunks/PaintInput-Byhna3H-.js.map +0 -1
- package/dist/chunks/Prefs-DpqFKiwY.js.map +0 -1
- package/dist/chunks/Properties-D_KzDN9K.js.map +0 -1
- package/dist/chunks/PropertyField-DGCecAnV.js +0 -758
- package/dist/chunks/PropertyField-DGCecAnV.js.map +0 -1
- package/dist/chunks/RangeSlider-BKRRTPTZ.js.map +0 -1
- package/dist/chunks/ResizeHandle-BKT0XYpx.js.map +0 -1
- package/dist/chunks/Select-CzyfaXzp.js +0 -225
- package/dist/chunks/Select-CzyfaXzp.js.map +0 -1
- package/dist/chunks/SelectionPanel-BgUM1h03.js +0 -103
- package/dist/chunks/SelectionPanel-BgUM1h03.js.map +0 -1
- package/dist/chunks/SidebarPanel-aoIqxbtq.js +0 -55
- package/dist/chunks/SidebarPanel-aoIqxbtq.js.map +0 -1
- package/dist/chunks/Slider-CFwQYQ10.js +0 -383
- package/dist/chunks/Slider-CFwQYQ10.js.map +0 -1
- package/dist/chunks/StatusBar-DzoPDY4k.js.map +0 -1
- package/dist/chunks/SwatchGrid-BARC3rnF.js.map +0 -1
- package/dist/chunks/Timeline--58F7MED.js.map +0 -1
- package/dist/chunks/Toast-DNBb-24H.js.map +0 -1
- package/dist/chunks/ToggleBar-DTjGeS0Q.js.map +0 -1
- package/dist/chunks/ToolButton-CR4sQlxF.js.map +0 -1
- package/dist/chunks/ToolOptionsBar-CtzTlaN2.js.map +0 -1
- package/dist/chunks/ToolPalette-CKG9qY6P.js.map +0 -1
- package/dist/chunks/createKeyframeLayer-Czj6Y235.js.map +0 -1
- package/dist/chunks/icons-Dk8SRS8g.js.map +0 -1
- package/dist/chunks/model-Du7Lta4C.js.map +0 -1
- package/dist/chunks/number-D3NEx_8r.js +0 -89
- package/dist/chunks/number-D3NEx_8r.js.map +0 -1
- package/dist/chunks/prefField-Dnl7nmjQ.js.map +0 -1
- package/dist/chunks/segmentedControl.module-Bv7DEg8f.js +0 -11
- package/dist/chunks/segmentedControl.module-Bv7DEg8f.js.map +0 -1
- package/dist/chunks/useReorderDragList-B_-5L5Gu.js.map +0 -1
- package/dist/components/DragHandleGlyph/DragHandleGlyph.d.ts.map +0 -1
- package/dist/components/DragHandleGlyph/index.d.ts +0 -3
- package/dist/components/DragHandleGlyph/index.d.ts.map +0 -1
- package/dist/components/DragHandleGlyph/index.js +0 -2
- package/dist/format/number.d.ts +0 -56
- package/dist/format/number.d.ts.map +0 -1
- package/dist/icons/ShapeKindIcon.d.ts +0 -10
- package/dist/icons/ShapeKindIcon.d.ts.map +0 -1
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { t as e } from "./dlog-F0I8KsIW.js";
|
|
2
|
-
import { J as t
|
|
3
|
-
import { t as
|
|
4
|
-
import { t as
|
|
5
|
-
import { t as
|
|
6
|
-
import { t as
|
|
7
|
-
import { t as
|
|
8
|
-
import { t as
|
|
9
|
-
import { n as
|
|
10
|
-
import { r as
|
|
11
|
-
import { asNodeId as
|
|
12
|
-
import { Fragment as
|
|
13
|
-
import { useId as
|
|
14
|
-
var
|
|
2
|
+
import { J as t } from "./icons-BhcR1l64.js";
|
|
3
|
+
import { t as n } from "./CloseButton-C2J7wVfo.js";
|
|
4
|
+
import { t as r } from "./useReorderDragList-FCMoFIzH.js";
|
|
5
|
+
import { t as i } from "./Disclosure-Ch2KxYuB.js";
|
|
6
|
+
import { t as a } from "./DragGhost-B5_hb9W9.js";
|
|
7
|
+
import { t as o } from "./DragGrip-AoIZXfZb.js";
|
|
8
|
+
import { t as s } from "./ItemList.module-BSpCSxan.js";
|
|
9
|
+
import { n as c } from "./Properties-DmAeQ3mk.js";
|
|
10
|
+
import { r as l } from "./PropertyField-DfIJJ5GS.js";
|
|
11
|
+
import { asNodeId as u, createMoveToIndexOp as d, dispatchApplyBatch as f } from "@weasel-js/core";
|
|
12
|
+
import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
13
|
+
import { useId as g, useLayoutEffect as _, useRef as v, useState as y } from "react";
|
|
14
|
+
var b = {
|
|
15
15
|
root: "_root_19r15_3",
|
|
16
16
|
head: "_head_19r15_13",
|
|
17
17
|
title: "_title_19r15_20",
|
|
@@ -35,16 +35,16 @@ var x = {
|
|
|
35
35
|
};
|
|
36
36
|
//#endregion
|
|
37
37
|
//#region src/components/LayerList/LayerList.tsx
|
|
38
|
-
function
|
|
39
|
-
return t.parentId === null ?
|
|
38
|
+
function x(e, t) {
|
|
39
|
+
return t.parentId === null ? S(e, t) : e.map((e) => e.id === t.parentId ? {
|
|
40
40
|
...e,
|
|
41
|
-
children:
|
|
41
|
+
children: S(e.children ?? [], t)
|
|
42
42
|
} : e.children ? {
|
|
43
43
|
...e,
|
|
44
|
-
children:
|
|
44
|
+
children: x(e.children, t)
|
|
45
45
|
} : e);
|
|
46
46
|
}
|
|
47
|
-
function
|
|
47
|
+
function S(e, { ids: t, index: n }) {
|
|
48
48
|
let r = new Set(t), i = e.filter((e) => !r.has(e.id)), a = e.filter((e) => r.has(e.id)), o = Math.max(0, Math.min(i.length, n));
|
|
49
49
|
return [
|
|
50
50
|
...i.slice(0, o),
|
|
@@ -52,45 +52,45 @@ function C(e, { ids: t, index: n }) {
|
|
|
52
52
|
...i.slice(o)
|
|
53
53
|
];
|
|
54
54
|
}
|
|
55
|
-
function
|
|
56
|
-
for (let r of e) t(r) && n.add(r.id), r.children &&
|
|
55
|
+
function C(e, t, n = /* @__PURE__ */ new Set()) {
|
|
56
|
+
for (let r of e) t(r) && n.add(r.id), r.children && C(r.children, t, n);
|
|
57
57
|
return n;
|
|
58
58
|
}
|
|
59
|
-
function
|
|
59
|
+
function w(e) {
|
|
60
60
|
return e.some((e) => (e.children?.length ?? 0) > 0);
|
|
61
61
|
}
|
|
62
|
-
function
|
|
62
|
+
function T(e) {
|
|
63
63
|
return e != null && e !== !1;
|
|
64
64
|
}
|
|
65
|
-
function
|
|
66
|
-
let { items: n, collapsedIds: r, onCollapsedChange: i, title: a, addKinds: o, onAdd:
|
|
65
|
+
function E(t) {
|
|
66
|
+
let { items: n, collapsedIds: r, onCollapsedChange: i, title: a, addKinds: o, onAdd: c, empty: l, className: u } = t, [d, f] = y(/* @__PURE__ */ new Map()), p = r ? new Set(r) : C(n, (e) => d.get(e.id) ?? e.defaultCollapsed === !0), x = (e) => {
|
|
67
67
|
let t = new Set(p);
|
|
68
68
|
t.has(e) ? t.delete(e) : t.add(e), r || f((n) => new Map(n).set(e, t.has(e))), i?.([...t]);
|
|
69
|
-
}, S =
|
|
69
|
+
}, S = v(t);
|
|
70
70
|
S.current = t;
|
|
71
|
-
let
|
|
71
|
+
let E = (e, t) => {
|
|
72
72
|
let { selectedIds: n = [], onSelect: r } = S.current;
|
|
73
73
|
if (!r) return;
|
|
74
74
|
if (L.current = e.id, e.locked || !t.shiftKey) {
|
|
75
75
|
r([e.id]);
|
|
76
76
|
return;
|
|
77
77
|
}
|
|
78
|
-
let i = new Set(
|
|
78
|
+
let i = new Set(D(S.current.items)), a = n.filter((e) => !i.has(e));
|
|
79
79
|
r(a.includes(e.id) ? a.filter((t) => t !== e.id) : [...a, e.id]);
|
|
80
|
-
},
|
|
81
|
-
for (let n of e)
|
|
80
|
+
}, k = /* @__PURE__ */ new Map(), A = (e) => {
|
|
81
|
+
for (let n of e) k.set(n.id, t.renderBody ? t.renderBody(n) : null), n.children && A(n.children);
|
|
82
82
|
};
|
|
83
83
|
A(n);
|
|
84
84
|
let j = [], M = (e, t, n) => {
|
|
85
|
-
for (let r of e)
|
|
85
|
+
for (let r of e) T(k.get(r.id)) || j.push({
|
|
86
86
|
item: r,
|
|
87
87
|
parentId: t,
|
|
88
88
|
level: n
|
|
89
89
|
}), r.children?.length && !p.has(r.id) && M(r.children, r.id, n + 1);
|
|
90
90
|
};
|
|
91
91
|
M(n, null, 1);
|
|
92
|
-
let N =
|
|
93
|
-
|
|
92
|
+
let N = v(/* @__PURE__ */ new Map()), [P, F] = y(null), I = v(null), L = v(null), R = v(/* @__PURE__ */ new Map()).current;
|
|
93
|
+
_(() => {
|
|
94
94
|
let e = I.current;
|
|
95
95
|
if (e === null) return;
|
|
96
96
|
I.current = null;
|
|
@@ -132,18 +132,18 @@ function D(t) {
|
|
|
132
132
|
a(j.length - 1);
|
|
133
133
|
break;
|
|
134
134
|
case "ArrowRight":
|
|
135
|
-
if (o && !s)
|
|
135
|
+
if (o && !s) x(e.id);
|
|
136
136
|
else if (s) a(i + 1);
|
|
137
137
|
else return;
|
|
138
138
|
break;
|
|
139
139
|
case "ArrowLeft":
|
|
140
|
-
if (s)
|
|
140
|
+
if (s) x(e.id);
|
|
141
141
|
else if (n !== null) a(j.findIndex((e) => e.item.id === n));
|
|
142
142
|
else return;
|
|
143
143
|
break;
|
|
144
144
|
case "Enter":
|
|
145
145
|
case " ":
|
|
146
|
-
|
|
146
|
+
E(e, {
|
|
147
147
|
shiftKey: r.shiftKey,
|
|
148
148
|
ctrlKey: r.ctrlKey,
|
|
149
149
|
metaKey: r.metaKey,
|
|
@@ -157,37 +157,37 @@ function D(t) {
|
|
|
157
157
|
}, W = {
|
|
158
158
|
props: t,
|
|
159
159
|
collapsed: p,
|
|
160
|
-
toggle:
|
|
161
|
-
press:
|
|
162
|
-
uid:
|
|
163
|
-
nested:
|
|
164
|
-
bodies:
|
|
160
|
+
toggle: x,
|
|
161
|
+
press: E,
|
|
162
|
+
uid: g(),
|
|
163
|
+
nested: w(n),
|
|
164
|
+
bodies: k,
|
|
165
165
|
nudgers: R,
|
|
166
166
|
keys: U
|
|
167
|
-
}, G =
|
|
168
|
-
return /* @__PURE__ */
|
|
167
|
+
}, G = c ? o ?? [] : [], K = u ? `${b.root} ${u}` : b.root;
|
|
168
|
+
return /* @__PURE__ */ h("div", {
|
|
169
169
|
className: K,
|
|
170
|
-
children: [(a !== void 0 || G.length > 0) && /* @__PURE__ */
|
|
171
|
-
className:
|
|
172
|
-
children: [a !== void 0 && /* @__PURE__ */
|
|
173
|
-
className:
|
|
170
|
+
children: [(a !== void 0 || G.length > 0) && /* @__PURE__ */ h("div", {
|
|
171
|
+
className: b.head,
|
|
172
|
+
children: [a !== void 0 && /* @__PURE__ */ m("h2", {
|
|
173
|
+
className: b.title,
|
|
174
174
|
children: a
|
|
175
|
-
}), /* @__PURE__ */
|
|
176
|
-
className:
|
|
177
|
-
children: G.map((t) => /* @__PURE__ */
|
|
175
|
+
}), /* @__PURE__ */ m("div", {
|
|
176
|
+
className: b.palette,
|
|
177
|
+
children: G.map((t) => /* @__PURE__ */ m("button", {
|
|
178
178
|
type: "button",
|
|
179
|
-
className:
|
|
179
|
+
className: b.add,
|
|
180
180
|
"aria-label": `Add ${t}`,
|
|
181
181
|
onClick: () => {
|
|
182
|
-
e("layer-list", "onAdd", { kind: t }),
|
|
182
|
+
e("layer-list", "onAdd", { kind: t }), c?.(t);
|
|
183
183
|
},
|
|
184
184
|
children: t
|
|
185
185
|
}, t))
|
|
186
186
|
})]
|
|
187
|
-
}), n.length === 0 ? /* @__PURE__ */
|
|
188
|
-
className:
|
|
187
|
+
}), n.length === 0 ? /* @__PURE__ */ m("div", {
|
|
188
|
+
className: s.empty,
|
|
189
189
|
children: l ?? (G.length > 0 ? "No layers — add one above." : "No layers.")
|
|
190
|
-
}) : /* @__PURE__ */
|
|
190
|
+
}) : /* @__PURE__ */ m(O, {
|
|
191
191
|
items: n,
|
|
192
192
|
parentId: null,
|
|
193
193
|
shared: W,
|
|
@@ -196,19 +196,19 @@ function D(t) {
|
|
|
196
196
|
})]
|
|
197
197
|
});
|
|
198
198
|
}
|
|
199
|
-
function
|
|
199
|
+
function D(e) {
|
|
200
200
|
let t = [];
|
|
201
|
-
for (let n of e) n.locked && t.push(n.id), n.children && t.push(...
|
|
201
|
+
for (let n of e) n.locked && t.push(n.id), n.children && t.push(...D(n.children));
|
|
202
202
|
return t;
|
|
203
203
|
}
|
|
204
|
-
function
|
|
205
|
-
let { props: f } =
|
|
204
|
+
function O({ items: t, parentId: n, shared: o, path: u, level: d }) {
|
|
205
|
+
let { props: f } = o, g = f.selectedIds ?? [], _ = r({
|
|
206
206
|
items: t.map((e) => ({
|
|
207
207
|
id: e.id,
|
|
208
208
|
label: e.label,
|
|
209
209
|
locked: e.locked || !f.onReorder
|
|
210
210
|
})),
|
|
211
|
-
selectedIds: t.filter((e) =>
|
|
211
|
+
selectedIds: t.filter((e) => g.includes(e.id)).map((e) => e.id),
|
|
212
212
|
onReorder: (r, i) => {
|
|
213
213
|
let a = new Set(r), o = {
|
|
214
214
|
ids: t.filter((e) => a.has(e.id)).map((e) => e.id),
|
|
@@ -218,185 +218,181 @@ function k({ items: t, parentId: n, shared: r, path: s, level: d }) {
|
|
|
218
218
|
e("layer-list", "onReorder", o), f.onReorder?.(o);
|
|
219
219
|
},
|
|
220
220
|
onPress: (e, n) => {
|
|
221
|
-
let
|
|
222
|
-
|
|
221
|
+
let r = t.find((t) => t.id === e);
|
|
222
|
+
r && o.press(r, n);
|
|
223
223
|
}
|
|
224
224
|
});
|
|
225
|
-
|
|
226
|
-
let [v,
|
|
227
|
-
|
|
228
|
-
}, C = t.map((e) =>
|
|
229
|
-
let
|
|
230
|
-
|
|
231
|
-
let
|
|
225
|
+
o.nudgers.set(n, (e, n) => _.nudge(e, t.findIndex((t) => t.id === e), n));
|
|
226
|
+
let [v, x] = y(null), S = (e) => {
|
|
227
|
+
x(e), _.containerProps.ref(e);
|
|
228
|
+
}, C = t.map((e) => o.bodies.get(e.id)), w = C.some(T), { draggedIds: E, targetIndex: D, ghost: P } = _.state, F = (e, r, a) => {
|
|
229
|
+
let l = C[r], p = e.children ?? [], v = !o.collapsed.has(e.id), y = `${o.uid}${u}-${r}`, x = a ? void 0 : _.rowProps(e.id, r).onPointerDown, S = g.includes(e.id), w = [b.entry];
|
|
230
|
+
a || (E?.includes(e.id) && w.push(b.dragging), D === r && !E?.includes(e.id) && w.push(b.dropBefore), D === t.length && r === t.length - 1 && w.push(b.dropAfter));
|
|
231
|
+
let P = /* @__PURE__ */ m(M, {
|
|
232
232
|
item: e,
|
|
233
|
-
shared:
|
|
234
|
-
}), F =
|
|
235
|
-
className:
|
|
233
|
+
shared: o
|
|
234
|
+
}), F = T(l) ? /* @__PURE__ */ m(c, {
|
|
235
|
+
className: b.card,
|
|
236
236
|
title: e.title ?? e.label,
|
|
237
237
|
...e.tone === void 0 ? {} : { tone: e.tone },
|
|
238
|
-
collapsed:
|
|
239
|
-
onCollapsedChange: () =>
|
|
240
|
-
leading: /* @__PURE__ */
|
|
238
|
+
collapsed: a || !v,
|
|
239
|
+
onCollapsedChange: () => o.toggle(e.id),
|
|
240
|
+
leading: /* @__PURE__ */ m(j, {
|
|
241
241
|
item: e,
|
|
242
242
|
reorder: f.onReorder !== void 0,
|
|
243
|
-
onPointerDown:
|
|
244
|
-
onNudge: (t) =>
|
|
243
|
+
onPointerDown: x,
|
|
244
|
+
onNudge: (t) => o.nudgers.get(n)?.(e.id, t)
|
|
245
245
|
}),
|
|
246
|
-
actions:
|
|
247
|
-
children:
|
|
248
|
-
}) : /* @__PURE__ */
|
|
246
|
+
actions: a ? void 0 : P,
|
|
247
|
+
children: a ? null : l
|
|
248
|
+
}) : /* @__PURE__ */ h("div", {
|
|
249
249
|
className: [
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
S ?
|
|
250
|
+
s.row,
|
|
251
|
+
b.row,
|
|
252
|
+
S ? s.selected : ""
|
|
253
253
|
].filter(Boolean).join(" "),
|
|
254
254
|
"data-selected": S ? "true" : void 0,
|
|
255
255
|
"data-locked": e.locked ? "true" : void 0,
|
|
256
|
-
onPointerDown:
|
|
257
|
-
...
|
|
256
|
+
onPointerDown: x,
|
|
257
|
+
...a ? {} : {
|
|
258
258
|
role: "row",
|
|
259
259
|
"aria-level": d,
|
|
260
|
-
...
|
|
260
|
+
...p.length > 0 ? { "aria-expanded": v } : {},
|
|
261
261
|
...f.onSelect ? { "aria-selected": S } : {},
|
|
262
|
-
tabIndex:
|
|
263
|
-
ref:
|
|
264
|
-
onKeyDown:
|
|
265
|
-
onFocus: () =>
|
|
262
|
+
tabIndex: o.keys.tabStop === e.id ? 0 : -1,
|
|
263
|
+
ref: o.keys.register(e.id),
|
|
264
|
+
onKeyDown: o.keys.onKeyDown(e, n),
|
|
265
|
+
onFocus: () => o.keys.onFocus(e.id)
|
|
266
266
|
},
|
|
267
267
|
children: [
|
|
268
|
-
|
|
269
|
-
className:
|
|
270
|
-
onPointerDown:
|
|
271
|
-
children: /* @__PURE__ */
|
|
268
|
+
o.nested && (p.length > 0 ? /* @__PURE__ */ m("span", {
|
|
269
|
+
className: b.stop,
|
|
270
|
+
onPointerDown: k,
|
|
271
|
+
children: /* @__PURE__ */ m(i, {
|
|
272
272
|
open: v,
|
|
273
|
-
onToggle: () =>
|
|
273
|
+
onToggle: () => o.toggle(e.id),
|
|
274
274
|
label: `${e.label} sublayers`,
|
|
275
275
|
controls: y
|
|
276
276
|
})
|
|
277
|
-
}) : /* @__PURE__ */
|
|
278
|
-
/* @__PURE__ */
|
|
277
|
+
}) : /* @__PURE__ */ m("span", { className: b.twistyGap })),
|
|
278
|
+
/* @__PURE__ */ m(A, {
|
|
279
279
|
item: e,
|
|
280
280
|
reorder: f.onReorder !== void 0
|
|
281
281
|
}),
|
|
282
|
-
f.onVisibilityChange && (e.locked ? /* @__PURE__ */
|
|
283
|
-
className:
|
|
282
|
+
f.onVisibilityChange && (e.locked ? /* @__PURE__ */ m("span", { className: b.check }) : /* @__PURE__ */ m("input", {
|
|
283
|
+
className: b.check,
|
|
284
284
|
type: "checkbox",
|
|
285
285
|
checked: e.visible !== !1,
|
|
286
|
-
onPointerDown:
|
|
286
|
+
onPointerDown: k,
|
|
287
287
|
onChange: (t) => f.onVisibilityChange?.(e.id, t.target.checked),
|
|
288
288
|
"aria-label": `Show ${e.label}`
|
|
289
289
|
})),
|
|
290
290
|
e.leading,
|
|
291
|
-
/* @__PURE__ */
|
|
292
|
-
className:
|
|
291
|
+
/* @__PURE__ */ m("span", {
|
|
292
|
+
className: s.label,
|
|
293
293
|
children: e.title ?? e.label
|
|
294
294
|
}),
|
|
295
|
-
|
|
295
|
+
a ? null : /* @__PURE__ */ m(N, {
|
|
296
296
|
item: e,
|
|
297
|
-
shared:
|
|
297
|
+
shared: o
|
|
298
298
|
})
|
|
299
299
|
]
|
|
300
300
|
});
|
|
301
|
-
return /* @__PURE__ */
|
|
301
|
+
return /* @__PURE__ */ h("div", {
|
|
302
302
|
role: "none",
|
|
303
303
|
className: w.join(" "),
|
|
304
304
|
"data-selected": S ? "true" : void 0,
|
|
305
|
-
children: [F, !
|
|
305
|
+
children: [F, !a && p.length > 0 && v && /* @__PURE__ */ m("div", {
|
|
306
306
|
id: y,
|
|
307
307
|
role: "rowgroup",
|
|
308
|
-
className:
|
|
309
|
-
children: /* @__PURE__ */
|
|
310
|
-
items:
|
|
308
|
+
className: b.children,
|
|
309
|
+
children: /* @__PURE__ */ m(O, {
|
|
310
|
+
items: p,
|
|
311
311
|
parentId: e.id,
|
|
312
|
-
shared:
|
|
313
|
-
path: `${
|
|
312
|
+
shared: o,
|
|
313
|
+
path: `${u}-${r}`,
|
|
314
314
|
level: d + 1
|
|
315
315
|
})
|
|
316
316
|
})]
|
|
317
317
|
}, e.id);
|
|
318
318
|
};
|
|
319
|
-
return /* @__PURE__ */
|
|
319
|
+
return /* @__PURE__ */ h(p, { children: [w ? /* @__PURE__ */ m(l, {
|
|
320
320
|
ref: S,
|
|
321
|
-
className: `${
|
|
321
|
+
className: `${b.level} ${b.cards}`,
|
|
322
322
|
children: t.map((e, t) => F(e, t, !1))
|
|
323
|
-
}) : /* @__PURE__ */
|
|
323
|
+
}) : /* @__PURE__ */ m("div", {
|
|
324
324
|
ref: S,
|
|
325
|
-
className:
|
|
325
|
+
className: b.level,
|
|
326
326
|
...n === null ? {
|
|
327
327
|
role: "treegrid",
|
|
328
328
|
"aria-label": f.label ?? f.title ?? "Layers",
|
|
329
329
|
...f.onSelect ? { "aria-multiselectable": !0 } : {}
|
|
330
330
|
} : { role: "none" },
|
|
331
331
|
children: t.map((e, t) => F(e, t, !1))
|
|
332
|
-
}),
|
|
333
|
-
at:
|
|
332
|
+
}), P && v ? /* @__PURE__ */ m(a, {
|
|
333
|
+
at: P,
|
|
334
334
|
from: v,
|
|
335
|
-
children: t.map((e, t) =>
|
|
335
|
+
children: t.map((e, t) => P.ids.includes(e.id) ? F(e, t, !0) : null)
|
|
336
336
|
}) : null] });
|
|
337
337
|
}
|
|
338
|
-
var
|
|
339
|
-
function
|
|
340
|
-
return e.locked ? /* @__PURE__ */
|
|
341
|
-
className:
|
|
338
|
+
var k = (e) => e.stopPropagation();
|
|
339
|
+
function A({ item: e, reorder: n }) {
|
|
340
|
+
return e.locked ? /* @__PURE__ */ m("span", {
|
|
341
|
+
className: b.lock,
|
|
342
342
|
role: "img",
|
|
343
343
|
"aria-label": "Locked",
|
|
344
|
-
children: /* @__PURE__ */
|
|
345
|
-
}) : !n && e.badge === void 0 ? null : /* @__PURE__ */
|
|
346
|
-
className:
|
|
344
|
+
children: /* @__PURE__ */ m(t, { size: 12 })
|
|
345
|
+
}) : !n && e.badge === void 0 ? null : /* @__PURE__ */ m("span", {
|
|
346
|
+
className: b.grip,
|
|
347
347
|
"aria-hidden": "true",
|
|
348
|
-
children: e.badge ?? /* @__PURE__ */
|
|
348
|
+
children: e.badge ?? /* @__PURE__ */ m(o, { size: 13 })
|
|
349
349
|
});
|
|
350
350
|
}
|
|
351
|
-
function
|
|
352
|
-
if (e.locked) return /* @__PURE__ */
|
|
351
|
+
function j({ item: e, reorder: t, onPointerDown: n, onNudge: r }) {
|
|
352
|
+
if (e.locked) return /* @__PURE__ */ m(A, {
|
|
353
353
|
item: e,
|
|
354
354
|
reorder: t
|
|
355
355
|
});
|
|
356
|
-
if (t || e.badge !== void 0) return /* @__PURE__ */
|
|
356
|
+
if (t || e.badge !== void 0) return /* @__PURE__ */ m("button", {
|
|
357
357
|
type: "button",
|
|
358
|
-
className:
|
|
358
|
+
className: b.handle,
|
|
359
359
|
"aria-label": `Drag to reorder ${e.label}`,
|
|
360
360
|
"aria-keyshortcuts": "Alt+ArrowUp Alt+ArrowDown",
|
|
361
361
|
onPointerDown: n,
|
|
362
362
|
onKeyDown: (e) => {
|
|
363
363
|
!e.altKey || e.key !== "ArrowUp" && e.key !== "ArrowDown" || (e.preventDefault(), r(e.key === "ArrowUp" ? -1 : 1));
|
|
364
364
|
},
|
|
365
|
-
children: e.badge ?? /* @__PURE__ */
|
|
365
|
+
children: e.badge ?? /* @__PURE__ */ m(o, {})
|
|
366
366
|
});
|
|
367
367
|
}
|
|
368
|
-
function
|
|
368
|
+
function M({ item: e, shared: t }) {
|
|
369
369
|
let { onVisibilityChange: n } = t.props;
|
|
370
|
-
return /* @__PURE__ */
|
|
371
|
-
className:
|
|
370
|
+
return /* @__PURE__ */ h(p, { children: [n && !e.locked && /* @__PURE__ */ m("input", {
|
|
371
|
+
className: b.check,
|
|
372
372
|
type: "checkbox",
|
|
373
373
|
checked: e.visible !== !1,
|
|
374
|
-
onClick:
|
|
374
|
+
onClick: k,
|
|
375
375
|
onChange: (t) => n(e.id, t.target.checked),
|
|
376
376
|
"aria-label": `Show ${e.label}`
|
|
377
|
-
}), /* @__PURE__ */
|
|
377
|
+
}), /* @__PURE__ */ m(N, {
|
|
378
378
|
item: e,
|
|
379
379
|
shared: t
|
|
380
380
|
})] });
|
|
381
381
|
}
|
|
382
|
-
function
|
|
383
|
-
let { onRemove:
|
|
384
|
-
return !
|
|
385
|
-
className:
|
|
386
|
-
onPointerDown:
|
|
387
|
-
children: /* @__PURE__ */
|
|
388
|
-
variant: "ghost",
|
|
389
|
-
size: "sm",
|
|
390
|
-
iconOnly: !0,
|
|
382
|
+
function N({ item: e, shared: t }) {
|
|
383
|
+
let { onRemove: r } = t.props;
|
|
384
|
+
return !r || e.locked ? null : /* @__PURE__ */ m("span", {
|
|
385
|
+
className: b.stop,
|
|
386
|
+
onPointerDown: k,
|
|
387
|
+
children: /* @__PURE__ */ m(n, {
|
|
391
388
|
ariaLabel: `Remove ${e.label}`,
|
|
392
|
-
onClick: () =>
|
|
393
|
-
children: /* @__PURE__ */ h(n, { size: 14 })
|
|
389
|
+
onClick: () => r(e.id)
|
|
394
390
|
})
|
|
395
391
|
});
|
|
396
392
|
}
|
|
397
393
|
//#endregion
|
|
398
394
|
//#region src/components/LayerList/useSceneLayerList.ts
|
|
399
|
-
function
|
|
395
|
+
function P(e) {
|
|
400
396
|
let { scene: t, selection: n, adapter: r, itemFor: i, label: a = "Reorder" } = e, o = (e) => [...e].reverse().flatMap((e) => {
|
|
401
397
|
let n = t.get(e);
|
|
402
398
|
if (!n) return [];
|
|
@@ -410,10 +406,10 @@ function F(e) {
|
|
|
410
406
|
return {
|
|
411
407
|
items: o(t.roots),
|
|
412
408
|
selectedIds: n.current.map(String),
|
|
413
|
-
onSelect: (e) => n.set(e.map(
|
|
409
|
+
onSelect: (e) => n.set(e.map(u)),
|
|
414
410
|
onReorder: ({ ids: e, parentId: n, index: i }) => {
|
|
415
|
-
let o = (n === null ? t.roots : t.childrenOf(
|
|
416
|
-
|
|
411
|
+
let o = (n === null ? t.roots : t.childrenOf(u(n))).length - e.length - i;
|
|
412
|
+
f(r, [d({
|
|
417
413
|
ids: e,
|
|
418
414
|
parentId: n,
|
|
419
415
|
index: Math.max(0, o)
|
|
@@ -422,6 +418,6 @@ function F(e) {
|
|
|
422
418
|
};
|
|
423
419
|
}
|
|
424
420
|
//#endregion
|
|
425
|
-
export {
|
|
421
|
+
export { E as n, x as r, P as t };
|
|
426
422
|
|
|
427
|
-
//# sourceMappingURL=LayerList-
|
|
423
|
+
//# sourceMappingURL=LayerList-wCI1EueM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LayerList-wCI1EueM.js","names":["stop","s","rows","_Fragment","dlog","LockIcon","CloseButton","useReorderDragList","Disclosure","DragGhost","DragGrip","ItemList_module_default","PropertyGroup","PropertyList","LayerList_module_default","moveLayers","move","reorder","items","item","moving","ids","kept","siblings","it","moved","at","index","collectCollapsed","isCollapsed","into","anyNested","hasBody","body","LayerList","props","toggled","setToggled","useState","collapsed","collapsedIds","toggle","next","id","prev","onCollapsedChange","live","useRef","press","onSelect","mods","locked","lockedIds","selectedIds","bodies","collectBodies","list","visible","walk","level","rowEls","focusId","setFocusId","pendingFocus","anchor","nudgers","el","tabStop","v","focusRow","selectRange","from","to","a","b","range","keys","e","go","branch","open","delta","parentId","shared","useId","palette","onAdd","addKinds","cls","className","title","kind","empty","Level","out","selected","drag","target","setEl","bind","node","cards","entry","i","kids","childId","path","onPointerDown","ghosted","isSelected","draggedIds","targetIndex","controls","Controls","head","Handle","stop","Grip","Remove","Fragment","ghost","onNudge","onVisibilityChange","onRemove","useSceneLayerList","args","build","scene","itemFor","selection","asNodeId","back","adapter","createMoveToIndexOp","label"],"sources":["../../src/components/LayerList/LayerList.module.css","../../src/components/LayerList/LayerList.tsx","../../src/components/LayerList/useSceneLayerList.ts"],"sourcesContent":["/* Row box, hover and selection are `ItemList`'s, so a layer list and the\n history list stacked under it agree. What is here is only what a layer has. */\n.root,\n.root * {\n box-sizing: border-box;\n}\n\n.root {\n display: grid;\n gap: var(--wzl-space-4);\n}\n\n.head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--wzl-space-4);\n}\n\n.title {\n margin: 0;\n font-family: var(--wzl-font-display);\n font-weight: var(--wzl-font-weight-light);\n font-size: var(--wzl-font-size-lg);\n color: var(--wzl-fg);\n}\n\n.palette {\n display: flex;\n gap: var(--wzl-space-2);\n}\n\n.add {\n font: inherit;\n height: var(--wzl-control-h);\n background: transparent;\n border: 1px dashed var(--wzl-border);\n border-radius: var(--wzl-radius-sm);\n padding: var(--wzl-space-1) var(--wzl-space-4);\n font-size: var(--wzl-font-size-sm);\n color: var(--wzl-fg-subtle);\n cursor: pointer;\n}\n\n.add:hover {\n background: var(--wzl-surface-raised);\n color: var(--wzl-fg);\n}\n\n.level {\n display: flex;\n flex-direction: column;\n gap: 1px;\n position: relative;\n width: 100%;\n}\n\n/* A level of cards is a `PropertyList`, so the controls in each body take the\n panel's density; its rows are spaced like cards rather than lines. */\n.level.cards {\n display: grid;\n row-gap: var(--wzl-space-3);\n}\n\n.entry {\n min-width: 0;\n}\n\n.row {\n user-select: none;\n}\n\n.row:focus-visible {\n outline: 2px solid var(--wzl-focus-ring);\n outline-offset: -2px;\n}\n\n/* A child's twisty sits under its parent's grip. */\n.children {\n padding-left: calc(var(--wzl-disclosure-target, var(--wzl-control-h-sm)) + var(--wzl-space-4));\n}\n\n/* The layer the drag picked up holds its place, faded, while its ghost follows the pointer. */\n.dragging {\n opacity: 0.5;\n}\n\n/* Where the drop would land: a line on the edge of the layer it would land against. */\n.dropBefore {\n box-shadow: 0 -2px 0 var(--wzl-accent);\n}\n\n.dropAfter {\n box-shadow: 0 2px 0 var(--wzl-accent);\n}\n\n/* One width for the grip and the lock, so a locked row's label lines up. */\n.grip,\n.lock {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n min-width: 13px;\n color: var(--wzl-fg-muted);\n}\n\n.row:not([data-locked]) {\n cursor: grab;\n}\n\n.row:not([data-locked]):active {\n cursor: grabbing;\n}\n\n.stop {\n display: inline-flex;\n align-items: center;\n flex: 0 0 auto;\n}\n\n/* Holds the twisty column open on rows with nothing to expand, so labels line up down a level. */\n.twistyGap {\n flex: 0 0 auto;\n width: var(--wzl-disclosure-target, var(--wzl-control-h-sm));\n}\n\n/* Sized, so the empty column a locked row keeps is the checkbox's width. */\n.check {\n flex: 0 0 auto;\n width: 13px;\n height: 13px;\n margin: 0;\n accent-color: var(--wzl-accent);\n}\n\n.handle {\n font: inherit;\n background: transparent;\n border: 0;\n color: var(--wzl-fg-subtle);\n padding: var(--wzl-space-1) var(--wzl-space-2);\n cursor: grab;\n touch-action: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: var(--wzl-icon-button-size);\n height: var(--wzl-icon-button-size);\n border-radius: var(--wzl-radius-sm);\n font-weight: var(--wzl-font-weight-bold);\n font-size: var(--wzl-font-size);\n}\n\n.card[data-tone] .handle {\n background: var(--wzl-tone);\n color: var(--wzl-fg-on-accent);\n}\n\n.handle:active {\n cursor: grabbing;\n}\n\n.entry[data-selected] > .card {\n outline: 2px solid var(--wzl-accent);\n outline-offset: -1px;\n}\n","import {\n type KeyboardEvent,\n type ReactNode,\n type RefCallback,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { dlog } from '../../dlog';\nimport { LockIcon } from '../../icons';\nimport { type PressModifiers, useReorderDragList } from '../../useReorderDragList';\nimport { CloseButton } from '../CloseButton';\nimport { Disclosure } from '../Disclosure';\nimport { DragGhost } from '../DragGhost';\nimport { DragGrip } from '../DragGrip';\nimport rows from '../ItemList/ItemList.module.css';\nimport { PropertyGroup, PropertyList } from '../Properties';\nimport type { StanceProps } from '../stance';\nimport s from './LayerList.module.css';\n\n/** One layer. With a body (see `renderBody`) it draws as a card that folds its\n * body away; without one, as a one-line row. Either can hold child layers. */\nexport interface LayerListItem {\n id: string;\n /** The layer's name. Also what its controls are labeled by. */\n label: string;\n /** Shown in the header in place of `label` — a select that switches the\n * layer's kind, say. */\n title?: ReactNode;\n /** Fixed-size content before the label: a color swatch, a kind icon. */\n leading?: ReactNode;\n /** Drawn in the drag handle in place of the grip — an ordinal. */\n badge?: ReactNode;\n /** Which of its list this layer is: an index into the theme's tone list, or\n * a color. A card draws its edge and handle in it and recolors its controls. */\n tone?: StanceProps['tone'];\n /** Cannot be dragged, hidden or removed, walls off drops on either side, and\n * selects alone rather than joining a multi-selection. */\n locked?: boolean;\n /** Shown or not, when the list has `onVisibilityChange`. Default true. */\n visible?: boolean;\n children?: LayerListItem[];\n /** Folds the body and children away until the user opens them.\n * `collapsedIds` overrides it. */\n defaultCollapsed?: boolean;\n}\n\n/**\n * A reorder: `ids`, siblings under `parentId` (`null` at the top level), now\n * sit as one block in list order starting at `index` of the parent's children.\n * A drag never moves a layer to another parent.\n */\nexport interface LayerMove {\n ids: string[];\n parentId: string | null;\n index: number;\n}\n\n/** Props for `<LayerList>`. */\nexport interface LayerListProps {\n items: LayerListItem[];\n /** Omit for a list the user cannot reorder. */\n onReorder?: (move: LayerMove) => void;\n /** Giving both makes rows selectable: a click selects one, shift-click adds\n * or removes one, and dragging a selected row drags its selected siblings. */\n selectedIds?: readonly string[];\n onSelect?: (ids: string[]) => void;\n /** Adds a visibility checkbox to every unlocked layer. */\n onVisibilityChange?: (id: string, visible: boolean) => void;\n /** Adds a remove button to every unlocked layer. */\n onRemove?: (id: string) => void;\n /** A layer's controls. Returning `null` leaves that layer a one-line row. */\n renderBody?: (item: LayerListItem) => ReactNode;\n /** Ids whose body and children are folded away. Giving it makes folding\n * controlled; `onCollapsedChange` fires either way. */\n collapsedIds?: readonly string[];\n onCollapsedChange?: (ids: string[]) => void;\n /** Heading above the list. */\n title?: string;\n /** Names the list for assistive tech when it has no `title`. */\n label?: string;\n /** Kinds the user can add, as buttons beside the title. Shown only with `onAdd`. */\n addKinds?: string[];\n onAdd?: (kind: string) => void;\n /** Shown in place of the list when `items` is empty. */\n empty?: ReactNode;\n /** Appended to the root's class list — the module's own names are hashed. */\n className?: string;\n}\n\n/** Returns `items` with `move` applied, for a consumer that holds the tree as state. */\nexport function moveLayers(items: LayerListItem[], move: LayerMove): LayerListItem[] {\n if (move.parentId === null) return reorder(items, move);\n return items.map((item) => {\n if (item.id === move.parentId) return { ...item, children: reorder(item.children ?? [], move) };\n return item.children ? { ...item, children: moveLayers(item.children, move) } : item;\n });\n}\n\nfunction reorder(siblings: LayerListItem[], { ids, index }: LayerMove): LayerListItem[] {\n const moving = new Set(ids);\n const kept = siblings.filter((it) => !moving.has(it.id));\n const moved = siblings.filter((it) => moving.has(it.id));\n const at = Math.max(0, Math.min(kept.length, index));\n return [...kept.slice(0, at), ...moved, ...kept.slice(at)];\n}\n\nfunction collectCollapsed(\n items: LayerListItem[],\n isCollapsed: (item: LayerListItem) => boolean,\n into = new Set<string>(),\n): Set<string> {\n for (const item of items) {\n if (isCollapsed(item)) into.add(item.id);\n if (item.children) collectCollapsed(item.children, isCollapsed, into);\n }\n return into;\n}\n\nfunction anyNested(items: LayerListItem[]): boolean {\n return items.some((it) => (it.children?.length ?? 0) > 0);\n}\n\n/** What every level of the tree reads from the list. */\ninterface Shared {\n props: LayerListProps;\n collapsed: ReadonlySet<string>;\n toggle: (id: string) => void;\n press: (item: LayerListItem, mods: PressModifiers) => void;\n uid: string;\n /** Some layer has children, so every row keeps a twisty column. */\n nested: boolean;\n /** Each layer's body, rendered once; a row where it is empty. */\n bodies: ReadonlyMap<string, ReactNode>;\n /** Per sibling group, keyed by parent: move a row one place, as its drag would. */\n nudgers: Map<string | null, (id: string, delta: -1 | 1) => boolean>;\n keys: RowKeys;\n}\n\n/** The roving focus over the rows: one row is in the tab order at a time. */\ninterface RowKeys {\n tabStop: string | undefined;\n register: (id: string) => (el: HTMLElement | null) => void;\n onKeyDown: (item: LayerListItem, parentId: string | null) => (e: KeyboardEvent<HTMLElement>) => void;\n onFocus: (id: string) => void;\n}\n\ninterface VisibleRow {\n item: LayerListItem;\n parentId: string | null;\n level: number;\n}\n\nfunction hasBody(body: ReactNode): boolean {\n return body !== null && body !== undefined && body !== false;\n}\n\n/**\n * An ordered, drag-reorderable list of layers — a document's objects, a lab's\n * canvases, a fill's effects. Each layer is a one-line row or, with a body, a\n * card whose controls fold away; either can nest child layers. Selection,\n * visibility, removal and an add palette are each on when their handler is given.\n */\nexport function LayerList(props: LayerListProps) {\n const { items, collapsedIds, onCollapsedChange, title, addKinds, onAdd, empty, className } = props;\n // Only the user's own toggles are state; everything else reads the layer's\n // `defaultCollapsed`, so a layer added later starts the way it asks to.\n const [toggled, setToggled] = useState<ReadonlyMap<string, boolean>>(new Map());\n const collapsed = collapsedIds\n ? new Set(collapsedIds)\n : collectCollapsed(items, (item) => toggled.get(item.id) ?? item.defaultCollapsed === true);\n const toggle = (id: string) => {\n const next = new Set(collapsed);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n if (!collapsedIds) setToggled((prev) => new Map(prev).set(id, next.has(id)));\n onCollapsedChange?.([...next]);\n };\n\n // The press arrives after the drag session ends, which can be after a render\n // the closure did not see, so it reads the selection from here.\n const live = useRef(props);\n live.current = props;\n const press = (item: LayerListItem, mods: PressModifiers) => {\n const { selectedIds = [], onSelect } = live.current;\n if (!onSelect) return;\n anchor.current = item.id;\n if (item.locked || !mods.shiftKey) {\n onSelect([item.id]);\n return;\n }\n // A leftover locked selection does not carry into a multi-selection.\n const locked = new Set(lockedIds(live.current.items));\n const kept = selectedIds.filter((id) => !locked.has(id));\n onSelect(kept.includes(item.id) ? kept.filter((id) => id !== item.id) : [...kept, item.id]);\n };\n\n const bodies = new Map<string, ReactNode>();\n const collectBodies = (list: LayerListItem[]) => {\n for (const it of list) {\n bodies.set(it.id, props.renderBody ? props.renderBody(it) : null);\n if (it.children) collectBodies(it.children);\n }\n };\n collectBodies(items);\n\n // The rows the arrow keys walk: open branches only, and not cards, whose\n // heads are their own controls.\n const visible: VisibleRow[] = [];\n const walk = (list: LayerListItem[], parentId: string | null, level: number) => {\n for (const item of list) {\n if (!hasBody(bodies.get(item.id))) visible.push({ item, parentId, level });\n if (item.children?.length && !collapsed.has(item.id)) walk(item.children, item.id, level + 1);\n }\n };\n walk(items, null, 1);\n\n const rowEls = useRef(new Map<string, HTMLElement>());\n const [focusId, setFocusId] = useState<string | null>(null);\n const pendingFocus = useRef<string | null>(null);\n const anchor = useRef<string | null>(null);\n const nudgers = useRef(new Map<string | null, (id: string, delta: -1 | 1) => boolean>()).current;\n useLayoutEffect(() => {\n const id = pendingFocus.current;\n if (id === null) return;\n pendingFocus.current = null;\n const el = rowEls.current.get(id);\n if (el && document.activeElement !== el) el.focus();\n });\n\n const selectedIds = props.selectedIds ?? [];\n const tabStop = visible.some((v) => v.item.id === focusId)\n ? (focusId ?? undefined)\n : (visible.find((v) => selectedIds.includes(v.item.id)) ?? visible[0])?.item.id;\n\n const focusRow = (id: string) => {\n pendingFocus.current = id;\n setFocusId(id);\n };\n // Locked rows never join a multi-selection, so a range passes over them.\n const selectRange = (to: string) => {\n const from = anchor.current ?? to;\n const a = visible.findIndex((v) => v.item.id === from);\n const b = visible.findIndex((v) => v.item.id === to);\n if (a < 0 || b < 0) return;\n const range = visible\n .slice(Math.min(a, b), Math.max(a, b) + 1)\n .filter((v) => !v.item.locked)\n .map((v) => v.item.id);\n if (range.length > 0) live.current.onSelect?.(range);\n };\n\n const keys: RowKeys = {\n tabStop,\n register: (id) => (el) => {\n if (el) rowEls.current.set(id, el);\n else rowEls.current.delete(id);\n },\n onFocus: (id) => {\n setFocusId(id);\n anchor.current ??= id;\n },\n onKeyDown: (item, parentId) => (e) => {\n // Keys on a control inside the row are the control's.\n if (e.target !== e.currentTarget) return;\n const at = visible.findIndex((v) => v.item.id === item.id);\n const go = (index: number) => {\n const next = visible[Math.max(0, Math.min(visible.length - 1, index))];\n if (!next) return;\n focusRow(next.item.id);\n if (e.shiftKey && props.onSelect) selectRange(next.item.id);\n else anchor.current = next.item.id;\n };\n const branch = (item.children?.length ?? 0) > 0;\n const open = branch && !collapsed.has(item.id);\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowUp': {\n const delta = e.key === 'ArrowDown' ? 1 : -1;\n if (e.altKey) {\n if (nudgers.get(parentId)?.(item.id, delta)) pendingFocus.current = item.id;\n } else {\n go(at + delta);\n }\n break;\n }\n case 'Home':\n go(0);\n break;\n case 'End':\n go(visible.length - 1);\n break;\n case 'ArrowRight':\n if (branch && !open) toggle(item.id);\n else if (open) go(at + 1);\n else return;\n break;\n case 'ArrowLeft':\n if (open) toggle(item.id);\n else if (parentId !== null) go(visible.findIndex((v) => v.item.id === parentId));\n else return;\n break;\n case 'Enter':\n case ' ':\n press(item, { shiftKey: e.shiftKey, ctrlKey: e.ctrlKey, metaKey: e.metaKey, altKey: e.altKey });\n break;\n default:\n return;\n }\n e.preventDefault();\n },\n };\n\n const uid = useId();\n const shared: Shared = { props, collapsed, toggle, press, uid, nested: anyNested(items), bodies, nudgers, keys };\n const palette = onAdd ? (addKinds ?? []) : [];\n const cls = className ? `${s.root} ${className}` : s.root;\n\n return (\n <div className={cls}>\n {(title !== undefined || palette.length > 0) && (\n <div className={s.head}>\n {title !== undefined && <h2 className={s.title}>{title}</h2>}\n <div className={s.palette}>\n {palette.map((kind) => (\n <button\n key={kind}\n type=\"button\"\n className={s.add}\n aria-label={`Add ${kind}`}\n onClick={() => {\n dlog('layer-list', 'onAdd', { kind });\n onAdd?.(kind);\n }}\n >\n {kind}\n </button>\n ))}\n </div>\n </div>\n )}\n {items.length === 0 ? (\n <div className={rows.empty}>\n {empty ?? (palette.length > 0 ? 'No layers — add one above.' : 'No layers.')}\n </div>\n ) : (\n <Level items={items} parentId={null} shared={shared} path=\"\" level={1} />\n )}\n </div>\n );\n}\n\nfunction lockedIds(items: LayerListItem[]): string[] {\n const out: string[] = [];\n for (const it of items) {\n if (it.locked) out.push(it.id);\n if (it.children) out.push(...lockedIds(it.children));\n }\n return out;\n}\n\ninterface LevelProps {\n items: LayerListItem[];\n parentId: string | null;\n shared: Shared;\n path: string;\n level: number;\n}\n\n/** One sibling group. Each has its own drag, so a drag stays under one parent. */\nfunction Level({ items, parentId, shared, path, level }: LevelProps) {\n const { props } = shared;\n const selected = props.selectedIds ?? [];\n const drag = useReorderDragList({\n // With no `onReorder` every row is a locked one to the drag, so a press\n // still reaches `onPress` and nothing ever engages.\n items: items.map((it) => ({ id: it.id, label: it.label, locked: it.locked || !props.onReorder })),\n selectedIds: items.filter((it) => selected.includes(it.id)).map((it) => it.id),\n onReorder: (ids, target) => {\n const moving = new Set(ids);\n const inOrder = items.filter((it) => moving.has(it.id)).map((it) => it.id);\n // The hook's index counts the dragged rows; a move's index does not.\n const before = items.slice(0, target).filter((it) => moving.has(it.id)).length;\n const move = { ids: inOrder, parentId, index: target - before };\n dlog('layer-list', 'onReorder', move);\n props.onReorder?.(move);\n },\n onPress: (id, mods) => {\n const item = items.find((it) => it.id === id);\n if (item) shared.press(item, mods);\n },\n });\n shared.nudgers.set(parentId, (id, delta) =>\n drag.nudge(id, items.findIndex((it) => it.id === id), delta),\n );\n const [el, setEl] = useState<HTMLDivElement | null>(null);\n const bind = (node: HTMLDivElement | null) => {\n setEl(node);\n (drag.containerProps.ref as RefCallback<HTMLDivElement>)(node);\n };\n\n const bodies = items.map((it) => shared.bodies.get(it.id));\n const cards = bodies.some(hasBody);\n const { draggedIds, targetIndex, ghost } = drag.state;\n\n const entry = (item: LayerListItem, i: number, ghosted: boolean) => {\n const body = bodies[i];\n const kids = item.children ?? [];\n const open = !shared.collapsed.has(item.id);\n const childId = `${shared.uid}${path}-${i}`;\n const onPointerDown = ghosted ? undefined : drag.rowProps(item.id, i).onPointerDown;\n const isSelected = selected.includes(item.id);\n const cls = [s.entry];\n if (!ghosted) {\n if (draggedIds?.includes(item.id)) cls.push(s.dragging);\n if (targetIndex === i && !draggedIds?.includes(item.id)) cls.push(s.dropBefore);\n if (targetIndex === items.length && i === items.length - 1) cls.push(s.dropAfter);\n }\n const controls = <Controls item={item} shared={shared} />;\n const head =\n hasBody(body) ? (\n <PropertyGroup\n className={s.card}\n title={item.title ?? item.label}\n {...(item.tone === undefined ? {} : { tone: item.tone })}\n collapsed={ghosted || !open}\n onCollapsedChange={() => shared.toggle(item.id)}\n leading={\n <Handle\n item={item}\n reorder={props.onReorder !== undefined}\n onPointerDown={onPointerDown}\n onNudge={(delta) => shared.nudgers.get(parentId)?.(item.id, delta)}\n />\n }\n actions={ghosted ? undefined : controls}\n >\n {ghosted ? null : body}\n </PropertyGroup>\n ) : (\n <div\n className={[rows.row, s.row, isSelected ? rows.selected : ''].filter(Boolean).join(' ')}\n data-selected={isSelected ? 'true' : undefined}\n data-locked={item.locked ? 'true' : undefined}\n onPointerDown={onPointerDown}\n {...(ghosted\n ? {}\n : {\n role: 'row',\n 'aria-level': level,\n ...(kids.length > 0 ? { 'aria-expanded': open } : {}),\n ...(props.onSelect ? { 'aria-selected': isSelected } : {}),\n tabIndex: shared.keys.tabStop === item.id ? 0 : -1,\n ref: shared.keys.register(item.id),\n onKeyDown: shared.keys.onKeyDown(item, parentId),\n onFocus: () => shared.keys.onFocus(item.id),\n })}\n >\n {shared.nested &&\n (kids.length > 0 ? (\n <span className={s.stop} onPointerDown={stop}>\n <Disclosure\n open={open}\n onToggle={() => shared.toggle(item.id)}\n label={`${item.label} sublayers`}\n controls={childId}\n />\n </span>\n ) : (\n <span className={s.twistyGap} />\n ))}\n <Grip item={item} reorder={props.onReorder !== undefined} />\n {props.onVisibilityChange &&\n (item.locked ? (\n <span className={s.check} />\n ) : (\n <input\n className={s.check}\n type=\"checkbox\"\n checked={item.visible !== false}\n onPointerDown={stop}\n onChange={(e) => props.onVisibilityChange?.(item.id, e.target.checked)}\n aria-label={`Show ${item.label}`}\n />\n ))}\n {item.leading}\n <span className={rows.label}>{item.title ?? item.label}</span>\n {ghosted ? null : <Remove item={item} shared={shared} />}\n </div>\n );\n return (\n <div key={item.id} role=\"none\" className={cls.join(' ')} data-selected={isSelected ? 'true' : undefined}>\n {head}\n {!ghosted && kids.length > 0 && open && (\n <div id={childId} role=\"rowgroup\" className={s.children}>\n <Level items={kids} parentId={item.id} shared={shared} path={`${path}-${i}`} level={level + 1} />\n </div>\n )}\n </div>\n );\n };\n\n return (\n <>\n {cards ? (\n <PropertyList ref={bind} className={`${s.level} ${s.cards}`}>\n {items.map((it, i) => entry(it, i, false))}\n </PropertyList>\n ) : (\n <div\n ref={bind}\n className={s.level}\n {...(parentId === null\n ? {\n role: 'treegrid',\n 'aria-label': props.label ?? props.title ?? 'Layers',\n ...(props.onSelect ? { 'aria-multiselectable': true } : {}),\n }\n : { role: 'none' })}\n >\n {items.map((it, i) => entry(it, i, false))}\n </div>\n )}\n {ghost && el ? (\n <DragGhost at={ghost} from={el}>\n {items.map((it, i) => (ghost.ids.includes(it.id) ? entry(it, i, true) : null))}\n </DragGhost>\n ) : null}\n </>\n );\n}\n\n// Keeps a press on a control inside a row from also starting the row's press.\nconst stop = (e: { stopPropagation(): void }) => e.stopPropagation();\n\n/** A row's grip: decoration, since the whole row takes the drag. */\nfunction Grip({ item, reorder }: { item: LayerListItem; reorder: boolean }) {\n if (item.locked) {\n return (\n <span className={s.lock} role=\"img\" aria-label=\"Locked\">\n <LockIcon size={12} />\n </span>\n );\n }\n if (!reorder && item.badge === undefined) return null;\n return (\n <span className={s.grip} aria-hidden=\"true\">\n {item.badge ?? <DragGrip size={13} />}\n </span>\n );\n}\n\n/** A card's handle: the drag target, since the rest of its head folds it, and\n * Alt+Up/Down on it moves the card. */\nfunction Handle({\n item,\n reorder,\n onPointerDown,\n onNudge,\n}: {\n item: LayerListItem;\n reorder: boolean;\n onPointerDown: ((e: React.PointerEvent) => void) | undefined;\n onNudge: (delta: -1 | 1) => void;\n}) {\n if (item.locked) return <Grip item={item} reorder={reorder} />;\n if (!reorder && item.badge === undefined) return undefined;\n return (\n <button\n type=\"button\"\n className={s.handle}\n aria-label={`Drag to reorder ${item.label}`}\n aria-keyshortcuts=\"Alt+ArrowUp Alt+ArrowDown\"\n onPointerDown={onPointerDown}\n onKeyDown={(e) => {\n if (!e.altKey || (e.key !== 'ArrowUp' && e.key !== 'ArrowDown')) return;\n e.preventDefault();\n onNudge(e.key === 'ArrowUp' ? -1 : 1);\n }}\n >\n {item.badge ?? <DragGrip />}\n </button>\n );\n}\n\nfunction Controls({ item, shared }: { item: LayerListItem; shared: Shared }) {\n const { onVisibilityChange } = shared.props;\n return (\n <>\n {onVisibilityChange && !item.locked && (\n <input\n className={s.check}\n type=\"checkbox\"\n checked={item.visible !== false}\n onClick={stop}\n onChange={(e) => onVisibilityChange(item.id, e.target.checked)}\n aria-label={`Show ${item.label}`}\n />\n )}\n <Remove item={item} shared={shared} />\n </>\n );\n}\n\nfunction Remove({ item, shared }: { item: LayerListItem; shared: Shared }) {\n const { onRemove } = shared.props;\n if (!onRemove || item.locked) return null;\n return (\n <span className={s.stop} onPointerDown={stop}>\n <CloseButton ariaLabel={`Remove ${item.label}`} onClick={() => onRemove(item.id)} />\n </span>\n );\n}\n","import { asNodeId, createMoveToIndexOp, dispatchApplyBatch } from '@weasel-js/core';\nimport type { NodeId, Scene, SceneNode, SelectionApi } from '@weasel-js/core';\nimport type { LayerListItem, LayerListProps } from './LayerList';\n\n/** Arguments for {@link useSceneLayerList}. */\nexport interface UseSceneLayerListArgs<TData, TLayer extends string, TPose> {\n scene: Scene<TData, TLayer, TPose>;\n selection: SelectionApi;\n /** What the reorder op is dispatched against — the adapter `<SceneCanvas>` uses. */\n adapter: object;\n /** A row's content for a node: its label, a leading swatch or icon, whether it is locked. */\n itemFor: (node: SceneNode<TData, TLayer, TPose>) => Omit<LayerListItem, 'id' | 'children'>;\n /** Label of the reorder's history entry. Default `'Reorder'`. */\n label?: string;\n}\n\n/**\n * The props that put a scene in a `<LayerList>`: a row per node, a container's\n * children nested under it, the front-most at the top, selection read from and\n * written to `selection`, and a drag dispatched as a `MoveToIndexOp`.\n */\nexport function useSceneLayerList<TData, TLayer extends string, TPose>(\n args: UseSceneLayerListArgs<TData, TLayer, TPose>,\n): Required<Pick<LayerListProps, 'items' | 'selectedIds' | 'onSelect' | 'onReorder'>> {\n const { scene, selection, adapter, itemFor, label = 'Reorder' } = args;\n\n // A scene orders children back to front and the list front to back. Rebuilt\n // every render: the scene keeps its identity across a reorder, so a memo keyed\n // on it would serve the order from before.\n const build = (ids: readonly NodeId[]): LayerListItem[] =>\n [...ids].reverse().flatMap((id) => {\n const node = scene.get(id);\n if (!node) return [];\n const kids = scene.childrenOf(id);\n return [{ ...itemFor(node), id, ...(kids.length > 0 ? { children: build(kids) } : {}) }];\n });\n\n return {\n items: build(scene.roots),\n selectedIds: selection.current.map(String),\n onSelect: (ids) => selection.set(ids.map(asNodeId)),\n onReorder: ({ ids, parentId, index }) => {\n const siblings = parentId === null ? scene.roots : scene.childrenOf(asNodeId(parentId));\n // `index` counts from the front among the siblings the drag left behind.\n const back = siblings.length - ids.length - index;\n dispatchApplyBatch(adapter, [createMoveToIndexOp({ ids, parentId, index: Math.max(0, back) })], label);\n },\n };\n}\n"],"mappings":"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"}
|