@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":"form-BAGkIEMY.js","names":["textValue"],"sources":["../src/form/ids.ts","../src/form/native.ts","../src/form/rules.ts","../src/form/form.ts","../src/form/connect.ts","../src/form/methods.ts","../src/form/ssr.ts"],"sourcesContent":["import { formFieldKey, type QwNamePath } from \"./model.js\";\n\n/** HTML form id owned by one Core instance. */\nexport function formDomId(scopeId: string): string {\n return `form:${scopeId}`;\n}\n\n/** Accessible name target for the form landmark. */\nexport function formLabelId(scopeId: string): string {\n return `form:${scopeId}:label`;\n}\n\n/**\n * Stable field stem. `formFieldKey` is the injective NamePath encoding.\n * Field root id is `field:` plus this stem.\n */\nexport function formFieldStem(scopeId: string, name: QwNamePath): string {\n return `form:${scopeId}:field:${formFieldKey(name)}`;\n}\n\n/** Actual control id shared by Input, selection and raw native inputs. */\nexport function formControlStem(scopeId: string, name: QwNamePath): string {\n return `${formFieldStem(scopeId, name)}:control`;\n}\n\n/** Field root id produced by `resolveFieldState`. */\nexport function formFieldRootId(scopeId: string, name: QwNamePath): string {\n return `field:${formFieldStem(scopeId, name)}`;\n}\n","import { addDomEvent, isDocument, isElement, isHTMLElement, isInputElement, isNode, observeChildren, setProperty } from \"@zag-js/dom-query\";\nimport type { SelectionFormScope } from \"../selection-form.js\";\nimport { formControlStem, formDomId } from \"./ids.js\";\nimport { formFieldKey, type QwFormValue, type QwNamePath } from \"./model.js\";\nimport type { QwFormFieldDefinition } from \"./types.js\";\n\nconst typedHosts = \"qw-checkbox, qw-radio-group, qw-segmented\";\n// Zag's structural HTMLElement predicate is realm-safe but also accepts SVG nodes.\nconst isHtmlElement = (node: unknown): node is HTMLElement => isHTMLElement(node) && node.namespaceURI === \"http://www.w3.org/1999/xhtml\";\n/** DOM port implemented by the Form machine. Adapters do not keep a second controller. */\nexport interface FormNativePort {\n scope: SelectionFormScope & { id?: string };\n fields(): readonly QwFormFieldDefinition[];\n value(name: QwNamePath): QwFormValue | undefined;\n change(name: QwNamePath, value: QwFormValue | undefined): void;\n blur(name: QwNamePath): void;\n reset(): void;\n suppressUser(active: boolean): void;\n bindSync(sync: (() => void) | undefined): void;\n}\nfunction textValue(value: QwFormValue | undefined): string {\n return typeof value === \"string\" ? value : typeof value === \"number\" ? String(value) : \"\";\n}\nfunction fieldByControl(port: FormNativePort, id: string): QwFormFieldDefinition | undefined {\n const scopeId = port.scope.id;\n if (!scopeId) return undefined;\n return port.fields().find((field) => formControlStem(scopeId, field.name) === id);\n}\n\n/**\n * One client lifecycle for raw inputs, supported native selection elements,\n * composite blur, and a single deferred reset transaction.\n * This listener is the only raw input/change transport. Getter props must not\n * subscribe to the same event (Vue normalizes onChange into onInput).\n * Selection controls keep their own reset listeners; user echoes are suppressed\n * until this transaction finishes so they cannot overwrite the Form reset.\n */\nexport function trackFormNative(port: FormNativePort): () => void {\n const root = port.scope.getRootNode?.();\n if (!root || typeof document === \"undefined\") return () => { port.bindSync(undefined); };\n let stopped = false;\n let refreshQueued = false;\n const cleanups: Array<() => void> = [];\n const pending = new Set<ReturnType<typeof setTimeout>>();\n const release = () => { cleanups.splice(0).forEach((cleanup) => cleanup()); };\n const sync = () => {\n if (stopped || !port.scope.id) return;\n for (const field of port.fields()) {\n const rootNode = port.scope.getRootNode();\n if (!(\"querySelectorAll\" in rootNode)) continue;\n const inputs = rootNode.querySelectorAll<HTMLInputElement>('input[data-scope=\"form\"]');\n for (const input of inputs) {\n if (!isHtmlElement(input)) continue;\n const marker = input.getAttribute(\"data-form-control\") || input.id;\n if (marker !== formControlStem(port.scope.id, field.name)) continue;\n const value = port.value(field.name);\n if (input.type === \"checkbox\") setProperty(input, \"checked\", value === true);\n else if (input.type === \"radio\") setProperty(input, \"checked\", value === input.value);\n else setProperty(input, \"value\", textValue(value));\n }\n }\n };\n port.bindSync(sync);\n const refreshSoon = () => {\n if (stopped || refreshQueued) return;\n refreshQueued = true;\n queueMicrotask(() => { refreshQueued = false; refresh(); });\n };\n function onRaw(event: Event) {\n const input = event.target;\n if (!isInputElement(input) || !isHtmlElement(input) || input.getAttribute(\"data-scope\") !== \"form\") return;\n if (isHtmlElement(input.closest(typedHosts))) return;\n const field = fieldByControl(port, input.getAttribute(\"data-form-control\") || input.id);\n if (!field) return;\n const choice = input.type === \"checkbox\" || input.type === \"radio\";\n if (choice ? event.type !== \"change\" : event.type !== \"input\") return;\n if (input.type === \"checkbox\") port.change(field.name, input.checked);\n else if (input.type === \"radio\") port.change(field.name, input.value);\n else if (field.inputType === \"number\") {\n if (!input.value.trim()) port.change(field.name, null);\n else if (Number.isFinite(input.valueAsNumber)) port.change(field.name, input.valueAsNumber);\n } else port.change(field.name, input.value);\n sync();\n }\n function onTyped(event: Event) {\n const target = event.target;\n if (!isElement(target)) return;\n const host = target.closest(typedHosts);\n if (!isHtmlElement(host) || !host.id) return;\n const field = fieldByControl(port, host.id);\n if (!field) return;\n const detail = (event as CustomEvent<{ checked?: boolean | \"indeterminate\"; value?: string | null | string[] }>).detail ?? {};\n if (field.control === \"checkbox\") port.change(field.name, detail.checked === true);\n else if (field.control === \"segmented\") port.change(field.name, Array.isArray(detail.value) ? [...detail.value] : []);\n else port.change(field.name, detail.value ?? null);\n }\n function refresh() {\n if (stopped) return;\n release();\n const form = port.scope.id ? port.scope.getById<HTMLFormElement>(formDomId(port.scope.id)) : null;\n if (!isHtmlElement(form) || form.localName !== \"form\") return;\n cleanups.push(addDomEvent(form, \"reset\", (event) => {\n const timer = setTimeout(() => {\n pending.delete(timer);\n if (stopped || event.defaultPrevented) return;\n port.suppressUser(true);\n port.reset();\n sync();\n const done = setTimeout(() => { pending.delete(done); if (!stopped) port.suppressUser(false); }, 0);\n pending.add(done);\n }, 0);\n pending.add(timer);\n }));\n cleanups.push(addDomEvent(form, \"focusout\", (event) => {\n const target = event.target;\n if (!isElement(target)) return;\n const fieldRoot = target.closest('[data-scope=\"field\"]');\n if (!isHtmlElement(fieldRoot) || !form.contains(fieldRoot)) return;\n const next = event.relatedTarget;\n if (isNode(next) && fieldRoot.contains(next)) return;\n const key = fieldRoot.getAttribute(\"data-field-key\");\n const field = port.fields().find((entry) => formFieldKey(entry.name) === key);\n if (field) port.blur(field.name);\n }));\n cleanups.push(addDomEvent(form, \"input\", onRaw));\n cleanups.push(addDomEvent(form, \"change\", onRaw));\n cleanups.push(addDomEvent(form, \"checked-change\", onTyped));\n cleanups.push(addDomEvent(form, \"value-change\", onTyped));\n sync();\n }\n const observed = isDocument(root) ? root.body : isHtmlElement(root) ? root : null;\n let stopObserve = observed ? observeChildren(observed, { callback: refreshSoon }) : undefined;\n // observeChildren's public HTMLElement contract does not include ShadowRoot.\n if (root.nodeType === 11 && \"host\" in root) {\n const Observer = root.ownerDocument.defaultView?.MutationObserver;\n if (Observer) {\n const observer = new Observer(refreshSoon);\n observer.observe(root, { childList: true, subtree: true });\n stopObserve = () => observer.disconnect();\n }\n }\n refresh();\n return () => {\n stopped = true;\n port.bindSync(undefined);\n port.suppressUser(false);\n release();\n stopObserve?.();\n pending.forEach((timer) => clearTimeout(timer));\n pending.clear();\n };\n}\n","import { cloneFormValue, formValueFingerprint, normalizeFormNamePath, type FormNamePath, type QwFormValue, type QwFormValues } from \"./model.js\";\nexport type FormValidationTrigger = \"change\" | \"blur\" | \"submit\" | \"manual\";\nexport type FormRuleType = \"string\" | \"number\" | \"boolean\" | \"array\" | \"email\" | \"url\";\nexport interface FormRuleContext { name: FormNamePath; label: string; values: Readonly<QwFormValues>; signal: AbortSignal; messages?: Partial<FormMessages> }\nexport interface FormRule {\n required?: boolean; type?: FormRuleType; min?: number; max?: number; length?: number;\n pattern?: string; flags?: string; enum?: QwFormValue[]; message?: string;\n trigger?: FormValidationTrigger | FormValidationTrigger[];\n validator?: (value: QwFormValue | undefined, context: FormRuleContext) => boolean | string | void | Promise<boolean | string | void>;\n}\nexport interface FormMessages { required: string; type: string; min: string; max: string; length: string; pattern: string; enum: string; validator: string }\nexport const FORM_DEFAULT_MESSAGES: Readonly<FormMessages> = { required: \"{label}不能为空\", type: \"{label}格式不正确\", min: \"{label}至少为{min}\", max: \"{label}最多为{max}\", length: \"{label}长度应为{length}\", pattern: \"{label}格式不正确\", enum: \"{label}不在可选范围内\", validator: \"{label}校验未通过\" };\nexport const FORM_MESSAGES_EN: Readonly<FormMessages> = { required: \"{label} is required\", type: \"{label} has an invalid format\", min: \"{label} must be at least {min}\", max: \"{label} must be at most {max}\", length: \"{label} must have length {length}\", pattern: \"{label} has an invalid format\", enum: \"{label} is not an allowed value\", validator: \"{label} failed validation\" };\nconst ruleTypes: readonly string[] = [\"string\", \"number\", \"boolean\", \"array\", \"email\", \"url\"];\nconst triggers: readonly string[] = [\"change\", \"blur\", \"submit\", \"manual\"];\nexport function normalizeFormRule(rule: FormRule): FormRule {\n if (!rule || typeof rule !== \"object\" || ![Object.prototype, null].includes(Object.getPrototypeOf(rule)) || (rule.type !== undefined && !ruleTypes.includes(rule.type))) throw new TypeError(\"Invalid Form rule type\");\n if (rule.message !== undefined && typeof rule.message !== \"string\" || rule.flags !== undefined && typeof rule.flags !== \"string\" || rule.enum !== undefined && !Array.isArray(rule.enum)) throw new TypeError(\"Invalid Form rule message, flags or enumeration\");\n for (const name of [\"min\", \"max\", \"length\"] as const) if (rule[name] !== undefined && (typeof rule[name] !== \"number\" || !Number.isFinite(rule[name]) || name === \"length\" && (!Number.isInteger(rule[name]) || rule[name]! < 0))) throw new TypeError(\"Form rule bounds must be finite and lengths nonnegative integers\");\n if (rule.validator !== undefined && typeof rule.validator !== \"function\") throw new TypeError(\"Form validators must be runtime functions\");\n if (rule.pattern !== undefined) { if (typeof rule.pattern !== \"string\") throw new TypeError(\"Form SSR patterns must be strings\"); try { new RegExp(rule.pattern, rule.flags); } catch { throw new TypeError(\"Invalid Form rule pattern or flags\"); } }\n const trigger = rule.trigger === undefined ? undefined : Array.isArray(rule.trigger) ? [...rule.trigger] : [rule.trigger];\n if (trigger?.some((value) => !triggers.includes(value))) throw new TypeError(\"Invalid Form validation trigger\");\n return { ...rule, trigger, enum: rule.enum?.map((value) => cloneFormValue(value)) };\n}\nexport function isFormEmpty(value: QwFormValue | undefined): boolean { return value === undefined || value === null || value === false || typeof value === \"string\" && !value.trim() || Array.isArray(value) && !value.length; }\nexport function formErrorMessage(error: unknown, fallback = \"校验失败\"): string { return error instanceof Error && error.message ? error.message : typeof error === \"string\" && error ? error : fallback; }\nfunction message(rule: FormRule, key: keyof FormMessages, context: FormRuleContext): string {\n const text = rule.message ?? context.messages?.[key] ?? FORM_DEFAULT_MESSAGES[key];\n const values: Record<string, string> = { label: context.label, name: normalizeFormNamePath(context.name).join(\".\"), min: String(rule.min ?? \"\"), max: String(rule.max ?? \"\"), length: String(rule.length ?? \"\") };\n return text.replace(/\\{(label|name|min|max|length)\\}/g, (_, key: string) => values[key]!);\n}\nfunction typeMatches(type: FormRuleType, value: QwFormValue): boolean {\n if (type === \"array\") return Array.isArray(value);\n if (type === \"email\") return typeof value === \"string\" && /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);\n if (type === \"url\") { if (typeof value !== \"string\") return false; try { new URL(value); return true; } catch { return false; } }\n return typeof value === type;\n}\n/** One rule returns explicit errors; request ownership is checked by the Form engine. */\nexport async function validateFormRule(input: FormRule, value: QwFormValue | undefined, context: FormRuleContext): Promise<string[]> {\n const rule = normalizeFormRule(input); if (context.signal.aborted) return [];\n if (isFormEmpty(value)) { if (rule.required) return [message(rule, \"required\", context)]; if (!rule.validator) return []; }\n const errors: string[] = [];\n if (value != null && rule.type && !typeMatches(rule.type, value)) errors.push(message(rule, \"type\", context));\n const size = typeof value === \"number\" ? value : typeof value === \"string\" || Array.isArray(value) ? value.length : undefined;\n if (size !== undefined) {\n if (rule.min !== undefined && size < rule.min) errors.push(message(rule, \"min\", context));\n if (rule.max !== undefined && size > rule.max) errors.push(message(rule, \"max\", context));\n if (rule.length !== undefined && size !== rule.length) errors.push(message(rule, \"length\", context));\n }\n if (rule.pattern !== undefined && value != null && !new RegExp(rule.pattern, rule.flags).test(String(value))) errors.push(message(rule, \"pattern\", context));\n if (rule.enum && !rule.enum.some((entry) => formValueFingerprint(entry) === formValueFingerprint(value))) errors.push(message(rule, \"enum\", context));\n if (rule.validator) {\n try { const result = await rule.validator(value === undefined ? undefined : cloneFormValue(value), context); if (result === false) errors.push(message(rule, \"validator\", context)); else if (typeof result === \"string\" && result) errors.push(result); else if (result !== undefined && result !== true && typeof result !== \"string\") errors.push(message(rule, \"validator\", context)); }\n catch (error) { if (!context.signal.aborted) errors.push(formErrorMessage(error, message(rule, \"validator\", context))); }\n }\n return context.signal.aborted ? [] : [...new Set(errors)];\n}\n","import { createMachine, type Machine, type Service } from \"@zag-js/core\";\nimport { isHTMLElement } from \"@zag-js/dom-query\";\nimport { ref } from \"@zag-js/store\";\nimport { normalizeSegmentedItems } from \"../segmented/index.js\";\nimport { formControlStem } from \"./ids.js\";\nimport { trackFormNative } from \"./native.js\";\nimport { cloneFormValue, cloneFormValues, formFieldKey, formFieldNativeName, formValueFingerprint, formValuesEqual, freezeFormValues, getFormValue, hasFormValue, mergeFormValues, normalizeFormNamePath, setFormValue, type FormNamePath, type QwFormValues, type QwNamePath, type QwFormValue } from \"./model.js\";\nimport { formErrorMessage, normalizeFormRule, validateFormRule, type FormValidationTrigger } from \"./rules.js\";\nimport type { FormCancelReason, FormErrorField, FormFieldState, FormInteractionSnapshot, FormSubmitResult, FormSubmitStatus, FormValidationResult, QwFormFieldDefinition, QwFormProps, QwFormState } from \"./types.js\";\n\ninterface Request { ticket: number; controller: AbortController }\ntype FeedbackKey = \"errors\" | \"touched\" | \"validated\" | \"validating\";\ntype FormFeedback = Pick<QwFormSchema[\"context\"], FeedbackKey>;\ninterface KnownField { name: FormNamePath; preserve?: boolean }\ninterface FormRuntime { feedback?: FormFeedback; publishingFeedback?: boolean; epoch: number; next: number; alive: boolean; validations: Map<string, Request>; submission?: Request; reason: FormCancelReason; valueHash: string; functions: WeakMap<object, number>; functionCount: number; known: Map<string, KnownField>; blurSeen: Set<string>; suppressUser: boolean; syncNative?: () => void; userEcho?: { key: string; value: string } }\nexport interface QwFormSchema {\n props: QwFormProps & { initialValues: QwFormValues; initialErrors: FormErrorField[]; validateTrigger: FormValidationTrigger | FormValidationTrigger[]; initialInteraction?: FormInteractionSnapshot };\n context: { values: QwFormValues; errors: FormErrorField[]; touched: string[]; validated: string[]; validating: string[]; submitStatus: FormSubmitStatus };\n refs: { runtime: FormRuntime };\n state: \"ready\"; event: { type: \"VALUES.SET\"; values: QwFormValues }; action: \"setValues\"; effect: \"lifecycle\" | \"trackNative\";\n}\nexport type QwFormService = Service<QwFormSchema>;\nexport type QwFormMachine = Machine<QwFormSchema>;\nconst copyErrors = (errors: readonly FormErrorField[]) => errors.map((entry) => ({ name: normalizeFormNamePath(entry.name), errors: [...entry.errors] }));\n/** Feedback is synchronous Core state; bindables publish independent rendering snapshots. */\nfunction feedbackSnapshot<K extends FeedbackKey>(key: K, value: FormFeedback[K]): FormFeedback[K] {\n const snapshot = key === \"errors\" ? copyErrors(value as FormErrorField[]) : [...value];\n if (key === \"errors\") for (const entry of snapshot as FormErrorField[]) { Object.freeze(entry.name); Object.freeze(entry.errors); Object.freeze(entry); }\n Object.freeze(snapshot);\n return ref(snapshot as FormFeedback[K]);\n}\nfunction feedback(service: Pick<QwFormService, \"context\" | \"refs\">): FormFeedback {\n const runtime = service.refs.get(\"runtime\");\n // Read projections on every getter so computed renderers retain their subscriptions.\n // Only initialization consumes them; later render snapshots never replace Core state.\n const projections = {\n errors: service.context.get(\"errors\"), touched: service.context.get(\"touched\"),\n validated: service.context.get(\"validated\"), validating: service.context.get(\"validating\"),\n };\n return runtime.feedback ??= {\n errors: feedbackSnapshot(\"errors\", projections.errors), touched: feedbackSnapshot(\"touched\", projections.touched),\n validated: feedbackSnapshot(\"validated\", projections.validated), validating: feedbackSnapshot(\"validating\", projections.validating),\n };\n}\nfunction setFeedback<K extends FeedbackKey>(service: Pick<QwFormService, \"context\" | \"refs\">, key: K, value: FormFeedback[K]): void {\n const runtime = service.refs.get(\"runtime\"), current = feedback(service);\n current[key] = feedbackSnapshot(key, value);\n const projection = feedbackSnapshot(key, current[key]);\n const previousPublishing = runtime.publishingFeedback;\n runtime.publishingFeedback = true;\n try { service.context.set(key, projection); } finally { runtime.publishingFeedback = previousPublishing; }\n}\n/** Preserve explicit low-level writes without reading later render snapshots back into Core. */\nfunction acceptFeedback<K extends FeedbackKey>(service: Pick<QwFormService, \"context\" | \"refs\">, key: K, value: FormFeedback[K]): void {\n if (!service.refs.get(\"runtime\").publishingFeedback) setFeedback(service, key, value);\n}\n/** Drop in-flight submit busy. Reconnect cannot resume the old promise. */\nexport function normalizeFormInteraction(snapshot: FormInteractionSnapshot | undefined): FormInteractionSnapshot | undefined {\n if (!snapshot) return undefined;\n const submitStatus = snapshot.submitStatus === \"validating\" || snapshot.submitStatus === \"submitting\" ? \"canceled\" : snapshot.submitStatus;\n return Object.freeze({ errors: Object.freeze(copyErrors(snapshot.errors).map((entry) => Object.freeze(entry))), touched: Object.freeze([...snapshot.touched]), validated: Object.freeze([...snapshot.validated]), submitStatus });\n}\nexport function normalizeFormFields(fields: QwFormFieldDefinition[]): QwFormFieldDefinition[] {\n const names = new Set<string>(), nativeNames = new Set<string>();\n return fields.map((field) => {\n const name = normalizeFormNamePath(field.name), key = formFieldKey(name), nativeName = field.nativeName ?? formFieldNativeName(name);\n if (names.has(key) || !nativeName.trim() || nativeNames.has(nativeName)) throw new TypeError(\"Form field paths and native names must be unique\");\n if (typeof field.label !== \"string\" || !field.label.trim()) throw new TypeError(\"Form fields require nonempty labels\");\n if ((field.control === \"radio-group\" || field.control === \"segmented\") && !field.items) throw new TypeError(\"Form selection fields require actual items\");\n names.add(key); nativeNames.add(nativeName);\n return { ...field, name, nativeName, control: field.control ?? \"native\", rules: field.rules?.map(normalizeFormRule), dependencies: field.dependencies?.map(normalizeFormNamePath), items: field.items ? normalizeSegmentedItems(field.items) : undefined, initialValue: field.initialValue === undefined ? undefined : cloneFormValue(field.initialValue) };\n });\n}\nexport function createFormProps(props: QwFormProps & { initialInteraction?: FormInteractionSnapshot }): QwFormSchema[\"props\"] {\n if (!props.label?.trim() || props.id !== undefined && !props.id.trim()) throw new TypeError(\"Form requires a nonempty label and supplied identity\");\n const fields = normalizeFormFields(props.fields), initialValues = cloneFormValues(props.initialValues);\n for (const field of fields) if (!hasFormValue(initialValues, field.name) && field.initialValue !== undefined) Object.assign(initialValues, setFormValue(initialValues, field.name, field.initialValue));\n const { initialInteraction: rawInteraction, ...rest } = props;\n const initialInteraction = normalizeFormInteraction(rawInteraction);\n return { ...rest, fields, values: props.values === undefined ? undefined : cloneFormValues(props.values), initialValues, initialErrors: copyErrors(props.initialErrors ?? []), validateTrigger: props.validateTrigger ?? \"blur\", ...(initialInteraction ? { initialInteraction } : {}) };\n}\nexport const formMachine: QwFormMachine = createMachine<QwFormSchema>({\n props: ({ props }) => createFormProps({ ...props, label: props.label ?? \"\", fields: props.fields ?? [] }),\n initialState: () => \"ready\",\n refs: () => ({ runtime: { epoch: 0, next: 0, alive: true, validations: new Map(), reason: \"cancel\", valueHash: \"\", functions: new WeakMap(), functionCount: 0, known: new Map(), blurSeen: new Set(), suppressUser: false } }),\n context({ prop, bindable, getRefs, getContext }) {\n const interaction = normalizeFormInteraction(prop(\"initialInteraction\"));\n return {\n values: bindable(() => ({ defaultValue: prop(\"initialValues\"), value: prop(\"values\"), isEqual: formValuesEqual, onChange: (values) => prop(\"onValuesChange\")?.({ values: cloneFormValues(values) }) })),\n errors: bindable(() => ({ defaultValue: feedbackSnapshot(\"errors\", interaction ? [...interaction.errors] : copyErrors(prop(\"initialErrors\"))), onChange: value => acceptFeedback({ refs: getRefs(), context: getContext() }, \"errors\", value) })),\n touched: bindable(() => ({ defaultValue: feedbackSnapshot(\"touched\", [...(interaction?.touched ?? [])]), onChange: value => acceptFeedback({ refs: getRefs(), context: getContext() }, \"touched\", value) })),\n validated: bindable(() => ({ defaultValue: feedbackSnapshot(\"validated\", [...(interaction?.validated ?? [])]), onChange: value => acceptFeedback({ refs: getRefs(), context: getContext() }, \"validated\", value) })),\n validating: bindable(() => ({ defaultValue: feedbackSnapshot(\"validating\", []), onChange: value => acceptFeedback({ refs: getRefs(), context: getContext() }, \"validating\", value) })),\n submitStatus: bindable(() => ({ defaultValue: interaction?.submitStatus ?? \"idle\" })),\n }; },\n on: { \"VALUES.SET\": { actions: [\"setValues\"] } }, states: { ready: {} }, effects: [\"lifecycle\", \"trackNative\"],\n watch({ track, context, prop, refs }) {\n const runtime = refs.get(\"runtime\");\n track([() => context.hash(\"values\")], () => { const hash = formValueFingerprint(context.get(\"values\")); if (runtime.valueHash && runtime.valueHash !== hash) cancelRequests({ context, refs, prop } as QwFormService, \"values-change\"); runtime.valueHash = hash; runtime.syncNative?.(); });\n track([() => JSON.stringify(prop(\"fields\"), (_, value: unknown) => {\n if (typeof value !== \"function\") return value;\n let id = runtime.functions.get(value); if (!id) { id = ++runtime.functionCount; runtime.functions.set(value, id); } return `validator:${id}`;\n })], () => { const service = { context, refs, prop } as QwFormService; cancelRequests(service, \"fields-change\"); reconcileFormFields(service); });\n },\n implementations: {\n effects: {\n lifecycle({ context, refs, prop }) { const runtime = refs.get(\"runtime\"); runtime.alive = true; runtime.valueHash = formValueFingerprint(context.get(\"values\")); runtime.known = captureKnown(prop(\"fields\")); return () => { cancelRequests({ context, refs, prop } as QwFormService, \"unmount\"); runtime.alive = false; }; },\n trackNative(params) {\n const service = params as unknown as QwFormService;\n const behavior = connectFormBehavior(service);\n return trackFormNative({\n scope: service.scope, fields: () => service.prop(\"fields\"), value: (name) => behavior.getFieldValue(name),\n change: (name, value) => behavior.changeFieldFromUser(name, value), blur: (name) => behavior.blurField(name), reset: () => behavior.resetFields(),\n suppressUser: (active) => { service.refs.get(\"runtime\").suppressUser = active; },\n bindSync: (sync) => { service.refs.get(\"runtime\").syncNative = sync; },\n });\n },\n },\n actions: { setValues({ event, context }) { if (event.type === \"VALUES.SET\") context.set(\"values\", cloneFormValues(event.values)); } },\n },\n});\nfunction cancelRequests(service: Pick<QwFormService, \"context\" | \"refs\" | \"prop\">, reason: FormCancelReason) {\n const runtime = service.refs.get(\"runtime\"); runtime.epoch++; runtime.reason = reason;\n runtime.validations.forEach((request) => request.controller.abort()); runtime.validations.clear(); setFeedback(service, \"validating\", []);\n if (runtime.submission) { runtime.submission.controller.abort(); runtime.submission = undefined; service.context.set(\"submitStatus\", \"canceled\"); if (reason !== \"unmount\") service.prop(\"onSubmitCancel\")?.({ reason }); }\n}\n/** Await cancellation even when user code does not observe its AbortSignal. */\nfunction abortable<T>(promise: Promise<T>, signal: AbortSignal): Promise<T | undefined> {\n return new Promise((resolve, reject) => {\n if (signal.aborted) { promise.then(() => {}, () => {}); resolve(undefined); return; }\n const abort = () => resolve(undefined); signal.addEventListener(\"abort\", abort, { once: true });\n promise.then((value) => { signal.removeEventListener(\"abort\", abort); resolve(value); }, (error) => { signal.removeEventListener(\"abort\", abort); reject(error); });\n });\n}\nfunction captureKnown(fields: readonly QwFormFieldDefinition[]): Map<string, KnownField> {\n return new Map(fields.map((field) => [formFieldKey(field.name), { name: normalizeFormNamePath(field.name), preserve: field.preserve }]));\n}\n/** Drop preserve=false values and seed newly added field.initialValue. Keeps every other stored value. */\nfunction reconcileFormFields(service: Pick<QwFormService, \"context\" | \"refs\" | \"prop\">): void {\n const runtime = service.refs.get(\"runtime\"), nextFields = service.prop(\"fields\"), known = runtime.known;\n let values = cloneFormValues(service.context.get(\"values\"));\n let changed = false;\n const removed: string[] = [];\n const nextKeys = new Set(nextFields.map((field) => formFieldKey(field.name)));\n for (const [key, previous] of known) {\n if (nextKeys.has(key)) continue;\n removed.push(key);\n if (previous.preserve === false) { values = setFormValue(values, previous.name, undefined); changed = true; }\n }\n for (const field of nextFields) {\n if (known.has(formFieldKey(field.name)) || field.initialValue === undefined || hasFormValue(values, field.name)) continue;\n values = setFormValue(values, field.name, field.initialValue); changed = true;\n }\n if (changed) { runtime.valueHash = formValueFingerprint(values); service.context.set(\"values\", values); }\n if (removed.length) {\n setFeedback(service, \"errors\", feedback(service).errors.filter((entry) => !removed.includes(formFieldKey(entry.name))));\n setFeedback(service, \"touched\", feedback(service).touched.filter((key) => !removed.includes(key)));\n setFeedback(service, \"validated\", feedback(service).validated.filter((key) => !removed.includes(key)));\n setFeedback(service, \"validating\", feedback(service).validating.filter((key) => !removed.includes(key)));\n }\n runtime.known = captureKnown(nextFields);\n}\nfunction enabledChoice(field: QwFormFieldDefinition, value: string): boolean {\n return !!field.items?.some((item) => item.value === value && !item.disabled);\n}\n/** Unknown and disabled choices stay stored but are not fabricated into the submit snapshot. */\nexport function submittedFieldValue(field: QwFormFieldDefinition, value: QwFormValue | undefined): { include: boolean; value?: QwFormValue } {\n if (field.control === \"checkbox\" || field.inputType === \"checkbox\") return typeof value === \"boolean\" ? { include: true, value } : { include: false };\n if (field.control === \"radio-group\") {\n if (value === null) return { include: true, value: null };\n if (typeof value === \"string\" && enabledChoice(field, value)) return { include: true, value };\n return { include: false };\n }\n if (field.control === \"segmented\") {\n const selected = Array.isArray(value) ? value.filter((item): item is string => typeof item === \"string\" && enabledChoice(field, item)) : [];\n return { include: true, value: selected };\n }\n return value === undefined ? { include: false } : { include: true, value };\n}\nfunction focusableControl(node: HTMLElement): HTMLElement | null {\n if (!isHTMLElement(node) || node.namespaceURI !== \"http://www.w3.org/1999/xhtml\") return null;\n const nodes = [node, ...node.querySelectorAll<HTMLElement>(\"input, select, textarea, button, a[href], [tabindex]\")];\n for (const candidate of nodes) {\n if (!isHTMLElement(candidate) || candidate.namespaceURI !== \"http://www.w3.org/1999/xhtml\") continue;\n if (candidate.hasAttribute(\"disabled\") || candidate.getAttribute(\"aria-disabled\") === \"true\") continue;\n if (candidate.getAttribute(\"role\") === \"group\" && !candidate.hasAttribute(\"tabindex\")) continue;\n const tab = candidate.getAttribute(\"tabindex\");\n if (tab === \"-1\") continue;\n const native = [\"input\", \"select\", \"textarea\", \"button\"].includes(candidate.localName) || (candidate.localName === \"a\" && candidate.hasAttribute(\"href\"));\n if (native || tab !== null) return candidate;\n }\n return null;\n}\n/** Headless behavior API; DOM/getter transport is composed separately. */\nexport function connectFormBehavior(service: QwFormService) {\n const runtime = service.refs.get(\"runtime\");\n const fields = () => service.prop(\"fields\");\n const resolve = (name: QwNamePath) => { const key = formFieldKey(name), field = fields().find((entry) => formFieldKey(entry.name) === key); if (!field) throw new RangeError(\"Form field is not registered\"); return field; };\n const getValues = () => cloneFormValues(service.context.get(\"values\"));\n const getFieldState = (name: QwNamePath): FormFieldState => {\n const field = resolve(name), key = formFieldKey(name), errors = feedback(service).errors.find((entry) => formFieldKey(entry.name) === key)?.errors ?? [];\n return { name: normalizeFormNamePath(name), value: getFormValue(getValues(), name), errors: [...errors], touched: feedback(service).touched.includes(key), dirty: formValueFingerprint(getFormValue(getValues(), name)) !== formValueFingerprint(getFormValue(service.prop(\"initialValues\"), name)),\n validationStatus: feedback(service).validating.includes(key) ? \"validating\" : errors.length ? \"invalid\" : feedback(service).validated.includes(key) ? \"valid\" : \"unvalidated\",\n disabled: !!service.prop(\"disabled\") || !!field.disabled, readOnly: !!service.prop(\"readOnly\") || !!field.readOnly, required: !!field.required || !!field.rules?.some((rule) => rule.required) };\n };\n const getState = (): QwFormState => ({ values: getValues(), fieldStates: fields().map((field) => getFieldState(field.name)), submitting: [\"validating\", \"submitting\"].includes(service.context.get(\"submitStatus\")), submitStatus: service.context.get(\"submitStatus\") });\n const getInteractionSnapshot = (): FormInteractionSnapshot => Object.freeze({ errors: Object.freeze(copyErrors(feedback(service).errors).map((entry) => Object.freeze(entry))), touched: Object.freeze([...feedback(service).touched]), validated: Object.freeze([...feedback(service).validated]), submitStatus: service.context.get(\"submitStatus\") });\n const notify = () => service.prop(\"onValidationChange\")?.({ state: getState() });\n const clearErrors = (keys: string[]) => { setFeedback(service, \"errors\", feedback(service).errors.filter((entry) => !keys.includes(formFieldKey(entry.name)))); setFeedback(service, \"validated\", feedback(service).validated.filter((key) => !keys.includes(key))); };\n const alive = () => { if (!runtime.alive) throw new TypeError(\"Form instance is stopped\"); };\n const fieldTriggers = (field: QwFormFieldDefinition): FormValidationTrigger[] => { const source = field.validateTrigger ?? service.prop(\"validateTrigger\"); return Array.isArray(source) ? source : [source]; };\n const markTouched = (name: QwNamePath) => { const key = formFieldKey(name); if (!feedback(service).touched.includes(key)) setFeedback(service, \"touched\", [...feedback(service).touched, key]); };\n const initialFieldValue = (name: QwNamePath): QwFormValue | undefined => { const field = resolve(name); return hasFormValue(service.prop(\"initialValues\"), field.name) ? getFormValue(service.prop(\"initialValues\"), field.name) : field.initialValue; };\n const mutate = (values: QwFormValues, names: QwNamePath[] = []) => { alive(); const next = cloneFormValues(values); cancelRequests(service, \"values-change\"); clearErrors(names.map(formFieldKey)); service.context.set(\"values\", next); runtime.valueHash = formValueFingerprint(service.context.get(\"values\")); notify(); };\n const dependentNames = (name: QwNamePath): QwNamePath[] => { const key = formFieldKey(name); return fields().filter((field) => field.dependencies?.some((dependency) => formFieldKey(dependency) === key) && (getFieldState(field.name).touched || !!getFieldState(field.name).errors.length)).map((field) => field.name); };\n const setFieldValue = (name: QwNamePath, value: QwFormValue | undefined) => { const next = setFormValue(getValues(), name, value); if (formValueFingerprint(getValues()) === formValueFingerprint(next)) return; mutate(next, [name]); const names = dependentNames(name); if (names.length) void validateFields(names, { trigger: \"change\" }); };\n const changeFieldFromUser = (name: QwNamePath, value: QwFormValue | undefined) => {\n alive(); const field = resolve(name), state = getFieldState(name);\n if (state.disabled || state.readOnly || runtime.suppressUser) return;\n const echoKey = formFieldKey(name), echoValue = formValueFingerprint(value);\n if (runtime.userEcho?.key === echoKey && runtime.userEcho.value === echoValue) return;\n runtime.userEcho = { key: echoKey, value: echoValue };\n queueMicrotask(() => { if (runtime.userEcho?.key === echoKey && runtime.userEcho.value === echoValue) runtime.userEcho = undefined; });\n const hadErrors = state.errors.length > 0, next = setFormValue(getValues(), name, value), same = formValueFingerprint(getValues()) === formValueFingerprint(next);\n if (!same) mutate(next, [name]);\n markTouched(name);\n const names: QwNamePath[] = [];\n if (!same && (fieldTriggers(field).includes(\"change\") || hadErrors)) names.push(field.name);\n names.push(...dependentNames(name).filter((dependency) => !names.some((entry) => formFieldKey(entry) === formFieldKey(dependency))));\n if (names.length) void validateFields(names, { trigger: \"change\" });\n };\n const blurField = (name: QwNamePath) => {\n alive(); const field = resolve(name), key = formFieldKey(name), state = getFieldState(name);\n if (state.disabled || runtime.suppressUser) return;\n if (runtime.blurSeen.has(key)) return;\n runtime.blurSeen.add(key); queueMicrotask(() => runtime.blurSeen.delete(key));\n markTouched(name); notify();\n if (fieldTriggers(field).includes(\"blur\")) void validateFields([name], { trigger: \"blur\" });\n };\n const focusField = (name: QwNamePath): boolean => {\n resolve(name);\n const scopeId = service.scope.id;\n if (typeof document === \"undefined\" || !scopeId) return false;\n const node = service.scope.getById<HTMLElement>(formControlStem(scopeId, name));\n const target = node ? focusableControl(node) : null;\n if (!target) return false;\n target.focus();\n return true;\n };\n const setFieldErrors = (name: QwNamePath, errors: string[]) => {\n alive(); resolve(name); const key = formFieldKey(name); runtime.validations.get(key)?.controller.abort(); runtime.validations.delete(key);\n setFeedback(service, \"validating\", feedback(service).validating.filter((entry) => entry !== key));\n setFeedback(service, \"errors\", [...feedback(service).errors.filter((entry) => formFieldKey(entry.name) !== key), { name: normalizeFormNamePath(name), errors: [...errors] }]); notify();\n };\n const validateFields = async (names?: QwNamePath[], options: { validateOnly?: boolean; trigger?: FormValidationTrigger } = {}): Promise<FormValidationResult> => {\n alive(); const epoch = runtime.epoch, values = getValues(), snapshot = freezeFormValues(values), chosen = names ? names.map(resolve) : fields();\n const results = await Promise.all(chosen.filter((field) => !getFieldState(field.name).disabled).map(async (field) => {\n const key = formFieldKey(field.name); runtime.validations.get(key)?.controller.abort(); const request = { ticket: ++runtime.next, controller: new AbortController() }; runtime.validations.set(key, request);\n if (!options.validateOnly) setFeedback(service, \"validating\", [...new Set([...feedback(service).validating, key])]);\n const value = getFormValue(values, field.name), errors: string[] = [], rules = [...(field.required ? [{ required: true }] : []), ...(field.rules ?? [])];\n for (const rule of rules) {\n const trigger = options.trigger ?? \"manual\", triggers = rule.trigger === undefined ? undefined : Array.isArray(rule.trigger) ? rule.trigger : [rule.trigger];\n if (trigger !== \"submit\" && trigger !== \"manual\" && triggers && !triggers.includes(trigger)) continue;\n let tested = value;\n if (rule.required && field.control === \"checkbox\" && tested !== true) tested = undefined;\n if (rule.required && (field.control === \"radio-group\" || field.control === \"segmented\")) {\n const enabled = field.items?.filter((item) => !item.disabled) ?? [];\n if (!enabled.length) continue;\n if (!enabled.some((item) => Array.isArray(tested) ? tested.includes(item.value) : tested === item.value)) tested = undefined;\n }\n const result = await abortable(validateFormRule(rule, tested, { name: normalizeFormNamePath(field.name), label: field.label, values: snapshot, signal: request.controller.signal, messages: service.prop(\"messages\") }), request.controller.signal);\n if (result) errors.push(...result); if (request.controller.signal.aborted || service.prop(\"validateFirst\") && errors.length) break;\n }\n const current = runtime.alive && runtime.epoch === epoch && runtime.validations.get(key)?.ticket === request.ticket && !request.controller.signal.aborted;\n if (current) {\n runtime.validations.delete(key); setFeedback(service, \"validating\", feedback(service).validating.filter((entry) => entry !== key));\n if (!options.validateOnly) { setFeedback(service, \"errors\", [...feedback(service).errors.filter((entry) => formFieldKey(entry.name) !== key), { name: normalizeFormNamePath(field.name), errors: [...new Set(errors)] }]); setFeedback(service, \"validated\", [...new Set([...feedback(service).validated, key])]); }\n notify();\n }\n return { current, name: normalizeFormNamePath(field.name), errors: [...new Set(errors)] };\n }));\n const outOfDate = !runtime.alive || runtime.epoch !== epoch || results.some((result) => !result.current);\n return { values, errorFields: results.filter((result) => result.errors.length).map(({ name, errors }) => ({ name, errors })), outOfDate, canceled: outOfDate };\n };\n const resetFields = (names?: QwNamePath[]) => {\n alive(); cancelRequests(service, \"reset\"); const targets = names ? names.map(resolve) : fields(); let values = names ? getValues() : cloneFormValues(service.prop(\"initialValues\"));\n for (const field of targets) if (names || !hasFormValue(values, field.name)) values = setFormValue(values, field.name, initialFieldValue(field.name));\n const keys = targets.map((field) => formFieldKey(field.name)); clearErrors(keys); setFeedback(service, \"touched\", feedback(service).touched.filter((key) => !keys.includes(key))); service.context.set(\"values\", values); runtime.valueHash = formValueFingerprint(service.context.get(\"values\")); service.context.set(\"submitStatus\", \"idle\"); notify();\n };\n const submit = async (): Promise<FormSubmitResult> => {\n alive(); cancelRequests(service, \"superseded\"); const request = { ticket: ++runtime.next, controller: new AbortController() }; runtime.submission = request; service.context.set(\"submitStatus\", \"validating\"); notify();\n const validation = await validateFields(undefined, { trigger: \"submit\" });\n const current = () => runtime.alive && runtime.submission?.ticket === request.ticket && !request.controller.signal.aborted;\n /** Drop only the submission this call still owns. A newer submit must keep its busy state. */\n const canceled = (): FormSubmitResult => {\n if (runtime.submission?.ticket === request.ticket) {\n const owned = runtime.submission;\n runtime.submission = undefined;\n owned.controller.abort();\n if (!runtime.submission) {\n service.context.set(\"submitStatus\", \"canceled\");\n service.prop(\"onSubmitCancel\")?.({ reason: runtime.reason });\n if (!runtime.submission) notify();\n }\n }\n return { status: \"canceled\", values: validation.values, errorFields: [], reason: runtime.reason };\n };\n if (!current() || validation.outOfDate) return canceled();\n if (validation.errorFields.length) {\n runtime.submission = undefined; service.context.set(\"submitStatus\", \"invalid\"); service.prop(\"onValidationFailed\")?.({ values: cloneFormValues(validation.values), errorFields: copyErrors(validation.errorFields) }); notify();\n if (service.prop(\"focusFirstError\")) for (const field of fields()) if (validation.errorFields.some((entry) => formFieldKey(entry.name) === formFieldKey(field.name)) && focusField(field.name)) break;\n return { status: \"invalid\", values: validation.values, errorFields: validation.errorFields };\n }\n let values: QwFormValues = {};\n for (const field of fields()) {\n if (getFieldState(field.name).disabled) continue;\n const submitted = submittedFieldValue(field, getFormValue(validation.values, field.name));\n if (submitted.include) values = setFormValue(values, field.name, submitted.value);\n }\n service.context.set(\"submitStatus\", \"submitting\"); notify();\n try {\n await abortable(Promise.resolve(service.prop(\"onSubmit\")?.(cloneFormValues(values), { signal: request.controller.signal })), request.controller.signal);\n if (!current()) return canceled(); runtime.submission = undefined; service.context.set(\"submitStatus\", \"success\"); service.prop(\"onSubmitSuccess\")?.({ values: cloneFormValues(values) }); notify(); return { status: \"success\", values, errorFields: [] };\n } catch (error) {\n if (!current()) return canceled(); runtime.submission = undefined; service.context.set(\"submitStatus\", \"error\"); const text = formErrorMessage(error, \"提交失败\"); service.prop(\"onSubmitError\")?.({ values: cloneFormValues(values), error: text }); notify(); return { status: \"error\", values, errorFields: [], error: text };\n }\n };\n const setFieldsValue = (patch: QwFormValues) => {\n const before = getValues(), next = mergeFormValues(before, patch);\n if (formValueFingerprint(before) === formValueFingerprint(next)) return;\n const changed = fields().filter((field) => formValueFingerprint(getFormValue(before, field.name)) !== formValueFingerprint(getFormValue(next, field.name))).map((field) => field.name);\n mutate(next, changed);\n const names = changed.flatMap((name) => dependentNames(name));\n if (names.length) void validateFields(names, { trigger: \"change\" });\n };\n return { get values() { return getValues(); }, get state() { return getState(); }, getValues, getState, getFieldState, getInteractionSnapshot, getFieldValue: (name: QwNamePath) => getFormValue(getValues(), name), setFieldValue, setFieldsValue, setFieldErrors, validateFields, resetFields, submit, cancelSubmit: () => { alive(); cancelRequests(service, \"cancel\"); notify(); }, changeFieldFromUser, blurField, focusField, initialFieldValue };\n}\n","import type { NormalizeProps, PropTypes } from \"@zag-js/types\";\nimport { resolveFieldState, type FieldLabelMode } from \"../field/field.js\";\nimport { connectFormBehavior, type QwFormService } from \"./form.js\";\nimport { formControlStem, formDomId, formFieldRootId, formFieldStem, formLabelId } from \"./ids.js\";\nimport { formFieldKey, type QwFormValue, type QwNamePath } from \"./model.js\";\nimport type { QwFormApi, QwFormFieldDefinition } from \"./types.js\";\n\nexport const FORM_PARTS = [\"root\", \"label\", \"content\", \"error-summary\", \"error-list\", \"error-item\", \"error-link\", \"footer\"] as const;\nconst part = (name: (typeof FORM_PARTS)[number]) => ({ \"data-scope\": \"form\" as const, \"data-part\": name });\nfunction defined<T extends Record<string, unknown>>(props: T): T {\n return Object.fromEntries(Object.entries(props).filter(([, value]) => value !== undefined)) as T;\n}\nfunction labelModeFor(field: QwFormFieldDefinition, readOnly: boolean): FieldLabelMode {\n if (field.control === \"checkbox\" || field.control === \"radio-group\" || field.control === \"segmented\") return \"control\";\n if (field.control === \"custom\" || (field.control === \"input\" && readOnly)) return \"custom\";\n return \"label\";\n}\nfunction textValue(value: QwFormValue | undefined): string {\n return typeof value === \"string\" ? value : typeof value === \"number\" ? String(value) : \"\";\n}\nfunction choiceItems(field: QwFormFieldDefinition) {\n return (field.items ?? []).map((item) => ({ ...item }));\n}\n\n/** Public connect. Named connectForm so package barrels do not hide other connects. */\nexport function connectForm<T extends PropTypes>(service: QwFormService, normalize: NormalizeProps<T>): QwFormApi<T> {\n const behavior = connectFormBehavior(service);\n const active = () => service.refs.get(\"runtime\").alive;\n const scopeId = service.scope.id;\n if (!scopeId) throw new TypeError(\"Form requires a stable scope id\");\n const formId = formDomId(scopeId);\n const link = (name: QwNamePath) => {\n const state = behavior.getFieldState(name);\n const definition = service.prop(\"fields\").find((entry) => formFieldKey(entry.name) === formFieldKey(name));\n if (!definition) throw new RangeError(\"Form field is not registered\");\n const controlId = formControlStem(scopeId, name);\n const fieldProps = {\n id: formFieldStem(scopeId, name), name: state.name, label: definition.label, description: definition.description, errors: state.errors, controlId,\n labelMode: labelModeFor(definition, state.readOnly), required: state.required, disabled: state.disabled, invalid: state.errors.length > 0, validating: state.validationStatus === \"validating\",\n };\n return { definition, state, controlId, fieldProps, resolved: resolveFieldState(fieldProps) };\n };\n const hasErrors = () => behavior.state.fieldStates.some((field) => field.errors.length > 0);\n return {\n get values() { return behavior.values; },\n get state() { return behavior.state; },\n getValues: () => behavior.getValues(),\n getFieldValue: (name) => behavior.getFieldValue(name),\n getFieldState: (name) => behavior.getFieldState(name),\n getInteractionSnapshot: () => behavior.getInteractionSnapshot(),\n setFieldValue: (name, value) => behavior.setFieldValue(name, value),\n setFieldsValue: (values) => behavior.setFieldsValue(values),\n setFieldErrors: (name, errors) => behavior.setFieldErrors(name, errors),\n validateFields: (names, options) => behavior.validateFields(names, options),\n submit: () => behavior.submit(),\n cancelSubmit: () => behavior.cancelSubmit(),\n resetFields: (names) => behavior.resetFields(names),\n focusField: (name) => behavior.focusField(name),\n getRootProps: () => normalize.element(defined({ ...part(\"root\"), id: formId, noValidate: true, \"aria-labelledby\": formLabelId(scopeId), \"aria-busy\": behavior.state.submitting || undefined, \"data-disabled\": service.prop(\"disabled\") ? \"\" : undefined, \"data-readonly\": service.prop(\"readOnly\") ? \"\" : undefined, \"data-invalid\": hasErrors() ? \"\" : undefined, onSubmit(event: { preventDefault(): void }) { if (!active()) return; event.preventDefault(); void behavior.submit(); } })),\n getLabelProps: () => normalize.element({ ...part(\"label\"), id: formLabelId(scopeId) }),\n getContentProps: () => normalize.element(part(\"content\")),\n getErrorSummaryProps: () => normalize.element(defined({ ...part(\"error-summary\"), id: `${formId}:error-summary`, role: \"alert\", hidden: hasErrors() ? undefined : true })),\n getErrorListProps: () => normalize.element(part(\"error-list\")),\n getErrorItemProps: (name) => { const state = behavior.getFieldState(name); return normalize.element({ ...part(\"error-item\"), \"data-field-key\": formFieldKey(state.name) }); },\n getErrorLinkProps: (name) => normalize.element({ ...part(\"error-link\"), href: `#${formControlStem(scopeId, name)}`, onClick(event: { preventDefault(): void }) { if (!active()) return; event.preventDefault(); behavior.focusField(name); } }),\n getFooterProps: () => normalize.element(part(\"footer\")),\n getFieldProps: (name) => link(name).fieldProps,\n getInputProps: (name) => {\n const current = link(name);\n return {\n id: current.controlId, readOnly: current.state.readOnly, value: textValue(current.state.value),\n onChange(next: string) {\n if (!active()) return;\n if (current.definition.inputType === \"number\") {\n if (!next.trim()) { behavior.changeFieldFromUser(name, null); return; }\n const numeric = Number(next);\n if (Number.isFinite(numeric)) behavior.changeFieldFromUser(name, numeric);\n return;\n }\n behavior.changeFieldFromUser(name, next);\n },\n onBlur() { if (active()) behavior.blurField(name); },\n control: defined({ id: current.controlId, name: current.definition.nativeName, form: formId, disabled: current.state.disabled || undefined, required: current.state.required || undefined, labelledBy: current.resolved.labelId, describedBy: current.resolved.describedBy, invalid: current.state.errors.length > 0 || undefined }),\n };\n },\n getCheckboxProps: (name) => {\n const current = link(name), initial = behavior.initialFieldValue(name);\n return defined({\n id: current.controlId, label: current.definition.label, description: current.definition.controlDescription, describedBy: current.resolved.describedBy,\n checked: current.state.value === true, defaultChecked: initial === true, disabled: current.state.disabled, readOnly: current.state.readOnly,\n required: current.state.required, invalid: current.state.errors.length > 0, name: current.definition.nativeName, form: formId,\n onCheckedChange: (details: { checked: boolean | \"indeterminate\" }) => { if (active()) behavior.changeFieldFromUser(name, details.checked === true); },\n });\n },\n getRadioGroupProps: (name) => {\n const current = link(name), initial = behavior.initialFieldValue(name);\n if (!current.definition.items) throw new TypeError(\"Form radio fields require actual items\");\n return defined({\n id: current.controlId, label: current.definition.label, description: current.definition.controlDescription, describedBy: current.resolved.describedBy, items: choiceItems(current.definition),\n value: typeof current.state.value === \"string\" ? current.state.value : null, defaultValue: typeof initial === \"string\" ? initial : null,\n disabled: current.state.disabled, readOnly: current.state.readOnly, required: current.state.required, invalid: current.state.errors.length > 0,\n name: current.definition.nativeName, form: formId, onValueChange: (details: { value: string | null }) => { if (active()) behavior.changeFieldFromUser(name, details.value); },\n });\n },\n getSegmentedProps: (name) => {\n const current = link(name), initial = behavior.initialFieldValue(name);\n if (!current.definition.items) throw new TypeError(\"Form segmented fields require actual items\");\n const value = Array.isArray(current.state.value) ? current.state.value.filter((item): item is string => typeof item === \"string\") : [];\n const fallback = Array.isArray(initial) ? initial.filter((item): item is string => typeof item === \"string\") : [];\n return defined({\n id: current.controlId, label: current.definition.label, description: current.definition.controlDescription, describedBy: current.resolved.describedBy, items: choiceItems(current.definition),\n selectionMode: current.definition.selectionMode ?? \"single\", value, defaultValue: fallback, disabled: current.state.disabled, readOnly: current.state.readOnly,\n required: current.state.required, invalid: current.state.errors.length > 0, name: current.definition.nativeName, form: formId,\n onValueChange: (details: { value: string[] }) => { if (active()) behavior.changeFieldFromUser(name, [...details.value]); },\n });\n },\n getNativeControlProps: (name) => {\n const current = link(name), checkbox = current.definition.inputType === \"checkbox\" || current.definition.control === \"checkbox\";\n return normalize.input(defined({\n \"data-scope\": \"form\", \"data-part\": \"control\", id: current.controlId, name: current.definition.nativeName, form: formId, type: checkbox ? \"checkbox\" : current.definition.inputType ?? \"text\",\n value: checkbox ? undefined : textValue(current.state.value), checked: checkbox ? current.state.value === true : undefined,\n disabled: current.state.disabled || undefined, readOnly: current.state.readOnly || undefined, required: current.state.required || undefined,\n \"aria-labelledby\": current.resolved.labelId, \"aria-describedby\": current.resolved.describedBy, \"aria-invalid\": current.state.errors.length > 0 || undefined,\n \"aria-required\": current.state.required || undefined, \"data-field-root\": formFieldRootId(scopeId, name),\n onBlur() { if (active()) behavior.blurField(name); },\n // React warns when `value` has no onChange. Vue turns onChange into onInput, so this must stay inert; trackFormNative owns the edit.\n onChange() {},\n }));\n },\n getReadonlyProps: (name) => {\n const current = link(name);\n return normalize.element(defined({\n \"data-scope\": \"form\", \"data-part\": \"control\", id: current.controlId, role: \"group\",\n \"aria-labelledby\": current.resolved.labelId, \"aria-describedby\": current.resolved.describedBy,\n \"aria-invalid\": current.state.errors.length > 0 || undefined,\n }));\n },\n getNativeElementProps: (name) => {\n const current = link(name), initial = behavior.initialFieldValue(name);\n const common = defined({\n id: current.controlId, label: current.definition.label, description: current.definition.controlDescription, describedBy: current.resolved.describedBy,\n name: current.definition.nativeName, form: formId, disabled: current.state.disabled, readOnly: current.state.readOnly, required: current.state.required, invalid: current.state.errors.length > 0,\n });\n if (current.definition.control === \"checkbox\") return { ...common, checked: current.state.value === true, defaultChecked: initial === true };\n if (current.definition.control === \"radio-group\") return { ...common, items: choiceItems(current.definition), value: typeof current.state.value === \"string\" ? current.state.value : null, defaultValue: typeof initial === \"string\" ? initial : null };\n if (current.definition.control === \"segmented\") {\n const value = Array.isArray(current.state.value) ? current.state.value.filter((item): item is string => typeof item === \"string\") : [];\n const fallback = Array.isArray(initial) ? initial.filter((item): item is string => typeof item === \"string\") : [];\n return { ...common, items: choiceItems(current.definition), selectionMode: current.definition.selectionMode ?? \"single\", value, defaultValue: fallback };\n }\n return { ...common, type: current.definition.inputType ?? \"text\", value: textValue(current.state.value) };\n },\n };\n}\n","import type { QwFormValue, QwFormValues, QwNamePath } from \"./model.js\";\nimport type { FormValidationTrigger } from \"./rules.js\";\nimport type { QwFormApi } from \"./types.js\";\n\n/** Live Core dispatch for a connected native method. Unknown names throw. */\nexport function invokeFormApi(api: QwFormApi, method: string, args: readonly unknown[] = []): unknown {\n switch (method) {\n case \"getValues\": return api.getValues();\n case \"getFieldValue\": return api.getFieldValue(args[0] as QwNamePath);\n case \"getFieldState\": return api.getFieldState(args[0] as QwNamePath);\n case \"setFieldValue\": api.setFieldValue(args[0] as QwNamePath, args[1] as QwFormValue | undefined); return undefined;\n case \"setFieldsValue\": api.setFieldsValue(args[0] as QwFormValues); return undefined;\n case \"setFieldErrors\": api.setFieldErrors(args[0] as QwNamePath, [...(args[1] as string[])]); return undefined;\n case \"validateFields\": return api.validateFields(args[0] as QwNamePath[] | undefined, args[1] as { validateOnly?: boolean; trigger?: FormValidationTrigger } | undefined);\n case \"submit\": return api.submit();\n case \"cancelSubmit\": api.cancelSubmit(); return undefined;\n case \"resetFields\": api.resetFields(args[0] as QwNamePath[] | undefined); return undefined;\n case \"focusField\": return api.focusField(args[0] as QwNamePath);\n case \"getFieldProps\": return api.getFieldProps(args[0] as QwNamePath);\n case \"getInputProps\": return api.getInputProps(args[0] as QwNamePath);\n case \"getCheckboxProps\": return api.getCheckboxProps(args[0] as QwNamePath);\n case \"getRadioGroupProps\": return api.getRadioGroupProps(args[0] as QwNamePath);\n case \"getSegmentedProps\": return api.getSegmentedProps(args[0] as QwNamePath);\n case \"getNativeControlProps\": return api.getNativeControlProps(args[0] as QwNamePath);\n case \"getNativeElementProps\": return api.getNativeElementProps(args[0] as QwNamePath);\n case \"getReadonlyProps\": return api.getReadonlyProps(args[0] as QwNamePath);\n default: throw new TypeError(`Unknown Form method: ${method}`);\n }\n}\n\n/** Hosts call this before invoke. Disconnected or not-yet-ready calls throw. */\nexport function assertFormMethodReady(ready: boolean): void {\n if (!ready) throw new TypeError(\"Form method is unavailable until the element is connected and updateComplete has resolved\");\n}\n","import type { QwFormProps } from \"./types.js\";\n\n/**\n * SSR accepts builtin JSON rules only.\n * Custom validators and business handlers are runtime values: encountering one throws.\n * Nothing is eval'd or silently dropped.\n */\nexport function assertFormSsrProps(props: QwFormProps): void {\n const visit = (value: unknown, path: string): void => {\n if (typeof value === \"function\") throw new TypeError(`Form SSR cannot accept a runtime function at ${path}`);\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") return;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) throw new TypeError(`Form SSR requires finite numbers at ${path}`);\n return;\n }\n if (typeof value !== \"object\") throw new TypeError(`Form SSR cannot serialize ${typeof value} at ${path}`);\n const prototype = Object.getPrototypeOf(value);\n if (!Array.isArray(value) && prototype !== Object.prototype && prototype !== null) throw new TypeError(`Form SSR requires plain JSON at ${path}`);\n if (Array.isArray(value)) {\n value.forEach((item, index) => visit(item, `${path}[${index}]`));\n return;\n }\n for (const [key, child] of Object.entries(value)) visit(child, `${path}.${key}`);\n };\n visit(props, \"form\");\n}\n"],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ //#region src/price/format.ts
2
+ const DECIMAL = /^([+-])?(\d+)(?:\.(\d*))?$|^([+-])?\.(\d+)$/;
3
+ const EXPONENT = /^([+-])?(\d+)(?:\.(\d*))?e([+-]?\d+)$/i;
4
+ function shiftExponent(sign, int, frac, exp) {
5
+ const digits = int + frac;
6
+ let point = int.length + exp;
7
+ let padded = digits;
8
+ if (point <= 0) {
9
+ padded = "0".repeat(1 - point) + digits;
10
+ point = 1;
11
+ }
12
+ if (point > padded.length) padded = padded + "0".repeat(point - padded.length);
13
+ return {
14
+ negative: sign === "-",
15
+ integer: padded.slice(0, point),
16
+ fraction: padded.slice(point)
17
+ };
18
+ }
19
+ /** Parse a finite number or decimal string; returns null for anything else. */
20
+ function parseDecimal(value) {
21
+ let text;
22
+ if (typeof value === "number") {
23
+ if (!Number.isFinite(value)) return null;
24
+ text = String(value);
25
+ } else if (typeof value === "string") text = value.trim();
26
+ else return null;
27
+ const exp = EXPONENT.exec(text);
28
+ if (exp) return normalize(shiftExponent(exp[1] ?? "", exp[2], exp[3] ?? "", Number(exp[4])));
29
+ const match = DECIMAL.exec(text);
30
+ if (!match) return null;
31
+ return normalize({
32
+ negative: (match[1] ?? match[4] ?? "") === "-",
33
+ integer: match[2] ?? "0",
34
+ fraction: match[3] ?? match[5] ?? ""
35
+ });
36
+ }
37
+ function normalize(parts) {
38
+ const integer = parts.integer.replace(/^0+(?=\d)/, "") || "0";
39
+ const out = {
40
+ negative: parts.negative,
41
+ integer,
42
+ fraction: parts.fraction
43
+ };
44
+ if (isZero(out)) out.negative = false;
45
+ return out;
46
+ }
47
+ function isZero(parts) {
48
+ return /^0*$/.test(parts.integer) && /^0*$/.test(parts.fraction);
49
+ }
50
+ /** Round half away from zero to a fixed number of fraction digits (string arithmetic). */
51
+ function roundDecimal(parts, precision) {
52
+ const fraction = parts.fraction.padEnd(precision, "0");
53
+ const kept = fraction.slice(0, precision);
54
+ const roundUp = (fraction.charCodeAt(precision) || 48) >= 53;
55
+ let digits = parts.integer + kept;
56
+ if (roundUp) {
57
+ const chars = digits.split("");
58
+ let index = chars.length - 1;
59
+ while (index >= 0) {
60
+ if (chars[index] === "9") {
61
+ chars[index] = "0";
62
+ index -= 1;
63
+ continue;
64
+ }
65
+ chars[index] = String(Number(chars[index]) + 1);
66
+ break;
67
+ }
68
+ digits = (index < 0 ? "1" : "") + chars.join("");
69
+ }
70
+ const split = digits.length - precision;
71
+ return normalize({
72
+ negative: parts.negative,
73
+ integer: digits.slice(0, split) || "0",
74
+ fraction: digits.slice(split)
75
+ });
76
+ }
77
+ /** Insert a group separator every three integer digits. Empty separator disables grouping. */
78
+ function groupDecimalInteger(integer, separator) {
79
+ if (!separator) return integer;
80
+ return integer.replace(/\B(?=(\d{3})+(?!\d))/g, separator);
81
+ }
82
+ /** Validate a precision option: integer in [0, 10], otherwise the fallback. */
83
+ function resolveDecimalPrecision(precision, fallback) {
84
+ return typeof precision === "number" && Number.isInteger(precision) && precision >= 0 && precision <= 10 ? precision : fallback;
85
+ }
86
+ //#endregion
87
+ export { roundDecimal as i, parseDecimal as n, resolveDecimalPrecision as r, groupDecimalInteger as t };
88
+
89
+ //# sourceMappingURL=format-BDUY0C_c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-BDUY0C_c.js","names":[],"sources":["../src/price/format.ts"],"sourcesContent":["/**\n * Internal decimal formatting shared by Price and Statistic.\n * Not re-exported from any public index: names stay module-private to the two families.\n * All arithmetic is done on decimal strings, so binary floating-point noise never reaches the UI.\n */\n\n/** Signed decimal split into digit strings without separators. */\nexport interface DecimalParts {\n negative: boolean;\n integer: string;\n fraction: string;\n}\n\nconst DECIMAL = /^([+-])?(\\d+)(?:\\.(\\d*))?$|^([+-])?\\.(\\d+)$/;\nconst EXPONENT = /^([+-])?(\\d+)(?:\\.(\\d*))?e([+-]?\\d+)$/i;\n\nfunction shiftExponent(sign: string, int: string, frac: string, exp: number): DecimalParts {\n const digits = int + frac;\n let point = int.length + exp;\n let padded = digits;\n if (point <= 0) { padded = \"0\".repeat(1 - point) + digits; point = 1; }\n if (point > padded.length) padded = padded + \"0\".repeat(point - padded.length);\n return { negative: sign === \"-\", integer: padded.slice(0, point), fraction: padded.slice(point) };\n}\n\n/** Parse a finite number or decimal string; returns null for anything else. */\nexport function parseDecimal(value: unknown): DecimalParts | null {\n let text: string;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) return null;\n // Shortest round-trip representation: 0.1 + 0.2 → \"0.30000000000000004\", 1.005 → \"1.005\".\n text = String(value);\n } else if (typeof value === \"string\") {\n text = value.trim();\n } else return null;\n const exp = EXPONENT.exec(text);\n if (exp) return normalize(shiftExponent(exp[1] ?? \"\", exp[2]!, exp[3] ?? \"\", Number(exp[4])));\n const match = DECIMAL.exec(text);\n if (!match) return null;\n const sign = match[1] ?? match[4] ?? \"\";\n return normalize({ negative: sign === \"-\", integer: match[2] ?? \"0\", fraction: match[3] ?? match[5] ?? \"\" });\n}\n\nfunction normalize(parts: DecimalParts): DecimalParts {\n const integer = parts.integer.replace(/^0+(?=\\d)/, \"\") || \"0\";\n const out = { negative: parts.negative, integer, fraction: parts.fraction };\n if (isZero(out)) out.negative = false;\n return out;\n}\n\nfunction isZero(parts: DecimalParts): boolean {\n return /^0*$/.test(parts.integer) && /^0*$/.test(parts.fraction);\n}\n\n/** Round half away from zero to a fixed number of fraction digits (string arithmetic). */\nexport function roundDecimal(parts: DecimalParts, precision: number): DecimalParts {\n const fraction = parts.fraction.padEnd(precision, \"0\");\n const kept = fraction.slice(0, precision);\n const roundUp = (fraction.charCodeAt(precision) || 48) >= 53;\n let digits = parts.integer + kept;\n if (roundUp) {\n const chars = digits.split(\"\");\n let index = chars.length - 1;\n while (index >= 0) {\n if (chars[index] === \"9\") { chars[index] = \"0\"; index -= 1; continue; }\n chars[index] = String(Number(chars[index]) + 1);\n break;\n }\n digits = (index < 0 ? \"1\" : \"\") + chars.join(\"\");\n }\n const split = digits.length - precision;\n return normalize({ negative: parts.negative, integer: digits.slice(0, split) || \"0\", fraction: digits.slice(split) });\n}\n\n/** Insert a group separator every three integer digits. Empty separator disables grouping. */\nexport function groupDecimalInteger(integer: string, separator: string): string {\n if (!separator) return integer;\n return integer.replace(/\\B(?=(\\d{3})+(?!\\d))/g, separator);\n}\n\n/** Validate a precision option: integer in [0, 10], otherwise the fallback. */\nexport function resolveDecimalPrecision(precision: unknown, fallback: number | undefined): number | undefined {\n return typeof precision === \"number\" && Number.isInteger(precision) && precision >= 0 && precision <= 10 ? precision : fallback;\n}\n"],"mappings":";AAaA,MAAM,UAAU;AAChB,MAAM,WAAW;AAEjB,SAAS,cAAc,MAAc,KAAa,MAAc,KAA2B;CACzF,MAAM,SAAS,MAAM;CACrB,IAAI,QAAQ,IAAI,SAAS;CACzB,IAAI,SAAS;CACb,IAAI,SAAS,GAAG;EAAE,SAAS,IAAI,OAAO,IAAI,KAAK,IAAI;EAAQ,QAAQ;CAAG;CACtE,IAAI,QAAQ,OAAO,QAAQ,SAAS,SAAS,IAAI,OAAO,QAAQ,OAAO,MAAM;CAC7E,OAAO;EAAE,UAAU,SAAS;EAAK,SAAS,OAAO,MAAM,GAAG,KAAK;EAAG,UAAU,OAAO,MAAM,KAAK;CAAE;AAClG;;AAGA,SAAgB,aAAa,OAAqC;CAChE,IAAI;CACJ,IAAI,OAAO,UAAU,UAAU;EAC7B,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG,OAAO;EAEpC,OAAO,OAAO,KAAK;CACrB,OAAO,IAAI,OAAO,UAAU,UAC1B,OAAO,MAAM,KAAK;MACb,OAAO;CACd,MAAM,MAAM,SAAS,KAAK,IAAI;CAC9B,IAAI,KAAK,OAAO,UAAU,cAAc,IAAI,MAAM,IAAI,IAAI,IAAK,IAAI,MAAM,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC;CAC5F,MAAM,QAAQ,QAAQ,KAAK,IAAI;CAC/B,IAAI,CAAC,OAAO,OAAO;CAEnB,OAAO,UAAU;EAAE,WADN,MAAM,MAAM,MAAM,MAAM,QACC;EAAK,SAAS,MAAM,MAAM;EAAK,UAAU,MAAM,MAAM,MAAM,MAAM;CAAG,CAAC;AAC7G;AAEA,SAAS,UAAU,OAAmC;CACpD,MAAM,UAAU,MAAM,QAAQ,QAAQ,aAAa,EAAE,KAAK;CAC1D,MAAM,MAAM;EAAE,UAAU,MAAM;EAAU;EAAS,UAAU,MAAM;CAAS;CAC1E,IAAI,OAAO,GAAG,GAAG,IAAI,WAAW;CAChC,OAAO;AACT;AAEA,SAAS,OAAO,OAA8B;CAC5C,OAAO,OAAO,KAAK,MAAM,OAAO,KAAK,OAAO,KAAK,MAAM,QAAQ;AACjE;;AAGA,SAAgB,aAAa,OAAqB,WAAiC;CACjF,MAAM,WAAW,MAAM,SAAS,OAAO,WAAW,GAAG;CACrD,MAAM,OAAO,SAAS,MAAM,GAAG,SAAS;CACxC,MAAM,WAAW,SAAS,WAAW,SAAS,KAAK,OAAO;CAC1D,IAAI,SAAS,MAAM,UAAU;CAC7B,IAAI,SAAS;EACX,MAAM,QAAQ,OAAO,MAAM,EAAE;EAC7B,IAAI,QAAQ,MAAM,SAAS;EAC3B,OAAO,SAAS,GAAG;GACjB,IAAI,MAAM,WAAW,KAAK;IAAE,MAAM,SAAS;IAAK,SAAS;IAAG;GAAU;GACtE,MAAM,SAAS,OAAO,OAAO,MAAM,MAAM,IAAI,CAAC;GAC9C;EACF;EACA,UAAU,QAAQ,IAAI,MAAM,MAAM,MAAM,KAAK,EAAE;CACjD;CACA,MAAM,QAAQ,OAAO,SAAS;CAC9B,OAAO,UAAU;EAAE,UAAU,MAAM;EAAU,SAAS,OAAO,MAAM,GAAG,KAAK,KAAK;EAAK,UAAU,OAAO,MAAM,KAAK;CAAE,CAAC;AACtH;;AAGA,SAAgB,oBAAoB,SAAiB,WAA2B;CAC9E,IAAI,CAAC,WAAW,OAAO;CACvB,OAAO,QAAQ,QAAQ,yBAAyB,SAAS;AAC3D;;AAGA,SAAgB,wBAAwB,WAAoB,UAAkD;CAC5G,OAAO,OAAO,cAAc,YAAY,OAAO,UAAU,SAAS,KAAK,aAAa,KAAK,aAAa,KAAK,YAAY;AACzH"}
@@ -0,0 +1,30 @@
1
+ /** Decide once per gesture which axis dominates. `vertical` means the component's main axis is block. */
2
+ function lockGestureAxis(dx, dy, vertical = false, slop = 8) {
3
+ const main = Math.abs(vertical ? dy : dx), cross = Math.abs(vertical ? dx : dy);
4
+ if (!Number.isFinite(main) || !Number.isFinite(cross) || Math.max(main, cross) < slop) return "pending";
5
+ return main > cross ? "main" : "cross";
6
+ }
7
+ /** Keep only the recent window and return the newest-minus-oldest velocity in px/ms. */
8
+ function sampleVelocity(samples, now, window = 100) {
9
+ const recent = samples.filter((sample) => now - sample.time <= window);
10
+ if (recent.length < 2) return 0;
11
+ const first = recent[0], last = recent[recent.length - 1], elapsed = last.time - first.time;
12
+ return elapsed > 0 ? (last.position - first.position) / elapsed : 0;
13
+ }
14
+ /**
15
+ * Release decision along a signed logical axis (positive = forward).
16
+ * Commits when travel reaches `max(GESTURE_FLICK_DISTANCE, size * ratio)`, or on a same-direction flick.
17
+ */
18
+ function resolveSwipeIntent(input) {
19
+ const { distance, velocity, size, ratio } = input;
20
+ if (!Number.isFinite(distance) || distance === 0) return 0;
21
+ const sign = distance > 0 ? 1 : -1;
22
+ const travel = Math.abs(distance);
23
+ if (travel >= Math.max(12, (Number.isFinite(size) && size > 0 ? size : 0) * ratio)) return sign;
24
+ if (travel >= 12 && Number.isFinite(velocity) && Math.abs(velocity) >= .3 && Math.sign(velocity) === sign) return sign;
25
+ return 0;
26
+ }
27
+ //#endregion
28
+ export { resolveSwipeIntent as n, sampleVelocity as r, lockGestureAxis as t };
29
+
30
+ //# sourceMappingURL=gesture-_SRHIvBm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gesture-_SRHIvBm.js","names":[],"sources":["../src/swiper/gesture.ts"],"sourcesContent":["/**\n * Internal pointer-gesture helpers shared by Swiper and SwipeAction.\n * Pure functions only (no DOM); not exported from any index.\n */\n\n/** Movement in CSS pixels before the gesture axis is decided. */\nexport const GESTURE_SLOP = 8;\n/** Release velocity in px/ms that counts as a flick. */\nexport const GESTURE_FLICK_VELOCITY = 0.3;\n/** Minimum travel in px for a flick to count. */\nexport const GESTURE_FLICK_DISTANCE = 12;\n/** Velocity samples older than this window (ms) are ignored. */\nexport const GESTURE_VELOCITY_WINDOW = 100;\n\n/** pending: still under the slop; main: the component owns the drag; cross: hand it back to native scrolling. */\nexport type GestureAxis = \"pending\" | \"main\" | \"cross\";\nexport interface GestureSample { position: number; time: number }\n\n/** Decide once per gesture which axis dominates. `vertical` means the component's main axis is block. */\nexport function lockGestureAxis(dx: number, dy: number, vertical = false, slop = GESTURE_SLOP): GestureAxis {\n const main = Math.abs(vertical ? dy : dx), cross = Math.abs(vertical ? dx : dy);\n if (!Number.isFinite(main) || !Number.isFinite(cross) || Math.max(main, cross) < slop) return \"pending\";\n return main > cross ? \"main\" : \"cross\";\n}\n\n/** Keep only the recent window and return the newest-minus-oldest velocity in px/ms. */\nexport function sampleVelocity(samples: readonly GestureSample[], now: number, window = GESTURE_VELOCITY_WINDOW): number {\n const recent = samples.filter((sample) => now - sample.time <= window);\n if (recent.length < 2) return 0;\n const first = recent[0]!, last = recent[recent.length - 1]!, elapsed = last.time - first.time;\n return elapsed > 0 ? (last.position - first.position) / elapsed : 0;\n}\n\n/**\n * Release decision along a signed logical axis (positive = forward).\n * Commits when travel reaches `max(GESTURE_FLICK_DISTANCE, size * ratio)`, or on a same-direction flick.\n */\nexport function resolveSwipeIntent(input: { distance: number; velocity: number; size: number; ratio: number }): -1 | 0 | 1 {\n const { distance, velocity, size, ratio } = input;\n if (!Number.isFinite(distance) || distance === 0) return 0;\n const sign = distance > 0 ? 1 : -1;\n const travel = Math.abs(distance), limit = Math.max(GESTURE_FLICK_DISTANCE, (Number.isFinite(size) && size > 0 ? size : 0) * ratio);\n if (travel >= limit) return sign;\n if (travel >= GESTURE_FLICK_DISTANCE && Number.isFinite(velocity) && Math.abs(velocity) >= GESTURE_FLICK_VELOCITY && Math.sign(velocity) === sign) return sign;\n return 0;\n}\n"],"mappings":";AAmBA,SAAgB,gBAAgB,IAAY,IAAY,WAAW,OAAO,OAAA,GAAkC;CAC1G,MAAM,OAAO,KAAK,IAAI,WAAW,KAAK,EAAE,GAAG,QAAQ,KAAK,IAAI,WAAW,KAAK,EAAE;CAC9E,IAAI,CAAC,OAAO,SAAS,IAAI,KAAK,CAAC,OAAO,SAAS,KAAK,KAAK,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,OAAO;CAC9F,OAAO,OAAO,QAAQ,SAAS;AACjC;;AAGA,SAAgB,eAAe,SAAmC,KAAa,SAAA,KAA0C;CACvH,MAAM,SAAS,QAAQ,QAAQ,WAAW,MAAM,OAAO,QAAQ,MAAM;CACrE,IAAI,OAAO,SAAS,GAAG,OAAO;CAC9B,MAAM,QAAQ,OAAO,IAAK,OAAO,OAAO,OAAO,SAAS,IAAK,UAAU,KAAK,OAAO,MAAM;CACzF,OAAO,UAAU,KAAK,KAAK,WAAW,MAAM,YAAY,UAAU;AACpE;;;;;AAMA,SAAgB,mBAAmB,OAAwF;CACzH,MAAM,EAAE,UAAU,UAAU,MAAM,UAAU;CAC5C,IAAI,CAAC,OAAO,SAAS,QAAQ,KAAK,aAAa,GAAG,OAAO;CACzD,MAAM,OAAO,WAAW,IAAI,IAAI;CAChC,MAAM,SAAS,KAAK,IAAI,QAAQ;CAChC,IAAI,UADuC,KAAK,IAAA,KAA6B,OAAO,SAAS,IAAI,KAAK,OAAO,IAAI,OAAO,KAAK,KAC3G,GAAG,OAAO;CAC5B,IAAI,UAAA,MAAoC,OAAO,SAAS,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAA,MAA+B,KAAK,KAAK,QAAQ,MAAM,MAAM,OAAO;CAC1J,OAAO;AACT"}
@@ -0,0 +1,22 @@
1
+ import { type LayoutStyle } from "../layout.js";
2
+ export interface QwGridItemProps {
3
+ /** Column span, default 1. A span beyond explicit columns creates CSS implicit tracks. */
4
+ span?: number;
5
+ /** Row span, default 1; reserves tracks when square is enabled. */
6
+ rowSpan?: number;
7
+ /** Keep the box square by its occupied column width, overriding parent stretch. */
8
+ square?: boolean;
9
+ }
10
+ export interface ResolvedGridItemState {
11
+ span: number;
12
+ rowSpan: number;
13
+ square: boolean;
14
+ }
15
+ export declare function resolveGridItemState(props?: QwGridItemProps): ResolvedGridItemState;
16
+ export interface GridItemRootProps {
17
+ "data-scope": "grid";
18
+ "data-part": "item";
19
+ "data-square"?: "true";
20
+ }
21
+ export declare function getGridItemProps(state: ResolvedGridItemState): GridItemRootProps;
22
+ export declare function getGridItemStyle(state: ResolvedGridItemState): LayoutStyle;
@@ -0,0 +1,42 @@
1
+ import { type LayoutGap, type LayoutStyle, type LayoutGroupProps } from "../layout.js";
2
+ export declare const GRID_ALIGNS: readonly ["start", "end", "center", "baseline", "stretch"];
3
+ export declare const GRID_JUSTIFIES: readonly ["start", "end", "center", "stretch"];
4
+ export type GridAlign = (typeof GRID_ALIGNS)[number];
5
+ export type GridJustify = (typeof GRID_JUSTIFIES)[number];
6
+ export interface QwGridProps {
7
+ /** Fixed column count, default 4; positive safe integer. */
8
+ columns?: number;
9
+ /** Preset, pixels, CSS length or CSS-order [row, column]. Default sm. */
10
+ gap?: LayoutGap;
11
+ /** Auto-fit minimum width; supplied positive pixels or CSS length selects responsive mode. */
12
+ minItemWidth?: number | string;
13
+ /** Block-axis item alignment, default stretch. */
14
+ align?: GridAlign;
15
+ /** Inline-axis item alignment, default stretch. */
16
+ justify?: GridJustify;
17
+ /** Fill visual holes without changing DOM/Tab order. */
18
+ dense?: boolean;
19
+ /** Optional accessible group name; never generates ARIA grid behavior. */
20
+ label?: string | null;
21
+ }
22
+ export interface ResolvedGridState {
23
+ columns: number;
24
+ gap: readonly [string, string];
25
+ minItemWidth?: string;
26
+ autoFit: boolean;
27
+ align: GridAlign;
28
+ justify: GridJustify;
29
+ dense: boolean;
30
+ label?: string | null;
31
+ }
32
+ export declare function resolveGridState(props?: QwGridProps): ResolvedGridState;
33
+ export interface GridRootProps extends LayoutGroupProps {
34
+ "data-scope": "grid";
35
+ "data-part": "root";
36
+ "data-align": GridAlign;
37
+ "data-justify": GridJustify;
38
+ "data-auto-fit"?: "true";
39
+ "data-dense"?: "true";
40
+ }
41
+ export declare function getGridRootProps(state: ResolvedGridState): GridRootProps;
42
+ export declare function getGridStyle(state: ResolvedGridState): LayoutStyle;
@@ -0,0 +1,2 @@
1
+ export * from "./grid.js";
2
+ export * from "./grid-item.js";
@@ -0,0 +1,73 @@
1
+ import { a as resolveLayoutMinimum, i as resolveLayoutGap, n as getLayoutGroupProps, r as resolveLayoutCount } from "../layout-BRSqi4AQ.js";
2
+ //#region src/grid/grid.ts
3
+ const GRID_ALIGNS = [
4
+ "start",
5
+ "end",
6
+ "center",
7
+ "baseline",
8
+ "stretch"
9
+ ];
10
+ const GRID_JUSTIFIES = [
11
+ "start",
12
+ "end",
13
+ "center",
14
+ "stretch"
15
+ ];
16
+ function resolveGridState(props = {}) {
17
+ const minItemWidth = resolveLayoutMinimum(props.minItemWidth);
18
+ return {
19
+ columns: resolveLayoutCount(props.columns, 4),
20
+ gap: resolveLayoutGap(props.gap),
21
+ minItemWidth,
22
+ autoFit: minItemWidth !== void 0,
23
+ align: GRID_ALIGNS.includes(props.align) ? props.align : "stretch",
24
+ justify: GRID_JUSTIFIES.includes(props.justify) ? props.justify : "stretch",
25
+ dense: !!props.dense,
26
+ label: props.label
27
+ };
28
+ }
29
+ function getGridRootProps(state) {
30
+ return {
31
+ "data-scope": "grid",
32
+ "data-part": "root",
33
+ "data-align": state.align,
34
+ "data-justify": state.justify,
35
+ ...state.autoFit ? { "data-auto-fit": "true" } : {},
36
+ ...state.dense ? { "data-dense": "true" } : {},
37
+ ...getLayoutGroupProps(state.label)
38
+ };
39
+ }
40
+ function getGridStyle(state) {
41
+ return {
42
+ "--qw-grid-columns": String(state.columns),
43
+ "--qw-grid-min-width": state.minItemWidth ?? "0px",
44
+ "--qw-grid-row-gap": state.gap[0],
45
+ "--qw-grid-column-gap": state.gap[1]
46
+ };
47
+ }
48
+ //#endregion
49
+ //#region src/grid/grid-item.ts
50
+ function resolveGridItemState(props = {}) {
51
+ return {
52
+ span: resolveLayoutCount(props.span, 1),
53
+ rowSpan: resolveLayoutCount(props.rowSpan, 1),
54
+ square: !!props.square
55
+ };
56
+ }
57
+ function getGridItemProps(state) {
58
+ return {
59
+ "data-scope": "grid",
60
+ "data-part": "item",
61
+ ...state.square ? { "data-square": "true" } : {}
62
+ };
63
+ }
64
+ function getGridItemStyle(state) {
65
+ return {
66
+ "--qw-grid-item-span": String(state.span),
67
+ "--qw-grid-item-row-span": String(state.rowSpan)
68
+ };
69
+ }
70
+ //#endregion
71
+ export { GRID_ALIGNS, GRID_JUSTIFIES, getGridItemProps, getGridItemStyle, getGridRootProps, getGridStyle, resolveGridItemState, resolveGridState };
72
+
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/grid/grid.ts","../../src/grid/grid-item.ts"],"sourcesContent":["import { resolveLayoutGap, resolveLayoutCount, resolveLayoutMinimum, getLayoutGroupProps, type LayoutGap, type LayoutStyle, type LayoutGroupProps } from \"../layout.js\";\nexport const GRID_ALIGNS = [\"start\", \"end\", \"center\", \"baseline\", \"stretch\"] as const;\nexport const GRID_JUSTIFIES = [\"start\", \"end\", \"center\", \"stretch\"] as const;\nexport type GridAlign = (typeof GRID_ALIGNS)[number];\nexport type GridJustify = (typeof GRID_JUSTIFIES)[number];\nexport interface QwGridProps {\n /** Fixed column count, default 4; positive safe integer. */\n columns?: number;\n /** Preset, pixels, CSS length or CSS-order [row, column]. Default sm. */\n gap?: LayoutGap;\n /** Auto-fit minimum width; supplied positive pixels or CSS length selects responsive mode. */\n minItemWidth?: number | string;\n /** Block-axis item alignment, default stretch. */\n align?: GridAlign;\n /** Inline-axis item alignment, default stretch. */\n justify?: GridJustify;\n /** Fill visual holes without changing DOM/Tab order. */\n dense?: boolean;\n /** Optional accessible group name; never generates ARIA grid behavior. */\n label?: string | null;\n}\nexport interface ResolvedGridState { columns:number; gap:readonly[string,string]; minItemWidth?:string; autoFit:boolean; align:GridAlign; justify:GridJustify; dense:boolean; label?:string|null }\nexport function resolveGridState(props: QwGridProps = {}): ResolvedGridState {\n const minItemWidth = resolveLayoutMinimum(props.minItemWidth);\n return { columns:resolveLayoutCount(props.columns,4),gap:resolveLayoutGap(props.gap),minItemWidth,autoFit:minItemWidth!==undefined,\n align:GRID_ALIGNS.includes(props.align!)?props.align!:\"stretch\",justify:GRID_JUSTIFIES.includes(props.justify!)?props.justify!:\"stretch\",dense:!!props.dense,label:props.label };\n}\nexport interface GridRootProps extends LayoutGroupProps { \"data-scope\":\"grid\"; \"data-part\":\"root\"; \"data-align\":GridAlign; \"data-justify\":GridJustify; \"data-auto-fit\"?:\"true\"; \"data-dense\"?:\"true\" }\nexport function getGridRootProps(state: ResolvedGridState): GridRootProps {\n return { \"data-scope\":\"grid\",\"data-part\":\"root\",\"data-align\":state.align,\"data-justify\":state.justify,\n ...(state.autoFit?{\"data-auto-fit\":\"true\" as const}:{}),...(state.dense?{\"data-dense\":\"true\" as const}:{}),...getLayoutGroupProps(state.label) };\n}\nexport function getGridStyle(state: ResolvedGridState): LayoutStyle { return { \"--qw-grid-columns\":String(state.columns),\"--qw-grid-min-width\":state.minItemWidth??\"0px\",\"--qw-grid-row-gap\":state.gap[0],\"--qw-grid-column-gap\":state.gap[1] }; }\n","import { resolveLayoutCount, type LayoutStyle } from \"../layout.js\";\nexport interface QwGridItemProps {\n /** Column span, default 1. A span beyond explicit columns creates CSS implicit tracks. */\n span?: number;\n /** Row span, default 1; reserves tracks when square is enabled. */\n rowSpan?: number;\n /** Keep the box square by its occupied column width, overriding parent stretch. */\n square?: boolean;\n}\nexport interface ResolvedGridItemState { span:number; rowSpan:number; square:boolean }\nexport function resolveGridItemState(props: QwGridItemProps = {}): ResolvedGridItemState { return { span:resolveLayoutCount(props.span,1),rowSpan:resolveLayoutCount(props.rowSpan,1),square:!!props.square }; }\nexport interface GridItemRootProps { \"data-scope\":\"grid\"; \"data-part\":\"item\"; \"data-square\"?:\"true\" }\nexport function getGridItemProps(state: ResolvedGridItemState): GridItemRootProps { return { \"data-scope\":\"grid\",\"data-part\":\"item\",...(state.square?{\"data-square\":\"true\" as const}:{}) }; }\nexport function getGridItemStyle(state: ResolvedGridItemState): LayoutStyle { return { \"--qw-grid-item-span\":String(state.span),\"--qw-grid-item-row-span\":String(state.rowSpan) }; }\n"],"mappings":";;AACA,MAAa,cAAc;CAAC;CAAS;CAAO;CAAU;CAAY;AAAS;AAC3E,MAAa,iBAAiB;CAAC;CAAS;CAAO;CAAU;AAAS;AAoBlE,SAAgB,iBAAiB,QAAqB,CAAC,GAAsB;CAC3E,MAAM,eAAe,qBAAqB,MAAM,YAAY;CAC5D,OAAO;EAAE,SAAQ,mBAAmB,MAAM,SAAQ,CAAC;EAAE,KAAI,iBAAiB,MAAM,GAAG;EAAE;EAAa,SAAQ,iBAAe,KAAA;EACvH,OAAM,YAAY,SAAS,MAAM,KAAM,IAAE,MAAM,QAAO;EAAU,SAAQ,eAAe,SAAS,MAAM,OAAQ,IAAE,MAAM,UAAS;EAAU,OAAM,CAAC,CAAC,MAAM;EAAM,OAAM,MAAM;CAAM;AACnL;AAEA,SAAgB,iBAAiB,OAAyC;CACxE,OAAO;EAAE,cAAa;EAAO,aAAY;EAAO,cAAa,MAAM;EAAM,gBAAe,MAAM;EAC5F,GAAI,MAAM,UAAQ,EAAC,iBAAgB,OAAe,IAAE,CAAC;EAAG,GAAI,MAAM,QAAM,EAAC,cAAa,OAAe,IAAE,CAAC;EAAG,GAAG,oBAAoB,MAAM,KAAK;CAAE;AACnJ;AACA,SAAgB,aAAa,OAAuC;CAAE,OAAO;EAAE,qBAAoB,OAAO,MAAM,OAAO;EAAE,uBAAsB,MAAM,gBAAc;EAAM,qBAAoB,MAAM,IAAI;EAAG,wBAAuB,MAAM,IAAI;CAAG;AAAG;;;ACtBjP,SAAgB,qBAAqB,QAAyB,CAAC,GAA0B;CAAE,OAAO;EAAE,MAAK,mBAAmB,MAAM,MAAK,CAAC;EAAE,SAAQ,mBAAmB,MAAM,SAAQ,CAAC;EAAE,QAAO,CAAC,CAAC,MAAM;CAAO;AAAG;AAE/M,SAAgB,iBAAiB,OAAiD;CAAE,OAAO;EAAE,cAAa;EAAO,aAAY;EAAO,GAAI,MAAM,SAAO,EAAC,eAAc,OAAe,IAAE,CAAC;CAAG;AAAG;AAC5L,SAAgB,iBAAiB,OAA2C;CAAE,OAAO;EAAE,uBAAsB,OAAO,MAAM,IAAI;EAAE,2BAA0B,OAAO,MAAM,OAAO;CAAE;AAAG"}
@@ -1,4 +1,6 @@
1
- import { ICON_FALLBACK_NAME, type IconName, type IconNameInput } from "@qw-ui/icons/runtime";
1
+ import { ICON_FALLBACK_NAME, type IconName, type IconNameInput } from "@qw-ui/icons/names";
2
+ import { type IconVectorNode } from "@qw-ui/icons/vectors";
3
+ export type { IconVectorNode } from "@qw-ui/icons/vectors";
2
4
  /** Icon 根部件的共享 data-part 词表。 */
