@xihan-ui/vue 2.1.0 → 3.0.0

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 (644) hide show
  1. package/CHANGELOG.md +1335 -0
  2. package/README.md +1 -1
  3. package/dist/components/accordion/accordion.d.ts +6 -0
  4. package/dist/components/accordion/accordion.d.ts.map +1 -1
  5. package/dist/components/accordion/accordion.js +4 -2
  6. package/dist/components/accordion/accordion.js.map +1 -1
  7. package/dist/components/alert/alert.d.ts +9 -0
  8. package/dist/components/alert/alert.d.ts.map +1 -1
  9. package/dist/components/alert/alert.js +4 -0
  10. package/dist/components/alert/alert.js.map +1 -1
  11. package/dist/components/anchor/anchor.d.ts +2 -2
  12. package/dist/components/anchor/anchor.d.ts.map +1 -1
  13. package/dist/components/anchor/anchor.js +2 -2
  14. package/dist/components/anchor/anchor.js.map +1 -1
  15. package/dist/components/anchor/use-anchor.d.ts +2 -2
  16. package/dist/components/anchor/use-anchor.js +3 -3
  17. package/dist/components/anchor/use-anchor.js.map +1 -1
  18. package/dist/components/approval/approval.d.ts +8 -1
  19. package/dist/components/approval/approval.d.ts.map +1 -1
  20. package/dist/components/approval/approval.js +10 -1
  21. package/dist/components/approval/approval.js.map +1 -1
  22. package/dist/components/avatar/avatar.d.ts +8 -0
  23. package/dist/components/avatar/avatar.d.ts.map +1 -1
  24. package/dist/components/avatar/avatar.js +3 -1
  25. package/dist/components/avatar/avatar.js.map +1 -1
  26. package/dist/components/avatar/use-avatar.d.ts.map +1 -1
  27. package/dist/components/avatar/use-avatar.js +3 -1
  28. package/dist/components/avatar/use-avatar.js.map +1 -1
  29. package/dist/components/back-top/use-back-top.d.ts.map +1 -1
  30. package/dist/components/back-top/use-back-top.js +3 -1
  31. package/dist/components/back-top/use-back-top.js.map +1 -1
  32. package/dist/components/badge/badge.d.ts +22 -0
  33. package/dist/components/badge/badge.d.ts.map +1 -1
  34. package/dist/components/badge/badge.js +11 -2
  35. package/dist/components/badge/badge.js.map +1 -1
  36. package/dist/components/breadcrumb/breadcrumb.d.ts +11 -1
  37. package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -1
  38. package/dist/components/breadcrumb/breadcrumb.js +28 -9
  39. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  40. package/dist/components/calendar-picker/calendar-picker.d.ts +16 -0
  41. package/dist/components/calendar-picker/calendar-picker.d.ts.map +1 -1
  42. package/dist/components/calendar-picker/calendar-picker.js +4 -0
  43. package/dist/components/calendar-picker/calendar-picker.js.map +1 -1
  44. package/dist/components/calendar-range-picker/calendar-range-picker.d.ts +16 -0
  45. package/dist/components/calendar-range-picker/calendar-range-picker.d.ts.map +1 -1
  46. package/dist/components/calendar-range-picker/calendar-range-picker.js +4 -0
  47. package/dist/components/calendar-range-picker/calendar-range-picker.js.map +1 -1
  48. package/dist/components/card/card.d.ts +37 -2
  49. package/dist/components/card/card.d.ts.map +1 -1
  50. package/dist/components/card/card.js +40 -2
  51. package/dist/components/card/card.js.map +1 -1
  52. package/dist/components/carousel/carousel.d.ts +7 -1
  53. package/dist/components/carousel/carousel.d.ts.map +1 -1
  54. package/dist/components/carousel/carousel.js +1 -0
  55. package/dist/components/carousel/carousel.js.map +1 -1
  56. package/dist/components/carousel/use-carousel.d.ts.map +1 -1
  57. package/dist/components/carousel/use-carousel.js +3 -1
  58. package/dist/components/carousel/use-carousel.js.map +1 -1
  59. package/dist/components/cartesian-chart/cartesian-chart.d.ts +262 -0
  60. package/dist/components/cartesian-chart/cartesian-chart.d.ts.map +1 -0
  61. package/dist/components/cartesian-chart/cartesian-chart.js +293 -0
  62. package/dist/components/cartesian-chart/cartesian-chart.js.map +1 -0
  63. package/dist/components/cartesian-chart/context.js +15 -0
  64. package/dist/components/cartesian-chart/context.js.map +1 -0
  65. package/dist/components/cartesian-chart/use-cartesian-chart.d.ts +21 -0
  66. package/dist/components/cartesian-chart/use-cartesian-chart.d.ts.map +1 -0
  67. package/dist/components/cartesian-chart/use-cartesian-chart.js +29 -0
  68. package/dist/components/cartesian-chart/use-cartesian-chart.js.map +1 -0
  69. package/dist/components/cascader/cascader.d.ts +64 -3
  70. package/dist/components/cascader/cascader.d.ts.map +1 -1
  71. package/dist/components/cascader/cascader.js +107 -7
  72. package/dist/components/cascader/cascader.js.map +1 -1
  73. package/dist/components/cascader/context.js +10 -1
  74. package/dist/components/cascader/context.js.map +1 -1
  75. package/dist/components/cascader/use-cascader.d.ts +2 -1
  76. package/dist/components/cascader/use-cascader.d.ts.map +1 -1
  77. package/dist/components/cascader/use-cascader.js +4 -1
  78. package/dist/components/cascader/use-cascader.js.map +1 -1
  79. package/dist/components/checkbox/checkbox.js +1 -1
  80. package/dist/components/checkbox-group/checkbox-group.d.ts +24 -3
  81. package/dist/components/checkbox-group/checkbox-group.d.ts.map +1 -1
  82. package/dist/components/checkbox-group/checkbox-group.js +20 -3
  83. package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
  84. package/dist/components/citation/citation.d.ts +211 -0
  85. package/dist/components/citation/citation.d.ts.map +1 -0
  86. package/dist/components/citation/citation.js +222 -0
  87. package/dist/components/citation/citation.js.map +1 -0
  88. package/dist/components/citation/context.d.ts +11 -0
  89. package/dist/components/citation/context.d.ts.map +1 -0
  90. package/dist/components/citation/context.js +24 -0
  91. package/dist/components/citation/context.js.map +1 -0
  92. package/dist/components/citation/use-citation.d.ts +19 -0
  93. package/dist/components/citation/use-citation.d.ts.map +1 -0
  94. package/dist/components/citation/use-citation.js +51 -0
  95. package/dist/components/citation/use-citation.js.map +1 -0
  96. package/dist/components/code-view/code-view.d.ts +21 -0
  97. package/dist/components/code-view/code-view.d.ts.map +1 -1
  98. package/dist/components/code-view/code-view.js +23 -4
  99. package/dist/components/code-view/code-view.js.map +1 -1
  100. package/dist/components/collapsible/collapsible.d.ts +6 -0
  101. package/dist/components/collapsible/collapsible.d.ts.map +1 -1
  102. package/dist/components/collapsible/collapsible.js +4 -2
  103. package/dist/components/collapsible/collapsible.js.map +1 -1
  104. package/dist/components/color-field/color-field.d.ts +2 -2
  105. package/dist/components/color-field/color-field.js +1 -1
  106. package/dist/components/color-field/color-field.js.map +1 -1
  107. package/dist/components/color-picker/color-picker.d.ts +41 -3
  108. package/dist/components/color-picker/color-picker.d.ts.map +1 -1
  109. package/dist/components/color-picker/color-picker.js +33 -4
  110. package/dist/components/color-picker/color-picker.js.map +1 -1
  111. package/dist/components/color-picker/use-color-picker.d.ts +3 -1
  112. package/dist/components/color-picker/use-color-picker.d.ts.map +1 -1
  113. package/dist/components/color-picker/use-color-picker.js +8 -2
  114. package/dist/components/color-picker/use-color-picker.js.map +1 -1
  115. package/dist/components/color-slider/color-slider.d.ts +2 -2
  116. package/dist/components/color-slider/color-slider.js +1 -1
  117. package/dist/components/color-slider/color-slider.js.map +1 -1
  118. package/dist/components/combobox/combobox.d.ts +49 -4
  119. package/dist/components/combobox/combobox.d.ts.map +1 -1
  120. package/dist/components/combobox/combobox.js +73 -5
  121. package/dist/components/combobox/combobox.js.map +1 -1
  122. package/dist/components/combobox/context.js +10 -1
  123. package/dist/components/combobox/context.js.map +1 -1
  124. package/dist/components/command/command.js +2 -2
  125. package/dist/components/command/use-command.d.ts.map +1 -1
  126. package/dist/components/command/use-command.js +9 -30
  127. package/dist/components/command/use-command.js.map +1 -1
  128. package/dist/components/context-menu/context-menu.d.ts +50 -18
  129. package/dist/components/context-menu/context-menu.d.ts.map +1 -1
  130. package/dist/components/context-menu/context-menu.js +101 -47
  131. package/dist/components/context-menu/context-menu.js.map +1 -1
  132. package/dist/components/context-menu/context.js +1 -1
  133. package/dist/components/context-menu/context.js.map +1 -1
  134. package/dist/components/context-menu/use-context-menu.d.ts +1 -1
  135. package/dist/components/context-menu/use-context-menu.d.ts.map +1 -1
  136. package/dist/components/context-menu/use-context-menu.js +4 -2
  137. package/dist/components/context-menu/use-context-menu.js.map +1 -1
  138. package/dist/components/date-field/date-field.d.ts +9 -1
  139. package/dist/components/date-field/date-field.d.ts.map +1 -1
  140. package/dist/components/date-field/date-field.js +2 -0
  141. package/dist/components/date-field/date-field.js.map +1 -1
  142. package/dist/components/date-picker/date-picker.d.ts +41 -1
  143. package/dist/components/date-picker/date-picker.d.ts.map +1 -1
  144. package/dist/components/date-picker/date-picker.js +16 -3
  145. package/dist/components/date-picker/date-picker.js.map +1 -1
  146. package/dist/components/date-range-picker/date-range-picker.d.ts +77 -2
  147. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
  148. package/dist/components/date-range-picker/date-range-picker.js +102 -5
  149. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  150. package/dist/components/date-range-picker/use-date-range-picker.d.ts +1 -1
  151. package/dist/components/date-range-picker/use-date-range-picker.js.map +1 -1
  152. package/dist/components/descriptions/descriptions.d.ts +38 -7
  153. package/dist/components/descriptions/descriptions.d.ts.map +1 -1
  154. package/dist/components/descriptions/descriptions.js +38 -4
  155. package/dist/components/descriptions/descriptions.js.map +1 -1
  156. package/dist/components/dialog/dialog.d.ts +16 -1
  157. package/dist/components/dialog/dialog.d.ts.map +1 -1
  158. package/dist/components/dialog/dialog.js +15 -2
  159. package/dist/components/dialog/dialog.js.map +1 -1
  160. package/dist/components/dialog/use-dialog.d.ts.map +1 -1
  161. package/dist/components/dialog/use-dialog.js +9 -27
  162. package/dist/components/dialog/use-dialog.js.map +1 -1
  163. package/dist/components/diff-view/diff-view.d.ts +22 -2
  164. package/dist/components/diff-view/diff-view.d.ts.map +1 -1
  165. package/dist/components/diff-view/diff-view.js +37 -14
  166. package/dist/components/diff-view/diff-view.js.map +1 -1
  167. package/dist/components/diff-view/use-diff-view.d.ts +7 -2
  168. package/dist/components/diff-view/use-diff-view.d.ts.map +1 -1
  169. package/dist/components/diff-view/use-diff-view.js +12 -5
  170. package/dist/components/diff-view/use-diff-view.js.map +1 -1
  171. package/dist/components/drawer/drawer.d.ts +46 -1
  172. package/dist/components/drawer/drawer.d.ts.map +1 -1
  173. package/dist/components/drawer/drawer.js +28 -4
  174. package/dist/components/drawer/drawer.js.map +1 -1
  175. package/dist/components/drawer/use-drawer.d.ts +1 -1
  176. package/dist/components/drawer/use-drawer.d.ts.map +1 -1
  177. package/dist/components/drawer/use-drawer.js +12 -29
  178. package/dist/components/drawer/use-drawer.js.map +1 -1
  179. package/dist/components/empty-state/empty-state.js +4 -1
  180. package/dist/components/empty-state/empty-state.js.map +1 -1
  181. package/dist/components/empty-state/use-empty-state.js +12 -3
  182. package/dist/components/empty-state/use-empty-state.js.map +1 -1
  183. package/dist/components/field/field.js +1 -1
  184. package/dist/components/field-array/field-array.d.ts +1 -1
  185. package/dist/components/field-array/field-array.d.ts.map +1 -1
  186. package/dist/components/field-array/field-array.js +5 -1
  187. package/dist/components/field-array/field-array.js.map +1 -1
  188. package/dist/components/field-array/use-field-array.d.ts +3 -1
  189. package/dist/components/field-array/use-field-array.d.ts.map +1 -1
  190. package/dist/components/field-array/use-field-array.js +5 -2
  191. package/dist/components/field-array/use-field-array.js.map +1 -1
  192. package/dist/components/file-upload/file-upload.d.ts +24 -1
  193. package/dist/components/file-upload/file-upload.d.ts.map +1 -1
  194. package/dist/components/file-upload/file-upload.js +12 -2
  195. package/dist/components/file-upload/file-upload.js.map +1 -1
  196. package/dist/components/file-upload/use-file-upload.d.ts +1 -1
  197. package/dist/components/file-upload/use-file-upload.d.ts.map +1 -1
  198. package/dist/components/file-upload/use-file-upload.js.map +1 -1
  199. package/dist/components/flex/flex.d.ts +1 -1
  200. package/dist/components/flex/flex.d.ts.map +1 -1
  201. package/dist/components/flex/flex.js +4 -4
  202. package/dist/components/flex/flex.js.map +1 -1
  203. package/dist/components/form/form.d.ts +18 -4
  204. package/dist/components/form/form.d.ts.map +1 -1
  205. package/dist/components/form/form.js +21 -7
  206. package/dist/components/form/form.js.map +1 -1
  207. package/dist/components/form/use-form.d.ts +6 -0
  208. package/dist/components/form/use-form.d.ts.map +1 -1
  209. package/dist/components/form/use-form.js +4 -0
  210. package/dist/components/form/use-form.js.map +1 -1
  211. package/dist/components/funnel-chart/context.js +15 -0
  212. package/dist/components/funnel-chart/context.js.map +1 -0
  213. package/dist/components/funnel-chart/funnel-chart.d.ts +175 -0
  214. package/dist/components/funnel-chart/funnel-chart.d.ts.map +1 -0
  215. package/dist/components/funnel-chart/funnel-chart.js +188 -0
  216. package/dist/components/funnel-chart/funnel-chart.js.map +1 -0
  217. package/dist/components/funnel-chart/use-funnel-chart.d.ts +19 -0
  218. package/dist/components/funnel-chart/use-funnel-chart.d.ts.map +1 -0
  219. package/dist/components/funnel-chart/use-funnel-chart.js +26 -0
  220. package/dist/components/funnel-chart/use-funnel-chart.js.map +1 -0
  221. package/dist/components/graph-chart/context.js +15 -0
  222. package/dist/components/graph-chart/context.js.map +1 -0
  223. package/dist/components/graph-chart/graph-chart.d.ts +194 -0
  224. package/dist/components/graph-chart/graph-chart.d.ts.map +1 -0
  225. package/dist/components/graph-chart/graph-chart.js +219 -0
  226. package/dist/components/graph-chart/graph-chart.js.map +1 -0
  227. package/dist/components/graph-chart/use-graph-chart.d.ts +19 -0
  228. package/dist/components/graph-chart/use-graph-chart.d.ts.map +1 -0
  229. package/dist/components/graph-chart/use-graph-chart.js +26 -0
  230. package/dist/components/graph-chart/use-graph-chart.js.map +1 -0
  231. package/dist/components/grid/grid.d.ts +7 -0
  232. package/dist/components/grid/grid.d.ts.map +1 -1
  233. package/dist/components/grid/grid.js +7 -1
  234. package/dist/components/grid/grid.js.map +1 -1
  235. package/dist/components/grid-list/context.d.ts +9 -0
  236. package/dist/components/grid-list/context.d.ts.map +1 -0
  237. package/dist/components/grid-list/context.js +24 -0
  238. package/dist/components/grid-list/context.js.map +1 -0
  239. package/dist/components/grid-list/grid-list.d.ts +149 -0
  240. package/dist/components/grid-list/grid-list.d.ts.map +1 -0
  241. package/dist/components/grid-list/grid-list.js +118 -0
  242. package/dist/components/grid-list/grid-list.js.map +1 -0
  243. package/dist/components/grid-list/use-grid-list.d.ts +12 -0
  244. package/dist/components/grid-list/use-grid-list.d.ts.map +1 -0
  245. package/dist/components/grid-list/use-grid-list.js +20 -0
  246. package/dist/components/grid-list/use-grid-list.js.map +1 -0
  247. package/dist/components/heatmap/heatmap.d.ts +45 -4
  248. package/dist/components/heatmap/heatmap.d.ts.map +1 -1
  249. package/dist/components/heatmap/heatmap.js +40 -14
  250. package/dist/components/heatmap/heatmap.js.map +1 -1
  251. package/dist/components/heatmap/use-heatmap.d.ts +4 -2
  252. package/dist/components/heatmap/use-heatmap.d.ts.map +1 -1
  253. package/dist/components/heatmap/use-heatmap.js +8 -4
  254. package/dist/components/heatmap/use-heatmap.js.map +1 -1
  255. package/dist/components/hierarchy-chart/context.js +15 -0
  256. package/dist/components/hierarchy-chart/context.js.map +1 -0
  257. package/dist/components/hierarchy-chart/hierarchy-chart.d.ts +201 -0
  258. package/dist/components/hierarchy-chart/hierarchy-chart.d.ts.map +1 -0
  259. package/dist/components/hierarchy-chart/hierarchy-chart.js +228 -0
  260. package/dist/components/hierarchy-chart/hierarchy-chart.js.map +1 -0
  261. package/dist/components/hierarchy-chart/use-hierarchy-chart.d.ts +19 -0
  262. package/dist/components/hierarchy-chart/use-hierarchy-chart.d.ts.map +1 -0
  263. package/dist/components/hierarchy-chart/use-hierarchy-chart.js +26 -0
  264. package/dist/components/hierarchy-chart/use-hierarchy-chart.js.map +1 -0
  265. package/dist/components/hover-card/hover-card.js +2 -2
  266. package/dist/components/icon/icon.d.ts +7 -1
  267. package/dist/components/icon/icon.d.ts.map +1 -1
  268. package/dist/components/icon/icon.js +1 -0
  269. package/dist/components/icon/icon.js.map +1 -1
  270. package/dist/components/image/use-image.d.ts.map +1 -1
  271. package/dist/components/image/use-image.js +3 -1
  272. package/dist/components/image/use-image.js.map +1 -1
  273. package/dist/components/image-cropper/image-cropper.d.ts +35 -4
  274. package/dist/components/image-cropper/image-cropper.d.ts.map +1 -1
  275. package/dist/components/image-cropper/image-cropper.js +34 -5
  276. package/dist/components/image-cropper/image-cropper.js.map +1 -1
  277. package/dist/components/image-cropper/use-image-cropper.d.ts +3 -1
  278. package/dist/components/image-cropper/use-image-cropper.d.ts.map +1 -1
  279. package/dist/components/image-cropper/use-image-cropper.js +4 -1
  280. package/dist/components/image-cropper/use-image-cropper.js.map +1 -1
  281. package/dist/components/image-viewer/image-viewer.js +1 -1
  282. package/dist/components/image-viewer/use-image-viewer.d.ts.map +1 -1
  283. package/dist/components/image-viewer/use-image-viewer.js +9 -27
  284. package/dist/components/image-viewer/use-image-viewer.js.map +1 -1
  285. package/dist/components/infinite-scroll/infinite-scroll.d.ts +9 -1
  286. package/dist/components/infinite-scroll/infinite-scroll.d.ts.map +1 -1
  287. package/dist/components/infinite-scroll/infinite-scroll.js +2 -0
  288. package/dist/components/infinite-scroll/infinite-scroll.js.map +1 -1
  289. package/dist/components/json-viewer/json-viewer.d.ts +17 -2
  290. package/dist/components/json-viewer/json-viewer.d.ts.map +1 -1
  291. package/dist/components/json-viewer/json-viewer.js +26 -8
  292. package/dist/components/json-viewer/json-viewer.js.map +1 -1
  293. package/dist/components/listbox/listbox.d.ts +7 -1
  294. package/dist/components/listbox/listbox.d.ts.map +1 -1
  295. package/dist/components/listbox/listbox.js +2 -0
  296. package/dist/components/listbox/listbox.js.map +1 -1
  297. package/dist/components/loading-bar/use-loading-bar.d.ts.map +1 -1
  298. package/dist/components/loading-bar/use-loading-bar.js +3 -1
  299. package/dist/components/loading-bar/use-loading-bar.js.map +1 -1
  300. package/dist/components/log/log.d.ts +41 -2
  301. package/dist/components/log/log.d.ts.map +1 -1
  302. package/dist/components/log/log.js +25 -3
  303. package/dist/components/log/log.js.map +1 -1
  304. package/dist/components/log/use-log.d.ts +1 -1
  305. package/dist/components/log/use-log.d.ts.map +1 -1
  306. package/dist/components/log/use-log.js +4 -1
  307. package/dist/components/log/use-log.js.map +1 -1
  308. package/dist/components/markdown-stream/markdown-stream.d.ts +22 -2
  309. package/dist/components/markdown-stream/markdown-stream.d.ts.map +1 -1
  310. package/dist/components/markdown-stream/markdown-stream.js +43 -4
  311. package/dist/components/markdown-stream/markdown-stream.js.map +1 -1
  312. package/dist/components/marquee/marquee.d.ts +68 -12
  313. package/dist/components/marquee/marquee.d.ts.map +1 -1
  314. package/dist/components/marquee/marquee.js +52 -7
  315. package/dist/components/marquee/marquee.js.map +1 -1
  316. package/dist/components/mention/mention.d.ts +26 -6
  317. package/dist/components/mention/mention.d.ts.map +1 -1
  318. package/dist/components/mention/mention.js +14 -4
  319. package/dist/components/mention/mention.js.map +1 -1
  320. package/dist/components/menu/context.js +1 -1
  321. package/dist/components/menu/context.js.map +1 -1
  322. package/dist/components/menu/menu.d.ts +79 -28
  323. package/dist/components/menu/menu.d.ts.map +1 -1
  324. package/dist/components/menu/menu.js +104 -51
  325. package/dist/components/menu/menu.js.map +1 -1
  326. package/dist/components/menu/use-menu.d.ts +1 -1
  327. package/dist/components/menu/use-menu.d.ts.map +1 -1
  328. package/dist/components/menu/use-menu.js +8 -6
  329. package/dist/components/menu/use-menu.js.map +1 -1
  330. package/dist/components/menubar/context.js +1 -1
  331. package/dist/components/menubar/context.js.map +1 -1
  332. package/dist/components/menubar/menubar.d.ts +39 -18
  333. package/dist/components/menubar/menubar.d.ts.map +1 -1
  334. package/dist/components/menubar/menubar.js +96 -47
  335. package/dist/components/menubar/menubar.js.map +1 -1
  336. package/dist/components/menubar/use-menubar.d.ts +1 -1
  337. package/dist/components/menubar/use-menubar.d.ts.map +1 -1
  338. package/dist/components/menubar/use-menubar.js +4 -2
  339. package/dist/components/menubar/use-menubar.js.map +1 -1
  340. package/dist/components/message-feed/message-feed.d.ts +13 -1
  341. package/dist/components/message-feed/message-feed.d.ts.map +1 -1
  342. package/dist/components/message-feed/message-feed.js +25 -1
  343. package/dist/components/message-feed/message-feed.js.map +1 -1
  344. package/dist/components/navigation-menu/navigation-menu.d.ts +58 -1
  345. package/dist/components/navigation-menu/navigation-menu.d.ts.map +1 -1
  346. package/dist/components/navigation-menu/navigation-menu.js +82 -10
  347. package/dist/components/navigation-menu/navigation-menu.js.map +1 -1
  348. package/dist/components/notification/context.d.ts +5 -1
  349. package/dist/components/notification/context.d.ts.map +1 -1
  350. package/dist/components/notification/context.js.map +1 -1
  351. package/dist/components/notification/notification.d.ts +39 -23
  352. package/dist/components/notification/notification.d.ts.map +1 -1
  353. package/dist/components/notification/notification.js +27 -9
  354. package/dist/components/notification/notification.js.map +1 -1
  355. package/dist/components/notification/use-item-exit.js +22 -0
  356. package/dist/components/notification/use-item-exit.js.map +1 -0
  357. package/dist/components/notification/use-notification.d.ts +3 -3
  358. package/dist/components/notification/use-notification.d.ts.map +1 -1
  359. package/dist/components/notification/use-notification.js +20 -5
  360. package/dist/components/notification/use-notification.js.map +1 -1
  361. package/dist/components/number-animation/number-animation.d.ts +14 -2
  362. package/dist/components/number-animation/number-animation.d.ts.map +1 -1
  363. package/dist/components/number-animation/number-animation.js +5 -1
  364. package/dist/components/number-animation/number-animation.js.map +1 -1
  365. package/dist/components/number-field/number-field.d.ts +16 -1
  366. package/dist/components/number-field/number-field.d.ts.map +1 -1
  367. package/dist/components/number-field/number-field.js +6 -0
  368. package/dist/components/number-field/number-field.js.map +1 -1
  369. package/dist/components/pagination/pagination.d.ts +22 -2
  370. package/dist/components/pagination/pagination.d.ts.map +1 -1
  371. package/dist/components/pagination/pagination.js +22 -1
  372. package/dist/components/pagination/pagination.js.map +1 -1
  373. package/dist/components/pagination/use-pagination.js +1 -0
  374. package/dist/components/pagination/use-pagination.js.map +1 -1
  375. package/dist/components/pie-chart/context.js +15 -0
  376. package/dist/components/pie-chart/context.js.map +1 -0
  377. package/dist/components/pie-chart/pie-chart.d.ts +203 -0
  378. package/dist/components/pie-chart/pie-chart.d.ts.map +1 -0
  379. package/dist/components/pie-chart/pie-chart.js +236 -0
  380. package/dist/components/pie-chart/pie-chart.js.map +1 -0
  381. package/dist/components/pie-chart/use-pie-chart.d.ts +19 -0
  382. package/dist/components/pie-chart/use-pie-chart.d.ts.map +1 -0
  383. package/dist/components/pie-chart/use-pie-chart.js +26 -0
  384. package/dist/components/pie-chart/use-pie-chart.js.map +1 -0
  385. package/dist/components/popconfirm/popconfirm.js +2 -2
  386. package/dist/components/popover/popover.d.ts +11 -0
  387. package/dist/components/popover/popover.d.ts.map +1 -1
  388. package/dist/components/popover/popover.js +7 -2
  389. package/dist/components/popover/popover.js.map +1 -1
  390. package/dist/components/progress/progress.d.ts +63 -3
  391. package/dist/components/progress/progress.d.ts.map +1 -1
  392. package/dist/components/progress/progress.js +55 -3
  393. package/dist/components/progress/progress.js.map +1 -1
  394. package/dist/components/question-flow/question-flow.d.ts +40 -1
  395. package/dist/components/question-flow/question-flow.d.ts.map +1 -1
  396. package/dist/components/question-flow/question-flow.js +37 -1
  397. package/dist/components/question-flow/question-flow.js.map +1 -1
  398. package/dist/components/radar-chart/context.js +15 -0
  399. package/dist/components/radar-chart/context.js.map +1 -0
  400. package/dist/components/radar-chart/radar-chart.d.ts +189 -0
  401. package/dist/components/radar-chart/radar-chart.d.ts.map +1 -0
  402. package/dist/components/radar-chart/radar-chart.js +220 -0
  403. package/dist/components/radar-chart/radar-chart.js.map +1 -0
  404. package/dist/components/radar-chart/use-radar-chart.d.ts +19 -0
  405. package/dist/components/radar-chart/use-radar-chart.d.ts.map +1 -0
  406. package/dist/components/radar-chart/use-radar-chart.js +26 -0
  407. package/dist/components/radar-chart/use-radar-chart.js.map +1 -0
  408. package/dist/components/radio-group/radio-group.d.ts +37 -2
  409. package/dist/components/radio-group/radio-group.d.ts.map +1 -1
  410. package/dist/components/radio-group/radio-group.js +54 -8
  411. package/dist/components/radio-group/radio-group.js.map +1 -1
  412. package/dist/components/radio-group/use-radio-group.d.ts +3 -1
  413. package/dist/components/radio-group/use-radio-group.d.ts.map +1 -1
  414. package/dist/components/radio-group/use-radio-group.js +7 -3
  415. package/dist/components/radio-group/use-radio-group.js.map +1 -1
  416. package/dist/components/reasoning/reasoning.d.ts +1 -1
  417. package/dist/components/reasoning/reasoning.d.ts.map +1 -1
  418. package/dist/components/reasoning/reasoning.js +1 -0
  419. package/dist/components/reasoning/reasoning.js.map +1 -1
  420. package/dist/components/sankey-chart/context.js +15 -0
  421. package/dist/components/sankey-chart/context.js.map +1 -0
  422. package/dist/components/sankey-chart/sankey-chart.d.ts +161 -0
  423. package/dist/components/sankey-chart/sankey-chart.d.ts.map +1 -0
  424. package/dist/components/sankey-chart/sankey-chart.js +208 -0
  425. package/dist/components/sankey-chart/sankey-chart.js.map +1 -0
  426. package/dist/components/sankey-chart/use-sankey-chart.d.ts +19 -0
  427. package/dist/components/sankey-chart/use-sankey-chart.d.ts.map +1 -0
  428. package/dist/components/sankey-chart/use-sankey-chart.js +26 -0
  429. package/dist/components/sankey-chart/use-sankey-chart.js.map +1 -0
  430. package/dist/components/scroll-area/scroll-area.d.ts +13 -5
  431. package/dist/components/scroll-area/scroll-area.d.ts.map +1 -1
  432. package/dist/components/scroll-area/scroll-area.js +17 -3
  433. package/dist/components/scroll-area/scroll-area.js.map +1 -1
  434. package/dist/components/select/select.d.ts +7 -1
  435. package/dist/components/select/select.d.ts.map +1 -1
  436. package/dist/components/select/select.js +13 -4
  437. package/dist/components/select/select.js.map +1 -1
  438. package/dist/components/select/use-select.js +2 -1
  439. package/dist/components/select/use-select.js.map +1 -1
  440. package/dist/components/side-nav/context.js +17 -1
  441. package/dist/components/side-nav/context.js.map +1 -1
  442. package/dist/components/side-nav/side-nav.d.ts +51 -7
  443. package/dist/components/side-nav/side-nav.d.ts.map +1 -1
  444. package/dist/components/side-nav/side-nav.js +152 -13
  445. package/dist/components/side-nav/side-nav.js.map +1 -1
  446. package/dist/components/side-nav/use-side-nav.d.ts +4 -2
  447. package/dist/components/side-nav/use-side-nav.d.ts.map +1 -1
  448. package/dist/components/side-nav/use-side-nav.js +5 -3
  449. package/dist/components/side-nav/use-side-nav.js.map +1 -1
  450. package/dist/components/signature-pad/signature-pad.d.ts +26 -4
  451. package/dist/components/signature-pad/signature-pad.d.ts.map +1 -1
  452. package/dist/components/signature-pad/signature-pad.js +32 -4
  453. package/dist/components/signature-pad/signature-pad.js.map +1 -1
  454. package/dist/components/signature-pad/use-signature-pad.d.ts +1 -1
  455. package/dist/components/signature-pad/use-signature-pad.d.ts.map +1 -1
  456. package/dist/components/signature-pad/use-signature-pad.js.map +1 -1
  457. package/dist/components/skeleton/use-skeleton.js +6 -2
  458. package/dist/components/skeleton/use-skeleton.js.map +1 -1
  459. package/dist/components/slider/slider.d.ts +27 -0
  460. package/dist/components/slider/slider.d.ts.map +1 -1
  461. package/dist/components/slider/slider.js +12 -0
  462. package/dist/components/slider/slider.js.map +1 -1
  463. package/dist/components/sortable/sortable.d.ts +19 -1
  464. package/dist/components/sortable/sortable.d.ts.map +1 -1
  465. package/dist/components/sortable/sortable.js +7 -2
  466. package/dist/components/sortable/sortable.js.map +1 -1
  467. package/dist/components/sortable/use-sortable.d.ts +1 -1
  468. package/dist/components/sortable/use-sortable.d.ts.map +1 -1
  469. package/dist/components/sortable/use-sortable.js +2 -1
  470. package/dist/components/sortable/use-sortable.js.map +1 -1
  471. package/dist/components/sparkline/sparkline.d.ts +101 -0
  472. package/dist/components/sparkline/sparkline.d.ts.map +1 -0
  473. package/dist/components/sparkline/sparkline.js +54 -0
  474. package/dist/components/sparkline/sparkline.js.map +1 -0
  475. package/dist/components/sparkline/use-sparkline.d.ts +15 -0
  476. package/dist/components/sparkline/use-sparkline.d.ts.map +1 -0
  477. package/dist/components/sparkline/use-sparkline.js +21 -0
  478. package/dist/components/sparkline/use-sparkline.js.map +1 -0
  479. package/dist/components/spinner/spinner.d.ts +8 -0
  480. package/dist/components/spinner/spinner.d.ts.map +1 -1
  481. package/dist/components/spinner/spinner.js +2 -0
  482. package/dist/components/spinner/spinner.js.map +1 -1
  483. package/dist/components/spinner/use-spinner.js +4 -2
  484. package/dist/components/spinner/use-spinner.js.map +1 -1
  485. package/dist/components/steps/steps.d.ts +28 -1
  486. package/dist/components/steps/steps.d.ts.map +1 -1
  487. package/dist/components/steps/steps.js +11 -2
  488. package/dist/components/steps/steps.js.map +1 -1
  489. package/dist/components/switch/switch.js +1 -1
  490. package/dist/components/table/context.js +9 -1
  491. package/dist/components/table/context.js.map +1 -1
  492. package/dist/components/table/table.d.ts +54 -5
  493. package/dist/components/table/table.d.ts.map +1 -1
  494. package/dist/components/table/table.js +40 -11
  495. package/dist/components/table/table.js.map +1 -1
  496. package/dist/components/table/use-table.d.ts +3 -1
  497. package/dist/components/table/use-table.d.ts.map +1 -1
  498. package/dist/components/table/use-table.js +5 -2
  499. package/dist/components/table/use-table.js.map +1 -1
  500. package/dist/components/tabs/tabs.d.ts +51 -3
  501. package/dist/components/tabs/tabs.d.ts.map +1 -1
  502. package/dist/components/tabs/tabs.js +60 -8
  503. package/dist/components/tabs/tabs.js.map +1 -1
  504. package/dist/components/tag/use-tag.d.ts.map +1 -1
  505. package/dist/components/tag/use-tag.js +3 -1
  506. package/dist/components/tag/use-tag.js.map +1 -1
  507. package/dist/components/tags-input/tags-input.d.ts +10 -2
  508. package/dist/components/tags-input/tags-input.d.ts.map +1 -1
  509. package/dist/components/tags-input/tags-input.js +11 -4
  510. package/dist/components/tags-input/tags-input.js.map +1 -1
  511. package/dist/components/tags-input/use-tags-input.d.ts +4 -2
  512. package/dist/components/tags-input/use-tags-input.d.ts.map +1 -1
  513. package/dist/components/tags-input/use-tags-input.js +5 -2
  514. package/dist/components/tags-input/use-tags-input.js.map +1 -1
  515. package/dist/components/time-picker/time-picker.d.ts +11 -7
  516. package/dist/components/time-picker/time-picker.d.ts.map +1 -1
  517. package/dist/components/time-picker/time-picker.js +4 -2
  518. package/dist/components/time-picker/time-picker.js.map +1 -1
  519. package/dist/components/time-range-picker/time-range-picker.d.ts +11 -7
  520. package/dist/components/time-range-picker/time-range-picker.d.ts.map +1 -1
  521. package/dist/components/time-range-picker/time-range-picker.js +4 -2
  522. package/dist/components/time-range-picker/time-range-picker.js.map +1 -1
  523. package/dist/components/timer/timer.d.ts +1 -1
  524. package/dist/components/timestamp/timestamp.d.ts +20 -1
  525. package/dist/components/timestamp/timestamp.d.ts.map +1 -1
  526. package/dist/components/timestamp/timestamp.js +16 -5
  527. package/dist/components/timestamp/timestamp.js.map +1 -1
  528. package/dist/components/toolbar/toolbar.d.ts +17 -2
  529. package/dist/components/toolbar/toolbar.d.ts.map +1 -1
  530. package/dist/components/toolbar/toolbar.js +31 -4
  531. package/dist/components/toolbar/toolbar.js.map +1 -1
  532. package/dist/components/toolbar/use-toolbar.d.ts +4 -2
  533. package/dist/components/toolbar/use-toolbar.d.ts.map +1 -1
  534. package/dist/components/toolbar/use-toolbar.js +5 -2
  535. package/dist/components/toolbar/use-toolbar.js.map +1 -1
  536. package/dist/components/tooltip/context.d.ts +21 -0
  537. package/dist/components/tooltip/context.d.ts.map +1 -0
  538. package/dist/components/tooltip/context.js +10 -1
  539. package/dist/components/tooltip/context.js.map +1 -1
  540. package/dist/components/tooltip/tooltip.d.ts +53 -1
  541. package/dist/components/tooltip/tooltip.d.ts.map +1 -1
  542. package/dist/components/tooltip/tooltip.js +34 -3
  543. package/dist/components/tooltip/tooltip.js.map +1 -1
  544. package/dist/components/tooltip/use-tooltip.d.ts +3 -18
  545. package/dist/components/tooltip/use-tooltip.d.ts.map +1 -1
  546. package/dist/components/tooltip/use-tooltip.js +2 -0
  547. package/dist/components/tooltip/use-tooltip.js.map +1 -1
  548. package/dist/components/tour/tour.d.ts +9 -1
  549. package/dist/components/tour/tour.d.ts.map +1 -1
  550. package/dist/components/tour/tour.js +2 -0
  551. package/dist/components/tour/tour.js.map +1 -1
  552. package/dist/components/transfer/transfer.d.ts +21 -1
  553. package/dist/components/transfer/transfer.d.ts.map +1 -1
  554. package/dist/components/transfer/transfer.js +10 -2
  555. package/dist/components/transfer/transfer.js.map +1 -1
  556. package/dist/components/tree/tree.d.ts +34 -1
  557. package/dist/components/tree/tree.d.ts.map +1 -1
  558. package/dist/components/tree/tree.js +11 -0
  559. package/dist/components/tree/tree.js.map +1 -1
  560. package/dist/components/tree-select/context.js +10 -1
  561. package/dist/components/tree-select/context.js.map +1 -1
  562. package/dist/components/tree-select/tree-select.d.ts +70 -6
  563. package/dist/components/tree-select/tree-select.d.ts.map +1 -1
  564. package/dist/components/tree-select/tree-select.js +109 -12
  565. package/dist/components/tree-select/tree-select.js.map +1 -1
  566. package/dist/components/tree-select/use-tree-select.d.ts +3 -0
  567. package/dist/components/tree-select/use-tree-select.d.ts.map +1 -1
  568. package/dist/components/tree-select/use-tree-select.js +6 -1
  569. package/dist/components/tree-select/use-tree-select.js.map +1 -1
  570. package/dist/components/truncate/truncate.d.ts +25 -4
  571. package/dist/components/truncate/truncate.d.ts.map +1 -1
  572. package/dist/components/truncate/truncate.js +29 -14
  573. package/dist/components/truncate/truncate.js.map +1 -1
  574. package/dist/components/truncate/use-truncate.d.ts.map +1 -1
  575. package/dist/components/truncate/use-truncate.js +3 -1
  576. package/dist/components/truncate/use-truncate.js.map +1 -1
  577. package/dist/components/typography/typography.d.ts +35 -2
  578. package/dist/components/typography/typography.d.ts.map +1 -1
  579. package/dist/components/typography/typography.js +21 -3
  580. package/dist/components/typography/typography.js.map +1 -1
  581. package/dist/components/virtualizer/virtualizer.d.ts +26 -2
  582. package/dist/components/virtualizer/virtualizer.d.ts.map +1 -1
  583. package/dist/components/virtualizer/virtualizer.js +20 -3
  584. package/dist/components/virtualizer/virtualizer.js.map +1 -1
  585. package/dist/components/watermark/watermark.d.ts +14 -1
  586. package/dist/components/watermark/watermark.d.ts.map +1 -1
  587. package/dist/components/watermark/watermark.js +20 -5
  588. package/dist/components/watermark/watermark.js.map +1 -1
  589. package/dist/config/config.d.ts +1 -1
  590. package/dist/config/config.d.ts.map +1 -1
  591. package/dist/config/config.js +2 -1
  592. package/dist/config/config.js.map +1 -1
  593. package/dist/index.d.ts +59 -44
  594. package/dist/index.js +53 -38
  595. package/dist/package.js +1 -1
  596. package/dist/runtime/as-child.js +3 -2
  597. package/dist/runtime/as-child.js.map +1 -1
  598. package/dist/runtime/hydration.js +14 -0
  599. package/dist/runtime/hydration.js.map +1 -0
  600. package/dist/runtime/use-overlay-exit.js +0 -1
  601. package/dist/runtime/use-overlay-exit.js.map +1 -1
  602. package/dist/services/notification-service.d.ts +26 -7
  603. package/dist/services/notification-service.d.ts.map +1 -1
  604. package/dist/services/notification-service.js +35 -8
  605. package/dist/services/notification-service.js.map +1 -1
  606. package/dist/sound.d.ts +6 -7
  607. package/dist/sound.d.ts.map +1 -1
  608. package/dist/sound.js +6 -6
  609. package/dist/sound.js.map +1 -1
  610. package/package.json +15 -14
  611. package/dist/components/gradient-text/gradient-text.d.ts +0 -36
  612. package/dist/components/gradient-text/gradient-text.d.ts.map +0 -1
  613. package/dist/components/gradient-text/gradient-text.js +0 -20
  614. package/dist/components/gradient-text/gradient-text.js.map +0 -1
  615. package/dist/components/icon-wrapper/icon-wrapper.d.ts +0 -29
  616. package/dist/components/icon-wrapper/icon-wrapper.d.ts.map +0 -1
  617. package/dist/components/icon-wrapper/icon-wrapper.js +0 -20
  618. package/dist/components/icon-wrapper/icon-wrapper.js.map +0 -1
  619. package/dist/components/segmented/context.d.ts +0 -13
  620. package/dist/components/segmented/context.d.ts.map +0 -1
  621. package/dist/components/segmented/context.js +0 -24
  622. package/dist/components/segmented/context.js.map +0 -1
  623. package/dist/components/segmented/segmented.d.ts +0 -161
  624. package/dist/components/segmented/segmented.d.ts.map +0 -1
  625. package/dist/components/segmented/segmented.js +0 -142
  626. package/dist/components/segmented/segmented.js.map +0 -1
  627. package/dist/components/segmented/use-segmented.d.ts +0 -15
  628. package/dist/components/segmented/use-segmented.d.ts.map +0 -1
  629. package/dist/components/segmented/use-segmented.js +0 -22
  630. package/dist/components/segmented/use-segmented.js.map +0 -1
  631. package/dist/components/toast/context.js +0 -15
  632. package/dist/components/toast/context.js.map +0 -1
  633. package/dist/components/toast/toast.d.ts +0 -123
  634. package/dist/components/toast/toast.d.ts.map +0 -1
  635. package/dist/components/toast/toast.js +0 -112
  636. package/dist/components/toast/toast.js.map +0 -1
  637. package/dist/components/toast/use-toast.d.ts +0 -10
  638. package/dist/components/toast/use-toast.d.ts.map +0 -1
  639. package/dist/components/toast/use-toast.js +0 -17
  640. package/dist/components/toast/use-toast.js.map +0 -1
  641. package/dist/services/toast-service.d.ts +0 -69
  642. package/dist/services/toast-service.d.ts.map +0 -1
  643. package/dist/services/toast-service.js +0 -161
  644. package/dist/services/toast-service.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","names":[],"sources":["../../../src/components/select/select.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 select 相关实现。\n\nimport type { ControlVariant, Direction, Placement, Size, Tone } from '@xihan-ui/core'\nimport type { SelectApi, SelectGroupProps, SelectItemProps, SelectNode, SelectNodeMeta, SelectOpenChangeDetails, SelectSchema, SelectValueChangeDetails } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport { computed, defineComponent, h, mergeProps, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { XhPortal } from '../../runtime/portal'\nimport { slotIsPlainText } from '../../runtime/slot-content'\nimport { useScrollbars } from '../../runtime/use-scrollbars'\nimport { useFieldLabelWiring, useFieldStateWiring } from '../field/use-field-control'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideSelect, provideSelectGroup, provideSelectItem, provideSelectTag, useSelectContext, useSelectGroupContext, useSelectItemContext, useSelectTagContext } from './context'\nimport { useSelect } from './use-select'\n\ntype SelectProps = SelectSchema['props']\n\n/** 默认插槽的载荷:展开态、选中集合与显示文字、可见标签与被折叠的个数及其文字,以及修改展开、修改值、清空、移除值四个动作。 */\nexport type SelectRootSlotProps = Pick<\n SelectApi,\n 'open' | 'value' | 'displayText' | 'tags' | 'overflowCount' | 'overflowText' | 'setOpen' | 'setValue' | 'clear' | 'deselect'\n>\n\nexport const XhSelectRoot = /* @__PURE__ */ defineComponent({\n name: 'XhSelectRoot',\n // 有 connect 兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<SelectNode[]> },\n /** 标题文字。提供后不必再写 label 部件;需要放置其他内容时改用 label 插槽。 */\n label: { type: String },\n value: { type: [String, Array] as PropType<string | string[] | null> },\n defaultValue: { type: [String, Array] as PropType<string | string[] | null> },\n multiple: Boolean,\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n disabled: { type: Boolean, default: undefined },\n /** 只读:浮层照常展开与浏览,但选中值不可修改、也不可清空。 */\n readOnly: { type: Boolean, default: undefined },\n /** 自动渲染树中是否带清空按钮;手写部件不使用它,写了节点即可清空。 */\n clearable: Boolean,\n invalid: { type: Boolean, default: undefined },\n loading: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n name: { type: String },\n translations: { type: Object as PropType<SelectProps['translations']> },\n maxTagCount: { type: Number },\n placeholder: { type: String },\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction> },\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n },\n // *-change 携带 details 对象,update:* 携带裸值。\n // 校验函数恒真,只声明载荷类型:'update:value' 是 string[],单选也是长度 1 的数组而非裸串。\n emits: {\n 'value-change': (_details: SelectValueChangeDetails) => true,\n 'open-change': (_details: SelectOpenChangeDetails) => true,\n 'update:value': (_value: string[]) => true,\n 'update:open': (_open: boolean) => true,\n },\n slots: Object as SlotsType<{\n 'default'?: (props: SelectRootSlotProps) => VNode[]\n 'label'?: () => VNode[]\n /** 只填条目的文字槽,副文本与首尾两格照旧各归各的 */\n 'item'?: (node: SelectNodeMeta) => VNode[]\n /** 只接管行首那一格,其余槽照旧由数据铺 */\n 'item-prefix'?: (node: SelectNodeMeta) => VNode[]\n /** 只接管行尾那一格(计数、徽标、次级图标),其余槽照旧由数据铺 */\n 'item-suffix'?: (node: SelectNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: SelectProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyOpen: SelectProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const ctx = useSelect(withXhConfig('select', useFormControlProps(props)) as SelectProps, notifyValue, notifyOpen)\n provideSelect(ctx)\n\n // 表单影子由根部件装配:空串选项打底,每个选中值一个 selected 选项,供 required 判定。\n // 选中态一律靠选项的 selected 表达,多选下 select.value 表达不了集合。\n const hiddenSelect = (): VNode => {\n const api = ctx.api.value\n const options = [h('option', { value: '' })]\n for (const [i, v] of api.value.entries())\n options.push(h('option', { value: v, selected: true }, api.valueText[i] ?? v))\n return h('select', api.getHiddenSelectProps() as Record<string, unknown>, options)\n }\n\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, [\n hiddenSelect(),\n ...(slots.default\n ? slots.default({\n open: ctx.api.value.open,\n value: ctx.api.value.value,\n displayText: ctx.api.value.displayText,\n tags: ctx.api.value.tags,\n overflowCount: ctx.api.value.overflowCount,\n overflowText: ctx.api.value.overflowText,\n setOpen: ctx.api.value.setOpen,\n setValue: ctx.api.value.setValue,\n clear: ctx.api.value.clear,\n deselect: ctx.api.value.deselect,\n }) ?? []\n : props.collection\n ? renderDefaultTree(\n ctx.api.value.collection,\n slots.label?.() ?? (props.label != null ? [props.label] : null),\n props.clearable,\n slots.item,\n slots['item-prefix'],\n slots['item-suffix'],\n )\n : []),\n ])\n },\n})\n\nexport const XhSelectLabel = /* @__PURE__ */ defineComponent({\n name: 'XhSelectLabel',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectControl = /* @__PURE__ */ defineComponent({\n name: 'XhSelectControl',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 盒:触发器与清空按钮在里面并排,描边、底色与聚焦环都长在它上面\n return () => h('div', {\n ...ctx.api.value.getControlProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.controlRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhSelectTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhSelectTrigger',\n setup(_, { slots }) {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useSelectContext()\n return () => h('button', fieldLabel.value({\n ...fieldWiring.value,\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n }), slots.default?.())\n },\n})\n\nexport const XhSelectValueText = /* @__PURE__ */ defineComponent({\n name: 'XhSelectValueText',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 有插槽用插槽,否则显示选中项文本或 placeholder\n return () => h(\n 'span',\n ctx.api.value.getValueTextProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.displayText,\n )\n },\n})\n\nexport const XhSelectIndicator = /* @__PURE__ */ defineComponent({\n name: 'XhSelectIndicator',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n return () => h('span', ctx.api.value.getIndicatorProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectClearTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhSelectClearTrigger',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 节点常挂,清不了时靠 hidden 藏掉\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectTagList = /* @__PURE__ */ defineComponent({\n name: 'XhSelectTagList',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 标签行:可见标签与 +N 那一枚在里面并排;无选中时连接层给 hidden,value-text 回来显示占位文字\n return () => h('span', ctx.api.value.getTagListProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 标签文字所在的块(tag 的 label):截断规则挂在这一层。 */\nexport const XhSelectTagLabel = /* @__PURE__ */ defineComponent({\n name: 'XhSelectTagLabel',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n return () => h('span', ctx.api.value.getTagLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 标签内容:只有文字时替它包一层 label:截断规则挂在 label 上,直接展开在 root 上的文字过长会把\n * 删除按钮挤出;作者自己写了节点则原样放行。与 XhTagRoot 同一规则。\n * 库自身填入的文字(+N,没有折叠时是空串)恒包 label,三个适配器渲染出同一棵树。\n */\nfunction tagChildren(content: VNode[] | string | undefined): VNode[] | string | undefined {\n if (typeof content === 'string')\n return [h(XhSelectTagLabel, null, () => content)]\n return slotIsPlainText(content) ? [h(XhSelectTagLabel, null, () => content)] : content\n}\n\n/** 一个选中值一个标签,即库内 tag 的 root(data-scope=\"tag\"):语气、尺寸与禁用从 select 传下,形态按控件的面派生;触发器内纯展示,触发器外配合 XhSelectItemDeleteTrigger 可删除。 */\nexport const XhSelectTag = /* @__PURE__ */ defineComponent({\n name: 'XhSelectTag',\n props: {\n /** 它代表哪个选中值。 */\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useSelectContext()\n provideSelectTag({ value: () => props.value })\n // 标签随文排在触发器那一行里,根用 span\n return () => h('span', ctx.api.value.getTagProps({ value: props.value }) as Record<string, unknown>, tagChildren(slots.default?.()))\n },\n})\n\n/** 折叠的标签合成的一个标签:同样是 tag 的 root;有插槽时使用插槽,否则显示 +N。没有折叠的标签时连接层写 hidden。 */\nexport const XhSelectOverflowTag = /* @__PURE__ */ defineComponent({\n name: 'XhSelectOverflowTag',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n return () => h(\n 'span',\n ctx.api.value.getOverflowTagProps() as Record<string, unknown>,\n tagChildren(slots.default?.() ?? ctx.api.value.overflowText),\n )\n },\n})\n\n/** 标签中的删除按钮:即所在标签那份 tag 的 close-trigger(data-scope=\"tag\"),可及名使用 translations.deleteItem;点按移除所在标签的选中值。 */\nexport const XhSelectItemDeleteTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhSelectItemDeleteTrigger',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const tag = useSelectTagContext()\n return () => h('button', ctx.api.value.getItemDeleteTriggerProps({ value: tag.value() }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectPositioner = /* @__PURE__ */ defineComponent({\n name: 'XhSelectPositioner',\n props: {\n /** 本实例的 Portal 容器;优先于应用级配置。 */\n container: { type: Object as PropType<Element> },\n },\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 positioner 上\n inheritAttrs: false,\n setup(props, { slots, attrs }) {\n const ctx = useSelectContext()\n // 列表的自绘条:与 content 同级、绝对定位不占布局,壳是这层已经 fixed 的 positioner,条子走浮层 4px 档\n const bars = useScrollbars({ scrollable: () => ctx.listRef.value, props: { size: 'sm' } })\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value, source: ctx.triggerRef }, () => [\n h('div', {\n ...mergeProps(ctx.api.value.getPositionerProps() as Record<string, unknown>, attrs),\n ref: (el: unknown) => { ctx.positionerRef.value = el as HTMLElement },\n }, [...(slots.default?.() ?? []), ...bars.render()]),\n ])\n },\n})\n\nexport const XhSelectContent = /* @__PURE__ */ defineComponent({\n name: 'XhSelectContent',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n return () => h('div', {\n ...ctx.api.value.getContentProps() as Record<string, unknown>,\n // 收起跟着退场闸门走:皮肤刻意没给 content 补 [hidden]{display:none}(补了退场\n // 就一帧都播不出来),所以真正的收起落成内联 display——节点始终留在原地\n style: ctx.visible.value ? undefined : { display: 'none' },\n ref: (el: unknown) => { ctx.contentRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhSelectList = /* @__PURE__ */ defineComponent({\n name: 'XhSelectList',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 列表框本体:条目放这里面。滚动也在这一层,底部操作区因此不随条目滚走\n return () => h('div', {\n ...ctx.api.value.getListProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.listRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhSelectFooter = /* @__PURE__ */ defineComponent({\n name: 'XhSelectFooter',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 浮层底部的操作区:是 list 的兄弟,不进列表框的拥有关系,\n // 放在里面的按钮既不违反 listbox 的子节点约束,也不会被方向键与连打检索走到\n return () => h('div', ctx.api.value.getFooterProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectEmpty = /* @__PURE__ */ defineComponent({\n name: 'XhSelectEmpty',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 空态占位:写在 content 里、list 的兄弟,不进列表框的拥有关系。\n // 给了 collection 时收放归连接层,条目手写时归作者\n return () => h('div', ctx.api.value.getEmptyProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectLoading = /* @__PURE__ */ defineComponent({\n name: 'XhSelectLoading',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 在途占位:与空态占位同一个位置,取数期间顶上来\n return () => h('div', ctx.api.value.getLoadingProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectGroup = /* @__PURE__ */ defineComponent({\n name: 'XhSelectGroup',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useSelectContext()\n const group = computed<SelectGroupProps>(() => ({ value: props.value }))\n provideSelectGroup({ group })\n // 分组容器:条目照常挂在它里面,role=group 是列表框允许拥有的两种子节点之一\n return () => h('div', ctx.api.value.getGroupProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectGroupLabel = /* @__PURE__ */ defineComponent({\n name: 'XhSelectGroupLabel',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { group } = useSelectGroupContext()\n return () => h('span', ctx.api.value.getGroupLabelProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectItem = /* @__PURE__ */ defineComponent({\n name: 'XhSelectItem',\n props: {\n value: { type: String, required: true },\n // 缺省交给 connect 回 collection 里查,写死 false 会盖掉数据里的禁用\n disabled: { type: Boolean, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useSelectContext()\n const item = computed<SelectItemProps>(() => ({ value: props.value, disabled: props.disabled }))\n provideSelectItem({ item })\n // 本条目持有焦点时,value 变更重报高亮条目,卸载时上报条目丢失\n const itemEl = ref<HTMLElement | null>(null)\n watch(() => props.value, (next, prev) => {\n if (next === prev)\n return\n const svc = ctx.service\n if (svc.getStatus() !== 'Started')\n return\n if (itemEl.value && svc.scope.getActiveElement() === itemEl.value)\n svc.send({ type: 'ITEM.HIGHLIGHT', value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n // 按「本节点当下正持有焦点」判定,不按 value 比对\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'ITEM.LOST' })\n })\n return () => h(\n 'div',\n { ...ctx.api.value.getItemProps(item.value) as Record<string, unknown>, ref: itemEl },\n slots.default?.(),\n )\n },\n})\n\nexport const XhSelectItemText = /* @__PURE__ */ defineComponent({\n name: 'XhSelectItemText',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { item } = useSelectItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目行首的作者内容(图标、色块、头像),对读屏隐藏 */\nexport const XhSelectItemPrefix = /* @__PURE__ */ defineComponent({\n name: 'XhSelectItemPrefix',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { item } = useSelectItemContext()\n return () => h('span', ctx.api.value.getItemPrefixProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目行尾的作者内容(计数、徽标) */\nexport const XhSelectItemSuffix = /* @__PURE__ */ defineComponent({\n name: 'XhSelectItemSuffix',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { item } = useSelectItemContext()\n return () => h('span', ctx.api.value.getItemSuffixProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目的第 2 行副文本,跨文字槽、走 muted 档 */\nexport const XhSelectItemDescription = /* @__PURE__ */ defineComponent({\n name: 'XhSelectItemDescription',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { item } = useSelectItemContext()\n return () => h('span', ctx.api.value.getItemDescriptionProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectItemIndicator = /* @__PURE__ */ defineComponent({\n name: 'XhSelectItemIndicator',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { item } = useSelectItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 未写默认插槽时按 collection 铺开的整套结构,作者只提供数据。\n * 与手写部件产出的 DOM 完全一致,需要修改结构时写默认插槽,行为不变。\n */\nfunction renderDefaultTree(\n collection: readonly SelectNodeMeta[],\n label: (VNode | string)[] | null,\n clearable: boolean,\n itemSlot?: (node: SelectNodeMeta) => VNode[],\n prefixSlot?: (node: SelectNodeMeta) => VNode[],\n suffixSlot?: (node: SelectNodeMeta) => VNode[],\n): VNode[] {\n const trigger = h(XhSelectTrigger, null, () => [h(XhSelectValueText), h(XhSelectIndicator)])\n return [\n ...(label ? [h(XhSelectLabel, null, () => label)] : []),\n // control 是盒:描边、底色与聚焦环都长在它上面,触发器与清空钮在里面并排。\n // 清空钮排在触发器之后(按钮不能套按钮),展开箭头是触发器里的指示符,\n // 视觉上仍是「清空在左、箭头在右」\n h(XhSelectControl, null, () => (clearable ? [trigger, h(XhSelectClearTrigger)] : [trigger])),\n h(XhSelectPositioner, null, () => [\n h(XhSelectContent, null, () => h(XhSelectList, null, () => collection.map(node =>\n h(XhSelectItem, { key: node.value, value: node.value }, () => [\n ...(prefixSlot ? [h(XhSelectItemPrefix, null, () => prefixSlot(node))] : []),\n h(XhSelectItemText, null, () => itemSlot?.(node) ?? node.label),\n ...(node.description != null ? [h(XhSelectItemDescription, null, () => node.description)] : []),\n ...(suffixSlot ? [h(XhSelectItemSuffix, null, () => suffixSlot(node))] : []),\n h(XhSelectItemIndicator),\n ]),\n ))),\n ]),\n ]\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"select.js","names":[],"sources":["../../../src/components/select/select.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 select 相关实现。\n\nimport type { ControlVariant, Direction, Placement, Size, Tone } from '@xihan-ui/core'\nimport type { CollectionVirtualizer, SelectApi, SelectGroupProps, SelectItemProps, SelectNode, SelectNodeMeta, SelectOpenChangeDetails, SelectSchema, SelectTagMeta, SelectValueChangeDetails } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport { computed, defineComponent, h, mergeProps, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { XhPortal } from '../../runtime/portal'\nimport { slotIsPlainText } from '../../runtime/slot-content'\nimport { useScrollbars } from '../../runtime/use-scrollbars'\nimport { useFieldLabelWiring, useFieldStateWiring } from '../field/use-field-control'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideSelect, provideSelectGroup, provideSelectItem, provideSelectTag, useSelectContext, useSelectGroupContext, useSelectItemContext, useSelectTagContext } from './context'\nimport { useSelect } from './use-select'\n\ntype SelectProps = SelectSchema['props']\n\n/** 默认插槽的载荷:展开态、选中集合与显示文字、可见标签与被折叠的个数及其文字,以及修改展开、修改值、清空、移除值四个动作。 */\nexport type SelectRootSlotProps = Pick<\n SelectApi,\n 'open' | 'value' | 'displayText' | 'tags' | 'overflowCount' | 'overflowText' | 'setOpen' | 'setValue' | 'clear' | 'deselect'\n>\n\nexport const XhSelectRoot = /* @__PURE__ */ defineComponent({\n name: 'XhSelectRoot',\n // 有 connect 兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<SelectNode[]> },\n virtualizer: { type: Object as PropType<CollectionVirtualizer> },\n /** 标题文字。提供后不必再写 label 部件;需要放置其他内容时改用 label 插槽。 */\n label: { type: String },\n value: { type: [String, Array] as PropType<string | string[] | null> },\n defaultValue: { type: [String, Array] as PropType<string | string[] | null> },\n multiple: Boolean,\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n disabled: { type: Boolean, default: undefined },\n /** 只读:浮层照常展开与浏览,但选中值不可修改、也不可清空。 */\n readOnly: { type: Boolean, default: undefined },\n /** 自动渲染树中是否带清空按钮;手写部件不使用它,写了节点即可清空。 */\n clearable: Boolean,\n invalid: { type: Boolean, default: undefined },\n loading: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n name: { type: String },\n translations: { type: Object as PropType<SelectProps['translations']> },\n maxTagCount: { type: Number },\n placeholder: { type: String },\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction> },\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n },\n // *-change 携带 details 对象,update:* 携带裸值。\n // 校验函数恒真,只声明载荷类型:'update:value' 是 string[],单选也是长度 1 的数组而非裸串。\n emits: {\n 'value-change': (_details: SelectValueChangeDetails) => true,\n 'open-change': (_details: SelectOpenChangeDetails) => true,\n 'update:value': (_value: string[]) => true,\n 'update:open': (_open: boolean) => true,\n },\n slots: Object as SlotsType<{\n 'default'?: (props: SelectRootSlotProps) => VNode[]\n 'label'?: () => VNode[]\n /** 只填条目的文字槽,副文本与首尾两格照旧各归各的 */\n 'item'?: (node: SelectNodeMeta) => VNode[]\n /** 只接管行首那一格,其余槽照旧由数据铺 */\n 'item-prefix'?: (node: SelectNodeMeta) => VNode[]\n /** 只接管行尾那一格(计数、徽标、次级图标),其余槽照旧由数据铺 */\n 'item-suffix'?: (node: SelectNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: SelectProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyOpen: SelectProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const ctx = useSelect(withXhConfig('select', useFormControlProps(props)) as SelectProps, notifyValue, notifyOpen)\n provideSelect(ctx)\n\n // 表单影子由根部件装配:空串选项打底,每个选中值一个 selected 选项,供 required 判定。\n // 选中态一律靠选项的 selected 表达,多选下 select.value 表达不了集合。\n const hiddenSelect = (): VNode => {\n const api = ctx.api.value\n const options = [h('option', { value: '' })]\n for (const [i, v] of api.value.entries())\n options.push(h('option', { value: v, selected: true }, api.valueText[i] ?? v))\n return h('select', api.getHiddenSelectProps() as Record<string, unknown>, options)\n }\n\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, [\n hiddenSelect(),\n ...(slots.default\n ? slots.default({\n open: ctx.api.value.open,\n value: ctx.api.value.value,\n displayText: ctx.api.value.displayText,\n tags: ctx.api.value.tags,\n overflowCount: ctx.api.value.overflowCount,\n overflowText: ctx.api.value.overflowText,\n setOpen: ctx.api.value.setOpen,\n setValue: ctx.api.value.setValue,\n clear: ctx.api.value.clear,\n deselect: ctx.api.value.deselect,\n }) ?? []\n : props.collection\n ? renderDefaultTree(\n ctx.api.value.collection,\n props.multiple ? ctx.api.value.tags : null,\n slots.label?.() ?? (props.label != null ? [props.label] : null),\n props.clearable,\n slots.item,\n slots['item-prefix'],\n slots['item-suffix'],\n )\n : []),\n ])\n },\n})\n\nexport const XhSelectLabel = /* @__PURE__ */ defineComponent({\n name: 'XhSelectLabel',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectControl = /* @__PURE__ */ defineComponent({\n name: 'XhSelectControl',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 盒:触发器与清空按钮在里面并排,描边、底色与聚焦环都长在它上面\n return () => h('div', {\n ...ctx.api.value.getControlProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.controlRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhSelectTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhSelectTrigger',\n setup(_, { slots }) {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useSelectContext()\n return () => h('button', fieldLabel.value({\n ...fieldWiring.value,\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n }), slots.default?.())\n },\n})\n\nexport const XhSelectValueText = /* @__PURE__ */ defineComponent({\n name: 'XhSelectValueText',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 有插槽用插槽,否则显示选中项文本或 placeholder\n return () => h(\n 'span',\n ctx.api.value.getValueTextProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.displayText,\n )\n },\n})\n\nexport const XhSelectIndicator = /* @__PURE__ */ defineComponent({\n name: 'XhSelectIndicator',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n return () => h('span', ctx.api.value.getIndicatorProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectClearTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhSelectClearTrigger',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 节点常挂,清不了时靠 hidden 藏掉\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectTagList = /* @__PURE__ */ defineComponent({\n name: 'XhSelectTagList',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 标签行:可见标签与 +N 那一枚在里面并排;无选中时连接层给 hidden,value-text 回来显示占位文字\n return () => h('span', ctx.api.value.getTagListProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 标签文字所在的块(tag 的 label):截断规则挂在这一层。 */\nexport const XhSelectTagLabel = /* @__PURE__ */ defineComponent({\n name: 'XhSelectTagLabel',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n return () => h('span', ctx.api.value.getTagLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 标签内容:只有文字时替它包一层 label:截断规则挂在 label 上,直接展开在 root 上的文字过长会把\n * 删除按钮挤出;作者自己写了节点则原样放行。与 XhTagRoot 同一规则。\n * 库自身填入的文字(+N,没有折叠时是空串)恒包 label,三个适配器渲染出同一棵树。\n */\nfunction tagChildren(content: VNode[] | string | undefined): VNode[] | string | undefined {\n if (typeof content === 'string')\n return [h(XhSelectTagLabel, null, () => content)]\n return slotIsPlainText(content) ? [h(XhSelectTagLabel, null, () => content)] : content\n}\n\n/** 一个选中值一个标签,即库内 tag 的 root(data-scope=\"tag\"):语气、尺寸与禁用从 select 传下,形态按控件的面派生;触发器内纯展示,触发器外配合 XhSelectItemDeleteTrigger 可删除。 */\nexport const XhSelectTag = /* @__PURE__ */ defineComponent({\n name: 'XhSelectTag',\n props: {\n /** 它代表哪个选中值。 */\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useSelectContext()\n provideSelectTag({ value: () => props.value })\n // 标签随文排在触发器那一行里,根用 span\n return () => h('span', ctx.api.value.getTagProps({ value: props.value }) as Record<string, unknown>, tagChildren(slots.default?.()))\n },\n})\n\n/** 折叠的标签合成的一个标签:同样是 tag 的 root;有插槽时使用插槽,否则显示 +N。没有折叠的标签时连接层写 hidden。 */\nexport const XhSelectOverflowTag = /* @__PURE__ */ defineComponent({\n name: 'XhSelectOverflowTag',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n return () => h(\n 'span',\n ctx.api.value.getOverflowTagProps() as Record<string, unknown>,\n tagChildren(slots.default?.() ?? ctx.api.value.overflowText),\n )\n },\n})\n\n/** 标签中的删除按钮:即所在标签那份 tag 的 close-trigger(data-scope=\"tag\"),可及名使用 translations.deleteItem;点按移除所在标签的选中值。 */\nexport const XhSelectItemDeleteTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhSelectItemDeleteTrigger',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const tag = useSelectTagContext()\n return () => h('button', ctx.api.value.getItemDeleteTriggerProps({ value: tag.value() }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectPositioner = /* @__PURE__ */ defineComponent({\n name: 'XhSelectPositioner',\n props: {\n /** 本实例的 Portal 容器;优先于应用级配置。 */\n container: { type: Object as PropType<Element> },\n },\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 positioner 上\n inheritAttrs: false,\n setup(props, { slots, attrs }) {\n const ctx = useSelectContext()\n // 列表的自绘条:与 content 同级、绝对定位不占布局,壳是这层已经 fixed 的 positioner,条子走浮层 4px 档\n const bars = useScrollbars({ scrollable: () => ctx.listRef.value, props: { size: 'sm' } })\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value, source: ctx.triggerRef }, () => [\n h('div', {\n ...mergeProps(ctx.api.value.getPositionerProps() as Record<string, unknown>, attrs),\n ref: (el: unknown) => { ctx.positionerRef.value = el as HTMLElement },\n }, [...(slots.default?.() ?? []), ...bars.render()]),\n ])\n },\n})\n\nexport const XhSelectContent = /* @__PURE__ */ defineComponent({\n name: 'XhSelectContent',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n return () => h('div', {\n ...ctx.api.value.getContentProps() as Record<string, unknown>,\n // 收起跟着退场闸门走:皮肤刻意没给 content 补 [hidden]{display:none}(补了退场\n // 就一帧都播不出来),所以真正的收起落成内联 display——节点始终留在原地\n style: ctx.visible.value ? undefined : { display: 'none' },\n ref: (el: unknown) => { ctx.contentRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhSelectList = /* @__PURE__ */ defineComponent({\n name: 'XhSelectList',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 列表框本体:条目放这里面。滚动也在这一层,底部操作区因此不随条目滚走\n return () => h('div', {\n ...ctx.api.value.getListProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.listRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhSelectFooter = /* @__PURE__ */ defineComponent({\n name: 'XhSelectFooter',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 浮层底部的操作区:是 list 的兄弟,不进列表框的拥有关系,\n // 放在里面的按钮既不违反 listbox 的子节点约束,也不会被方向键与连打检索走到\n return () => h('div', ctx.api.value.getFooterProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectEmpty = /* @__PURE__ */ defineComponent({\n name: 'XhSelectEmpty',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 空态占位:写在 content 里、list 的兄弟,不进列表框的拥有关系。\n // 给了 collection 时收放归连接层,条目手写时归作者\n return () => h('div', ctx.api.value.getEmptyProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectLoading = /* @__PURE__ */ defineComponent({\n name: 'XhSelectLoading',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 在途占位:与空态占位同一个位置,取数期间顶上来\n return () => h('div', ctx.api.value.getLoadingProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectGroup = /* @__PURE__ */ defineComponent({\n name: 'XhSelectGroup',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useSelectContext()\n const group = computed<SelectGroupProps>(() => ({ value: props.value }))\n provideSelectGroup({ group })\n // 分组容器:条目照常挂在它里面,role=group 是列表框允许拥有的两种子节点之一\n return () => h('div', ctx.api.value.getGroupProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectGroupLabel = /* @__PURE__ */ defineComponent({\n name: 'XhSelectGroupLabel',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { group } = useSelectGroupContext()\n return () => h('span', ctx.api.value.getGroupLabelProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectItem = /* @__PURE__ */ defineComponent({\n name: 'XhSelectItem',\n props: {\n value: { type: String, required: true },\n // 缺省交给 connect 回 collection 里查,写死 false 会盖掉数据里的禁用\n disabled: { type: Boolean, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useSelectContext()\n const item = computed<SelectItemProps>(() => ({ value: props.value, disabled: props.disabled }))\n provideSelectItem({ item })\n // 本条目持有焦点时,value 变更重报高亮条目,卸载时上报条目丢失\n const itemEl = ref<HTMLElement | null>(null)\n watch(() => props.value, (next, prev) => {\n if (next === prev)\n return\n const svc = ctx.service\n if (svc.getStatus() !== 'Started')\n return\n if (itemEl.value && svc.scope.getActiveElement() === itemEl.value)\n svc.send({ type: 'ITEM.HIGHLIGHT', value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (service.prop('virtualizer') && service.prop('collection')?.some(node => node.value === props.value))\n return\n // 按「本节点当下正持有焦点」判定,不按 value 比对\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'ITEM.LOST' })\n })\n return () => h(\n 'div',\n { ...ctx.api.value.getItemProps(item.value) as Record<string, unknown>, ref: itemEl },\n slots.default?.(),\n )\n },\n})\n\nexport const XhSelectItemText = /* @__PURE__ */ defineComponent({\n name: 'XhSelectItemText',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { item } = useSelectItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目行首的作者内容(图标、色块、头像),对读屏隐藏 */\nexport const XhSelectItemPrefix = /* @__PURE__ */ defineComponent({\n name: 'XhSelectItemPrefix',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { item } = useSelectItemContext()\n return () => h('span', ctx.api.value.getItemPrefixProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目行尾的作者内容(计数、徽标) */\nexport const XhSelectItemSuffix = /* @__PURE__ */ defineComponent({\n name: 'XhSelectItemSuffix',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { item } = useSelectItemContext()\n return () => h('span', ctx.api.value.getItemSuffixProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目的第 2 行副文本,跨文字槽、走 muted 档 */\nexport const XhSelectItemDescription = /* @__PURE__ */ defineComponent({\n name: 'XhSelectItemDescription',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { item } = useSelectItemContext()\n return () => h('span', ctx.api.value.getItemDescriptionProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectItemIndicator = /* @__PURE__ */ defineComponent({\n name: 'XhSelectItemIndicator',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { item } = useSelectItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 未写默认插槽时按 collection 铺开的整套结构,作者只提供数据。\n * 与手写部件产出的 DOM 完全一致,需要修改结构时写默认插槽,行为不变。\n */\nfunction renderDefaultTree(\n collection: readonly SelectNodeMeta[],\n tags: readonly SelectTagMeta[] | null,\n label: (VNode | string)[] | null,\n clearable: boolean,\n itemSlot?: (node: SelectNodeMeta) => VNode[],\n prefixSlot?: (node: SelectNodeMeta) => VNode[],\n suffixSlot?: (node: SelectNodeMeta) => VNode[],\n): VNode[] {\n // 多选的已选项在触发器里排成标签:占位文字与标签行同时写着,有选中时标签露面、占位让位;\n // 触发器里的标签只作展示(按钮不能套按钮),摆不下的折进 +N\n const trigger = h(XhSelectTrigger, null, () => [\n h(XhSelectValueText),\n ...(tags\n ? [h(XhSelectTagList, null, () => [\n ...tags.map(tag => h(XhSelectTag, { key: tag.value, value: tag.value }, () => tag.label)),\n h(XhSelectOverflowTag),\n ])]\n : []),\n h(XhSelectIndicator),\n ])\n return [\n ...(label ? [h(XhSelectLabel, null, () => label)] : []),\n // control 是盒:描边、底色与聚焦环都长在它上面,触发器与清空钮在里面并排。\n // 清空钮排在触发器之后(按钮不能套按钮),展开箭头是触发器里的指示符,\n // 视觉上仍是「清空在左、箭头在右」\n h(XhSelectControl, null, () => (clearable ? [trigger, h(XhSelectClearTrigger)] : [trigger])),\n h(XhSelectPositioner, null, () => [\n h(XhSelectContent, null, () => h(XhSelectList, null, () => collection.map(node =>\n h(XhSelectItem, { key: node.value, value: node.value }, () => [\n ...(prefixSlot ? [h(XhSelectItemPrefix, null, () => prefixSlot(node))] : []),\n h(XhSelectItemText, null, () => itemSlot?.(node) ?? node.label),\n ...(node.description != null ? [h(XhSelectItemDescription, null, () => node.description)] : []),\n ...(suffixSlot ? [h(XhSelectItemSuffix, null, () => suffixSlot(node))] : []),\n h(XhSelectItemIndicator),\n ]),\n ))),\n ]),\n ]\n}\n"],"mappings":";;;;;;;;;;AA4BA,MAAa,eAA+B,gCAAgB;CAC1D,MAAM;CAEN,OAAO;EACL,YAAY,EAAE,MAAM,MAAgC;EACpD,aAAa,EAAE,MAAM,OAA0C;;EAE/D,OAAO,EAAE,MAAM,OAAO;EACtB,OAAO,EAAE,MAAM,CAAC,QAAQ,KAAK,EAAwC;EACrE,cAAc,EAAE,MAAM,CAAC,QAAQ,KAAK,EAAwC;EAC5E,UAAU;EACV,MAAM;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC1C,aAAa;EACb,UAAU;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;;EAE9C,UAAU;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;;EAE9C,WAAW;EACX,SAAS;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC7C,SAAS;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC7C,UAAU;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC9C,MAAM,EAAE,MAAM,OAAO;EACrB,cAAc,EAAE,MAAM,OAAgD;EACtE,aAAa,EAAE,MAAM,OAAO;EAC5B,aAAa,EAAE,MAAM,OAAO;EAC5B,WAAW,EAAE,MAAM,OAA8B;EACjD,QAAQ,EAAE,MAAM,OAAO;EACvB,MAAM;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC1C,KAAK,EAAE,MAAM,OAA8B;EAC3C,SAAS,EAAE,MAAM,OAAmC;EACpD,MAAM,EAAE,MAAM,OAAyB;EACvC,MAAM,EAAE,MAAM,OAAyB;CACzC;CAGA,OAAO;EACL,iBAAiB,aAAuC;EACxD,gBAAgB,aAAsC;EACtD,iBAAiB,WAAqB;EACtC,gBAAgB,UAAmB;CACrC;CACA,OAAO;CAUP,MAAM,OAAO,EAAE,OAAO,QAAQ;EAC5B,MAAM,eAA6C,YAAY;GAC7D,KAAK,gBAAgB,OAAO;GAC5B,KAAK,gBAAgB,QAAQ,KAAK;EACpC;EACA,MAAM,cAA2C,YAAY;GAC3D,KAAK,eAAe,OAAO;GAC3B,KAAK,eAAe,QAAQ,IAAI;EAClC;EACA,MAAM,MAAM,UAAU,aAAa,UAAU,oBAAoB,KAAK,CAAC,GAAkB,aAAa,UAAU;EAChH,cAAc,GAAG;EAIjB,MAAM,qBAA4B;GAChC,MAAM,MAAM,IAAI,IAAI;GACpB,MAAM,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,GAAG,CAAC,CAAC;GAC3C,KAAK,MAAM,CAAC,GAAG,MAAM,IAAI,MAAM,QAAQ,GACrC,QAAQ,KAAK,EAAE,UAAU;IAAE,OAAO;IAAG,UAAU;GAAK,GAAG,IAAI,UAAU,MAAM,CAAC,CAAC;GAC/E,OAAO,EAAE,UAAU,IAAI,qBAAqB,GAA8B,OAAO;EACnF;EAEA,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,aAAa,GAA8B,CAC7E,aAAa,GACb,GAAI,MAAM,UACN,MAAM,QAAQ;GACd,MAAM,IAAI,IAAI,MAAM;GACpB,OAAO,IAAI,IAAI,MAAM;GACrB,aAAa,IAAI,IAAI,MAAM;GAC3B,MAAM,IAAI,IAAI,MAAM;GACpB,eAAe,IAAI,IAAI,MAAM;GAC7B,cAAc,IAAI,IAAI,MAAM;GAC5B,SAAS,IAAI,IAAI,MAAM;GACvB,UAAU,IAAI,IAAI,MAAM;GACxB,OAAO,IAAI,IAAI,MAAM;GACrB,UAAU,IAAI,IAAI,MAAM;EAC1B,CAAC,KAAK,CAAC,IACL,MAAM,aACJ,kBACE,IAAI,IAAI,MAAM,YACd,MAAM,WAAW,IAAI,IAAI,MAAM,OAAO,MACtC,MAAM,QAAQ,MAAM,MAAM,SAAS,OAAO,CAAC,MAAM,KAAK,IAAI,OAC1D,MAAM,WACN,MAAM,MACN,MAAM,gBACN,MAAM,cACR,IACA,CAAC,CACT,CAAC;CACH;AACF,CAAC;AAED,MAAa,gBAAgC,gCAAgB;CAC3D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,cAAc,GAA8B,MAAM,UAAU,CAAC;CACpG;AACF,CAAC;AAED,MAAa,kBAAkC,gCAAgB;CAC7D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAE7B,aAAa,EAAE,OAAO;GACpB,GAAG,IAAI,IAAI,MAAM,gBAAgB;GACjC,MAAM,OAAgB;IAAE,IAAI,WAAW,QAAQ;GAAkB;EACnE,GAAG,MAAM,UAAU,CAAC;CACtB;AACF,CAAC;AAED,MAAa,kBAAkC,gCAAgB;CAC7D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAElB,MAAM,cAAc,oBAAoB;EAExC,MAAM,aAAa,oBAAoB;EACvC,MAAM,MAAM,iBAAiB;EAC7B,aAAa,EAAE,UAAU,WAAW,MAAM;GACxC,GAAG,YAAY;GACf,GAAG,IAAI,IAAI,MAAM,gBAAgB;GACjC,MAAM,OAAgB;IAAE,IAAI,WAAW,QAAQ;GAAkB;EACnE,CAAC,GAAG,MAAM,UAAU,CAAC;CACvB;AACF,CAAC;AAED,MAAa,oBAAoC,gCAAgB;CAC/D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAE7B,aAAa,EACX,QACA,IAAI,IAAI,MAAM,kBAAkB,GAChC,MAAM,UAAU,KAAK,IAAI,IAAI,MAAM,WACrC;CACF;AACF,CAAC;AAED,MAAa,oBAAoC,gCAAgB;CAC/D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,kBAAkB,GAA8B,MAAM,UAAU,CAAC;CACxG;AACF,CAAC;AAED,MAAa,uBAAuC,gCAAgB;CAClE,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAE7B,aAAa,EAAE,UAAU,IAAI,IAAI,MAAM,qBAAqB,GAA8B,MAAM,UAAU,CAAC;CAC7G;AACF,CAAC;AAED,MAAa,kBAAkC,gCAAgB;CAC7D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAE7B,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,gBAAgB,GAA8B,MAAM,UAAU,CAAC;CACtG;AACF,CAAC;;AAGD,MAAa,mBAAmC,gCAAgB;CAC9D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,iBAAiB,GAA8B,MAAM,UAAU,CAAC;CACvG;AACF,CAAC;;;;;;AAOD,SAAS,YAAY,SAAqE;CACxF,IAAI,OAAO,YAAY,UACrB,OAAO,CAAC,EAAE,kBAAkB,YAAY,OAAO,CAAC;CAClD,OAAO,gBAAgB,OAAO,IAAI,CAAC,EAAE,kBAAkB,YAAY,OAAO,CAAC,IAAI;AACjF;;AAGA,MAAa,cAA8B,gCAAgB;CACzD,MAAM;CACN,OAAO;;AAEL,OAAO;EAAE,MAAM;EAAQ,UAAU;CAAK,EACxC;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,MAAM,iBAAiB;EAC7B,iBAAiB,EAAE,aAAa,MAAM,MAAM,CAAC;EAE7C,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,YAAY,EAAE,OAAO,MAAM,MAAM,CAAC,GAA8B,YAAY,MAAM,UAAU,CAAC,CAAC;CACrI;AACF,CAAC;;AAGD,MAAa,sBAAsC,gCAAgB;CACjE,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,aAAa,EACX,QACA,IAAI,IAAI,MAAM,oBAAoB,GAClC,YAAY,MAAM,UAAU,KAAK,IAAI,IAAI,MAAM,YAAY,CAC7D;CACF;AACF,CAAC;;AAGD,MAAa,4BAA4C,gCAAgB;CACvE,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,MAAM,MAAM,oBAAoB;EAChC,aAAa,EAAE,UAAU,IAAI,IAAI,MAAM,0BAA0B,EAAE,OAAO,IAAI,MAAM,EAAE,CAAC,GAA8B,MAAM,UAAU,CAAC;CACxI;AACF,CAAC;AAED,MAAa,qBAAqC,gCAAgB;CAChE,MAAM;CACN,OAAO;;AAEL,WAAW,EAAE,MAAM,OAA4B,EACjD;CAEA,cAAc;CACd,MAAM,OAAO,EAAE,OAAO,SAAS;EAC7B,MAAM,MAAM,iBAAiB;EAE7B,MAAM,OAAO,cAAc;GAAE,kBAAkB,IAAI,QAAQ;GAAO,OAAO,EAAE,MAAM,KAAK;EAAE,CAAC;EAEzF,aAAa,EAAE,UAAU;GAAE,IAAI,MAAM,aAAa,IAAI,aAAa;GAAO,QAAQ,IAAI;EAAW,SAAS,CACxG,EAAE,OAAO;GACP,GAAG,WAAW,IAAI,IAAI,MAAM,mBAAmB,GAA8B,KAAK;GAClF,MAAM,OAAgB;IAAE,IAAI,cAAc,QAAQ;GAAkB;EACtE,GAAG,CAAC,GAAI,MAAM,UAAU,KAAK,CAAC,GAAI,GAAG,KAAK,OAAO,CAAC,CAAC,CACrD,CAAC;CACH;AACF,CAAC;AAED,MAAa,kBAAkC,gCAAgB;CAC7D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,aAAa,EAAE,OAAO;GACpB,GAAG,IAAI,IAAI,MAAM,gBAAgB;GAGjC,OAAO,IAAI,QAAQ,QAAQ,KAAA,IAAY,EAAE,SAAS,OAAO;GACzD,MAAM,OAAgB;IAAE,IAAI,WAAW,QAAQ;GAAkB;EACnE,GAAG,MAAM,UAAU,CAAC;CACtB;AACF,CAAC;AAED,MAAa,eAA+B,gCAAgB;CAC1D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAE7B,aAAa,EAAE,OAAO;GACpB,GAAG,IAAI,IAAI,MAAM,aAAa;GAC9B,MAAM,OAAgB;IAAE,IAAI,QAAQ,QAAQ;GAAkB;EAChE,GAAG,MAAM,UAAU,CAAC;CACtB;AACF,CAAC;AAED,MAAa,iBAAiC,gCAAgB;CAC5D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAG7B,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,eAAe,GAA8B,MAAM,UAAU,CAAC;CACpG;AACF,CAAC;AAED,MAAa,gBAAgC,gCAAgB;CAC3D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAG7B,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,cAAc,GAA8B,MAAM,UAAU,CAAC;CACnG;AACF,CAAC;AAED,MAAa,kBAAkC,gCAAgB;CAC7D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAE7B,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,gBAAgB,GAA8B,MAAM,UAAU,CAAC;CACrG;AACF,CAAC;AAED,MAAa,gBAAgC,gCAAgB;CAC3D,MAAM;CACN,OAAO,EACL,OAAO;EAAE,MAAM;EAAQ,UAAU;CAAK,EACxC;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,MAAM,iBAAiB;EAC7B,MAAM,QAAQ,gBAAkC,EAAE,OAAO,MAAM,MAAM,EAAE;EACvE,mBAAmB,EAAE,MAAM,CAAC;EAE5B,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,cAAc,MAAM,KAAK,GAA8B,MAAM,UAAU,CAAC;CAC9G;AACF,CAAC;AAED,MAAa,qBAAqC,gCAAgB;CAChE,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,MAAM,EAAE,UAAU,sBAAsB;EACxC,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,mBAAmB,MAAM,KAAK,GAA8B,MAAM,UAAU,CAAC;CACpH;AACF,CAAC;AAED,MAAa,eAA+B,gCAAgB;CAC1D,MAAM;CACN,OAAO;EACL,OAAO;GAAE,MAAM;GAAQ,UAAU;EAAK;EAEtC,UAAU;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;CAChD;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,MAAM,iBAAiB;EAC7B,MAAM,OAAO,gBAAiC;GAAE,OAAO,MAAM;GAAO,UAAU,MAAM;EAAS,EAAE;EAC/F,kBAAkB,EAAE,KAAK,CAAC;EAE1B,MAAM,SAAS,IAAwB,IAAI;EAC3C,YAAY,MAAM,QAAQ,MAAM,SAAS;GACvC,IAAI,SAAS,MACX;GACF,MAAM,MAAM,IAAI;GAChB,IAAI,IAAI,UAAU,MAAM,WACtB;GACF,IAAI,OAAO,SAAS,IAAI,MAAM,iBAAiB,MAAM,OAAO,OAC1D,IAAI,KAAK;IAAE,MAAM;IAAkB,OAAO;GAAK,CAAC;EACpD,CAAC;EACD,sBAAsB;GACpB,MAAM,EAAE,YAAY;GACpB,IAAI,QAAQ,UAAU,MAAM,WAC1B;GACF,IAAI,QAAQ,KAAK,aAAa,KAAK,QAAQ,KAAK,YAAY,CAAC,EAAE,MAAK,SAAQ,KAAK,UAAU,MAAM,KAAK,GACpG;GAEF,IAAI,OAAO,SAAS,QAAQ,MAAM,iBAAiB,MAAM,OAAO,OAC9D,QAAQ,KAAK,EAAE,MAAM,YAAY,CAAC;EACtC,CAAC;EACD,aAAa,EACX,OACA;GAAE,GAAG,IAAI,IAAI,MAAM,aAAa,KAAK,KAAK;GAA8B,KAAK;EAAO,GACpF,MAAM,UAAU,CAClB;CACF;AACF,CAAC;AAED,MAAa,mBAAmC,gCAAgB;CAC9D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,MAAM,EAAE,SAAS,qBAAqB;EACtC,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,iBAAiB,KAAK,KAAK,GAA8B,MAAM,UAAU,CAAC;CACjH;AACF,CAAC;;AAGD,MAAa,qBAAqC,gCAAgB;CAChE,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,MAAM,EAAE,SAAS,qBAAqB;EACtC,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,mBAAmB,KAAK,KAAK,GAA8B,MAAM,UAAU,CAAC;CACnH;AACF,CAAC;;AAGD,MAAa,qBAAqC,gCAAgB;CAChE,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,MAAM,EAAE,SAAS,qBAAqB;EACtC,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,mBAAmB,KAAK,KAAK,GAA8B,MAAM,UAAU,CAAC;CACnH;AACF,CAAC;;AAGD,MAAa,0BAA0C,gCAAgB;CACrE,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,MAAM,EAAE,SAAS,qBAAqB;EACtC,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,wBAAwB,KAAK,KAAK,GAA8B,MAAM,UAAU,CAAC;CACxH;AACF,CAAC;AAED,MAAa,wBAAwC,gCAAgB;CACnE,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,MAAM,EAAE,SAAS,qBAAqB;EACtC,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,sBAAsB,KAAK,KAAK,GAA8B,MAAM,UAAU,CAAC;CACtH;AACF,CAAC;;;;;AAMD,SAAS,kBACP,YACA,MACA,OACA,WACA,UACA,YACA,YACS;CAGT,MAAM,UAAU,EAAE,iBAAiB,YAAY;EAC7C,EAAE,iBAAiB;EACnB,GAAI,OACA,CAAC,EAAE,iBAAiB,YAAY,CAC9B,GAAG,KAAK,KAAI,QAAO,EAAE,aAAa;GAAE,KAAK,IAAI;GAAO,OAAO,IAAI;EAAM,SAAS,IAAI,KAAK,CAAC,GACxF,EAAE,mBAAmB,CACvB,CAAC,CAAC,IACF,CAAC;EACL,EAAE,iBAAiB;CACrB,CAAC;CACD,OAAO;EACL,GAAI,QAAQ,CAAC,EAAE,eAAe,YAAY,KAAK,CAAC,IAAI,CAAC;EAIrD,EAAE,iBAAiB,YAAa,YAAY,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAE;EAC3F,EAAE,oBAAoB,YAAY,CAChC,EAAE,iBAAiB,YAAY,EAAE,cAAc,YAAY,WAAW,KAAI,SACxE,EAAE,cAAc;GAAE,KAAK,KAAK;GAAO,OAAO,KAAK;EAAM,SAAS;GAC5D,GAAI,aAAa,CAAC,EAAE,oBAAoB,YAAY,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC;GAC1E,EAAE,kBAAkB,YAAY,WAAW,IAAI,KAAK,KAAK,KAAK;GAC9D,GAAI,KAAK,eAAe,OAAO,CAAC,EAAE,yBAAyB,YAAY,KAAK,WAAW,CAAC,IAAI,CAAC;GAC7F,GAAI,aAAa,CAAC,EAAE,oBAAoB,YAAY,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC;GAC1E,EAAE,qBAAqB;EACzB,CAAC,CACH,CAAC,CAAC,CACJ,CAAC;CACH;AACF"}
@@ -38,7 +38,8 @@ function useSelect(props, onValueChange, onOpenChange) {
38
38
  service.refs.set("config", config);
39
39
  service.refs.set("registerLayer", registerLayer);
40
40
  service.refs.set("position", createPositionEngine());
41
- service.refs.set("getAnchorEl", () => triggerRef.value);
41
+ service.refs.set("getAnchorEl", () => controlRef.value ?? triggerRef.value);
42
+ service.refs.set("getTriggerEl", () => triggerRef.value);
42
43
  service.refs.set("getFloatingEl", () => positionerRef.value);
43
44
  service.refs.set("getContentEl", () => contentRef.value);
44
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-select.js","names":[],"sources":["../../../src/components/select/use-select.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 use select 相关实现。\n\nimport type { Cleanup, Layer, RuntimeConfig, Service } from '@xihan-ui/core'\nimport type { SelectApi, SelectSchema } from '@xihan-ui/headless'\nimport type { ComputedRef, Ref } from 'vue'\nimport { createRuntimeConfig, createScope } from '@xihan-ui/core'\nimport { connectSelect, selectMachine } from '@xihan-ui/headless'\nimport { createPositionEngine } from '@xihan-ui/position'\nimport { computed, ref } from 'vue'\nimport { useXhConfig } from '../../config/config'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { useOverlayExit } from '../../runtime/use-overlay-exit'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface SelectContext {\n /** 状态机实例,供部件上报 DOM 侧的事实(如条目卸载带走了焦点)。 */\n service: Service<SelectSchema>\n api: ComputedRef<SelectApi>\n triggerRef: Ref<HTMLElement | null>\n /** 盒:触发器与清空按钮在里面并排,记为浮层分支 */\n controlRef: Ref<HTMLElement | null>\n positionerRef: Ref<HTMLElement | null>\n contentRef: Ref<HTMLElement | null>\n /** 列表框本体:真正在滚动的层,自绘条挂在 positioner 上跟着它走 */\n listRef: Ref<HTMLElement | null>\n /** 当前是否应当渲染:退场动画播完之前仍为真。 */\n visible: Ref<boolean>\n /** 浮层迁移到的位置:全局配置的容器 > 运行时的浮层落点 > body。 */\n portalTarget: ComputedRef<string | Element>\n}\n\nexport function useSelect(\n props: SelectSchema['props'],\n onValueChange?: SelectSchema['props']['onValueChange'],\n onOpenChange?: SelectSchema['props']['onOpenChange'],\n): SelectContext {\n const xhConfig = useXhConfig()\n const triggerRef = ref<HTMLElement | null>(null)\n const controlRef = ref<HTMLElement | null>(null)\n const positionerRef = ref<HTMLElement | null>(null)\n const contentRef = ref<HTMLElement | null>(null)\n const listRef = ref<HTMLElement | null>(null)\n\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n const service = useMachine(selectMachine, () => ({ ...props, onValueChange, onOpenChange }), scope)\n\n // 服务端没有 DOM、也就没有退场:config 传 null 时闸门退化成「跟着展开态」\n let config: RuntimeConfig | null = null\n\n if (typeof document !== 'undefined') {\n config = createRuntimeConfig({ scope, idGenerator: idGen })\n\n // 只提供注册函数,入栈出栈由机器的 trackLayer 效应按展开态驱动\n const registerLayer = (): { layer: Layer, dispose: Cleanup } => config!.layerRegistry.register({\n kind: 'popover',\n node: () => contentRef.value,\n // 整个盒记为本层分支:点触发器或清空钮算层内交互,开合交给 trigger 自己切换;\n // 浮层壳一并记上:列表之外还浮着自绘滚动条,按住它拖动不该把列表消解掉\n branches: () => [controlRef.value, positionerRef.value].filter(Boolean) as Element[],\n isModal: () => false,\n surfaces: () => [],\n })\n\n // 定位引擎由适配器注入,机器只经端口驱动\n service.refs.set('config', config!)\n service.refs.set('registerLayer', registerLayer)\n service.refs.set('position', createPositionEngine())\n service.refs.set('getAnchorEl', () => triggerRef.value)\n service.refs.set('getFloatingEl', () => positionerRef.value)\n service.refs.set('getContentEl', () => contentRef.value)\n }\n\n const api = computed(() => connectSelect(service, vueNormalize))\n // 退场闸门:收起从跟着 open 走,改成跟着 presence 走\n const visible = useOverlayExit({\n config,\n isOpen: () => api.value.open,\n contentRef,\n onPresence: presence => service.refs.set('presence', presence),\n })\n // 全局配置写了容器就用它,否则落到运行时那个单一浮层落点;没有 DOM 时才回到 body\n const portalTarget = computed<string | Element>(() => xhConfig.value.portalContainer?.() ?? config?.portalContainer() ?? 'body')\n\n return { visible, service, api, triggerRef, controlRef, positionerRef, contentRef, listRef, portalTarget }\n}\n"],"mappings":";;;;;;;;;;AAqCA,SAAgB,UACd,OACA,eACA,cACe;CACf,MAAM,WAAW,YAAY;CAC7B,MAAM,aAAa,IAAwB,IAAI;CAC/C,MAAM,aAAa,IAAwB,IAAI;CAC/C,MAAM,gBAAgB,IAAwB,IAAI;CAClD,MAAM,aAAa,IAAwB,IAAI;CAC/C,MAAM,UAAU,IAAwB,IAAI;CAE5C,MAAM,QAAQ,qBAAqB;CACnC,MAAM,QAAQ,YAAY,MAAM,KAAK;CACrC,MAAM,UAAU,WAAW,sBAAsB;EAAE,GAAG;EAAO;EAAe;CAAa,IAAI,KAAK;CAGlG,IAAI,SAA+B;CAEnC,IAAI,OAAO,aAAa,aAAa;EACnC,SAAS,oBAAoB;GAAE;GAAO,aAAa;EAAM,CAAC;EAG1D,MAAM,sBAA0D,OAAQ,cAAc,SAAS;GAC7F,MAAM;GACN,YAAY,WAAW;GAGvB,gBAAgB,CAAC,WAAW,OAAO,cAAc,KAAK,CAAC,CAAC,OAAO,OAAO;GACtE,eAAe;GACf,gBAAgB,CAAC;EACnB,CAAC;EAGD,QAAQ,KAAK,IAAI,UAAU,MAAO;EAClC,QAAQ,KAAK,IAAI,iBAAiB,aAAa;EAC/C,QAAQ,KAAK,IAAI,YAAY,qBAAqB,CAAC;EACnD,QAAQ,KAAK,IAAI,qBAAqB,WAAW,KAAK;EACtD,QAAQ,KAAK,IAAI,uBAAuB,cAAc,KAAK;EAC3D,QAAQ,KAAK,IAAI,sBAAsB,WAAW,KAAK;CACzD;CAEA,MAAM,MAAM,eAAe,cAAc,SAAS,YAAY,CAAC;CAW/D,OAAO;EAAE,SATO,eAAe;GAC7B;GACA,cAAc,IAAI,MAAM;GACxB;GACA,aAAY,aAAY,QAAQ,KAAK,IAAI,YAAY,QAAQ;EAC/D,CAIe;EAAG;EAAS;EAAK;EAAY;EAAY;EAAe;EAAY;EAAS,cAFvE,eAAiC,SAAS,MAAM,kBAAkB,KAAK,QAAQ,gBAAgB,KAAK,MAElB;CAAE;AAC3G"}
1
+ {"version":3,"file":"use-select.js","names":[],"sources":["../../../src/components/select/use-select.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 use select 相关实现。\n\nimport type { Cleanup, Layer, RuntimeConfig, Service } from '@xihan-ui/core'\nimport type { SelectApi, SelectSchema } from '@xihan-ui/headless'\nimport type { ComputedRef, Ref } from 'vue'\nimport { createRuntimeConfig, createScope } from '@xihan-ui/core'\nimport { connectSelect, selectMachine } from '@xihan-ui/headless'\nimport { createPositionEngine } from '@xihan-ui/position'\nimport { computed, ref } from 'vue'\nimport { useXhConfig } from '../../config/config'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { useOverlayExit } from '../../runtime/use-overlay-exit'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface SelectContext {\n /** 状态机实例,供部件上报 DOM 侧的事实(如条目卸载带走了焦点)。 */\n service: Service<SelectSchema>\n api: ComputedRef<SelectApi>\n triggerRef: Ref<HTMLElement | null>\n /** 盒:触发器与清空按钮在里面并排,记为浮层分支 */\n controlRef: Ref<HTMLElement | null>\n positionerRef: Ref<HTMLElement | null>\n contentRef: Ref<HTMLElement | null>\n /** 列表框本体:真正在滚动的层,自绘条挂在 positioner 上跟着它走 */\n listRef: Ref<HTMLElement | null>\n /** 当前是否应当渲染:退场动画播完之前仍为真。 */\n visible: Ref<boolean>\n /** 浮层迁移到的位置:全局配置的容器 > 运行时的浮层落点 > body。 */\n portalTarget: ComputedRef<string | Element>\n}\n\nexport function useSelect(\n props: SelectSchema['props'],\n onValueChange?: SelectSchema['props']['onValueChange'],\n onOpenChange?: SelectSchema['props']['onOpenChange'],\n): SelectContext {\n const xhConfig = useXhConfig()\n const triggerRef = ref<HTMLElement | null>(null)\n const controlRef = ref<HTMLElement | null>(null)\n const positionerRef = ref<HTMLElement | null>(null)\n const contentRef = ref<HTMLElement | null>(null)\n const listRef = ref<HTMLElement | null>(null)\n\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n const service = useMachine(selectMachine, () => ({ ...props, onValueChange, onOpenChange }), scope)\n\n // 服务端没有 DOM、也就没有退场:config 传 null 时闸门退化成「跟着展开态」\n let config: RuntimeConfig | null = null\n\n if (typeof document !== 'undefined') {\n config = createRuntimeConfig({ scope, idGenerator: idGen })\n\n // 只提供注册函数,入栈出栈由机器的 trackLayer 效应按展开态驱动\n const registerLayer = (): { layer: Layer, dispose: Cleanup } => config!.layerRegistry.register({\n kind: 'popover',\n node: () => contentRef.value,\n // 整个盒记为本层分支:点触发器或清空钮算层内交互,开合交给 trigger 自己切换;\n // 浮层壳一并记上:列表之外还浮着自绘滚动条,按住它拖动不该把列表消解掉\n branches: () => [controlRef.value, positionerRef.value].filter(Boolean) as Element[],\n isModal: () => false,\n surfaces: () => [],\n })\n\n // 定位引擎由适配器注入,机器只经端口驱动\n service.refs.set('config', config!)\n service.refs.set('registerLayer', registerLayer)\n service.refs.set('position', createPositionEngine())\n // 锚点是字段盒:列表面板与盒子同宽、左缘对齐;作者没写 control 时退回触发器\n service.refs.set('getAnchorEl', () => controlRef.value ?? triggerRef.value)\n service.refs.set('getTriggerEl', () => triggerRef.value)\n service.refs.set('getFloatingEl', () => positionerRef.value)\n service.refs.set('getContentEl', () => contentRef.value)\n }\n\n const api = computed(() => connectSelect(service, vueNormalize))\n // 退场闸门:收起从跟着 open 走,改成跟着 presence 走\n const visible = useOverlayExit({\n config,\n isOpen: () => api.value.open,\n contentRef,\n onPresence: presence => service.refs.set('presence', presence),\n })\n // 全局配置写了容器就用它,否则落到运行时那个单一浮层落点;没有 DOM 时才回到 body\n const portalTarget = computed<string | Element>(() => xhConfig.value.portalContainer?.() ?? config?.portalContainer() ?? 'body')\n\n return { visible, service, api, triggerRef, controlRef, positionerRef, contentRef, listRef, portalTarget }\n}\n"],"mappings":";;;;;;;;;;AAqCA,SAAgB,UACd,OACA,eACA,cACe;CACf,MAAM,WAAW,YAAY;CAC7B,MAAM,aAAa,IAAwB,IAAI;CAC/C,MAAM,aAAa,IAAwB,IAAI;CAC/C,MAAM,gBAAgB,IAAwB,IAAI;CAClD,MAAM,aAAa,IAAwB,IAAI;CAC/C,MAAM,UAAU,IAAwB,IAAI;CAE5C,MAAM,QAAQ,qBAAqB;CACnC,MAAM,QAAQ,YAAY,MAAM,KAAK;CACrC,MAAM,UAAU,WAAW,sBAAsB;EAAE,GAAG;EAAO;EAAe;CAAa,IAAI,KAAK;CAGlG,IAAI,SAA+B;CAEnC,IAAI,OAAO,aAAa,aAAa;EACnC,SAAS,oBAAoB;GAAE;GAAO,aAAa;EAAM,CAAC;EAG1D,MAAM,sBAA0D,OAAQ,cAAc,SAAS;GAC7F,MAAM;GACN,YAAY,WAAW;GAGvB,gBAAgB,CAAC,WAAW,OAAO,cAAc,KAAK,CAAC,CAAC,OAAO,OAAO;GACtE,eAAe;GACf,gBAAgB,CAAC;EACnB,CAAC;EAGD,QAAQ,KAAK,IAAI,UAAU,MAAO;EAClC,QAAQ,KAAK,IAAI,iBAAiB,aAAa;EAC/C,QAAQ,KAAK,IAAI,YAAY,qBAAqB,CAAC;EAEnD,QAAQ,KAAK,IAAI,qBAAqB,WAAW,SAAS,WAAW,KAAK;EAC1E,QAAQ,KAAK,IAAI,sBAAsB,WAAW,KAAK;EACvD,QAAQ,KAAK,IAAI,uBAAuB,cAAc,KAAK;EAC3D,QAAQ,KAAK,IAAI,sBAAsB,WAAW,KAAK;CACzD;CAEA,MAAM,MAAM,eAAe,cAAc,SAAS,YAAY,CAAC;CAW/D,OAAO;EAAE,SATO,eAAe;GAC7B;GACA,cAAc,IAAI,MAAM;GACxB;GACA,aAAY,aAAY,QAAQ,KAAK,IAAI,YAAY,QAAQ;EAC/D,CAIe;EAAG;EAAS;EAAK;EAAY;EAAY;EAAe;EAAY;EAAS,cAFvE,eAAiC,SAAS,MAAM,kBAAkB,KAAK,QAAQ,gBAAgB,KAAK,MAElB;CAAE;AAC3G"}
@@ -19,7 +19,23 @@ function useSideNavNodeContext() {
19
19
  if (!node) throw new Error("[xh] SideNav 分支部件必须用在 XhSideNavBranch 内");
20
20
  return node;
21
21
  }
22
+ const ITEM_KEY = Symbol.for("xh-side-nav-item");
23
+ function provideSideNavItem(report) {
24
+ provide(ITEM_KEY, report);
25
+ }
26
+ /** 链接没包在列表项里时取不到,即不报。 */
27
+ function useSideNavItemContext() {
28
+ return inject(ITEM_KEY, null);
29
+ }
30
+ const GROUP_KEY = Symbol.for("xh-side-nav-group");
31
+ function provideSideNavGroup(group) {
32
+ provide(GROUP_KEY, group);
33
+ }
34
+ /** 不在分组里的链接与分支取不到,不登记。 */
35
+ function useSideNavGroupContext() {
36
+ return inject(GROUP_KEY, null);
37
+ }
22
38
  //#endregion
23
- export { provideSideNav, provideSideNavNode, useSideNavContext, useSideNavNodeContext };
39
+ export { provideSideNav, provideSideNavGroup, provideSideNavItem, provideSideNavNode, useSideNavContext, useSideNavGroupContext, useSideNavItemContext, useSideNavNodeContext };
24
40
 
25
41
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/side-nav/context.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 context 相关实现。\n\nimport type { InjectionKey } from 'vue'\nimport type { SideNavContext } from './use-side-nav'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<SideNavContext> = Symbol.for('xh-side-nav')\n\nexport function provideSideNav(ctx: SideNavContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSideNavContext(): SideNavContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] SideNav 部件必须用在 XhSideNavRoot 内')\n return ctx\n}\n\n/** 分支上下文:子部件从中取所属分支的 value,不必逐个再声明。 */\nconst NODE_KEY: InjectionKey<{ value: string }> = Symbol.for('xh-side-nav-node')\n\nexport function provideSideNavNode(node: { value: string }): void {\n provide(NODE_KEY, node)\n}\n\nexport function useSideNavNodeContext(): { value: string } {\n const node = inject(NODE_KEY, null)\n if (!node)\n throw new Error('[xh] SideNav 分支部件必须用在 XhSideNavBranch 内')\n return node\n}\n"],"mappings":";;AAWA,MAAM,MAAoC,OAAO,IAAI,aAAa;AAElE,SAAgB,eAAe,KAA2B;CACxD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,oBAAoC;CAClD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,qCAAqC;CACvD,OAAO;AACT;;AAGA,MAAM,WAA4C,OAAO,IAAI,kBAAkB;AAE/E,SAAgB,mBAAmB,MAA+B;CAChE,QAAQ,UAAU,IAAI;AACxB;AAEA,SAAgB,wBAA2C;CACzD,MAAM,OAAO,OAAO,UAAU,IAAI;CAClC,IAAI,CAAC,MACH,MAAM,IAAI,MAAM,yCAAyC;CAC3D,OAAO;AACT"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/side-nav/context.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 context 相关实现。\n\nimport type { InjectionKey } from 'vue'\nimport type { SideNavContext } from './use-side-nav'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<SideNavContext> = Symbol.for('xh-side-nav')\n\nexport function provideSideNav(ctx: SideNavContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSideNavContext(): SideNavContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] SideNav 部件必须用在 XhSideNavRoot 内')\n return ctx\n}\n\n/** 分支上下文:子部件从中取所属分支的 value,不必逐个再声明。 */\nconst NODE_KEY: InjectionKey<{ value: string }> = Symbol.for('xh-side-nav-node')\n\nexport function provideSideNavNode(node: { value: string }): void {\n provide(NODE_KEY, node)\n}\n\nexport function useSideNavNodeContext(): { value: string } {\n const node = inject(NODE_KEY, null)\n if (!node)\n throw new Error('[xh] SideNav 分支部件必须用在 XhSideNavBranch 内')\n return node\n}\n\n/** 列表项接住它包着的那条链接报上来的身份:搜索时按它决定整行收不收。链接卸下时报 null。 */\ntype ReportItemValue = (value: string | null) => void\nconst ITEM_KEY: InjectionKey<ReportItemValue> = Symbol.for('xh-side-nav-item')\n\nexport function provideSideNavItem(report: ReportItemValue): void {\n provide(ITEM_KEY, report)\n}\n\n/** 链接没包在列表项里时取不到,即不报。 */\nexport function useSideNavItemContext(): ReportItemValue | null {\n return inject(ITEM_KEY, null)\n}\n\n/**\n * 分组上下文:value 是分组身份,group-list 据此与 group-label 配对;\n * join 收集成员:链接与分支挂上时登记自己的 value,返回撤销函数。\n */\nexport interface SideNavGroupContext {\n readonly value: string\n join: (value: string) => () => void\n}\nconst GROUP_KEY: InjectionKey<SideNavGroupContext> = Symbol.for('xh-side-nav-group')\n\nexport function provideSideNavGroup(group: SideNavGroupContext): void {\n provide(GROUP_KEY, group)\n}\n\n/** 不在分组里的链接与分支取不到,不登记。 */\nexport function useSideNavGroupContext(): SideNavGroupContext | null {\n return inject(GROUP_KEY, null)\n}\n"],"mappings":";;AAWA,MAAM,MAAoC,OAAO,IAAI,aAAa;AAElE,SAAgB,eAAe,KAA2B;CACxD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,oBAAoC;CAClD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,qCAAqC;CACvD,OAAO;AACT;;AAGA,MAAM,WAA4C,OAAO,IAAI,kBAAkB;AAE/E,SAAgB,mBAAmB,MAA+B;CAChE,QAAQ,UAAU,IAAI;AACxB;AAEA,SAAgB,wBAA2C;CACzD,MAAM,OAAO,OAAO,UAAU,IAAI;CAClC,IAAI,CAAC,MACH,MAAM,IAAI,MAAM,yCAAyC;CAC3D,OAAO;AACT;AAIA,MAAM,WAA0C,OAAO,IAAI,kBAAkB;AAE7E,SAAgB,mBAAmB,QAA+B;CAChE,QAAQ,UAAU,MAAM;AAC1B;;AAGA,SAAgB,wBAAgD;CAC9D,OAAO,OAAO,UAAU,IAAI;AAC9B;AAUA,MAAM,YAA+C,OAAO,IAAI,mBAAmB;AAEnF,SAAgB,oBAAoB,OAAkC;CACpE,QAAQ,WAAW,KAAK;AAC1B;;AAGA,SAAgB,yBAAqD;CACnE,OAAO,OAAO,WAAW,IAAI;AAC/B"}
@@ -1,11 +1,11 @@
1
1
  import { PayloadOf } from "../../runtime/payload.js";
2
2
  import { PropType, SlotsType, VNode } from "vue";
3
3
  import { Size, Tone } from "@xihan-ui/core";
4
- import { SideNavApi, SideNavNode, SideNavSchema } from "@xihan-ui/headless";
4
+ import { SideNavApi, SideNavFilter, SideNavNode, SideNavSchema } from "@xihan-ui/headless";
5
5
  //#region src/components/side-nav/side-nav.d.ts
6
6
  type SideNavProps = SideNavSchema['props'];
7
- /** 默认插槽的载荷:选中项、展开集合、折叠与浮层状态、逐节点的状态判定,以及选中、展开、折叠、弹出等命令。 */
8
- type SideNavRootSlotProps = Pick<SideNavApi, 'value' | 'expandedValue' | 'collapsed' | 'popoutValue' | 'isSelected' | 'isExpanded' | 'isActiveBranch' | 'select' | 'setValue' | 'setExpandedValue' | 'expand' | 'collapse' | 'openPopout' | 'closePopout'>;
7
+ /** 默认插槽的载荷:选中项、展开集合、折叠与浮层状态、检索词与搜索状态、逐节点的状态判定,以及选中、展开、折叠、弹出、改写检索词等命令。 */
8
+ type SideNavRootSlotProps = Pick<SideNavApi, 'value' | 'expandedValue' | 'collapsed' | 'popoutValue' | 'isSelected' | 'isExpanded' | 'isActiveBranch' | 'select' | 'setValue' | 'setExpandedValue' | 'expand' | 'collapse' | 'openPopout' | 'closePopout' | 'inputValue' | 'setInputValue' | 'searching'>;
9
9
  declare const XhSideNavRoot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
10
10
  collection: {
11
11
  type: PropType<SideNavNode[]>;
@@ -45,6 +45,10 @@ declare const XhSideNavRoot: import("vue").DefineComponent<import("vue").Extract
45
45
  size: {
46
46
  type: PropType<Size>;
47
47
  };
48
+ /** 搜索框的匹配规则;缺省为标签(缺省退回 value)大小写不敏感包含。 */
49
+ filter: {
50
+ type: PropType<SideNavFilter>;
51
+ };
48
52
  translations: {
49
53
  type: PropType<SideNavProps["translations"]>;
50
54
  };
@@ -94,6 +98,10 @@ declare const XhSideNavRoot: import("vue").DefineComponent<import("vue").Extract
94
98
  size: {
95
99
  type: PropType<Size>;
96
100
  };
101
+ /** 搜索框的匹配规则;缺省为标签(缺省退回 value)大小写不敏感包含。 */
102
+ filter: {
103
+ type: PropType<SideNavFilter>;
104
+ };
97
105
  translations: {
98
106
  type: PropType<SideNavProps["translations"]>;
99
107
  };
@@ -114,11 +122,19 @@ declare const XhSideNavRoot: import("vue").DefineComponent<import("vue").Extract
114
122
  declare const XhSideNavList: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
115
123
  [key: string]: any;
116
124
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
125
+ /** 搜索框:放在 list 之前,输入即按标签过滤导航树。 */
126
+ declare const XhSideNavInput: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
127
+ [key: string]: any;
128
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
129
+ /** 搜索一条都没命中时露面的占位;没写内容时显示 translations.noMatch。 */
130
+ declare const XhSideNavEmpty: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
131
+ [key: string]: any;
132
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
117
133
  declare const XhSideNavItem: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
118
134
  [key: string]: any;
119
135
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
120
136
  declare const XhSideNavGroup: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
121
- /** 分组身份,与 group-label 依靠它配对。 */
137
+ /** 分组身份,group-label 与 group-list 依靠它配对。 */
122
138
  value: {
123
139
  type: StringConstructor;
124
140
  required: true;
@@ -126,7 +142,7 @@ declare const XhSideNavGroup: import("vue").DefineComponent<import("vue").Extrac
126
142
  }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
127
143
  [key: string]: any;
128
144
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
129
- /** 分组身份,与 group-label 依靠它配对。 */
145
+ /** 分组身份,group-label 与 group-list 依靠它配对。 */
130
146
  value: {
131
147
  type: StringConstructor;
132
148
  required: true;
@@ -145,6 +161,10 @@ declare const XhSideNavGroupLabel: import("vue").DefineComponent<import("vue").E
145
161
  required: true;
146
162
  };
147
163
  }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
164
+ /** 分组里的列表:组内的 item 与 branch 挂在这里,以组标题命名;分组身份取自所在的 XhSideNavGroup。 */
165
+ declare const XhSideNavGroupList: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
166
+ [key: string]: any;
167
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
148
168
  declare const XhSideNavBranch: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
149
169
  value: {
150
170
  type: StringConstructor;
@@ -180,6 +200,24 @@ declare const XhSideNavBranchContent: import("vue").DefineComponent<import("vue"
180
200
  type: PropType<Element>;
181
201
  };
182
202
  }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
203
+ /**
204
+ * 图标栏的名称提示:落成图标栏后,只剩图标的行悬停或聚焦时在行尾一侧显示行的标签。
205
+ * 本体是一台内嵌的 Tooltip 机器(延时、接替窗口、提示组与定位全随 Tooltip),开合受控于侧栏;
206
+ * 放一个即可,定位层搬到浮层落点,文字取 collection 里的标签,对读屏隐藏。
207
+ */
208
+ declare const XhSideNavTooltip: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
209
+ /** 名称提示的 Portal 容器;优先于应用级配置。 */
210
+ container: {
211
+ type: PropType<Element>;
212
+ };
213
+ }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
214
+ [key: string]: any;
215
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
216
+ /** 名称提示的 Portal 容器;优先于应用级配置。 */
217
+ container: {
218
+ type: PropType<Element>;
219
+ };
220
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
183
221
  declare const XhSideNavLinkText: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
184
222
  [key: string]: any;
185
223
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -188,6 +226,8 @@ declare const XhSideNavLink: import("vue").DefineComponent<import("vue").Extract
188
226
  type: StringConstructor;
189
227
  required: true;
190
228
  };
