@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.
Files changed (565) hide show
  1. package/dist/chunks/ActionBar-DCq16yFA.js +57 -0
  2. package/dist/chunks/ActionBar-DCq16yFA.js.map +1 -0
  3. package/dist/chunks/{Badge-CW9pBPFl.js → Badge-CyAIZSDo.js} +758 -741
  4. package/dist/chunks/Badge-CyAIZSDo.js.map +1 -0
  5. package/dist/chunks/{BandEditor-jY-PFKY6.js → BandEditor-Dhm_Xrlr.js} +37 -36
  6. package/dist/chunks/BandEditor-Dhm_Xrlr.js.map +1 -0
  7. package/dist/chunks/Button-BIdXHQOx.js +111 -0
  8. package/dist/chunks/Button-BIdXHQOx.js.map +1 -0
  9. package/dist/chunks/ButtonBar-D5Vi0aj_.js +46 -0
  10. package/dist/chunks/ButtonBar-D5Vi0aj_.js.map +1 -0
  11. package/dist/chunks/Callout-yEn9iPlh.js +119 -0
  12. package/dist/chunks/Callout-yEn9iPlh.js.map +1 -0
  13. package/dist/chunks/{Checkbox-BOsDAY2F.js → Checkbox-DHXTUHO9.js} +1 -1
  14. package/dist/chunks/Checkbox-DHXTUHO9.js.map +1 -0
  15. package/dist/chunks/Code-AsKpgnv6.js +24 -0
  16. package/dist/chunks/Code-AsKpgnv6.js.map +1 -0
  17. package/dist/chunks/{ColorField-BYzgZM9o.js → ColorField-BcMcW8Sa.js} +16 -16
  18. package/dist/chunks/ColorField-BcMcW8Sa.js.map +1 -0
  19. package/dist/chunks/ColorModeControl-ke5PXbBa.js +47 -0
  20. package/dist/chunks/ColorModeControl-ke5PXbBa.js.map +1 -0
  21. package/dist/chunks/{ComboBox-Cz3f0Y_8.js → ComboBox-DpT8lc3p.js} +3 -3
  22. package/dist/chunks/ComboBox-DpT8lc3p.js.map +1 -0
  23. package/dist/chunks/{CurveEditor-DXwSP-iA.js → CurveEditor-BDJXjEvK.js} +35 -35
  24. package/dist/chunks/CurveEditor-BDJXjEvK.js.map +1 -0
  25. package/dist/chunks/DataGrid-D-dZj1BD.js +152 -0
  26. package/dist/chunks/DataGrid-D-dZj1BD.js.map +1 -0
  27. package/dist/chunks/DetailList-BMER1LUZ.js +43 -0
  28. package/dist/chunks/DetailList-BMER1LUZ.js.map +1 -0
  29. package/dist/chunks/{DetentSlider-CAubVX0J.js → DetentSlider-CL8TlX3S.js} +2 -2
  30. package/dist/chunks/DetentSlider-CL8TlX3S.js.map +1 -0
  31. package/dist/chunks/Dialog-BWyNMgpf.js +66 -0
  32. package/dist/chunks/Dialog-BWyNMgpf.js.map +1 -0
  33. package/dist/chunks/Disclosure-0G0uh2fa.js +58 -0
  34. package/dist/chunks/Disclosure-0G0uh2fa.js.map +1 -0
  35. package/dist/chunks/DragGhost-B5_hb9W9.js +30 -0
  36. package/dist/chunks/DragGhost-B5_hb9W9.js.map +1 -0
  37. package/dist/chunks/{DragHandleGlyph-CppAz4_8.js → DragHandleGlyph-Dr7Fgo0I.js} +1 -1
  38. package/dist/chunks/DragHandleGlyph-Dr7Fgo0I.js.map +1 -0
  39. package/dist/chunks/{Field-DWnV8WZY.js → Field--onYxXTF.js} +7 -6
  40. package/dist/chunks/Field--onYxXTF.js.map +1 -0
  41. package/dist/chunks/FillStrokeSwatch-DNb0KXPk.js +111 -0
  42. package/dist/chunks/FillStrokeSwatch-DNb0KXPk.js.map +1 -0
  43. package/dist/chunks/{FontFamilySelect-DxfgTC3G.js → FontFamilySelect-DXlMKWfK.js} +2 -2
  44. package/dist/chunks/FontFamilySelect-DXlMKWfK.js.map +1 -0
  45. package/dist/chunks/GradientEditor-B3a-MsVJ.js +335 -0
  46. package/dist/chunks/GradientEditor-B3a-MsVJ.js.map +1 -0
  47. package/dist/chunks/{Icon-DT0x6HaQ.js → Icon-Cgzy8VgC.js} +28 -20
  48. package/dist/chunks/Icon-Cgzy8VgC.js.map +1 -0
  49. package/dist/chunks/InlineRange-eOj6JpJl.js +29 -0
  50. package/dist/chunks/InlineRange-eOj6JpJl.js.map +1 -0
  51. package/dist/chunks/{Input-DbMKpkXy.js → Input-CHmkfYaD.js} +24 -19
  52. package/dist/chunks/Input-CHmkfYaD.js.map +1 -0
  53. package/dist/chunks/ItemList-Cm-HUWCi.js +174 -0
  54. package/dist/chunks/ItemList-Cm-HUWCi.js.map +1 -0
  55. package/dist/chunks/ItemList.module-BSpCSxan.js +14 -0
  56. package/dist/chunks/ItemList.module-BSpCSxan.js.map +1 -0
  57. package/dist/chunks/{Jog-DkkTlL3_.js → Jog-DESxZ44P.js} +6 -6
  58. package/dist/chunks/Jog-DESxZ44P.js.map +1 -0
  59. package/dist/chunks/{Keycaps-DunVpejA.js → Keycaps-C0H_v2gO.js} +71 -65
  60. package/dist/chunks/Keycaps-C0H_v2gO.js.map +1 -0
  61. package/dist/chunks/LayerList-nz-QYvTF.js +427 -0
  62. package/dist/chunks/LayerList-nz-QYvTF.js.map +1 -0
  63. package/dist/chunks/ListEditor-BQ6AV3Ac.js +74 -0
  64. package/dist/chunks/ListEditor-BQ6AV3Ac.js.map +1 -0
  65. package/dist/chunks/MenuButton-DtaGenKf.js +70 -0
  66. package/dist/chunks/MenuButton-DtaGenKf.js.map +1 -0
  67. package/dist/chunks/MeshEditor-qqGc6hlD.js +87 -0
  68. package/dist/chunks/MeshEditor-qqGc6hlD.js.map +1 -0
  69. package/dist/chunks/{NumberField-CCjEDZCg.js → NumberField-CwJOMmQR.js} +27 -22
  70. package/dist/chunks/NumberField-CwJOMmQR.js.map +1 -0
  71. package/dist/chunks/{OptionsBar-DeQ-vUeZ.js → OptionsBar-DbzAgIln.js} +3 -3
  72. package/dist/chunks/OptionsBar-DbzAgIln.js.map +1 -0
  73. package/dist/chunks/{PaintField-jBOJ32rL.js → PaintField-DaJukRc6.js} +21 -21
  74. package/dist/chunks/PaintField-DaJukRc6.js.map +1 -0
  75. package/dist/chunks/{PaintInput-Qs7Rul5R.js → PaintInput-Byhna3H-.js} +24 -24
  76. package/dist/chunks/PaintInput-Byhna3H-.js.map +1 -0
  77. package/dist/chunks/{PatternPicker-BMpXWboq.js → PatternPicker-B-cUt-JT.js} +2 -2
  78. package/dist/chunks/PatternPicker-B-cUt-JT.js.map +1 -0
  79. package/dist/chunks/{Plot2D-CXf_f7QD.js → Plot2D-CTXHkL5p.js} +13 -13
  80. package/dist/chunks/Plot2D-CTXHkL5p.js.map +1 -0
  81. package/dist/chunks/{PointPlotter-S_gz7VYt.js → PointPlotter-Bxo6haKe.js} +5 -4
  82. package/dist/chunks/PointPlotter-Bxo6haKe.js.map +1 -0
  83. package/dist/chunks/Powerline-ExO5GwEr.js +42 -0
  84. package/dist/chunks/Powerline-ExO5GwEr.js.map +1 -0
  85. package/dist/chunks/Prefs-DpqFKiwY.js +476 -0
  86. package/dist/chunks/Prefs-DpqFKiwY.js.map +1 -0
  87. package/dist/chunks/Properties-D_KzDN9K.js +282 -0
  88. package/dist/chunks/Properties-D_KzDN9K.js.map +1 -0
  89. package/dist/chunks/PropertyField-DGCecAnV.js +758 -0
  90. package/dist/chunks/PropertyField-DGCecAnV.js.map +1 -0
  91. package/dist/chunks/{RadioGroup-CsVp3SEu.js → RadioGroup-Bh4-12e-.js} +2 -2
  92. package/dist/chunks/RadioGroup-Bh4-12e-.js.map +1 -0
  93. package/dist/chunks/{RangeSlider-DNr-pJpZ.js → RangeSlider-BKRRTPTZ.js} +1 -1
  94. package/dist/chunks/RangeSlider-BKRRTPTZ.js.map +1 -0
  95. package/dist/chunks/{ResizeHandle-RXFf5fXr.js → ResizeHandle-BKT0XYpx.js} +15 -15
  96. package/dist/chunks/ResizeHandle-BKT0XYpx.js.map +1 -0
  97. package/dist/chunks/Select-CzyfaXzp.js +225 -0
  98. package/dist/chunks/Select-CzyfaXzp.js.map +1 -0
  99. package/dist/chunks/{SelectionPanel-CEbLS-0D.js → SelectionPanel-BgUM1h03.js} +21 -20
  100. package/dist/chunks/SelectionPanel-BgUM1h03.js.map +1 -0
  101. package/dist/chunks/{Sidebar-qn_oSCNX.js → Sidebar-BZ0m4afn.js} +8 -8
  102. package/dist/chunks/Sidebar-BZ0m4afn.js.map +1 -0
  103. package/dist/chunks/{SidebarPanel-Bs6V21hg.js → SidebarPanel-aoIqxbtq.js} +15 -19
  104. package/dist/chunks/SidebarPanel-aoIqxbtq.js.map +1 -0
  105. package/dist/chunks/{Slider-CIIrqiFS.js → Slider-CFwQYQ10.js} +94 -92
  106. package/dist/chunks/Slider-CFwQYQ10.js.map +1 -0
  107. package/dist/chunks/{StatusBar-B4L15DSm.js → StatusBar-DzoPDY4k.js} +8 -8
  108. package/dist/chunks/StatusBar-DzoPDY4k.js.map +1 -0
  109. package/dist/chunks/SwatchGrid-BARC3rnF.js +73 -0
  110. package/dist/chunks/SwatchGrid-BARC3rnF.js.map +1 -0
  111. package/dist/chunks/{Switch-DH5POG0T.js → Switch-CSYmcM8y.js} +1 -1
  112. package/dist/chunks/Switch-CSYmcM8y.js.map +1 -0
  113. package/dist/chunks/{Tabs-BFHikpml.js → Tabs-BbpzLLdY.js} +1 -1
  114. package/dist/chunks/Tabs-BbpzLLdY.js.map +1 -0
  115. package/dist/chunks/{Timeline-DNKY_yiK.js → Timeline--58F7MED.js} +141 -145
  116. package/dist/chunks/Timeline--58F7MED.js.map +1 -0
  117. package/dist/chunks/{Toast-CI1UDuK6.js → Toast-DNBb-24H.js} +1 -1
  118. package/dist/chunks/Toast-DNBb-24H.js.map +1 -0
  119. package/dist/chunks/ToggleBar-DTjGeS0Q.js +82 -0
  120. package/dist/chunks/ToggleBar-DTjGeS0Q.js.map +1 -0
  121. package/dist/chunks/{TokenPanel-BPHq24dc.js → TokenPanel-CMq7uydV.js} +50 -47
  122. package/dist/chunks/TokenPanel-CMq7uydV.js.map +1 -0
  123. package/dist/chunks/{ToolButton-9QzJCmuM.js → ToolButton-CR4sQlxF.js} +4 -4
  124. package/dist/chunks/ToolButton-CR4sQlxF.js.map +1 -0
  125. package/dist/chunks/{ToolGroup-BJiDrH_i.js → ToolGroup-Dpg1LN0l.js} +7 -7
  126. package/dist/chunks/ToolGroup-Dpg1LN0l.js.map +1 -0
  127. package/dist/chunks/{ToolOptionsBar-CAM6RcUH.js → ToolOptionsBar-CtzTlaN2.js} +6 -5
  128. package/dist/chunks/ToolOptionsBar-CtzTlaN2.js.map +1 -0
  129. package/dist/chunks/ToolPalette-CKG9qY6P.js +83 -0
  130. package/dist/chunks/ToolPalette-CKG9qY6P.js.map +1 -0
  131. package/dist/chunks/Tooltip-Clg2mhSt.js +42 -0
  132. package/dist/chunks/Tooltip-Clg2mhSt.js.map +1 -0
  133. package/dist/chunks/Tree-DVOtc9R5.js +203 -0
  134. package/dist/chunks/Tree-DVOtc9R5.js.map +1 -0
  135. package/dist/chunks/{createKeyframeLayer-DKtO0Sw_.js → createKeyframeLayer-Czj6Y235.js} +86 -86
  136. package/dist/chunks/createKeyframeLayer-Czj6Y235.js.map +1 -0
  137. package/dist/chunks/{dlog-CMYiRF3Q.js → dlog-F0I8KsIW.js} +2 -2
  138. package/dist/chunks/dlog-F0I8KsIW.js.map +1 -0
  139. package/dist/chunks/formatShortcut-DRQrVThu.js +15 -0
  140. package/dist/chunks/formatShortcut-DRQrVThu.js.map +1 -0
  141. package/dist/chunks/icons-Dk8SRS8g.js +162 -0
  142. package/dist/chunks/icons-Dk8SRS8g.js.map +1 -0
  143. package/dist/chunks/interactiveTarget-BNZmTow2.js +24 -0
  144. package/dist/chunks/interactiveTarget-BNZmTow2.js.map +1 -0
  145. package/dist/chunks/{keyGlyph-Bp0wnLHn.js → keyGlyph-C0qTakG-.js} +1 -1
  146. package/dist/chunks/keyGlyph-C0qTakG-.js.map +1 -0
  147. package/dist/chunks/model-Du7Lta4C.js +360 -0
  148. package/dist/chunks/model-Du7Lta4C.js.map +1 -0
  149. package/dist/chunks/{number-BHz66zQO.js → number-D3NEx_8r.js} +3 -3
  150. package/dist/chunks/number-D3NEx_8r.js.map +1 -0
  151. package/dist/chunks/paintPreview-CuSZiHpR.js +42 -0
  152. package/dist/chunks/paintPreview-CuSZiHpR.js.map +1 -0
  153. package/dist/chunks/paintValue-BpaGPjV3.js +18 -0
  154. package/dist/chunks/paintValue-BpaGPjV3.js.map +1 -0
  155. package/dist/chunks/{portalHost-CjpCnuGU.js → portalHost-yTOVuCej.js} +1 -1
  156. package/dist/chunks/portalHost-yTOVuCej.js.map +1 -0
  157. package/dist/chunks/prefField-Dnl7nmjQ.js +197 -0
  158. package/dist/chunks/prefField-Dnl7nmjQ.js.map +1 -0
  159. package/dist/chunks/segmentTooltip-CStYHKzd.js +29 -0
  160. package/dist/chunks/segmentTooltip-CStYHKzd.js.map +1 -0
  161. package/dist/chunks/segmentedControl.module-Bv7DEg8f.js +11 -0
  162. package/dist/chunks/segmentedControl.module-Bv7DEg8f.js.map +1 -0
  163. package/dist/chunks/{snap-CEjuWOhN.js → snap-DRjbOiG9.js} +1 -1
  164. package/dist/chunks/snap-DRjbOiG9.js.map +1 -0
  165. package/dist/chunks/stance-BFQpS_fL.js +17 -0
  166. package/dist/chunks/stance-BFQpS_fL.js.map +1 -0
  167. package/dist/chunks/useReorderDragList-B_-5L5Gu.js +131 -0
  168. package/dist/chunks/useReorderDragList-B_-5L5Gu.js.map +1 -0
  169. package/dist/chunks/{useRovingTabIndex-Dkpf_KhN.js → useRovingTabIndex-Bp_hYm_h.js} +1 -1
  170. package/dist/chunks/useRovingTabIndex-Bp_hYm_h.js.map +1 -0
  171. package/dist/color/ramp.d.ts +38 -0
  172. package/dist/color/ramp.d.ts.map +1 -0
  173. package/dist/components/ActionBar/ActionBar.d.ts +7 -5
  174. package/dist/components/ActionBar/ActionBar.d.ts.map +1 -1
  175. package/dist/components/ActionBar/index.js +1 -1
  176. package/dist/components/Badge/Badge.d.ts +21 -7
  177. package/dist/components/Badge/Badge.d.ts.map +1 -1
  178. package/dist/components/Badge/effects/Aqua.d.ts +1 -1
  179. package/dist/components/Badge/effects/Aqua.d.ts.map +1 -1
  180. package/dist/components/Badge/index.d.ts +1 -1
  181. package/dist/components/Badge/index.d.ts.map +1 -1
  182. package/dist/components/Badge/index.js +1 -1
  183. package/dist/components/Badge/types.d.ts +6 -5
  184. package/dist/components/Badge/types.d.ts.map +1 -1
  185. package/dist/components/BandEditor/index.js +1 -1
  186. package/dist/components/Button/Button.d.ts +17 -3
  187. package/dist/components/Button/Button.d.ts.map +1 -1
  188. package/dist/components/Button/index.d.ts +1 -1
  189. package/dist/components/Button/index.d.ts.map +1 -1
  190. package/dist/components/Button/index.js +1 -1
  191. package/dist/components/ButtonBar/ButtonBar.d.ts +36 -0
  192. package/dist/components/ButtonBar/ButtonBar.d.ts.map +1 -0
  193. package/dist/components/ButtonBar/index.d.ts +3 -0
  194. package/dist/components/ButtonBar/index.d.ts.map +1 -0
  195. package/dist/components/ButtonBar/index.js +2 -0
  196. package/dist/components/Callout/Callout.d.ts +3 -6
  197. package/dist/components/Callout/Callout.d.ts.map +1 -1
  198. package/dist/components/Callout/index.d.ts +1 -1
  199. package/dist/components/Callout/index.d.ts.map +1 -1
  200. package/dist/components/Callout/index.js +1 -1
  201. package/dist/components/Checkbox/index.js +1 -1
  202. package/dist/components/Code/Code.d.ts +28 -0
  203. package/dist/components/Code/Code.d.ts.map +1 -0
  204. package/dist/components/Code/index.d.ts +3 -0
  205. package/dist/components/Code/index.d.ts.map +1 -0
  206. package/dist/components/Code/index.js +2 -0
  207. package/dist/components/ColorField/ColorField.d.ts +1 -1
  208. package/dist/components/ColorField/ColorField.d.ts.map +1 -1
  209. package/dist/components/ColorField/index.js +1 -1
  210. package/dist/components/ColorModeControl/ColorModeControl.d.ts +21 -0
  211. package/dist/components/ColorModeControl/ColorModeControl.d.ts.map +1 -0
  212. package/dist/components/ColorModeControl/index.d.ts +3 -0
  213. package/dist/components/ColorModeControl/index.d.ts.map +1 -0
  214. package/dist/components/ColorModeControl/index.js +2 -0
  215. package/dist/components/ComboBox/ComboBox.d.ts +2 -2
  216. package/dist/components/ComboBox/ComboBox.d.ts.map +1 -1
  217. package/dist/components/ComboBox/index.js +1 -1
  218. package/dist/components/CurveEditor/CurveEditor.d.ts +1 -1
  219. package/dist/components/CurveEditor/CurveEditor.d.ts.map +1 -1
  220. package/dist/components/CurveEditor/LayeredCurveEditor.d.ts +1 -1
  221. package/dist/components/CurveEditor/LayeredCurveEditor.d.ts.map +1 -1
  222. package/dist/components/CurveEditor/index.js +3 -3
  223. package/dist/components/DataGrid/DataGrid.d.ts +23 -1
  224. package/dist/components/DataGrid/DataGrid.d.ts.map +1 -1
  225. package/dist/components/DataGrid/index.js +1 -1
  226. package/dist/components/DetailList/DetailList.d.ts +36 -0
  227. package/dist/components/DetailList/DetailList.d.ts.map +1 -0
  228. package/dist/components/DetailList/index.d.ts +3 -0
  229. package/dist/components/DetailList/index.d.ts.map +1 -0
  230. package/dist/components/DetailList/index.js +2 -0
  231. package/dist/components/DetentSlider/index.js +1 -1
  232. package/dist/components/Dialog/Dialog.d.ts +9 -3
  233. package/dist/components/Dialog/Dialog.d.ts.map +1 -1
  234. package/dist/components/Dialog/index.js +1 -1
  235. package/dist/components/Disclosure/Disclosure.d.ts +26 -18
  236. package/dist/components/Disclosure/Disclosure.d.ts.map +1 -1
  237. package/dist/components/Disclosure/index.d.ts +2 -2
  238. package/dist/components/Disclosure/index.d.ts.map +1 -1
  239. package/dist/components/Disclosure/index.js +2 -2
  240. package/dist/components/DragGhost/DragGhost.d.ts +21 -0
  241. package/dist/components/DragGhost/DragGhost.d.ts.map +1 -0
  242. package/dist/components/DragGhost/index.d.ts +3 -0
  243. package/dist/components/DragGhost/index.d.ts.map +1 -0
  244. package/dist/components/DragGhost/index.js +2 -0
  245. package/dist/components/DragHandleGlyph/DragHandleGlyph.d.ts +1 -1
  246. package/dist/components/DragHandleGlyph/DragHandleGlyph.d.ts.map +1 -1
  247. package/dist/components/DragHandleGlyph/index.js +1 -1
  248. package/dist/components/Field/Field.d.ts +1 -1
  249. package/dist/components/Field/Field.d.ts.map +1 -1
  250. package/dist/components/Field/index.js +1 -1
  251. package/dist/components/FillStrokeSwatch/FillStrokeSwatch.d.ts +45 -0
  252. package/dist/components/FillStrokeSwatch/FillStrokeSwatch.d.ts.map +1 -0
  253. package/dist/components/FillStrokeSwatch/index.d.ts +3 -0
  254. package/dist/components/FillStrokeSwatch/index.d.ts.map +1 -0
  255. package/dist/components/FillStrokeSwatch/index.js +2 -0
  256. package/dist/components/FontFamilySelect/FontFamilySelect.d.ts +1 -1
  257. package/dist/components/FontFamilySelect/FontFamilySelect.d.ts.map +1 -1
  258. package/dist/components/FontFamilySelect/index.js +1 -1
  259. package/dist/components/GradientEditor/SceneGradientHandles.d.ts.map +1 -1
  260. package/dist/components/GradientEditor/index.js +1 -1
  261. package/dist/components/InlineRange/InlineRange.d.ts +6 -2
  262. package/dist/components/InlineRange/InlineRange.d.ts.map +1 -1
  263. package/dist/components/InlineRange/index.js +1 -1
  264. package/dist/components/Input/Input.d.ts +13 -0
  265. package/dist/components/Input/Input.d.ts.map +1 -1
  266. package/dist/components/Input/index.js +1 -1
  267. package/dist/components/ItemList/ItemList.d.ts +70 -10
  268. package/dist/components/ItemList/ItemList.d.ts.map +1 -1
  269. package/dist/components/ItemList/index.js +1 -1
  270. package/dist/components/Jog/Jog.d.ts +1 -1
  271. package/dist/components/Jog/Jog.d.ts.map +1 -1
  272. package/dist/components/Jog/index.js +1 -1
  273. package/dist/components/Keycaps/Keycap.d.ts +1 -1
  274. package/dist/components/Keycaps/Keycap.d.ts.map +1 -1
  275. package/dist/components/Keycaps/Keycaps.d.ts +1 -1
  276. package/dist/components/Keycaps/Keycaps.d.ts.map +1 -1
  277. package/dist/components/Keycaps/index.d.ts +1 -0
  278. package/dist/components/Keycaps/index.d.ts.map +1 -1
  279. package/dist/components/Keycaps/index.js +3 -3
  280. package/dist/components/Keycaps/keySpecsFromMods.d.ts +2 -0
  281. package/dist/components/Keycaps/keySpecsFromMods.d.ts.map +1 -1
  282. package/dist/components/Keycaps/keySpecsFromShortcut.d.ts +16 -0
  283. package/dist/components/Keycaps/keySpecsFromShortcut.d.ts.map +1 -0
  284. package/dist/components/LayerList/LayerList.d.ts +79 -0
  285. package/dist/components/LayerList/LayerList.d.ts.map +1 -0
  286. package/dist/components/LayerList/index.d.ts +3 -0
  287. package/dist/components/LayerList/index.d.ts.map +1 -0
  288. package/dist/components/LayerList/index.js +2 -0
  289. package/dist/components/LayerList/useSceneLayerList.d.ts +20 -0
  290. package/dist/components/LayerList/useSceneLayerList.d.ts.map +1 -0
  291. package/dist/components/ListEditor/ListEditor.d.ts +23 -0
  292. package/dist/components/ListEditor/ListEditor.d.ts.map +1 -0
  293. package/dist/components/ListEditor/index.d.ts +3 -0
  294. package/dist/components/ListEditor/index.d.ts.map +1 -0
  295. package/dist/components/ListEditor/index.js +2 -0
  296. package/dist/components/MenuButton/MenuButton.d.ts +6 -2
  297. package/dist/components/MenuButton/MenuButton.d.ts.map +1 -1
  298. package/dist/components/MenuButton/index.js +1 -1
  299. package/dist/components/MeshEditor/index.js +1 -1
  300. package/dist/components/NumberField/NumberField.d.ts +13 -0
  301. package/dist/components/NumberField/NumberField.d.ts.map +1 -1
  302. package/dist/components/NumberField/UnitField.d.ts +1 -1
  303. package/dist/components/NumberField/UnitField.d.ts.map +1 -1
  304. package/dist/components/NumberField/index.js +1 -1
  305. package/dist/components/OptionsBar/index.js +1 -1
  306. package/dist/components/PaintField/index.js +1 -1
  307. package/dist/components/PaintInput/index.js +1 -1
  308. package/dist/components/PatternPicker/index.js +1 -1
  309. package/dist/components/Plot2D/index.js +1 -1
  310. package/dist/components/PointPlotter/PointPlotter.d.ts +1 -1
  311. package/dist/components/PointPlotter/PointPlotter.d.ts.map +1 -1
  312. package/dist/components/PointPlotter/index.js +1 -1
  313. package/dist/components/Powerline/Powerline.d.ts +5 -4
  314. package/dist/components/Powerline/Powerline.d.ts.map +1 -1
  315. package/dist/components/Powerline/index.js +2 -2
  316. package/dist/components/Prefs/PrefsDialog.d.ts +11 -3
  317. package/dist/components/Prefs/PrefsDialog.d.ts.map +1 -1
  318. package/dist/components/Prefs/PrefsForm.d.ts +27 -26
  319. package/dist/components/Prefs/PrefsForm.d.ts.map +1 -1
  320. package/dist/components/Prefs/PrefsPane.d.ts +24 -0
  321. package/dist/components/Prefs/PrefsPane.d.ts.map +1 -0
  322. package/dist/components/Prefs/PrefsRail.d.ts +32 -0
  323. package/dist/components/Prefs/PrefsRail.d.ts.map +1 -0
  324. package/dist/components/Prefs/PrefsRow.d.ts +32 -0
  325. package/dist/components/Prefs/PrefsRow.d.ts.map +1 -0
  326. package/dist/components/Prefs/index.d.ts +5 -2
  327. package/dist/components/Prefs/index.d.ts.map +1 -1
  328. package/dist/components/Prefs/index.js +3 -3
  329. package/dist/components/Prefs/prefField.d.ts +36 -0
  330. package/dist/components/Prefs/prefField.d.ts.map +1 -0
  331. package/dist/components/Prefs/schema.d.ts +30 -0
  332. package/dist/components/Prefs/schema.d.ts.map +1 -1
  333. package/dist/components/Properties/CurveField.d.ts +1 -1
  334. package/dist/components/Properties/CurveField.d.ts.map +1 -1
  335. package/dist/components/Properties/DialogRow.d.ts +33 -0
  336. package/dist/components/Properties/DialogRow.d.ts.map +1 -0
  337. package/dist/components/Properties/PropertyField.d.ts +238 -0
  338. package/dist/components/Properties/PropertyField.d.ts.map +1 -0
  339. package/dist/components/Properties/PropertyGroup.d.ts +12 -3
  340. package/dist/components/Properties/PropertyGroup.d.ts.map +1 -1
  341. package/dist/components/Properties/PropertyPanel.d.ts +34 -238
  342. package/dist/components/Properties/PropertyPanel.d.ts.map +1 -1
  343. package/dist/components/Properties/Subpanel.d.ts +14 -0
  344. package/dist/components/Properties/Subpanel.d.ts.map +1 -0
  345. package/dist/components/Properties/index.d.ts +8 -4
  346. package/dist/components/Properties/index.d.ts.map +1 -1
  347. package/dist/components/Properties/index.js +3 -2
  348. package/dist/components/Properties/storyLayouts.d.ts +1 -1
  349. package/dist/components/Properties/storyLayouts.d.ts.map +1 -1
  350. package/dist/components/RadioGroup/RadioGroup.d.ts +2 -2
  351. package/dist/components/RadioGroup/RadioGroup.d.ts.map +1 -1
  352. package/dist/components/RadioGroup/index.js +1 -1
  353. package/dist/components/RangeSlider/RangeSlider.d.ts +1 -1
  354. package/dist/components/RangeSlider/RangeSlider.d.ts.map +1 -1
  355. package/dist/components/RangeSlider/index.js +1 -1
  356. package/dist/components/ResizeHandle/ResizeHandle.d.ts +1 -1
  357. package/dist/components/ResizeHandle/ResizeHandle.d.ts.map +1 -1
  358. package/dist/components/ResizeHandle/index.js +1 -1
  359. package/dist/components/Select/Select.d.ts +40 -7
  360. package/dist/components/Select/Select.d.ts.map +1 -1
  361. package/dist/components/Select/index.d.ts +2 -2
  362. package/dist/components/Select/index.d.ts.map +1 -1
  363. package/dist/components/Select/index.js +2 -2
  364. package/dist/components/SelectionPanel/SelectionPanel.d.ts +1 -1
  365. package/dist/components/SelectionPanel/SelectionPanel.d.ts.map +1 -1
  366. package/dist/components/SelectionPanel/index.js +2 -2
  367. package/dist/components/SelectionPanel/renderLeaf.d.ts +14 -8
  368. package/dist/components/SelectionPanel/renderLeaf.d.ts.map +1 -1
  369. package/dist/components/Sidebar/Sidebar.d.ts +1 -1
  370. package/dist/components/Sidebar/Sidebar.d.ts.map +1 -1
  371. package/dist/components/Sidebar/index.js +1 -1
  372. package/dist/components/SidebarPanel/SidebarPanel.d.ts +3 -3
  373. package/dist/components/SidebarPanel/SidebarPanel.d.ts.map +1 -1
  374. package/dist/components/SidebarPanel/index.js +1 -1
  375. package/dist/components/Slider/Slider.d.ts +2 -1
  376. package/dist/components/Slider/Slider.d.ts.map +1 -1
  377. package/dist/components/Slider/index.js +1 -1
  378. package/dist/components/StatusBar/StatusBar.d.ts +3 -3
  379. package/dist/components/StatusBar/StatusBar.d.ts.map +1 -1
  380. package/dist/components/StatusBar/index.js +1 -1
  381. package/dist/components/SwatchGrid/SwatchGrid.d.ts +34 -0
  382. package/dist/components/SwatchGrid/SwatchGrid.d.ts.map +1 -0
  383. package/dist/components/SwatchGrid/index.d.ts +3 -0
  384. package/dist/components/SwatchGrid/index.d.ts.map +1 -0
  385. package/dist/components/SwatchGrid/index.js +2 -0
  386. package/dist/components/Switch/index.js +1 -1
  387. package/dist/components/Tabs/Tabs.d.ts +4 -4
  388. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  389. package/dist/components/Tabs/index.js +1 -1
  390. package/dist/components/Timeline/Lane.d.ts.map +1 -1
  391. package/dist/components/Timeline/index.js +1 -1
  392. package/dist/components/Toast/Toast.d.ts +1 -1
  393. package/dist/components/Toast/Toast.d.ts.map +1 -1
  394. package/dist/components/Toast/index.js +1 -1
  395. package/dist/components/ToggleBar/ToggleBar.d.ts +2 -1
  396. package/dist/components/ToggleBar/ToggleBar.d.ts.map +1 -1
  397. package/dist/components/ToggleBar/index.js +1 -1
  398. package/dist/components/TokenPanel/TokenPanel.d.ts +1 -1
  399. package/dist/components/TokenPanel/TokenPanel.d.ts.map +1 -1
  400. package/dist/components/TokenPanel/index.js +1 -1
  401. package/dist/components/ToolButton/ToolButton.d.ts +1 -1
  402. package/dist/components/ToolButton/ToolButton.d.ts.map +1 -1
  403. package/dist/components/ToolButton/index.js +1 -1
  404. package/dist/components/ToolGroup/ToolGroup.d.ts +1 -1
  405. package/dist/components/ToolGroup/ToolGroup.d.ts.map +1 -1
  406. package/dist/components/ToolGroup/index.js +1 -1
  407. package/dist/components/ToolOptionsBar/ToolOptionsBar.d.ts +1 -1
  408. package/dist/components/ToolOptionsBar/ToolOptionsBar.d.ts.map +1 -1
  409. package/dist/components/ToolOptionsBar/index.js +1 -1
  410. package/dist/components/ToolPalette/ToolPalette.d.ts +1 -1
  411. package/dist/components/ToolPalette/ToolPalette.d.ts.map +1 -1
  412. package/dist/components/ToolPalette/index.d.ts +1 -0
  413. package/dist/components/ToolPalette/index.d.ts.map +1 -1
  414. package/dist/components/ToolPalette/index.js +3 -2
  415. package/dist/components/Tooltip/Tooltip.d.ts +8 -4
  416. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  417. package/dist/components/Tooltip/index.d.ts +1 -1
  418. package/dist/components/Tooltip/index.d.ts.map +1 -1
  419. package/dist/components/Tooltip/index.js +2 -2
  420. package/dist/components/Tree/Tree.d.ts +84 -0
  421. package/dist/components/Tree/Tree.d.ts.map +1 -0
  422. package/dist/components/Tree/index.d.ts +3 -0
  423. package/dist/components/Tree/index.d.ts.map +1 -0
  424. package/dist/components/Tree/index.js +2 -0
  425. package/dist/components/segmentTooltip.d.ts +30 -0
  426. package/dist/components/segmentTooltip.d.ts.map +1 -0
  427. package/dist/components/stance.d.ts +30 -0
  428. package/dist/components/stance.d.ts.map +1 -0
  429. package/dist/components/stanceCss.d.ts +31 -0
  430. package/dist/components/stanceCss.d.ts.map +1 -0
  431. package/dist/components/stanceSurfaces.d.ts +4 -0
  432. package/dist/components/stanceSurfaces.d.ts.map +1 -0
  433. package/dist/format/number.d.ts +3 -2
  434. package/dist/format/number.d.ts.map +1 -1
  435. package/dist/icons/Icon.d.ts +1 -1
  436. package/dist/icons/Icon.d.ts.map +1 -1
  437. package/dist/icons/ShapeKindIcon.d.ts +10 -0
  438. package/dist/icons/ShapeKindIcon.d.ts.map +1 -0
  439. package/dist/icons/index.d.ts +55 -53
  440. package/dist/icons/index.d.ts.map +1 -1
  441. package/dist/icons/paths.d.ts +2 -0
  442. package/dist/icons/paths.d.ts.map +1 -1
  443. package/dist/index.d.ts +17 -3
  444. package/dist/index.d.ts.map +1 -1
  445. package/dist/index.js +130 -79
  446. package/dist/index.js.map +1 -1
  447. package/dist/interactiveTarget.d.ts +9 -0
  448. package/dist/interactiveTarget.d.ts.map +1 -0
  449. package/dist/overlays/portalHost.d.ts +1 -1
  450. package/dist/overlays/portalHost.d.ts.map +1 -1
  451. package/dist/style.css +1 -1
  452. package/dist/useReorderDragList.d.ts +36 -7
  453. package/dist/useReorderDragList.d.ts.map +1 -1
  454. package/dist/useRovingTabIndex.d.ts +1 -1
  455. package/dist/useScrollSpy.d.ts +48 -0
  456. package/dist/useScrollSpy.d.ts.map +1 -0
  457. package/package.json +8 -8
  458. package/dist/chunks/ActionBar-CLwiY3Jg.js +0 -62
  459. package/dist/chunks/ActionBar-CLwiY3Jg.js.map +0 -1
  460. package/dist/chunks/ActionsBar-D84a4eGy.js +0 -41
  461. package/dist/chunks/ActionsBar-D84a4eGy.js.map +0 -1
  462. package/dist/chunks/Badge-CW9pBPFl.js.map +0 -1
  463. package/dist/chunks/BandEditor-jY-PFKY6.js.map +0 -1
  464. package/dist/chunks/Button-DRSApvnK.js +0 -90
  465. package/dist/chunks/Button-DRSApvnK.js.map +0 -1
  466. package/dist/chunks/Callout-DrNu-9Qr.js +0 -122
  467. package/dist/chunks/Callout-DrNu-9Qr.js.map +0 -1
  468. package/dist/chunks/Checkbox-BOsDAY2F.js.map +0 -1
  469. package/dist/chunks/ColorField-BYzgZM9o.js.map +0 -1
  470. package/dist/chunks/ComboBox-Cz3f0Y_8.js.map +0 -1
  471. package/dist/chunks/CurveEditor-DXwSP-iA.js.map +0 -1
  472. package/dist/chunks/DataGrid-C8KrYtw7.js +0 -104
  473. package/dist/chunks/DataGrid-C8KrYtw7.js.map +0 -1
  474. package/dist/chunks/DetentSlider-CAubVX0J.js.map +0 -1
  475. package/dist/chunks/Dialog-fGqqQ6o_.js +0 -61
  476. package/dist/chunks/Dialog-fGqqQ6o_.js.map +0 -1
  477. package/dist/chunks/Disclosure-CILDfWsU.js +0 -47
  478. package/dist/chunks/Disclosure-CILDfWsU.js.map +0 -1
  479. package/dist/chunks/DragHandleGlyph-CppAz4_8.js.map +0 -1
  480. package/dist/chunks/Field-DWnV8WZY.js.map +0 -1
  481. package/dist/chunks/FontFamilySelect-DxfgTC3G.js.map +0 -1
  482. package/dist/chunks/GradientEditor-rRBmf3G0.js +0 -333
  483. package/dist/chunks/GradientEditor-rRBmf3G0.js.map +0 -1
  484. package/dist/chunks/Icon-DT0x6HaQ.js.map +0 -1
  485. package/dist/chunks/InlineRange-DdIlfGqG.js +0 -29
  486. package/dist/chunks/InlineRange-DdIlfGqG.js.map +0 -1
  487. package/dist/chunks/Input-DbMKpkXy.js.map +0 -1
  488. package/dist/chunks/ItemList-B9zYb0GE.js +0 -42
  489. package/dist/chunks/ItemList-B9zYb0GE.js.map +0 -1
  490. package/dist/chunks/Jog-DkkTlL3_.js.map +0 -1
  491. package/dist/chunks/Keycaps-DunVpejA.js.map +0 -1
  492. package/dist/chunks/LayerStack-CfQ6GsRz.js +0 -142
  493. package/dist/chunks/LayerStack-CfQ6GsRz.js.map +0 -1
  494. package/dist/chunks/MenuButton-C_4nox39.js +0 -60
  495. package/dist/chunks/MenuButton-C_4nox39.js.map +0 -1
  496. package/dist/chunks/MeshEditor-Bipz-Ocl.js +0 -123
  497. package/dist/chunks/MeshEditor-Bipz-Ocl.js.map +0 -1
  498. package/dist/chunks/NumberField-CCjEDZCg.js.map +0 -1
  499. package/dist/chunks/OptionsBar-DeQ-vUeZ.js.map +0 -1
  500. package/dist/chunks/PaintField-jBOJ32rL.js.map +0 -1
  501. package/dist/chunks/PaintInput-Qs7Rul5R.js.map +0 -1
  502. package/dist/chunks/PatternPicker-BMpXWboq.js.map +0 -1
  503. package/dist/chunks/Plot2D-CXf_f7QD.js.map +0 -1
  504. package/dist/chunks/PointPlotter-S_gz7VYt.js.map +0 -1
  505. package/dist/chunks/Powerline-Ak5AWUlK.js +0 -36
  506. package/dist/chunks/Powerline-Ak5AWUlK.js.map +0 -1
  507. package/dist/chunks/Prefs-CNC8tzyN.js +0 -308
  508. package/dist/chunks/Prefs-CNC8tzyN.js.map +0 -1
  509. package/dist/chunks/Properties-Rnb6TAbN.js +0 -891
  510. package/dist/chunks/Properties-Rnb6TAbN.js.map +0 -1
  511. package/dist/chunks/RadioGroup-CsVp3SEu.js.map +0 -1
  512. package/dist/chunks/RangeSlider-DNr-pJpZ.js.map +0 -1
  513. package/dist/chunks/ResizeHandle-RXFf5fXr.js.map +0 -1
  514. package/dist/chunks/Select-BEope086.js +0 -190
  515. package/dist/chunks/Select-BEope086.js.map +0 -1
  516. package/dist/chunks/SelectionPanel-CEbLS-0D.js.map +0 -1
  517. package/dist/chunks/Sidebar-qn_oSCNX.js.map +0 -1
  518. package/dist/chunks/SidebarPanel-Bs6V21hg.js.map +0 -1
  519. package/dist/chunks/Slider-CIIrqiFS.js.map +0 -1
  520. package/dist/chunks/StatusBar-B4L15DSm.js.map +0 -1
  521. package/dist/chunks/Switch-DH5POG0T.js.map +0 -1
  522. package/dist/chunks/Tabs-BFHikpml.js.map +0 -1
  523. package/dist/chunks/Timeline-DNKY_yiK.js.map +0 -1
  524. package/dist/chunks/Toast-CI1UDuK6.js.map +0 -1
  525. package/dist/chunks/ToggleBar-CClus5Cd.js +0 -75
  526. package/dist/chunks/ToggleBar-CClus5Cd.js.map +0 -1
  527. package/dist/chunks/TokenPanel-BPHq24dc.js.map +0 -1
  528. package/dist/chunks/ToolButton-9QzJCmuM.js.map +0 -1
  529. package/dist/chunks/ToolGroup-BJiDrH_i.js.map +0 -1
  530. package/dist/chunks/ToolOptionsBar-CAM6RcUH.js.map +0 -1
  531. package/dist/chunks/ToolPalette-DGkKwE7D.js +0 -97
  532. package/dist/chunks/ToolPalette-DGkKwE7D.js.map +0 -1
  533. package/dist/chunks/Tooltip-C4YBczLq.js +0 -42
  534. package/dist/chunks/Tooltip-C4YBczLq.js.map +0 -1
  535. package/dist/chunks/createKeyframeLayer-DKtO0Sw_.js.map +0 -1
  536. package/dist/chunks/dlog-CMYiRF3Q.js.map +0 -1
  537. package/dist/chunks/icons-DFLytcui.js +0 -165
  538. package/dist/chunks/icons-DFLytcui.js.map +0 -1
  539. package/dist/chunks/keyGlyph-Bp0wnLHn.js.map +0 -1
  540. package/dist/chunks/model-13kZ_-mE.js +0 -483
  541. package/dist/chunks/model-13kZ_-mE.js.map +0 -1
  542. package/dist/chunks/number-BHz66zQO.js.map +0 -1
  543. package/dist/chunks/portalHost-CjpCnuGU.js.map +0 -1
  544. package/dist/chunks/range.module-DSsOIq1R.js +0 -8
  545. package/dist/chunks/range.module-DSsOIq1R.js.map +0 -1
  546. package/dist/chunks/schema-Dft4Cu2p.js +0 -47
  547. package/dist/chunks/schema-Dft4Cu2p.js.map +0 -1
  548. package/dist/chunks/segmentedControl.module-DS72X1ns.js +0 -11
  549. package/dist/chunks/segmentedControl.module-DS72X1ns.js.map +0 -1
  550. package/dist/chunks/snap-CEjuWOhN.js.map +0 -1
  551. package/dist/chunks/useReorderDragList-CSQGd7zQ.js +0 -102
  552. package/dist/chunks/useReorderDragList-CSQGd7zQ.js.map +0 -1
  553. package/dist/chunks/useRovingTabIndex-Dkpf_KhN.js.map +0 -1
  554. package/dist/components/ActionsBar/ActionsBar.d.ts +0 -35
  555. package/dist/components/ActionsBar/ActionsBar.d.ts.map +0 -1
  556. package/dist/components/ActionsBar/index.d.ts +0 -3
  557. package/dist/components/ActionsBar/index.d.ts.map +0 -1
  558. package/dist/components/ActionsBar/index.js +0 -2
  559. package/dist/components/LayerStack/LayerStack.d.ts +0 -62
  560. package/dist/components/LayerStack/LayerStack.d.ts.map +0 -1
  561. package/dist/components/LayerStack/index.d.ts +0 -2
  562. package/dist/components/LayerStack/index.d.ts.map +0 -1
  563. package/dist/components/LayerStack/index.js +0 -2
  564. package/dist/components/Properties/EffectCard.d.ts +0 -69
  565. package/dist/components/Properties/EffectCard.d.ts.map +0 -1
