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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. package/README.md +21 -37
  2. package/dist/action-sheet/action-sheet.d.ts +110 -0
  3. package/dist/action-sheet/index.d.ts +2 -0
  4. package/dist/action-sheet/index.js +2 -0
  5. package/dist/action-sheet-Cvcr1S_m.js +183 -0
  6. package/dist/action-sheet-Cvcr1S_m.js.map +1 -0
  7. package/dist/area-picker/area-picker.d.ts +113 -0
  8. package/dist/area-picker/index.d.ts +1 -0
  9. package/dist/area-picker/index.js +348 -0
  10. package/dist/area-picker/index.js.map +1 -0
  11. package/dist/aria-description-CimD2M_C.js +13 -0
  12. package/dist/aria-description-CimD2M_C.js.map +1 -0
  13. package/dist/aria-description.d.ts +2 -0
  14. package/dist/avatar/avatar-load.d.ts +76 -0
  15. package/dist/avatar/avatar.d.ts +22 -5
  16. package/dist/avatar/index.d.ts +1 -0
  17. package/dist/avatar/index.js +57 -18
  18. package/dist/avatar/index.js.map +1 -1
  19. package/dist/avatar-load-w9dq05oV.js +139 -0
  20. package/dist/avatar-load-w9dq05oV.js.map +1 -0
  21. package/dist/back-top/back-top.d.ts +77 -0
  22. package/dist/back-top/index.d.ts +1 -0
  23. package/dist/back-top/index.js +189 -0
  24. package/dist/back-top/index.js.map +1 -0
  25. package/dist/badge/badge.d.ts +9 -0
  26. package/dist/badge/index.js +14 -1
  27. package/dist/badge/index.js.map +1 -1
  28. package/dist/button/button.d.ts +13 -0
  29. package/dist/button/index.js +3 -5
  30. package/dist/button/index.js.map +1 -1
  31. package/dist/calendar/calendar.d.ts +100 -0
  32. package/dist/calendar/index.d.ts +1 -0
  33. package/dist/calendar/index.js +2 -0
  34. package/dist/calendar-CmpK3stz.js +363 -0
  35. package/dist/calendar-CmpK3stz.js.map +1 -0
  36. package/dist/card/card.d.ts +68 -0
  37. package/dist/card/index.d.ts +2 -0
  38. package/dist/card/index.js +2 -0
  39. package/dist/card-DRtWa6Cr.js +107 -0
  40. package/dist/card-DRtWa6Cr.js.map +1 -0
  41. package/dist/cascader/cascader.d.ts +115 -0
  42. package/dist/cascader/index.d.ts +1 -0
  43. package/dist/cascader/index.js +2 -0
  44. package/dist/cascader-D-xMjs7P.js +333 -0
  45. package/dist/cascader-D-xMjs7P.js.map +1 -0
  46. package/dist/cell/cell.d.ts +41 -0
  47. package/dist/cell/index.d.ts +1 -0
  48. package/dist/cell/index.js +43 -0
  49. package/dist/cell/index.js.map +1 -0
  50. package/dist/check-list/check-list.d.ts +78 -0
  51. package/dist/check-list/index.d.ts +2 -0
  52. package/dist/check-list/index.js +2 -0
  53. package/dist/check-list-BvZHQt5w.js +60 -0
  54. package/dist/check-list-BvZHQt5w.js.map +1 -0
  55. package/dist/checkbox/checkbox.d.ts +59 -0
  56. package/dist/checkbox/index.d.ts +2 -0
  57. package/dist/checkbox/index.js +2 -0
  58. package/dist/checkbox-BlndJrz5.js +127 -0
  59. package/dist/checkbox-BlndJrz5.js.map +1 -0
  60. package/dist/checkbox-group/checkbox-group.d.ts +86 -0
  61. package/dist/checkbox-group/index.d.ts +3 -0
  62. package/dist/checkbox-group/index.js +2 -0
  63. package/dist/checkbox-group-gGfsTv-e.js +223 -0
  64. package/dist/checkbox-group-gGfsTv-e.js.map +1 -0
  65. package/dist/choice-group-C4c9m0qe.js +373 -0
  66. package/dist/choice-group-C4c9m0qe.js.map +1 -0
  67. package/dist/circle/circle.d.ts +97 -0
  68. package/dist/circle/index.d.ts +1 -0
  69. package/dist/circle/index.js +119 -0
  70. package/dist/circle/index.js.map +1 -0
  71. package/dist/collapse/collapse.d.ts +98 -0
  72. package/dist/collapse/index.d.ts +2 -0
  73. package/dist/collapse/index.js +2 -0
  74. package/dist/collapse-B969h7-H.js +226 -0
  75. package/dist/collapse-B969h7-H.js.map +1 -0
  76. package/dist/countdown/countdown.d.ts +114 -0
  77. package/dist/countdown/index.d.ts +1 -0
  78. package/dist/countdown/index.js +309 -0
  79. package/dist/countdown/index.js.map +1 -0
  80. package/dist/date-picker/date-picker.d.ts +168 -0
  81. package/dist/date-picker/index.d.ts +1 -0
  82. package/dist/date-picker/index.js +401 -0
  83. package/dist/date-picker/index.js.map +1 -0
  84. package/dist/descriptions/descriptions.d.ts +69 -0
  85. package/dist/descriptions/index.d.ts +1 -0
  86. package/dist/descriptions/index.js +86 -0
  87. package/dist/descriptions/index.js.map +1 -0
  88. package/dist/dialog/dialog.d.ts +32 -3
  89. package/dist/dialog/index.js +58 -3
  90. package/dist/dialog/index.js.map +1 -1
  91. package/dist/divider/divider.d.ts +18 -2
  92. package/dist/divider/index.js +20 -2
  93. package/dist/divider/index.js.map +1 -1
  94. package/dist/dropdown/dropdown.d.ts +172 -0
  95. package/dist/dropdown/index.d.ts +2 -0
  96. package/dist/dropdown/index.js +467 -0
  97. package/dist/dropdown/index.js.map +1 -0
  98. package/dist/ellipsis/ellipsis-layout.d.ts +34 -0
  99. package/dist/ellipsis/ellipsis.d.ts +88 -0
  100. package/dist/ellipsis/index.d.ts +2 -0
  101. package/dist/ellipsis/index.js +320 -0
  102. package/dist/ellipsis/index.js.map +1 -0
  103. package/dist/empty/empty-illustration.d.ts +3 -0
  104. package/dist/empty/empty.d.ts +43 -1
  105. package/dist/empty/index.js +2 -21
  106. package/dist/empty-CAgyvhUI.js +166 -0
  107. package/dist/empty-CAgyvhUI.js.map +1 -0
  108. package/dist/field/field.d.ts +95 -0
  109. package/dist/field/index.d.ts +2 -0
  110. package/dist/field/index.js +2 -0
  111. package/dist/field-DMHGIMZF.js +241 -0
  112. package/dist/field-DMHGIMZF.js.map +1 -0
  113. package/dist/floating-bubble/floating-bubble.d.ts +116 -0
  114. package/dist/floating-bubble/index.d.ts +1 -0
  115. package/dist/floating-bubble/index.js +333 -0
  116. package/dist/floating-bubble/index.js.map +1 -0
  117. package/dist/floating-panel/floating-panel.d.ts +80 -0
  118. package/dist/floating-panel/index.d.ts +2 -0
  119. package/dist/floating-panel/index.js +2 -0
  120. package/dist/floating-panel-Cbm5njBJ.js +363 -0
  121. package/dist/floating-panel-Cbm5njBJ.js.map +1 -0
  122. package/dist/footer/footer.d.ts +94 -0
  123. package/dist/footer/index.d.ts +1 -0
  124. package/dist/footer/index.js +154 -0
  125. package/dist/footer/index.js.map +1 -0
  126. package/dist/form/connect.d.ts +6 -0
  127. package/dist/form/form.d.ts +100 -0
  128. package/dist/form/ids.d.ts +14 -0
  129. package/dist/form/index.d.ts +13 -0
  130. package/dist/form/index.js +3 -0
  131. package/dist/form/methods.d.ts +5 -0
  132. package/dist/form/model.d.ts +24 -0
  133. package/dist/form/native.d.ts +25 -0
  134. package/dist/form/rules.d.ts +40 -0
  135. package/dist/form/ssr.d.ts +7 -0
  136. package/dist/form/types.d.ts +150 -0
  137. package/dist/form-BAGkIEMY.js +1354 -0
  138. package/dist/form-BAGkIEMY.js.map +1 -0
  139. package/dist/format-BDUY0C_c.js +89 -0
  140. package/dist/format-BDUY0C_c.js.map +1 -0
  141. package/dist/gesture-_SRHIvBm.js +30 -0
  142. package/dist/gesture-_SRHIvBm.js.map +1 -0
  143. package/dist/grid/grid-item.d.ts +22 -0
  144. package/dist/grid/grid.d.ts +42 -0
  145. package/dist/grid/index.d.ts +2 -0
  146. package/dist/grid/index.js +73 -0
  147. package/dist/grid/index.js.map +1 -0
  148. package/dist/icon/icon.d.ts +37 -1
  149. package/dist/icon/identity.d.ts +3 -0
  150. package/dist/icon/index.js +2 -20
  151. package/dist/icon-Cgdbnk1u.js +77 -0
  152. package/dist/icon-Cgdbnk1u.js.map +1 -0
  153. package/dist/image/image-load.d.ts +24 -0
  154. package/dist/image/image.d.ts +45 -8
  155. package/dist/image/index.d.ts +1 -0
  156. package/dist/image/index.js +116 -14
  157. package/dist/image/index.js.map +1 -1
  158. package/dist/image-preview/image-preview.d.ts +124 -0
  159. package/dist/image-preview/index.d.ts +1 -0
  160. package/dist/image-preview/index.js +450 -0
  161. package/dist/image-preview/index.js.map +1 -0
  162. package/dist/index-bar/index-bar.d.ts +121 -0
  163. package/dist/index-bar/index.d.ts +1 -0
  164. package/dist/index-bar/index.js +386 -0
  165. package/dist/index-bar/index.js.map +1 -0
  166. package/dist/index.d.ts +107 -14
  167. package/dist/index.js +148 -14
  168. package/dist/index.js.map +1 -0
  169. package/dist/infinite-scroll/index.d.ts +1 -0
  170. package/dist/infinite-scroll/index.js +248 -0
  171. package/dist/infinite-scroll/index.js.map +1 -0
  172. package/dist/infinite-scroll/infinite-scroll.d.ts +95 -0
  173. package/dist/input/index.js +181 -22
  174. package/dist/input/index.js.map +1 -1
  175. package/dist/input/input.d.ts +44 -1
  176. package/dist/layer-IpFrl5--.js +414 -0
  177. package/dist/layer-IpFrl5--.js.map +1 -0
  178. package/dist/layout-BRSqi4AQ.js +43 -0
  179. package/dist/layout-BRSqi4AQ.js.map +1 -0
  180. package/dist/layout.d.ts +13 -0
  181. package/dist/list/index.d.ts +2 -0
  182. package/dist/list/index.js +2 -0
  183. package/dist/list/list.d.ts +30 -0
  184. package/dist/list-6-iz-Irh.js +28 -0
  185. package/dist/list-6-iz-Irh.js.map +1 -0
  186. package/dist/loading/index.js +45 -2
  187. package/dist/loading/index.js.map +1 -1
  188. package/dist/loading/loading.d.ts +45 -2
  189. package/dist/modal-dialog-machine-CF9_z3Dm.js +487 -0
  190. package/dist/modal-dialog-machine-CF9_z3Dm.js.map +1 -0
  191. package/dist/modal-dialog-machine.d.ts +21 -0
  192. package/dist/modal-dismissable-lifetime.d.ts +21 -0
  193. package/dist/modal-registry.d.ts +24 -0
  194. package/dist/modal-render-hydration.d.ts +35 -0
  195. package/dist/modal-render-runtime.d.ts +19 -0
  196. package/dist/modal-render-scope.d.ts +63 -0
  197. package/dist/nav-bar/index.d.ts +1 -0
  198. package/dist/nav-bar/index.js +115 -0
  199. package/dist/nav-bar/index.js.map +1 -0
  200. package/dist/nav-bar/nav-bar.d.ts +76 -0
  201. package/dist/notice-bar/index.d.ts +2 -0
  202. package/dist/notice-bar/index.js +2 -0
  203. package/dist/notice-bar/notice-bar.d.ts +103 -0
  204. package/dist/notice-bar-DMpwLvRb.js +231 -0
  205. package/dist/notice-bar-DMpwLvRb.js.map +1 -0
  206. package/dist/notify/index.d.ts +1 -0
  207. package/dist/notify/index.js +251 -0
  208. package/dist/notify/index.js.map +1 -0
  209. package/dist/notify/notify.d.ts +123 -0
  210. package/dist/number-keyboard/index.d.ts +1 -0
  211. package/dist/number-keyboard/index.js +333 -0
  212. package/dist/number-keyboard/index.js.map +1 -0
  213. package/dist/number-keyboard/number-keyboard.d.ts +141 -0
  214. package/dist/page-indicator/index.d.ts +1 -0
  215. package/dist/page-indicator/index.js +138 -0
  216. package/dist/page-indicator/index.js.map +1 -0
  217. package/dist/page-indicator/page-indicator.d.ts +93 -0
  218. package/dist/pagination/index.d.ts +1 -0
  219. package/dist/pagination/index.js +198 -0
  220. package/dist/pagination/index.js.map +1 -0
  221. package/dist/pagination/pagination.d.ts +125 -0
  222. package/dist/password-input/index.d.ts +1 -0
  223. package/dist/password-input/index.js +317 -0
  224. package/dist/password-input/index.js.map +1 -0
  225. package/dist/password-input/password-input.d.ts +144 -0
  226. package/dist/picker/index.d.ts +8 -0
  227. package/dist/picker/index.js +2 -0
  228. package/dist/picker/picker-machine.d.ts +80 -0
  229. package/dist/picker/picker.d.ts +121 -0
  230. package/dist/picker/platform.d.ts +84 -0
  231. package/dist/picker/selection-connect.d.ts +90 -0
  232. package/dist/picker/selection-model.d.ts +211 -0
  233. package/dist/picker-BykFntQN.js +1675 -0
  234. package/dist/picker-BykFntQN.js.map +1 -0
  235. package/dist/popover/index.d.ts +3 -0
  236. package/dist/popover/index.js +253 -0
  237. package/dist/popover/index.js.map +1 -0
  238. package/dist/popover/layer.d.ts +44 -0
  239. package/dist/popover/popover.d.ts +104 -0
  240. package/dist/popover/positioning.d.ts +132 -0
  241. package/dist/popup/index.d.ts +2 -0
  242. package/dist/popup/index.js +2 -0
  243. package/dist/popup/popup.d.ts +60 -0
  244. package/dist/popup-z5d8IYCt.js +576 -0
  245. package/dist/popup-z5d8IYCt.js.map +1 -0
  246. package/dist/portal-BHCNTWhg.js +78 -0
  247. package/dist/portal-BHCNTWhg.js.map +1 -0
  248. package/dist/portal.d.ts +61 -0
  249. package/dist/price/format.d.ts +19 -0
  250. package/dist/price/index.d.ts +1 -0
  251. package/dist/price/index.js +154 -0
  252. package/dist/price/index.js.map +1 -0
  253. package/dist/price/price.d.ts +88 -0
  254. package/dist/progress/index.d.ts +1 -0
  255. package/dist/progress/index.js +2 -0
  256. package/dist/progress/progress.d.ts +32 -0
  257. package/dist/progress-f3iYEfdA.js +37 -0
  258. package/dist/progress-f3iYEfdA.js.map +1 -0
  259. package/dist/pull-refresh/index.d.ts +1 -0
  260. package/dist/pull-refresh/index.js +414 -0
  261. package/dist/pull-refresh/index.js.map +1 -0
  262. package/dist/pull-refresh/pull-refresh.d.ts +118 -0
  263. package/dist/radio-group/index.d.ts +3 -0
  264. package/dist/radio-group/index.js +2 -0
  265. package/dist/radio-group/radio-group.d.ts +78 -0
  266. package/dist/radio-group-BOIMuqnS.js +230 -0
  267. package/dist/radio-group-BOIMuqnS.js.map +1 -0
  268. package/dist/rate/index.d.ts +1 -0
  269. package/dist/rate/index.js +2 -0
  270. package/dist/rate/rate-form.d.ts +28 -0
  271. package/dist/rate/rate.d.ts +144 -0
  272. package/dist/rate-5XsU2QkY.js +631 -0
  273. package/dist/rate-5XsU2QkY.js.map +1 -0
  274. package/dist/reorder/index.d.ts +1 -0
  275. package/dist/reorder/index.js +720 -0
  276. package/dist/reorder/index.js.map +1 -0
  277. package/dist/reorder/reorder.d.ts +190 -0
  278. package/dist/result/index.d.ts +1 -0
  279. package/dist/result/index.js +123 -0
  280. package/dist/result/index.js.map +1 -0
  281. package/dist/result/result.d.ts +88 -0
  282. package/dist/safe-area/index.d.ts +1 -0
  283. package/dist/safe-area/index.js +42 -0
  284. package/dist/safe-area/index.js.map +1 -0
  285. package/dist/safe-area/safe-area.d.ts +28 -0
  286. package/dist/search-bar/index.js +3 -1
  287. package/dist/search-bar/index.js.map +1 -1
  288. package/dist/search-bar/search-bar.d.ts +4 -0
  289. package/dist/segmented/index.d.ts +2 -0
  290. package/dist/segmented/index.js +2 -0
  291. package/dist/segmented/segmented.d.ts +127 -0
  292. package/dist/segmented-BaU38_L4.js +367 -0
  293. package/dist/segmented-BaU38_L4.js.map +1 -0
  294. package/dist/selection-form-BOM_odUk.js +88 -0
  295. package/dist/selection-form-BOM_odUk.js.map +1 -0
  296. package/dist/selection-form.d.ts +27 -0
  297. package/dist/selection-ivXqO1eu.js +55 -0
  298. package/dist/selection-ivXqO1eu.js.map +1 -0
  299. package/dist/selection.d.ts +29 -0
  300. package/dist/selector/choice-group.d.ts +114 -0
  301. package/dist/selector/index.d.ts +2 -0
  302. package/dist/selector/index.js +2 -0
  303. package/dist/selector/selector.d.ts +90 -0
  304. package/dist/selector-BU2MMJ4N.js +93 -0
  305. package/dist/selector-BU2MMJ4N.js.map +1 -0
  306. package/dist/share-sheet/index.d.ts +1 -0
  307. package/dist/share-sheet/index.js +138 -0
  308. package/dist/share-sheet/index.js.map +1 -0
  309. package/dist/share-sheet/share-sheet.d.ts +139 -0
  310. package/dist/skeleton/index.js +51 -2
  311. package/dist/skeleton/index.js.map +1 -1
  312. package/dist/skeleton/skeleton.d.ts +34 -3
  313. package/dist/slider/index.d.ts +1 -0
  314. package/dist/slider/index.js +482 -0
  315. package/dist/slider/index.js.map +1 -0
  316. package/dist/slider/slider.d.ts +174 -0
  317. package/dist/space/index.d.ts +1 -0
  318. package/dist/space/index.js +52 -0
  319. package/dist/space/index.js.map +1 -0
  320. package/dist/space/space.d.ts +46 -0
  321. package/dist/statistic/index.d.ts +1 -0
  322. package/dist/statistic/index.js +152 -0
  323. package/dist/statistic/index.js.map +1 -0
  324. package/dist/statistic/statistic.d.ts +101 -0
  325. package/dist/stepper/index.js +62 -3
  326. package/dist/stepper/index.js.map +1 -1
  327. package/dist/stepper/stepper.d.ts +44 -4
  328. package/dist/steps/index.d.ts +1 -0
  329. package/dist/steps/index.js +72 -0
  330. package/dist/steps/index.js.map +1 -0
  331. package/dist/steps/steps.d.ts +67 -0
  332. package/dist/sticky/index.d.ts +1 -0
  333. package/dist/sticky/index.js +145 -0
  334. package/dist/sticky/index.js.map +1 -0
  335. package/dist/sticky/sticky.d.ts +70 -0
  336. package/dist/swipe-action/index.d.ts +1 -0
  337. package/dist/swipe-action/index.js +417 -0
  338. package/dist/swipe-action/index.js.map +1 -0
  339. package/dist/swipe-action/swipe-action.d.ts +148 -0
  340. package/dist/swiper/gesture.d.ts +32 -0
  341. package/dist/swiper/index.d.ts +1 -0
  342. package/dist/swiper/index.js +2 -0
  343. package/dist/swiper/swiper.d.ts +177 -0
  344. package/dist/swiper-BKivDkHp.js +550 -0
  345. package/dist/swiper-BKivDkHp.js.map +1 -0
  346. package/dist/switch/index.js +135 -10
  347. package/dist/switch/index.js.map +1 -1
  348. package/dist/switch/switch.d.ts +93 -6
  349. package/dist/tabbar/index.js +46 -1
  350. package/dist/tabbar/index.js.map +1 -1
  351. package/dist/tabbar/tabbar.d.ts +50 -0
  352. package/dist/tabs/index.js +22 -1
  353. package/dist/tabs/index.js.map +1 -1
  354. package/dist/tabs/tabs.d.ts +12 -8
  355. package/dist/tag/index.js +123 -2
  356. package/dist/tag/index.js.map +1 -1
  357. package/dist/tag/tag.d.ts +67 -1
  358. package/dist/textarea/index.d.ts +2 -0
  359. package/dist/textarea/index.js +2 -242
  360. package/dist/textarea/platform.d.ts +22 -0
  361. package/dist/textarea/textarea.d.ts +165 -46
  362. package/dist/textarea-qbnruDUG.js +775 -0
  363. package/dist/textarea-qbnruDUG.js.map +1 -0
  364. package/dist/time-picker/index.d.ts +1 -0
  365. package/dist/time-picker/index.js +228 -0
  366. package/dist/time-picker/index.js.map +1 -0
  367. package/dist/time-picker/time-picker.d.ts +83 -0
  368. package/dist/timeline/index.d.ts +1 -0
  369. package/dist/timeline/index.js +131 -0
  370. package/dist/timeline/index.js.map +1 -0
  371. package/dist/timeline/timeline.d.ts +79 -0
  372. package/dist/toast/index.js +47 -4
  373. package/dist/toast/index.js.map +1 -1
  374. package/dist/toast/toast.d.ts +26 -3
  375. package/dist/top-bar/index.js +16 -2
  376. package/dist/top-bar/index.js.map +1 -1
  377. package/dist/top-bar/top-bar.d.ts +13 -2
  378. package/dist/tree-select/index.d.ts +1 -0
  379. package/dist/tree-select/index.js +512 -0
  380. package/dist/tree-select/index.js.map +1 -0
  381. package/dist/tree-select/tree-select.d.ts +215 -0
  382. package/dist/typography/index.d.ts +1 -0
  383. package/dist/typography/index.js +82 -0
  384. package/dist/typography/index.js.map +1 -0
  385. package/dist/typography/typography.d.ts +54 -0
  386. package/dist/upload/index.d.ts +1 -0
  387. package/dist/upload/index.js +458 -0
  388. package/dist/upload/index.js.map +1 -0
  389. package/dist/upload/upload.d.ts +172 -0
  390. package/dist/virtual-list/index.d.ts +1 -0
  391. package/dist/virtual-list/index.js +445 -0
  392. package/dist/virtual-list/index.js.map +1 -0
  393. package/dist/virtual-list/virtual-list.d.ts +160 -0
  394. package/dist/visual-manifest.d.ts +6 -0
  395. package/dist/watermark/index.d.ts +1 -0
  396. package/dist/watermark/index.js +260 -0
  397. package/dist/watermark/index.js.map +1 -0
  398. package/dist/watermark/watermark.d.ts +106 -0
  399. package/package.json +399 -50
  400. package/dist/empty/index.js.map +0 -1
  401. package/dist/icon/index.js.map +0 -1
  402. package/dist/textarea/index.js.map +0 -1
