@qw-ui/core 0.3.0-next.4 → 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 (415) 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 +85 -0
  26. package/dist/badge/index.d.ts +1 -0
  27. package/dist/badge/index.js +88 -0
  28. package/dist/badge/index.js.map +1 -0
  29. package/dist/button/button.d.ts +13 -0
  30. package/dist/button/index.js +3 -5
  31. package/dist/button/index.js.map +1 -1
  32. package/dist/calendar/calendar.d.ts +100 -0
  33. package/dist/calendar/index.d.ts +1 -0
  34. package/dist/calendar/index.js +2 -0
  35. package/dist/calendar-CmpK3stz.js +363 -0
  36. package/dist/calendar-CmpK3stz.js.map +1 -0
  37. package/dist/card/card.d.ts +68 -0
  38. package/dist/card/index.d.ts +2 -0
  39. package/dist/card/index.js +2 -0
  40. package/dist/card-DRtWa6Cr.js +107 -0
  41. package/dist/card-DRtWa6Cr.js.map +1 -0
  42. package/dist/cascader/cascader.d.ts +115 -0
  43. package/dist/cascader/index.d.ts +1 -0
  44. package/dist/cascader/index.js +2 -0
  45. package/dist/cascader-D-xMjs7P.js +333 -0
  46. package/dist/cascader-D-xMjs7P.js.map +1 -0
  47. package/dist/cell/cell.d.ts +41 -0
  48. package/dist/cell/index.d.ts +1 -0
  49. package/dist/cell/index.js +43 -0
  50. package/dist/cell/index.js.map +1 -0
  51. package/dist/check-list/check-list.d.ts +78 -0
  52. package/dist/check-list/index.d.ts +2 -0
  53. package/dist/check-list/index.js +2 -0
  54. package/dist/check-list-BvZHQt5w.js +60 -0
  55. package/dist/check-list-BvZHQt5w.js.map +1 -0
  56. package/dist/checkbox/checkbox.d.ts +59 -0
  57. package/dist/checkbox/index.d.ts +2 -0
  58. package/dist/checkbox/index.js +2 -0
  59. package/dist/checkbox-BlndJrz5.js +127 -0
  60. package/dist/checkbox-BlndJrz5.js.map +1 -0
  61. package/dist/checkbox-group/checkbox-group.d.ts +86 -0
  62. package/dist/checkbox-group/index.d.ts +3 -0
  63. package/dist/checkbox-group/index.js +2 -0
  64. package/dist/checkbox-group-gGfsTv-e.js +223 -0
  65. package/dist/checkbox-group-gGfsTv-e.js.map +1 -0
  66. package/dist/choice-group-C4c9m0qe.js +373 -0
  67. package/dist/choice-group-C4c9m0qe.js.map +1 -0
  68. package/dist/circle/circle.d.ts +97 -0
  69. package/dist/circle/index.d.ts +1 -0
  70. package/dist/circle/index.js +119 -0
  71. package/dist/circle/index.js.map +1 -0
  72. package/dist/collapse/collapse.d.ts +98 -0
  73. package/dist/collapse/index.d.ts +2 -0
  74. package/dist/collapse/index.js +2 -0
  75. package/dist/collapse-B969h7-H.js +226 -0
  76. package/dist/collapse-B969h7-H.js.map +1 -0
  77. package/dist/countdown/countdown.d.ts +114 -0
  78. package/dist/countdown/index.d.ts +1 -0
  79. package/dist/countdown/index.js +309 -0
  80. package/dist/countdown/index.js.map +1 -0
  81. package/dist/date-picker/date-picker.d.ts +168 -0
  82. package/dist/date-picker/index.d.ts +1 -0
  83. package/dist/date-picker/index.js +401 -0
  84. package/dist/date-picker/index.js.map +1 -0
  85. package/dist/descriptions/descriptions.d.ts +69 -0
  86. package/dist/descriptions/index.d.ts +1 -0
  87. package/dist/descriptions/index.js +86 -0
  88. package/dist/descriptions/index.js.map +1 -0
  89. package/dist/dialog/dialog.d.ts +61 -43
  90. package/dist/dialog/index.js +73 -19
  91. package/dist/dialog/index.js.map +1 -1
  92. package/dist/divider/divider.d.ts +18 -2
  93. package/dist/divider/index.js +20 -2
  94. package/dist/divider/index.js.map +1 -1
  95. package/dist/dropdown/dropdown.d.ts +172 -0
  96. package/dist/dropdown/index.d.ts +2 -0
  97. package/dist/dropdown/index.js +467 -0
  98. package/dist/dropdown/index.js.map +1 -0
  99. package/dist/ellipsis/ellipsis-layout.d.ts +34 -0
  100. package/dist/ellipsis/ellipsis.d.ts +88 -0
  101. package/dist/ellipsis/index.d.ts +2 -0
  102. package/dist/ellipsis/index.js +320 -0
  103. package/dist/ellipsis/index.js.map +1 -0
  104. package/dist/empty/empty-illustration.d.ts +3 -0
  105. package/dist/empty/empty.d.ts +43 -1
  106. package/dist/empty/index.js +2 -21
  107. package/dist/empty-CAgyvhUI.js +166 -0
  108. package/dist/empty-CAgyvhUI.js.map +1 -0
  109. package/dist/field/field.d.ts +95 -0
  110. package/dist/field/index.d.ts +2 -0
  111. package/dist/field/index.js +2 -0
  112. package/dist/field-DMHGIMZF.js +241 -0
  113. package/dist/field-DMHGIMZF.js.map +1 -0
  114. package/dist/floating-bubble/floating-bubble.d.ts +116 -0
  115. package/dist/floating-bubble/index.d.ts +1 -0
  116. package/dist/floating-bubble/index.js +333 -0
  117. package/dist/floating-bubble/index.js.map +1 -0
  118. package/dist/floating-panel/floating-panel.d.ts +80 -0
  119. package/dist/floating-panel/index.d.ts +2 -0
  120. package/dist/floating-panel/index.js +2 -0
  121. package/dist/floating-panel-Cbm5njBJ.js +363 -0
  122. package/dist/floating-panel-Cbm5njBJ.js.map +1 -0
  123. package/dist/footer/footer.d.ts +94 -0
  124. package/dist/footer/index.d.ts +1 -0
  125. package/dist/footer/index.js +154 -0
  126. package/dist/footer/index.js.map +1 -0
  127. package/dist/form/connect.d.ts +6 -0
  128. package/dist/form/form.d.ts +100 -0
  129. package/dist/form/ids.d.ts +14 -0
  130. package/dist/form/index.d.ts +13 -0
  131. package/dist/form/index.js +3 -0
  132. package/dist/form/methods.d.ts +5 -0
  133. package/dist/form/model.d.ts +24 -0
  134. package/dist/form/native.d.ts +25 -0
  135. package/dist/form/rules.d.ts +40 -0
  136. package/dist/form/ssr.d.ts +7 -0
  137. package/dist/form/types.d.ts +150 -0
  138. package/dist/form-BAGkIEMY.js +1354 -0
  139. package/dist/form-BAGkIEMY.js.map +1 -0
  140. package/dist/format-BDUY0C_c.js +89 -0
  141. package/dist/format-BDUY0C_c.js.map +1 -0
  142. package/dist/gesture-_SRHIvBm.js +30 -0
  143. package/dist/gesture-_SRHIvBm.js.map +1 -0
  144. package/dist/grid/grid-item.d.ts +22 -0
  145. package/dist/grid/grid.d.ts +42 -0
  146. package/dist/grid/index.d.ts +2 -0
  147. package/dist/grid/index.js +73 -0
  148. package/dist/grid/index.js.map +1 -0
  149. package/dist/icon/icon.d.ts +37 -1
  150. package/dist/icon/identity.d.ts +3 -0
  151. package/dist/icon/index.js +2 -20
  152. package/dist/icon-Cgdbnk1u.js +77 -0
  153. package/dist/icon-Cgdbnk1u.js.map +1 -0
  154. package/dist/image/image-load.d.ts +24 -0
  155. package/dist/image/image.d.ts +45 -8
  156. package/dist/image/index.d.ts +1 -0
  157. package/dist/image/index.js +116 -14
  158. package/dist/image/index.js.map +1 -1
  159. package/dist/image-preview/image-preview.d.ts +124 -0
  160. package/dist/image-preview/index.d.ts +1 -0
  161. package/dist/image-preview/index.js +450 -0
  162. package/dist/image-preview/index.js.map +1 -0
  163. package/dist/index-bar/index-bar.d.ts +121 -0
  164. package/dist/index-bar/index.d.ts +1 -0
  165. package/dist/index-bar/index.js +386 -0
  166. package/dist/index-bar/index.js.map +1 -0
  167. package/dist/index.d.ts +115 -10
  168. package/dist/index.js +151 -11
  169. package/dist/index.js.map +1 -0
  170. package/dist/infinite-scroll/index.d.ts +1 -0
  171. package/dist/infinite-scroll/index.js +248 -0
  172. package/dist/infinite-scroll/index.js.map +1 -0
  173. package/dist/infinite-scroll/infinite-scroll.d.ts +95 -0
  174. package/dist/input/index.js +181 -22
  175. package/dist/input/index.js.map +1 -1
  176. package/dist/input/input.d.ts +44 -1
  177. package/dist/layer-IpFrl5--.js +414 -0
  178. package/dist/layer-IpFrl5--.js.map +1 -0
  179. package/dist/layout-BRSqi4AQ.js +43 -0
  180. package/dist/layout-BRSqi4AQ.js.map +1 -0
  181. package/dist/layout.d.ts +13 -0
  182. package/dist/list/index.d.ts +2 -0
  183. package/dist/list/index.js +2 -0
  184. package/dist/list/list.d.ts +30 -0
  185. package/dist/list-6-iz-Irh.js +28 -0
  186. package/dist/list-6-iz-Irh.js.map +1 -0
  187. package/dist/loading/index.js +45 -2
  188. package/dist/loading/index.js.map +1 -1
  189. package/dist/loading/loading.d.ts +45 -2
  190. package/dist/modal-dialog-machine-CF9_z3Dm.js +487 -0
  191. package/dist/modal-dialog-machine-CF9_z3Dm.js.map +1 -0
  192. package/dist/modal-dialog-machine.d.ts +21 -0
  193. package/dist/modal-dismissable-lifetime.d.ts +21 -0
  194. package/dist/modal-registry.d.ts +24 -0
  195. package/dist/modal-render-hydration.d.ts +35 -0
  196. package/dist/modal-render-runtime.d.ts +19 -0
  197. package/dist/modal-render-scope.d.ts +63 -0
  198. package/dist/nav-bar/index.d.ts +1 -0
  199. package/dist/nav-bar/index.js +115 -0
  200. package/dist/nav-bar/index.js.map +1 -0
  201. package/dist/nav-bar/nav-bar.d.ts +76 -0
  202. package/dist/notice-bar/index.d.ts +2 -0
  203. package/dist/notice-bar/index.js +2 -0
  204. package/dist/notice-bar/notice-bar.d.ts +103 -0
  205. package/dist/notice-bar-DMpwLvRb.js +231 -0
  206. package/dist/notice-bar-DMpwLvRb.js.map +1 -0
  207. package/dist/notify/index.d.ts +1 -0
  208. package/dist/notify/index.js +251 -0
  209. package/dist/notify/index.js.map +1 -0
  210. package/dist/notify/notify.d.ts +123 -0
  211. package/dist/number-keyboard/index.d.ts +1 -0
  212. package/dist/number-keyboard/index.js +333 -0
  213. package/dist/number-keyboard/index.js.map +1 -0
  214. package/dist/number-keyboard/number-keyboard.d.ts +141 -0
  215. package/dist/overlay-panel/index.d.ts +2 -0
  216. package/dist/overlay-panel/index.js +2 -0
  217. package/dist/overlay-panel/overlay-panel.d.ts +20 -0
  218. package/dist/overlay-panel-Z_qdKeBj.js +26 -0
  219. package/dist/overlay-panel-Z_qdKeBj.js.map +1 -0
  220. package/dist/page-indicator/index.d.ts +1 -0
  221. package/dist/page-indicator/index.js +138 -0
  222. package/dist/page-indicator/index.js.map +1 -0
  223. package/dist/page-indicator/page-indicator.d.ts +93 -0
  224. package/dist/pagination/index.d.ts +1 -0
  225. package/dist/pagination/index.js +198 -0
  226. package/dist/pagination/index.js.map +1 -0
  227. package/dist/pagination/pagination.d.ts +125 -0
  228. package/dist/password-input/index.d.ts +1 -0
  229. package/dist/password-input/index.js +317 -0
  230. package/dist/password-input/index.js.map +1 -0
  231. package/dist/password-input/password-input.d.ts +144 -0
  232. package/dist/picker/index.d.ts +8 -0
  233. package/dist/picker/index.js +2 -0
  234. package/dist/picker/picker-machine.d.ts +80 -0
  235. package/dist/picker/picker.d.ts +121 -0
  236. package/dist/picker/platform.d.ts +84 -0
  237. package/dist/picker/selection-connect.d.ts +90 -0
  238. package/dist/picker/selection-model.d.ts +211 -0
  239. package/dist/picker-BykFntQN.js +1675 -0
  240. package/dist/picker-BykFntQN.js.map +1 -0
  241. package/dist/popover/index.d.ts +3 -0
  242. package/dist/popover/index.js +253 -0
  243. package/dist/popover/index.js.map +1 -0
  244. package/dist/popover/layer.d.ts +44 -0
  245. package/dist/popover/popover.d.ts +104 -0
  246. package/dist/popover/positioning.d.ts +132 -0
  247. package/dist/popup/index.d.ts +2 -0
  248. package/dist/popup/index.js +2 -0
  249. package/dist/popup/popup.d.ts +60 -0
  250. package/dist/popup-z5d8IYCt.js +576 -0
  251. package/dist/popup-z5d8IYCt.js.map +1 -0
  252. package/dist/portal-BHCNTWhg.js +78 -0
  253. package/dist/portal-BHCNTWhg.js.map +1 -0
  254. package/dist/portal.d.ts +61 -0
  255. package/dist/price/format.d.ts +19 -0
  256. package/dist/price/index.d.ts +1 -0
  257. package/dist/price/index.js +154 -0
  258. package/dist/price/index.js.map +1 -0
  259. package/dist/price/price.d.ts +88 -0
  260. package/dist/progress/index.d.ts +1 -0
  261. package/dist/progress/index.js +2 -0
  262. package/dist/progress/progress.d.ts +32 -0
  263. package/dist/progress-f3iYEfdA.js +37 -0
  264. package/dist/progress-f3iYEfdA.js.map +1 -0
  265. package/dist/pull-refresh/index.d.ts +1 -0
  266. package/dist/pull-refresh/index.js +414 -0
  267. package/dist/pull-refresh/index.js.map +1 -0
  268. package/dist/pull-refresh/pull-refresh.d.ts +118 -0
  269. package/dist/radio-group/index.d.ts +3 -0
  270. package/dist/radio-group/index.js +2 -0
  271. package/dist/radio-group/radio-group.d.ts +78 -0
  272. package/dist/radio-group-BOIMuqnS.js +230 -0
  273. package/dist/radio-group-BOIMuqnS.js.map +1 -0
  274. package/dist/rate/index.d.ts +1 -0
  275. package/dist/rate/index.js +2 -0
  276. package/dist/rate/rate-form.d.ts +28 -0
  277. package/dist/rate/rate.d.ts +144 -0
  278. package/dist/rate-5XsU2QkY.js +631 -0
  279. package/dist/rate-5XsU2QkY.js.map +1 -0
  280. package/dist/reorder/index.d.ts +1 -0
  281. package/dist/reorder/index.js +720 -0
  282. package/dist/reorder/index.js.map +1 -0
  283. package/dist/reorder/reorder.d.ts +190 -0
  284. package/dist/result/index.d.ts +1 -0
  285. package/dist/result/index.js +123 -0
  286. package/dist/result/index.js.map +1 -0
  287. package/dist/result/result.d.ts +88 -0
  288. package/dist/safe-area/index.d.ts +1 -0
  289. package/dist/safe-area/index.js +42 -0
  290. package/dist/safe-area/index.js.map +1 -0
  291. package/dist/safe-area/safe-area.d.ts +28 -0
  292. package/dist/search-bar/index.js +4 -2
  293. package/dist/search-bar/index.js.map +1 -1
  294. package/dist/search-bar/search-bar.d.ts +6 -0
  295. package/dist/segmented/index.d.ts +2 -0
  296. package/dist/segmented/index.js +2 -0
  297. package/dist/segmented/segmented.d.ts +127 -0
  298. package/dist/segmented-BaU38_L4.js +367 -0
  299. package/dist/segmented-BaU38_L4.js.map +1 -0
  300. package/dist/selection-form-BOM_odUk.js +88 -0
  301. package/dist/selection-form-BOM_odUk.js.map +1 -0
  302. package/dist/selection-form.d.ts +27 -0
  303. package/dist/selection-ivXqO1eu.js +55 -0
  304. package/dist/selection-ivXqO1eu.js.map +1 -0
  305. package/dist/selection.d.ts +29 -0
  306. package/dist/selector/choice-group.d.ts +114 -0
  307. package/dist/selector/index.d.ts +2 -0
  308. package/dist/selector/index.js +2 -0
  309. package/dist/selector/selector.d.ts +90 -0
  310. package/dist/selector-BU2MMJ4N.js +93 -0
  311. package/dist/selector-BU2MMJ4N.js.map +1 -0
  312. package/dist/share-sheet/index.d.ts +1 -0
  313. package/dist/share-sheet/index.js +138 -0
  314. package/dist/share-sheet/index.js.map +1 -0
  315. package/dist/share-sheet/share-sheet.d.ts +139 -0
  316. package/dist/side-nav/index.d.ts +1 -0
  317. package/dist/side-nav/index.js +99 -0
  318. package/dist/side-nav/index.js.map +1 -0
  319. package/dist/side-nav/side-nav.d.ts +94 -0
  320. package/dist/skeleton/index.js +51 -2
  321. package/dist/skeleton/index.js.map +1 -1
  322. package/dist/skeleton/skeleton.d.ts +34 -3
  323. package/dist/slider/index.d.ts +1 -0
  324. package/dist/slider/index.js +482 -0
  325. package/dist/slider/index.js.map +1 -0
  326. package/dist/slider/slider.d.ts +174 -0
  327. package/dist/space/index.d.ts +1 -0
  328. package/dist/space/index.js +52 -0
  329. package/dist/space/index.js.map +1 -0
  330. package/dist/space/space.d.ts +46 -0
  331. package/dist/statistic/index.d.ts +1 -0
  332. package/dist/statistic/index.js +152 -0
  333. package/dist/statistic/index.js.map +1 -0
  334. package/dist/statistic/statistic.d.ts +101 -0
  335. package/dist/stepper/index.d.ts +1 -0
  336. package/dist/stepper/index.js +172 -0
  337. package/dist/stepper/index.js.map +1 -0
  338. package/dist/stepper/stepper.d.ts +161 -0
  339. package/dist/steps/index.d.ts +1 -0
  340. package/dist/steps/index.js +72 -0
  341. package/dist/steps/index.js.map +1 -0
  342. package/dist/steps/steps.d.ts +67 -0
  343. package/dist/sticky/index.d.ts +1 -0
  344. package/dist/sticky/index.js +145 -0
  345. package/dist/sticky/index.js.map +1 -0
  346. package/dist/sticky/sticky.d.ts +70 -0
  347. package/dist/swipe-action/index.d.ts +1 -0
  348. package/dist/swipe-action/index.js +417 -0
  349. package/dist/swipe-action/index.js.map +1 -0
  350. package/dist/swipe-action/swipe-action.d.ts +148 -0
  351. package/dist/swiper/gesture.d.ts +32 -0
  352. package/dist/swiper/index.d.ts +1 -0
  353. package/dist/swiper/index.js +2 -0
  354. package/dist/swiper/swiper.d.ts +177 -0
  355. package/dist/swiper-BKivDkHp.js +550 -0
  356. package/dist/swiper-BKivDkHp.js.map +1 -0
  357. package/dist/switch/index.d.ts +1 -0
  358. package/dist/switch/index.js +168 -0
  359. package/dist/switch/index.js.map +1 -0
  360. package/dist/switch/switch.d.ts +142 -0
  361. package/dist/tabbar/index.d.ts +1 -0
  362. package/dist/tabbar/index.js +95 -0
  363. package/dist/tabbar/index.js.map +1 -0
  364. package/dist/tabbar/tabbar.d.ts +119 -0
  365. package/dist/tabs/index.js +22 -1
  366. package/dist/tabs/index.js.map +1 -1
  367. package/dist/tabs/tabs.d.ts +12 -8
  368. package/dist/tag/index.js +123 -2
  369. package/dist/tag/index.js.map +1 -1
  370. package/dist/tag/tag.d.ts +67 -1
  371. package/dist/textarea/index.d.ts +2 -0
  372. package/dist/textarea/index.js +2 -242
  373. package/dist/textarea/platform.d.ts +22 -0
  374. package/dist/textarea/textarea.d.ts +169 -46
  375. package/dist/textarea-qbnruDUG.js +775 -0
  376. package/dist/textarea-qbnruDUG.js.map +1 -0
  377. package/dist/time-picker/index.d.ts +1 -0
  378. package/dist/time-picker/index.js +228 -0
  379. package/dist/time-picker/index.js.map +1 -0
  380. package/dist/time-picker/time-picker.d.ts +83 -0
  381. package/dist/timeline/index.d.ts +1 -0
  382. package/dist/timeline/index.js +131 -0
  383. package/dist/timeline/index.js.map +1 -0
  384. package/dist/timeline/timeline.d.ts +79 -0
  385. package/dist/toast/index.js +47 -4
  386. package/dist/toast/index.js.map +1 -1
  387. package/dist/toast/toast.d.ts +26 -3
  388. package/dist/top-bar/index.js +16 -2
  389. package/dist/top-bar/index.js.map +1 -1
  390. package/dist/top-bar/top-bar.d.ts +13 -2
  391. package/dist/tree-select/index.d.ts +1 -0
  392. package/dist/tree-select/index.js +512 -0
  393. package/dist/tree-select/index.js.map +1 -0
  394. package/dist/tree-select/tree-select.d.ts +215 -0
  395. package/dist/typography/index.d.ts +1 -0
  396. package/dist/typography/index.js +82 -0
  397. package/dist/typography/index.js.map +1 -0
  398. package/dist/typography/typography.d.ts +54 -0
  399. package/dist/upload/index.d.ts +1 -0
  400. package/dist/upload/index.js +458 -0
  401. package/dist/upload/index.js.map +1 -0
  402. package/dist/upload/upload.d.ts +172 -0
  403. package/dist/virtual-list/index.d.ts +1 -0
  404. package/dist/virtual-list/index.js +445 -0
  405. package/dist/virtual-list/index.js.map +1 -0
  406. package/dist/virtual-list/virtual-list.d.ts +160 -0
  407. package/dist/visual-manifest.d.ts +27 -0
  408. package/dist/watermark/index.d.ts +1 -0
  409. package/dist/watermark/index.js +260 -0
  410. package/dist/watermark/index.js.map +1 -0
  411. package/dist/watermark/watermark.d.ts +106 -0
  412. package/package.json +417 -44
  413. package/dist/empty/index.js.map +0 -1
  414. package/dist/icon/index.js.map +0 -1
  415. package/dist/textarea/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/sticky/sticky.ts"],"sourcesContent":["import { createMachine, type Machine, type Service } from \"@zag-js/core\";\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\";\n\n/** Edge of the scrollport the element sticks to. */\nexport const STICKY_POSITIONS = [\"top\", \"bottom\"] as const;\n/** Stable DOM parts shared by every adapter. */\nexport const STICKY_PARTS = [\"root\"] as const;\nexport type StickyPosition = (typeof STICKY_POSITIONS)[number];\nexport interface StickyStuckChangeDetails { stuck: boolean }\n/** SSR-safe input shared by all adapters. Positioning is native `position: sticky`. */\nexport interface QwStickyProps {\n /** Page-unique instance identity; adapters generate one when omitted. */\n id?: string;\n /** Distance in CSS pixels from the chosen scrollport edge; nonfinite/negative is 0. */\n offset?: number;\n position?: StickyPosition;\n /** CSS selector of the scrolling ancestor, matched with `closest()`; omitted means the viewport. */\n scrollContainer?: string;\n /** Called only when the measured stuck state changes. */\n onStuckChange?: (details: StickyStuckChangeDetails) => void;\n}\nexport interface ResolvedStickyState { offset: number; position: StickyPosition; scrollContainer: string | undefined }\nexport function resolveStickyState(props: QwStickyProps = {}): ResolvedStickyState {\n const offset = typeof props.offset === \"number\" && Number.isFinite(props.offset) && props.offset > 0 ? props.offset : 0;\n return { offset, position: STICKY_POSITIONS.includes(props.position!) ? props.position! : \"top\",\n scrollContainer: typeof props.scrollContainer === \"string\" && props.scrollContainer.trim() ? props.scrollContainer : undefined };\n}\n/** Geometry snapshot read by the platform effect. `before`/`after` are remaining scroll distances. */\nexport interface StickyMeasurement {\n rootStart: number; rootEnd: number; portStart: number; portEnd: number; scrolledBefore: number; scrolledAfter: number;\n}\n/**\n * A native sticky box that has scrolled is stuck exactly when it sits on its offset line;\n * an unstuck box moves with the content, so the coincidence tolerance is sub-pixel.\n */\nexport function computeStickyStuck(state: ResolvedStickyState, m: StickyMeasurement): boolean {\n return state.position === \"top\"\n ? m.scrolledBefore > 0 && Math.abs(m.rootStart - (m.portStart + state.offset)) < 1\n : m.scrolledAfter > 0 && Math.abs(m.rootEnd - (m.portEnd - state.offset)) < 1;\n}\nexport function createStickyProps(props: QwStickyProps = {}): QwStickyProps {\n if (props.id !== undefined && (typeof props.id !== \"string\" || !props.id.trim())) throw new TypeError(\"Sticky requires a nonempty instance id when provided\");\n return { ...props };\n}\n\nexport interface QwStickySchema {\n props: QwStickyProps;\n context: { stuck: boolean };\n refs: { schedule: (() => void) | null };\n state: \"ready\";\n action: \"setStuck\" | \"remeasure\";\n effect: \"trackStuck\";\n event: { type: \"STUCK.SET\"; stuck: boolean };\n}\nexport type QwStickyMachine = Machine<QwStickySchema>;\nexport type QwStickyService = Service<QwStickySchema>;\nconst rootId = (scope: QwStickyService[\"scope\"]) => `sticky:${scope.id}`;\nconst live = (service: Pick<QwStickyService, \"prop\">) => resolveStickyState({ offset: service.prop(\"offset\"), position: service.prop(\"position\"), scrollContainer: service.prop(\"scrollContainer\") });\n\n/** Platform boundary: resolve the scrollport and measure. Only called from the client effect. */\nfunction measure(root: HTMLElement, state: ResolvedStickyState): boolean {\n const win = root.ownerDocument.defaultView;\n const port = state.scrollContainer ? root.parentElement?.closest<HTMLElement>(state.scrollContainer) ?? null : null;\n const rect = root.getBoundingClientRect();\n if (port) {\n const box = port.getBoundingClientRect();\n return computeStickyStuck(state, { rootStart: rect.top, rootEnd: rect.bottom, portStart: box.top + port.clientTop, portEnd: box.top + port.clientTop + port.clientHeight,\n scrolledBefore: port.scrollTop, scrolledAfter: port.scrollHeight - port.clientHeight - port.scrollTop });\n }\n const doc = root.ownerDocument.documentElement, y = win?.scrollY ?? doc.scrollTop, height = win?.innerHeight ?? doc.clientHeight;\n return computeStickyStuck(state, { rootStart: rect.top, rootEnd: rect.bottom, portStart: 0, portEnd: height, scrolledBefore: y, scrolledAfter: doc.scrollHeight - height - y });\n}\n\n/** Core owns listening, rAF throttling, transition-only notification and cleanup. */\nexport const stickyMachine: QwStickyMachine = createMachine<QwStickySchema>({\n props: ({ props }) => createStickyProps(props), initialState: () => \"ready\", states: { ready: {} },\n context: ({ bindable, prop }) => ({\n stuck: bindable(() => ({ defaultValue: false, onChange(stuck) { prop(\"onStuckChange\")?.({ stuck }); } })),\n }),\n refs: () => ({ schedule: null }),\n watch({ track, prop, action }) { track([() => prop(\"offset\"), () => prop(\"position\"), () => prop(\"scrollContainer\")], () => action([\"remeasure\"])); },\n on: { \"STUCK.SET\": { actions: [\"setStuck\"] } },\n effects: [\"trackStuck\"],\n implementations: {\n actions: {\n setStuck(params) { if (params.event.type === \"STUCK.SET\") params.context.set(\"stuck\", params.event.stuck); },\n remeasure(params) { params.refs.get(\"schedule\")?.(); },\n },\n effects: { trackStuck({ scope, prop, send, context, refs }) {\n const root = scope.getById<HTMLElement>(rootId(scope)), win = root?.ownerDocument.defaultView;\n if (!root || !win) return;\n let frame = 0, port: EventTarget | null = null, disposed = false;\n const attach = () => {\n const state = live({ prop });\n const next: EventTarget = state.scrollContainer ? root.parentElement?.closest(state.scrollContainer) ?? win : win;\n if (next === port) return;\n port?.removeEventListener(\"scroll\", schedule); port = next; port.addEventListener(\"scroll\", schedule, { passive: true });\n };\n const run = () => { frame = 0; if (disposed || !root.isConnected) return; attach(); const stuck = measure(root, live({ prop })); if (stuck !== context.get(\"stuck\")) send({ type: \"STUCK.SET\", stuck }); };\n function schedule() { if (!frame && !disposed) frame = win!.requestAnimationFrame(run); }\n attach(); win.addEventListener(\"resize\", schedule, { passive: true }); schedule();\n refs.set(\"schedule\", schedule);\n return () => { disposed = true; refs.set(\"schedule\", null); if (frame) win.cancelAnimationFrame(frame); port?.removeEventListener(\"scroll\", schedule); win.removeEventListener(\"resize\", schedule); };\n } },\n },\n});\n\nexport interface QwStickyApi<T extends PropTypes = PropTypes> {\n stuck: boolean; position: StickyPosition; offset: number;\n getRootProps(): T[\"element\"];\n}\nexport function connectSticky<T extends PropTypes>(service: QwStickyService, normalize: NormalizeProps<T>): QwStickyApi<T> {\n const state = live(service), stuck = service.context.get(\"stuck\");\n return { stuck, position: state.position, offset: state.offset,\n getRootProps: () => normalize.element({ \"data-scope\": \"sticky\", \"data-part\": \"root\", id: rootId(service.scope), \"data-position\": state.position, \"data-stuck\": stuck ? \"true\" : undefined,\n style: { \"--qw-sticky-offset\": `${state.offset}px` } }) };\n}\n"],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { type Machine, type Service } from "@zag-js/core";