@@ -0,0 +1,427 @@
1
+ import { t as e } from "./dlog-F0I8KsIW.js";
2
+ import { J as t, h as n } from "./icons-Dk8SRS8g.js";
3
+ import { t as r } from "./Button-BIdXHQOx.js";
4
+ import { t as i } from "./useReorderDragList-B_-5L5Gu.js";
5
+ import { t as a } from "./Disclosure-0G0uh2fa.js";
6
+ import { t as o } from "./DragGhost-B5_hb9W9.js";
7
+ import { t as s } from "./DragHandleGlyph-Dr7Fgo0I.js";
8
+ import { t as c } from "./ItemList.module-BSpCSxan.js";
9
+ import { n as l } from "./Properties-D_KzDN9K.js";
10
+ import { r as u } from "./PropertyField-DGCecAnV.js";
11
+ import { asNodeId as d, createMoveToIndexOp as f, dispatchApplyBatch as p } from "@weasel-js/core";
12
+ import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
13
+ import { useId as _, useLayoutEffect as v, useRef as y, useState as b } from "react";
14
+ var x = {
15
+ root: "_root_19r15_3",
16
+ head: "_head_19r15_13",
17
+ title: "_title_19r15_20",
18
+ palette: "_palette_19r15_28",
19
+ add: "_add_19r15_33",
20
+ level: "_level_19r15_50",
21
+ cards: "_cards_19r15_60",
22
+ entry: "_entry_19r15_65",
23
+ row: "_row_19r15_69",
24
+ children: "_children_19r15_79",
25
+ dragging: "_dragging_19r15_84",
26
+ dropBefore: "_dropBefore_19r15_89",
27
+ dropAfter: "_dropAfter_19r15_93",
28
+ grip: "_grip_19r15_98",
29
+ lock: "_lock_19r15_99",
30
+ stop: "_stop_19r15_116",
31
+ twistyGap: "_twistyGap_19r15_123",
32
+ check: "_check_19r15_129",
33
+ handle: "_handle_19r15_137",
34
+ card: "_card_19r15_60"
35
+ };
36
+ //#endregion
37
+ //#region src/components/LayerList/LayerList.tsx
38
+ function S(e, t) {
39
+ return t.parentId === null ? C(e, t) : e.map((e) => e.id === t.parentId ? {
40
+ ...e,
41
+ children: C(e.children ?? [], t)
42
+ } : e.children ? {
43
+ ...e,
44
+ children: S(e.children, t)
45
+ } : e);
46
+ }
47
+ function C(e, { ids: t, index: n }) {
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
+ return [
50
+ ...i.slice(0, o),
51
+ ...a,
52
+ ...i.slice(o)
53
+ ];
54
+ }
55
+ function w(e, t, n = /* @__PURE__ */ new Set()) {
56
+ for (let r of e) t(r) && n.add(r.id), r.children && w(r.children, t, n);
57
+ return n;
58
+ }
59
+ function T(e) {
60
+ return e.some((e) => (e.children?.length ?? 0) > 0);
61
+ }
62
+ function E(e) {
63
+ return e != null && e !== !1;
64
+ }
65
+ function D(t) {
66
+ let { items: n, collapsedIds: r, onCollapsedChange: i, title: a, addKinds: o, onAdd: s, empty: l, className: u } = t, [d, f] = b(/* @__PURE__ */ new Map()), p = r ? new Set(r) : w(n, (e) => d.get(e.id) ?? e.defaultCollapsed === !0), m = (e) => {
67
+ let t = new Set(p);
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 = y(t);
70
+ S.current = t;
71
+ let C = (e, t) => {
72
+ let { selectedIds: n = [], onSelect: r } = S.current;
73
+ if (!r) return;
74
+ if (L.current = e.id, e.locked || !t.shiftKey) {
75
+ r([e.id]);
76
+ return;
77
+ }
78
+ let i = new Set(O(S.current.items)), a = n.filter((e) => !i.has(e));
79
+ r(a.includes(e.id) ? a.filter((t) => t !== e.id) : [...a, e.id]);
80
+ }, D = /* @__PURE__ */ new Map(), A = (e) => {
81
+ for (let n of e) D.set(n.id, t.renderBody ? t.renderBody(n) : null), n.children && A(n.children);
82
+ };
83
+ A(n);
84
+ let j = [], M = (e, t, n) => {
85
+ for (let r of e) E(D.get(r.id)) || j.push({
86
+ item: r,
87
+ parentId: t,
88
+ level: n
89
+ }), r.children?.length && !p.has(r.id) && M(r.children, r.id, n + 1);
90
+ };
91
+ M(n, null, 1);
92
+ let N = y(/* @__PURE__ */ new Map()), [P, F] = b(null), I = y(null), L = y(null), R = y(/* @__PURE__ */ new Map()).current;
93
+ v(() => {
94
+ let e = I.current;
95
+ if (e === null) return;
96
+ I.current = null;
97
+ let t = N.current.get(e);
98
+ t && document.activeElement !== t && t.focus();
99
+ });
100
+ let z = t.selectedIds ?? [], B = j.some((e) => e.item.id === P) ? P ?? void 0 : (j.find((e) => z.includes(e.item.id)) ?? j[0])?.item.id, V = (e) => {
101
+ I.current = e, F(e);
102
+ }, H = (e) => {
103
+ let t = L.current ?? e, n = j.findIndex((e) => e.item.id === t), r = j.findIndex((t) => t.item.id === e);
104
+ if (n < 0 || r < 0) return;
105
+ let i = j.slice(Math.min(n, r), Math.max(n, r) + 1).filter((e) => !e.item.locked).map((e) => e.item.id);
106
+ i.length > 0 && S.current.onSelect?.(i);
107
+ }, U = {
108
+ tabStop: B,
109
+ register: (e) => (t) => {
110
+ t ? N.current.set(e, t) : N.current.delete(e);
111
+ },
112
+ onFocus: (e) => {
113
+ F(e), L.current ??= e;
114
+ },
115
+ onKeyDown: (e, n) => (r) => {
116
+ if (r.target !== r.currentTarget) return;
117
+ let i = j.findIndex((t) => t.item.id === e.id), a = (e) => {
118
+ let n = j[Math.max(0, Math.min(j.length - 1, e))];
119
+ n && (V(n.item.id), r.shiftKey && t.onSelect ? H(n.item.id) : L.current = n.item.id);
120
+ }, o = (e.children?.length ?? 0) > 0, s = o && !p.has(e.id);
121
+ switch (r.key) {
122
+ case "ArrowDown":
123
+ case "ArrowUp": {
124
+ let t = r.key === "ArrowDown" ? 1 : -1;
125
+ r.altKey ? R.get(n)?.(e.id, t) && (I.current = e.id) : a(i + t);
126
+ break;
127
+ }
128
+ case "Home":
129
+ a(0);
130
+ break;
131
+ case "End":
132
+ a(j.length - 1);
133
+ break;
134
+ case "ArrowRight":
135
+ if (o && !s) m(e.id);
136
+ else if (s) a(i + 1);
137
+ else return;
138
+ break;
139
+ case "ArrowLeft":
140
+ if (s) m(e.id);
141
+ else if (n !== null) a(j.findIndex((e) => e.item.id === n));
142
+ else return;
143
+ break;
144
+ case "Enter":
145
+ case " ":
146
+ C(e, {
147
+ shiftKey: r.shiftKey,
148
+ ctrlKey: r.ctrlKey,
149
+ metaKey: r.metaKey,
150
+ altKey: r.altKey
151
+ });
152
+ break;
153
+ default: return;
154
+ }
155
+ r.preventDefault();
156
+ }
157
+ }, W = {
158
+ props: t,
159
+ collapsed: p,
160
+ toggle: m,
161
+ press: C,
162
+ uid: _(),
163
+ nested: T(n),
164
+ bodies: D,
165
+ nudgers: R,
166
+ keys: U
167
+ }, G = s ? o ?? [] : [], K = u ? `${x.root} ${u}` : x.root;
168
+ return /* @__PURE__ */ g("div", {
169
+ className: K,
170
+ children: [(a !== void 0 || G.length > 0) && /* @__PURE__ */ g("div", {
171
+ className: x.head,
172
+ children: [a !== void 0 && /* @__PURE__ */ h("h2", {
173
+ className: x.title,
174
+ children: a
175
+ }), /* @__PURE__ */ h("div", {
176
+ className: x.palette,
177
+ children: G.map((t) => /* @__PURE__ */ h("button", {
178
+ type: "button",
179
+ className: x.add,
180
+ "aria-label": `Add ${t}`,
181
+ onClick: () => {
182
+ e("layer-list", "onAdd", { kind: t }), s?.(t);
183
+ },
184
+ children: t
185
+ }, t))
186
+ })]
187
+ }), n.length === 0 ? /* @__PURE__ */ h("div", {
188
+ className: c.empty,
189
+ children: l ?? (G.length > 0 ? "No layers — add one above." : "No layers.")
190
+ }) : /* @__PURE__ */ h(k, {
191
+ items: n,
192
+ parentId: null,
193
+ shared: W,
194
+ path: "",
195
+ level: 1
196
+ })]
197
+ });
198
+ }
199
+ function O(e) {
200
+ let t = [];
201
+ for (let n of e) n.locked && t.push(n.id), n.children && t.push(...O(n.children));
202
+ return t;
203
+ }
204
+ function k({ items: t, parentId: n, shared: r, path: s, level: d }) {
205
+ let { props: f } = r, p = f.selectedIds ?? [], _ = i({
206
+ items: t.map((e) => ({
207
+ id: e.id,
208
+ label: e.label,
209
+ locked: e.locked || !f.onReorder
210
+ })),
211
+ selectedIds: t.filter((e) => p.includes(e.id)).map((e) => e.id),
212
+ onReorder: (r, i) => {
213
+ let a = new Set(r), o = {
214
+ ids: t.filter((e) => a.has(e.id)).map((e) => e.id),
215
+ parentId: n,
216
+ index: i - t.slice(0, i).filter((e) => a.has(e.id)).length
217
+ };
218
+ e("layer-list", "onReorder", o), f.onReorder?.(o);
219
+ },
220
+ onPress: (e, n) => {
221
+ let i = t.find((t) => t.id === e);
222
+ i && r.press(i, n);
223
+ }
224
+ });
225
+ r.nudgers.set(n, (e, n) => _.nudge(e, t.findIndex((t) => t.id === e), n));
226
+ let [v, y] = b(null), S = (e) => {
227
+ y(e), _.containerProps.ref(e);
228
+ }, C = t.map((e) => r.bodies.get(e.id)), w = C.some(E), { draggedIds: T, targetIndex: D, ghost: O } = _.state, F = (e, i, o) => {
229
+ let u = C[i], m = e.children ?? [], v = !r.collapsed.has(e.id), y = `${r.uid}${s}-${i}`, b = o ? void 0 : _.rowProps(e.id, i).onPointerDown, S = p.includes(e.id), w = [x.entry];
230
+ o || (T?.includes(e.id) && w.push(x.dragging), D === i && !T?.includes(e.id) && w.push(x.dropBefore), D === t.length && i === t.length - 1 && w.push(x.dropAfter));
231
+ let O = /* @__PURE__ */ h(N, {
232
+ item: e,
233
+ shared: r
234
+ }), F = E(u) ? /* @__PURE__ */ h(l, {
235
+ className: x.card,
236
+ title: e.title ?? e.label,
237
+ ...e.tone === void 0 ? {} : { tone: e.tone },
238
+ collapsed: o || !v,
239
+ onCollapsedChange: () => r.toggle(e.id),
240
+ leading: /* @__PURE__ */ h(M, {
241
+ item: e,
242
+ reorder: f.onReorder !== void 0,
243
+ onPointerDown: b,
244
+ onNudge: (t) => r.nudgers.get(n)?.(e.id, t)
245
+ }),
246
+ actions: o ? void 0 : O,
247
+ children: o ? null : u
248
+ }) : /* @__PURE__ */ g("div", {
249
+ className: [
250
+ c.row,
251
+ x.row,
252
+ S ? c.selected : ""
253
+ ].filter(Boolean).join(" "),
254
+ "data-selected": S ? "true" : void 0,
255
+ "data-locked": e.locked ? "true" : void 0,
256
+ onPointerDown: b,
257
+ ...o ? {} : {
258
+ role: "row",
259
+ "aria-level": d,
260
+ ...m.length > 0 ? { "aria-expanded": v } : {},
261
+ ...f.onSelect ? { "aria-selected": S } : {},
262
+ tabIndex: r.keys.tabStop === e.id ? 0 : -1,
263
+ ref: r.keys.register(e.id),
264
+ onKeyDown: r.keys.onKeyDown(e, n),
265
+ onFocus: () => r.keys.onFocus(e.id)
266
+ },
267
+ children: [
268
+ r.nested && (m.length > 0 ? /* @__PURE__ */ h("span", {
269
+ className: x.stop,
270
+ onPointerDown: A,
271
+ children: /* @__PURE__ */ h(a, {
272
+ open: v,
273
+ onToggle: () => r.toggle(e.id),
274
+ label: `${e.label} sublayers`,
275
+ controls: y
276
+ })
277
+ }) : /* @__PURE__ */ h("span", { className: x.twistyGap })),
278
+ /* @__PURE__ */ h(j, {
279
+ item: e,
280
+ reorder: f.onReorder !== void 0
281
+ }),
282
+ f.onVisibilityChange && (e.locked ? /* @__PURE__ */ h("span", { className: x.check }) : /* @__PURE__ */ h("input", {
283
+ className: x.check,
284
+ type: "checkbox",
285
+ checked: e.visible !== !1,
286
+ onPointerDown: A,
287
+ onChange: (t) => f.onVisibilityChange?.(e.id, t.target.checked),
288
+ "aria-label": `Show ${e.label}`
289
+ })),
290
+ e.leading,
291
+ /* @__PURE__ */ h("span", {
292
+ className: c.label,
293
+ children: e.title ?? e.label
294
+ }),
295
+ o ? null : /* @__PURE__ */ h(P, {
296
+ item: e,
297
+ shared: r
298
+ })
299
+ ]
300
+ });
301
+ return /* @__PURE__ */ g("div", {
302
+ role: "none",
303
+ className: w.join(" "),
304
+ "data-selected": S ? "true" : void 0,
305
+ children: [F, !o && m.length > 0 && v && /* @__PURE__ */ h("div", {
306
+ id: y,
307
+ role: "rowgroup",
308
+ className: x.children,
309
+ children: /* @__PURE__ */ h(k, {
310
+ items: m,
311
+ parentId: e.id,
312
+ shared: r,
313
+ path: `${s}-${i}`,
314
+ level: d + 1
315
+ })
316
+ })]
317
+ }, e.id);
318
+ };
319
+ return /* @__PURE__ */ g(m, { children: [w ? /* @__PURE__ */ h(u, {
320
+ ref: S,
321
+ className: `${x.level} ${x.cards}`,
322
+ children: t.map((e, t) => F(e, t, !1))
323
+ }) : /* @__PURE__ */ h("div", {
324
+ ref: S,
325
+ className: x.level,
326
+ ...n === null ? {
327
+ role: "treegrid",
328
+ "aria-label": f.label ?? f.title ?? "Layers",
329
+ ...f.onSelect ? { "aria-multiselectable": !0 } : {}
330
+ } : { role: "none" },
331
+ children: t.map((e, t) => F(e, t, !1))
332
+ }), O && v ? /* @__PURE__ */ h(o, {
333
+ at: O,
334
+ from: v,
335
+ children: t.map((e, t) => O.ids.includes(e.id) ? F(e, t, !0) : null)
336
+ }) : null] });
337
+ }
338
+ var A = (e) => e.stopPropagation();
339
+ function j({ item: e, reorder: n }) {
340
+ return e.locked ? /* @__PURE__ */ h("span", {
341
+ className: x.lock,
342
+ role: "img",
343
+ "aria-label": "Locked",
344
+ children: /* @__PURE__ */ h(t, { size: 12 })
345
+ }) : !n && e.badge === void 0 ? null : /* @__PURE__ */ h("span", {
346
+ className: x.grip,
347
+ "aria-hidden": "true",
348
+ children: e.badge ?? /* @__PURE__ */ h(s, { size: 13 })
349
+ });
350
+ }
351
+ function M({ item: e, reorder: t, onPointerDown: n, onNudge: r }) {
352
+ if (e.locked) return /* @__PURE__ */ h(j, {
353
+ item: e,
354
+ reorder: t
355
+ });
356
+ if (t || e.badge !== void 0) return /* @__PURE__ */ h("button", {
357
+ type: "button",
358
+ className: x.handle,
359
+ "aria-label": `Drag to reorder ${e.label}`,
360
+ "aria-keyshortcuts": "Alt+ArrowUp Alt+ArrowDown",
361
+ onPointerDown: n,
362
+ onKeyDown: (e) => {
363
+ !e.altKey || e.key !== "ArrowUp" && e.key !== "ArrowDown" || (e.preventDefault(), r(e.key === "ArrowUp" ? -1 : 1));
364
+ },
365
+ children: e.badge ?? /* @__PURE__ */ h(s, {})
366
+ });
367
+ }
368
+ function N({ item: e, shared: t }) {
369
+ let { onVisibilityChange: n } = t.props;
370
+ return /* @__PURE__ */ g(m, { children: [n && !e.locked && /* @__PURE__ */ h("input", {
371
+ className: x.check,
372
+ type: "checkbox",
373
+ checked: e.visible !== !1,
374
+ onClick: A,
375
+ onChange: (t) => n(e.id, t.target.checked),
376
+ "aria-label": `Show ${e.label}`
377
+ }), /* @__PURE__ */ h(P, {
378
+ item: e,
379
+ shared: t
380
+ })] });
381
+ }
382
+ function P({ item: e, shared: t }) {
383
+ let { onRemove: i } = t.props;
384
+ return !i || e.locked ? null : /* @__PURE__ */ h("span", {
385
+ className: x.stop,
386
+ onPointerDown: A,
387
+ children: /* @__PURE__ */ h(r, {
388
+ variant: "ghost",
389
+ size: "sm",
390
+ iconOnly: !0,
391
+ ariaLabel: `Remove ${e.label}`,
392
+ onClick: () => i(e.id),
393
+ children: /* @__PURE__ */ h(n, { size: 14 })
394
+ })
395
+ });
396
+ }
397
+ //#endregion
398
+ //#region src/components/LayerList/useSceneLayerList.ts
399
+ function F(e) {
400
+ let { scene: t, selection: n, adapter: r, itemFor: i, label: a = "Reorder" } = e, o = (e) => [...e].reverse().flatMap((e) => {
401
+ let n = t.get(e);
402
+ if (!n) return [];
403
+ let r = t.childrenOf(e);
404
+ return [{
405
+ ...i(n),
406
+ id: e,
407
+ ...r.length > 0 ? { children: o(r) } : {}
408
+ }];
409
+ });
410
+ return {
411
+ items: o(t.roots),
412
+ selectedIds: n.current.map(String),
413
+ onSelect: (e) => n.set(e.map(d)),
414
+ onReorder: ({ ids: e, parentId: n, index: i }) => {
415
+ let o = (n === null ? t.roots : t.childrenOf(d(n))).length - e.length - i;
416
+ p(r, [f({
417
+ ids: e,
418
+ parentId: n,
419
+ index: Math.max(0, o)
420
+ })], a);
421
+ }
422
+ };
423
+ }
424
+ //#endregion
425
+ export { D as n, S as r, F as t };
426
+
427
+ //# sourceMappingURL=LayerList-nz-QYvTF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LayerList-nz-QYvTF.js","names":["stop","s","rows","_Fragment","dlog","LockIcon","CloseIcon","Button","useReorderDragList","Disclosure","DragGhost","DragHandleGlyph","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","kids","childId","path","onPointerDown","ghosted","isSelected","draggedIds","targetIndex","controls","Controls","head","Handle","stop","Grip","Remove","Fragment","i","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 { CloseIcon, LockIcon } from '../../icons';\nimport { type PressModifiers, useReorderDragList } from '../../useReorderDragList';\nimport { Button } from '../Button';\nimport { Disclosure } from '../Disclosure';\nimport { DragGhost } from '../DragGhost';\nimport { DragHandleGlyph } from '../DragHandleGlyph';\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 ✕ 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 ?? <DragHandleGlyph 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 ?? <DragHandleGlyph />}\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 <Button variant=\"ghost\" size=\"sm\" iconOnly ariaLabel={`Remove ${item.label}`} onClick={() => onRemove(item.id)}>\n <CloseIcon size={14} />\n </Button>\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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"}
@@ -0,0 +1,74 @@
1
+ import { t as e } from "./Button-BIdXHQOx.js";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ import { useEffect as r, useRef as i, useState as a } from "react";
4
+ var o = {
5
+ editor: "_editor_14hyz_1",
6
+ list: "_list_14hyz_8",
7
+ entry: "_entry_14hyz_17",
8
+ input: "_input_14hyz_23",
9
+ empty: "_empty_14hyz_42",
10
+ actions: "_actions_14hyz_48"
11
+ };
12
+ //#endregion
13
+ //#region src/components/ListEditor/ListEditor.tsx
14
+ function s({ value: s, onChange: c, placeholder: l, empty: u = "None", addLabel: d = "Add", "aria-label": f, className: p }) {
15
+ let m = i([]), [h, g] = a(null);
16
+ r(() => {
17
+ h !== null && (m.current[h]?.focus(), g(null));
18
+ }, [h]);
19
+ let _ = (e) => {
20
+ c([
21
+ ...s.slice(0, e),
22
+ "",
23
+ ...s.slice(e)
24
+ ]), g(e);
25
+ }, v = (e) => {
26
+ c(s.filter((t, n) => n !== e)), s.length > 1 && g(Math.max(0, e - 1));
27
+ }, y = (e, t) => {
28
+ e.key === "Enter" ? (e.preventDefault(), _(t + 1)) : e.key === "Backspace" && s[t] === "" && (e.preventDefault(), v(t));
29
+ }, b = (e) => `${f ?? "Entry"} ${e + 1}`;
30
+ return /* @__PURE__ */ n("div", {
31
+ className: [o.editor, p].filter(Boolean).join(" "),
32
+ role: "group",
33
+ "aria-label": f,
34
+ children: [s.length === 0 ? /* @__PURE__ */ t("div", {
35
+ className: o.empty,
36
+ children: u
37
+ }) : /* @__PURE__ */ t("ul", {
38
+ className: o.list,
39
+ children: s.map((r, i) => /* @__PURE__ */ n("li", {
40
+ className: o.entry,
41
+ children: [/* @__PURE__ */ t("input", {
42
+ ref: (e) => {
43
+ m.current[i] = e;
44
+ },
45
+ type: "text",
46
+ className: o.input,
47
+ "aria-label": b(i),
48
+ value: r,
49
+ placeholder: l,
50
+ onChange: (e) => c(s.map((t, n) => n === i ? e.target.value : t)),
51
+ onKeyDown: (e) => y(e, i)
52
+ }), /* @__PURE__ */ t(e, {
53
+ variant: "ghost",
54
+ size: "sm",
55
+ iconOnly: !0,
56
+ ariaLabel: `Remove ${b(i)}`,
57
+ onClick: () => v(i),
58
+ children: "×"
59
+ })]
60
+ }, i))
61
+ }), /* @__PURE__ */ t("div", {
62
+ className: o.actions,
63
+ children: /* @__PURE__ */ t(e, {
64
+ size: "sm",
65
+ onClick: () => _(s.length),
66
+ children: d
67
+ })
68
+ })]
69
+ });
70
+ }
71
+ //#endregion
72
+ export { s as t };
73
+
74
+ //# sourceMappingURL=ListEditor-BQ6AV3Ac.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListEditor-BQ6AV3Ac.js","names":["s","Button","ListEditor_module_default","ListEditor","ariaLabel","inputs","useRef","focus","setFocus","useState","insert","onChange","value","at","remove","i","onKeyDown","name","className","empty","el","entry","j","v","addLabel"],"sources":["../../src/components/ListEditor/ListEditor.module.css","../../src/components/ListEditor/ListEditor.tsx"],"sourcesContent":[".editor {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-4);\n min-width: min(28rem, calc(100vw - 64px));\n}\n\n.list {\n display: flex;\n flex-direction: column;\n gap: var(--wzl-space-2);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.entry {\n display: flex;\n align-items: center;\n gap: var(--wzl-space-2);\n}\n\n.input {\n flex: 1 1 auto;\n min-width: 0;\n height: var(--wzl-field-h, var(--wzl-control-h));\n padding: 0 var(--wzl-field-pad-x);\n background: var(--wzl-surface-sunken);\n color: var(--wzl-fg);\n border: 1px solid var(--wzl-border);\n border-radius: var(--wzl-radius-sm);\n font-family: var(--wzl-font-ui);\n font-size: var(--wzl-font-size);\n}\n\n.input:focus {\n outline: none;\n border-color: var(--wzl-focus-ring);\n box-shadow: 0 0 0 1px var(--wzl-focus-ring);\n}\n\n.empty {\n font-size: var(--wzl-font-size-sm);\n color: var(--wzl-fg-subtle);\n font-style: italic;\n}\n\n.actions {\n display: flex;\n}\n","import { useEffect, useRef, useState, type KeyboardEvent } from 'react';\nimport { Button } from '../Button';\nimport s from './ListEditor.module.css';\n\n/** Props for {@link ListEditor}. */\nexport interface ListEditorProps {\n value: readonly string[];\n /** Every edit, add and removal, with the whole list. Entries are written as\n * typed — an empty one stays until it is removed. */\n onChange: (next: string[]) => void;\n /** Shown in an empty entry. */\n placeholder?: string;\n /** Shown in place of the entries when there are none. */\n empty?: string;\n /** Text of the add button. */\n addLabel?: string;\n /** Names the list for assistive tech; each entry is named from it. */\n 'aria-label'?: string;\n className?: string;\n}\n\n/**\n * An editable list of strings: one field per entry, a remove button beside\n * each, and an add button under them. Enter in an entry adds one after it;\n * Backspace in an empty one removes it.\n */\nexport function ListEditor({\n value,\n onChange,\n placeholder,\n empty = 'None',\n addLabel = 'Add',\n 'aria-label': ariaLabel,\n className,\n}: ListEditorProps) {\n const inputs = useRef<(HTMLInputElement | null)[]>([]);\n const [focus, setFocus] = useState<number | null>(null);\n\n useEffect(() => {\n if (focus === null) return;\n inputs.current[focus]?.focus();\n setFocus(null);\n }, [focus]);\n\n const insert = (at: number): void => {\n onChange([...value.slice(0, at), '', ...value.slice(at)]);\n setFocus(at);\n };\n const remove = (at: number): void => {\n onChange(value.filter((_, i) => i !== at));\n if (value.length > 1) setFocus(Math.max(0, at - 1));\n };\n const onKeyDown = (e: KeyboardEvent<HTMLInputElement>, at: number): void => {\n if (e.key === 'Enter') {\n e.preventDefault();\n insert(at + 1);\n } else if (e.key === 'Backspace' && value[at] === '') {\n e.preventDefault();\n remove(at);\n }\n };\n const name = (i: number): string => `${ariaLabel ?? 'Entry'} ${i + 1}`;\n\n return (\n <div className={[s.editor, className].filter(Boolean).join(' ')} role=\"group\" aria-label={ariaLabel}>\n {value.length === 0 ? (\n <div className={s.empty}>{empty}</div>\n ) : (\n <ul className={s.list}>\n {value.map((entry, i) => (\n // Entries have no identity beyond their position, and two may be equal.\n <li key={i} className={s.entry}>\n <input\n ref={(el) => {\n inputs.current[i] = el;\n }}\n type=\"text\"\n className={s.input}\n aria-label={name(i)}\n value={entry}\n placeholder={placeholder}\n onChange={(e) => onChange(value.map((v, j) => (j === i ? e.target.value : v)))}\n onKeyDown={(e) => onKeyDown(e, i)}\n />\n <Button\n variant=\"ghost\"\n size=\"sm\"\n iconOnly\n ariaLabel={`Remove ${name(i)}`}\n onClick={() => remove(i)}\n >\n ×\n </Button>\n </li>\n ))}\n </ul>\n )}\n <div className={s.actions}>\n <Button size=\"sm\" onClick={() => insert(value.length)}>\n {addLabel}\n </Button>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AC0BA,SAAgBG,EAAW,EACzB,UACA,aACA,gBACA,WAAQ,QACR,cAAW,OACX,cAAcC,GACd,gBACkB;CAClB,IAAMC,IAASC,EAAoC,CAAC,CAAC,GAC/C,CAACC,GAAOC,KAAYC,EAAwB,IAAI;CAEtD,QAAgB;EACd,AAAIF,MAAU,SACdF,EAAO,QAAQE,EAAM,EAAE,MAAM,GAC7BC,EAAS,IAAI;CACf,GAAG,CAACD,CAAK,CAAC;CAEV,IAAMG,KAAU,MAAqB;EAEnC,AADAC,EAAS;GAAC,GAAGC,EAAM,MAAM,GAAGC,CAAE;GAAG;GAAI,GAAGD,EAAM,MAAMC,CAAE;EAAC,CAAC,GACxDL,EAASK,CAAE;CACb,GACMC,KAAU,MAAqB;EAEnC,AADAH,EAASC,EAAM,QAAQ,GAAG,MAAMG,MAAMF,CAAE,CAAC,GACrCD,EAAM,SAAS,KAAGJ,EAAS,KAAK,IAAI,GAAGK,IAAK,CAAC,CAAC;CACpD,GACMG,KAAa,GAAoC,MAAqB;EAC1E,AAAI,EAAE,QAAQ,WACZ,EAAE,eAAe,GACjBN,EAAOG,IAAK,CAAC,KACJ,EAAE,QAAQ,eAAeD,EAAMC,OAAQ,OAChD,EAAE,eAAe,GACjBC,EAAOD,CAAE;CAEb,GACMI,KAAQ,MAAsB,GAAGb,KAAa,QAAQ,GAAGW,IAAI;CAEnE,OACE,kBAAC,OAAD;EAAK,WAAW,CAACf,EAAE,QAAQkB,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EAAG,MAAK;EAAQ,cAAYd;EAA1F,UAAA,CACGQ,EAAM,WAAW,IAChB,kBAAC,OAAD;GAAK,WAAWZ,EAAE;GAAQ,UAAAmB;EAAW,CAAA,IAErC,kBAAC,MAAD;GAAI,WAAWnB,EAAE;GACd,UAAAY,EAAM,KAAK,GAAO,MAEjB,kBAAC,MAAD;IAAY,WAAWZ,EAAE;IAAzB,UAAA,CACE,kBAAC,SAAD;KACE,MAAM,MAAO;MACX,EAAO,QAAQ,KAAKoB;KACtB;KACA,MAAK;KACL,WAAWpB,EAAE;KACb,cAAYiB,EAAK,CAAC;KAClB,OAAOI;KACM;KACb,WAAW,MAAMV,EAASC,EAAM,KAAK,GAAG,MAAOU,MAAM,IAAI,EAAE,OAAO,QAAQC,CAAE,CAAC;KAC7E,YAAY,MAAMP,EAAU,GAAG,CAAC;IACjC,CAAA,GACD,kBAACf,GAAD;KACE,SAAQ;KACR,MAAK;KACL,UAAA;KACA,WAAW,UAAUgB,EAAK,CAAC;KAC3B,eAAeH,EAAO,CAAC;KACxB,UAAA;IAEO,CAAA,CACN;GAtBK,GAAA,CAsBL,CACL;EACC,CAAA,GAEN,kBAAC,OAAD;GAAK,WAAWd,EAAE;GAChB,UAAA,kBAACC,GAAD;IAAQ,MAAK;IAAK,eAAeS,EAAOE,EAAM,MAAM;IACjD,UAAAY;GACK,CAAA;EACL,CAAA,CACF;;AAET"}