@weasel-js/ui 1.4.1 → 1.4.3

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 (230) hide show
  1. package/dist/chunks/{ActionBar-D4N1o4LB.js → ActionBar-DxGp3WuZ.js} +2 -2
  2. package/dist/chunks/{ActionBar-D4N1o4LB.js.map → ActionBar-DxGp3WuZ.js.map} +1 -1
  3. package/dist/chunks/{ActionsBar-B-gWm0NE.js → ActionsBar-D1VFreoj.js} +3 -3
  4. package/dist/chunks/{ActionsBar-B-gWm0NE.js.map → ActionsBar-D1VFreoj.js.map} +1 -1
  5. package/dist/chunks/{Badge-7yQseqZb.js → Badge-Bf8Rd1R6.js} +1 -1
  6. package/dist/chunks/{Badge-7yQseqZb.js.map → Badge-Bf8Rd1R6.js.map} +1 -1
  7. package/dist/chunks/{BandEditor-DjOi4ldl.js → BandEditor-CUlbOlJi.js} +1 -1
  8. package/dist/chunks/{BandEditor-DjOi4ldl.js.map → BandEditor-CUlbOlJi.js.map} +1 -1
  9. package/dist/chunks/{Button-0OdcoOMx.js → Button-Cq5LBUMD.js} +1 -1
  10. package/dist/chunks/{Button-0OdcoOMx.js.map → Button-Cq5LBUMD.js.map} +1 -1
  11. package/dist/chunks/Callout-Dvt6lqVn.js +122 -0
  12. package/dist/chunks/Callout-Dvt6lqVn.js.map +1 -0
  13. package/dist/chunks/{Checkbox-D_GCnoJ0.js → Checkbox-D-pVpobU.js} +1 -1
  14. package/dist/chunks/{Checkbox-D_GCnoJ0.js.map → Checkbox-D-pVpobU.js.map} +1 -1
  15. package/dist/chunks/{ColorField-pEkaSppg.js → ColorField-D0OxUlvu.js} +2 -2
  16. package/dist/chunks/{ColorField-pEkaSppg.js.map → ColorField-D0OxUlvu.js.map} +1 -1
  17. package/dist/chunks/ComboBox-BBRRWvdc.js +107 -0
  18. package/dist/chunks/ComboBox-BBRRWvdc.js.map +1 -0
  19. package/dist/chunks/{CurveEditor-DoX5Q0_V.js → CurveEditor-DtjdpJVB.js} +2 -2
  20. package/dist/chunks/{CurveEditor-DoX5Q0_V.js.map → CurveEditor-DtjdpJVB.js.map} +1 -1
  21. package/dist/chunks/{DataGrid-DHV0chfL.js → DataGrid-BVdDMZkQ.js} +2 -2
  22. package/dist/chunks/{DataGrid-DHV0chfL.js.map → DataGrid-BVdDMZkQ.js.map} +1 -1
  23. package/dist/chunks/{DetentSlider-Cd5360U3.js → DetentSlider-BVWKdRyC.js} +2 -2
  24. package/dist/chunks/{DetentSlider-Cd5360U3.js.map → DetentSlider-BVWKdRyC.js.map} +1 -1
  25. package/dist/chunks/Dialog-CYBLjwbd.js +61 -0
  26. package/dist/chunks/Dialog-CYBLjwbd.js.map +1 -0
  27. package/dist/chunks/Disclosure-DiA6UKdM.js +47 -0
  28. package/dist/chunks/Disclosure-DiA6UKdM.js.map +1 -0
  29. package/dist/chunks/{DragHandleGlyph--2zsZzA2.js → DragHandleGlyph-CppAz4_8.js} +1 -1
  30. package/dist/chunks/{DragHandleGlyph--2zsZzA2.js.map → DragHandleGlyph-CppAz4_8.js.map} +1 -1
  31. package/dist/chunks/{Field-Bc6Nuc3p.js → Field-dzlxOGxT.js} +1 -1
  32. package/dist/chunks/{Field-Bc6Nuc3p.js.map → Field-dzlxOGxT.js.map} +1 -1
  33. package/dist/chunks/{FontFamilySelect-CvrXKVwv.js → FontFamilySelect-DIJ4phXz.js} +2 -2
  34. package/dist/chunks/{FontFamilySelect-CvrXKVwv.js.map → FontFamilySelect-DIJ4phXz.js.map} +1 -1
  35. package/dist/chunks/{GradientEditor-CPeTbkFE.js → GradientEditor-C5NVILLk.js} +4 -4
  36. package/dist/chunks/{GradientEditor-CPeTbkFE.js.map → GradientEditor-C5NVILLk.js.map} +1 -1
  37. package/dist/chunks/{InlineRange-CBt_SBsC.js → InlineRange-50ulExCL.js} +2 -2
  38. package/dist/chunks/{InlineRange-CBt_SBsC.js.map → InlineRange-50ulExCL.js.map} +1 -1
  39. package/dist/chunks/{Input-CSAECs_T.js → Input-CoKOtyD0.js} +2 -2
  40. package/dist/chunks/{Input-CSAECs_T.js.map → Input-CoKOtyD0.js.map} +1 -1
  41. package/dist/chunks/{ItemList-POiCvUDx.js → ItemList-BZJQReXD.js} +1 -1
  42. package/dist/chunks/{ItemList-POiCvUDx.js.map → ItemList-BZJQReXD.js.map} +1 -1
  43. package/dist/chunks/{Keycaps-DszN5Dwl.js → Keycaps-DSeq6QWH.js} +1 -1
  44. package/dist/chunks/{Keycaps-DszN5Dwl.js.map → Keycaps-DSeq6QWH.js.map} +1 -1
  45. package/dist/chunks/{LayerStack-BVdwhAhG.js → LayerStack-DOylrQcm.js} +23 -23
  46. package/dist/chunks/LayerStack-DOylrQcm.js.map +1 -0
  47. package/dist/chunks/{NumberField-Byw1iaIJ.js → NumberField-DBowmOfe.js} +12 -10
  48. package/dist/chunks/NumberField-DBowmOfe.js.map +1 -0
  49. package/dist/chunks/{OptionsBar-efIwfqYe.js → OptionsBar-D_Cd3ZYs.js} +3 -3
  50. package/dist/chunks/{OptionsBar-efIwfqYe.js.map → OptionsBar-D_Cd3ZYs.js.map} +1 -1
  51. package/dist/chunks/{PaintInput-6HTUAFL1.js → PaintInput-67U-COE4.js} +5 -5
  52. package/dist/chunks/{PaintInput-6HTUAFL1.js.map → PaintInput-67U-COE4.js.map} +1 -1
  53. package/dist/chunks/{PatternPicker-G9e0CU5H.js → PatternPicker-Ba22Bf4L.js} +2 -2
  54. package/dist/chunks/{PatternPicker-G9e0CU5H.js.map → PatternPicker-Ba22Bf4L.js.map} +1 -1
  55. package/dist/chunks/{Plot2D-D63D5w6c.js → Plot2D-C97pO13t.js} +1 -1
  56. package/dist/chunks/{Plot2D-D63D5w6c.js.map → Plot2D-C97pO13t.js.map} +1 -1
  57. package/dist/chunks/{PointPlotter-CZJE8Ccu.js → PointPlotter-CbDKVggs.js} +2 -2
  58. package/dist/chunks/{PointPlotter-CZJE8Ccu.js.map → PointPlotter-CbDKVggs.js.map} +1 -1
  59. package/dist/chunks/{Powerline-BY_ADnqq.js → Powerline-BaHDJlcO.js} +2 -2
  60. package/dist/chunks/{Powerline-BY_ADnqq.js.map → Powerline-BaHDJlcO.js.map} +1 -1
  61. package/dist/chunks/Prefs-D0l0PXLF.js +294 -0
  62. package/dist/chunks/Prefs-D0l0PXLF.js.map +1 -0
  63. package/dist/chunks/Properties-CMLua9mU.js +746 -0
  64. package/dist/chunks/Properties-CMLua9mU.js.map +1 -0
  65. package/dist/chunks/{RadioGroup-XjbfUb7S.js → RadioGroup-B2_LUgDp.js} +2 -2
  66. package/dist/chunks/{RadioGroup-XjbfUb7S.js.map → RadioGroup-B2_LUgDp.js.map} +1 -1
  67. package/dist/chunks/{RangeSlider-D0hFbx_Z.js → RangeSlider-C3to8A52.js} +1 -1
  68. package/dist/chunks/{RangeSlider-D0hFbx_Z.js.map → RangeSlider-C3to8A52.js.map} +1 -1
  69. package/dist/chunks/{ResizeHandle-DfqqfaZz.js → ResizeHandle-BrCO0JrH.js} +1 -1
  70. package/dist/chunks/{ResizeHandle-DfqqfaZz.js.map → ResizeHandle-BrCO0JrH.js.map} +1 -1
  71. package/dist/chunks/Select-CacMfs4v.js +124 -0
  72. package/dist/chunks/Select-CacMfs4v.js.map +1 -0
  73. package/dist/chunks/{SelectionPanel-BU2cmRtp.js → SelectionPanel-BWXU8BqW.js} +203 -202
  74. package/dist/chunks/SelectionPanel-BWXU8BqW.js.map +1 -0
  75. package/dist/chunks/{Sidebar-Du0yp1S0.js → Sidebar-BvwjZiFm.js} +1 -1
  76. package/dist/chunks/{Sidebar-Du0yp1S0.js.map → Sidebar-BvwjZiFm.js.map} +1 -1
  77. package/dist/chunks/{SidebarPanel-Cuq__FIC.js → SidebarPanel-D5Ua2vyP.js} +2 -2
  78. package/dist/chunks/{SidebarPanel-Cuq__FIC.js.map → SidebarPanel-D5Ua2vyP.js.map} +1 -1
  79. package/dist/chunks/{Slider-BE6jaxyU.js → Slider-Bk_G5sSW.js} +15 -15
  80. package/dist/chunks/Slider-Bk_G5sSW.js.map +1 -0
  81. package/dist/chunks/{StatusBar-DLYwh5sb.js → StatusBar-Bqv4D0dW.js} +1 -1
  82. package/dist/chunks/{StatusBar-DLYwh5sb.js.map → StatusBar-Bqv4D0dW.js.map} +1 -1
  83. package/dist/chunks/{Switch-B521iN3m.js → Switch-C4NU-me1.js} +1 -1
  84. package/dist/chunks/{Switch-B521iN3m.js.map → Switch-C4NU-me1.js.map} +1 -1
  85. package/dist/chunks/{Tabs-BuifAv0p.js → Tabs-BT3CDkoQ.js} +1 -1
  86. package/dist/chunks/{Tabs-BuifAv0p.js.map → Tabs-BT3CDkoQ.js.map} +1 -1
  87. package/dist/chunks/{Timeline-CWuh0nV0.js → Timeline-BmYwYjXd.js} +2 -2
  88. package/dist/chunks/{Timeline-CWuh0nV0.js.map → Timeline-BmYwYjXd.js.map} +1 -1
  89. package/dist/chunks/{Toast-B75V2gqL.js → Toast-B7ylq7fz.js} +1 -1
  90. package/dist/chunks/{Toast-B75V2gqL.js.map → Toast-B7ylq7fz.js.map} +1 -1
  91. package/dist/chunks/{ToggleBar-D0veW91s.js → ToggleBar-Bxwv6xvj.js} +2 -2
  92. package/dist/chunks/{ToggleBar-D0veW91s.js.map → ToggleBar-Bxwv6xvj.js.map} +1 -1
  93. package/dist/chunks/{ToolButton-D5VwD47i.js → ToolButton-CtDkqUIc.js} +2 -2
  94. package/dist/chunks/{ToolButton-D5VwD47i.js.map → ToolButton-CtDkqUIc.js.map} +1 -1
  95. package/dist/chunks/{ToolGroup-B2PlMKQ-.js → ToolGroup-zDtqt0QJ.js} +1 -1
  96. package/dist/chunks/{ToolGroup-B2PlMKQ-.js.map → ToolGroup-zDtqt0QJ.js.map} +1 -1
  97. package/dist/chunks/{ToolOptionsBar-ByHX7y1M.js → ToolOptionsBar-B2xPWzJf.js} +1 -1
  98. package/dist/chunks/{ToolOptionsBar-ByHX7y1M.js.map → ToolOptionsBar-B2xPWzJf.js.map} +1 -1
  99. package/dist/chunks/{ToolPalette-Bi5ezkO6.js → ToolPalette-BbrMHfQ9.js} +5 -5
  100. package/dist/chunks/{ToolPalette-Bi5ezkO6.js.map → ToolPalette-BbrMHfQ9.js.map} +1 -1
  101. package/dist/chunks/Tooltip-BHre_vbI.js +42 -0
  102. package/dist/chunks/Tooltip-BHre_vbI.js.map +1 -0
  103. package/dist/chunks/{keyGlyph-BLFMKZgF.js → keyGlyph-Bp0wnLHn.js} +1 -1
  104. package/dist/chunks/{keyGlyph-BLFMKZgF.js.map → keyGlyph-Bp0wnLHn.js.map} +1 -1
  105. package/dist/chunks/{number-D3TDawLC.js → number-Bv1nbhOJ.js} +1 -1
  106. package/dist/chunks/{number-D3TDawLC.js.map → number-Bv1nbhOJ.js.map} +1 -1
  107. package/dist/chunks/portalHost-CjpCnuGU.js +28 -0
  108. package/dist/chunks/portalHost-CjpCnuGU.js.map +1 -0
  109. package/dist/chunks/{range.module-CttzfN6a.js → range.module-CgURq-Ua.js} +1 -1
  110. package/dist/chunks/{range.module-CttzfN6a.js.map → range.module-CgURq-Ua.js.map} +1 -1
  111. package/dist/chunks/schema-CtWwGbqJ.js +41 -0
  112. package/dist/chunks/schema-CtWwGbqJ.js.map +1 -0
  113. package/dist/chunks/{segmentedControl.module-XADeq9e5.js → segmentedControl.module-BgvAPkSZ.js} +1 -1
  114. package/dist/chunks/{segmentedControl.module-XADeq9e5.js.map → segmentedControl.module-BgvAPkSZ.js.map} +1 -1
  115. package/dist/chunks/{useReorderDragList-UvHJFjTZ.js → useReorderDragList-CSQGd7zQ.js} +26 -30
  116. package/dist/chunks/useReorderDragList-CSQGd7zQ.js.map +1 -0
  117. package/dist/chunks/{useRovingTabIndex-ByjY4lnw.js → useRovingTabIndex-Dkpf_KhN.js} +1 -1
  118. package/dist/chunks/{useRovingTabIndex-ByjY4lnw.js.map → useRovingTabIndex-Dkpf_KhN.js.map} +1 -1
  119. package/dist/components/ActionBar/index.js +1 -1
  120. package/dist/components/ActionsBar/index.js +1 -1
  121. package/dist/components/Badge/index.js +1 -1
  122. package/dist/components/BandEditor/index.js +1 -1
  123. package/dist/components/Button/index.js +1 -1
  124. package/dist/components/Callout/Callout.d.ts +2 -1
  125. package/dist/components/Callout/Callout.d.ts.map +1 -1
  126. package/dist/components/Callout/index.js +1 -1
  127. package/dist/components/Checkbox/index.js +1 -1
  128. package/dist/components/ColorField/index.js +1 -1
  129. package/dist/components/ComboBox/ComboBox.d.ts +9 -2
  130. package/dist/components/ComboBox/ComboBox.d.ts.map +1 -1
  131. package/dist/components/ComboBox/index.js +1 -1
  132. package/dist/components/CurveEditor/index.js +1 -1
  133. package/dist/components/DataGrid/index.js +1 -1
  134. package/dist/components/DetentSlider/index.js +1 -1
  135. package/dist/components/Dialog/Dialog.d.ts +2 -1
  136. package/dist/components/Dialog/Dialog.d.ts.map +1 -1
  137. package/dist/components/Dialog/index.js +1 -1
  138. package/dist/components/Disclosure/Disclosure.d.ts +64 -0
  139. package/dist/components/Disclosure/Disclosure.d.ts.map +1 -0
  140. package/dist/components/Disclosure/index.d.ts +3 -0
  141. package/dist/components/Disclosure/index.d.ts.map +1 -0
  142. package/dist/components/Disclosure/index.js +2 -0
  143. package/dist/components/DragHandleGlyph/index.js +1 -1
  144. package/dist/components/Field/index.js +1 -1
  145. package/dist/components/FontFamilySelect/index.js +1 -1
  146. package/dist/components/GradientEditor/index.js +1 -1
  147. package/dist/components/InlineRange/index.js +1 -1
  148. package/dist/components/Input/index.js +1 -1
  149. package/dist/components/ItemList/index.js +1 -1
  150. package/dist/components/Keycaps/index.js +2 -2
  151. package/dist/components/LayerStack/LayerStack.d.ts +22 -9
  152. package/dist/components/LayerStack/LayerStack.d.ts.map +1 -1
  153. package/dist/components/LayerStack/index.js +1 -1
  154. package/dist/components/NumberField/NumberField.d.ts +12 -0
  155. package/dist/components/NumberField/NumberField.d.ts.map +1 -1
  156. package/dist/components/NumberField/index.js +1 -1
  157. package/dist/components/OptionsBar/index.js +1 -1
  158. package/dist/components/PaintInput/index.js +1 -1
  159. package/dist/components/PatternPicker/index.js +1 -1
  160. package/dist/components/Plot2D/index.js +1 -1
  161. package/dist/components/PointPlotter/index.js +1 -1
  162. package/dist/components/Powerline/index.js +2 -2
  163. package/dist/components/Prefs/PrefsForm.d.ts.map +1 -1
  164. package/dist/components/Prefs/index.d.ts +1 -1
  165. package/dist/components/Prefs/index.d.ts.map +1 -1
  166. package/dist/components/Prefs/index.js +3 -2
  167. package/dist/components/Prefs/schema.d.ts +17 -1
  168. package/dist/components/Prefs/schema.d.ts.map +1 -1
  169. package/dist/components/Properties/EffectCard.d.ts +3 -2
  170. package/dist/components/Properties/EffectCard.d.ts.map +1 -1
  171. package/dist/components/Properties/PropertyGroup.d.ts +24 -10
  172. package/dist/components/Properties/PropertyGroup.d.ts.map +1 -1
  173. package/dist/components/Properties/PropertyPanel.d.ts +68 -24
  174. package/dist/components/Properties/PropertyPanel.d.ts.map +1 -1
  175. package/dist/components/Properties/index.d.ts +1 -1
  176. package/dist/components/Properties/index.d.ts.map +1 -1
  177. package/dist/components/Properties/index.js +2 -2
  178. package/dist/components/RadioGroup/index.js +1 -1
  179. package/dist/components/RangeSlider/index.js +1 -1
  180. package/dist/components/ResizeHandle/index.js +1 -1
  181. package/dist/components/Select/Select.d.ts +9 -2
  182. package/dist/components/Select/Select.d.ts.map +1 -1
  183. package/dist/components/Select/index.js +1 -1
  184. package/dist/components/SelectionPanel/SelectionPanel.d.ts.map +1 -1
  185. package/dist/components/SelectionPanel/index.js +1 -1
  186. package/dist/components/Sidebar/index.js +1 -1
  187. package/dist/components/SidebarPanel/index.js +1 -1
  188. package/dist/components/Slider/index.js +1 -1
  189. package/dist/components/StatusBar/index.js +1 -1
  190. package/dist/components/Switch/index.js +1 -1
  191. package/dist/components/Tabs/index.js +1 -1
  192. package/dist/components/Timeline/index.js +1 -1
  193. package/dist/components/Toast/index.js +1 -1
  194. package/dist/components/ToggleBar/index.js +1 -1
  195. package/dist/components/ToolButton/index.js +1 -1
  196. package/dist/components/ToolGroup/index.js +1 -1
  197. package/dist/components/ToolOptionsBar/index.js +1 -1
  198. package/dist/components/ToolPalette/index.js +1 -1
  199. package/dist/components/Tooltip/Tooltip.d.ts +2 -1
  200. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  201. package/dist/components/Tooltip/index.js +1 -1
  202. package/dist/index.d.ts +2 -0
  203. package/dist/index.d.ts.map +1 -1
  204. package/dist/index.js +63 -60
  205. package/dist/index.js.map +1 -1
  206. package/dist/overlays/portalHost.d.ts +55 -0
  207. package/dist/overlays/portalHost.d.ts.map +1 -0
  208. package/dist/style.css +1 -1
  209. package/dist/useReorderDragList.d.ts +1 -1
  210. package/dist/useReorderDragList.d.ts.map +1 -1
  211. package/package.json +6 -6
  212. package/dist/chunks/Callout-wRyevt8I.js +0 -116
  213. package/dist/chunks/Callout-wRyevt8I.js.map +0 -1
  214. package/dist/chunks/ComboBox-inno5gt1.js +0 -89
  215. package/dist/chunks/ComboBox-inno5gt1.js.map +0 -1
  216. package/dist/chunks/Dialog-CX2B8PIp.js +0 -59
  217. package/dist/chunks/Dialog-CX2B8PIp.js.map +0 -1
  218. package/dist/chunks/LayerStack-BVdwhAhG.js.map +0 -1
  219. package/dist/chunks/NumberField-Byw1iaIJ.js.map +0 -1
  220. package/dist/chunks/Prefs-ByKG3ylD.js +0 -300
  221. package/dist/chunks/Prefs-ByKG3ylD.js.map +0 -1
  222. package/dist/chunks/Properties-BuNzy7Hb.js +0 -662
  223. package/dist/chunks/Properties-BuNzy7Hb.js.map +0 -1
  224. package/dist/chunks/Select-D1uP21db.js +0 -103
  225. package/dist/chunks/Select-D1uP21db.js.map +0 -1
  226. package/dist/chunks/SelectionPanel-BU2cmRtp.js.map +0 -1
  227. package/dist/chunks/Slider-BE6jaxyU.js.map +0 -1
  228. package/dist/chunks/Tooltip-Bq8Hvj4r.js +0 -40
  229. package/dist/chunks/Tooltip-Bq8Hvj4r.js.map +0 -1
  230. package/dist/chunks/useReorderDragList-UvHJFjTZ.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"useReorderDragList-UvHJFjTZ.js","names":[],"sources":["../../src/useReorderDragList.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { ReactNode, PointerEvent as ReactPointerEvent, RefCallback } from 'react';\nimport { openPointerSession, type PointerSession } from '@weasel-js/core';\n\n/** One row in a reorderable list. */\nexport interface LayerListItem {\n id: string;\n label: ReactNode;\n /** Locked rows cannot be dragged, cannot be crossed by drops, and\n * never combine with other rows in a multi-selection. */\n locked?: boolean;\n /** Optional color swatch rendered before the label. Any CSS color string. */\n swatch?: string;\n}\n\n/**\n * Options for {@link useReorderDragList}. `onReorder` receives the dragged ids\n * and the index they were dropped at, measured against the pre-drag `items`.\n */\nexport interface UseReorderDragListOptions {\n items: LayerListItem[];\n selectedIds: string[];\n onReorder(ids: string[], targetIndex: number): void;\n /** A press that was released without ever engaging a drag — the click a\n * list row means by it. Fires for locked rows too, which can be selected\n * but not dragged. Modifiers are read at press, not at release. */\n onPress?(id: string, mods: PressModifiers): void;\n /** Pointer-move distance (px) before pending drag engages. Default 4. */\n threshold?: number;\n}\n\n/** Modifier keys held when a press began. */\nexport interface PressModifiers {\n shiftKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n altKey: boolean;\n}\n\n/**\n * Live drag state for rendering feedback: which ids are being dragged and the\n * insertion index the drop would use. Both `null` when no drag is engaged.\n */\nexport interface ReorderDragState {\n draggedIds: string[] | null;\n targetIndex: number | null;\n}\n\n/**\n * A `ref` for the list container, an `onPointerDown` for each row, and the\n * live {@link ReorderDragState}. The container ref is required, not optional\n * decoration: it is what the drop index is measured against and what the\n * pointer session is opened on.\n */\nexport interface ReorderDragHandlers {\n rowProps(id: string, index: number): { onPointerDown(e: ReactPointerEvent): void };\n containerProps: {\n ref: RefCallback<HTMLElement>;\n };\n state: ReorderDragState;\n}\n\n/**\n * The half-open run of indices a row at `sourceIndex` may be dropped into:\n * bounded by the nearest locked row above and below it, so a locked row is a\n * wall in both directions rather than a global ceiling.\n */\nfunction unlockedSegment(items: readonly LayerListItem[], sourceIndex: number): [number, number] {\n let lo = 0;\n for (let i = sourceIndex - 1; i >= 0; i--) {\n if (items[i]?.locked) { lo = i + 1; break; }\n }\n let hi = items.length;\n for (let i = sourceIndex + 1; i < items.length; i++) {\n if (items[i]?.locked) { hi = i; break; }\n }\n return [lo, hi];\n}\n\n/** Would dropping `draggedIds` at `targetIndex` leave a contiguous block where it already is? */\nfunction isNoopDrop(items: readonly LayerListItem[], draggedIds: readonly string[], targetIndex: number): boolean {\n const indices = draggedIds\n .map((id) => items.findIndex((it) => it.id === id))\n .filter((i) => i >= 0)\n .sort((a, b) => a - b);\n const contiguous =\n indices.length > 0 &&\n indices.every((v, i) => {\n if (i === 0) return true;\n const prev = indices[i - 1];\n return prev !== undefined && v === prev + 1;\n });\n const first = indices[0];\n const last = indices[indices.length - 1];\n return contiguous\n && first !== undefined\n && last !== undefined\n && targetIndex >= first\n && targetIndex <= last + 1;\n}\n\n/**\n * Drag-to-reorder for a vertical list of rows. Dragging a row that is part of\n * the current selection drags the whole selection; dragging any other row\n * drags just that row. Locked rows can neither be dragged nor crossed by a\n * drop. A drop that would leave a contiguous block where it already is does\n * not call `onReorder`.\n *\n * A press opens an `openPointerSession` on the *container*, which owns the\n * rest of the gesture: a drag that leaves the list still tracks, a release\n * anywhere still drops, and a release the window never delivered still ends\n * the drag. The container is the origin rather than the row because rows come\n * and go as the list re-renders, and a drag must outlive the row it grabbed.\n */\nexport function useReorderDragList(opts: UseReorderDragListOptions): ReorderDragHandlers {\n const optsRef = useRef(opts);\n optsRef.current = opts;\n const containerRef = useRef<HTMLElement | null>(null);\n const sessionRef = useRef<PointerSession | null>(null);\n const [state, setState] = useState<ReorderDragState>({ draggedIds: null, targetIndex: null });\n\n useEffect(() => () => { sessionRef.current?.cancel(); }, []);\n\n const computeTargetIndex = useCallback((clientY: number, sourceIndex: number): number => {\n const [lo, hi] = unlockedSegment(optsRef.current.items, sourceIndex);\n const c = containerRef.current;\n if (!c) return lo;\n const rows = Array.from(c.children) as HTMLElement[];\n let raw = rows.length;\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n if (!row) continue;\n const r = row.getBoundingClientRect();\n if (clientY < r.bottom) { raw = i; break; }\n }\n return Math.max(lo, Math.min(raw, hi));\n }, []);\n\n const refCb = useCallback<RefCallback<HTMLElement>>((el) => {\n containerRef.current = el;\n }, []);\n\n const reset = useCallback(() => {\n sessionRef.current = null;\n setState({ draggedIds: null, targetIndex: null });\n }, []);\n\n const onPointerDownRow = useCallback((id: string, index: number, e: ReactPointerEvent) => {\n const container = containerRef.current;\n if (!container || sessionRef.current) return;\n\n // A locked row still opens a session: it cannot be dragged, but the press\n // has to reach `onPress` for the row to be selectable at all.\n const draggable = !optsRef.current.items[index]?.locked;\n const startX = e.clientX;\n const startY = e.clientY;\n const mods: PressModifiers = {\n shiftKey: e.shiftKey, ctrlKey: e.ctrlKey, metaKey: e.metaKey, altKey: e.altKey,\n };\n let active: { draggedIds: string[]; targetIndex: number } | null = null;\n\n sessionRef.current = openPointerSession(container, e, {\n onMove: (ev) => {\n if (active) {\n const targetIndex = computeTargetIndex(ev.clientY, index);\n if (targetIndex === active.targetIndex) return;\n active.targetIndex = targetIndex;\n setState({ draggedIds: active.draggedIds, targetIndex });\n return;\n }\n if (!draggable) return;\n if (Math.hypot(ev.clientX - startX, ev.clientY - startY) < (optsRef.current.threshold ?? 4)) return;\n const selected = optsRef.current.selectedIds;\n const [lo, hi] = unlockedSegment(optsRef.current.items, index);\n const draggedIds = (selected.includes(id) ? [...selected] : [id]).filter((x) => {\n const i = optsRef.current.items.findIndex((it) => it.id === x);\n return i >= lo && i < hi;\n });\n const targetIndex = computeTargetIndex(ev.clientY, index);\n active = { draggedIds, targetIndex };\n setState({ draggedIds, targetIndex });\n },\n onEnd: (ev) => {\n if (active) {\n const targetIndex = computeTargetIndex(ev.clientY, index);\n if (!isNoopDrop(optsRef.current.items, active.draggedIds, targetIndex)) {\n optsRef.current.onReorder(active.draggedIds, targetIndex);\n }\n } else {\n optsRef.current.onPress?.(id, mods);\n }\n reset();\n },\n // Every cancel reason — the browser's, a lost capture, an unmount —\n // says the gesture was interrupted rather than aimed, so the rows stay\n // where they were.\n onCancel: reset,\n });\n }, [computeTargetIndex, reset]);\n\n return {\n rowProps: (id, index) => ({\n onPointerDown: (e) => onPointerDownRow(id, index, e),\n }),\n containerProps: {\n ref: refCb,\n },\n state,\n };\n}\n"],"mappings":"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"}