@xihan-ui/vue 2.0.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 (669) hide show
  1. package/CHANGELOG.md +1593 -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/avatar-group/avatar-group.d.ts.map +1 -1
  30. package/dist/components/avatar-group/avatar-group.js +2 -1
  31. package/dist/components/avatar-group/avatar-group.js.map +1 -1
  32. package/dist/components/back-top/use-back-top.d.ts.map +1 -1
  33. package/dist/components/back-top/use-back-top.js +3 -1
  34. package/dist/components/back-top/use-back-top.js.map +1 -1
  35. package/dist/components/badge/badge.d.ts +22 -0
  36. package/dist/components/badge/badge.d.ts.map +1 -1
  37. package/dist/components/badge/badge.js +11 -2
  38. package/dist/components/badge/badge.js.map +1 -1
  39. package/dist/components/breadcrumb/breadcrumb.d.ts +11 -1
  40. package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -1
  41. package/dist/components/breadcrumb/breadcrumb.js +28 -9
  42. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  43. package/dist/components/calendar-picker/calendar-picker.d.ts +16 -0
  44. package/dist/components/calendar-picker/calendar-picker.d.ts.map +1 -1
  45. package/dist/components/calendar-picker/calendar-picker.js +4 -0
  46. package/dist/components/calendar-picker/calendar-picker.js.map +1 -1
  47. package/dist/components/calendar-range-picker/calendar-range-picker.d.ts +16 -0
  48. package/dist/components/calendar-range-picker/calendar-range-picker.d.ts.map +1 -1
  49. package/dist/components/calendar-range-picker/calendar-range-picker.js +4 -0
  50. package/dist/components/calendar-range-picker/calendar-range-picker.js.map +1 -1
  51. package/dist/components/card/card.d.ts +37 -2
  52. package/dist/components/card/card.d.ts.map +1 -1
  53. package/dist/components/card/card.js +42 -3
  54. package/dist/components/card/card.js.map +1 -1
  55. package/dist/components/carousel/carousel.d.ts +7 -1
  56. package/dist/components/carousel/carousel.d.ts.map +1 -1
  57. package/dist/components/carousel/carousel.js +1 -0
  58. package/dist/components/carousel/carousel.js.map +1 -1
  59. package/dist/components/carousel/use-carousel.d.ts.map +1 -1
  60. package/dist/components/carousel/use-carousel.js +3 -1
  61. package/dist/components/carousel/use-carousel.js.map +1 -1
  62. package/dist/components/cartesian-chart/cartesian-chart.d.ts +262 -0
  63. package/dist/components/cartesian-chart/cartesian-chart.d.ts.map +1 -0
  64. package/dist/components/cartesian-chart/cartesian-chart.js +293 -0
  65. package/dist/components/cartesian-chart/cartesian-chart.js.map +1 -0
  66. package/dist/components/cartesian-chart/context.js +15 -0
  67. package/dist/components/cartesian-chart/context.js.map +1 -0
  68. package/dist/components/cartesian-chart/use-cartesian-chart.d.ts +21 -0
  69. package/dist/components/cartesian-chart/use-cartesian-chart.d.ts.map +1 -0
  70. package/dist/components/cartesian-chart/use-cartesian-chart.js +29 -0
  71. package/dist/components/cartesian-chart/use-cartesian-chart.js.map +1 -0
  72. package/dist/components/cascader/cascader.d.ts +72 -3
  73. package/dist/components/cascader/cascader.d.ts.map +1 -1
  74. package/dist/components/cascader/cascader.js +125 -7
  75. package/dist/components/cascader/cascader.js.map +1 -1
  76. package/dist/components/cascader/context.js +10 -1
  77. package/dist/components/cascader/context.js.map +1 -1
  78. package/dist/components/cascader/use-cascader.d.ts +2 -1
  79. package/dist/components/cascader/use-cascader.d.ts.map +1 -1
  80. package/dist/components/cascader/use-cascader.js +4 -1
  81. package/dist/components/cascader/use-cascader.js.map +1 -1
  82. package/dist/components/checkbox/checkbox.js +1 -1
  83. package/dist/components/checkbox-group/checkbox-group.d.ts +24 -3
  84. package/dist/components/checkbox-group/checkbox-group.d.ts.map +1 -1
  85. package/dist/components/checkbox-group/checkbox-group.js +20 -3
  86. package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
  87. package/dist/components/citation/citation.d.ts +211 -0
  88. package/dist/components/citation/citation.d.ts.map +1 -0
  89. package/dist/components/citation/citation.js +222 -0
  90. package/dist/components/citation/citation.js.map +1 -0
  91. package/dist/components/citation/context.d.ts +11 -0
  92. package/dist/components/citation/context.d.ts.map +1 -0
  93. package/dist/components/citation/context.js +24 -0
  94. package/dist/components/citation/context.js.map +1 -0
  95. package/dist/components/citation/use-citation.d.ts +19 -0
  96. package/dist/components/citation/use-citation.d.ts.map +1 -0
  97. package/dist/components/citation/use-citation.js +51 -0
  98. package/dist/components/citation/use-citation.js.map +1 -0
  99. package/dist/components/code-view/code-view.d.ts +21 -0
  100. package/dist/components/code-view/code-view.d.ts.map +1 -1
  101. package/dist/components/code-view/code-view.js +23 -4
  102. package/dist/components/code-view/code-view.js.map +1 -1
  103. package/dist/components/collapsible/collapsible.d.ts +6 -0
  104. package/dist/components/collapsible/collapsible.d.ts.map +1 -1
  105. package/dist/components/collapsible/collapsible.js +4 -2
  106. package/dist/components/collapsible/collapsible.js.map +1 -1
  107. package/dist/components/color-field/color-field.d.ts +2 -2
  108. package/dist/components/color-field/color-field.js +1 -1
  109. package/dist/components/color-field/color-field.js.map +1 -1
  110. package/dist/components/color-picker/color-picker.d.ts +41 -3
  111. package/dist/components/color-picker/color-picker.d.ts.map +1 -1
  112. package/dist/components/color-picker/color-picker.js +33 -4
  113. package/dist/components/color-picker/color-picker.js.map +1 -1
  114. package/dist/components/color-picker/use-color-picker.d.ts +3 -1
  115. package/dist/components/color-picker/use-color-picker.d.ts.map +1 -1
  116. package/dist/components/color-picker/use-color-picker.js +8 -2
  117. package/dist/components/color-picker/use-color-picker.js.map +1 -1
  118. package/dist/components/color-slider/color-slider.d.ts +2 -2
  119. package/dist/components/color-slider/color-slider.js +1 -1
  120. package/dist/components/color-slider/color-slider.js.map +1 -1
  121. package/dist/components/combobox/combobox.d.ts +66 -4
  122. package/dist/components/combobox/combobox.d.ts.map +1 -1
  123. package/dist/components/combobox/combobox.js +107 -6
  124. package/dist/components/combobox/combobox.js.map +1 -1
  125. package/dist/components/combobox/context.js +10 -1
  126. package/dist/components/combobox/context.js.map +1 -1
  127. package/dist/components/command/command.d.ts +23 -2
  128. package/dist/components/command/command.d.ts.map +1 -1
  129. package/dist/components/command/command.js +48 -6
  130. package/dist/components/command/command.js.map +1 -1
  131. package/dist/components/command/use-command.d.ts.map +1 -1
  132. package/dist/components/command/use-command.js +9 -30
  133. package/dist/components/command/use-command.js.map +1 -1
  134. package/dist/components/context-menu/context-menu.d.ts +63 -18
  135. package/dist/components/context-menu/context-menu.d.ts.map +1 -1
  136. package/dist/components/context-menu/context-menu.js +141 -57
  137. package/dist/components/context-menu/context-menu.js.map +1 -1
  138. package/dist/components/context-menu/context.js +1 -1
  139. package/dist/components/context-menu/context.js.map +1 -1
  140. package/dist/components/context-menu/use-context-menu.d.ts +1 -1
  141. package/dist/components/context-menu/use-context-menu.d.ts.map +1 -1
  142. package/dist/components/context-menu/use-context-menu.js +4 -2
  143. package/dist/components/context-menu/use-context-menu.js.map +1 -1
  144. package/dist/components/date-field/date-field.d.ts +9 -1
  145. package/dist/components/date-field/date-field.d.ts.map +1 -1
  146. package/dist/components/date-field/date-field.js +2 -0
  147. package/dist/components/date-field/date-field.js.map +1 -1
  148. package/dist/components/date-picker/date-picker.d.ts +41 -1
  149. package/dist/components/date-picker/date-picker.d.ts.map +1 -1
  150. package/dist/components/date-picker/date-picker.js +16 -3
  151. package/dist/components/date-picker/date-picker.js.map +1 -1
  152. package/dist/components/date-range-picker/date-range-picker.d.ts +77 -2
  153. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
  154. package/dist/components/date-range-picker/date-range-picker.js +102 -5
  155. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  156. package/dist/components/date-range-picker/use-date-range-picker.d.ts +1 -1
  157. package/dist/components/date-range-picker/use-date-range-picker.js.map +1 -1
  158. package/dist/components/descriptions/descriptions.d.ts +38 -7
  159. package/dist/components/descriptions/descriptions.d.ts.map +1 -1
  160. package/dist/components/descriptions/descriptions.js +38 -4
  161. package/dist/components/descriptions/descriptions.js.map +1 -1
  162. package/dist/components/dialog/dialog.d.ts +16 -1
  163. package/dist/components/dialog/dialog.d.ts.map +1 -1
  164. package/dist/components/dialog/dialog.js +15 -2
  165. package/dist/components/dialog/dialog.js.map +1 -1
  166. package/dist/components/dialog/use-dialog.d.ts.map +1 -1
  167. package/dist/components/dialog/use-dialog.js +9 -27
  168. package/dist/components/dialog/use-dialog.js.map +1 -1
  169. package/dist/components/diff-view/diff-view.d.ts +22 -2
  170. package/dist/components/diff-view/diff-view.d.ts.map +1 -1
  171. package/dist/components/diff-view/diff-view.js +37 -14
  172. package/dist/components/diff-view/diff-view.js.map +1 -1
  173. package/dist/components/diff-view/use-diff-view.d.ts +7 -2
  174. package/dist/components/diff-view/use-diff-view.d.ts.map +1 -1
  175. package/dist/components/diff-view/use-diff-view.js +12 -5
  176. package/dist/components/diff-view/use-diff-view.js.map +1 -1
  177. package/dist/components/drawer/drawer.d.ts +46 -1
  178. package/dist/components/drawer/drawer.d.ts.map +1 -1
  179. package/dist/components/drawer/drawer.js +28 -4
  180. package/dist/components/drawer/drawer.js.map +1 -1
  181. package/dist/components/drawer/use-drawer.d.ts +1 -1
  182. package/dist/components/drawer/use-drawer.d.ts.map +1 -1
  183. package/dist/components/drawer/use-drawer.js +12 -29
  184. package/dist/components/drawer/use-drawer.js.map +1 -1
  185. package/dist/components/empty-state/empty-state.js +4 -1
  186. package/dist/components/empty-state/empty-state.js.map +1 -1
  187. package/dist/components/empty-state/use-empty-state.js +12 -3
  188. package/dist/components/empty-state/use-empty-state.js.map +1 -1
  189. package/dist/components/field/field.js +1 -1
  190. package/dist/components/field-array/field-array.d.ts +1 -1
  191. package/dist/components/field-array/field-array.d.ts.map +1 -1
  192. package/dist/components/field-array/field-array.js +5 -1
  193. package/dist/components/field-array/field-array.js.map +1 -1
  194. package/dist/components/field-array/use-field-array.d.ts +3 -1
  195. package/dist/components/field-array/use-field-array.d.ts.map +1 -1
  196. package/dist/components/field-array/use-field-array.js +5 -2
  197. package/dist/components/field-array/use-field-array.js.map +1 -1
  198. package/dist/components/file-upload/file-upload.d.ts +24 -1
  199. package/dist/components/file-upload/file-upload.d.ts.map +1 -1
  200. package/dist/components/file-upload/file-upload.js +12 -2
  201. package/dist/components/file-upload/file-upload.js.map +1 -1
  202. package/dist/components/file-upload/use-file-upload.d.ts +1 -1
  203. package/dist/components/file-upload/use-file-upload.d.ts.map +1 -1
  204. package/dist/components/file-upload/use-file-upload.js.map +1 -1
  205. package/dist/components/flex/flex.d.ts +1 -1
  206. package/dist/components/flex/flex.d.ts.map +1 -1
  207. package/dist/components/flex/flex.js +4 -4
  208. package/dist/components/flex/flex.js.map +1 -1
  209. package/dist/components/form/form.d.ts +18 -4
  210. package/dist/components/form/form.d.ts.map +1 -1
  211. package/dist/components/form/form.js +21 -7
  212. package/dist/components/form/form.js.map +1 -1
  213. package/dist/components/form/use-form.d.ts +6 -0
  214. package/dist/components/form/use-form.d.ts.map +1 -1
  215. package/dist/components/form/use-form.js +4 -0
  216. package/dist/components/form/use-form.js.map +1 -1
  217. package/dist/components/funnel-chart/context.js +15 -0
  218. package/dist/components/funnel-chart/context.js.map +1 -0
  219. package/dist/components/funnel-chart/funnel-chart.d.ts +175 -0
  220. package/dist/components/funnel-chart/funnel-chart.d.ts.map +1 -0
  221. package/dist/components/funnel-chart/funnel-chart.js +188 -0
  222. package/dist/components/funnel-chart/funnel-chart.js.map +1 -0
  223. package/dist/components/funnel-chart/use-funnel-chart.d.ts +19 -0
  224. package/dist/components/funnel-chart/use-funnel-chart.d.ts.map +1 -0
  225. package/dist/components/funnel-chart/use-funnel-chart.js +26 -0
  226. package/dist/components/funnel-chart/use-funnel-chart.js.map +1 -0
  227. package/dist/components/graph-chart/context.js +15 -0
  228. package/dist/components/graph-chart/context.js.map +1 -0
  229. package/dist/components/graph-chart/graph-chart.d.ts +194 -0
  230. package/dist/components/graph-chart/graph-chart.d.ts.map +1 -0
  231. package/dist/components/graph-chart/graph-chart.js +219 -0
  232. package/dist/components/graph-chart/graph-chart.js.map +1 -0
  233. package/dist/components/graph-chart/use-graph-chart.d.ts +19 -0
  234. package/dist/components/graph-chart/use-graph-chart.d.ts.map +1 -0
  235. package/dist/components/graph-chart/use-graph-chart.js +26 -0
  236. package/dist/components/graph-chart/use-graph-chart.js.map +1 -0
  237. package/dist/components/grid/grid.d.ts +7 -0
  238. package/dist/components/grid/grid.d.ts.map +1 -1
  239. package/dist/components/grid/grid.js +7 -1
  240. package/dist/components/grid/grid.js.map +1 -1
  241. package/dist/components/grid-list/context.d.ts +9 -0
  242. package/dist/components/grid-list/context.d.ts.map +1 -0
  243. package/dist/components/grid-list/context.js +24 -0
  244. package/dist/components/grid-list/context.js.map +1 -0
  245. package/dist/components/grid-list/grid-list.d.ts +149 -0
  246. package/dist/components/grid-list/grid-list.d.ts.map +1 -0
  247. package/dist/components/grid-list/grid-list.js +118 -0
  248. package/dist/components/grid-list/grid-list.js.map +1 -0
  249. package/dist/components/grid-list/use-grid-list.d.ts +12 -0
  250. package/dist/components/grid-list/use-grid-list.d.ts.map +1 -0
  251. package/dist/components/grid-list/use-grid-list.js +20 -0
  252. package/dist/components/grid-list/use-grid-list.js.map +1 -0
  253. package/dist/components/heatmap/heatmap.d.ts +45 -4
  254. package/dist/components/heatmap/heatmap.d.ts.map +1 -1
  255. package/dist/components/heatmap/heatmap.js +40 -14
  256. package/dist/components/heatmap/heatmap.js.map +1 -1
  257. package/dist/components/heatmap/use-heatmap.d.ts +4 -2
  258. package/dist/components/heatmap/use-heatmap.d.ts.map +1 -1
  259. package/dist/components/heatmap/use-heatmap.js +8 -4
  260. package/dist/components/heatmap/use-heatmap.js.map +1 -1
  261. package/dist/components/hierarchy-chart/context.js +15 -0
  262. package/dist/components/hierarchy-chart/context.js.map +1 -0
  263. package/dist/components/hierarchy-chart/hierarchy-chart.d.ts +201 -0
  264. package/dist/components/hierarchy-chart/hierarchy-chart.d.ts.map +1 -0
  265. package/dist/components/hierarchy-chart/hierarchy-chart.js +228 -0
  266. package/dist/components/hierarchy-chart/hierarchy-chart.js.map +1 -0
  267. package/dist/components/hierarchy-chart/use-hierarchy-chart.d.ts +19 -0
  268. package/dist/components/hierarchy-chart/use-hierarchy-chart.d.ts.map +1 -0
  269. package/dist/components/hierarchy-chart/use-hierarchy-chart.js +26 -0
  270. package/dist/components/hierarchy-chart/use-hierarchy-chart.js.map +1 -0
  271. package/dist/components/hover-card/hover-card.js +2 -2
  272. package/dist/components/icon/icon.d.ts +7 -1
  273. package/dist/components/icon/icon.d.ts.map +1 -1
  274. package/dist/components/icon/icon.js +1 -0
  275. package/dist/components/icon/icon.js.map +1 -1
  276. package/dist/components/image/use-image.d.ts.map +1 -1
  277. package/dist/components/image/use-image.js +3 -1
  278. package/dist/components/image/use-image.js.map +1 -1
  279. package/dist/components/image-cropper/image-cropper.d.ts +35 -4
  280. package/dist/components/image-cropper/image-cropper.d.ts.map +1 -1
  281. package/dist/components/image-cropper/image-cropper.js +34 -5
  282. package/dist/components/image-cropper/image-cropper.js.map +1 -1
  283. package/dist/components/image-cropper/use-image-cropper.d.ts +3 -1
  284. package/dist/components/image-cropper/use-image-cropper.d.ts.map +1 -1
  285. package/dist/components/image-cropper/use-image-cropper.js +4 -1
  286. package/dist/components/image-cropper/use-image-cropper.js.map +1 -1
  287. package/dist/components/image-viewer/image-viewer.js +1 -1
  288. package/dist/components/image-viewer/use-image-viewer.d.ts.map +1 -1
  289. package/dist/components/image-viewer/use-image-viewer.js +9 -27
  290. package/dist/components/image-viewer/use-image-viewer.js.map +1 -1
  291. package/dist/components/infinite-scroll/infinite-scroll.d.ts +9 -1
  292. package/dist/components/infinite-scroll/infinite-scroll.d.ts.map +1 -1
  293. package/dist/components/infinite-scroll/infinite-scroll.js +2 -0
  294. package/dist/components/infinite-scroll/infinite-scroll.js.map +1 -1
  295. package/dist/components/input-group/input-group.d.ts.map +1 -1
  296. package/dist/components/input-group/input-group.js +2 -1
  297. package/dist/components/input-group/input-group.js.map +1 -1
  298. package/dist/components/json-viewer/json-viewer.d.ts +17 -2
  299. package/dist/components/json-viewer/json-viewer.d.ts.map +1 -1
  300. package/dist/components/json-viewer/json-viewer.js +26 -8
  301. package/dist/components/json-viewer/json-viewer.js.map +1 -1
  302. package/dist/components/kbd/kbd.d.ts.map +1 -1
  303. package/dist/components/kbd/kbd.js +27 -10
  304. package/dist/components/kbd/kbd.js.map +1 -1
  305. package/dist/components/listbox/listbox.d.ts +25 -2
  306. package/dist/components/listbox/listbox.d.ts.map +1 -1
  307. package/dist/components/listbox/listbox.js +39 -4
  308. package/dist/components/listbox/listbox.js.map +1 -1
  309. package/dist/components/loading-bar/use-loading-bar.d.ts.map +1 -1
  310. package/dist/components/loading-bar/use-loading-bar.js +3 -1
  311. package/dist/components/loading-bar/use-loading-bar.js.map +1 -1
  312. package/dist/components/log/log.d.ts +41 -2
  313. package/dist/components/log/log.d.ts.map +1 -1
  314. package/dist/components/log/log.js +25 -3
  315. package/dist/components/log/log.js.map +1 -1
  316. package/dist/components/log/use-log.d.ts +1 -1
  317. package/dist/components/log/use-log.d.ts.map +1 -1
  318. package/dist/components/log/use-log.js +4 -1
  319. package/dist/components/log/use-log.js.map +1 -1
  320. package/dist/components/markdown-stream/markdown-stream.d.ts +22 -2
  321. package/dist/components/markdown-stream/markdown-stream.d.ts.map +1 -1
  322. package/dist/components/markdown-stream/markdown-stream.js +43 -4
  323. package/dist/components/markdown-stream/markdown-stream.js.map +1 -1
  324. package/dist/components/marquee/marquee.d.ts +68 -12
  325. package/dist/components/marquee/marquee.d.ts.map +1 -1
  326. package/dist/components/marquee/marquee.js +52 -7
  327. package/dist/components/marquee/marquee.js.map +1 -1
  328. package/dist/components/mention/mention.d.ts +43 -7
  329. package/dist/components/mention/mention.d.ts.map +1 -1
  330. package/dist/components/mention/mention.js +50 -8
  331. package/dist/components/mention/mention.js.map +1 -1
  332. package/dist/components/menu/context.js +1 -1
  333. package/dist/components/menu/context.js.map +1 -1
  334. package/dist/components/menu/menu.d.ts +92 -28
  335. package/dist/components/menu/menu.d.ts.map +1 -1
  336. package/dist/components/menu/menu.js +162 -54
  337. package/dist/components/menu/menu.js.map +1 -1
  338. package/dist/components/menu/use-menu.d.ts +1 -1
  339. package/dist/components/menu/use-menu.d.ts.map +1 -1
  340. package/dist/components/menu/use-menu.js +8 -6
  341. package/dist/components/menu/use-menu.js.map +1 -1
  342. package/dist/components/menubar/context.js +1 -1
  343. package/dist/components/menubar/context.js.map +1 -1
  344. package/dist/components/menubar/menubar.d.ts +52 -19
  345. package/dist/components/menubar/menubar.d.ts.map +1 -1
  346. package/dist/components/menubar/menubar.js +137 -56
  347. package/dist/components/menubar/menubar.js.map +1 -1
  348. package/dist/components/menubar/use-menubar.d.ts +1 -1
  349. package/dist/components/menubar/use-menubar.d.ts.map +1 -1
  350. package/dist/components/menubar/use-menubar.js +4 -2
  351. package/dist/components/menubar/use-menubar.js.map +1 -1
  352. package/dist/components/message-feed/message-feed.d.ts +13 -1
  353. package/dist/components/message-feed/message-feed.d.ts.map +1 -1
  354. package/dist/components/message-feed/message-feed.js +25 -1
  355. package/dist/components/message-feed/message-feed.js.map +1 -1
  356. package/dist/components/navigation-menu/navigation-menu.d.ts +58 -1
  357. package/dist/components/navigation-menu/navigation-menu.d.ts.map +1 -1
  358. package/dist/components/navigation-menu/navigation-menu.js +82 -10
  359. package/dist/components/navigation-menu/navigation-menu.js.map +1 -1
  360. package/dist/components/notification/context.d.ts +5 -1
  361. package/dist/components/notification/context.d.ts.map +1 -1
  362. package/dist/components/notification/context.js.map +1 -1
  363. package/dist/components/notification/notification.d.ts +39 -23
  364. package/dist/components/notification/notification.d.ts.map +1 -1
  365. package/dist/components/notification/notification.js +27 -9
  366. package/dist/components/notification/notification.js.map +1 -1
  367. package/dist/components/notification/use-item-exit.js +22 -0
  368. package/dist/components/notification/use-item-exit.js.map +1 -0
  369. package/dist/components/notification/use-notification.d.ts +3 -3
  370. package/dist/components/notification/use-notification.d.ts.map +1 -1
  371. package/dist/components/notification/use-notification.js +20 -5
  372. package/dist/components/notification/use-notification.js.map +1 -1
  373. package/dist/components/number-animation/number-animation.d.ts +14 -2
  374. package/dist/components/number-animation/number-animation.d.ts.map +1 -1
  375. package/dist/components/number-animation/number-animation.js +5 -1
  376. package/dist/components/number-animation/number-animation.js.map +1 -1
  377. package/dist/components/number-field/number-field.d.ts +16 -1
  378. package/dist/components/number-field/number-field.d.ts.map +1 -1
  379. package/dist/components/number-field/number-field.js +6 -0
  380. package/dist/components/number-field/number-field.js.map +1 -1
  381. package/dist/components/page-header/page-header.d.ts.map +1 -1
  382. package/dist/components/page-header/page-header.js +2 -1
  383. package/dist/components/page-header/page-header.js.map +1 -1
  384. package/dist/components/pagination/pagination.d.ts +22 -2
  385. package/dist/components/pagination/pagination.d.ts.map +1 -1
  386. package/dist/components/pagination/pagination.js +22 -1
  387. package/dist/components/pagination/pagination.js.map +1 -1
  388. package/dist/components/pagination/use-pagination.js +1 -0
  389. package/dist/components/pagination/use-pagination.js.map +1 -1
  390. package/dist/components/pie-chart/context.js +15 -0
  391. package/dist/components/pie-chart/context.js.map +1 -0
  392. package/dist/components/pie-chart/pie-chart.d.ts +203 -0
  393. package/dist/components/pie-chart/pie-chart.d.ts.map +1 -0
  394. package/dist/components/pie-chart/pie-chart.js +236 -0
  395. package/dist/components/pie-chart/pie-chart.js.map +1 -0
  396. package/dist/components/pie-chart/use-pie-chart.d.ts +19 -0
  397. package/dist/components/pie-chart/use-pie-chart.d.ts.map +1 -0
  398. package/dist/components/pie-chart/use-pie-chart.js +26 -0
  399. package/dist/components/pie-chart/use-pie-chart.js.map +1 -0
  400. package/dist/components/popconfirm/popconfirm.js +2 -2
  401. package/dist/components/popover/popover.d.ts +11 -0
  402. package/dist/components/popover/popover.d.ts.map +1 -1
  403. package/dist/components/popover/popover.js +7 -2
  404. package/dist/components/popover/popover.js.map +1 -1
  405. package/dist/components/progress/progress.d.ts +63 -3
  406. package/dist/components/progress/progress.d.ts.map +1 -1
  407. package/dist/components/progress/progress.js +55 -3
  408. package/dist/components/progress/progress.js.map +1 -1
  409. package/dist/components/question-flow/question-flow.d.ts +40 -1
  410. package/dist/components/question-flow/question-flow.d.ts.map +1 -1
  411. package/dist/components/question-flow/question-flow.js +37 -1
  412. package/dist/components/question-flow/question-flow.js.map +1 -1
  413. package/dist/components/radar-chart/context.js +15 -0
  414. package/dist/components/radar-chart/context.js.map +1 -0
  415. package/dist/components/radar-chart/radar-chart.d.ts +189 -0
  416. package/dist/components/radar-chart/radar-chart.d.ts.map +1 -0
  417. package/dist/components/radar-chart/radar-chart.js +220 -0
  418. package/dist/components/radar-chart/radar-chart.js.map +1 -0
  419. package/dist/components/radar-chart/use-radar-chart.d.ts +19 -0
  420. package/dist/components/radar-chart/use-radar-chart.d.ts.map +1 -0
  421. package/dist/components/radar-chart/use-radar-chart.js +26 -0
  422. package/dist/components/radar-chart/use-radar-chart.js.map +1 -0
  423. package/dist/components/radio-group/radio-group.d.ts +37 -2
  424. package/dist/components/radio-group/radio-group.d.ts.map +1 -1
  425. package/dist/components/radio-group/radio-group.js +54 -8
  426. package/dist/components/radio-group/radio-group.js.map +1 -1
  427. package/dist/components/radio-group/use-radio-group.d.ts +3 -1
  428. package/dist/components/radio-group/use-radio-group.d.ts.map +1 -1
  429. package/dist/components/radio-group/use-radio-group.js +7 -3
  430. package/dist/components/radio-group/use-radio-group.js.map +1 -1
  431. package/dist/components/reasoning/reasoning.d.ts.map +1 -1
  432. package/dist/components/reasoning/reasoning.js +1 -0
  433. package/dist/components/reasoning/reasoning.js.map +1 -1
  434. package/dist/components/sankey-chart/context.js +15 -0
  435. package/dist/components/sankey-chart/context.js.map +1 -0
  436. package/dist/components/sankey-chart/sankey-chart.d.ts +161 -0
  437. package/dist/components/sankey-chart/sankey-chart.d.ts.map +1 -0
  438. package/dist/components/sankey-chart/sankey-chart.js +208 -0
  439. package/dist/components/sankey-chart/sankey-chart.js.map +1 -0
  440. package/dist/components/sankey-chart/use-sankey-chart.d.ts +19 -0
  441. package/dist/components/sankey-chart/use-sankey-chart.d.ts.map +1 -0
  442. package/dist/components/sankey-chart/use-sankey-chart.js +26 -0
  443. package/dist/components/sankey-chart/use-sankey-chart.js.map +1 -0
  444. package/dist/components/scroll-area/scroll-area.d.ts +13 -5
  445. package/dist/components/scroll-area/scroll-area.d.ts.map +1 -1
  446. package/dist/components/scroll-area/scroll-area.js +17 -3
  447. package/dist/components/scroll-area/scroll-area.js.map +1 -1
  448. package/dist/components/select/select.d.ts +25 -2
  449. package/dist/components/select/select.d.ts.map +1 -1
  450. package/dist/components/select/select.js +48 -6
  451. package/dist/components/select/select.js.map +1 -1
  452. package/dist/components/select/use-select.js +2 -1
  453. package/dist/components/select/use-select.js.map +1 -1
  454. package/dist/components/side-nav/context.js +17 -1
  455. package/dist/components/side-nav/context.js.map +1 -1
  456. package/dist/components/side-nav/side-nav.d.ts +51 -7
  457. package/dist/components/side-nav/side-nav.d.ts.map +1 -1
  458. package/dist/components/side-nav/side-nav.js +152 -13
  459. package/dist/components/side-nav/side-nav.js.map +1 -1
  460. package/dist/components/side-nav/use-side-nav.d.ts +4 -2
  461. package/dist/components/side-nav/use-side-nav.d.ts.map +1 -1
  462. package/dist/components/side-nav/use-side-nav.js +5 -3
  463. package/dist/components/side-nav/use-side-nav.js.map +1 -1
  464. package/dist/components/signature-pad/signature-pad.d.ts +26 -4
  465. package/dist/components/signature-pad/signature-pad.d.ts.map +1 -1
  466. package/dist/components/signature-pad/signature-pad.js +32 -4
  467. package/dist/components/signature-pad/signature-pad.js.map +1 -1
  468. package/dist/components/signature-pad/use-signature-pad.d.ts +1 -1
  469. package/dist/components/signature-pad/use-signature-pad.d.ts.map +1 -1
  470. package/dist/components/signature-pad/use-signature-pad.js.map +1 -1
  471. package/dist/components/skeleton/use-skeleton.js +6 -2
  472. package/dist/components/skeleton/use-skeleton.js.map +1 -1
  473. package/dist/components/slider/slider.d.ts +27 -0
  474. package/dist/components/slider/slider.d.ts.map +1 -1
  475. package/dist/components/slider/slider.js +12 -0
  476. package/dist/components/slider/slider.js.map +1 -1
  477. package/dist/components/sortable/sortable.d.ts +18 -0
  478. package/dist/components/sortable/sortable.d.ts.map +1 -1
  479. package/dist/components/sortable/sortable.js +7 -2
  480. package/dist/components/sortable/sortable.js.map +1 -1
  481. package/dist/components/sortable/use-sortable.d.ts +1 -1
  482. package/dist/components/sortable/use-sortable.d.ts.map +1 -1
  483. package/dist/components/sortable/use-sortable.js +2 -1
  484. package/dist/components/sortable/use-sortable.js.map +1 -1
  485. package/dist/components/sparkline/sparkline.d.ts +101 -0
  486. package/dist/components/sparkline/sparkline.d.ts.map +1 -0
  487. package/dist/components/sparkline/sparkline.js +54 -0
  488. package/dist/components/sparkline/sparkline.js.map +1 -0
  489. package/dist/components/sparkline/use-sparkline.d.ts +15 -0
  490. package/dist/components/sparkline/use-sparkline.d.ts.map +1 -0
  491. package/dist/components/sparkline/use-sparkline.js +21 -0
  492. package/dist/components/sparkline/use-sparkline.js.map +1 -0
  493. package/dist/components/spinner/spinner.d.ts +8 -0
  494. package/dist/components/spinner/spinner.d.ts.map +1 -1
  495. package/dist/components/spinner/spinner.js +2 -0
  496. package/dist/components/spinner/spinner.js.map +1 -1
  497. package/dist/components/spinner/use-spinner.js +4 -2
  498. package/dist/components/spinner/use-spinner.js.map +1 -1
  499. package/dist/components/statistic/statistic.d.ts.map +1 -1
  500. package/dist/components/statistic/statistic.js +2 -1
  501. package/dist/components/statistic/statistic.js.map +1 -1
  502. package/dist/components/steps/steps.d.ts +28 -1
  503. package/dist/components/steps/steps.d.ts.map +1 -1
  504. package/dist/components/steps/steps.js +11 -2
  505. package/dist/components/steps/steps.js.map +1 -1
  506. package/dist/components/switch/switch.js +1 -1
  507. package/dist/components/table/context.js +9 -1
  508. package/dist/components/table/context.js.map +1 -1
  509. package/dist/components/table/table.d.ts +52 -3
  510. package/dist/components/table/table.d.ts.map +1 -1
  511. package/dist/components/table/table.js +40 -11
  512. package/dist/components/table/table.js.map +1 -1
  513. package/dist/components/table/use-table.d.ts +3 -1
  514. package/dist/components/table/use-table.d.ts.map +1 -1
  515. package/dist/components/table/use-table.js +5 -2
  516. package/dist/components/table/use-table.js.map +1 -1
  517. package/dist/components/tabs/tabs.d.ts +51 -3
  518. package/dist/components/tabs/tabs.d.ts.map +1 -1
  519. package/dist/components/tabs/tabs.js +60 -8
  520. package/dist/components/tabs/tabs.js.map +1 -1
  521. package/dist/components/tag/use-tag.d.ts.map +1 -1
  522. package/dist/components/tag/use-tag.js +3 -1
  523. package/dist/components/tag/use-tag.js.map +1 -1
  524. package/dist/components/tag-group/tag-group.js +1 -1
  525. package/dist/components/tag-group/tag-group.js.map +1 -1
  526. package/dist/components/tags-input/tags-input.d.ts +10 -2
  527. package/dist/components/tags-input/tags-input.d.ts.map +1 -1
  528. package/dist/components/tags-input/tags-input.js +11 -4
  529. package/dist/components/tags-input/tags-input.js.map +1 -1
  530. package/dist/components/tags-input/use-tags-input.d.ts +4 -2
  531. package/dist/components/tags-input/use-tags-input.d.ts.map +1 -1
  532. package/dist/components/tags-input/use-tags-input.js +5 -2
  533. package/dist/components/tags-input/use-tags-input.js.map +1 -1
  534. package/dist/components/time-picker/time-picker.d.ts +11 -7
  535. package/dist/components/time-picker/time-picker.d.ts.map +1 -1
  536. package/dist/components/time-picker/time-picker.js +4 -2
  537. package/dist/components/time-picker/time-picker.js.map +1 -1
  538. package/dist/components/time-range-picker/time-range-picker.d.ts +11 -7
  539. package/dist/components/time-range-picker/time-range-picker.d.ts.map +1 -1
  540. package/dist/components/time-range-picker/time-range-picker.js +4 -2
  541. package/dist/components/time-range-picker/time-range-picker.js.map +1 -1
  542. package/dist/components/timeline/timeline.d.ts.map +1 -1
  543. package/dist/components/timeline/timeline.js +2 -1
  544. package/dist/components/timeline/timeline.js.map +1 -1
  545. package/dist/components/timestamp/timestamp.d.ts +20 -1
  546. package/dist/components/timestamp/timestamp.d.ts.map +1 -1
  547. package/dist/components/timestamp/timestamp.js +16 -5
  548. package/dist/components/timestamp/timestamp.js.map +1 -1
  549. package/dist/components/toolbar/toolbar.d.ts +17 -2
  550. package/dist/components/toolbar/toolbar.d.ts.map +1 -1
  551. package/dist/components/toolbar/toolbar.js +31 -4
  552. package/dist/components/toolbar/toolbar.js.map +1 -1
  553. package/dist/components/toolbar/use-toolbar.d.ts +4 -2
  554. package/dist/components/toolbar/use-toolbar.d.ts.map +1 -1
  555. package/dist/components/toolbar/use-toolbar.js +5 -2
  556. package/dist/components/toolbar/use-toolbar.js.map +1 -1
  557. package/dist/components/tooltip/context.d.ts +21 -0
  558. package/dist/components/tooltip/context.d.ts.map +1 -0
  559. package/dist/components/tooltip/context.js +10 -1
  560. package/dist/components/tooltip/context.js.map +1 -1
  561. package/dist/components/tooltip/tooltip.d.ts +53 -1
  562. package/dist/components/tooltip/tooltip.d.ts.map +1 -1
  563. package/dist/components/tooltip/tooltip.js +34 -3
  564. package/dist/components/tooltip/tooltip.js.map +1 -1
  565. package/dist/components/tooltip/use-tooltip.d.ts +3 -18
  566. package/dist/components/tooltip/use-tooltip.d.ts.map +1 -1
  567. package/dist/components/tooltip/use-tooltip.js +2 -0
  568. package/dist/components/tooltip/use-tooltip.js.map +1 -1
  569. package/dist/components/tour/tour.d.ts +8 -0
  570. package/dist/components/tour/tour.d.ts.map +1 -1
  571. package/dist/components/tour/tour.js +2 -0
  572. package/dist/components/tour/tour.js.map +1 -1
  573. package/dist/components/transfer/transfer.d.ts +30 -2
  574. package/dist/components/transfer/transfer.d.ts.map +1 -1
  575. package/dist/components/transfer/transfer.js +29 -3
  576. package/dist/components/transfer/transfer.js.map +1 -1
  577. package/dist/components/tree/tree.d.ts +43 -8
  578. package/dist/components/tree/tree.d.ts.map +1 -1
  579. package/dist/components/tree/tree.js +28 -15
  580. package/dist/components/tree/tree.js.map +1 -1
  581. package/dist/components/tree-select/context.js +10 -1
  582. package/dist/components/tree-select/context.js.map +1 -1
  583. package/dist/components/tree-select/tree-select.d.ts +78 -6
  584. package/dist/components/tree-select/tree-select.d.ts.map +1 -1
  585. package/dist/components/tree-select/tree-select.js +127 -12
  586. package/dist/components/tree-select/tree-select.js.map +1 -1
  587. package/dist/components/tree-select/use-tree-select.d.ts +3 -0
  588. package/dist/components/tree-select/use-tree-select.d.ts.map +1 -1
  589. package/dist/components/tree-select/use-tree-select.js +6 -1
  590. package/dist/components/tree-select/use-tree-select.js.map +1 -1
  591. package/dist/components/truncate/truncate.d.ts +25 -4
  592. package/dist/components/truncate/truncate.d.ts.map +1 -1
  593. package/dist/components/truncate/truncate.js +29 -14
  594. package/dist/components/truncate/truncate.js.map +1 -1
  595. package/dist/components/truncate/use-truncate.d.ts.map +1 -1
  596. package/dist/components/truncate/use-truncate.js +3 -1
  597. package/dist/components/truncate/use-truncate.js.map +1 -1
  598. package/dist/components/typography/typography.d.ts +35 -2
  599. package/dist/components/typography/typography.d.ts.map +1 -1
  600. package/dist/components/typography/typography.js +23 -4
  601. package/dist/components/typography/typography.js.map +1 -1
  602. package/dist/components/virtualizer/virtualizer.d.ts +26 -2
  603. package/dist/components/virtualizer/virtualizer.d.ts.map +1 -1
  604. package/dist/components/virtualizer/virtualizer.js +20 -3
  605. package/dist/components/virtualizer/virtualizer.js.map +1 -1
  606. package/dist/components/watermark/watermark.d.ts +14 -1
  607. package/dist/components/watermark/watermark.d.ts.map +1 -1
  608. package/dist/components/watermark/watermark.js +20 -5
  609. package/dist/components/watermark/watermark.js.map +1 -1
  610. package/dist/config/config.d.ts +1 -1
  611. package/dist/config/config.d.ts.map +1 -1
  612. package/dist/config/config.js +2 -1
  613. package/dist/config/config.js.map +1 -1
  614. package/dist/index.d.ts +65 -50
  615. package/dist/index.js +59 -44
  616. package/dist/package.js +1 -1
  617. package/dist/runtime/as-child.js +3 -2
  618. package/dist/runtime/as-child.js.map +1 -1
  619. package/dist/runtime/hydration.js +14 -0
  620. package/dist/runtime/hydration.js.map +1 -0
  621. package/dist/runtime/use-machine.js +3 -2
  622. package/dist/runtime/use-machine.js.map +1 -1
  623. package/dist/runtime/use-overlay-exit.js +0 -1
  624. package/dist/runtime/use-overlay-exit.js.map +1 -1
  625. package/dist/runtime/use-scrollbars.js +3 -1
  626. package/dist/runtime/use-scrollbars.js.map +1 -1
  627. package/dist/services/notification-service.d.ts +26 -7
  628. package/dist/services/notification-service.d.ts.map +1 -1
  629. package/dist/services/notification-service.js +35 -8
  630. package/dist/services/notification-service.js.map +1 -1
  631. package/dist/sound.d.ts +6 -7
  632. package/dist/sound.d.ts.map +1 -1
  633. package/dist/sound.js +6 -6
  634. package/dist/sound.js.map +1 -1
  635. package/package.json +15 -14
  636. package/dist/components/gradient-text/gradient-text.d.ts +0 -36
  637. package/dist/components/gradient-text/gradient-text.d.ts.map +0 -1
  638. package/dist/components/gradient-text/gradient-text.js +0 -20
  639. package/dist/components/gradient-text/gradient-text.js.map +0 -1
  640. package/dist/components/icon-wrapper/icon-wrapper.d.ts +0 -29
  641. package/dist/components/icon-wrapper/icon-wrapper.d.ts.map +0 -1
  642. package/dist/components/icon-wrapper/icon-wrapper.js +0 -20
  643. package/dist/components/icon-wrapper/icon-wrapper.js.map +0 -1
  644. package/dist/components/segmented/context.d.ts +0 -13
  645. package/dist/components/segmented/context.d.ts.map +0 -1
  646. package/dist/components/segmented/context.js +0 -24
  647. package/dist/components/segmented/context.js.map +0 -1
  648. package/dist/components/segmented/segmented.d.ts +0 -161
  649. package/dist/components/segmented/segmented.d.ts.map +0 -1
  650. package/dist/components/segmented/segmented.js +0 -142
  651. package/dist/components/segmented/segmented.js.map +0 -1
  652. package/dist/components/segmented/use-segmented.d.ts +0 -15
  653. package/dist/components/segmented/use-segmented.d.ts.map +0 -1
  654. package/dist/components/segmented/use-segmented.js +0 -22
  655. package/dist/components/segmented/use-segmented.js.map +0 -1
  656. package/dist/components/toast/context.js +0 -15
  657. package/dist/components/toast/context.js.map +0 -1
  658. package/dist/components/toast/toast.d.ts +0 -123
  659. package/dist/components/toast/toast.d.ts.map +0 -1
  660. package/dist/components/toast/toast.js +0 -112
  661. package/dist/components/toast/toast.js.map +0 -1
  662. package/dist/components/toast/use-toast.d.ts +0 -10
  663. package/dist/components/toast/use-toast.d.ts.map +0 -1
  664. package/dist/components/toast/use-toast.js +0 -17
  665. package/dist/components/toast/use-toast.js.map +0 -1
  666. package/dist/services/toast-service.d.ts +0 -69
  667. package/dist/services/toast-service.d.ts.map +0 -1
  668. package/dist/services/toast-service.js +0 -161
  669. package/dist/services/toast-service.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tag-group.js","names":[],"sources":["../../../src/components/tag-group/tag-group.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// 提供 tag group 相关实现。\n\nimport type { Direction, Orientation, Size, Tone } from '@xihan-ui/core'\nimport type { TagGroupApi, TagGroupItemProps, TagGroupNode, TagGroupNodeMeta, TagGroupSchema, TagGroupSelectionMode, TagGroupTranslations, TagVariant } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { computed, defineComponent, h, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideTagGroup, provideTagGroupItem, useTagGroupContext, useTagGroupItemContext } from './context'\nimport { useTagGroup } from './use-tag-group'\n\ntype TagGroupProps = TagGroupSchema['props']\n\n/** 默认插槽的载荷:选中集合、选择模式与焦点锚点,以及判定选中与整份赋值、单选、切换、移除的命令。 */\nexport type TagGroupRootSlotProps = Pick<\n TagGroupApi,\n 'value' | 'selectionMode' | 'focusedValue' | 'isSelected' | 'setValue' | 'select' | 'toggle' | 'deleteItem'\n>\n\nexport const XhTagGroupRoot = defineComponent({\n name: 'XhTagGroupRoot',\n // 有 connect 兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<TagGroupNode[]> },\n /** 标题文字。提供后不必再写 label 部件;需要放置其他内容时改用 label 插槽。 */\n label: { type: String },\n value: { type: [String, Array] as PropType<string | string[]> },\n defaultValue: { type: [String, Array] as PropType<string | string[]> },\n selectionMode: { type: String as PropType<TagGroupSelectionMode> },\n deletable: Boolean,\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction> },\n orientation: { type: String as PropType<Orientation> },\n typeahead: { type: Boolean, default: undefined },\n variant: { type: String as PropType<TagVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n translations: { type: Object as PropType<Partial<TagGroupTranslations>> },\n },\n // value-change 携带 { value },update:value 携带裸集合;回传值恒为数组,单选时长度 ≤ 1。\n // item-delete 只报「用户要摘这一枚」,条目的去留由宿主改自己的数据\n emits: {\n 'value-change': (_details: PayloadOf<TagGroupProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<TagGroupProps, 'onValueChange'>['value']) => true,\n 'item-delete': (_details: PayloadOf<TagGroupProps, 'onItemDelete'>) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TagGroupRootSlotProps) => VNode[]\n label?: () => VNode[]\n item?: (node: TagGroupNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notify: TagGroupProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyDelete: TagGroupProps['onItemDelete'] = (details) => {\n emit('item-delete', details)\n }\n const ctx = useTagGroup(withXhConfig('tag-group', useFormControlProps(props)) as TagGroupProps, notify, notifyDelete)\n provideTagGroup(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, [\n ...(slots.default\n ? slots.default({\n value: ctx.api.value.value,\n selectionMode: ctx.api.value.selectionMode,\n focusedValue: ctx.api.value.focusedValue,\n isSelected: ctx.api.value.isSelected,\n setValue: ctx.api.value.setValue,\n select: ctx.api.value.select,\n toggle: ctx.api.value.toggle,\n deleteItem: ctx.api.value.deleteItem,\n }) ?? []\n : props.collection\n ? renderDefaultTree(\n ctx.api.value.collection,\n slots.label?.() ?? (props.label != null ? [props.label] : null),\n slots.item,\n )\n : []),\n ])\n },\n})\n\nexport const XhTagGroupLabel = defineComponent({\n name: 'XhTagGroupLabel',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTagGroupList = defineComponent({\n name: 'XhTagGroupList',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n return () => h('div', ctx.api.value.getListProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 一个标签:渲染为 tag 的 root(data-scope=\"tag\"),组把行角色、Tab 停靠点、选中与锚点叠加在它上面。 */\nexport const XhTagGroupItem = defineComponent({\n name: 'XhTagGroupItem',\n props: {\n value: { type: String, required: true },\n // 缺省交给 connect 回 collection 里查,写死 false 会盖掉数据里的声明\n disabled: { type: Boolean, default: undefined },\n deletable: { type: Boolean, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useTagGroupContext()\n const item = computed<TagGroupItemProps>(() => ({\n value: props.value,\n disabled: props.disabled,\n deletable: props.deletable,\n }))\n provideTagGroupItem({ item })\n // 本条目持有焦点时,value 变更重报焦点条目,卸载时上报整组失焦\n const itemEl = ref<HTMLElement | null>(null)\n watch(() => props.value, (next, prev) => {\n if (next === prev)\n return\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'ITEM.FOCUS', 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: 'LIST.BLUR' })\n })\n return () => h(\n 'span',\n { ...ctx.api.value.getItemProps(item.value) as Record<string, unknown>, ref: itemEl },\n slots.default?.(),\n )\n },\n})\n\nexport const XhTagGroupCell = defineComponent({\n name: 'XhTagGroupCell',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('span', ctx.api.value.getCellProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 选中标记:落在格子内、文字之前,选中时展示、未选中时收起;内容留空时由皮肤绘制对号。 */\nexport const XhTagGroupItemIndicator = defineComponent({\n name: 'XhTagGroupItemIndicator',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 标签文字:渲染为 tag 的 label。 */\nexport const XhTagGroupItemText = defineComponent({\n name: 'XhTagGroupItemText',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 移除按钮:渲染为所在标签那份 tag 的 close-trigger,不占 Tab 位;整组未开放移除时收起。 */\nexport const XhTagGroupItemDeleteTrigger = defineComponent({\n name: 'XhTagGroupItemDeleteTrigger',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('button', ctx.api.value.getItemDeleteTriggerProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 未写默认插槽时按 collection 铺开的整套结构,作者只提供数据。\n * 与手写部件产出的 DOM 完全一致,需要修改结构时写默认插槽。\n */\nfunction renderDefaultTree(\n collection: readonly TagGroupNodeMeta[],\n label: (VNode | string)[] | null,\n itemSlot?: (node: TagGroupNodeMeta) => VNode[],\n): VNode[] {\n return [\n ...(label ? [h(XhTagGroupLabel, null, () => label)] : []),\n h(XhTagGroupList, null, () => collection.map(node =>\n h(XhTagGroupItem, { key: node.value, value: node.value }, () => [\n h(XhTagGroupCell, null, () => [\n h(XhTagGroupItemIndicator),\n h(XhTagGroupItemText, null, () => itemSlot?.(node) ?? node.label),\n h(XhTagGroupItemDeleteTrigger),\n ]),\n ]),\n )),\n ]\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"tag-group.js","names":[],"sources":["../../../src/components/tag-group/tag-group.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// 提供 tag group 相关实现。\n\nimport type { Direction, Orientation, Size, Tone } from '@xihan-ui/core'\nimport type { TagGroupApi, TagGroupItemProps, TagGroupNode, TagGroupNodeMeta, TagGroupSchema, TagGroupSelectionMode, TagGroupTranslations, TagVariant } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { computed, defineComponent, h, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideTagGroup, provideTagGroupItem, useTagGroupContext, useTagGroupItemContext } from './context'\nimport { useTagGroup } from './use-tag-group'\n\ntype TagGroupProps = TagGroupSchema['props']\n\n/** 默认插槽的载荷:选中集合、选择模式与焦点锚点,以及判定选中与整份赋值、单选、切换、移除的命令。 */\nexport type TagGroupRootSlotProps = Pick<\n TagGroupApi,\n 'value' | 'selectionMode' | 'focusedValue' | 'isSelected' | 'setValue' | 'select' | 'toggle' | 'deleteItem'\n>\n\nexport const XhTagGroupRoot = defineComponent({\n name: 'XhTagGroupRoot',\n // 有 connect 兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<TagGroupNode[]> },\n /** 标题文字。提供后不必再写 label 部件;需要放置其他内容时改用 label 插槽。 */\n label: { type: String },\n value: { type: [String, Array] as PropType<string | string[]> },\n defaultValue: { type: [String, Array] as PropType<string | string[]> },\n selectionMode: { type: String as PropType<TagGroupSelectionMode> },\n deletable: Boolean,\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction> },\n orientation: { type: String as PropType<Orientation> },\n typeahead: { type: Boolean, default: undefined },\n variant: { type: String as PropType<TagVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n translations: { type: Object as PropType<Partial<TagGroupTranslations>> },\n },\n // value-change 携带 { value },update:value 携带裸集合;回传值恒为数组,单选时长度 ≤ 1。\n // item-delete 只报「用户要摘这一枚」,条目的去留由宿主改自己的数据\n emits: {\n 'value-change': (_details: PayloadOf<TagGroupProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<TagGroupProps, 'onValueChange'>['value']) => true,\n 'item-delete': (_details: PayloadOf<TagGroupProps, 'onItemDelete'>) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TagGroupRootSlotProps) => VNode[]\n label?: () => VNode[]\n item?: (node: TagGroupNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notify: TagGroupProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyDelete: TagGroupProps['onItemDelete'] = (details) => {\n emit('item-delete', details)\n }\n const ctx = useTagGroup(withXhConfig('tag-group', useFormControlProps(props)) as TagGroupProps, notify, notifyDelete)\n provideTagGroup(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, [\n ...(slots.default\n ? slots.default({\n value: ctx.api.value.value,\n selectionMode: ctx.api.value.selectionMode,\n focusedValue: ctx.api.value.focusedValue,\n isSelected: ctx.api.value.isSelected,\n setValue: ctx.api.value.setValue,\n select: ctx.api.value.select,\n toggle: ctx.api.value.toggle,\n deleteItem: ctx.api.value.deleteItem,\n }) ?? []\n : props.collection\n ? renderDefaultTree(\n ctx.api.value.collection,\n slots.label?.() ?? (props.label != null ? [props.label] : null),\n slots.item,\n )\n : []),\n ])\n },\n})\n\nexport const XhTagGroupLabel = defineComponent({\n name: 'XhTagGroupLabel',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTagGroupList = defineComponent({\n name: 'XhTagGroupList',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n return () => h('div', ctx.api.value.getListProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 一个标签:渲染为 tag 的 root(data-scope=\"tag\"),组把行角色、Tab 停靠点、选中与锚点叠加在它上面。 */\nexport const XhTagGroupItem = defineComponent({\n name: 'XhTagGroupItem',\n props: {\n value: { type: String, required: true },\n // 缺省交给 connect 回 collection 里查,写死 false 会盖掉数据里的声明\n disabled: { type: Boolean, default: undefined },\n deletable: { type: Boolean, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useTagGroupContext()\n const item = computed<TagGroupItemProps>(() => ({\n value: props.value,\n disabled: props.disabled,\n deletable: props.deletable,\n }))\n provideTagGroupItem({ item })\n // 本条目持有焦点时,value 变更重报焦点条目,卸载时上报整组失焦\n const itemEl = ref<HTMLElement | null>(null)\n watch(() => props.value, (next, prev) => {\n if (next === prev)\n return\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'ITEM.FOCUS', 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: 'LIST.BLUR' })\n })\n return () => h(\n 'span',\n { ...ctx.api.value.getItemProps(item.value) as Record<string, unknown>, ref: itemEl },\n slots.default?.(),\n )\n },\n})\n\nexport const XhTagGroupCell = defineComponent({\n name: 'XhTagGroupCell',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('span', ctx.api.value.getCellProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 选中标记:落在格子内、文字之前,选中时展示、未选中时收起;内容留空时由皮肤绘制对号。 */\nexport const XhTagGroupItemIndicator = defineComponent({\n name: 'XhTagGroupItemIndicator',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 标签文字:渲染为 tag 的 label。 */\nexport const XhTagGroupItemText = defineComponent({\n name: 'XhTagGroupItemText',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 移除按钮:渲染为所在标签那份 tag 的 close-trigger,不占 Tab 位;整组未开放移除时收起。 */\nexport const XhTagGroupItemDeleteTrigger = defineComponent({\n name: 'XhTagGroupItemDeleteTrigger',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('button', ctx.api.value.getItemDeleteTriggerProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 未写默认插槽时按 collection 铺开的整套结构,作者只提供数据。\n * 与手写部件产出的 DOM 完全一致,需要修改结构时写默认插槽。\n */\nfunction renderDefaultTree(\n collection: readonly TagGroupNodeMeta[],\n label: (VNode | string)[] | null,\n itemSlot?: (node: TagGroupNodeMeta) => VNode[],\n): VNode[] {\n return [\n ...(label ? [h(XhTagGroupLabel, null, () => label)] : []),\n h(XhTagGroupList, null, () => collection.map(node =>\n h(XhTagGroupItem, { key: node.value, value: node.value }, () => [\n h(XhTagGroupCell, null, () => [\n h(XhTagGroupItemText, null, () => itemSlot?.(node) ?? node.label),\n h(XhTagGroupItemIndicator),\n h(XhTagGroupItemDeleteTrigger),\n ]),\n ]),\n )),\n ]\n}\n"],"mappings":"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"}