2
+ import type { NormalizeProps, PropTypes } from "@zag-js/types";
3
+ /** Edge of the scrollport the element sticks to. */
4
+ export declare const STICKY_POSITIONS: readonly ["top", "bottom"];
5
+ /** Stable DOM parts shared by every adapter. */
6
+ export declare const STICKY_PARTS: readonly ["root"];
7
+ export type StickyPosition = (typeof STICKY_POSITIONS)[number];
8
+ export interface StickyStuckChangeDetails {
9
+ stuck: boolean;
10
+ }
11
+ /** SSR-safe input shared by all adapters. Positioning is native `position: sticky`. */
12
+ export interface QwStickyProps {
13
+ /** Page-unique instance identity; adapters generate one when omitted. */
14
+ id?: string;
15
+ /** Distance in CSS pixels from the chosen scrollport edge; nonfinite/negative is 0. */
16
+ offset?: number;
17
+ position?: StickyPosition;
18
+ /** CSS selector of the scrolling ancestor, matched with `closest()`; omitted means the viewport. */
19
+ scrollContainer?: string;
20
+ /** Called only when the measured stuck state changes. */
21
+ onStuckChange?: (details: StickyStuckChangeDetails) => void;
22
+ }
23
+ export interface ResolvedStickyState {
24
+ offset: number;
25
+ position: StickyPosition;
26
+ scrollContainer: string | undefined;
27
+ }
28
+ export declare function resolveStickyState(props?: QwStickyProps): ResolvedStickyState;
29
+ /** Geometry snapshot read by the platform effect. `before`/`after` are remaining scroll distances. */
30
+ export interface StickyMeasurement {
31
+ rootStart: number;
32
+ rootEnd: number;
33
+ portStart: number;
34
+ portEnd: number;
35
+ scrolledBefore: number;
36
+ scrolledAfter: number;
37
+ }
38
+ /**
39
+ * A native sticky box that has scrolled is stuck exactly when it sits on its offset line;
40
+ * an unstuck box moves with the content, so the coincidence tolerance is sub-pixel.
41
+ */
42
+ export declare function computeStickyStuck(state: ResolvedStickyState, m: StickyMeasurement): boolean;
43
+ export declare function createStickyProps(props?: QwStickyProps): QwStickyProps;
44
+ export interface QwStickySchema {
45
+ props: QwStickyProps;
46
+ context: {
47
+ stuck: boolean;
48
+ };
49
+ refs: {
50
+ schedule: (() => void) | null;
51
+ };
52
+ state: "ready";
53
+ action: "setStuck" | "remeasure";
54
+ effect: "trackStuck";
55
+ event: {
56
+ type: "STUCK.SET";
57
+ stuck: boolean;
58
+ };
59
+ }
60
+ export type QwStickyMachine = Machine<QwStickySchema>;
61
+ export type QwStickyService = Service<QwStickySchema>;
62
+ /** Core owns listening, rAF throttling, transition-only notification and cleanup. */
63
+ export declare const stickyMachine: QwStickyMachine;
64
+ export interface QwStickyApi<T extends PropTypes = PropTypes> {
65
+ stuck: boolean;
66
+ position: StickyPosition;
67
+ offset: number;
68
+ getRootProps(): T["element"];
69
+ }
70
+ export declare function connectSticky<T extends PropTypes>(service: QwStickyService, normalize: NormalizeProps<T>): QwStickyApi<T>;
@@ -0,0 +1 @@
1
+ export * from "./swipe-action.js";
@@ -0,0 +1,417 @@
1
+ import { n as resolveSwipeIntent, r as sampleVelocity, t as lockGestureAxis } from "../gesture-_SRHIvBm.js";
2
+ import { createMachine } from "@zag-js/core";
3
+ import { visuallyHiddenStyle } from "@zag-js/dom-query";
4
+ //#region src/swipe-action/swipe-action.ts
5
+ /** Logical sides: start actions sit at inline-start (left in LTR, right in RTL). */
6
+ const SWIPE_ACTION_SIDES = ["start", "end"];
7
+ const SWIPE_ACTION_COLORS = [
8
+ "default",
9
+ "primary",
10
+ "warning",
11
+ "danger"
12
+ ];
13
+ /** Stable DOM parts shared by every adapter. */
14
+ const SWIPE_ACTION_PARTS = [
15
+ "root",
16
+ "track",
17
+ "actions",
18
+ "action",
19
+ "content",
20
+ "status"
21
+ ];
22
+ /** Share of an action group's width that commits opening/closing; flicks commit earlier. */
23
+ const SWIPE_ACTION_DISTANCE_RATIO = .4;
24
+ const MAX_ACTIONS = 8;
25
+ const items = (value, side) => {
26
+ const seen = /* @__PURE__ */ new Set(), result = [];
27
+ for (const item of Array.isArray(value) ? value : []) {
28
+ if (!item || typeof item.key !== "string" || !item.key || seen.has(item.key) || typeof item.text !== "string" || !item.text.trim()) continue;
29
+ seen.add(item.key);
30
+ result.push({
31
+ key: item.key,
32
+ text: item.text,
33
+ color: SWIPE_ACTION_COLORS.includes(item.color) ? item.color : "default",
34
+ disabled: !!item.disabled,
35
+ side
36
+ });
37
+ if (result.length === MAX_ACTIONS) break;
38
+ }
39
+ return result;
40
+ };
41
+ const side = (value) => value === "start" || value === "end" ? value : null;
42
+ /** Invalid/duplicate/empty actions are dropped; at most 8 per side. */
43
+ function resolveSwipeActionState(props = {}) {
44
+ return {
45
+ start: items(props.startActions, "start"),
46
+ end: items(props.endActions, "end"),
47
+ closeOnAction: props.closeOnAction !== false,
48
+ closeOnTouchOutside: props.closeOnTouchOutside !== false,
49
+ disabled: !!props.disabled,
50
+ openedText: typeof props.openedText === "string" && props.openedText.trim() ? props.openedText : "已展开 {count} 个操作"
51
+ };
52
+ }
53
+ /** A side can only be open when it has actions and the component is enabled. */
54
+ function resolveSwipeActionOpen(state, open) {
55
+ const value = side(open);
56
+ return !value || state.disabled || !state[value].length ? null : value;
57
+ }
58
+ /** Resting logical offset: positive reveals start actions. */
59
+ function getSwipeActionRestOffset(open, widths) {
60
+ return open === "start" ? widths.start : open === "end" ? -widths.end : 0;
61
+ }
62
+ /** Logical drag offset from the resting position, clamped to the measured action widths. */
63
+ function clampSwipeActionOffset(offset, widths) {
64
+ return Math.min(Math.max(0, widths.start), Math.max(-Math.max(0, widths.end), Number.isFinite(offset) ? offset : 0));
65
+ }
66
+ /** Release decision. `delta` is the logical drag distance (positive = toward inline-end). */
67
+ function resolveSwipeActionRelease(input) {
68
+ const { open, delta, velocity, widths } = input;
69
+ const intent = (size) => resolveSwipeIntent({
70
+ distance: delta,
71
+ velocity,
72
+ size,
73
+ ratio: SWIPE_ACTION_DISTANCE_RATIO
74
+ });
75
+ if (open === "end") return intent(widths.end) > 0 ? null : "end";
76
+ if (open === "start") return intent(widths.start) < 0 ? null : "start";
77
+ if (delta > 0 && widths.start > 0 && intent(widths.start) > 0) return "start";
78
+ if (delta < 0 && widths.end > 0 && intent(widths.end) < 0) return "end";
79
+ return null;
80
+ }
81
+ function createSwipeActionProps(props = {}) {
82
+ if (props.id !== void 0 && (typeof props.id !== "string" || !props.id.trim())) throw new TypeError("SwipeAction requires a nonempty instance id when provided");
83
+ return {
84
+ ...props,
85
+ defaultOpen: side(props.defaultOpen),
86
+ open: props.open === void 0 ? void 0 : side(props.open)
87
+ };
88
+ }
89
+ const ids = (scope) => ({
90
+ root: `swipe-action:${scope.id}`,
91
+ track: `swipe-action:${scope.id}:track`,
92
+ content: `swipe-action:${scope.id}:content`,
93
+ start: `swipe-action:${scope.id}:start`,
94
+ end: `swipe-action:${scope.id}:end`
95
+ });
96
+ const live = (service) => resolveSwipeActionState({
97
+ startActions: service.prop("startActions"),
98
+ endActions: service.prop("endActions"),
99
+ closeOnAction: service.prop("closeOnAction"),
100
+ closeOnTouchOutside: service.prop("closeOnTouchOutside"),
101
+ disabled: service.prop("disabled"),
102
+ openedText: service.prop("openedText")
103
+ });
104
+ /** Measured widths, zeroed for a side without actions (its hidden group may still report a stale size). */
105
+ const widthsOf = (context, state) => ({
106
+ start: state.start.length && !state.disabled ? context.get("startWidth") : 0,
107
+ end: state.end.length && !state.disabled ? context.get("endWidth") : 0
108
+ });
109
+ /** Move focus off an action that is about to be hidden, so it never stays on clipped content. */
110
+ function releaseFocus(scope) {
111
+ const root = scope.getById(ids(scope).root), active = root?.ownerDocument.activeElement;
112
+ if (root && active && active !== root && active.closest?.("[data-scope=\"swipe-action\"][data-part=\"actions\"]") && root.contains(active)) root.focus({ preventScroll: true });
113
+ }
114
+ /** Core owns gestures, axis locking, outside/close handling, focus-driven opening and cleanup. */
115
+ const swipeActionMachine = createMachine({
116
+ props: ({ props }) => createSwipeActionProps(props),
117
+ initialState: () => "ready",
118
+ states: { ready: {} },
119
+ context: ({ bindable, prop }) => ({
120
+ open: bindable(() => ({
121
+ defaultValue: prop("defaultOpen") ?? null,
122
+ value: prop("open"),
123
+ onChange(open) {
124
+ prop("onOpenChange")?.({ open });
125
+ }
126
+ })),
127
+ offset: bindable(() => ({ defaultValue: 0 })),
128
+ dragging: bindable(() => ({ defaultValue: false })),
129
+ startWidth: bindable(() => ({ defaultValue: 0 })),
130
+ endWidth: bindable(() => ({ defaultValue: 0 }))
131
+ }),
132
+ watch({ track, prop, action }) {
133
+ track([() => prop("disabled")], () => action(["closeIfDisabled"]));
134
+ },
135
+ on: {
136
+ "OPEN.SET": { actions: ["setOpen"] },
137
+ CLOSE: { actions: ["close"] },
138
+ "DRAG.MOVE": { actions: ["dragMove"] },
139
+ "DRAG.END": { actions: ["dragEnd"] },
140
+ MEASURE: { actions: ["measure"] },
141
+ ACTION: { actions: ["activate"] }
142
+ },
143
+ effects: ["trackGestures"],
144
+ implementations: {
145
+ actions: {
146
+ setOpen({ event, context, prop }) {
147
+ if (event.type !== "OPEN.SET") return;
148
+ const state = live({ prop }), next = resolveSwipeActionOpen(state, event.side);
149
+ if (next !== resolveSwipeActionOpen(state, context.get("open"))) context.set("open", next);
150
+ },
151
+ close({ event, context, prop, scope }) {
152
+ if (event.type === "CLOSE" && event.restoreFocus) releaseFocus(scope);
153
+ if (resolveSwipeActionOpen(live({ prop }), context.get("open")) !== null) context.set("open", null);
154
+ },
155
+ closeIfDisabled({ context, prop }) {
156
+ if (prop("disabled") && side(context.get("open"))) context.set("open", null);
157
+ },
158
+ dragMove({ event, context }) {
159
+ if (event.type === "DRAG.MOVE") {
160
+ context.set("dragging", true);
161
+ context.set("offset", event.offset);
162
+ }
163
+ },
164
+ dragEnd({ event, context, prop }) {
165
+ if (event.type !== "DRAG.END") return;
166
+ context.set("dragging", false);
167
+ context.set("offset", 0);
168
+ const state = live({ prop }), next = resolveSwipeActionOpen(state, event.side);
169
+ if (next !== resolveSwipeActionOpen(state, context.get("open"))) context.set("open", next);
170
+ },
171
+ measure({ event, context }) {
172
+ if (event.type === "MEASURE") {
173
+ context.set("startWidth", event.start);
174
+ context.set("endWidth", event.end);
175
+ }
176
+ },
177
+ activate({ event, context, prop, scope }) {
178
+ if (event.type !== "ACTION") return;
179
+ const state = live({ prop }), item = state[event.side].find((action) => action.key === event.key);
180
+ if (!item || item.disabled || state.disabled) return;
181
+ prop("onAction")?.({
182
+ key: item.key,
183
+ side: item.side
184
+ });
185
+ if (state.closeOnAction && side(context.get("open"))) {
186
+ releaseFocus(scope);
187
+ context.set("open", null);
188
+ }
189
+ }
190
+ },
191
+ effects: { trackGestures({ scope, prop, context, send }) {
192
+ const id = ids(scope), root = scope.getById(id.root), track = scope.getById(id.track), win = root?.ownerDocument.defaultView;
193
+ if (!root || !track || !win) return;
194
+ const doc = root.ownerDocument;
195
+ const openNow = () => resolveSwipeActionOpen(live({ prop }), context.get("open"));
196
+ const measure = () => {
197
+ const start = scope.getById(id.start)?.offsetWidth ?? 0, end = scope.getById(id.end)?.offsetWidth ?? 0;
198
+ if (start !== context.get("startWidth") || end !== context.get("endWidth")) send({
199
+ type: "MEASURE",
200
+ start,
201
+ end
202
+ });
203
+ };
204
+ let gesture = null;
205
+ let suppressClick = false;
206
+ const logical = (dx, rtl) => rtl ? -dx : dx;
207
+ const onDown = (event) => {
208
+ gesture = null;
209
+ if (live({ prop }).disabled || event.pointerType === "mouse" && event.button !== 0) return;
210
+ measure();
211
+ gesture = {
212
+ id: event.pointerId,
213
+ x: event.clientX,
214
+ y: event.clientY,
215
+ axis: "pending",
216
+ rtl: win.getComputedStyle(root).direction === "rtl",
217
+ base: getSwipeActionRestOffset(openNow(), widthsOf(context, live({ prop }))),
218
+ samples: [],
219
+ captured: false
220
+ };
221
+ suppressClick = false;
222
+ };
223
+ const onMove = (event) => {
224
+ if (!gesture || event.pointerId !== gesture.id) return;
225
+ const dx = event.clientX - gesture.x, dy = event.clientY - gesture.y;
226
+ if (gesture.axis === "pending") gesture.axis = lockGestureAxis(dx, dy);
227
+ if (gesture.axis === "cross") {
228
+ gesture = null;
229
+ return;
230
+ }
231
+ if (gesture.axis !== "main") return;
232
+ if (!gesture.captured) {
233
+ gesture.captured = true;
234
+ try {
235
+ track.setPointerCapture?.(event.pointerId);
236
+ } catch {}
237
+ }
238
+ const delta = logical(dx, gesture.rtl);
239
+ gesture.samples.push({
240
+ position: delta,
241
+ time: event.timeStamp
242
+ });
243
+ send({
244
+ type: "DRAG.MOVE",
245
+ offset: clampSwipeActionOffset(gesture.base + delta, widthsOf(context, live({ prop })))
246
+ });
247
+ };
248
+ const onUp = (event) => {
249
+ if (!gesture || event.pointerId !== gesture.id) return;
250
+ const done = gesture;
251
+ gesture = null;
252
+ if (done.axis !== "main") return;
253
+ suppressClick = true;
254
+ const delta = logical(event.clientX - done.x, done.rtl);
255
+ done.samples.push({
256
+ position: delta,
257
+ time: event.timeStamp
258
+ });
259
+ send({
260
+ type: "DRAG.END",
261
+ side: resolveSwipeActionRelease({
262
+ open: openNow(),
263
+ delta,
264
+ velocity: sampleVelocity(done.samples, event.timeStamp),
265
+ widths: widthsOf(context, live({ prop }))
266
+ })
267
+ });
268
+ };
269
+ const onCancel = (event) => {
270
+ if (!gesture || event.pointerId !== gesture.id) return;
271
+ const done = gesture;
272
+ gesture = null;
273
+ if (done.axis === "main") send({
274
+ type: "DRAG.END",
275
+ side: openNow()
276
+ });
277
+ };
278
+ const onContentClick = (event) => {
279
+ const inContent = !!event.target?.closest?.(`[id="${id.content}"]`);
280
+ if (suppressClick || inContent && openNow()) {
281
+ event.preventDefault();
282
+ event.stopPropagation();
283
+ if (!suppressClick) send({ type: "CLOSE" });
284
+ }
285
+ suppressClick = false;
286
+ };
287
+ const onOutside = (event) => {
288
+ const target = event.target;
289
+ if (openNow() && live({ prop }).closeOnTouchOutside && target && !root.contains(target)) send({ type: "CLOSE" });
290
+ };
291
+ const onFocusIn = (event) => {
292
+ const which = (event.target?.closest?.("[data-scope=\"swipe-action\"][data-part=\"actions\"]"))?.getAttribute("data-side");
293
+ if ((which === "start" || which === "end") && openNow() !== which) {
294
+ measure();
295
+ send({
296
+ type: "OPEN.SET",
297
+ side: which
298
+ });
299
+ }
300
+ };
301
+ const onFocusOut = (event) => {
302
+ const next = event.relatedTarget;
303
+ if (openNow() && (!next || !root.contains(next))) send({ type: "CLOSE" });
304
+ };
305
+ track.addEventListener("pointerdown", onDown);
306
+ track.addEventListener("pointermove", onMove);
307
+ track.addEventListener("pointerup", onUp);
308
+ track.addEventListener("pointercancel", onCancel);
309
+ track.addEventListener("click", onContentClick, true);
310
+ root.addEventListener("focusin", onFocusIn);
311
+ root.addEventListener("focusout", onFocusOut);
312
+ doc.addEventListener("pointerdown", onOutside, true);
313
+ const Observer = win.ResizeObserver, observer = Observer ? new Observer(measure) : null;
314
+ for (const group of [scope.getById(id.start), scope.getById(id.end)]) if (group) observer?.observe(group);
315
+ measure();
316
+ return () => {
317
+ gesture = null;
318
+ observer?.disconnect();
319
+ track.removeEventListener("pointerdown", onDown);
320
+ track.removeEventListener("pointermove", onMove);
321
+ track.removeEventListener("pointerup", onUp);
322
+ track.removeEventListener("pointercancel", onCancel);
323
+ track.removeEventListener("click", onContentClick, true);
324
+ root.removeEventListener("focusin", onFocusIn);
325
+ root.removeEventListener("focusout", onFocusOut);
326
+ doc.removeEventListener("pointerdown", onOutside, true);
327
+ };
328
+ } }
329
+ }
330
+ });
331
+ const callKeyDown = (handler, event) => {
332
+ for (const item of Array.isArray(handler) ? handler : [handler]) if (typeof item === "function") item(event);
333
+ };
334
+ function connectSwipeAction(service, normalize, options = {}) {
335
+ const state = live(service), id = ids(service.scope), open = resolveSwipeActionOpen(state, service.context.get("open"));
336
+ const dragging = service.context.get("dragging"), offset = dragging ? service.context.get("offset") : getSwipeActionRestOffset(open, widthsOf(service.context, state));
337
+ const count = open ? state[open].length : 0;
338
+ const part = (name) => ({
339
+ "data-scope": "swipe-action",
340
+ "data-part": name
341
+ });
342
+ const show = (which = state.end.length ? "end" : "start") => service.send({
343
+ type: "OPEN.SET",
344
+ side: which
345
+ });
346
+ const close = () => service.send({ type: "CLOSE" });
347
+ return {
348
+ open,
349
+ dragging,
350
+ startActions: state.start,
351
+ endActions: state.end,
352
+ statusText: open ? state.openedText.replace(/\{count\}/g, String(count)) : "",
353
+ show,
354
+ close,
355
+ getRootProps: () => normalize.element({
356
+ ...part("root"),
357
+ id: id.root,
358
+ tabIndex: -1,
359
+ "data-state": open ? "open" : "closed",
360
+ "data-open": open ?? void 0,
361
+ "data-disabled": state.disabled ? "true" : void 0,
362
+ "data-dragging": dragging ? "true" : void 0,
363
+ onKeyDown(event) {
364
+ callKeyDown(options.onKeyDown, event);
365
+ if (!event.defaultPrevented && event.key === "Escape" && open) {
366
+ event.preventDefault();
367
+ service.send({
368
+ type: "CLOSE",
369
+ restoreFocus: true
370
+ });
371
+ }
372
+ }
373
+ }),
374
+ getTrackProps: () => normalize.element({
375
+ ...part("track"),
376
+ id: id.track,
377
+ "data-dragging": dragging ? "true" : void 0,
378
+ style: { "--qw-swipe-action-offset": `${offset}px` }
379
+ }),
380
+ getActionsProps: (which) => normalize.element({
381
+ ...part("actions"),
382
+ id: id[which],
383
+ "data-side": which,
384
+ "data-open": open === which ? "true" : void 0,
385
+ hidden: !state[which].length || void 0
386
+ }),
387
+ getActionProps: (item) => normalize.button({
388
+ ...part("action"),
389
+ type: "button",
390
+ "data-key": item.key,
391
+ "data-side": item.side,
392
+ "data-color": item.color,
393
+ disabled: item.disabled || state.disabled,
394
+ onClick(event) {
395
+ if (!event.defaultPrevented) service.send({
396
+ type: "ACTION",
397
+ key: item.key,
398
+ side: item.side
399
+ });
400
+ }
401
+ }),
402
+ getContentProps: () => normalize.element({
403
+ ...part("content"),
404
+ id: id.content
405
+ }),
406
+ getStatusProps: () => normalize.element({
407
+ ...part("status"),
408
+ role: "status",
409
+ "aria-live": "polite",
410
+ style: visuallyHiddenStyle
411
+ })
412
+ };
413
+ }
414
+ //#endregion
415
+ export { SWIPE_ACTION_COLORS, SWIPE_ACTION_DISTANCE_RATIO, SWIPE_ACTION_PARTS, SWIPE_ACTION_SIDES, clampSwipeActionOffset, connectSwipeAction, createSwipeActionProps, getSwipeActionRestOffset, resolveSwipeActionOpen, resolveSwipeActionRelease, resolveSwipeActionState, swipeActionMachine };
416
+
417
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/swipe-action/swipe-action.ts"],"sourcesContent":["import { createMachine, type Machine, type Service } from \"@zag-js/core\";\nimport { visuallyHiddenStyle } from \"@zag-js/dom-query\";\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\";\nimport { lockGestureAxis, resolveSwipeIntent, sampleVelocity, type GestureAxis, type GestureSample } from \"../swiper/gesture.js\";\n\n/** Logical sides: start actions sit at inline-start (left in LTR, right in RTL). */\nexport const SWIPE_ACTION_SIDES = [\"start\", \"end\"] as const;\nexport const SWIPE_ACTION_COLORS = [\"default\", \"primary\", \"warning\", \"danger\"] as const;\n/** Stable DOM parts shared by every adapter. */\nexport const SWIPE_ACTION_PARTS = [\"root\", \"track\", \"actions\", \"action\", \"content\", \"status\"] as const;\n/** Share of an action group's width that commits opening/closing; flicks commit earlier. */\nexport const SWIPE_ACTION_DISTANCE_RATIO = 0.4;\nexport type SwipeActionSide = (typeof SWIPE_ACTION_SIDES)[number];\nexport type SwipeActionColor = (typeof SWIPE_ACTION_COLORS)[number];\n/** Scalar action. Rich action content is intentionally not supported so all stacks render the same button. */\nexport interface SwipeActionItem { key: string; text: string; color?: SwipeActionColor; disabled?: boolean }\nexport interface SwipeActionOpenChangeDetails { open: SwipeActionSide | null }\nexport interface SwipeActionActionDetails { key: string; side: SwipeActionSide }\n\nexport interface QwSwipeActionProps {\n /** Page-unique instance identity; adapters generate one when omitted. */\n id?: string;\n /** Actions revealed by swiping toward inline-end (antd-mobile leftActions in LTR). */\n startActions?: readonly SwipeActionItem[];\n /** Actions revealed by swiping toward inline-start (antd-mobile rightActions in LTR). */\n endActions?: readonly SwipeActionItem[];\n /** Controlled open side; null is controlled closed, undefined enables Core-owned state. */\n open?: SwipeActionSide | null;\n defaultOpen?: SwipeActionSide | null;\n /** Close after an action is activated; defaults to true. */\n closeOnAction?: boolean;\n /** Close when the user presses outside the component; defaults to true. */\n closeOnTouchOutside?: boolean;\n /** Ignore gestures and disable actions; an open item closes. */\n disabled?: boolean;\n /** Visually hidden status while open, with {count}; defaults to 已展开 {count} 个操作. */\n openedText?: string;\n onOpenChange?: (details: SwipeActionOpenChangeDetails) => void;\n onAction?: (details: SwipeActionActionDetails) => void;\n}\nexport interface ResolvedSwipeActionItem { key: string; text: string; color: SwipeActionColor; disabled: boolean; side: SwipeActionSide }\nexport interface ResolvedSwipeActionState {\n start: ResolvedSwipeActionItem[]; end: ResolvedSwipeActionItem[]; closeOnAction: boolean; closeOnTouchOutside: boolean; disabled: boolean; openedText: string;\n}\n\nconst MAX_ACTIONS = 8;\nconst items = (value: readonly SwipeActionItem[] | undefined, side: SwipeActionSide): ResolvedSwipeActionItem[] => {\n const seen = new Set<string>(), result: ResolvedSwipeActionItem[] = [];\n for (const item of Array.isArray(value) ? value : []) {\n if (!item || typeof item.key !== \"string\" || !item.key || seen.has(item.key) || typeof item.text !== \"string\" || !item.text.trim()) continue;\n seen.add(item.key);\n result.push({ key: item.key, text: item.text, color: SWIPE_ACTION_COLORS.includes(item.color!) ? item.color! : \"default\", disabled: !!item.disabled, side });\n if (result.length === MAX_ACTIONS) break;\n }\n return result;\n};\nconst side = (value: unknown): SwipeActionSide | null => value === \"start\" || value === \"end\" ? value : null;\n\n/** Invalid/duplicate/empty actions are dropped; at most 8 per side. */\nexport function resolveSwipeActionState(props: QwSwipeActionProps = {}): ResolvedSwipeActionState {\n return {\n start: items(props.startActions, \"start\"), end: items(props.endActions, \"end\"),\n closeOnAction: props.closeOnAction !== false, closeOnTouchOutside: props.closeOnTouchOutside !== false, disabled: !!props.disabled,\n openedText: typeof props.openedText === \"string\" && props.openedText.trim() ? props.openedText : \"已展开 {count} 个操作\",\n };\n}\n/** A side can only be open when it has actions and the component is enabled. */\nexport function resolveSwipeActionOpen(state: ResolvedSwipeActionState, open: SwipeActionSide | null | undefined): SwipeActionSide | null {\n const value = side(open);\n return !value || state.disabled || !state[value].length ? null : value;\n}\n/** Resting logical offset: positive reveals start actions. */\nexport function getSwipeActionRestOffset(open: SwipeActionSide | null, widths: { start: number; end: number }): number {\n return open === \"start\" ? widths.start : open === \"end\" ? -widths.end : 0;\n}\n/** Logical drag offset from the resting position, clamped to the measured action widths. */\nexport function clampSwipeActionOffset(offset: number, widths: { start: number; end: number }): number {\n return Math.min(Math.max(0, widths.start), Math.max(-Math.max(0, widths.end), Number.isFinite(offset) ? offset : 0));\n}\n/** Release decision. `delta` is the logical drag distance (positive = toward inline-end). */\nexport function resolveSwipeActionRelease(input: { open: SwipeActionSide | null; delta: number; velocity: number; widths: { start: number; end: number } }): SwipeActionSide | null {\n const { open, delta, velocity, widths } = input;\n const intent = (size: number) => resolveSwipeIntent({ distance: delta, velocity, size, ratio: SWIPE_ACTION_DISTANCE_RATIO });\n if (open === \"end\") return intent(widths.end) > 0 ? null : \"end\";\n if (open === \"start\") return intent(widths.start) < 0 ? null : \"start\";\n if (delta > 0 && widths.start > 0 && intent(widths.start) > 0) return \"start\";\n if (delta < 0 && widths.end > 0 && intent(widths.end) < 0) return \"end\";\n return null;\n}\nexport function createSwipeActionProps(props: QwSwipeActionProps = {}): QwSwipeActionProps {\n if (props.id !== undefined && (typeof props.id !== \"string\" || !props.id.trim())) throw new TypeError(\"SwipeAction requires a nonempty instance id when provided\");\n return { ...props, defaultOpen: side(props.defaultOpen), open: props.open === undefined ? undefined : side(props.open) };\n}\n\nexport interface QwSwipeActionSchema {\n props: QwSwipeActionProps;\n context: { open: SwipeActionSide | null; offset: number; dragging: boolean; startWidth: number; endWidth: number };\n state: \"ready\";\n action: \"setOpen\" | \"dragMove\" | \"dragEnd\" | \"measure\" | \"activate\" | \"close\" | \"closeIfDisabled\";\n effect: \"trackGestures\";\n event:\n | { type: \"OPEN.SET\"; side: SwipeActionSide | null }\n | { type: \"CLOSE\"; restoreFocus?: boolean }\n | { type: \"DRAG.MOVE\"; offset: number }\n | { type: \"DRAG.END\"; side: SwipeActionSide | null }\n | { type: \"MEASURE\"; start: number; end: number }\n | { type: \"ACTION\"; key: string; side: SwipeActionSide };\n}\nexport type QwSwipeActionMachine = Machine<QwSwipeActionSchema>;\nexport type QwSwipeActionService = Service<QwSwipeActionSchema>;\nconst ids = (scope: QwSwipeActionService[\"scope\"]) => ({ root: `swipe-action:${scope.id}`, track: `swipe-action:${scope.id}:track`, content: `swipe-action:${scope.id}:content`,\n start: `swipe-action:${scope.id}:start`, end: `swipe-action:${scope.id}:end` });\nconst live = (service: Pick<QwSwipeActionService, \"prop\">) => resolveSwipeActionState({\n startActions: service.prop(\"startActions\"), endActions: service.prop(\"endActions\"), closeOnAction: service.prop(\"closeOnAction\"),\n closeOnTouchOutside: service.prop(\"closeOnTouchOutside\"), disabled: service.prop(\"disabled\"), openedText: service.prop(\"openedText\"),\n});\n/** Measured widths, zeroed for a side without actions (its hidden group may still report a stale size). */\nconst widthsOf = (context: Pick<QwSwipeActionService[\"context\"], \"get\">, state: ResolvedSwipeActionState) => ({\n start: state.start.length && !state.disabled ? context.get(\"startWidth\") : 0, end: state.end.length && !state.disabled ? context.get(\"endWidth\") : 0 });\n/** Move focus off an action that is about to be hidden, so it never stays on clipped content. */\nfunction releaseFocus(scope: QwSwipeActionService[\"scope\"]): void {\n const root = scope.getById<HTMLElement>(ids(scope).root), active = root?.ownerDocument.activeElement;\n if (root && active && active !== root && active.closest?.('[data-scope=\"swipe-action\"][data-part=\"actions\"]') && root.contains(active)) root.focus({ preventScroll: true });\n}\n\n/** Core owns gestures, axis locking, outside/close handling, focus-driven opening and cleanup. */\nexport const swipeActionMachine: QwSwipeActionMachine = createMachine<QwSwipeActionSchema>({\n props: ({ props }) => createSwipeActionProps(props), initialState: () => \"ready\", states: { ready: {} },\n context: ({ bindable, prop }) => ({\n open: bindable<SwipeActionSide | null>(() => ({ defaultValue: prop(\"defaultOpen\") ?? null, value: prop(\"open\"), onChange(open) { prop(\"onOpenChange\")?.({ open }); } })),\n offset: bindable(() => ({ defaultValue: 0 })), dragging: bindable(() => ({ defaultValue: false })),\n startWidth: bindable(() => ({ defaultValue: 0 })), endWidth: bindable(() => ({ defaultValue: 0 })),\n }),\n watch({ track, prop, action }) { track([() => prop(\"disabled\")], () => action([\"closeIfDisabled\"])); },\n on: {\n \"OPEN.SET\": { actions: [\"setOpen\"] }, CLOSE: { actions: [\"close\"] }, \"DRAG.MOVE\": { actions: [\"dragMove\"] }, \"DRAG.END\": { actions: [\"dragEnd\"] },\n MEASURE: { actions: [\"measure\"] }, ACTION: { actions: [\"activate\"] },\n },\n effects: [\"trackGestures\"],\n implementations: {\n actions: {\n setOpen({ event, context, prop }) {\n if (event.type !== \"OPEN.SET\") return;\n const state = live({ prop }), next = resolveSwipeActionOpen(state, event.side);\n if (next !== resolveSwipeActionOpen(state, context.get(\"open\"))) context.set(\"open\", next);\n },\n close({ event, context, prop, scope }) {\n if (event.type === \"CLOSE\" && event.restoreFocus) releaseFocus(scope);\n if (resolveSwipeActionOpen(live({ prop }), context.get(\"open\")) !== null) context.set(\"open\", null);\n },\n closeIfDisabled({ context, prop }) { if (prop(\"disabled\") && side(context.get(\"open\"))) context.set(\"open\", null); },\n dragMove({ event, context }) { if (event.type === \"DRAG.MOVE\") { context.set(\"dragging\", true); context.set(\"offset\", event.offset); } },\n dragEnd({ event, context, prop }) {\n if (event.type !== \"DRAG.END\") return;\n context.set(\"dragging\", false); context.set(\"offset\", 0);\n const state = live({ prop }), next = resolveSwipeActionOpen(state, event.side);\n if (next !== resolveSwipeActionOpen(state, context.get(\"open\"))) context.set(\"open\", next);\n },\n measure({ event, context }) { if (event.type === \"MEASURE\") { context.set(\"startWidth\", event.start); context.set(\"endWidth\", event.end); } },\n activate({ event, context, prop, scope }) {\n if (event.type !== \"ACTION\") return;\n const state = live({ prop }), item = state[event.side].find((action) => action.key === event.key);\n if (!item || item.disabled || state.disabled) return;\n prop(\"onAction\")?.({ key: item.key, side: item.side });\n if (state.closeOnAction && side(context.get(\"open\"))) { releaseFocus(scope); context.set(\"open\", null); }\n },\n },\n effects: {\n trackGestures({ scope, prop, context, send }) {\n const id = ids(scope), root = scope.getById<HTMLElement>(id.root), track = scope.getById<HTMLElement>(id.track), win = root?.ownerDocument.defaultView;\n if (!root || !track || !win) return;\n const doc = root.ownerDocument;\n const openNow = () => resolveSwipeActionOpen(live({ prop }), context.get(\"open\"));\n const measure = () => {\n const start = scope.getById<HTMLElement>(id.start)?.offsetWidth ?? 0, end = scope.getById<HTMLElement>(id.end)?.offsetWidth ?? 0;\n if (start !== context.get(\"startWidth\") || end !== context.get(\"endWidth\")) send({ type: \"MEASURE\", start, end });\n };\n let gesture: { id: number; x: number; y: number; axis: GestureAxis; rtl: boolean; base: number; samples: GestureSample[]; captured: boolean } | null = null;\n let suppressClick = false;\n const logical = (dx: number, rtl: boolean) => rtl ? -dx : dx;\n const onDown = (event: PointerEvent) => {\n gesture = null;\n if (live({ prop }).disabled || (event.pointerType === \"mouse\" && event.button !== 0)) return;\n measure();\n gesture = { id: event.pointerId, x: event.clientX, y: event.clientY, axis: \"pending\", rtl: win.getComputedStyle(root).direction === \"rtl\",\n base: getSwipeActionRestOffset(openNow(), widthsOf(context, live({ prop }))), samples: [], captured: false };\n suppressClick = false;\n };\n const onMove = (event: PointerEvent) => {\n if (!gesture || event.pointerId !== gesture.id) return;\n const dx = event.clientX - gesture.x, dy = event.clientY - gesture.y;\n if (gesture.axis === \"pending\") gesture.axis = lockGestureAxis(dx, dy);\n // Vertical intent: let the page or list scroll natively and forget this gesture.\n if (gesture.axis === \"cross\") { gesture = null; return; }\n if (gesture.axis !== \"main\") return;\n if (!gesture.captured) { gesture.captured = true; try { track.setPointerCapture?.(event.pointerId); } catch { /* pointer already released */ } }\n const delta = logical(dx, gesture.rtl);\n gesture.samples.push({ position: delta, time: event.timeStamp });\n send({ type: \"DRAG.MOVE\", offset: clampSwipeActionOffset(gesture.base + delta, widthsOf(context, live({ prop }))) });\n };\n const onUp = (event: PointerEvent) => {\n if (!gesture || event.pointerId !== gesture.id) return;\n const done = gesture; gesture = null;\n if (done.axis !== \"main\") return;\n suppressClick = true;\n const delta = logical(event.clientX - done.x, done.rtl);\n done.samples.push({ position: delta, time: event.timeStamp });\n send({ type: \"DRAG.END\", side: resolveSwipeActionRelease({ open: openNow(), delta, velocity: sampleVelocity(done.samples, event.timeStamp), widths: widthsOf(context, live({ prop })) }) });\n };\n const onCancel = (event: PointerEvent) => {\n if (!gesture || event.pointerId !== gesture.id) return;\n const done = gesture; gesture = null;\n if (done.axis === \"main\") send({ type: \"DRAG.END\", side: openNow() });\n };\n // A drag never clicks; a tap on open content closes instead of activating it.\n const onContentClick = (event: Event) => {\n const inContent = !!(event.target as Element | null)?.closest?.(`[id=\"${id.content}\"]`);\n if (suppressClick || (inContent && openNow())) {\n event.preventDefault(); event.stopPropagation();\n if (!suppressClick) send({ type: \"CLOSE\" });\n }\n suppressClick = false;\n };\n const onOutside = (event: Event) => {\n const target = event.target as Node | null;\n if (openNow() && live({ prop }).closeOnTouchOutside && target && !root.contains(target)) send({ type: \"CLOSE\" });\n };\n // Keyboard alternative: focusing an action reveals its side; leaving the component closes it.\n const onFocusIn = (event: FocusEvent) => {\n const group = (event.target as Element | null)?.closest?.('[data-scope=\"swipe-action\"][data-part=\"actions\"]');\n const which = group?.getAttribute(\"data-side\");\n if ((which === \"start\" || which === \"end\") && openNow() !== which) { measure(); send({ type: \"OPEN.SET\", side: which }); }\n };\n const onFocusOut = (event: FocusEvent) => { const next = event.relatedTarget as Node | null; if (openNow() && (!next || !root.contains(next))) send({ type: \"CLOSE\" }); };\n track.addEventListener(\"pointerdown\", onDown); track.addEventListener(\"pointermove\", onMove); track.addEventListener(\"pointerup\", onUp);\n track.addEventListener(\"pointercancel\", onCancel); track.addEventListener(\"click\", onContentClick, true);\n root.addEventListener(\"focusin\", onFocusIn); root.addEventListener(\"focusout\", onFocusOut);\n doc.addEventListener(\"pointerdown\", onOutside, true);\n const Observer = win.ResizeObserver, observer = Observer ? new Observer(measure) : null;\n for (const group of [scope.getById<HTMLElement>(id.start), scope.getById<HTMLElement>(id.end)]) if (group) observer?.observe(group);\n measure();\n return () => {\n gesture = null; observer?.disconnect();\n track.removeEventListener(\"pointerdown\", onDown); track.removeEventListener(\"pointermove\", onMove); track.removeEventListener(\"pointerup\", onUp);\n track.removeEventListener(\"pointercancel\", onCancel); track.removeEventListener(\"click\", onContentClick, true);\n root.removeEventListener(\"focusin\", onFocusIn); root.removeEventListener(\"focusout\", onFocusOut);\n doc.removeEventListener(\"pointerdown\", onOutside, true);\n };\n },\n },\n },\n});\n\nexport interface QwSwipeActionApi<T extends PropTypes = PropTypes> {\n open: SwipeActionSide | null; dragging: boolean;\n startActions: ResolvedSwipeActionItem[]; endActions: ResolvedSwipeActionItem[];\n statusText: string;\n show(side?: SwipeActionSide): void; close(): void;\n getRootProps(): T[\"element\"];\n getTrackProps(): T[\"element\"];\n getActionsProps(side: SwipeActionSide): T[\"element\"];\n getActionProps(item: ResolvedSwipeActionItem): T[\"button\"];\n getContentProps(): T[\"element\"];\n getStatusProps(): T[\"element\"];\n}\nexport interface SwipeActionDomEvent { key: string; defaultPrevented: boolean; preventDefault(): void }\ntype SwipeActionCallerHandler = (event: SwipeActionDomEvent) => void;\nexport interface SwipeActionConnectOptions { onKeyDown?(event: SwipeActionDomEvent): void }\nconst callKeyDown = (handler: unknown, event: SwipeActionDomEvent) => {\n for (const item of Array.isArray(handler) ? handler : [handler]) if (typeof item === \"function\") (item as SwipeActionCallerHandler)(event);\n};\n\nexport function connectSwipeAction<T extends PropTypes>(service: QwSwipeActionService, normalize: NormalizeProps<T>, options: SwipeActionConnectOptions = {}): QwSwipeActionApi<T> {\n const state = live(service), id = ids(service.scope), open = resolveSwipeActionOpen(state, service.context.get(\"open\"));\n const dragging = service.context.get(\"dragging\"), offset = dragging ? service.context.get(\"offset\") : getSwipeActionRestOffset(open, widthsOf(service.context, state));\n const count = open ? state[open].length : 0;\n const part = (name: string) => ({ \"data-scope\": \"swipe-action\", \"data-part\": name });\n const show = (which: SwipeActionSide = state.end.length ? \"end\" : \"start\") => service.send({ type: \"OPEN.SET\", side: which });\n const close = () => service.send({ type: \"CLOSE\" });\n return {\n open, dragging, startActions: state.start, endActions: state.end,\n statusText: open ? state.openedText.replace(/\\{count\\}/g, String(count)) : \"\",\n show, close,\n getRootProps: () => normalize.element({ ...part(\"root\"), id: id.root, tabIndex: -1, \"data-state\": open ? \"open\" : \"closed\", \"data-open\": open ?? undefined,\n \"data-disabled\": state.disabled ? \"true\" : undefined, \"data-dragging\": dragging ? \"true\" : undefined,\n onKeyDown(event: SwipeActionDomEvent) {\n callKeyDown(options.onKeyDown, event);\n if (!event.defaultPrevented && event.key === \"Escape\" && open) { event.preventDefault(); service.send({ type: \"CLOSE\", restoreFocus: true }); }\n } }),\n getTrackProps: () => normalize.element({ ...part(\"track\"), id: id.track, \"data-dragging\": dragging ? \"true\" : undefined, style: { \"--qw-swipe-action-offset\": `${offset}px` } }),\n getActionsProps: (which) => normalize.element({ ...part(\"actions\"), id: id[which], \"data-side\": which, \"data-open\": open === which ? \"true\" : undefined, hidden: !state[which].length || undefined }),\n getActionProps: (item) => normalize.button({ ...part(\"action\"), type: \"button\", \"data-key\": item.key, \"data-side\": item.side, \"data-color\": item.color,\n disabled: item.disabled || state.disabled, onClick(event: { defaultPrevented: boolean }) { if (!event.defaultPrevented) service.send({ type: \"ACTION\", key: item.key, side: item.side }); } }),\n getContentProps: () => normalize.element({ ...part(\"content\"), id: id.content }),\n getStatusProps: () => normalize.element({ ...part(\"status\"), role: \"status\", \"aria-live\": \"polite\", style: visuallyHiddenStyle }),\n };\n}\n"],"mappings":"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"}