229
+ /** 借用作者的子节点(如路由链接)作为链接,不再渲染自己的 `<a>`;子节点须恰好一个。 */
230
+ asChild: BooleanConstructor;
191
231
  }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
192
232
  [key: string]: any;
193
233
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
@@ -195,7 +235,11 @@ declare const XhSideNavLink: import("vue").DefineComponent<import("vue").Extract
195
235
  type: StringConstructor;
196
236
  required: true;
197
237
  };
198
- }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
238
+ /** 借用作者的子节点(如路由链接)作为链接,不再渲染自己的 `<a>`;子节点须恰好一个。 */
239
+ asChild: BooleanConstructor;
240
+ }>> & Readonly<{}>, {
241
+ asChild: boolean;
242
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
199
243
  //#endregion
200
- export { SideNavRootSlotProps, XhSideNavBranch, XhSideNavBranchContent, XhSideNavBranchIndicator, XhSideNavBranchText, XhSideNavBranchTrigger, XhSideNavGroup, XhSideNavGroupLabel, XhSideNavItem, XhSideNavLink, XhSideNavLinkText, XhSideNavList, XhSideNavRoot };
244
+ export { SideNavRootSlotProps, XhSideNavBranch, XhSideNavBranchContent, XhSideNavBranchIndicator, XhSideNavBranchText, XhSideNavBranchTrigger, XhSideNavEmpty, XhSideNavGroup, XhSideNavGroupLabel, XhSideNavGroupList, XhSideNavInput, XhSideNavItem, XhSideNavLink, XhSideNavLinkText, XhSideNavList, XhSideNavRoot, XhSideNavTooltip };
201
245
  //# sourceMappingURL=side-nav.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"side-nav.d.ts","names":[],"sources":["../../../src/components/side-nav/side-nav.ts"],"mappings":";;;;;KAmBK,eAAe;;KAGR,uBAAuB,KACjC;cAiBW,6BAAa,8BAAA;;IAIO,MAAA,SAAS;;;IACb,MAAA;;;IACO,MAAA;;;IACA,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;IAMhB,MAAA,SAAS;;;IACR,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACD,MAAA,SAAS;;;;;EAId,iBAAA,UAAA,UAAU;EACZ,iBAAA,QAAA,UAAU;EACC,0BAAA,UAAA,UAAU;EACb,yBAAA,QAAA,UAAU;;;IApBd,MAAA,SAAS;;;IACb,MAAA;;;IACO,MAAA;;;IACA,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;IAMhB,MAAA,SAAS;;;IACR,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACD,MAAA,SAAS;;;;;;;;;;;;;;EAU/B,WAAC,OAAO,yBAAyB;kCAgC7C;cAEW,6BAAa,0BAAA,oBAAA,4BAAA;;8BAMxB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAGW,6BAAa,0BAAA,oBAAA,4BAAA;;8BAMxB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,8BAAc,8BAAA;;;;;;;;;;;;;;MAUzB,oDAAA;cAEW,mCAAmB,8BAAA;;;;;;;;;;;;MAS9B,oDAAA;cAEW,+BAAe,8BAAA;;;;;;;;;;;;MAU1B,oDAAA;cAEW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAOjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAM9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAOnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,sCAAsB,8BAAA;;;IAIF,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;MAmDxC,oDAAA;cAEW,iCAAiB,0BAAA,oBAAA,4BAAA;;8BAM5B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6BAAa,8BAAA;;;;;;;;;;;;MASxB,oDAAA"}
1
+ {"version":3,"file":"side-nav.d.ts","names":[],"sources":["../../../src/components/side-nav/side-nav.ts"],"mappings":";;;;;KA4BK,eAAe;;KAGR,uBAAuB,KACjC;cAoBW,6BAAa,8BAAA;;IAIO,MAAA,SAAS;;;IACb,MAAA;;;IACO,MAAA;;;IACA,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;IAMhB,MAAA,SAAS;;;IACR,MAAA,SAAS;;;IACT,MAAA,SAAS;;;;IAEL,MAAA,SAAS;;;IACL,MAAA,SAAS;;;;;EAId,iBAAA,UAAA,UAAU;EACZ,iBAAA,QAAA,UAAU;EACC,0BAAA,UAAA,UAAU;EACb,yBAAA,QAAA,UAAU;;;IAtBd,MAAA,SAAS;;;IACb,MAAA;;;IACO,MAAA;;;IACA,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;IAMhB,MAAA,SAAS;;;IACR,MAAA,SAAS;;;IACT,MAAA,SAAS;;;;IAEL,MAAA,SAAS;;;IACL,MAAA,SAAS;;;;;;;;;;;;;;EAU/B,WAAC,OAAO,yBAAyB;kCAmC7C;cAEW,6BAAa,0BAAA,oBAAA,4BAAA;;8BAMxB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,8BAAc,0BAAA,oBAAA,4BAAA;;8BAMzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,8BAAc,0BAAA,oBAAA,4BAAA;;8BAMzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAYW,6BAAa,0BAAA,oBAAA,4BAAA;;8BAUxB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAGW,8BAAc,8BAAA;;;;;;;;;;;;;;MAyBzB,oDAAA;cAEW,mCAAmB,8BAAA;;;;;;;;;;;;MAS9B,oDAAA;;cAGW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAS7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,+BAAe,8BAAA;;;;;;;;;;;;MAW1B,oDAAA;cAEW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAOjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAM9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAOnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,sCAAsB,8BAAA;;;IAIF,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;MAmDxC,oDAAA;;;;;;cAOW,gCAAgB,8BAAA;;;IAII,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;MAqDxC,oDAAA;cAEW,iCAAiB,0BAAA,oBAAA,4BAAA;;8BAM5B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6BAAa,8BAAA;;;;;;;;;;;;;;;;;;qCA0BxB"}
@@ -1,9 +1,18 @@
1
1
  import { useOverlayExit } from "../../runtime/use-overlay-exit.js";
2
+ import { vueNormalize } from "../../runtime/normalize-props.js";
2
3
  import { withXhConfig } from "../../config/config.js";
4
+ import { useMachine } from "../../runtime/use-machine.js";
5
+ import { createVueIdGenerator } from "../../runtime/vue-id.js";
6
+ import { mergePartProps } from "../../runtime/merge-props.js";
7
+ import { mergeIntoChild } from "../../runtime/as-child.js";
3
8
  import { XhPortal } from "../../runtime/portal.js";
4
- import { provideSideNav, provideSideNavNode, useSideNavContext, useSideNavNodeContext } from "./context.js";
9
+ import { provideSideNav, provideSideNavGroup, provideSideNavItem, provideSideNavNode, useSideNavContext, useSideNavGroupContext, useSideNavItemContext, useSideNavNodeContext } from "./context.js";
10
+ import { useTooltipGroup } from "../tooltip/context.js";
5
11
  import { useSideNav } from "./use-side-nav.js";
6
- import { defineComponent, h, nextTick, onMounted, ref } from "vue";
12
+ import { computed, defineComponent, h, nextTick, onBeforeUnmount, onMounted, ref, shallowRef, watch } from "vue";
13
+ import { createScope } from "@xihan-ui/core";
14
+ import { connectSideNav, findSideNavRowEl, sideNavTooltipProps, tooltipMachine } from "@xihan-ui/headless";
15
+ import { createPositionEngine } from "@xihan-ui/position";
7
16
  //#region src/components/side-nav/side-nav.ts
8
17
  const XhSideNavRoot = defineComponent({
9
18
  name: "XhSideNavRoot",
@@ -30,6 +39,8 @@ const XhSideNavRoot = defineComponent({
30
39
  dir: { type: String },
31
40
  tone: { type: String },
32
41
  size: { type: String },
42
+ /** 搜索框的匹配规则;缺省为标签(缺省退回 value)大小写不敏感包含。 */
43
+ filter: { type: Function },
33
44
  translations: { type: Object }
34
45
  },
35
46
  emits: {
@@ -65,7 +76,10 @@ const XhSideNavRoot = defineComponent({
65
76
  expand: ctx.api.value.expand,
66
77
  collapse: ctx.api.value.collapse,
67
78
  openPopout: ctx.api.value.openPopout,
68
- closePopout: ctx.api.value.closePopout
79
+ closePopout: ctx.api.value.closePopout,
80
+ inputValue: ctx.api.value.inputValue,
81
+ setInputValue: ctx.api.value.setInputValue,
82
+ searching: ctx.api.value.searching
69
83
  }));
70
84
  }
71
85
  });
@@ -76,24 +90,66 @@ const XhSideNavList = defineComponent({
76
90
  return () => h("ul", ctx.api.value.getListProps(), slots.default?.());
77
91
  }
78
92
  });