@@ -0,0 +1,512 @@
1
+ import { r as selectionItemKey } from "../selection-ivXqO1eu.js";
2
+ import { createMachine } from "@zag-js/core";
3
+ //#region src/tree-select/tree-select.ts
4
+ /** Stable DOM parts shared by every adapter. */
5
+ const TREE_SELECT_PARTS = [
6
+ "root",
7
+ "tree",
8
+ "item",
9
+ "row",
10
+ "indicator",
11
+ "check",
12
+ "text",
13
+ "group",
14
+ "empty"
15
+ ];
16
+ /** Single mode: which nodes can be selected. `leaf` (default): only nodes without children; `any`: every node. */
17
+ const TREE_SELECT_SELECTABLE = ["leaf", "any"];
18
+ /** Default texts. */
19
+ const TREE_SELECT_DEFAULT_TEXTS = {
20
+ label: "树形选择",
21
+ emptyText: "暂无数据"
22
+ };
23
+ const clean = (value) => typeof value === "string" ? value.trim() : "";
24
+ const TEXT_NAMES = Object.keys(TREE_SELECT_DEFAULT_TEXTS);
25
+ const strings = (value) => Array.isArray(value) ? [...new Set(value.filter((item) => typeof item === "string" && item.length > 0))] : [];
26
+ const same = (a, b) => !!a && !!b && a.length === b.length && a.every((item, index) => item === b[index]);
27
+ /** Index the tree. Empty values/labels and values repeated anywhere in the tree throw a `TypeError`. */
28
+ function createTreeSelectIndex(options = []) {
29
+ const nodes = /* @__PURE__ */ new Map(), order = [];
30
+ const walk = (list, parent) => list.map((option, index) => {
31
+ const value = typeof option?.value === "string" ? option.value : "", label = clean(option?.label);
32
+ if (!value || !label) throw new TypeError("TreeSelect options require a nonempty value and label");
33
+ if (nodes.has(value)) throw new TypeError(`TreeSelect option values must be unique across the tree: ${value}`);
34
+ const node = {
35
+ value,
36
+ label,
37
+ option,
38
+ level: (parent?.level ?? 0) + 1,
39
+ posinset: index + 1,
40
+ setsize: list.length,
41
+ parent: parent?.value ?? null,
42
+ path: [...parent?.path ?? [], value],
43
+ children: [],
44
+ leaves: [value],
45
+ leaf: true,
46
+ disabled: !!parent?.disabled || option.disabled === true
47
+ };
48
+ nodes.set(value, node);
49
+ order.push(value);
50
+ const children = Array.isArray(option.children) ? option.children : [];
51
+ if (children.length) {
52
+ node.leaf = false;
53
+ node.children = walk(children, node);
54
+ node.leaves = node.children.flatMap((child) => nodes.get(child).leaves);
55
+ }
56
+ return value;
57
+ });
58
+ return {
59
+ roots: walk(Array.isArray(options) ? options : [], null),
60
+ order,
61
+ nodes
62
+ };
63
+ }
64
+ function resolveTreeSelectMode(props = {}) {
65
+ return {
66
+ multiple: !!props.multiple,
67
+ selectable: props.selectable === "any" ? "any" : "leaf",
68
+ checkStrictly: !!props.checkStrictly
69
+ };
70
+ }
71
+ /** Whether the value may contain this node in single mode. */
72
+ const singleSelectable = (node, mode) => mode.selectable === "any" || node.leaf;
73
+ /**
74
+ * Effective value in tree order. Unknown (stale) values are ignored. Single mode keeps the first known value the mode
75
+ * allows. Cascade mode stores leaves: a parent value stands for all its leaf descendants.
76
+ */
77
+ function resolveTreeSelectValue(index, raw, mode) {
78
+ const known = /* @__PURE__ */ new Set();
79
+ for (const value of strings(raw)) {
80
+ const node = index.nodes.get(value);
81
+ if (!node) continue;
82
+ if (!mode.multiple) {
83
+ if (singleSelectable(node, mode)) return [value];
84
+ continue;
85
+ }
86
+ for (const item of mode.checkStrictly ? [value] : node.leaves) known.add(item);
87
+ }
88
+ return index.order.filter((value) => known.has(value));
89
+ }
90
+ /** Raw values that no longer match a node (for example after the options were replaced). */
91
+ function getTreeSelectStaleValue(index, raw) {
92
+ return strings(raw).filter((value) => !index.nodes.has(value));
93
+ }
94
+ /** Known parent values in tree order; leaves and unknown values are ignored. */
95
+ function resolveTreeSelectExpanded(index, raw) {
96
+ const set = new Set(strings(raw));
97
+ return index.order.filter((value) => set.has(value) && !index.nodes.get(value).leaf);
98
+ }
99
+ /** Ancestors of the given values, in tree order. */
100
+ function getTreeSelectAncestors(index, values) {
101
+ const set = new Set(values.flatMap((value) => index.nodes.get(value)?.path.slice(0, -1) ?? []));
102
+ return index.order.filter((value) => set.has(value));
103
+ }
104
+ /**
105
+ * Checked state. Cascade parents derive from their enabled leaves: all checked → true, none (and no disabled leaf
106
+ * checked) → false, otherwise "mixed". A parent whose leaves are all disabled derives from all of them.
107
+ */
108
+ function getTreeSelectCheckedState(index, value, target, mode) {
109
+ const node = index.nodes.get(target);
110
+ if (!node) return false;
111
+ if (!mode.multiple || mode.checkStrictly || node.leaf) return value.has(target);
112
+ const enabled = node.leaves.filter((leaf) => !index.nodes.get(leaf).disabled), pool = enabled.length ? enabled : node.leaves;
113
+ const count = pool.filter((leaf) => value.has(leaf)).length;
114
+ if (count === pool.length) return true;
115
+ return count > 0 || node.leaves.some((leaf) => value.has(leaf)) ? "mixed" : false;
116
+ }
117
+ /**
118
+ * Next value after activating `target`, or null when nothing changes (disabled node, non-selectable parent, reselecting
119
+ * the single value). Cascade: a parent that is not fully checked checks all its enabled leaves, a checked parent
120
+ * unchecks them; disabled leaves keep their state.
121
+ */
122
+ function toggleTreeSelectValue(index, value, target, mode) {
123
+ const node = index.nodes.get(target);
124
+ if (!node || node.disabled) return null;
125
+ if (!mode.multiple) return singleSelectable(node, mode) && value[0] !== target ? [target] : null;
126
+ const set = new Set(value);
127
+ if (mode.checkStrictly || node.leaf) if (set.has(target)) set.delete(target);
128
+ else set.add(target);
129
+ else {
130
+ const check = getTreeSelectCheckedState(index, set, target, mode) !== true;
131
+ for (const leaf of node.leaves) if (!index.nodes.get(leaf).disabled) if (check) set.add(leaf);
132
+ else set.delete(leaf);
133
+ }
134
+ const next = index.order.filter((item) => set.has(item));
135
+ return same(next, value) ? null : next;
136
+ }
137
+ /** Next expanded value after opening/closing (`open` omitted: toggle) a parent, or null when nothing changes. */
138
+ function toggleTreeSelectExpanded(index, expanded, target, open) {
139
+ const node = index.nodes.get(target);
140
+ if (!node || node.leaf) return null;
141
+ const set = new Set(expanded), next = open ?? !set.has(target);
142
+ if (next === set.has(target)) return null;
143
+ if (next) set.add(target);
144
+ else set.delete(target);
145
+ return index.order.filter((value) => set.has(value) && !index.nodes.get(value).leaf);
146
+ }
147
+ /** Visible values in tree order: roots plus the children of expanded parents whose ancestors are expanded. */
148
+ function getTreeSelectVisible(index, expanded) {
149
+ const result = [];
150
+ const walk = (values) => {
151
+ for (const value of values) {
152
+ result.push(value);
153
+ const node = index.nodes.get(value);
154
+ if (!node.leaf && expanded.has(value)) walk(node.children);
155
+ }
156
+ };
157
+ walk(index.roots);
158
+ return result;
159
+ }
160
+ function getTreeSelectLabels(index, value) {
161
+ return value.map((item) => index.nodes.get(item)?.label).filter((label) => !!label);
162
+ }
163
+ /** Trigger summary: in cascade mode a parent whose leaves are all checked is shown once instead of its leaves. */
164
+ function getTreeSelectSummary(index, value, mode) {
165
+ if (!mode.multiple || mode.checkStrictly) return getTreeSelectLabels(index, value);
166
+ const set = new Set(value), labels = [];
167
+ const walk = (values) => {
168
+ for (const item of values) {
169
+ const node = index.nodes.get(item);
170
+ if (node.leaves.every((leaf) => set.has(leaf))) labels.push(node.label);
171
+ else if (!node.leaf) walk(node.children);
172
+ }
173
+ };
174
+ walk(index.roots);
175
+ return labels;
176
+ }
177
+ /**
178
+ * WAI-ARIA tree keys from the focused node: ArrowUp/Down, Home/End, ArrowRight opens/moves to the first child,
179
+ * ArrowLeft closes/moves to the parent (mirrored when `rtl`), Enter/Space activate, a printable character moves to the
180
+ * next visible node whose label starts with it. `none`: a handled key with no effect; null: not a tree key.
181
+ */
182
+ function getTreeSelectKeyAction(index, visible, expanded, current, key, rtl = false) {
183
+ const node = index.nodes.get(current), at = visible.indexOf(current);
184
+ if (!node || at === -1) return null;
185
+ const focus = (value) => value === void 0 || value === current ? { type: "none" } : {
186
+ type: "focus",
187
+ value
188
+ };
189
+ const open = rtl ? "ArrowLeft" : "ArrowRight", close = rtl ? "ArrowRight" : "ArrowLeft";
190
+ if (key === "ArrowDown") return focus(visible[at + 1]);
191
+ if (key === "ArrowUp") return focus(visible[at - 1]);
192
+ if (key === "Home") return focus(visible[0]);
193
+ if (key === "End") return focus(visible[visible.length - 1]);
194
+ if (key === open) return node.leaf ? { type: "none" } : expanded.has(current) ? focus(node.children[0]) : {
195
+ type: "expand",
196
+ value: current,
197
+ expanded: true
198
+ };
199
+ if (key === close) return !node.leaf && expanded.has(current) ? {
200
+ type: "expand",
201
+ value: current,
202
+ expanded: false
203
+ } : focus(node.parent ?? void 0);
204
+ if (key === "Enter" || key === " ") return {
205
+ type: "activate",
206
+ value: current
207
+ };
208
+ if (key.length === 1 && key.trim()) {
209
+ const char = key.toLocaleLowerCase();
210
+ for (let step = 1; step <= visible.length; step += 1) {
211
+ const value = visible[(at + step) % visible.length];
212
+ if (index.nodes.get(value).label.toLocaleLowerCase().startsWith(char)) return focus(value);
213
+ }
214
+ return { type: "none" };
215
+ }
216
+ return null;
217
+ }
218
+ function createTreeSelectProps(props = {}) {
219
+ if (props.id !== void 0 && (typeof props.id !== "string" || !props.id.trim())) throw new TypeError("TreeSelect requires a nonempty instance id when provided");
220
+ return { ...props };
221
+ }
222
+ /** Live state: props and context re-resolved on every read, so replaced options re-derive value, labels and expansion. */
223
+ function live(prop, context) {
224
+ const index = createTreeSelectIndex(prop("options") ?? []), mode = resolveTreeSelectMode({
225
+ multiple: prop("multiple"),
226
+ selectable: prop("selectable"),
227
+ checkStrictly: prop("checkStrictly")
228
+ });
229
+ const raw = context.get("value"), value = resolveTreeSelectValue(index, raw, mode), expandedValue = resolveTreeSelectExpanded(index, context.get("expandedValue"));
230
+ const expanded = new Set(expandedValue), visible = getTreeSelectVisible(index, expanded);
231
+ const texts = Object.fromEntries(TEXT_NAMES.map((name) => [name, clean(prop(name)) || TREE_SELECT_DEFAULT_TEXTS[name]]));
232
+ return {
233
+ index,
234
+ mode,
235
+ raw,
236
+ value,
237
+ valueSet: new Set(value),
238
+ expandedValue,
239
+ expanded,
240
+ visible,
241
+ texts,
242
+ disabled: !!prop("disabled")
243
+ };
244
+ }
245
+ const ids = (scope) => {
246
+ const base = `tree-select:${scope.id}`;
247
+ return {
248
+ root: base,
249
+ tree: `${base}:tree`,
250
+ item: (value) => `${base}:item:${selectionItemKey(value)}`,
251
+ text: (value) => `${base}:text:${selectionItemKey(value)}`
252
+ };
253
+ };
254
+ /** Core owns the selection rules (single/cascade/strict), expansion, roving focus and the keyboard map; adapters only render. */
255
+ const treeSelectMachine = createMachine({
256
+ props: ({ props }) => createTreeSelectProps(props),
257
+ initialState: () => "ready",
258
+ states: { ready: {} },
259
+ context: ({ bindable, prop }) => {
260
+ const initial = () => {
261
+ const index = createTreeSelectIndex(prop("options") ?? []), mode = resolveTreeSelectMode({
262
+ multiple: prop("multiple"),
263
+ selectable: prop("selectable"),
264
+ checkStrictly: prop("checkStrictly")
265
+ });
266
+ return getTreeSelectAncestors(index, resolveTreeSelectValue(index, prop("value") ?? prop("defaultValue"), mode));
267
+ };
268
+ return {
269
+ value: bindable(() => ({
270
+ defaultValue: strings(prop("defaultValue")),
271
+ value: prop("value") === void 0 ? void 0 : strings(prop("value")),
272
+ isEqual: same,
273
+ hash: (value) => value.join("\0")
274
+ })),
275
+ expandedValue: bindable(() => ({
276
+ defaultValue: prop("defaultExpandedValue") === void 0 ? initial() : strings(prop("defaultExpandedValue")),
277
+ value: prop("expandedValue") === void 0 ? void 0 : strings(prop("expandedValue")),
278
+ isEqual: same,
279
+ hash: (value) => value.join("\0")
280
+ })),
281
+ focusedValue: bindable(() => ({ defaultValue: null }))
282
+ };
283
+ },
284
+ on: {
285
+ "NODE.ACTIVATE": { actions: ["activate"] },
286
+ "NODE.EXPAND": { actions: ["expand"] },
287
+ "NODE.FOCUS": { actions: ["focus"] }
288
+ },
289
+ implementations: { actions: {
290
+ activate({ event, prop, context }) {
291
+ if (event.type !== "NODE.ACTIVATE") return;
292
+ const now = live(prop, context), node = now.index.nodes.get(event.value);
293
+ if (!node) return;
294
+ context.set("focusedValue", node.value);
295
+ if (!now.mode.multiple && !singleSelectable(node, now.mode)) {
296
+ const expandedValue = toggleTreeSelectExpanded(now.index, now.expandedValue, node.value);
297
+ if (expandedValue) {
298
+ prop("onExpandedChange")?.({
299
+ value: expandedValue,
300
+ target: node.value,
301
+ expanded: expandedValue.includes(node.value)
302
+ });
303
+ context.set("expandedValue", expandedValue);
304
+ }
305
+ return;
306
+ }
307
+ const value = now.disabled ? null : toggleTreeSelectValue(now.index, now.value, node.value, now.mode);
308
+ if (!value) return;
309
+ const selected = now.mode.multiple ? getTreeSelectCheckedState(now.index, new Set(value), node.value, now.mode) === true : true;
310
+ prop("onValueChange")?.({
311
+ value: [...value],
312
+ labels: getTreeSelectLabels(now.index, value),
313
+ target: node.value,
314
+ selected
315
+ });
316
+ context.set("value", value);
317
+ },
318
+ expand({ event, prop, context }) {
319
+ if (event.type !== "NODE.EXPAND") return;
320
+ const now = live(prop, context), expandedValue = toggleTreeSelectExpanded(now.index, now.expandedValue, event.value, event.expanded);
321
+ if (!expandedValue) return;
322
+ prop("onExpandedChange")?.({
323
+ value: expandedValue,
324
+ target: event.value,
325
+ expanded: expandedValue.includes(event.value)
326
+ });
327
+ context.set("expandedValue", expandedValue);
328
+ },
329
+ focus({ event, context, scope }) {
330
+ if (event.type !== "NODE.FOCUS") return;
331
+ context.set("focusedValue", event.value);
332
+ if (event.move) queueMicrotask(() => scope.getById(ids(scope).item(event.value))?.focus());
333
+ }
334
+ } }
335
+ });
336
+ function connectTreeSelect(service, normalize) {
337
+ const now = live(service.prop, service.context), id = ids(service.scope), { index, mode, valueSet, expanded, visible, texts, disabled } = now;
338
+ const visibleSet = new Set(visible);
339
+ const nearestVisible = (value) => {
340
+ for (let node = value ? index.nodes.get(value) : void 0; node; node = node.parent ? index.nodes.get(node.parent) : void 0) if (visibleSet.has(node.value)) return node.value;
341
+ return null;
342
+ };
343
+ const tabValue = nearestVisible(service.context.get("focusedValue")) ?? now.value.map(nearestVisible).find((value) => !!value) ?? visible[0] ?? null;
344
+ const part = (name) => ({
345
+ "data-scope": "tree-select",
346
+ "data-part": name
347
+ });
348
+ const build = (value) => {
349
+ const node = index.nodes.get(value), open = !node.leaf && expanded.has(value), checked = getTreeSelectCheckedState(index, valueSet, value, mode);
350
+ return {
351
+ value,
352
+ label: node.label,
353
+ option: node.option,
354
+ level: node.level,
355
+ posinset: node.posinset,
356
+ setsize: node.setsize,
357
+ leaf: node.leaf,
358
+ expanded: open,
359
+ disabled: node.disabled,
360
+ selectable: !disabled && !node.disabled && (mode.multiple || singleSelectable(node, mode)),
361
+ selected: checked === true,
362
+ checked,
363
+ focusable: value === tabValue,
364
+ children: open ? node.children.map(build) : []
365
+ };
366
+ };
367
+ const items = index.roots.map(build);
368
+ const state = (item) => item.checked === "mixed" ? "indeterminate" : item.checked ? "checked" : "unchecked";
369
+ const flag = (value) => value ? "true" : void 0;
370
+ return {
371
+ value: now.value,
372
+ labels: getTreeSelectLabels(index, now.value),
373
+ summary: getTreeSelectSummary(index, now.value, mode),
374
+ staleValue: getTreeSelectStaleValue(index, now.raw),
375
+ expandedValue: now.expandedValue,
376
+ visibleValue: visible,
377
+ focusedValue: service.context.get("focusedValue"),
378
+ multiple: mode.multiple,
379
+ disabled,
380
+ empty: index.roots.length === 0,
381
+ label: texts.label,
382
+ emptyText: texts.emptyText,
383
+ items,
384
+ activate: (value) => service.send({
385
+ type: "NODE.ACTIVATE",
386
+ value
387
+ }),
388
+ setExpanded: (value, open) => service.send({
389
+ type: "NODE.EXPAND",
390
+ value,
391
+ expanded: open
392
+ }),
393
+ focus: (value) => service.send({
394
+ type: "NODE.FOCUS",
395
+ value,
396
+ move: true
397
+ }),
398
+ getRootProps: () => normalize.element({
399
+ ...part("root"),
400
+ id: id.root,
401
+ "data-multiple": flag(mode.multiple),
402
+ "data-disabled": flag(disabled),
403
+ "data-selectable": mode.multiple ? void 0 : mode.selectable
404
+ }),
405
+ getTreeProps: () => normalize.element({
406
+ ...part("tree"),
407
+ id: id.tree,
408
+ role: "tree",
409
+ "aria-label": texts.label,
410
+ "aria-multiselectable": mode.multiple ? "true" : void 0,
411
+ "aria-disabled": flag(disabled),
412
+ hidden: index.roots.length === 0 || void 0
413
+ }),
414
+ getItemProps: (item) => normalize.element({
415
+ ...part("item"),
416
+ id: id.item(item.value),
417
+ role: "treeitem",
418
+ tabIndex: item.focusable ? 0 : -1,
419
+ "aria-labelledby": id.text(item.value),
420
+ "aria-level": item.level,
421
+ "aria-setsize": item.setsize,
422
+ "aria-posinset": item.posinset,
423
+ "aria-expanded": item.leaf ? void 0 : item.expanded ? "true" : "false",
424
+ "aria-selected": mode.multiple || !singleSelectable(index.nodes.get(item.value), mode) ? void 0 : item.selected ? "true" : "false",
425
+ "aria-checked": mode.multiple ? item.checked === "mixed" ? "mixed" : item.checked ? "true" : "false" : void 0,
426
+ "aria-disabled": flag(item.disabled || disabled),
427
+ "data-value": item.value,
428
+ "data-level": item.level,
429
+ "data-leaf": flag(item.leaf),
430
+ "data-state": item.leaf ? void 0 : item.expanded ? "open" : "closed",
431
+ "data-selected": flag(item.selected),
432
+ "data-disabled": flag(item.disabled),
433
+ onKeyDown(event) {
434
+ if (event.target !== event.currentTarget || event.defaultPrevented || event.altKey || event.ctrlKey || event.metaKey) return;
435
+ const rtl = event.currentTarget?.closest?.("[dir]")?.getAttribute("dir") === "rtl";
436
+ const action = getTreeSelectKeyAction(index, visible, expanded, item.value, event.key, rtl);
437
+ if (!action) return;
438
+ event.preventDefault();
439
+ if (action.type === "focus") service.send({
440
+ type: "NODE.FOCUS",
441
+ value: action.value,
442
+ move: true
443
+ });
444
+ else if (action.type === "expand") service.send({
445
+ type: "NODE.EXPAND",
446
+ value: action.value,
447
+ expanded: action.expanded
448
+ });
449
+ else if (action.type === "activate" && !event.repeat) service.send({
450
+ type: "NODE.ACTIVATE",
451
+ value: action.value
452
+ });
453
+ },
454
+ onFocus(event) {
455
+ if (event.target === event.currentTarget) service.send({
456
+ type: "NODE.FOCUS",
457
+ value: item.value
458
+ });
459
+ }
460
+ }),
461
+ getRowProps: (item) => normalize.element({
462
+ ...part("row"),
463
+ "data-value": item.value,
464
+ "data-state": state(item),
465
+ "data-selected": flag(item.selected),
466
+ "data-disabled": flag(item.disabled || disabled),
467
+ style: { "--qw-tree-select-depth": String(item.level - 1) },
468
+ onClick: () => service.send({
469
+ type: "NODE.ACTIVATE",
470
+ value: item.value
471
+ })
472
+ }),
473
+ getIndicatorProps: (item) => normalize.element({
474
+ ...part("indicator"),
475
+ "aria-hidden": "true",
476
+ "data-leaf": flag(item.leaf),
477
+ "data-state": item.leaf ? void 0 : item.expanded ? "open" : "closed",
478
+ ...item.leaf ? {} : { onClick: (event) => {
479
+ event.stopPropagation();
480
+ service.send({
481
+ type: "NODE.EXPAND",
482
+ value: item.value
483
+ });
484
+ } }
485
+ }),
486
+ getCheckProps: (item) => normalize.element({
487
+ ...part("check"),
488
+ "aria-hidden": "true",
489
+ "data-state": state(item),
490
+ "data-type": mode.multiple ? "checkbox" : "radio",
491
+ "data-disabled": flag(!item.selectable),
492
+ hidden: !mode.multiple && !(mode.selectable === "any" || item.leaf) || void 0
493
+ }),
494
+ getTextProps: (item) => normalize.element({
495
+ ...part("text"),
496
+ id: id.text(item.value)
497
+ }),
498
+ getGroupProps: (item) => normalize.element({
499
+ ...part("group"),
500
+ role: "group",
501
+ "data-value": item.value
502
+ }),
503
+ getEmptyProps: () => normalize.element({
504
+ ...part("empty"),
505
+ hidden: index.roots.length > 0 || void 0
506
+ })
507
+ };
508
+ }
509
+ //#endregion
510
+ export { TREE_SELECT_DEFAULT_TEXTS, TREE_SELECT_PARTS, TREE_SELECT_SELECTABLE, connectTreeSelect, createTreeSelectIndex, createTreeSelectProps, getTreeSelectAncestors, getTreeSelectCheckedState, getTreeSelectKeyAction, getTreeSelectLabels, getTreeSelectStaleValue, getTreeSelectSummary, getTreeSelectVisible, resolveTreeSelectExpanded, resolveTreeSelectMode, resolveTreeSelectValue, toggleTreeSelectExpanded, toggleTreeSelectValue, treeSelectMachine };
511
+
512
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/tree-select/tree-select.ts"],"sourcesContent":["import { createMachine, type Machine, type Service } from \"@zag-js/core\";\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\";\nimport { selectionItemKey, type QwSelectionItem } from \"../selection.js\";\n\n/** Stable DOM parts shared by every adapter. */\nexport const TREE_SELECT_PARTS = [\"root\", \"tree\", \"item\", \"row\", \"indicator\", \"check\", \"text\", \"group\", \"empty\"] as const;\nexport type TreeSelectPart = (typeof TREE_SELECT_PARTS)[number];\n/** Single mode: which nodes can be selected. `leaf` (default): only nodes without children; `any`: every node. */\nexport const TREE_SELECT_SELECTABLE = [\"leaf\", \"any\"] as const;\nexport type TreeSelectSelectable = (typeof TREE_SELECT_SELECTABLE)[number];\n/** Default texts. */\nexport const TREE_SELECT_DEFAULT_TEXTS = { label: \"树形选择\", emptyText: \"暂无数据\" } as const;\nexport type TreeSelectTexts = { -readonly [K in keyof typeof TREE_SELECT_DEFAULT_TEXTS]: string };\n\n/** One caller-owned node. `value` is unique across the whole tree; an empty or missing `children` array makes a leaf. */\nexport interface TreeSelectOption extends Pick<QwSelectionItem, \"value\" | \"label\" | \"disabled\"> { children?: readonly TreeSelectOption[] }\n/** Indexed node. `disabled` is inherited: a disabled node disables its whole subtree (expansion stays available). */\nexport interface TreeSelectNode {\n value: string; label: string; option: TreeSelectOption;\n /** 1-based depth, position among siblings and sibling count (aria-level / aria-posinset / aria-setsize). */\n level: number; posinset: number; setsize: number;\n parent: string | null; path: string[]; children: string[];\n /** Leaf descendants in tree order (the node itself for a leaf). */\n leaves: string[]; leaf: boolean; disabled: boolean;\n}\nexport interface TreeSelectIndex { roots: string[]; order: string[]; nodes: Map<string, TreeSelectNode> }\nexport interface TreeSelectMode { multiple: boolean; selectable: TreeSelectSelectable; checkStrictly: boolean }\nexport type TreeSelectCheckedState = boolean | \"mixed\";\n/** Selection proposal: the complete next value (tree order), its labels, the activated node and whether it is now selected/checked. */\nexport interface TreeSelectValueChangeDetails { value: string[]; labels: string[]; target: string; selected: boolean }\n/** Expansion proposal: the complete next expanded parent values (tree order), the toggled node and its next state. */\nexport interface TreeSelectExpandedChangeDetails { value: string[]; target: string; expanded: boolean }\n/** Rendered node; `children` holds the visible children only (empty while collapsed). */\nexport interface TreeSelectItem {\n value: string; label: string; option: TreeSelectOption; level: number; posinset: number; setsize: number;\n leaf: boolean; expanded: boolean; disabled: boolean;\n /** Activating this node changes the value (false for disabled nodes, a disabled tree and parents in single `leaf` mode). */\n selectable: boolean;\n selected: boolean; checked: TreeSelectCheckedState; focusable: boolean; children: TreeSelectItem[];\n}\n\nexport interface QwTreeSelectProps extends Partial<TreeSelectTexts> {\n /** Page-unique instance identity; adapters generate one when omitted. */\n id?: string;\n /** Caller-owned hierarchical data; never mutated. Replace it to update; the value and labels are re-resolved against it. */\n options?: readonly TreeSelectOption[];\n /** Checkbox semantics (`aria-checked`) instead of single selection (`aria-selected`). */\n multiple?: boolean;\n /** Single mode only: `leaf` (default) or `any`. */\n selectable?: TreeSelectSelectable;\n /** Multiple mode only: check nodes independently, without parent/child cascade. */\n checkStrictly?: boolean;\n /** Controlled value. It only changes when the owner updates it; not updating rejects a proposal. */\n value?: readonly string[];\n defaultValue?: readonly string[];\n /** Controlled expanded parent values; same owner contract as `value`. */\n expandedValue?: readonly string[];\n /** Initial expanded parent values; omitted expands the ancestors of the initial value. */\n defaultExpandedValue?: readonly string[];\n /** Block every selection change; browsing (focus, expand/collapse) stays available. */\n disabled?: boolean;\n onValueChange?: (details: TreeSelectValueChangeDetails) => void;\n onExpandedChange?: (details: TreeSelectExpandedChangeDetails) => void;\n}\n\nconst clean = (value: unknown): string => typeof value === \"string\" ? value.trim() : \"\";\nconst TEXT_NAMES = Object.keys(TREE_SELECT_DEFAULT_TEXTS) as (keyof TreeSelectTexts)[];\nconst strings = (value: unknown): string[] => Array.isArray(value) ? [...new Set(value.filter((item): item is string => typeof item === \"string\" && item.length > 0))] : [];\nconst same = (a: readonly string[] | undefined, b: readonly string[] | undefined) => !!a && !!b && a.length === b.length && a.every((item, index) => item === b[index]);\n\n/** Index the tree. Empty values/labels and values repeated anywhere in the tree throw a `TypeError`. */\nexport function createTreeSelectIndex(options: readonly TreeSelectOption[] = []): TreeSelectIndex {\n const nodes = new Map<string, TreeSelectNode>(), order: string[] = [];\n const walk = (list: readonly TreeSelectOption[], parent: TreeSelectNode | null): string[] => list.map((option, index) => {\n const value = typeof option?.value === \"string\" ? option.value : \"\", label = clean(option?.label);\n if (!value || !label) throw new TypeError(\"TreeSelect options require a nonempty value and label\");\n if (nodes.has(value)) throw new TypeError(`TreeSelect option values must be unique across the tree: ${value}`);\n const node: TreeSelectNode = { value, label, option, level: (parent?.level ?? 0) + 1, posinset: index + 1, setsize: list.length, parent: parent?.value ?? null,\n path: [...(parent?.path ?? []), value], children: [], leaves: [value], leaf: true, disabled: !!parent?.disabled || option.disabled === true };\n nodes.set(value, node); order.push(value);\n const children = Array.isArray(option.children) ? option.children : [];\n if (children.length) { node.leaf = false; node.children = walk(children, node); node.leaves = node.children.flatMap((child) => nodes.get(child)!.leaves); }\n return value;\n });\n const roots = walk(Array.isArray(options) ? options : [], null);\n return { roots, order, nodes };\n}\nexport function resolveTreeSelectMode(props: Pick<QwTreeSelectProps, \"multiple\" | \"selectable\" | \"checkStrictly\"> = {}): TreeSelectMode {\n return { multiple: !!props.multiple, selectable: props.selectable === \"any\" ? \"any\" : \"leaf\", checkStrictly: !!props.checkStrictly };\n}\n/** Whether the value may contain this node in single mode. */\nconst singleSelectable = (node: TreeSelectNode, mode: TreeSelectMode) => mode.selectable === \"any\" || node.leaf;\n\n/**\n * Effective value in tree order. Unknown (stale) values are ignored. Single mode keeps the first known value the mode\n * allows. Cascade mode stores leaves: a parent value stands for all its leaf descendants.\n */\nexport function resolveTreeSelectValue(index: TreeSelectIndex, raw: readonly unknown[] | null | undefined, mode: TreeSelectMode): string[] {\n const known = new Set<string>();\n for (const value of strings(raw)) {\n const node = index.nodes.get(value);\n if (!node) continue;\n if (!mode.multiple) { if (singleSelectable(node, mode)) return [value]; continue; }\n for (const item of mode.checkStrictly ? [value] : node.leaves) known.add(item);\n }\n return index.order.filter((value) => known.has(value));\n}\n/** Raw values that no longer match a node (for example after the options were replaced). */\nexport function getTreeSelectStaleValue(index: TreeSelectIndex, raw: readonly unknown[] | null | undefined): string[] {\n return strings(raw).filter((value) => !index.nodes.has(value));\n}\n/** Known parent values in tree order; leaves and unknown values are ignored. */\nexport function resolveTreeSelectExpanded(index: TreeSelectIndex, raw: readonly unknown[] | null | undefined): string[] {\n const set = new Set(strings(raw));\n return index.order.filter((value) => set.has(value) && !index.nodes.get(value)!.leaf);\n}\n/** Ancestors of the given values, in tree order. */\nexport function getTreeSelectAncestors(index: TreeSelectIndex, values: readonly string[]): string[] {\n const set = new Set(values.flatMap((value) => index.nodes.get(value)?.path.slice(0, -1) ?? []));\n return index.order.filter((value) => set.has(value));\n}\n/**\n * Checked state. Cascade parents derive from their enabled leaves: all checked → true, none (and no disabled leaf\n * checked) → false, otherwise \"mixed\". A parent whose leaves are all disabled derives from all of them.\n */\nexport function getTreeSelectCheckedState(index: TreeSelectIndex, value: ReadonlySet<string>, target: string, mode: TreeSelectMode): TreeSelectCheckedState {\n const node = index.nodes.get(target);\n if (!node) return false;\n if (!mode.multiple || mode.checkStrictly || node.leaf) return value.has(target);\n const enabled = node.leaves.filter((leaf) => !index.nodes.get(leaf)!.disabled), pool = enabled.length ? enabled : node.leaves;\n const count = pool.filter((leaf) => value.has(leaf)).length;\n if (count === pool.length) return true;\n return count > 0 || node.leaves.some((leaf) => value.has(leaf)) ? \"mixed\" : false;\n}\n/**\n * Next value after activating `target`, or null when nothing changes (disabled node, non-selectable parent, reselecting\n * the single value). Cascade: a parent that is not fully checked checks all its enabled leaves, a checked parent\n * unchecks them; disabled leaves keep their state.\n */\nexport function toggleTreeSelectValue(index: TreeSelectIndex, value: readonly string[], target: string, mode: TreeSelectMode): string[] | null {\n const node = index.nodes.get(target);\n if (!node || node.disabled) return null;\n if (!mode.multiple) return singleSelectable(node, mode) && value[0] !== target ? [target] : null;\n const set = new Set(value);\n if (mode.checkStrictly || node.leaf) { if (set.has(target)) set.delete(target); else set.add(target); }\n else {\n const check = getTreeSelectCheckedState(index, set, target, mode) !== true;\n for (const leaf of node.leaves) if (!index.nodes.get(leaf)!.disabled) { if (check) set.add(leaf); else set.delete(leaf); }\n }\n const next = index.order.filter((item) => set.has(item));\n return same(next, value) ? null : next;\n}\n/** Next expanded value after opening/closing (`open` omitted: toggle) a parent, or null when nothing changes. */\nexport function toggleTreeSelectExpanded(index: TreeSelectIndex, expanded: readonly string[], target: string, open?: boolean): string[] | null {\n const node = index.nodes.get(target);\n if (!node || node.leaf) return null;\n const set = new Set(expanded), next = open ?? !set.has(target);\n if (next === set.has(target)) return null;\n if (next) set.add(target); else set.delete(target);\n return index.order.filter((value) => set.has(value) && !index.nodes.get(value)!.leaf);\n}\n/** Visible values in tree order: roots plus the children of expanded parents whose ancestors are expanded. */\nexport function getTreeSelectVisible(index: TreeSelectIndex, expanded: ReadonlySet<string>): string[] {\n const result: string[] = [];\n const walk = (values: readonly string[]) => { for (const value of values) { result.push(value); const node = index.nodes.get(value)!; if (!node.leaf && expanded.has(value)) walk(node.children); } };\n walk(index.roots);\n return result;\n}\nexport function getTreeSelectLabels(index: TreeSelectIndex, value: readonly string[]): string[] {\n return value.map((item) => index.nodes.get(item)?.label).filter((label): label is string => !!label);\n}\n/** Trigger summary: in cascade mode a parent whose leaves are all checked is shown once instead of its leaves. */\nexport function getTreeSelectSummary(index: TreeSelectIndex, value: readonly string[], mode: TreeSelectMode): string[] {\n if (!mode.multiple || mode.checkStrictly) return getTreeSelectLabels(index, value);\n const set = new Set(value), labels: string[] = [];\n const walk = (values: readonly string[]) => { for (const item of values) { const node = index.nodes.get(item)!; if (node.leaves.every((leaf) => set.has(leaf))) labels.push(node.label); else if (!node.leaf) walk(node.children); } };\n walk(index.roots);\n return labels;\n}\nexport type TreeSelectKeyAction =\n | { type: \"focus\"; value: string }\n | { type: \"expand\"; value: string; expanded: boolean }\n | { type: \"activate\"; value: string }\n | { type: \"none\" };\n/**\n * WAI-ARIA tree keys from the focused node: ArrowUp/Down, Home/End, ArrowRight opens/moves to the first child,\n * ArrowLeft closes/moves to the parent (mirrored when `rtl`), Enter/Space activate, a printable character moves to the\n * next visible node whose label starts with it. `none`: a handled key with no effect; null: not a tree key.\n */\nexport function getTreeSelectKeyAction(index: TreeSelectIndex, visible: readonly string[], expanded: ReadonlySet<string>, current: string, key: string, rtl = false): TreeSelectKeyAction | null {\n const node = index.nodes.get(current), at = visible.indexOf(current);\n if (!node || at === -1) return null;\n const focus = (value: string | undefined): TreeSelectKeyAction => value === undefined || value === current ? { type: \"none\" } : { type: \"focus\", value };\n const open = rtl ? \"ArrowLeft\" : \"ArrowRight\", close = rtl ? \"ArrowRight\" : \"ArrowLeft\";\n if (key === \"ArrowDown\") return focus(visible[at + 1]);\n if (key === \"ArrowUp\") return focus(visible[at - 1]);\n if (key === \"Home\") return focus(visible[0]);\n if (key === \"End\") return focus(visible[visible.length - 1]);\n if (key === open) return node.leaf ? { type: \"none\" } : expanded.has(current) ? focus(node.children[0]) : { type: \"expand\", value: current, expanded: true };\n if (key === close) return !node.leaf && expanded.has(current) ? { type: \"expand\", value: current, expanded: false } : focus(node.parent ?? undefined);\n if (key === \"Enter\" || key === \" \") return { type: \"activate\", value: current };\n if (key.length === 1 && key.trim()) {\n const char = key.toLocaleLowerCase();\n for (let step = 1; step <= visible.length; step += 1) {\n const value = visible[(at + step) % visible.length]!;\n if (index.nodes.get(value)!.label.toLocaleLowerCase().startsWith(char)) return focus(value);\n }\n return { type: \"none\" };\n }\n return null;\n}\nexport function createTreeSelectProps(props: QwTreeSelectProps = {}): QwTreeSelectProps {\n if (props.id !== undefined && (typeof props.id !== \"string\" || !props.id.trim())) throw new TypeError(\"TreeSelect requires a nonempty instance id when provided\");\n return { ...props };\n}\n\nexport interface QwTreeSelectSchema {\n props: QwTreeSelectProps;\n context: { value: string[]; expandedValue: string[]; focusedValue: string | null };\n state: \"ready\";\n action: \"activate\" | \"expand\" | \"focus\";\n event:\n | { type: \"NODE.ACTIVATE\"; value: string }\n | { type: \"NODE.EXPAND\"; value: string; expanded?: boolean }\n | { type: \"NODE.FOCUS\"; value: string; move?: boolean };\n}\nexport type QwTreeSelectMachine = Machine<QwTreeSelectSchema>;\nexport type QwTreeSelectService = Service<QwTreeSelectSchema>;\ntype PropReader = <K extends keyof QwTreeSelectProps>(key: K) => QwTreeSelectProps[K];\ntype ContextReader = { get<K extends keyof QwTreeSelectSchema[\"context\"]>(key: K): QwTreeSelectSchema[\"context\"][K] };\n\n/** Live state: props and context re-resolved on every read, so replaced options re-derive value, labels and expansion. */\nfunction live(prop: PropReader, context: ContextReader) {\n const index = createTreeSelectIndex(prop(\"options\") ?? []), mode = resolveTreeSelectMode({ multiple: prop(\"multiple\"), selectable: prop(\"selectable\"), checkStrictly: prop(\"checkStrictly\") });\n const raw = context.get(\"value\"), value = resolveTreeSelectValue(index, raw, mode), expandedValue = resolveTreeSelectExpanded(index, context.get(\"expandedValue\"));\n const expanded = new Set(expandedValue), visible = getTreeSelectVisible(index, expanded);\n const texts = Object.fromEntries(TEXT_NAMES.map((name) => [name, clean(prop(name)) || TREE_SELECT_DEFAULT_TEXTS[name]])) as TreeSelectTexts;\n return { index, mode, raw, value, valueSet: new Set(value), expandedValue, expanded, visible, texts, disabled: !!prop(\"disabled\") };\n}\nconst ids = (scope: QwTreeSelectService[\"scope\"]) => {\n const base = `tree-select:${scope.id}`;\n return { root: base, tree: `${base}:tree`, item: (value: string) => `${base}:item:${selectionItemKey(value)}`, text: (value: string) => `${base}:text:${selectionItemKey(value)}` };\n};\n\n/** Core owns the selection rules (single/cascade/strict), expansion, roving focus and the keyboard map; adapters only render. */\nexport const treeSelectMachine: QwTreeSelectMachine = createMachine<QwTreeSelectSchema>({\n props: ({ props }) => createTreeSelectProps(props), initialState: () => \"ready\", states: { ready: {} },\n context: ({ bindable, prop }) => {\n const initial = () => {\n const index = createTreeSelectIndex(prop(\"options\") ?? []), mode = resolveTreeSelectMode({ multiple: prop(\"multiple\"), selectable: prop(\"selectable\"), checkStrictly: prop(\"checkStrictly\") });\n return getTreeSelectAncestors(index, resolveTreeSelectValue(index, prop(\"value\") ?? prop(\"defaultValue\"), mode));\n };\n return {\n value: bindable<string[]>(() => ({ defaultValue: strings(prop(\"defaultValue\")), value: prop(\"value\") === undefined ? undefined : strings(prop(\"value\")), isEqual: same, hash: (value) => value.join(\"\\u0000\") })),\n expandedValue: bindable<string[]>(() => ({ defaultValue: prop(\"defaultExpandedValue\") === undefined ? initial() : strings(prop(\"defaultExpandedValue\")),\n value: prop(\"expandedValue\") === undefined ? undefined : strings(prop(\"expandedValue\")), isEqual: same, hash: (value) => value.join(\"\\u0000\") })),\n focusedValue: bindable<string | null>(() => ({ defaultValue: null })),\n };\n },\n on: { \"NODE.ACTIVATE\": { actions: [\"activate\"] }, \"NODE.EXPAND\": { actions: [\"expand\"] }, \"NODE.FOCUS\": { actions: [\"focus\"] } },\n implementations: {\n actions: {\n activate({ event, prop, context }) {\n if (event.type !== \"NODE.ACTIVATE\") return;\n const now = live(prop, context), node = now.index.nodes.get(event.value);\n if (!node) return;\n context.set(\"focusedValue\", node.value);\n // Single `leaf` mode: activating a parent opens/closes it instead of selecting it.\n if (!now.mode.multiple && !singleSelectable(node, now.mode)) {\n const expandedValue = toggleTreeSelectExpanded(now.index, now.expandedValue, node.value);\n if (expandedValue) { prop(\"onExpandedChange\")?.({ value: expandedValue, target: node.value, expanded: expandedValue.includes(node.value) }); context.set(\"expandedValue\", expandedValue); }\n return;\n }\n const value = now.disabled ? null : toggleTreeSelectValue(now.index, now.value, node.value, now.mode);\n if (!value) return;\n const selected = now.mode.multiple ? getTreeSelectCheckedState(now.index, new Set(value), node.value, now.mode) === true : true;\n // The owner decides: controlled values only change when the owner updates `value`.\n prop(\"onValueChange\")?.({ value: [...value], labels: getTreeSelectLabels(now.index, value), target: node.value, selected });\n context.set(\"value\", value);\n },\n expand({ event, prop, context }) {\n if (event.type !== \"NODE.EXPAND\") return;\n const now = live(prop, context), expandedValue = toggleTreeSelectExpanded(now.index, now.expandedValue, event.value, event.expanded);\n if (!expandedValue) return;\n prop(\"onExpandedChange\")?.({ value: expandedValue, target: event.value, expanded: expandedValue.includes(event.value) });\n context.set(\"expandedValue\", expandedValue);\n },\n focus({ event, context, scope }) {\n if (event.type !== \"NODE.FOCUS\") return;\n context.set(\"focusedValue\", event.value);\n if (event.move) queueMicrotask(() => scope.getById<HTMLElement>(ids(scope).item(event.value))?.focus());\n },\n },\n },\n});\n\nexport interface QwTreeSelectApi<T extends PropTypes = PropTypes> {\n /** Effective value in tree order (cascade mode: checked leaves). */\n value: string[];\n /** Labels of `value`, in the same order. */\n labels: string[];\n /** Trigger summary labels: fully checked cascade parents collapse into their own label. */\n summary: string[];\n /** Raw values that match no node of the current options; they are dropped by the next selection change. */\n staleValue: string[];\n expandedValue: string[];\n /** Visible node values in tree order. */\n visibleValue: string[];\n focusedValue: string | null;\n multiple: boolean; disabled: boolean; empty: boolean; label: string; emptyText: string;\n /** Root nodes; each item carries its visible children. */\n items: TreeSelectItem[];\n activate(value: string): void;\n setExpanded(value: string, expanded: boolean): void;\n focus(value: string): void;\n getRootProps(): T[\"element\"];\n getTreeProps(): T[\"element\"];\n getItemProps(item: TreeSelectItem): T[\"element\"];\n getRowProps(item: TreeSelectItem): T[\"element\"];\n getIndicatorProps(item: TreeSelectItem): T[\"element\"];\n getCheckProps(item: TreeSelectItem): T[\"element\"];\n getTextProps(item: TreeSelectItem): T[\"element\"];\n getGroupProps(item: TreeSelectItem): T[\"element\"];\n getEmptyProps(): T[\"element\"];\n}\ntype KeyEventLike = { key: string; target: EventTarget | null; currentTarget: EventTarget | null; defaultPrevented: boolean; altKey: boolean; ctrlKey: boolean; metaKey: boolean; repeat?: boolean; preventDefault(): void };\ntype FocusEventLike = { target: EventTarget | null; currentTarget: EventTarget | null };\ntype ClickEventLike = { stopPropagation(): void };\n\nexport function connectTreeSelect<T extends PropTypes>(service: QwTreeSelectService, normalize: NormalizeProps<T>): QwTreeSelectApi<T> {\n const now = live(service.prop, service.context), id = ids(service.scope), { index, mode, valueSet, expanded, visible, texts, disabled } = now;\n const visibleSet = new Set(visible);\n const nearestVisible = (value: string | null | undefined): string | null => {\n for (let node = value ? index.nodes.get(value) : undefined; node; node = node.parent ? index.nodes.get(node.parent) : undefined) if (visibleSet.has(node.value)) return node.value;\n return null;\n };\n // Roving tabindex: the focused node, else the first selected node (or its nearest visible ancestor), else the first node.\n const tabValue = nearestVisible(service.context.get(\"focusedValue\")) ?? now.value.map(nearestVisible).find((value): value is string => !!value) ?? visible[0] ?? null;\n const part = (name: TreeSelectPart) => ({ \"data-scope\": \"tree-select\", \"data-part\": name });\n const build = (value: string): TreeSelectItem => {\n const node = index.nodes.get(value)!, open = !node.leaf && expanded.has(value), checked = getTreeSelectCheckedState(index, valueSet, value, mode);\n return { value, label: node.label, option: node.option, level: node.level, posinset: node.posinset, setsize: node.setsize, leaf: node.leaf, expanded: open, disabled: node.disabled,\n selectable: !disabled && !node.disabled && (mode.multiple || singleSelectable(node, mode)), selected: checked === true, checked, focusable: value === tabValue,\n children: open ? node.children.map(build) : [] };\n };\n const items = index.roots.map(build);\n const state = (item: TreeSelectItem) => item.checked === \"mixed\" ? \"indeterminate\" : item.checked ? \"checked\" : \"unchecked\";\n const flag = (value: boolean) => value ? \"true\" : undefined;\n return {\n value: now.value, labels: getTreeSelectLabels(index, now.value), summary: getTreeSelectSummary(index, now.value, mode), staleValue: getTreeSelectStaleValue(index, now.raw),\n expandedValue: now.expandedValue, visibleValue: visible, focusedValue: service.context.get(\"focusedValue\"),\n multiple: mode.multiple, disabled, empty: index.roots.length === 0, label: texts.label, emptyText: texts.emptyText, items,\n activate: (value) => service.send({ type: \"NODE.ACTIVATE\", value }),\n setExpanded: (value, open) => service.send({ type: \"NODE.EXPAND\", value, expanded: open }),\n focus: (value) => service.send({ type: \"NODE.FOCUS\", value, move: true }),\n getRootProps: () => normalize.element({ ...part(\"root\"), id: id.root, \"data-multiple\": flag(mode.multiple), \"data-disabled\": flag(disabled), \"data-selectable\": mode.multiple ? undefined : mode.selectable }),\n getTreeProps: () => normalize.element({ ...part(\"tree\"), id: id.tree, role: \"tree\", \"aria-label\": texts.label, \"aria-multiselectable\": mode.multiple ? \"true\" : undefined,\n \"aria-disabled\": flag(disabled), hidden: index.roots.length === 0 || undefined }),\n getItemProps: (item) => normalize.element({\n ...part(\"item\"), id: id.item(item.value), role: \"treeitem\", tabIndex: item.focusable ? 0 : -1, \"aria-labelledby\": id.text(item.value),\n \"aria-level\": item.level, \"aria-setsize\": item.setsize, \"aria-posinset\": item.posinset, \"aria-expanded\": item.leaf ? undefined : item.expanded ? \"true\" : \"false\",\n // Single mode: aria-selected on selectable nodes only; multiple mode: tri-state aria-checked.\n \"aria-selected\": mode.multiple || !singleSelectable(index.nodes.get(item.value)!, mode) ? undefined : item.selected ? \"true\" : \"false\",\n \"aria-checked\": mode.multiple ? item.checked === \"mixed\" ? \"mixed\" : item.checked ? \"true\" : \"false\" : undefined,\n \"aria-disabled\": flag(item.disabled || disabled),\n \"data-value\": item.value, \"data-level\": item.level, \"data-leaf\": flag(item.leaf), \"data-state\": item.leaf ? undefined : item.expanded ? \"open\" : \"closed\",\n \"data-selected\": flag(item.selected), \"data-disabled\": flag(item.disabled),\n onKeyDown(event: KeyEventLike) {\n // Items nest; only the focused item handles its own keys.\n if (event.target !== event.currentTarget || event.defaultPrevented || event.altKey || event.ctrlKey || event.metaKey) return;\n const rtl = (event.currentTarget as Element | null)?.closest?.(\"[dir]\")?.getAttribute(\"dir\") === \"rtl\";\n const action = getTreeSelectKeyAction(index, visible, expanded, item.value, event.key, rtl);\n if (!action) return;\n event.preventDefault();\n if (action.type === \"focus\") service.send({ type: \"NODE.FOCUS\", value: action.value, move: true });\n else if (action.type === \"expand\") service.send({ type: \"NODE.EXPAND\", value: action.value, expanded: action.expanded });\n else if (action.type === \"activate\" && !event.repeat) service.send({ type: \"NODE.ACTIVATE\", value: action.value });\n },\n onFocus(event: FocusEventLike) { if (event.target === event.currentTarget) service.send({ type: \"NODE.FOCUS\", value: item.value }); },\n }),\n getRowProps: (item) => normalize.element({ ...part(\"row\"), \"data-value\": item.value, \"data-state\": state(item), \"data-selected\": flag(item.selected), \"data-disabled\": flag(item.disabled || disabled),\n style: { \"--qw-tree-select-depth\": String(item.level - 1) }, onClick: () => service.send({ type: \"NODE.ACTIVATE\", value: item.value }) }),\n getIndicatorProps: (item) => normalize.element({ ...part(\"indicator\"), \"aria-hidden\": \"true\", \"data-leaf\": flag(item.leaf), \"data-state\": item.leaf ? undefined : item.expanded ? \"open\" : \"closed\",\n ...(item.leaf ? {} : { onClick: (event: ClickEventLike) => { event.stopPropagation(); service.send({ type: \"NODE.EXPAND\", value: item.value }); } }) }),\n getCheckProps: (item) => normalize.element({ ...part(\"check\"), \"aria-hidden\": \"true\", \"data-state\": state(item), \"data-type\": mode.multiple ? \"checkbox\" : \"radio\",\n \"data-disabled\": flag(!item.selectable), hidden: !mode.multiple && !(mode.selectable === \"any\" || item.leaf) || undefined }),\n getTextProps: (item) => normalize.element({ ...part(\"text\"), id: id.text(item.value) }),\n getGroupProps: (item) => normalize.element({ ...part(\"group\"), role: \"group\", \"data-value\": item.value }),\n getEmptyProps: () => normalize.element({ ...part(\"empty\"), hidden: index.roots.length > 0 || undefined }),\n };\n}\n"],"mappings":"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"}