@qw-ui/core 0.3.0-next.40 → 0.3.0-next.42

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 (402) hide show
  1. package/README.md +21 -37
  2. package/dist/action-sheet/action-sheet.d.ts +110 -0
  3. package/dist/action-sheet/index.d.ts +2 -0
  4. package/dist/action-sheet/index.js +2 -0
  5. package/dist/action-sheet-Cvcr1S_m.js +183 -0
  6. package/dist/action-sheet-Cvcr1S_m.js.map +1 -0
  7. package/dist/area-picker/area-picker.d.ts +113 -0
  8. package/dist/area-picker/index.d.ts +1 -0
  9. package/dist/area-picker/index.js +348 -0
  10. package/dist/area-picker/index.js.map +1 -0
  11. package/dist/aria-description-CimD2M_C.js +13 -0
  12. package/dist/aria-description-CimD2M_C.js.map +1 -0
  13. package/dist/aria-description.d.ts +2 -0
  14. package/dist/avatar/avatar-load.d.ts +76 -0
  15. package/dist/avatar/avatar.d.ts +22 -5
  16. package/dist/avatar/index.d.ts +1 -0
  17. package/dist/avatar/index.js +57 -18
  18. package/dist/avatar/index.js.map +1 -1
  19. package/dist/avatar-load-w9dq05oV.js +139 -0
  20. package/dist/avatar-load-w9dq05oV.js.map +1 -0
  21. package/dist/back-top/back-top.d.ts +77 -0
  22. package/dist/back-top/index.d.ts +1 -0
  23. package/dist/back-top/index.js +189 -0
  24. package/dist/back-top/index.js.map +1 -0
  25. package/dist/badge/badge.d.ts +9 -0
  26. package/dist/badge/index.js +14 -1
  27. package/dist/badge/index.js.map +1 -1
  28. package/dist/button/button.d.ts +13 -0
  29. package/dist/button/index.js +3 -5
  30. package/dist/button/index.js.map +1 -1
  31. package/dist/calendar/calendar.d.ts +100 -0
  32. package/dist/calendar/index.d.ts +1 -0
  33. package/dist/calendar/index.js +2 -0
  34. package/dist/calendar-CmpK3stz.js +363 -0
  35. package/dist/calendar-CmpK3stz.js.map +1 -0
  36. package/dist/card/card.d.ts +68 -0
  37. package/dist/card/index.d.ts +2 -0
  38. package/dist/card/index.js +2 -0
  39. package/dist/card-DRtWa6Cr.js +107 -0
  40. package/dist/card-DRtWa6Cr.js.map +1 -0
  41. package/dist/cascader/cascader.d.ts +115 -0
  42. package/dist/cascader/index.d.ts +1 -0
  43. package/dist/cascader/index.js +2 -0
  44. package/dist/cascader-D-xMjs7P.js +333 -0
  45. package/dist/cascader-D-xMjs7P.js.map +1 -0
  46. package/dist/cell/cell.d.ts +41 -0
  47. package/dist/cell/index.d.ts +1 -0
  48. package/dist/cell/index.js +43 -0
  49. package/dist/cell/index.js.map +1 -0
  50. package/dist/check-list/check-list.d.ts +78 -0
  51. package/dist/check-list/index.d.ts +2 -0
  52. package/dist/check-list/index.js +2 -0
  53. package/dist/check-list-BvZHQt5w.js +60 -0
  54. package/dist/check-list-BvZHQt5w.js.map +1 -0
  55. package/dist/checkbox/checkbox.d.ts +59 -0
  56. package/dist/checkbox/index.d.ts +2 -0
  57. package/dist/checkbox/index.js +2 -0
  58. package/dist/checkbox-BlndJrz5.js +127 -0
  59. package/dist/checkbox-BlndJrz5.js.map +1 -0
  60. package/dist/checkbox-group/checkbox-group.d.ts +86 -0
  61. package/dist/checkbox-group/index.d.ts +3 -0
  62. package/dist/checkbox-group/index.js +2 -0
  63. package/dist/checkbox-group-gGfsTv-e.js +223 -0
  64. package/dist/checkbox-group-gGfsTv-e.js.map +1 -0
  65. package/dist/choice-group-C4c9m0qe.js +373 -0
  66. package/dist/choice-group-C4c9m0qe.js.map +1 -0
  67. package/dist/circle/circle.d.ts +97 -0
  68. package/dist/circle/index.d.ts +1 -0
  69. package/dist/circle/index.js +119 -0
  70. package/dist/circle/index.js.map +1 -0
  71. package/dist/collapse/collapse.d.ts +98 -0
  72. package/dist/collapse/index.d.ts +2 -0
  73. package/dist/collapse/index.js +2 -0
  74. package/dist/collapse-B969h7-H.js +226 -0
  75. package/dist/collapse-B969h7-H.js.map +1 -0
  76. package/dist/countdown/countdown.d.ts +114 -0
  77. package/dist/countdown/index.d.ts +1 -0
  78. package/dist/countdown/index.js +309 -0
  79. package/dist/countdown/index.js.map +1 -0
  80. package/dist/date-picker/date-picker.d.ts +168 -0
  81. package/dist/date-picker/index.d.ts +1 -0
  82. package/dist/date-picker/index.js +401 -0
  83. package/dist/date-picker/index.js.map +1 -0
  84. package/dist/descriptions/descriptions.d.ts +69 -0
  85. package/dist/descriptions/index.d.ts +1 -0
  86. package/dist/descriptions/index.js +86 -0
  87. package/dist/descriptions/index.js.map +1 -0
  88. package/dist/dialog/dialog.d.ts +32 -3
  89. package/dist/dialog/index.js +58 -3
  90. package/dist/dialog/index.js.map +1 -1
  91. package/dist/divider/divider.d.ts +18 -2
  92. package/dist/divider/index.js +20 -2
  93. package/dist/divider/index.js.map +1 -1
  94. package/dist/dropdown/dropdown.d.ts +172 -0
  95. package/dist/dropdown/index.d.ts +2 -0
  96. package/dist/dropdown/index.js +467 -0
  97. package/dist/dropdown/index.js.map +1 -0
  98. package/dist/ellipsis/ellipsis-layout.d.ts +34 -0
  99. package/dist/ellipsis/ellipsis.d.ts +88 -0
  100. package/dist/ellipsis/index.d.ts +2 -0
  101. package/dist/ellipsis/index.js +320 -0
  102. package/dist/ellipsis/index.js.map +1 -0
  103. package/dist/empty/empty-illustration.d.ts +3 -0
  104. package/dist/empty/empty.d.ts +43 -1
  105. package/dist/empty/index.js +2 -21
  106. package/dist/empty-CAgyvhUI.js +166 -0
  107. package/dist/empty-CAgyvhUI.js.map +1 -0
  108. package/dist/field/field.d.ts +95 -0
  109. package/dist/field/index.d.ts +2 -0
  110. package/dist/field/index.js +2 -0
  111. package/dist/field-DMHGIMZF.js +241 -0
  112. package/dist/field-DMHGIMZF.js.map +1 -0
  113. package/dist/floating-bubble/floating-bubble.d.ts +116 -0
  114. package/dist/floating-bubble/index.d.ts +1 -0
  115. package/dist/floating-bubble/index.js +333 -0
  116. package/dist/floating-bubble/index.js.map +1 -0
  117. package/dist/floating-panel/floating-panel.d.ts +80 -0
  118. package/dist/floating-panel/index.d.ts +2 -0
  119. package/dist/floating-panel/index.js +2 -0
  120. package/dist/floating-panel-Cbm5njBJ.js +363 -0
  121. package/dist/floating-panel-Cbm5njBJ.js.map +1 -0
  122. package/dist/footer/footer.d.ts +94 -0
  123. package/dist/footer/index.d.ts +1 -0
  124. package/dist/footer/index.js +154 -0
  125. package/dist/footer/index.js.map +1 -0
  126. package/dist/form/connect.d.ts +6 -0
  127. package/dist/form/form.d.ts +100 -0
  128. package/dist/form/ids.d.ts +14 -0
  129. package/dist/form/index.d.ts +13 -0
  130. package/dist/form/index.js +3 -0
  131. package/dist/form/methods.d.ts +5 -0
  132. package/dist/form/model.d.ts +24 -0
  133. package/dist/form/native.d.ts +25 -0
  134. package/dist/form/rules.d.ts +40 -0
  135. package/dist/form/ssr.d.ts +7 -0
  136. package/dist/form/types.d.ts +150 -0
  137. package/dist/form-BAGkIEMY.js +1354 -0
  138. package/dist/form-BAGkIEMY.js.map +1 -0
  139. package/dist/format-BDUY0C_c.js +89 -0
  140. package/dist/format-BDUY0C_c.js.map +1 -0
  141. package/dist/gesture-_SRHIvBm.js +30 -0
  142. package/dist/gesture-_SRHIvBm.js.map +1 -0
  143. package/dist/grid/grid-item.d.ts +22 -0
  144. package/dist/grid/grid.d.ts +42 -0
  145. package/dist/grid/index.d.ts +2 -0
  146. package/dist/grid/index.js +73 -0
  147. package/dist/grid/index.js.map +1 -0
  148. package/dist/icon/icon.d.ts +37 -1
  149. package/dist/icon/identity.d.ts +3 -0
  150. package/dist/icon/index.js +2 -20
  151. package/dist/icon-Cgdbnk1u.js +77 -0
  152. package/dist/icon-Cgdbnk1u.js.map +1 -0
  153. package/dist/image/image-load.d.ts +24 -0
  154. package/dist/image/image.d.ts +45 -8
  155. package/dist/image/index.d.ts +1 -0
  156. package/dist/image/index.js +116 -14
  157. package/dist/image/index.js.map +1 -1
  158. package/dist/image-preview/image-preview.d.ts +124 -0
  159. package/dist/image-preview/index.d.ts +1 -0
  160. package/dist/image-preview/index.js +450 -0
  161. package/dist/image-preview/index.js.map +1 -0
  162. package/dist/index-bar/index-bar.d.ts +121 -0
  163. package/dist/index-bar/index.d.ts +1 -0
  164. package/dist/index-bar/index.js +386 -0
  165. package/dist/index-bar/index.js.map +1 -0
  166. package/dist/index.d.ts +107 -14
  167. package/dist/index.js +148 -14
  168. package/dist/index.js.map +1 -0
  169. package/dist/infinite-scroll/index.d.ts +1 -0
  170. package/dist/infinite-scroll/index.js +248 -0
  171. package/dist/infinite-scroll/index.js.map +1 -0
  172. package/dist/infinite-scroll/infinite-scroll.d.ts +95 -0
  173. package/dist/input/index.js +181 -22
  174. package/dist/input/index.js.map +1 -1
  175. package/dist/input/input.d.ts +44 -1
  176. package/dist/layer-IpFrl5--.js +414 -0
  177. package/dist/layer-IpFrl5--.js.map +1 -0
  178. package/dist/layout-BRSqi4AQ.js +43 -0
  179. package/dist/layout-BRSqi4AQ.js.map +1 -0
  180. package/dist/layout.d.ts +13 -0
  181. package/dist/list/index.d.ts +2 -0
  182. package/dist/list/index.js +2 -0
  183. package/dist/list/list.d.ts +30 -0
  184. package/dist/list-6-iz-Irh.js +28 -0
  185. package/dist/list-6-iz-Irh.js.map +1 -0
  186. package/dist/loading/index.js +45 -2
  187. package/dist/loading/index.js.map +1 -1
  188. package/dist/loading/loading.d.ts +45 -2
  189. package/dist/modal-dialog-machine-CF9_z3Dm.js +487 -0
  190. package/dist/modal-dialog-machine-CF9_z3Dm.js.map +1 -0
  191. package/dist/modal-dialog-machine.d.ts +21 -0
  192. package/dist/modal-dismissable-lifetime.d.ts +21 -0
  193. package/dist/modal-registry.d.ts +24 -0
  194. package/dist/modal-render-hydration.d.ts +35 -0
  195. package/dist/modal-render-runtime.d.ts +19 -0
  196. package/dist/modal-render-scope.d.ts +63 -0
  197. package/dist/nav-bar/index.d.ts +1 -0
  198. package/dist/nav-bar/index.js +115 -0
  199. package/dist/nav-bar/index.js.map +1 -0
  200. package/dist/nav-bar/nav-bar.d.ts +76 -0
  201. package/dist/notice-bar/index.d.ts +2 -0
  202. package/dist/notice-bar/index.js +2 -0
  203. package/dist/notice-bar/notice-bar.d.ts +103 -0
  204. package/dist/notice-bar-DMpwLvRb.js +231 -0
  205. package/dist/notice-bar-DMpwLvRb.js.map +1 -0
  206. package/dist/notify/index.d.ts +1 -0
  207. package/dist/notify/index.js +251 -0
  208. package/dist/notify/index.js.map +1 -0
  209. package/dist/notify/notify.d.ts +123 -0
  210. package/dist/number-keyboard/index.d.ts +1 -0
  211. package/dist/number-keyboard/index.js +333 -0
  212. package/dist/number-keyboard/index.js.map +1 -0
  213. package/dist/number-keyboard/number-keyboard.d.ts +141 -0
  214. package/dist/page-indicator/index.d.ts +1 -0
  215. package/dist/page-indicator/index.js +138 -0
  216. package/dist/page-indicator/index.js.map +1 -0
  217. package/dist/page-indicator/page-indicator.d.ts +93 -0
  218. package/dist/pagination/index.d.ts +1 -0
  219. package/dist/pagination/index.js +198 -0
  220. package/dist/pagination/index.js.map +1 -0
  221. package/dist/pagination/pagination.d.ts +125 -0
  222. package/dist/password-input/index.d.ts +1 -0
  223. package/dist/password-input/index.js +317 -0
  224. package/dist/password-input/index.js.map +1 -0
  225. package/dist/password-input/password-input.d.ts +144 -0
  226. package/dist/picker/index.d.ts +8 -0
  227. package/dist/picker/index.js +2 -0
  228. package/dist/picker/picker-machine.d.ts +80 -0
  229. package/dist/picker/picker.d.ts +121 -0
  230. package/dist/picker/platform.d.ts +84 -0
  231. package/dist/picker/selection-connect.d.ts +90 -0
  232. package/dist/picker/selection-model.d.ts +211 -0
  233. package/dist/picker-BykFntQN.js +1675 -0
  234. package/dist/picker-BykFntQN.js.map +1 -0
  235. package/dist/popover/index.d.ts +3 -0
  236. package/dist/popover/index.js +253 -0
  237. package/dist/popover/index.js.map +1 -0
  238. package/dist/popover/layer.d.ts +44 -0
  239. package/dist/popover/popover.d.ts +104 -0
  240. package/dist/popover/positioning.d.ts +132 -0
  241. package/dist/popup/index.d.ts +2 -0
  242. package/dist/popup/index.js +2 -0
  243. package/dist/popup/popup.d.ts +60 -0
  244. package/dist/popup-z5d8IYCt.js +576 -0
  245. package/dist/popup-z5d8IYCt.js.map +1 -0
  246. package/dist/portal-BHCNTWhg.js +78 -0
  247. package/dist/portal-BHCNTWhg.js.map +1 -0
  248. package/dist/portal.d.ts +61 -0
  249. package/dist/price/format.d.ts +19 -0
  250. package/dist/price/index.d.ts +1 -0
  251. package/dist/price/index.js +154 -0
  252. package/dist/price/index.js.map +1 -0
  253. package/dist/price/price.d.ts +88 -0
  254. package/dist/progress/index.d.ts +1 -0
  255. package/dist/progress/index.js +2 -0
  256. package/dist/progress/progress.d.ts +32 -0
  257. package/dist/progress-f3iYEfdA.js +37 -0
  258. package/dist/progress-f3iYEfdA.js.map +1 -0
  259. package/dist/pull-refresh/index.d.ts +1 -0
  260. package/dist/pull-refresh/index.js +414 -0
  261. package/dist/pull-refresh/index.js.map +1 -0
  262. package/dist/pull-refresh/pull-refresh.d.ts +118 -0
  263. package/dist/radio-group/index.d.ts +3 -0
  264. package/dist/radio-group/index.js +2 -0
  265. package/dist/radio-group/radio-group.d.ts +78 -0
  266. package/dist/radio-group-BOIMuqnS.js +230 -0
  267. package/dist/radio-group-BOIMuqnS.js.map +1 -0
  268. package/dist/rate/index.d.ts +1 -0
  269. package/dist/rate/index.js +2 -0
  270. package/dist/rate/rate-form.d.ts +28 -0
  271. package/dist/rate/rate.d.ts +144 -0
  272. package/dist/rate-5XsU2QkY.js +631 -0
  273. package/dist/rate-5XsU2QkY.js.map +1 -0
  274. package/dist/reorder/index.d.ts +1 -0
  275. package/dist/reorder/index.js +720 -0
  276. package/dist/reorder/index.js.map +1 -0
  277. package/dist/reorder/reorder.d.ts +190 -0
  278. package/dist/result/index.d.ts +1 -0
  279. package/dist/result/index.js +123 -0
  280. package/dist/result/index.js.map +1 -0
  281. package/dist/result/result.d.ts +88 -0
  282. package/dist/safe-area/index.d.ts +1 -0
  283. package/dist/safe-area/index.js +42 -0
  284. package/dist/safe-area/index.js.map +1 -0
  285. package/dist/safe-area/safe-area.d.ts +28 -0
  286. package/dist/search-bar/index.js +3 -1
  287. package/dist/search-bar/index.js.map +1 -1
  288. package/dist/search-bar/search-bar.d.ts +4 -0
  289. package/dist/segmented/index.d.ts +2 -0
  290. package/dist/segmented/index.js +2 -0
  291. package/dist/segmented/segmented.d.ts +127 -0
  292. package/dist/segmented-BaU38_L4.js +367 -0
  293. package/dist/segmented-BaU38_L4.js.map +1 -0
  294. package/dist/selection-form-BOM_odUk.js +88 -0
  295. package/dist/selection-form-BOM_odUk.js.map +1 -0
  296. package/dist/selection-form.d.ts +27 -0
  297. package/dist/selection-ivXqO1eu.js +55 -0
  298. package/dist/selection-ivXqO1eu.js.map +1 -0
  299. package/dist/selection.d.ts +29 -0
  300. package/dist/selector/choice-group.d.ts +114 -0
  301. package/dist/selector/index.d.ts +2 -0
  302. package/dist/selector/index.js +2 -0
  303. package/dist/selector/selector.d.ts +90 -0
  304. package/dist/selector-BU2MMJ4N.js +93 -0
  305. package/dist/selector-BU2MMJ4N.js.map +1 -0
  306. package/dist/share-sheet/index.d.ts +1 -0
  307. package/dist/share-sheet/index.js +138 -0
  308. package/dist/share-sheet/index.js.map +1 -0
  309. package/dist/share-sheet/share-sheet.d.ts +139 -0
  310. package/dist/skeleton/index.js +51 -2
  311. package/dist/skeleton/index.js.map +1 -1
  312. package/dist/skeleton/skeleton.d.ts +34 -3
  313. package/dist/slider/index.d.ts +1 -0
  314. package/dist/slider/index.js +482 -0
  315. package/dist/slider/index.js.map +1 -0
  316. package/dist/slider/slider.d.ts +174 -0
  317. package/dist/space/index.d.ts +1 -0
  318. package/dist/space/index.js +52 -0
  319. package/dist/space/index.js.map +1 -0
  320. package/dist/space/space.d.ts +46 -0
  321. package/dist/statistic/index.d.ts +1 -0
  322. package/dist/statistic/index.js +152 -0
  323. package/dist/statistic/index.js.map +1 -0
  324. package/dist/statistic/statistic.d.ts +101 -0
  325. package/dist/stepper/index.js +62 -3
  326. package/dist/stepper/index.js.map +1 -1
  327. package/dist/stepper/stepper.d.ts +44 -4
  328. package/dist/steps/index.d.ts +1 -0
  329. package/dist/steps/index.js +72 -0
  330. package/dist/steps/index.js.map +1 -0
  331. package/dist/steps/steps.d.ts +67 -0
  332. package/dist/sticky/index.d.ts +1 -0
  333. package/dist/sticky/index.js +145 -0
  334. package/dist/sticky/index.js.map +1 -0
  335. package/dist/sticky/sticky.d.ts +70 -0
  336. package/dist/swipe-action/index.d.ts +1 -0
  337. package/dist/swipe-action/index.js +417 -0
  338. package/dist/swipe-action/index.js.map +1 -0
  339. package/dist/swipe-action/swipe-action.d.ts +148 -0
  340. package/dist/swiper/gesture.d.ts +32 -0
  341. package/dist/swiper/index.d.ts +1 -0
  342. package/dist/swiper/index.js +2 -0
  343. package/dist/swiper/swiper.d.ts +177 -0
  344. package/dist/swiper-BKivDkHp.js +550 -0
  345. package/dist/swiper-BKivDkHp.js.map +1 -0
  346. package/dist/switch/index.js +135 -10
  347. package/dist/switch/index.js.map +1 -1
  348. package/dist/switch/switch.d.ts +93 -6
  349. package/dist/tabbar/index.js +46 -1
  350. package/dist/tabbar/index.js.map +1 -1
  351. package/dist/tabbar/tabbar.d.ts +50 -0
  352. package/dist/tabs/index.js +22 -1
  353. package/dist/tabs/index.js.map +1 -1
  354. package/dist/tabs/tabs.d.ts +12 -8
  355. package/dist/tag/index.js +123 -2
  356. package/dist/tag/index.js.map +1 -1
  357. package/dist/tag/tag.d.ts +67 -1
  358. package/dist/textarea/index.d.ts +2 -0
  359. package/dist/textarea/index.js +2 -242
  360. package/dist/textarea/platform.d.ts +22 -0
  361. package/dist/textarea/textarea.d.ts +165 -46
  362. package/dist/textarea-qbnruDUG.js +775 -0
  363. package/dist/textarea-qbnruDUG.js.map +1 -0
  364. package/dist/time-picker/index.d.ts +1 -0
  365. package/dist/time-picker/index.js +228 -0
  366. package/dist/time-picker/index.js.map +1 -0
  367. package/dist/time-picker/time-picker.d.ts +83 -0
  368. package/dist/timeline/index.d.ts +1 -0
  369. package/dist/timeline/index.js +131 -0
  370. package/dist/timeline/index.js.map +1 -0
  371. package/dist/timeline/timeline.d.ts +79 -0
  372. package/dist/toast/index.js +47 -4
  373. package/dist/toast/index.js.map +1 -1
  374. package/dist/toast/toast.d.ts +26 -3
  375. package/dist/top-bar/index.js +16 -2
  376. package/dist/top-bar/index.js.map +1 -1
  377. package/dist/top-bar/top-bar.d.ts +13 -2
  378. package/dist/tree-select/index.d.ts +1 -0
  379. package/dist/tree-select/index.js +512 -0
  380. package/dist/tree-select/index.js.map +1 -0
  381. package/dist/tree-select/tree-select.d.ts +215 -0
  382. package/dist/typography/index.d.ts +1 -0
  383. package/dist/typography/index.js +82 -0
  384. package/dist/typography/index.js.map +1 -0
  385. package/dist/typography/typography.d.ts +54 -0
  386. package/dist/upload/index.d.ts +1 -0
  387. package/dist/upload/index.js +458 -0
  388. package/dist/upload/index.js.map +1 -0
  389. package/dist/upload/upload.d.ts +172 -0
  390. package/dist/virtual-list/index.d.ts +1 -0
  391. package/dist/virtual-list/index.js +445 -0
  392. package/dist/virtual-list/index.js.map +1 -0
  393. package/dist/virtual-list/virtual-list.d.ts +160 -0
  394. package/dist/visual-manifest.d.ts +6 -0
  395. package/dist/watermark/index.d.ts +1 -0
  396. package/dist/watermark/index.js +260 -0
  397. package/dist/watermark/index.js.map +1 -0
  398. package/dist/watermark/watermark.d.ts +106 -0
  399. package/package.json +399 -50
  400. package/dist/empty/index.js.map +0 -1
  401. package/dist/icon/index.js.map +0 -1
  402. package/dist/textarea/index.js.map +0 -1