93
+ /** 搜索框:放在 list 之前,输入即按标签过滤导航树。 */
94
+ const XhSideNavInput = defineComponent({
95
+ name: "XhSideNavInput",
96
+ setup() {
97
+ const ctx = useSideNavContext();
98
+ return () => h("input", ctx.api.value.getInputProps());
99
+ }
100
+ });
101
+ /** 搜索一条都没命中时露面的占位;没写内容时显示 translations.noMatch。 */
102
+ const XhSideNavEmpty = defineComponent({
103
+ name: "XhSideNavEmpty",
104
+ setup(_, { slots }) {
105
+ const ctx = useSideNavContext();
106
+ return () => h("div", ctx.api.value.getEmptyProps(), slots.default?.() ?? ctx.api.value.translations.noMatch);
107
+ }
108
+ });
109
+ /** 把一个值登记进所在分组,值变了换一条,卸下时撤销。登记写的是分组的成员表,回调不追踪它,免得自己触发自己。 */
110
+ function joinGroup(value) {
111
+ const group = useSideNavGroupContext();
112
+ if (!group) return;
113
+ watch(value, (next, _, onCleanup) => onCleanup(group.join(next)), { immediate: true });
114
+ }
79
115
  const XhSideNavItem = defineComponent({
80
116
  name: "XhSideNavItem",
81
117
  setup(_, { slots }) {
82
118
  const ctx = useSideNavContext();
83
- return () => h("li", ctx.api.value.getItemProps(), slots.default?.());
119
+ const linkValue = shallowRef(null);
120
+ provideSideNavItem((value) => {
121
+ linkValue.value = value;
122
+ });
123
+ return () => h("li", ctx.api.value.getItemProps({ value: linkValue.value ?? void 0 }), slots.default?.());
84
124
  }
85
125
  });