3
5
  export declare const ICON_PARTS: readonly ["root"];
4
6
  export type IconPart = (typeof ICON_PARTS)[number];
@@ -9,3 +11,37 @@ export { ICON_FALLBACK_NAME };
9
11
  * 只在开发环境记录诊断,避免远端配置错误中断渲染。
10
12
  */
11
13
  export declare function resolveIconName(name: IconNameInput): IconName;
14
+ /** Shared Icon input. Identity must be stable across SSR and hydration. */
15
+ export interface IconConfig {
16
+ /** Nonempty instance identity, separate from a caller's SVG element id. */
17
+ id: string;
18
+ /** Dynamic system name; unknown names use the existing fallback. */
19
+ name: IconNameInput;
20
+ /** Existing label truthiness determines whether the SVG is decorative. */
21
+ ariaLabel?: string | null;
22
+ }
23
+ /** Normalized, framework-independent Icon state. */
24
+ export interface IconState {
25
+ /** Stable instance identity used only for internal vector references. */
26
+ readonly id: string;
27
+ /** Resolved system name. */
28
+ readonly name: IconName;
29
+ /** Unmodified accessible label. */
30
+ readonly ariaLabel?: string | null;
31
+ }
32
+ /** Normalize name once and require the identity used by inline definitions. */
33
+ export declare function resolveIconState(config: IconConfig): IconState;
34
+ /** Standard SVG root attributes shared by every adapter. */
35
+ export declare function getIconRootProps(state: IconState): {
36
+ "data-scope": "icon";
37
+ "data-part": "root";
38
+ viewBox: string;
39
+ width: string;
40
+ height: string;
41
+ fill: string;
42
+ focusable: "false";
43
+ "aria-label": string | undefined;
44
+ "aria-hidden": boolean | undefined;
45
+ };
46
+ /** Instance-owned safe vector tree, with every local id/reference isolated. */
47
+ export declare function getIconVector(state: IconState): readonly IconVectorNode[];
@@ -0,0 +1,3 @@
1
+ export declare function encodeIconIdentity(value: string): string;
2
+ export declare function formatIconDefinitionId(identity: string, original: string): string;
3
+ export declare function rewriteIconAttribute(key: string, value: string, ids: ReadonlyMap<string, string>): string;
@@ -1,20 +1,2 @@
1
- import { ICON_FALLBACK_NAME, ICON_NAME_SET } from "@qw-ui/icons/runtime";
2
- //#region src/icon/icon.ts
3
- /** Icon 根部件的共享 data-part 词表。 */
4
- const ICON_PARTS = ["root"];
5
- function isProductionBuild() {
6
- return globalThis.process?.env?.NODE_ENV === "production";
7
- }
8
- /**
9
- * 把动态输入收敛为系统内的稳定名称。未知值始终回退到 component,
10
- * 只在开发环境记录诊断,避免远端配置错误中断渲染。
11
- */
12
- function resolveIconName(name) {
13
- if (ICON_NAME_SET.has(name)) return name;
14
- if (!isProductionBuild()) console.warn(`[qw-ui] Unknown icon name "${name}". Falling back to "${ICON_FALLBACK_NAME}".`);
15
- return ICON_FALLBACK_NAME;
16
- }
17
- //#endregion
18
- export { ICON_FALLBACK_NAME, ICON_PARTS, resolveIconName };
19
-
20
- //# sourceMappingURL=index.js.map
1
+ import { a as resolveIconName, i as getIconVector, n as ICON_PARTS, o as resolveIconState, r as getIconRootProps, t as ICON_FALLBACK_NAME } from "../icon-Cgdbnk1u.js";
2
+ export { ICON_FALLBACK_NAME, ICON_PARTS, getIconRootProps, getIconVector, resolveIconName, resolveIconState };