@@ -0,0 +1,720 @@
1
+ import { createMachine } from "@zag-js/core";
2
+ import { visuallyHiddenStyle } from "@zag-js/dom-query";
3
+ //#region src/reorder/reorder.ts
4
+ /** Stable DOM parts shared by every adapter. */
5
+ const REORDER_PARTS = [
6
+ "root",
7
+ "list",
8
+ "item",
9
+ "content",
10
+ "handle",
11
+ "instructions",
12
+ "status"
13
+ ];
14
+ /** What started the active drag. */
15
+ const REORDER_SOURCES = ["pointer", "keyboard"];
16
+ /** Pointer travel in CSS pixels before a press on a handle becomes a drag. */
17
+ const REORDER_DEFAULT_THRESHOLD = 8;
18
+ /** Band in CSS pixels at the block edges of the scroll container where a pointer drag auto-scrolls. */
19
+ const REORDER_AUTO_SCROLL_EDGE = 48;
20
+ /** Maximum auto-scroll step in CSS pixels per frame. */
21
+ const REORDER_AUTO_SCROLL_SPEED = 16;
22
+ /** Default texts. Templates replace {text}, {position} (1-based) and {count}. */
23
+ const REORDER_DEFAULT_TEXTS = {
24
+ label: "排序列表",
25
+ handleLabel: "拖动排序 {text}",
26
+ instructions: "按空格键或回车键拿起,按上下方向键移动,再按空格键或回车键放下,按 Esc 键取消。",
27
+ pickedText: "已拿起 {text},第 {position} 项,共 {count} 项",
28
+ movedText: "{text} 移到第 {position} 项,共 {count} 项",
29
+ droppedText: "已放下 {text},第 {position} 项,共 {count} 项",
30
+ rejectedText: "{text} 未移动,仍为第 {position} 项,共 {count} 项",
31
+ cancelledText: "已取消,{text} 回到第 {position} 项,共 {count} 项"
32
+ };
33
+ const text = (value, fallback) => typeof value === "string" && value.trim() ? value : fallback;
34
+ const clamp = (value, min, max) => Math.min(max, Math.max(min, value));
35
+ const finite = (value, fallback = 0) => typeof value === "number" && Number.isFinite(value) ? value : fallback;
36
+ const field = (item, name) => item !== null && typeof item === "object" ? item[name] : void 0;
37
+ const accessor = (value) => typeof value === "function" || typeof value === "string" && value.trim() ? value : void 0;
38
+ const primitive = (item) => typeof item === "string" || typeof item === "number";
39
+ const TEXT_NAMES = Object.keys(REORDER_DEFAULT_TEXTS);
40
+ function resolveReorderKey(item, index, itemKey) {
41
+ const raw = typeof itemKey === "function" ? itemKey(item, index) : typeof itemKey === "string" ? field(item, itemKey) : primitive(item) ? item : field(item, "key");
42
+ if (typeof raw === "string" && raw.length) return raw;
43
+ if (typeof raw === "number" && Number.isFinite(raw)) return String(raw);
44
+ throw new TypeError(`Reorder item ${index} requires a nonempty string or finite number key`);
45
+ }
46
+ function resolveReorderText(item, index, itemText) {
47
+ const raw = typeof itemText === "function" ? itemText(item, index) : typeof itemText === "string" ? field(item, itemText) : primitive(item) ? item : field(item, "text");
48
+ return typeof raw === "string" ? raw : typeof raw === "number" && Number.isFinite(raw) ? String(raw) : "";
49
+ }
50
+ function resolveReorderDisabled(item, index, itemDisabled) {
51
+ return (typeof itemDisabled === "function" ? itemDisabled(item, index) : field(item, typeof itemDisabled === "string" ? itemDisabled : "disabled")) === true;
52
+ }
53
+ /** Missing or duplicate keys throw: a silent fallback would break row identity. */
54
+ function resolveReorderState(props = {}) {
55
+ const items = Array.isArray(props.items) ? props.items : [], seen = /* @__PURE__ */ new Set(), entries = [];
56
+ const itemKey = accessor(props.itemKey), itemText = accessor(props.itemText), itemDisabled = accessor(props.itemDisabled);
57
+ items.forEach((item, index) => {
58
+ const key = resolveReorderKey(item, index, itemKey);
59
+ if (seen.has(key)) throw new TypeError(`Reorder item keys must be unique: ${key}`);
60
+ seen.add(key);
61
+ entries.push({
62
+ key,
63
+ index,
64
+ item,
65
+ text: resolveReorderText(item, index, itemText) || key,
66
+ disabled: resolveReorderDisabled(item, index, itemDisabled)
67
+ });
68
+ });
69
+ const threshold = finite(props.threshold, -1);
70
+ return {
71
+ entries,
72
+ keys: entries.map((entry) => entry.key),
73
+ disabled: !!props.disabled,
74
+ threshold: threshold >= 0 ? threshold : 8,
75
+ texts: Object.fromEntries(TEXT_NAMES.map((name) => [name, text(props[name], REORDER_DEFAULT_TEXTS[name])]))
76
+ };
77
+ }
78
+ /** Effective order: the known keys of `order` (first occurrence), then the remaining keys in items order. */
79
+ function resolveReorderOrder(keys, order) {
80
+ if (!Array.isArray(order)) return [...keys];
81
+ const known = new Set(keys), seen = /* @__PURE__ */ new Set(), result = [];
82
+ for (const key of order) if (typeof key === "string" && known.has(key) && !seen.has(key)) {
83
+ seen.add(key);
84
+ result.push(key);
85
+ }
86
+ for (const key of keys) if (!seen.has(key)) result.push(key);
87
+ return result;
88
+ }
89
+ /** Entries in the effective order, with `index` as the position in that order. */
90
+ function getReorderEntries(state, order) {
91
+ const byKey = new Map(state.entries.map((entry) => [entry.key, entry]));
92
+ return resolveReorderOrder(state.keys, order).map((key, index) => ({
93
+ ...byKey.get(key),
94
+ index
95
+ }));
96
+ }
97
+ /** Move one key; `to` is the final index (clamped). Never mutates the input. */
98
+ function moveReorderKeys(order, from, to) {
99
+ const next = [...order];
100
+ if (!Number.isInteger(from) || from < 0 || from >= next.length) return next;
101
+ const [key] = next.splice(from, 1);
102
+ next.splice(clamp(Math.round(finite(to, from)), 0, next.length), 0, key);
103
+ return next;
104
+ }
105
+ function formatReorderText(template, values) {
106
+ return template.replace(/\{(text|position|count)\}/g, (_match, name) => String(values[name]));
107
+ }
108
+ /** Distance the other items shift: the dragged item's block size plus the gap to its neighbour. */
109
+ function getReorderPitch(rects, from) {
110
+ const rect = rects[from];
111
+ if (!rect) return 0;
112
+ const next = rects[from + 1], previous = rects[from - 1];
113
+ const gap = next ? next.top - rect.bottom : previous ? rect.top - previous.bottom : 0;
114
+ return Math.max(0, rect.bottom - rect.top + Math.max(0, gap));
115
+ }
116
+ /** Keep the dragged item between the first item's top and the last item's bottom. */
117
+ function clampReorderOffset(rects, from, offset) {
118
+ const rect = rects[from], first = rects[0], last = rects[rects.length - 1];
119
+ if (!rect || !first || !last || !Number.isFinite(offset)) return 0;
120
+ return clamp(offset, Math.min(0, first.top - rect.top), Math.max(0, last.bottom - rect.bottom));
121
+ }
122
+ /** Final index of the dragged item: it passes another item once its centre crosses that item's centre. Rects are in DOM order. */
123
+ function getReorderTargetIndex(rects, from, offset) {
124
+ const rect = rects[from];
125
+ if (!rect || !Number.isFinite(offset)) return clamp(from, 0, Math.max(0, rects.length - 1));
126
+ const centre = (rect.top + rect.bottom) / 2 + offset, mid = (index) => (rects[index].top + rects[index].bottom) / 2;
127
+ let to = from;
128
+ while (to + 1 < rects.length && mid(to + 1) < centre) to += 1;
129
+ if (to === from) while (to > 0 && mid(to - 1) > centre) to -= 1;
130
+ return to;
131
+ }
132
+ /** Offset that places the dragged item exactly in slot `to` (keyboard moves). */
133
+ function getReorderSlotOffset(rects, from, to) {
134
+ const rect = rects[from], target = rects[to];
135
+ if (!rect || !target) return 0;
136
+ return to > from ? target.bottom - rect.bottom : target.top - rect.top;
137
+ }
138
+ /** Preview shift of a non-dragged item at `index` while the dragged item targets `to`. */
139
+ function getReorderShift(index, drag) {
140
+ if (index > drag.from && index <= drag.to) return -drag.pitch;
141
+ if (index < drag.from && index >= drag.to) return drag.pitch;
142
+ return 0;
143
+ }
144
+ /** Keyboard target while picked up: ArrowUp/ArrowDown step, Home/End jump, clamped to [0, count - 1]; null for other keys. */
145
+ function getReorderKeyTarget(key, to, count) {
146
+ const next = key === "ArrowUp" ? to - 1 : key === "ArrowDown" ? to + 1 : key === "Home" ? 0 : key === "End" ? count - 1 : null;
147
+ return next === null ? null : clamp(next, 0, Math.max(0, count - 1));
148
+ }
149
+ /** Auto-scroll step for a pointer at `y` within the viewport band [top, bottom]; negative scrolls up, 0 outside the edge bands. */
150
+ function getReorderAutoScroll(y, top, bottom, edge = 48, speed = 16) {
151
+ const band = Math.min(edge, (bottom - top) / 2);
152
+ if (!Number.isFinite(y) || !(band > 0)) return 0;
153
+ if (y < top + band) return -Math.ceil(speed * Math.min(1, (top + band - y) / band));
154
+ if (y > bottom - band) return Math.ceil(speed * Math.min(1, (y - bottom + band) / band));
155
+ return 0;
156
+ }
157
+ function createReorderProps(props = {}) {
158
+ if (props.id !== void 0 && (typeof props.id !== "string" || !props.id.trim())) throw new TypeError("Reorder requires a nonempty instance id when provided");
159
+ return { ...props };
160
+ }
161
+ const PROP_NAMES = [
162
+ "items",
163
+ "itemKey",
164
+ "itemText",
165
+ "itemDisabled",
166
+ "disabled",
167
+ "threshold",
168
+ ...TEXT_NAMES
169
+ ];
170
+ const stateOf = (prop) => resolveReorderState(Object.fromEntries(PROP_NAMES.map((name) => [name, prop(name)])));
171
+ const keysOf = (value) => Array.isArray(value) ? value.filter((key) => typeof key === "string") : [];
172
+ const sameKeys = (a, b) => !!a && !!b && a.length === b.length && a.every((key, index) => key === b[index]);
173
+ /** Live state: props re-resolved on every read; the order reconciled against the current items. */
174
+ function live(prop, context) {
175
+ const state = stateOf(prop), entries = getReorderEntries(state, context.get("value")), order = entries.map((entry) => entry.key);
176
+ return {
177
+ state,
178
+ entries,
179
+ order,
180
+ signature: order.join("\0")
181
+ };
182
+ }
183
+ const ids = (scope) => {
184
+ const base = `reorder:${scope.id}`;
185
+ return {
186
+ root: base,
187
+ list: `${base}:list`,
188
+ instructions: `${base}:instructions`,
189
+ status: `${base}:status`,
190
+ item: (key) => `${base}:item:${encodeURIComponent(key)}`,
191
+ handle: (key) => `${base}:handle:${encodeURIComponent(key)}`
192
+ };
193
+ };
194
+ function announce(context, template, values) {
195
+ context.set("announcement", formatReorderText(template, {
196
+ text: values.text,
197
+ position: values.index + 1,
198
+ count: values.count
199
+ }));
200
+ }
201
+ function setDrag({ context, refs }, drag) {
202
+ refs.set("drag", drag);
203
+ context.set("drag", drag);
204
+ }
205
+ /** End the active drag without changing the order. */
206
+ function cancelDrag(params) {
207
+ const drag = params.refs.get("drag");
208
+ if (!drag) return;
209
+ setDrag(params, null);
210
+ params.refs.get("reset")?.();
211
+ announce(params.context, stateOf(params.prop).texts.cancelledText, {
212
+ text: drag.text,
213
+ index: drag.from,
214
+ count: drag.count
215
+ });
216
+ }
217
+ /** An order/data change, a disabled list or a disabled dragged item invalidates the measured drag: cancel it. */
218
+ function reconcileDrag(params) {
219
+ const drag = params.refs.get("drag");
220
+ if (!drag) return;
221
+ const now = live(params.prop, params.context), entry = now.entries[drag.from];
222
+ if (now.state.disabled || now.signature !== drag.signature || entry?.key !== drag.key || entry.disabled) cancelDrag(params);
223
+ }
224
+ /** The block-scrollable ancestor (the root included), or null for the page viewport. */
225
+ function scrollParent(root) {
226
+ const doc = root.ownerDocument, win = doc.defaultView;
227
+ for (let node = root; node && node !== doc.body && node !== doc.documentElement; node = node.parentElement) {
228
+ const overflow = win?.getComputedStyle(node).overflowY ?? "";
229
+ if ((overflow === "auto" || overflow === "scroll" || overflow === "overlay") && node.scrollHeight > node.clientHeight) return node;
230
+ }
231
+ return null;
232
+ }
233
+ /** Core owns pointer ownership/threshold/capture, insertion math, keyboard moves, announcements, proposals, focus retention and cleanup. */
234
+ const reorderMachine = createMachine({
235
+ props: ({ props }) => createReorderProps(props),
236
+ initialState: () => "ready",
237
+ states: { ready: {} },
238
+ context: ({ bindable, prop }) => ({
239
+ value: bindable(() => ({
240
+ defaultValue: resolveReorderOrder(stateOf(prop).keys, prop("defaultValue")),
241
+ value: prop("value") === void 0 ? void 0 : keysOf(prop("value")),
242
+ isEqual: sameKeys,
243
+ hash: (value) => value.join("\0")
244
+ })),
245
+ drag: bindable(() => ({ defaultValue: null })),
246
+ announcement: bindable(() => ({ defaultValue: "" }))
247
+ }),
248
+ refs: () => ({
249
+ drag: null,
250
+ pending: null,
251
+ reset: null,
252
+ settle: null,
253
+ restore: null
254
+ }),
255
+ watch({ track, prop, context, action }) {
256
+ track([() => live(prop, context).signature], () => action(["orderChange"]));
257
+ track([() => !!prop("disabled"), () => stateOf(prop).entries.map((entry) => entry.disabled ? 1 : 0).join("")], () => action(["reconcile"]));
258
+ },
259
+ on: {
260
+ "DRAG.START": { actions: ["start"] },
261
+ "DRAG.MOVE": { actions: ["move"] },
262
+ "DRAG.DROP": { actions: ["drop"] },
263
+ "DRAG.CANCEL": { actions: ["cancel"] },
264
+ "DROP.SETTLE": { actions: ["settle"] }
265
+ },
266
+ effects: ["trackInteraction"],
267
+ implementations: {
268
+ actions: {
269
+ start(params) {
270
+ const { event, prop, context, refs } = params;
271
+ if (event.type !== "DRAG.START" || refs.get("drag")) return;
272
+ const now = live(prop, context), entry = now.entries[event.from];
273
+ if (now.state.disabled || entry?.key !== event.key || entry.disabled) {
274
+ refs.get("reset")?.();
275
+ return;
276
+ }
277
+ refs.set("pending", null);
278
+ setDrag(params, {
279
+ key: entry.key,
280
+ text: entry.text,
281
+ from: entry.index,
282
+ to: entry.index,
283
+ count: now.order.length,
284
+ offset: 0,
285
+ pitch: Math.max(0, finite(event.pitch)),
286
+ source: event.source,
287
+ signature: now.signature
288
+ });
289
+ announce(context, now.state.texts.pickedText, {
290
+ text: entry.text,
291
+ index: entry.index,
292
+ count: now.order.length
293
+ });
294
+ },
295
+ move(params) {
296
+ const { event, prop, context, refs } = params, drag = refs.get("drag");
297
+ if (event.type !== "DRAG.MOVE" || !drag) return;
298
+ const to = clamp(Math.round(finite(event.to, drag.to)), 0, drag.count - 1), offset = finite(event.offset);
299
+ if (to === drag.to && offset === drag.offset) return;
300
+ setDrag(params, {
301
+ ...drag,
302
+ to,
303
+ offset
304
+ });
305
+ if (to !== drag.to) announce(context, stateOf(prop).texts.movedText, {
306
+ text: drag.text,
307
+ index: to,
308
+ count: drag.count
309
+ });
310
+ },
311
+ drop(params) {
312
+ const { prop, context, refs } = params, drag = refs.get("drag");
313
+ if (!drag) return;
314
+ const now = live(prop, context);
315
+ if (now.signature !== drag.signature) {
316
+ cancelDrag(params);
317
+ return;
318
+ }
319
+ setDrag(params, null);
320
+ refs.get("reset")?.();
321
+ if (drag.to === drag.from) {
322
+ announce(context, now.state.texts.droppedText, {
323
+ text: drag.text,
324
+ index: drag.from,
325
+ count: now.order.length
326
+ });
327
+ return;
328
+ }
329
+ const value = moveReorderKeys(now.order, drag.from, drag.to);
330
+ refs.set("pending", {
331
+ key: drag.key,
332
+ text: drag.text,
333
+ signature: now.signature
334
+ });
335
+ refs.get("settle")?.();
336
+ prop("onReorder")?.({
337
+ key: drag.key,
338
+ from: drag.from,
339
+ to: drag.to,
340
+ value: [...value]
341
+ });
342
+ context.set("value", value);
343
+ },
344
+ cancel(params) {
345
+ cancelDrag(params);
346
+ },
347
+ reconcile(params) {
348
+ reconcileDrag(params);
349
+ },
350
+ orderChange(params) {
351
+ const { prop, context, refs } = params;
352
+ reconcileDrag(params);
353
+ const pending = refs.get("pending"), now = live(prop, context);
354
+ if (pending && pending.signature !== now.signature) {
355
+ refs.set("pending", null);
356
+ const index = now.order.indexOf(pending.key);
357
+ if (index !== -1) announce(context, now.state.texts.droppedText, {
358
+ text: pending.text,
359
+ index,
360
+ count: now.order.length
361
+ });
362
+ }
363
+ refs.get("restore")?.();
364
+ },
365
+ settle({ prop, context, refs }) {
366
+ const pending = refs.get("pending"), now = live(prop, context);
367
+ if (pending && pending.signature === now.signature) announce(context, now.state.texts.rejectedText, {
368
+ text: pending.text,
369
+ index: now.order.indexOf(pending.key),
370
+ count: now.order.length
371
+ });
372
+ }
373
+ },
374
+ effects: { trackInteraction({ scope, prop, context, refs, send }) {
375
+ const id = ids(scope), root = scope.getById(id.root), doc = root?.ownerDocument, win = doc?.defaultView;
376
+ if (!root || !doc || !win) return;
377
+ let pointer = null, keyboard = null;
378
+ let scrollFrame = 0, focusKey = null, disposed = false;
379
+ const frames = /* @__PURE__ */ new Set();
380
+ const later = (run) => {
381
+ const handle = win.requestAnimationFrame(() => {
382
+ frames.delete(handle);
383
+ if (!disposed) run();
384
+ });
385
+ frames.add(handle);
386
+ };
387
+ const element = (kind, key) => scope.getById(id[kind](key));
388
+ /** The handle of this list that contains target; handles of nested lists are ignored. */
389
+ const handleAt = (target) => {
390
+ const found = target?.closest?.("[data-scope=\"reorder\"][data-part=\"handle\"]");
391
+ const key = found?.getAttribute("data-key");
392
+ return found && key != null && found.closest("[data-scope=\"reorder\"][data-part=\"root\"]") === root ? {
393
+ element: found,
394
+ key
395
+ } : null;
396
+ };
397
+ const startable = (key) => {
398
+ const now = live(prop, context), entry = now.entries.find((item) => item.key === key);
399
+ return now.state.disabled || !entry || entry.disabled ? null : {
400
+ now,
401
+ entry
402
+ };
403
+ };
404
+ const measure = (order) => order.map((key) => {
405
+ const rect = element("item", key)?.getBoundingClientRect();
406
+ return {
407
+ top: rect?.top ?? 0,
408
+ bottom: rect?.bottom ?? 0
409
+ };
410
+ });
411
+ const listRect = () => scope.getById(id.list)?.getBoundingClientRect();
412
+ const stopPointer = () => {
413
+ const gesture = pointer;
414
+ if (!gesture) return;
415
+ pointer = null;
416
+ doc.removeEventListener("pointermove", onMove, true);
417
+ doc.removeEventListener("pointerup", onUp, true);
418
+ doc.removeEventListener("pointercancel", onCancel, true);
419
+ doc.removeEventListener("lostpointercapture", onCancel, true);
420
+ doc.removeEventListener("scroll", onScroll, true);
421
+ if (scrollFrame) {
422
+ win.cancelAnimationFrame(scrollFrame);
423
+ scrollFrame = 0;
424
+ }
425
+ try {
426
+ if (gesture.handle.hasPointerCapture?.(gesture.pointerId)) gesture.handle.releasePointerCapture(gesture.pointerId);
427
+ } catch {}
428
+ };
429
+ const update = (gesture) => {
430
+ const raw = gesture.y - gesture.startY + gesture.listTop - (listRect()?.top ?? gesture.listTop);
431
+ const offset = clampReorderOffset(gesture.rects, gesture.from, raw);
432
+ const to = getReorderTargetIndex(gesture.rects, gesture.from, raw);
433
+ if (to === gesture.to && offset === gesture.offset) return;
434
+ gesture.to = to;
435
+ gesture.offset = offset;
436
+ send({
437
+ type: "DRAG.MOVE",
438
+ to,
439
+ offset
440
+ });
441
+ };
442
+ const scrollStep = (gesture) => {
443
+ const scroller = gesture.scroller, rect = scroller?.getBoundingClientRect(), top = rect ? rect.top + scroller.clientTop : 0;
444
+ const bottom = scroller ? top + scroller.clientHeight : win.innerHeight, list = listRect(), step = getReorderAutoScroll(gesture.y, top, bottom);
445
+ return !list || step < 0 && list.top >= top || step > 0 && list.bottom <= bottom ? 0 : step;
446
+ };
447
+ const autoScroll = () => {
448
+ scrollFrame = 0;
449
+ const gesture = pointer, step = gesture?.active ? scrollStep(gesture) : 0;
450
+ if (!gesture || !step) return;
451
+ const position = () => gesture.scroller ? gesture.scroller.scrollTop : win.scrollY, before = position();
452
+ if (gesture.scroller) gesture.scroller.scrollTop = before + step;
453
+ else win.scrollBy(0, step);
454
+ if (position() === before) return;
455
+ update(gesture);
456
+ scrollFrame = win.requestAnimationFrame(autoScroll);
457
+ };
458
+ const onDown = (event) => {
459
+ if (pointer || keyboard || event.isPrimary === false || event.button !== 0) return;
460
+ const hit = handleAt(event.target), found = hit && startable(hit.key);
461
+ if (!hit || !found) return;
462
+ event.preventDefault();
463
+ pointer = {
464
+ pointerId: event.pointerId,
465
+ key: found.entry.key,
466
+ from: found.entry.index,
467
+ to: found.entry.index,
468
+ offset: 0,
469
+ startX: event.clientX,
470
+ startY: event.clientY,
471
+ y: event.clientY,
472
+ active: false,
473
+ handle: hit.element,
474
+ rects: [],
475
+ listTop: 0,
476
+ scroller: null
477
+ };
478
+ try {
479
+ hit.element.setPointerCapture?.(event.pointerId);
480
+ } catch {}
481
+ doc.addEventListener("pointermove", onMove, true);
482
+ doc.addEventListener("pointerup", onUp, true);
483
+ doc.addEventListener("pointercancel", onCancel, true);
484
+ doc.addEventListener("lostpointercapture", onCancel, true);
485
+ doc.addEventListener("scroll", onScroll, true);
486
+ };
487
+ const onMove = (event) => {
488
+ const gesture = pointer;
489
+ if (!gesture || event.pointerId !== gesture.pointerId) return;
490
+ gesture.y = event.clientY;
491
+ if (!gesture.active) {
492
+ const found = startable(gesture.key);
493
+ if (Math.hypot(event.clientX - gesture.startX, event.clientY - gesture.startY) < (found?.now.state.threshold ?? 0)) return;
494
+ if (!found || keyboard) {
495
+ stopPointer();
496
+ return;
497
+ }
498
+ gesture.active = true;
499
+ gesture.from = gesture.to = found.entry.index;
500
+ gesture.rects = measure(found.now.order);
501
+ gesture.listTop = listRect()?.top ?? 0;
502
+ gesture.scroller = scrollParent(root);
503
+ send({
504
+ type: "DRAG.START",
505
+ key: gesture.key,
506
+ from: gesture.from,
507
+ source: "pointer",
508
+ pitch: getReorderPitch(gesture.rects, gesture.from)
509
+ });
510
+ }
511
+ if (event.cancelable) event.preventDefault();
512
+ update(gesture);
513
+ if (!scrollFrame && scrollStep(gesture)) scrollFrame = win.requestAnimationFrame(autoScroll);
514
+ };
515
+ const onUp = (event) => {
516
+ const gesture = pointer;
517
+ if (!gesture || event.pointerId !== gesture.pointerId) return;
518
+ if (gesture.active) {
519
+ gesture.y = event.clientY;
520
+ update(gesture);
521
+ }
522
+ stopPointer();
523
+ if (gesture.active) send({ type: "DRAG.DROP" });
524
+ };
525
+ const onCancel = (event) => {
526
+ const gesture = pointer;
527
+ if (!gesture || event.pointerId !== gesture.pointerId) return;
528
+ stopPointer();
529
+ if (gesture.active) send({ type: "DRAG.CANCEL" });
530
+ };
531
+ const onScroll = () => {
532
+ if (pointer?.active) update(pointer);
533
+ };
534
+ const onEscape = (event) => {
535
+ if (event.defaultPrevented || event.key !== "Escape" || !pointer?.active) return;
536
+ event.preventDefault();
537
+ stopPointer();
538
+ send({ type: "DRAG.CANCEL" });
539
+ };
540
+ const onKeyDown = (event) => {
541
+ if (event.defaultPrevented || event.altKey || event.ctrlKey || event.metaKey || pointer?.active) return;
542
+ const hit = handleAt(event.target), toggle = event.key === " " || event.key === "Enter";
543
+ if (!hit) return;
544
+ if (!keyboard) {
545
+ const found = toggle && !event.repeat && !pointer ? startable(hit.key) : null;
546
+ if (!found) return;
547
+ event.preventDefault();
548
+ focusKey = null;
549
+ keyboard = {
550
+ key: found.entry.key,
551
+ from: found.entry.index,
552
+ to: found.entry.index,
553
+ rects: measure(found.now.order)
554
+ };
555
+ send({
556
+ type: "DRAG.START",
557
+ key: keyboard.key,
558
+ from: keyboard.from,
559
+ source: "keyboard",
560
+ pitch: getReorderPitch(keyboard.rects, keyboard.from)
561
+ });
562
+ return;
563
+ }
564
+ if (hit.key !== keyboard.key) return;
565
+ if (toggle || event.key === "Escape") {
566
+ event.preventDefault();
567
+ if (toggle && event.repeat) return;
568
+ keyboard = null;
569
+ send({ type: toggle ? "DRAG.DROP" : "DRAG.CANCEL" });
570
+ return;
571
+ }
572
+ const to = getReorderKeyTarget(event.key, keyboard.to, keyboard.rects.length);
573
+ if (to === null) return;
574
+ event.preventDefault();
575
+ if (to === keyboard.to) return;
576
+ keyboard.to = to;
577
+ send({
578
+ type: "DRAG.MOVE",
579
+ to,
580
+ offset: getReorderSlotOffset(keyboard.rects, keyboard.from, to)
581
+ });
582
+ const key = keyboard.key;
583
+ later(() => element("item", key)?.scrollIntoView?.({ block: "nearest" }));
584
+ };
585
+ const onFocusOut = (event) => {
586
+ if (keyboard && handleAt(event.target)?.key === keyboard.key) {
587
+ keyboard = null;
588
+ send({ type: "DRAG.CANCEL" });
589
+ }
590
+ };
591
+ const onFocusIn = (event) => {
592
+ if (focusKey && handleAt(event.target)?.key !== focusKey) focusKey = null;
593
+ };
594
+ refs.set("reset", () => {
595
+ stopPointer();
596
+ keyboard = null;
597
+ });
598
+ refs.set("settle", () => {
599
+ const active = doc.activeElement;
600
+ focusKey = active && root.contains(active) ? handleAt(active)?.key ?? null : null;
601
+ later(() => send({ type: "DROP.SETTLE" }));
602
+ });
603
+ refs.set("restore", () => later(() => {
604
+ const active = doc.activeElement, key = focusKey;
605
+ if (!key || active && active !== doc.body) return;
606
+ element("handle", key)?.focus({ preventScroll: true });
607
+ element("item", key)?.scrollIntoView?.({ block: "nearest" });
608
+ }));
609
+ root.addEventListener("pointerdown", onDown);
610
+ root.addEventListener("keydown", onKeyDown);
611
+ root.addEventListener("focusout", onFocusOut);
612
+ doc.addEventListener("keydown", onEscape, true);
613
+ doc.addEventListener("focusin", onFocusIn);
614
+ return () => {
615
+ disposed = true;
616
+ stopPointer();
617
+ keyboard = null;
618
+ focusKey = null;
619
+ for (const handle of frames) win.cancelAnimationFrame(handle);
620
+ frames.clear();
621
+ refs.set("reset", null);
622
+ refs.set("settle", null);
623
+ refs.set("restore", null);
624
+ refs.set("drag", null);
625
+ refs.set("pending", null);
626
+ root.removeEventListener("pointerdown", onDown);
627
+ root.removeEventListener("keydown", onKeyDown);
628
+ root.removeEventListener("focusout", onFocusOut);
629
+ doc.removeEventListener("keydown", onEscape, true);
630
+ doc.removeEventListener("focusin", onFocusIn);
631
+ };
632
+ } }
633
+ }
634
+ });
635
+ function connectReorder(service, normalize) {
636
+ const now = live(service.prop, service.context), id = ids(service.scope), { texts, disabled } = now.state, count = now.order.length;
637
+ const raw = service.context.get("drag");
638
+ const drag = raw && raw.signature === now.signature && now.order[raw.from] === raw.key ? raw : null;
639
+ const part = (name) => ({
640
+ "data-scope": "reorder",
641
+ "data-part": name
642
+ });
643
+ const shiftOf = (entry) => !drag ? 0 : entry.key === drag.key ? drag.offset : getReorderShift(entry.index, drag);
644
+ return {
645
+ items: now.entries,
646
+ value: now.order,
647
+ count,
648
+ disabled,
649
+ dragging: !!drag,
650
+ activeKey: drag?.key ?? null,
651
+ source: drag?.source ?? null,
652
+ label: texts.label,
653
+ instructions: texts.instructions,
654
+ announcement: service.context.get("announcement"),
655
+ getRootProps: () => normalize.element({
656
+ ...part("root"),
657
+ id: id.root,
658
+ role: "group",
659
+ "aria-label": texts.label,
660
+ "data-disabled": disabled ? "true" : void 0,
661
+ "data-dragging": drag ? "true" : void 0,
662
+ "data-source": drag?.source
663
+ }),
664
+ getListProps: () => normalize.element({
665
+ ...part("list"),
666
+ id: id.list,
667
+ role: "list"
668
+ }),
669
+ getItemProps: (entry) => {
670
+ const active = drag?.key === entry.key, shift = shiftOf(entry);
671
+ return normalize.element({
672
+ ...part("item"),
673
+ id: id.item(entry.key),
674
+ role: "listitem",
675
+ "data-key": entry.key,
676
+ "data-index": entry.index,
677
+ "data-disabled": entry.disabled ? "true" : void 0,
678
+ "data-dragging": active ? "true" : void 0,
679
+ "data-shifted": !active && shift ? "true" : void 0,
680
+ style: shift ? { transform: `translateY(${shift}px)` } : void 0
681
+ });
682
+ },
683
+ getContentProps: (entry) => normalize.element({
684
+ ...part("content"),
685
+ "data-key": entry.key
686
+ }),
687
+ getHandleProps: (entry) => normalize.button({
688
+ ...part("handle"),
689
+ id: id.handle(entry.key),
690
+ type: "button",
691
+ "data-key": entry.key,
692
+ disabled: disabled || entry.disabled,
693
+ "aria-label": formatReorderText(texts.handleLabel, {
694
+ text: entry.text,
695
+ position: entry.index + 1,
696
+ count
697
+ }),
698
+ "aria-describedby": id.instructions,
699
+ "aria-pressed": drag?.key === entry.key ? "true" : void 0,
700
+ "data-dragging": drag?.key === entry.key ? "true" : void 0
701
+ }),
702
+ getInstructionsProps: () => normalize.element({
703
+ ...part("instructions"),
704
+ id: id.instructions,
705
+ style: visuallyHiddenStyle
706
+ }),
707
+ getStatusProps: () => normalize.element({
708
+ ...part("status"),
709
+ id: id.status,
710
+ role: "status",
711
+ "aria-live": "assertive",
712
+ "aria-atomic": "true",
713
+ style: visuallyHiddenStyle
714
+ })
715
+ };
716
+ }
717
+ //#endregion
718
+ export { REORDER_AUTO_SCROLL_EDGE, REORDER_AUTO_SCROLL_SPEED, REORDER_DEFAULT_TEXTS, REORDER_DEFAULT_THRESHOLD, REORDER_PARTS, REORDER_SOURCES, clampReorderOffset, connectReorder, createReorderProps, formatReorderText, getReorderAutoScroll, getReorderEntries, getReorderKeyTarget, getReorderPitch, getReorderShift, getReorderSlotOffset, getReorderTargetIndex, moveReorderKeys, reorderMachine, resolveReorderDisabled, resolveReorderKey, resolveReorderOrder, resolveReorderState, resolveReorderText };
719
+
720
+ //# sourceMappingURL=index.js.map