86
126
  const XhSideNavGroup = defineComponent({
87
127
  name: "XhSideNavGroup",
88
128
  props: {
89
- /** 分组身份,与 group-label 依靠它配对。 */
129
+ /** 分组身份,group-label 与 group-list 依靠它配对。 */
90
130
  value: {
91
131
  type: String,
92
132
  required: true
93
133
  } },
94
134
  setup(props, { slots }) {
95
135
  const ctx = useSideNavContext();
96
- return () => h("li", ctx.api.value.getGroupProps({ value: props.value }), slots.default?.());
136
+ const members = shallowRef([]);
137
+ provideSideNavGroup({
138
+ get value() {
139
+ return props.value;
140
+ },
141
+ join: (value) => {
142
+ members.value = [...members.value, value];
143
+ return () => {
144
+ const at = members.value.indexOf(value);
145
+ if (at !== -1) members.value = members.value.filter((_, i) => i !== at);
146
+ };
147
+ }
148
+ });
149
+ return () => h("li", ctx.api.value.getGroupProps({
150
+ value: props.value,
151
+ members: members.value
152
+ }), slots.default?.());
97
153
  }
98
154
  });
99
155
  const XhSideNavGroupLabel = defineComponent({
@@ -107,6 +163,16 @@ const XhSideNavGroupLabel = defineComponent({
107
163
  return () => h("div", ctx.api.value.getGroupLabelProps({ value: props.value }), slots.default?.());
108
164
  }
109
165
  });
166
+ /** 分组里的列表:组内的 item 与 branch 挂在这里,以组标题命名;分组身份取自所在的 XhSideNavGroup。 */
167
+ const XhSideNavGroupList = defineComponent({
168
+ name: "XhSideNavGroupList",
169
+ setup(_, { slots }) {
170
+ const ctx = useSideNavContext();
171
+ const group = useSideNavGroupContext();
172
+ if (!group) throw new Error("[xh] XhSideNavGroupList 必须用在 XhSideNavGroup 内");
173
+ return () => h("ul", ctx.api.value.getGroupListProps({ value: group.value }), slots.default?.());
174
+ }
175
+ });
110
176
  const XhSideNavBranch = defineComponent({
111
177
  name: "XhSideNavBranch",
112
178
  props: { value: {
@@ -116,6 +182,7 @@ const XhSideNavBranch = defineComponent({
116
182
  setup(props, { slots }) {
117
183
  const ctx = useSideNavContext();
118
184
  provideSideNavNode(props);
185
+ joinGroup(() => props.value);
119
186
  return () => h("li", ctx.api.value.getBranchProps({ value: props.value }), slots.default?.());
120
187
  }
121
188
  });
@@ -201,6 +268,62 @@ container: { type: Object } },
201
268
  };
202
269
  }
203
270
  });