@@ -49,7 +49,10 @@ declare const XhTagsInputRoot: import("vue").DefineComponent<import("vue").Extra
49
49
  type: StringConstructor;
50
50
  };
51
51
  delimiter: {
52
- type: StringConstructor;
52
+ type: PropType<string | string[]>;
53
+ };
54
+ validate: {
55
+ type: PropType<TagsInputProps["validate"]>;
53
56
  };
54
57
  addOnPaste: BooleanConstructor;
55
58
  editable: BooleanConstructor;
@@ -75,6 +78,7 @@ declare const XhTagsInputRoot: import("vue").DefineComponent<import("vue").Extra
75
78
  'update:value': (_value: PayloadOf<TagsInputProps, "onValueChange">["value"]) => true;
76
79
  'input-value-change': (_details: PayloadOf<TagsInputProps, "onInputValueChange">) => true;
77
80
  'update:inputValue': (_inputValue: PayloadOf<TagsInputProps, "onInputValueChange">["inputValue"]) => true;
81
+ 'tag-reject': (_details: PayloadOf<TagsInputProps, "onTagReject">) => true;
78
82
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
79
83
  value: {
80
84
  type: PropType<string[]>;
@@ -116,7 +120,10 @@ declare const XhTagsInputRoot: import("vue").DefineComponent<import("vue").Extra
116
120
  type: StringConstructor;
117
121
  };