271
+ /**
272
+ * 图标栏的名称提示:落成图标栏后,只剩图标的行悬停或聚焦时在行尾一侧显示行的标签。
273
+ * 本体是一台内嵌的 Tooltip 机器(延时、接替窗口、提示组与定位全随 Tooltip),开合受控于侧栏;
274
+ * 放一个即可,定位层搬到浮层落点,文字取 collection 里的标签,对读屏隐藏。
275
+ */
276
+ const XhSideNavTooltip = defineComponent({
277
+ name: "XhSideNavTooltip",
278
+ props: {
279
+ /** 名称提示的 Portal 容器;优先于应用级配置。 */
280
+ container: { type: Object } },
281
+ setup(props) {
282
+ const ctx = useSideNavContext();
283
+ const positionerRef = ref(null);
284
+ const contentRef = ref(null);
285
+ const hint = useMachine(tooltipMachine, () => sideNavTooltipProps(ctx.service), createScope(null, createVueIdGenerator()));
286
+ const anchor = () => findSideNavRowEl(ctx.service, ctx.service.context.get("tooltipValue"));
287
+ const config = ctx.config;
288
+ if (config) {
289
+ hint.refs.set("config", config);
290
+ hint.refs.set("registerLayer", () => config.layerRegistry.register({
291
+ kind: "inline",
292
+ node: () => contentRef.value,
293
+ branches: () => [anchor()].filter(Boolean),
294
+ isModal: () => false,
295
+ surfaces: () => []
296
+ }));
297
+ hint.refs.set("position", createPositionEngine());
298
+ }
299
+ hint.refs.set("getAnchorEl", anchor);
300
+ hint.refs.set("getFloatingEl", () => positionerRef.value);
301
+ hint.refs.set("group", useTooltipGroup());
302
+ const visible = useOverlayExit({
303
+ config,
304
+ isOpen: () => hint.state.matches("visible"),
305
+ contentRef,
306
+ onPresence: (presence) => hint.refs.set("presence", presence)
307
+ });
308
+ ctx.tooltip.value = hint;
309
+ onBeforeUnmount(() => {
310
+ if (ctx.tooltip.value === hint) ctx.tooltip.value = null;
311
+ });
312
+ const api = computed(() => connectSideNav(ctx.service, vueNormalize, hint));
313
+ return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value }, () => [h("div", {
314
+ ...api.value.getTooltipPositionerProps(),
315
+ ref: (el) => {
316
+ positionerRef.value = el;
317
+ }
318
+ }, [h("div", {
319
+ ...api.value.getTooltipContentProps(),
320
+ style: visible.value ? void 0 : { display: "none" },
321
+ ref: (el) => {
322
+ contentRef.value = el;
323
+ }
324
+ }, api.value.tooltipText)])]);
325
+ }
326
+ });
204
327
  const XhSideNavLinkText = defineComponent({
205
328
  name: "XhSideNavLinkText",
206
329
  setup(_, { slots }) {
@@ -210,16 +333,32 @@ const XhSideNavLinkText = defineComponent({
210
333
  });
211
334
  const XhSideNavLink = defineComponent({
212
335
  name: "XhSideNavLink",
213
- props: { value: {
214
- type: String,
215
- required: true
216
- } },
217
- setup(props, { slots }) {
336
+ inheritAttrs: false,
337
+ props: {
338
+ value: {
339
+ type: String,
340
+ required: true
341
+ },
342
+ /** 借用作者的子节点(如路由链接)作为链接,不再渲染自己的 `<a>`;子节点须恰好一个。 */
343
+ asChild: Boolean
344
+ },
345
+ setup(props, { slots, attrs }) {
218
346
  const ctx = useSideNavContext();
219
- return () => h("a", ctx.api.value.getLinkProps({ value: props.value }), slots.default?.());
347
+ const reportItem = useSideNavItemContext();
348
+ if (reportItem) {
349
+ watch(() => props.value, (next) => reportItem(next), { immediate: true });
350
+ onBeforeUnmount(() => reportItem(null));
351
+ }
352
+ joinGroup(() => props.value);
353
+ return () => {
354
+ const part = mergePartProps(ctx.api.value.getLinkProps({ value: props.value }), attrs);
355
+ const children = slots.default?.();
356
+ if (props.asChild) return mergeIntoChild(children, part, "side-nav", { applyAnatomy: true });
357
+ return h("a", part, children);
358
+ };
220
359
  }
221
360
  });
222
361
  //#endregion
223
- export { XhSideNavBranch, XhSideNavBranchContent, XhSideNavBranchIndicator, XhSideNavBranchText, XhSideNavBranchTrigger, XhSideNavGroup, XhSideNavGroupLabel, XhSideNavItem, XhSideNavLink, XhSideNavLinkText, XhSideNavList, XhSideNavRoot };
362
+ export { XhSideNavBranch, XhSideNavBranchContent, XhSideNavBranchIndicator, XhSideNavBranchText, XhSideNavBranchTrigger, XhSideNavEmpty, XhSideNavGroup, XhSideNavGroupLabel, XhSideNavGroupList, XhSideNavInput, XhSideNavItem, XhSideNavLink, XhSideNavLinkText, XhSideNavList, XhSideNavRoot, XhSideNavTooltip };
224
363
 
225
364
  //# sourceMappingURL=side-nav.js.map