118
122
  delimiter: {
119
- type: StringConstructor;
123
+ type: PropType<string | string[]>;
124
+ };
125
+ validate: {
126
+ type: PropType<TagsInputProps["validate"]>;
120
127
  };
121
128
  addOnPaste: BooleanConstructor;
122
129
  editable: BooleanConstructor;
@@ -140,6 +147,7 @@ declare const XhTagsInputRoot: import("vue").DefineComponent<import("vue").Extra
140
147
  "onUpdate:value"?: ((_value: string[]) => any) | undefined;
141
148
  "onInput-value-change"?: ((_details: import("@xihan-ui/headless").TagsInputInputValueChangeDetails) => any) | undefined;
142
149
  "onUpdate:inputValue"?: ((_inputValue: string) => any) | undefined;
150
+ "onTag-reject"?: ((_details: import("@xihan-ui/headless").TagsInputTagRejectDetails) => any) | undefined;
143
151
  }>, {
144
152
  required: boolean;
145
153
  invalid: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"tags-input.d.ts","names":[],"sources":["../../../src/components/tags-input/tags-input.ts"],"mappings":";;;;;KAkBK,iBAAiB;;KAGV,0BAA0B,KAAK;;KAG/B,yBAAyB,KACnC;cAmBW,+BAAe,8BAAA;;IAKA,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAeC,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACD,MAAA,SAAS,QAAQ;;;;;EAItB,iBAAA,UAAA,UAAU;EACZ,iBAAA,QAAA,UAAU;EACF,uBAAA,UAAA,UAAU;EACR,sBAAA,aAAA,UAAU;;;IA3BrB,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAeC,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACD,MAAA,SAAS,QAAQ;;;;;;;;;;;;;;;;;EAUvC,WAAC,OAAO,2BAA2B;kCAgC/C;cAEW,gCAAgB,0BAAA,oBAAA,4BAAA;;8BAO3B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAM7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,gCAAgB,0BAAA,oBAAA,4BAAA;;8BAU3B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,+BAAe,8BAAA;;;;;;;;;;;;MAgC1B,oDAAA;;cAGW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAOjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAO9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,4CAA4B,0BAAA,oBAAA,4BAAA;;8BAOvC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,oCAAoB,0BAAA,oBAAA,4BAAA;;8BAO/B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAMlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,gCAAgB,0BAAA,oBAAA,4BAAA;;;EAGf,WAAC,OAAO,4BAA4B;kCAchD;cAEW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAMjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
1
+ {"version":3,"file":"tags-input.d.ts","names":[],"sources":["../../../src/components/tags-input/tags-input.ts"],"mappings":";;;;;KAkBK,iBAAiB;;KAGV,0BAA0B,KAAK;;KAG/B,yBAAyB,KACnC;cAmBW,+BAAe,8BAAA;;IAKA,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAYO,MAAA;;;IACR,MAAA,SAAS;;;;;IAGP,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACD,MAAA,SAAS,QAAQ;;;;;EAItB,iBAAA,UAAA,UAAU;EACZ,iBAAA,QAAA,UAAU;EACF,uBAAA,UAAA,UAAU;EACR,sBAAA,aAAA,UAAU;EACpB,eAAA,UAAA,UAAU;;;IA7BX,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAYO,MAAA;;;IACR,MAAA,SAAS;;;;;IAGP,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACD,MAAA,SAAS,QAAQ;;;;;;;;;;;;;;;;;;EAWvC,WAAC,OAAO,2BAA2B;kCAiC/C;cAEW,gCAAgB,0BAAA,oBAAA,4BAAA;;8BAO3B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAM7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,gCAAgB,0BAAA,oBAAA,4BAAA;;8BAU3B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,+BAAe,8BAAA;;;;;;;;;;;;MAgC1B,oDAAA;;cAGW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAOjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAO9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,4CAA4B,0BAAA,oBAAA,4BAAA;;8BAOvC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,oCAAoB,0BAAA,oBAAA,4BAAA;;8BAO/B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAMlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,gCAAgB,0BAAA,oBAAA,4BAAA;;;EAGf,WAAC,OAAO,4BAA4B;kCAchD;cAEW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAMjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
@@ -33,7 +33,8 @@ const XhTagsInputRoot = defineComponent({
33
33
  showCount: Boolean,
34
34
  name: { type: String },
35
35
  placeholder: { type: String },
36
- delimiter: { type: String },
36
+ delimiter: { type: [String, Array] },
37
+ validate: { type: Function },
37
38
  addOnPaste: Boolean,
38
39
  editable: Boolean,
39
40
  blurBehavior: { type: String },
@@ -46,7 +47,8 @@ const XhTagsInputRoot = defineComponent({
46
47
  "value-change": (_details) => true,
47
48
  "update:value": (_value) => true,
48
49
  "input-value-change": (_details) => true,
49
- "update:inputValue": (_inputValue) => true
50
+ "update:inputValue": (_inputValue) => true,
51
+ "tag-reject": (_details) => true
50
52
  },
51
53
  slots: Object,
52
54
  setup(props, { slots, emit }) {
@@ -58,9 +60,11 @@ const XhTagsInputRoot = defineComponent({
58
60
  emit("input-value-change", details);
59
61
  emit("update:inputValue", details.inputValue);
60
62
  };
63
+ const onTagReject = (details) => emit("tag-reject", details);
61
64
  const ctx = useTagsInput(withXhConfig("tags-input", useFormControlProps(props)), {
62
65
  onValueChange,
63
- onInputValueChange
66
+ onInputValueChange,
67
+ onTagReject
64
68
  });
65
69
  provideTagsInput(ctx);
66
70
  return () => h("div", ctx.api.value.getRootProps(), slots.default?.({
@@ -94,7 +98,10 @@ const XhTagsInputControl = defineComponent({
94
98
  name: "XhTagsInputControl",
95
99
  setup(_, { slots }) {
96
100
  const ctx = useTagsInputContext();
97
- return () => h("div", ctx.api.value.getControlProps(), slots.default?.());
101
+ return () => h("div", {
102
+ ...ctx.api.value.getControlProps(),
103
+ ref: ctx.controlRef
104
+ }, slots.default?.());
98
105
  }
99
106
  });
100
107
  const XhTagsInputInput = defineComponent({
@@ -1 +1 @@
1
- {"version":3,"file":"tags-input.js","names":[],"sources":["../../../src/components/tags-input/tags-input.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// 提供 tags input 相关实现。\n\nimport type { ControlVariant, Size, Tone } from '@xihan-ui/core'\nimport type { TagsInputApi, TagsInputBlurBehavior, TagsInputItemProps, TagsInputSchema, TagsInputTranslations } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { computed, defineComponent, h, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { useFieldLabelWiring, useFieldStateWiring } from '../field/use-field-control'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideTagsInput, provideTagsInputItem, useTagsInputContext, useTagsInputItemContext } from './context'\nimport { useTagsInput } from './use-tags-input'\n\ntype TagsInputProps = TagsInputSchema['props']\n\n/** 计数部件默认插槽的载荷:当前个数、上限与已达上限、越界两个标志。 */\nexport type TagsInputCountSlotProps = Pick<TagsInputApi, 'count' | 'max' | 'atMax' | 'overflow'>\n\n/** 默认插槽的载荷:标签集合与输入文本、数量与越界标志、光标与编辑锚点,以及增删改与清空的动作。 */\nexport type TagsInputRootSlotProps = Pick<\n TagsInputApi,\n | 'value'\n | 'count'\n | 'inputValue'\n | 'empty'\n | 'atMax'\n | 'overflow'\n | 'highlightedValue'\n | 'editedValue'\n | 'canClear'\n | 'setValue'\n | 'addValue'\n | 'deleteValue'\n | 'clear'\n | 'setInputValue'\n | 'highlight'\n | 'edit'\n>\n\nexport const XhTagsInputRoot = defineComponent({\n name: 'XhTagsInputRoot',\n // 有 connect 与机器兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n // 缺席值 undefined 表示非受控\n value: { type: Array as PropType<string[]> },\n defaultValue: { type: Array as PropType<string[]> },\n inputValue: { type: String },\n defaultInputValue: { type: String },\n max: { type: Number },\n allowOverflow: Boolean,\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n invalid: { type: Boolean, default: undefined },\n showCount: Boolean,\n name: { type: String },\n placeholder: { type: String },\n delimiter: { type: String },\n addOnPaste: Boolean,\n editable: Boolean,\n blurBehavior: { type: String as PropType<TagsInputBlurBehavior | null> },\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n translations: { type: Object as PropType<Partial<TagsInputTranslations>> },\n },\n // value-change 携带 { value },update:value 携带裸数组;输入文本走 input-value-change 一路\n emits: {\n 'value-change': (_details: PayloadOf<TagsInputProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<TagsInputProps, 'onValueChange'>['value']) => true,\n 'input-value-change': (_details: PayloadOf<TagsInputProps, 'onInputValueChange'>) => true,\n 'update:inputValue': (_inputValue: PayloadOf<TagsInputProps, 'onInputValueChange'>['inputValue']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TagsInputRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const onValueChange: TagsInputProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const onInputValueChange: TagsInputProps['onInputValueChange'] = (details) => {\n emit('input-value-change', details)\n emit('update:inputValue', details.inputValue)\n }\n const ctx = useTagsInput(withXhConfig('tags-input', useFormControlProps(props)) as TagsInputProps, { onValueChange, onInputValueChange })\n provideTagsInput(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n value: ctx.api.value.value,\n count: ctx.api.value.count,\n inputValue: ctx.api.value.inputValue,\n empty: ctx.api.value.empty,\n atMax: ctx.api.value.atMax,\n overflow: ctx.api.value.overflow,\n highlightedValue: ctx.api.value.highlightedValue,\n editedValue: ctx.api.value.editedValue,\n canClear: ctx.api.value.canClear,\n setValue: ctx.api.value.setValue,\n addValue: ctx.api.value.addValue,\n deleteValue: ctx.api.value.deleteValue,\n clear: ctx.api.value.clear,\n setInputValue: ctx.api.value.setInputValue,\n highlight: ctx.api.value.highlight,\n edit: ctx.api.value.edit,\n }))\n },\n})\n\nexport const XhTagsInputLabel = defineComponent({\n name: 'XhTagsInputLabel',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n // 用原生 label,getLabelProps 的 for 指向输入框\n return () => h('label', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTagsInputControl = defineComponent({\n name: 'XhTagsInputControl',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n return () => h('div', ctx.api.value.getControlProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTagsInputInput = defineComponent({\n name: 'XhTagsInputInput',\n setup() {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useTagsInputContext()\n return () => h('input', fieldLabel.value({ ...fieldWiring.value, ...ctx.api.value.getInputProps() as Record<string, unknown> }))\n },\n})\n\nexport const XhTagsInputItem = defineComponent({\n name: 'XhTagsInputItem',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTagsInputContext()\n const item = computed<TagsInputItemProps>(() => ({ value: props.value }))\n provideTagsInputItem({ item })\n // 本标签持有焦点时,value 变更或卸载都上报焦点离场以终止编辑会话\n const itemEl = ref<HTMLElement | null>(null)\n const holdsFocus = (): boolean => {\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return false\n const active = service.scope.getActiveElement()\n return !!itemEl.value && !!active && (itemEl.value === active || itemEl.value.contains(active))\n }\n watch(() => props.value, (next, prev) => {\n if (next !== prev && holdsFocus())\n ctx.service.send({ type: 'ITEM.FOCUS_LOST' })\n })\n onBeforeUnmount(() => {\n if (holdsFocus())\n ctx.service.send({ type: 'ITEM.FOCUS_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\n/** 标签的预览:渲染为库内 tag 的 root(data-scope=\"tag\"),就地编辑时由 tag 收起。 */\nexport const XhTagsInputItemPreview = defineComponent({\n name: 'XhTagsInputItemPreview',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('span', ctx.api.value.getItemPreviewProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 标签文字:渲染为 tag 的 label,截断落在这一层。 */\nexport const XhTagsInputItemText = defineComponent({\n name: 'XhTagsInputItemText',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 删除按钮:渲染为所在标签那份 tag 的 close-trigger,不占 Tab 位;禁用与只读时保留位置、原生 disabled。 */\nexport const XhTagsInputItemDeleteTrigger = defineComponent({\n name: 'XhTagsInputItemDeleteTrigger',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('button', ctx.api.value.getItemDeleteTriggerProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTagsInputItemInput = defineComponent({\n name: 'XhTagsInputItemInput',\n setup() {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('input', ctx.api.value.getItemInputProps(item.value) as Record<string, unknown>)\n },\n})\n\nexport const XhTagsInputClearTrigger = defineComponent({\n name: 'XhTagsInputClearTrigger',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 计数:未写内容时渲染「已用 / 上限」,未设上限时只渲染已用。 */\nexport const XhTagsInputCount = defineComponent({\n name: 'XhTagsInputCount',\n slots: Object as SlotsType<{\n default?: (props: TagsInputCountSlotProps) => VNode[]\n }>,\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n return () => {\n const api = ctx.api.value\n const fallback = api.max === undefined ? `${api.count}` : `${api.count} / ${api.max}`\n return h(\n 'span',\n api.getCountProps() as Record<string, unknown>,\n slots.default?.({ count: api.count, max: api.max, atMax: api.atMax, overflow: api.overflow }) ?? fallback,\n )\n }\n },\n})\n\nexport const XhTagsInputHiddenInput = defineComponent({\n name: 'XhTagsInputHiddenInput',\n setup() {\n const ctx = useTagsInputContext()\n return () => h('input', ctx.api.value.getHiddenInputProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"tags-input.js","names":[],"sources":["../../../src/components/tags-input/tags-input.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// 提供 tags input 相关实现。\n\nimport type { ControlVariant, Size, Tone } from '@xihan-ui/core'\nimport type { TagsInputApi, TagsInputBlurBehavior, TagsInputItemProps, TagsInputSchema, TagsInputTranslations } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { computed, defineComponent, h, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { useFieldLabelWiring, useFieldStateWiring } from '../field/use-field-control'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideTagsInput, provideTagsInputItem, useTagsInputContext, useTagsInputItemContext } from './context'\nimport { useTagsInput } from './use-tags-input'\n\ntype TagsInputProps = TagsInputSchema['props']\n\n/** 计数部件默认插槽的载荷:当前个数、上限与已达上限、越界两个标志。 */\nexport type TagsInputCountSlotProps = Pick<TagsInputApi, 'count' | 'max' | 'atMax' | 'overflow'>\n\n/** 默认插槽的载荷:标签集合与输入文本、数量与越界标志、光标与编辑锚点,以及增删改与清空的动作。 */\nexport type TagsInputRootSlotProps = Pick<\n TagsInputApi,\n | 'value'\n | 'count'\n | 'inputValue'\n | 'empty'\n | 'atMax'\n | 'overflow'\n | 'highlightedValue'\n | 'editedValue'\n | 'canClear'\n | 'setValue'\n | 'addValue'\n | 'deleteValue'\n | 'clear'\n | 'setInputValue'\n | 'highlight'\n | 'edit'\n>\n\nexport const XhTagsInputRoot = defineComponent({\n name: 'XhTagsInputRoot',\n // 有 connect 与机器兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n // 缺席值 undefined 表示非受控\n value: { type: Array as PropType<string[]> },\n defaultValue: { type: Array as PropType<string[]> },\n inputValue: { type: String },\n defaultInputValue: { type: String },\n max: { type: Number },\n allowOverflow: Boolean,\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n invalid: { type: Boolean, default: undefined },\n showCount: Boolean,\n name: { type: String },\n placeholder: { type: String },\n delimiter: { type: [String, Array] as PropType<string | string[]> },\n validate: { type: Function as PropType<TagsInputProps['validate']> },\n addOnPaste: Boolean,\n editable: Boolean,\n blurBehavior: { type: String as PropType<TagsInputBlurBehavior | null> },\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n translations: { type: Object as PropType<Partial<TagsInputTranslations>> },\n },\n // value-change 携带 { value },update:value 携带裸数组;输入文本走 input-value-change 一路\n emits: {\n 'value-change': (_details: PayloadOf<TagsInputProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<TagsInputProps, 'onValueChange'>['value']) => true,\n 'input-value-change': (_details: PayloadOf<TagsInputProps, 'onInputValueChange'>) => true,\n 'update:inputValue': (_inputValue: PayloadOf<TagsInputProps, 'onInputValueChange'>['inputValue']) => true,\n 'tag-reject': (_details: PayloadOf<TagsInputProps, 'onTagReject'>) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TagsInputRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const onValueChange: TagsInputProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const onInputValueChange: TagsInputProps['onInputValueChange'] = (details) => {\n emit('input-value-change', details)\n emit('update:inputValue', details.inputValue)\n }\n const onTagReject: TagsInputProps['onTagReject'] = details => emit('tag-reject', details)\n const ctx = useTagsInput(withXhConfig('tags-input', useFormControlProps(props)) as TagsInputProps, { onValueChange, onInputValueChange, onTagReject })\n provideTagsInput(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n value: ctx.api.value.value,\n count: ctx.api.value.count,\n inputValue: ctx.api.value.inputValue,\n empty: ctx.api.value.empty,\n atMax: ctx.api.value.atMax,\n overflow: ctx.api.value.overflow,\n highlightedValue: ctx.api.value.highlightedValue,\n editedValue: ctx.api.value.editedValue,\n canClear: ctx.api.value.canClear,\n setValue: ctx.api.value.setValue,\n addValue: ctx.api.value.addValue,\n deleteValue: ctx.api.value.deleteValue,\n clear: ctx.api.value.clear,\n setInputValue: ctx.api.value.setInputValue,\n highlight: ctx.api.value.highlight,\n edit: ctx.api.value.edit,\n }))\n },\n})\n\nexport const XhTagsInputLabel = defineComponent({\n name: 'XhTagsInputLabel',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n // 用原生 label,getLabelProps 的 for 指向输入框\n return () => h('label', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTagsInputControl = defineComponent({\n name: 'XhTagsInputControl',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n return () => h('div', { ...(ctx.api.value.getControlProps() as Record<string, unknown>), ref: ctx.controlRef }, slots.default?.())\n },\n})\n\nexport const XhTagsInputInput = defineComponent({\n name: 'XhTagsInputInput',\n setup() {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useTagsInputContext()\n return () => h('input', fieldLabel.value({ ...fieldWiring.value, ...ctx.api.value.getInputProps() as Record<string, unknown> }))\n },\n})\n\nexport const XhTagsInputItem = defineComponent({\n name: 'XhTagsInputItem',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTagsInputContext()\n const item = computed<TagsInputItemProps>(() => ({ value: props.value }))\n provideTagsInputItem({ item })\n // 本标签持有焦点时,value 变更或卸载都上报焦点离场以终止编辑会话\n const itemEl = ref<HTMLElement | null>(null)\n const holdsFocus = (): boolean => {\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return false\n const active = service.scope.getActiveElement()\n return !!itemEl.value && !!active && (itemEl.value === active || itemEl.value.contains(active))\n }\n watch(() => props.value, (next, prev) => {\n if (next !== prev && holdsFocus())\n ctx.service.send({ type: 'ITEM.FOCUS_LOST' })\n })\n onBeforeUnmount(() => {\n if (holdsFocus())\n ctx.service.send({ type: 'ITEM.FOCUS_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\n/** 标签的预览:渲染为库内 tag 的 root(data-scope=\"tag\"),就地编辑时由 tag 收起。 */\nexport const XhTagsInputItemPreview = defineComponent({\n name: 'XhTagsInputItemPreview',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('span', ctx.api.value.getItemPreviewProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 标签文字:渲染为 tag 的 label,截断落在这一层。 */\nexport const XhTagsInputItemText = defineComponent({\n name: 'XhTagsInputItemText',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 删除按钮:渲染为所在标签那份 tag 的 close-trigger,不占 Tab 位;禁用与只读时保留位置、原生 disabled。 */\nexport const XhTagsInputItemDeleteTrigger = defineComponent({\n name: 'XhTagsInputItemDeleteTrigger',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('button', ctx.api.value.getItemDeleteTriggerProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTagsInputItemInput = defineComponent({\n name: 'XhTagsInputItemInput',\n setup() {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('input', ctx.api.value.getItemInputProps(item.value) as Record<string, unknown>)\n },\n})\n\nexport const XhTagsInputClearTrigger = defineComponent({\n name: 'XhTagsInputClearTrigger',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 计数:未写内容时渲染「已用 / 上限」,未设上限时只渲染已用。 */\nexport const XhTagsInputCount = defineComponent({\n name: 'XhTagsInputCount',\n slots: Object as SlotsType<{\n default?: (props: TagsInputCountSlotProps) => VNode[]\n }>,\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n return () => {\n const api = ctx.api.value\n const fallback = api.max === undefined ? `${api.count}` : `${api.count} / ${api.max}`\n return h(\n 'span',\n api.getCountProps() as Record<string, unknown>,\n slots.default?.({ count: api.count, max: api.max, atMax: api.atMax, overflow: api.overflow }) ?? fallback,\n )\n }\n },\n})\n\nexport const XhTagsInputHiddenInput = defineComponent({\n name: 'XhTagsInputHiddenInput',\n setup() {\n const ctx = useTagsInputContext()\n return () => h('input', ctx.api.value.getHiddenInputProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ComputedRef } from "vue";
1
+ import { ComputedRef, Ref } from "vue";
2
2
  import { Service } from "@xihan-ui/core";
3
3
  import { TagsInputApi, TagsInputSchema } from "@xihan-ui/headless";
4
4
  //#region src/components/tags-input/use-tags-input.d.ts
@@ -6,8 +6,10 @@ interface TagsInputContext {
6
6
  api: ComputedRef<TagsInputApi>;
7
7
  /** 状态机实例,供部件上报 DOM 侧的事实(如标签节点带着焦点离场)。 */
8
8
  service: Service<TagsInputSchema>;
9
+ /** 标签所在的容器:列表动效接在它上面。 */
10
+ controlRef: Ref<HTMLElement | null>;
9
11
  }
10
- declare function useTagsInput(props: TagsInputSchema['props'], handlers?: Pick<TagsInputSchema['props'], 'onValueChange' | 'onInputValueChange'>): TagsInputContext;
12
+ declare function useTagsInput(props: TagsInputSchema['props'], handlers?: Pick<TagsInputSchema['props'], 'onValueChange' | 'onInputValueChange' | 'onTagReject'>): TagsInputContext;
11
13
  //#endregion
12
14
  export { TagsInputContext, useTagsInput };
13
15
  //# sourceMappingURL=use-tags-input.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-tags-input.d.ts","names":[],"sources":["../../../src/components/tags-input/use-tags-input.ts"],"mappings":";;;;UAiBiB;EACf,KAAK,YAAY;;EAEjB,SAAS,QAAQ;;iBAGH,aACd,OAAO,0BACP,WAAU,KAAK,oEACd"}
1
+ {"version":3,"file":"use-tags-input.d.ts","names":[],"sources":["../../../src/components/tags-input/use-tags-input.ts"],"mappings":";;;;UAiBiB;EACf,KAAK,YAAY;;EAEjB,SAAS,QAAQ;;EAEjB,YAAY,IAAI;;iBAGF,aACd,OAAO,0BACP,WAAU,KAAK,oFACd"}
@@ -1,7 +1,7 @@
1
1
  import { vueNormalize } from "../../runtime/normalize-props.js";
2
2
  import { useMachine } from "../../runtime/use-machine.js";
3
3
  import { createVueIdGenerator } from "../../runtime/vue-id.js";
4
- import { computed } from "vue";
4
+ import { computed, ref } from "vue";
5
5
  import { createScope } from "@xihan-ui/core";
6
6
  import { connectTagsInput, tagsInputMachine } from "@xihan-ui/headless";
7
7
  //#region src/components/tags-input/use-tags-input.ts
@@ -10,9 +10,12 @@ function useTagsInput(props, handlers = {}) {
10
10
  ...props,
11
11
  ...handlers
12
12
  }), createScope(null, createVueIdGenerator()));
13
+ const controlRef = ref(null);
14
+ service.refs.set("getControlEl", () => controlRef.value);
13
15
  return {
14
16
  api: computed(() => connectTagsInput(service, vueNormalize)),
15
- service
17
+ service,
18
+ controlRef
16
19
  };
17
20
  }
18
21
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"use-tags-input.js","names":[],"sources":["../../../src/components/tags-input/use-tags-input.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 tags input 相关实现。\n\nimport type { Service } from '@xihan-ui/core'\nimport type { TagsInputApi, TagsInputSchema } from '@xihan-ui/headless'\nimport type { ComputedRef } from 'vue'\nimport { createScope } from '@xihan-ui/core'\nimport { connectTagsInput, tagsInputMachine } from '@xihan-ui/headless'\nimport { computed } from 'vue'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface TagsInputContext {\n api: ComputedRef<TagsInputApi>\n /** 状态机实例,供部件上报 DOM 侧的事实(如标签节点带着焦点离场)。 */\n service: Service<TagsInputSchema>\n}\n\nexport function useTagsInput(\n props: TagsInputSchema['props'],\n handlers: Pick<TagsInputSchema['props'], 'onValueChange' | 'onInputValueChange'> = {},\n): TagsInputContext {\n // scope id 走 Vue 的 useId,保证同页多实例的 IDREF 不相撞\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n const service = useMachine(tagsInputMachine, () => ({ ...props, ...handlers }), scope)\n const api = computed(() => connectTagsInput(service, vueNormalize))\n return { api, service }\n}\n"],"mappings":";;;;;;;AAuBA,SAAgB,aACd,OACA,WAAmF,CAAC,GAClE;CAIlB,MAAM,UAAU,WAAW,yBAAyB;EAAE,GAAG;EAAO,GAAG;CAAS,IAD9D,YAAY,MADZ,qBACsB,CACgD,CAAC;CAErF,OAAO;EAAE,KADG,eAAe,iBAAiB,SAAS,YAAY,CACtD;EAAG;CAAQ;AACxB"}
1
+ {"version":3,"file":"use-tags-input.js","names":[],"sources":["../../../src/components/tags-input/use-tags-input.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 tags input 相关实现。\n\nimport type { Service } from '@xihan-ui/core'\nimport type { TagsInputApi, TagsInputSchema } from '@xihan-ui/headless'\nimport type { ComputedRef, Ref } from 'vue'\nimport { createScope } from '@xihan-ui/core'\nimport { connectTagsInput, tagsInputMachine } from '@xihan-ui/headless'\nimport { computed, ref } from 'vue'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface TagsInputContext {\n api: ComputedRef<TagsInputApi>\n /** 状态机实例,供部件上报 DOM 侧的事实(如标签节点带着焦点离场)。 */\n service: Service<TagsInputSchema>\n /** 标签所在的容器:列表动效接在它上面。 */\n controlRef: Ref<HTMLElement | null>\n}\n\nexport function useTagsInput(\n props: TagsInputSchema['props'],\n handlers: Pick<TagsInputSchema['props'], 'onValueChange' | 'onInputValueChange' | 'onTagReject'> = {},\n): TagsInputContext {\n // scope id 走 Vue 的 useId,保证同页多实例的 IDREF 不相撞\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n const service = useMachine(tagsInputMachine, () => ({ ...props, ...handlers }), scope)\n const controlRef = ref<HTMLElement | null>(null)\n // 传 getter 而非节点本身,ref 在挂载后才有值\n service.refs.set('getControlEl', () => controlRef.value)\n const api = computed(() => connectTagsInput(service, vueNormalize))\n return { api, service, controlRef }\n}\n"],"mappings":";;;;;;;AAyBA,SAAgB,aACd,OACA,WAAmG,CAAC,GAClF;CAIlB,MAAM,UAAU,WAAW,yBAAyB;EAAE,GAAG;EAAO,GAAG;CAAS,IAD9D,YAAY,MADZ,qBACsB,CACgD,CAAC;CACrF,MAAM,aAAa,IAAwB,IAAI;CAE/C,QAAQ,KAAK,IAAI,sBAAsB,WAAW,KAAK;CAEvD,OAAO;EAAE,KADG,eAAe,iBAAiB,SAAS,YAAY,CACtD;EAAG;EAAS;CAAW;AACpC"}
@@ -1,7 +1,7 @@
1
1
  import { PayloadOf } from "../../runtime/payload.js";
2
2
  import { PropType, SlotsType, VNode } from "vue";
3
3
  import { ControlVariant, Direction, Placement, Size, Tone } from "@xihan-ui/core";
4
- import { TimeGranularity, TimeHourCycle, TimePickerApi, TimePickerColumn, TimePickerColumnUnit, TimePickerPreset, TimePickerPresetState, TimePickerSchema, TimeSegmentType } from "@xihan-ui/headless";
4
+ import { TimeGranularity, TimeHourCycle, TimePickerApi, TimePickerColumn, TimePickerColumnUnit, TimePickerPreset, TimePickerPresetState, TimePickerSchema, TimeSegmentType, TimeStep, TimeUnavailablePredicate } from "@xihan-ui/headless";
5
5
  //#region src/components/time-picker/time-picker.d.ts
6
6
  type TimePickerProps = TimePickerSchema['props'];
7
7
  /** 默认插槽的载荷:浮层开合与当前值、值状态标志、当前的段与列,以及开合、写值、清空的动作。 */
@@ -41,8 +41,9 @@ declare const XhTimePickerRoot: import("vue").DefineComponent<import("vue").Extr
41
41
  granularity: {
42
42
  type: PropType<TimeGranularity>;
43
43
  };
44
- step: {
45
- type: NumberConstructor;
44
+ /** 按单位的步进:`{ hour?, minute?, second? }`,各单位缺省 1。 */
45
+ timeStep: {
46
+ type: PropType<TimeStep>;
46
47
  };
47
48
  /** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */
48
49
  presets: {
@@ -55,8 +56,9 @@ declare const XhTimePickerRoot: import("vue").DefineComponent<import("vue").Extr
55
56
  translations: {
56
57
  type: PropType<TimePickerProps["translations"]>;
57
58
  };
59
+ /** 逐格可选性:时列按 24 小时制给值,第三个参数带已选的时与分。 */
58
60
  isTimeUnavailable: {
59
- type: PropType<(value: string, unit: TimePickerColumnUnit) => boolean>;
61
+ type: PropType<TimeUnavailablePredicate>;
60
62
  };
61
63
  readOnly: {
62
64
  type: BooleanConstructor;
@@ -126,8 +128,9 @@ declare const XhTimePickerRoot: import("vue").DefineComponent<import("vue").Extr
126
128
  granularity: {
127
129
  type: PropType<TimeGranularity>;
128
130
  };
129
- step: {
130
- type: NumberConstructor;
131
+ /** 按单位的步进:`{ hour?, minute?, second? }`,各单位缺省 1。 */
132
+ timeStep: {
133
+ type: PropType<TimeStep>;
131
134
  };
132
135
  /** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */
133
136
  presets: {
@@ -140,8 +143,9 @@ declare const XhTimePickerRoot: import("vue").DefineComponent<import("vue").Extr
140
143
  translations: {
141
144
  type: PropType<TimePickerProps["translations"]>;
142
145
  };
146
+ /** 逐格可选性:时列按 24 小时制给值,第三个参数带已选的时与分。 */
143
147
  isTimeUnavailable: {
144
- type: PropType<(value: string, unit: TimePickerColumnUnit) => boolean>;
148
+ type: PropType<TimeUnavailablePredicate>;
145
149
  };
146
150
  readOnly: {
147
151
  type: BooleanConstructor;
@@ -1 +1 @@
1
- {"version":3,"file":"time-picker.d.ts","names":[],"sources":["../../../src/components/time-picker/time-picker.ts"],"mappings":";;;;;KAoCK,kBAAkB;;KAGX,0BAA0B,KACpC;;UAce;EACf,SAAS;;;UAIM;EACf,kBAAkB;;cAGP,gCAAgB,8BAAA;;;;;;;;;;;;;;;;;;;;;;IAWI,MAAA,SAAS;;;IACP,MAAA,SAAS;;;;;;;IAGd,MAAA,SAAS;;;;;;;IAEH,MAAA,SAAS;;;IACF,MAAA,UAAU,eAAe,MAAM;;;;;;;;;;;;;;;;;;IAK3C,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACJ,MAAA,SAAS;;;;;;;IAGf,MAAA,SAAS;;;;;EAIL,iBAAA,UAAA,UAAU;EACX,gBAAA,UAAA,UAAU;EACX,iBAAA,QAAA,UAAU;EACZ,gBAAA,OAAA,UAAU;;;;;;;;;;;;;;;;;;;;;;;IAzBJ,MAAA,SAAS;;;IACP,MAAA,SAAS;;;;;;;IAGd,MAAA,SAAS;;;;;;;IAEH,MAAA,SAAS;;;IACF,MAAA,UAAU,eAAe,MAAM;;;;;;;;;;;;;;;;;;IAK3C,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACJ,MAAA,SAAS;;;;;;;IAGf,MAAA,SAAS;;;;;;;;;;;;;;;EAUtB,WAAC,OAAO,4BAA4B;kCA8BhD;cAEW,iCAAiB,0BAAA,oBAAA,4BAAA;;8BAO5B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAS9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAMnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,8BAAA;;IAID,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;;MAWtC,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAe9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAMnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,sCAAsB,8BAAA;;;IAIF,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;MAcxC,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAY9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;;;EAItB,WAAC,OAAO,+BAA+B;kCAoCnD;cAEW,kCAAkB,8BAAA;;;;;;;;;;;;;;;;EAQjB,gBAAM;kCAclB;cAEW,kCAAkB,8BAAA;;IAGH,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;;;EAGvB,WAAC,OAAO,8BAA8B;kCA6BlD;cAEW,gCAAgB,8BAAA;;;;;;;;;;;;;;MAgB3B,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAMlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
1
+ {"version":3,"file":"time-picker.d.ts","names":[],"sources":["../../../src/components/time-picker/time-picker.ts"],"mappings":";;;;;KAsCK,kBAAkB;;KAGX,0BAA0B,KACpC;;UAce;EACf,SAAS;;;UAIM;EACf,kBAAkB;;cAGP,gCAAgB,8BAAA;;;;;;;;;;;;;;;;;;;;;;IAWI,MAAA,SAAS;;;IACP,MAAA,SAAS;;;;IAEZ,MAAA,SAAS;;;;IAEX,MAAA,SAAS;;;;;;;IAEH,MAAA,SAAS;;;;IAEF,MAAA,SAAS;;;;;;;;;;;;;;;;;;IAKrB,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACJ,MAAA,SAAS;;;;;;;IAGf,MAAA,SAAS;;;;;EAIL,iBAAA,UAAA,UAAU;EACX,gBAAA,UAAA,UAAU;EACX,iBAAA,QAAA,UAAU;EACZ,gBAAA,OAAA,UAAU;;;;;;;;;;;;;;;;;;;;;;;IA3BJ,MAAA,SAAS;;;IACP,MAAA,SAAS;;;;IAEZ,MAAA,SAAS;;;;IAEX,MAAA,SAAS;;;;;;;IAEH,MAAA,SAAS;;;;IAEF,MAAA,SAAS;;;;;;;;;;;;;;;;;;IAKrB,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACJ,MAAA,SAAS;;;;;;;IAGf,MAAA,SAAS;;;;;;;;;;;;;;;EAUtB,WAAC,OAAO,4BAA4B;kCA8BhD;cAEW,iCAAiB,0BAAA,oBAAA,4BAAA;;8BAO5B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAS9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAMnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,8BAAA;;IAID,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;;MAWtC,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAe9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAMnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,sCAAsB,8BAAA;;;IAIF,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;MAcxC,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAY9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;;;EAItB,WAAC,OAAO,+BAA+B;kCAoCnD;cAEW,kCAAkB,8BAAA;;;;;;;;;;;;;;;;EAQjB,gBAAM;kCAclB;cAEW,kCAAkB,8BAAA;;IAGH,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;;;EAGvB,WAAC,OAAO,8BAA8B;kCA6BlD;cAEW,gCAAgB,8BAAA;;;;;;;;;;;;;;MAgB3B,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAMlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
@@ -1,9 +1,9 @@
1
1
  import { withXhConfig } from "../../config/config.js";
2
2
  import { XhPortal } from "../../runtime/portal.js";
3
+ import { slotPaints } from "../../runtime/slot-content.js";
3
4
  import { useScrollbars } from "../../runtime/use-scrollbars.js";
4
5
  import { useFormControlProps } from "../form/use-form-control.js";
5
6
  import { useFieldLabelWiring, useFieldStateWiring } from "../field/use-field-control.js";
6
- import { slotPaints } from "../../runtime/slot-content.js";
7
7
  import { provideTimePicker, provideTimePickerColumn, useTimePickerColumnContext, useTimePickerContext } from "./context.js";
8
8
  import { useTimePicker } from "./use-time-picker.js";
9
9
  import { computed, defineComponent, h, mergeProps, onUpdated, ref } from "vue";
@@ -23,7 +23,8 @@ const XhTimePickerRoot = defineComponent({
23
23
  locale: { type: String },
24
24
  hourCycle: { type: Number },
25
25
  granularity: { type: String },
26
- step: { type: Number },
26
+ /** 按单位的步进:`{ hour?, minute?, second? }`,各单位缺省 1。 */
27
+ timeStep: { type: Object },
27
28
  /** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */
28
29
  presets: { type: Array },
29
30
  disabled: {
@@ -31,6 +32,7 @@ const XhTimePickerRoot = defineComponent({
31
32
  default: void 0
32
33
  },
33
34
  translations: { type: Object },
35
+ /** 逐格可选性:时列按 24 小时制给值,第三个参数带已选的时与分。 */
34
36
  isTimeUnavailable: { type: Function },
35
37
  readOnly: {
36
38
  type: Boolean,
@@ -1 +1 @@
1
- {"version":3,"file":"time-picker.js","names":[],"sources":["../../../src/components/time-picker/time-picker.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// 提供 time picker 相关实现。\n\nimport type { ControlVariant, Direction, Placement, Size, Tone } from '@xihan-ui/core'\nimport type {\n TimeGranularity,\n TimeHourCycle,\n TimePickerApi,\n TimePickerColumn,\n TimePickerColumnUnit,\n TimePickerPreset,\n TimePickerPresetState,\n TimePickerSchema,\n TimeSegmentType,\n} from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { computed, defineComponent, h, mergeProps, onUpdated, ref } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { XhPortal } from '../../runtime/portal'\nimport { slotPaints } 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 {\n provideTimePicker,\n provideTimePickerColumn,\n useTimePickerColumnContext,\n useTimePickerContext,\n} from './context'\nimport { useTimePicker } from './use-time-picker'\n\ntype TimePickerProps = TimePickerSchema['props']\n\n/** 默认插槽的载荷:浮层开合与当前值、值状态标志、当前的段与列,以及开合、写值、清空的动作。 */\nexport type TimePickerRootSlotProps = Pick<\n TimePickerApi,\n | 'open'\n | 'value'\n | 'empty'\n | 'outOfRange'\n | 'segments'\n | 'columns'\n | 'canClear'\n | 'setOpen'\n | 'setValue'\n | 'clear'\n>\n\n/** 默认插槽的载荷:该列当前的可选值。 */\nexport interface TimePickerColumnSlotProps {\n options: TimePickerColumn['options']\n}\n\n/** 快捷选项列默认插槽的载荷:逐条的投影,作者据此自行铺设条目。 */\nexport interface TimePickerPresetsSlotProps {\n presets: readonly TimePickerPresetState[]\n}\n\nexport const XhTimePickerRoot = defineComponent({\n name: 'XhTimePickerRoot',\n // 缺省值由 connect 给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n value: { type: String },\n defaultValue: { type: String },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n min: { type: String },\n max: { type: String },\n locale: { type: String },\n hourCycle: { type: Number as PropType<TimeHourCycle> },\n granularity: { type: String as PropType<TimeGranularity> },\n step: { type: Number },\n /** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */\n presets: { type: Array as PropType<TimePickerPreset[]> },\n disabled: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<TimePickerProps['translations']> },\n isTimeUnavailable: { type: Function as PropType<(value: string, unit: TimePickerColumnUnit) => boolean> },\n readOnly: { type: Boolean, default: undefined },\n invalid: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n name: { type: String },\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n /** 文字方向;浮层迁移到落点后无法继承作者子树上的方向,需要 RTL 时显式提供。 */\n dir: { type: String as PropType<Direction> },\n },\n // *-change 携带 details 对象,update:* 携带裸值\n emits: {\n 'value-change': (_details: PayloadOf<TimePickerProps, 'onValueChange'>) => true,\n 'open-change': (_details: PayloadOf<TimePickerProps, 'onOpenChange'>) => true,\n 'update:value': (_value: PayloadOf<TimePickerProps, 'onValueChange'>['value']) => true,\n 'update:open': (_open: PayloadOf<TimePickerProps, 'onOpenChange'>['open']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TimePickerRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: TimePickerProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyOpen: TimePickerProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const ctx = useTimePicker(withXhConfig('time-picker', useFormControlProps(props)) as TimePickerProps, {\n onValueChange: notifyValue,\n onOpenChange: notifyOpen,\n })\n provideTimePicker(ctx)\n\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n open: ctx.api.value.open,\n value: ctx.api.value.value,\n empty: ctx.api.value.empty,\n outOfRange: ctx.api.value.outOfRange,\n segments: ctx.api.value.segments,\n columns: ctx.api.value.columns,\n canClear: ctx.api.value.canClear,\n setOpen: ctx.api.value.setOpen,\n setValue: ctx.api.value.setValue,\n clear: ctx.api.value.clear,\n }))\n },\n})\n\nexport const XhTimePickerLabel = defineComponent({\n name: 'XhTimePickerLabel',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\n // 仍用原生 label 保持表单语义,点标题聚焦第一段由连接层的 click 接管\n return () => h('label', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTimePickerControl = defineComponent({\n name: 'XhTimePickerControl',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\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 XhTimePickerSegmentGroup = defineComponent({\n name: 'XhTimePickerSegmentGroup',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\n return () => h('div', ctx.api.value.getSegmentGroupProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTimePickerSegment = defineComponent({\n name: 'XhTimePickerSegment',\n props: {\n // 段的身份由作者声明\n segment: { type: String as PropType<TimeSegmentType>, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTimePickerContext()\n // 有插槽用插槽,否则显示该段的文字,空段为占位串\n return () => h(\n 'span',\n ctx.api.value.getSegmentProps({ segment: props.segment }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.getSegmentText({ segment: props.segment }),\n )\n },\n})\n\nexport const XhTimePickerTrigger = defineComponent({\n name: 'XhTimePickerTrigger',\n setup(_, { slots }) {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useTimePickerContext()\n return () => h('button', fieldLabel.value({\n ...fieldWiring.value,\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n // 归还焦点要落到它身上:锚点取的是整个输入行,那一层不可聚焦\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n }), slots.default?.())\n },\n})\n\nexport const XhTimePickerClearTrigger = defineComponent({\n name: 'XhTimePickerClearTrigger',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTimePickerPositioner = defineComponent({\n name: 'XhTimePickerPositioner',\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 = useTimePickerContext()\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value, source: ctx.controlRef }, () => [\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?.()),\n ])\n },\n})\n\nexport const XhTimePickerContent = defineComponent({\n name: 'XhTimePickerContent',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\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 XhTimePickerPresetGroup = defineComponent({\n name: 'XhTimePickerPresetGroup',\n slots: Object as SlotsType<{\n /** 自行铺设条目;未写时按 presets 数据自动铺设,两者产出的 DOM 一致。 */\n default?: (props: TimePickerPresetsSlotProps) => VNode[]\n }>,\n // 根是片段(选项列节点 + 贴层的条子),Vue 不会把直通属性合上去:作者写的 class、style 与 data-* 自己接住落到列节点上\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n const ctx = useTimePickerContext()\n const presetGroupRef = ref<HTMLElement | null>(null)\n // 快捷选项列定高自己竖滚:条子贴在它的盒子上、紧跟在它后面(浮层 4px 档)\n const bars = useScrollbars({\n scrollable: () => presetGroupRef.value,\n anchor: 'layer',\n props: () => ({ dir: (ctx.api.value.getPositionerProps() as { dir?: Direction }).dir, size: 'sm' }),\n })\n onUpdated(() => bars.measure())\n return () => {\n const api = ctx.api.value\n const authored = slots.default?.({ presets: api.presets })\n return [\n h(\n 'div',\n {\n ...mergeProps(api.getPresetGroupProps() as Record<string, unknown>, attrs),\n ref: (el: unknown) => { presetGroupRef.value = el as HTMLElement },\n },\n slotPaints(authored)\n ? authored\n : api.presets.map(preset => h(\n 'div',\n { ...api.getPresetProps({ value: preset.value }) as Record<string, unknown>, key: preset.value },\n preset.label,\n )),\n ),\n ...bars.render(),\n ]\n }\n },\n})\n\nexport const XhTimePickerPreset = defineComponent({\n name: 'XhTimePickerPreset',\n props: {\n /** 该条目的身份,与 presets 数据中的 value 逐字对应。 */\n value: { type: String, required: true },\n },\n slots: Object as SlotsType<{\n /** 条目内容;未写时使用数据中的 label。 */\n default?: () => VNode[]\n }>,\n setup(props, { slots }) {\n const ctx = useTimePickerContext()\n return () => {\n const api = ctx.api.value\n const authored = slots.default?.()\n return h(\n 'div',\n api.getPresetProps({ value: props.value }) as Record<string, unknown>,\n slotPaints(authored) ? authored : api.presets.find(p => p.value === props.value)?.label,\n )\n }\n },\n})\n\nexport const XhTimePickerColumn = defineComponent({\n name: 'XhTimePickerColumn',\n props: {\n unit: { type: String as PropType<TimePickerColumnUnit>, required: true },\n },\n slots: Object as SlotsType<{\n default?: (props: TimePickerColumnSlotProps) => VNode[]\n }>,\n // 根是片段(列节点 + 贴层的条子),Vue 不会把直通属性合上去:作者写的 class、style 与 data-* 自己接住落到列节点上\n inheritAttrs: false,\n setup(props, { slots, attrs }) {\n const ctx = useTimePickerContext()\n const unit = computed(() => props.unit)\n // 下传单位,供列内选项取到自己归哪一列\n provideTimePickerColumn({ unit })\n const columnRef = ref<HTMLElement | null>(null)\n // 定高的时间列自己竖滚:条子贴在本列的盒子上、紧跟在它后面(浮层 4px 档)\n const bars = useScrollbars({\n scrollable: () => columnRef.value,\n anchor: 'layer',\n props: () => ({ dir: (ctx.api.value.getPositionerProps() as { dir?: Direction }).dir, size: 'sm' }),\n })\n onUpdated(() => bars.measure())\n return () => [\n h(\n 'div',\n {\n ...mergeProps(ctx.api.value.getColumnProps({ unit: props.unit }) as Record<string, unknown>, attrs),\n ref: (el: unknown) => { columnRef.value = el as HTMLElement },\n },\n slots.default?.({ options: ctx.api.value.columns.find(c => c.unit === props.unit)?.options ?? [] }),\n ),\n ...bars.render(),\n ]\n },\n})\n\nexport const XhTimePickerItem = defineComponent({\n name: 'XhTimePickerItem',\n props: {\n /** 两位补零的显示串('09' / '30');上下午列写 '00' / '01'。 */\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTimePickerContext()\n const { unit } = useTimePickerColumnContext()\n // 有插槽用插槽,否则显示这一格该显示的文字(上下午列按 locale 译成「上午 / 下午」)\n return () => h(\n 'div',\n ctx.api.value.getItemProps({ unit: unit.value, value: props.value }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.getItemText({ unit: unit.value, value: props.value }),\n )\n },\n})\n\nexport const XhTimePickerHiddenInput = defineComponent({\n name: 'XhTimePickerHiddenInput',\n setup() {\n const ctx = useTimePickerContext()\n return () => h('input', ctx.api.value.getHiddenInputProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"time-picker.js","names":[],"sources":["../../../src/components/time-picker/time-picker.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// 提供 time picker 相关实现。\n\nimport type { ControlVariant, Direction, Placement, Size, Tone } from '@xihan-ui/core'\nimport type {\n TimeGranularity,\n TimeHourCycle,\n TimePickerApi,\n TimePickerColumn,\n TimePickerColumnUnit,\n TimePickerPreset,\n TimePickerPresetState,\n TimePickerSchema,\n TimeSegmentType,\n TimeStep,\n TimeUnavailablePredicate,\n} from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { computed, defineComponent, h, mergeProps, onUpdated, ref } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { XhPortal } from '../../runtime/portal'\nimport { slotPaints } 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 {\n provideTimePicker,\n provideTimePickerColumn,\n useTimePickerColumnContext,\n useTimePickerContext,\n} from './context'\nimport { useTimePicker } from './use-time-picker'\n\ntype TimePickerProps = TimePickerSchema['props']\n\n/** 默认插槽的载荷:浮层开合与当前值、值状态标志、当前的段与列,以及开合、写值、清空的动作。 */\nexport type TimePickerRootSlotProps = Pick<\n TimePickerApi,\n | 'open'\n | 'value'\n | 'empty'\n | 'outOfRange'\n | 'segments'\n | 'columns'\n | 'canClear'\n | 'setOpen'\n | 'setValue'\n | 'clear'\n>\n\n/** 默认插槽的载荷:该列当前的可选值。 */\nexport interface TimePickerColumnSlotProps {\n options: TimePickerColumn['options']\n}\n\n/** 快捷选项列默认插槽的载荷:逐条的投影,作者据此自行铺设条目。 */\nexport interface TimePickerPresetsSlotProps {\n presets: readonly TimePickerPresetState[]\n}\n\nexport const XhTimePickerRoot = defineComponent({\n name: 'XhTimePickerRoot',\n // 缺省值由 connect 给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n value: { type: String },\n defaultValue: { type: String },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n min: { type: String },\n max: { type: String },\n locale: { type: String },\n hourCycle: { type: Number as PropType<TimeHourCycle> },\n granularity: { type: String as PropType<TimeGranularity> },\n /** 按单位的步进:`{ hour?, minute?, second? }`,各单位缺省 1。 */\n timeStep: { type: Object as PropType<TimeStep> },\n /** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */\n presets: { type: Array as PropType<TimePickerPreset[]> },\n disabled: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<TimePickerProps['translations']> },\n /** 逐格可选性:时列按 24 小时制给值,第三个参数带已选的时与分。 */\n isTimeUnavailable: { type: Function as PropType<TimeUnavailablePredicate> },\n readOnly: { type: Boolean, default: undefined },\n invalid: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n name: { type: String },\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n /** 文字方向;浮层迁移到落点后无法继承作者子树上的方向,需要 RTL 时显式提供。 */\n dir: { type: String as PropType<Direction> },\n },\n // *-change 携带 details 对象,update:* 携带裸值\n emits: {\n 'value-change': (_details: PayloadOf<TimePickerProps, 'onValueChange'>) => true,\n 'open-change': (_details: PayloadOf<TimePickerProps, 'onOpenChange'>) => true,\n 'update:value': (_value: PayloadOf<TimePickerProps, 'onValueChange'>['value']) => true,\n 'update:open': (_open: PayloadOf<TimePickerProps, 'onOpenChange'>['open']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TimePickerRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: TimePickerProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyOpen: TimePickerProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const ctx = useTimePicker(withXhConfig('time-picker', useFormControlProps(props)) as TimePickerProps, {\n onValueChange: notifyValue,\n onOpenChange: notifyOpen,\n })\n provideTimePicker(ctx)\n\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n open: ctx.api.value.open,\n value: ctx.api.value.value,\n empty: ctx.api.value.empty,\n outOfRange: ctx.api.value.outOfRange,\n segments: ctx.api.value.segments,\n columns: ctx.api.value.columns,\n canClear: ctx.api.value.canClear,\n setOpen: ctx.api.value.setOpen,\n setValue: ctx.api.value.setValue,\n clear: ctx.api.value.clear,\n }))\n },\n})\n\nexport const XhTimePickerLabel = defineComponent({\n name: 'XhTimePickerLabel',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\n // 仍用原生 label 保持表单语义,点标题聚焦第一段由连接层的 click 接管\n return () => h('label', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTimePickerControl = defineComponent({\n name: 'XhTimePickerControl',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\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 XhTimePickerSegmentGroup = defineComponent({\n name: 'XhTimePickerSegmentGroup',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\n return () => h('div', ctx.api.value.getSegmentGroupProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTimePickerSegment = defineComponent({\n name: 'XhTimePickerSegment',\n props: {\n // 段的身份由作者声明\n segment: { type: String as PropType<TimeSegmentType>, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTimePickerContext()\n // 有插槽用插槽,否则显示该段的文字,空段为占位串\n return () => h(\n 'span',\n ctx.api.value.getSegmentProps({ segment: props.segment }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.getSegmentText({ segment: props.segment }),\n )\n },\n})\n\nexport const XhTimePickerTrigger = defineComponent({\n name: 'XhTimePickerTrigger',\n setup(_, { slots }) {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useTimePickerContext()\n return () => h('button', fieldLabel.value({\n ...fieldWiring.value,\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n // 归还焦点要落到它身上:锚点取的是整个输入行,那一层不可聚焦\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n }), slots.default?.())\n },\n})\n\nexport const XhTimePickerClearTrigger = defineComponent({\n name: 'XhTimePickerClearTrigger',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTimePickerPositioner = defineComponent({\n name: 'XhTimePickerPositioner',\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 = useTimePickerContext()\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value, source: ctx.controlRef }, () => [\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?.()),\n ])\n },\n})\n\nexport const XhTimePickerContent = defineComponent({\n name: 'XhTimePickerContent',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\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 XhTimePickerPresetGroup = defineComponent({\n name: 'XhTimePickerPresetGroup',\n slots: Object as SlotsType<{\n /** 自行铺设条目;未写时按 presets 数据自动铺设,两者产出的 DOM 一致。 */\n default?: (props: TimePickerPresetsSlotProps) => VNode[]\n }>,\n // 根是片段(选项列节点 + 贴层的条子),Vue 不会把直通属性合上去:作者写的 class、style 与 data-* 自己接住落到列节点上\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n const ctx = useTimePickerContext()\n const presetGroupRef = ref<HTMLElement | null>(null)\n // 快捷选项列定高自己竖滚:条子贴在它的盒子上、紧跟在它后面(浮层 4px 档)\n const bars = useScrollbars({\n scrollable: () => presetGroupRef.value,\n anchor: 'layer',\n props: () => ({ dir: (ctx.api.value.getPositionerProps() as { dir?: Direction }).dir, size: 'sm' }),\n })\n onUpdated(() => bars.measure())\n return () => {\n const api = ctx.api.value\n const authored = slots.default?.({ presets: api.presets })\n return [\n h(\n 'div',\n {\n ...mergeProps(api.getPresetGroupProps() as Record<string, unknown>, attrs),\n ref: (el: unknown) => { presetGroupRef.value = el as HTMLElement },\n },\n slotPaints(authored)\n ? authored\n : api.presets.map(preset => h(\n 'div',\n { ...api.getPresetProps({ value: preset.value }) as Record<string, unknown>, key: preset.value },\n preset.label,\n )),\n ),\n ...bars.render(),\n ]\n }\n },\n})\n\nexport const XhTimePickerPreset = defineComponent({\n name: 'XhTimePickerPreset',\n props: {\n /** 该条目的身份,与 presets 数据中的 value 逐字对应。 */\n value: { type: String, required: true },\n },\n slots: Object as SlotsType<{\n /** 条目内容;未写时使用数据中的 label。 */\n default?: () => VNode[]\n }>,\n setup(props, { slots }) {\n const ctx = useTimePickerContext()\n return () => {\n const api = ctx.api.value\n const authored = slots.default?.()\n return h(\n 'div',\n api.getPresetProps({ value: props.value }) as Record<string, unknown>,\n slotPaints(authored) ? authored : api.presets.find(p => p.value === props.value)?.label,\n )\n }\n },\n})\n\nexport const XhTimePickerColumn = defineComponent({\n name: 'XhTimePickerColumn',\n props: {\n unit: { type: String as PropType<TimePickerColumnUnit>, required: true },\n },\n slots: Object as SlotsType<{\n default?: (props: TimePickerColumnSlotProps) => VNode[]\n }>,\n // 根是片段(列节点 + 贴层的条子),Vue 不会把直通属性合上去:作者写的 class、style 与 data-* 自己接住落到列节点上\n inheritAttrs: false,\n setup(props, { slots, attrs }) {\n const ctx = useTimePickerContext()\n const unit = computed(() => props.unit)\n // 下传单位,供列内选项取到自己归哪一列\n provideTimePickerColumn({ unit })\n const columnRef = ref<HTMLElement | null>(null)\n // 定高的时间列自己竖滚:条子贴在本列的盒子上、紧跟在它后面(浮层 4px 档)\n const bars = useScrollbars({\n scrollable: () => columnRef.value,\n anchor: 'layer',\n props: () => ({ dir: (ctx.api.value.getPositionerProps() as { dir?: Direction }).dir, size: 'sm' }),\n })\n onUpdated(() => bars.measure())\n return () => [\n h(\n 'div',\n {\n ...mergeProps(ctx.api.value.getColumnProps({ unit: props.unit }) as Record<string, unknown>, attrs),\n ref: (el: unknown) => { columnRef.value = el as HTMLElement },\n },\n slots.default?.({ options: ctx.api.value.columns.find(c => c.unit === props.unit)?.options ?? [] }),\n ),\n ...bars.render(),\n ]\n },\n})\n\nexport const XhTimePickerItem = defineComponent({\n name: 'XhTimePickerItem',\n props: {\n /** 两位补零的显示串('09' / '30');上下午列写 '00' / '01'。 */\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTimePickerContext()\n const { unit } = useTimePickerColumnContext()\n // 有插槽用插槽,否则显示这一格该显示的文字(上下午列按 locale 译成「上午 / 下午」)\n return () => h(\n 'div',\n ctx.api.value.getItemProps({ unit: unit.value, value: props.value }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.getItemText({ unit: unit.value, value: props.value }),\n )\n },\n})\n\nexport const XhTimePickerHiddenInput = defineComponent({\n name: 'XhTimePickerHiddenInput',\n setup() {\n const ctx = useTimePickerContext()\n return () => h('input', ctx.api.value.getHiddenInputProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { PayloadOf } from "../../runtime/payload.js";
2
2
  import { PropType, SlotsType, VNode } from "vue";
3
3
  import { ControlVariant, Direction, Placement, Size, Tone } from "@xihan-ui/core";
4
- import { TimeGranularity, TimeHourCycle, TimePickerColumn, TimePickerColumnUnit, TimeRangePickerApi, TimeRangePickerEndIndex, TimeRangePickerPreset, TimeRangePickerPresetState, TimeRangePickerSchema, TimeSegmentType } from "@xihan-ui/headless";
4
+ import { TimeGranularity, TimeHourCycle, TimePickerColumn, TimePickerColumnUnit, TimeRangePickerApi, TimeRangePickerPreset, TimeRangePickerPresetState, TimeRangePickerSchema, TimeSegmentType, TimeStep, TimeUnavailablePredicate } from "@xihan-ui/headless";
5
5
  //#region src/components/time-range-picker/time-range-picker.d.ts
6
6
  type TimeRangePickerProps = TimeRangePickerSchema['props'];
7
7
  /** 默认插槽的载荷:浮层开合与两端、值状态标志、当前的段与两组时列,以及开合、写值、清空的动作。 */
@@ -46,8 +46,9 @@ declare const XhTimeRangePickerRoot: import("vue").DefineComponent<import("vue")
46
46
  granularity: {
47
47
  type: PropType<TimeGranularity>;
48
48
  };
49
- step: {
50
- type: NumberConstructor;
49
+ /** 按单位的步进:`{ hour?, minute?, second? }`,各单位缺省 1。 */
50
+ timeStep: {
51
+ type: PropType<TimeStep>;
51
52
  };
52
53
  /** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */
53
54
  presets: {
@@ -60,8 +61,9 @@ declare const XhTimeRangePickerRoot: import("vue").DefineComponent<import("vue")
60
61
  translations: {
61
62
  type: PropType<TimeRangePickerProps["translations"]>;
62
63
  };
64
+ /** 逐格可选性:时列按 24 小时制给值,第三个参数带这一端已选的时分与端号。 */
63
65
  isTimeUnavailable: {
64
- type: PropType<(value: string, unit: TimePickerColumnUnit, index: TimeRangePickerEndIndex) => boolean>;
66
+ type: PropType<TimeUnavailablePredicate>;
65
67
  };
66
68
  readOnly: {
67
69
  type: BooleanConstructor;
@@ -135,8 +137,9 @@ declare const XhTimeRangePickerRoot: import("vue").DefineComponent<import("vue")
135
137
  granularity: {
136
138
  type: PropType<TimeGranularity>;
137
139
  };
138
- step: {
139
- type: NumberConstructor;
140
+ /** 按单位的步进:`{ hour?, minute?, second? }`,各单位缺省 1。 */
141
+ timeStep: {
142
+ type: PropType<TimeStep>;
140
143
  };
141
144
  /** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */
142
145
  presets: {
@@ -149,8 +152,9 @@ declare const XhTimeRangePickerRoot: import("vue").DefineComponent<import("vue")
149
152
  translations: {
150
153
  type: PropType<TimeRangePickerProps["translations"]>;
151
154
  };
155
+ /** 逐格可选性:时列按 24 小时制给值,第三个参数带这一端已选的时分与端号。 */
152
156
  isTimeUnavailable: {
153
- type: PropType<(value: string, unit: TimePickerColumnUnit, index: TimeRangePickerEndIndex) => boolean>;
157
+ type: PropType<TimeUnavailablePredicate>;
154
158
  };
155
159
  readOnly: {
156
160
  type: BooleanConstructor;
@@ -1 +1 @@
1
- {"version":3,"file":"time-range-picker.d.ts","names":[],"sources":["../../../src/components/time-range-picker/time-range-picker.ts"],"mappings":";;;;;KAwCK,uBAAuB;;KAGhB,+BAA+B,KACzC;;UAiBe;EACf,kBAAkB;;;UAIH;EACf,SAAS;;;UAIM;EACf,kBAAkB;;cAGP,qCAAqB,8BAAA;;;IAKN,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;IAMF,MAAA,SAAS;;;IACP,MAAA,SAAS;;;;;;;IAGd,MAAA,SAAS;;;;;;;IAGH,MAAA,SAAS;;;IACF,MAAA,UAAU,eAAe,MAAM,sBAAsB,OAAO;;;;;;;;;;;;;;;;;;;;;IAOxE,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACJ,MAAA,SAAS;;;;;;;IAGf,MAAA,SAAS;;;;;EAIL,iBAAA,UAAA,UAAU;EACX,gBAAA,UAAA,UAAU;EACX,iBAAA,QAAA,UAAU;EACZ,gBAAA,OAAA,UAAU;;;;IAnCT,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;IAMF,MAAA,SAAS;;;IACP,MAAA,SAAS;;;;;;;IAGd,MAAA,SAAS;;;;;;;IAGH,MAAA,SAAS;;;IACF,MAAA,UAAU,eAAe,MAAM,sBAAsB,OAAO;;;;;;;;;;;;;;;;;;;;;IAOxE,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACJ,MAAA,SAAS;;;;;;;IAGf,MAAA,SAAS;;;;;;;;;;;;;;;EAUtB,WAAC,OAAO,iCAAiC;kCAiCrD;cAEW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAOjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BASnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6CAA6B,8BAAA;;IAIH,MAAA;;;;;;;IAAA,MAAA;;;;;qCASrC;cAEW,wCAAwB,8BAAA;;IAIN,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;;MAYtC,oDAAA;cAEW,+CAA+B,0BAAA,oBAAA,4BAAA;;8BAU1C,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAenC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6CAA6B,0BAAA,oBAAA,4BAAA;;8BAMxC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,2CAA2B,8BAAA;;;IAIP,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;MAqBxC,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAYnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,4CAA4B,0BAAA,oBAAA,4BAAA;;;;EAI3B,WAAC,OAAO,oCAAoC;kCAoCxD;cAEW,uCAAuB,8BAAA;;;;;;;;;;;;;;;;EAQtB,gBAAM;kCAclB;cAEW,4CAA4B,8BAAA;;IAIF,MAAA;;;;;;;IAAA,MAAA;;;;;;EAGzB,WAAC,OAAO,wCAAwC;kCAa5D;cAEW,iDAAiC,0BAAA,oBAAA,4BAAA;;8BAO5C,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,8BAAA;;IAGR,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;;;EAGvB,WAAC,OAAO,mCAAmC;kCA8BvD;cAEW,qCAAqB,8BAAA;;;;;;;;;;;;;;MAiBhC,oDAAA;cAEW,4CAA4B,8BAAA;;IAIF,MAAA;;;;;;IAAA,MAAA;;MAUrC,oDAAA"}
1
+ {"version":3,"file":"time-range-picker.d.ts","names":[],"sources":["../../../src/components/time-range-picker/time-range-picker.ts"],"mappings":";;;;;KA0CK,uBAAuB;;KAGhB,+BAA+B,KACzC;;UAiBe;EACf,kBAAkB;;;UAIH;EACf,SAAS;;;UAIM;EACf,kBAAkB;;cAGP,qCAAqB,8BAAA;;;IAKN,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;IAMF,MAAA,SAAS;;;IACP,MAAA,SAAS;;;;IAEZ,MAAA,SAAS;;;;IAEX,MAAA,SAAS;;;;;;;IAGH,MAAA,SAAS;;;;IAEF,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;IAOrB,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACJ,MAAA,SAAS;;;;;;;IAGf,MAAA,SAAS;;;;;EAIL,iBAAA,UAAA,UAAU;EACX,gBAAA,UAAA,UAAU;EACX,iBAAA,QAAA,UAAU;EACZ,gBAAA,OAAA,UAAU;;;;IArCT,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;IAMF,MAAA,SAAS;;;IACP,MAAA,SAAS;;;;IAEZ,MAAA,SAAS;;;;IAEX,MAAA,SAAS;;;;;;;IAGH,MAAA,SAAS;;;;IAEF,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;IAOrB,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACJ,MAAA,SAAS;;;;;;;IAGf,MAAA,SAAS;;;;;;;;;;;;;;;EAUtB,WAAC,OAAO,iCAAiC;kCAiCrD;cAEW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAOjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BASnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6CAA6B,8BAAA;;IAIH,MAAA;;;;;;;IAAA,MAAA;;;;;qCASrC;cAEW,wCAAwB,8BAAA;;IAIN,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;;MAYtC,oDAAA;cAEW,+CAA+B,0BAAA,oBAAA,4BAAA;;8BAU1C,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAenC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6CAA6B,0BAAA,oBAAA,4BAAA;;8BAMxC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,2CAA2B,8BAAA;;;IAIP,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;MAqBxC,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAYnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,4CAA4B,0BAAA,oBAAA,4BAAA;;;;EAI3B,WAAC,OAAO,oCAAoC;kCAoCxD;cAEW,uCAAuB,8BAAA;;;;;;;;;;;;;;;;EAQtB,gBAAM;kCAclB;cAEW,4CAA4B,8BAAA;;IAIF,MAAA;;;;;;;IAAA,MAAA;;;;;;EAGzB,WAAC,OAAO,wCAAwC;kCAa5D;cAEW,iDAAiC,0BAAA,oBAAA,4BAAA;;8BAO5C,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,8BAAA;;IAGR,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;;;EAGvB,WAAC,OAAO,mCAAmC;kCA8BvD;cAEW,qCAAqB,8BAAA;;;;;;;;;;;;;;MAiBhC,oDAAA;cAEW,4CAA4B,8BAAA;;IAIF,MAAA;;;;;;IAAA,MAAA;;MAUrC,oDAAA"}
@@ -1,9 +1,9 @@
1
1
  import { withXhConfig } from "../../config/config.js";
2
2
  import { XhPortal } from "../../runtime/portal.js";
3
+ import { slotPaints } from "../../runtime/slot-content.js";
3
4
  import { useScrollbars } from "../../runtime/use-scrollbars.js";
4
5
  import { useFormControlProps } from "../form/use-form-control.js";
5
6
  import { useFieldLabelWiring, useFieldStateWiring } from "../field/use-field-control.js";
6
- import { slotPaints } from "../../runtime/slot-content.js";
7
7
  import { provideTimeRangePicker, provideTimeRangePickerColumn, provideTimeRangePickerEnd, useTimeRangePickerColumnContext, useTimeRangePickerContext, useTimeRangePickerEndContext } from "./context.js";
8
8
  import { useTimeRangePicker } from "./use-time-range-picker.js";
9
9
  import { computed, defineComponent, h, mergeProps, onUpdated, ref } from "vue";
@@ -25,7 +25,8 @@ const XhTimeRangePickerRoot = defineComponent({
25
25
  locale: { type: String },
26
26
  hourCycle: { type: Number },
27
27
  granularity: { type: String },
28
- step: { type: Number },
28
+ /** 按单位的步进:`{ hour?, minute?, second? }`,各单位缺省 1。 */
29
+ timeStep: { type: Object },
29
30
  /** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */
30
31
  presets: { type: Array },
31
32
  disabled: {
@@ -33,6 +34,7 @@ const XhTimeRangePickerRoot = defineComponent({
33
34
  default: void 0
34
35
  },
35
36
  translations: { type: Object },
37
+ /** 逐格可选性:时列按 24 小时制给值,第三个参数带这一端已选的时分与端号。 */
36
38
  isTimeUnavailable: { type: Function },
37
39
  readOnly: {
38
40
  type: Boolean,