@xihan-ui/vue 2.1.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (644) hide show
  1. package/CHANGELOG.md +1335 -0
  2. package/README.md +1 -1
  3. package/dist/components/accordion/accordion.d.ts +6 -0
  4. package/dist/components/accordion/accordion.d.ts.map +1 -1
  5. package/dist/components/accordion/accordion.js +4 -2
  6. package/dist/components/accordion/accordion.js.map +1 -1
  7. package/dist/components/alert/alert.d.ts +9 -0
  8. package/dist/components/alert/alert.d.ts.map +1 -1
  9. package/dist/components/alert/alert.js +4 -0
  10. package/dist/components/alert/alert.js.map +1 -1
  11. package/dist/components/anchor/anchor.d.ts +2 -2
  12. package/dist/components/anchor/anchor.d.ts.map +1 -1
  13. package/dist/components/anchor/anchor.js +2 -2
  14. package/dist/components/anchor/anchor.js.map +1 -1
  15. package/dist/components/anchor/use-anchor.d.ts +2 -2
  16. package/dist/components/anchor/use-anchor.js +3 -3
  17. package/dist/components/anchor/use-anchor.js.map +1 -1
  18. package/dist/components/approval/approval.d.ts +8 -1
  19. package/dist/components/approval/approval.d.ts.map +1 -1
  20. package/dist/components/approval/approval.js +10 -1
  21. package/dist/components/approval/approval.js.map +1 -1
  22. package/dist/components/avatar/avatar.d.ts +8 -0
  23. package/dist/components/avatar/avatar.d.ts.map +1 -1
  24. package/dist/components/avatar/avatar.js +3 -1
  25. package/dist/components/avatar/avatar.js.map +1 -1
  26. package/dist/components/avatar/use-avatar.d.ts.map +1 -1
  27. package/dist/components/avatar/use-avatar.js +3 -1
  28. package/dist/components/avatar/use-avatar.js.map +1 -1
  29. package/dist/components/back-top/use-back-top.d.ts.map +1 -1
  30. package/dist/components/back-top/use-back-top.js +3 -1
  31. package/dist/components/back-top/use-back-top.js.map +1 -1
  32. package/dist/components/badge/badge.d.ts +22 -0
  33. package/dist/components/badge/badge.d.ts.map +1 -1
  34. package/dist/components/badge/badge.js +11 -2
  35. package/dist/components/badge/badge.js.map +1 -1
  36. package/dist/components/breadcrumb/breadcrumb.d.ts +11 -1
  37. package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -1
  38. package/dist/components/breadcrumb/breadcrumb.js +28 -9
  39. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  40. package/dist/components/calendar-picker/calendar-picker.d.ts +16 -0
  41. package/dist/components/calendar-picker/calendar-picker.d.ts.map +1 -1
  42. package/dist/components/calendar-picker/calendar-picker.js +4 -0
  43. package/dist/components/calendar-picker/calendar-picker.js.map +1 -1
  44. package/dist/components/calendar-range-picker/calendar-range-picker.d.ts +16 -0
  45. package/dist/components/calendar-range-picker/calendar-range-picker.d.ts.map +1 -1
  46. package/dist/components/calendar-range-picker/calendar-range-picker.js +4 -0
  47. package/dist/components/calendar-range-picker/calendar-range-picker.js.map +1 -1
  48. package/dist/components/card/card.d.ts +37 -2
  49. package/dist/components/card/card.d.ts.map +1 -1
  50. package/dist/components/card/card.js +40 -2
  51. package/dist/components/card/card.js.map +1 -1
  52. package/dist/components/carousel/carousel.d.ts +7 -1
  53. package/dist/components/carousel/carousel.d.ts.map +1 -1
  54. package/dist/components/carousel/carousel.js +1 -0
  55. package/dist/components/carousel/carousel.js.map +1 -1
  56. package/dist/components/carousel/use-carousel.d.ts.map +1 -1
  57. package/dist/components/carousel/use-carousel.js +3 -1
  58. package/dist/components/carousel/use-carousel.js.map +1 -1
  59. package/dist/components/cartesian-chart/cartesian-chart.d.ts +262 -0
  60. package/dist/components/cartesian-chart/cartesian-chart.d.ts.map +1 -0
  61. package/dist/components/cartesian-chart/cartesian-chart.js +293 -0
  62. package/dist/components/cartesian-chart/cartesian-chart.js.map +1 -0
  63. package/dist/components/cartesian-chart/context.js +15 -0
  64. package/dist/components/cartesian-chart/context.js.map +1 -0
  65. package/dist/components/cartesian-chart/use-cartesian-chart.d.ts +21 -0
  66. package/dist/components/cartesian-chart/use-cartesian-chart.d.ts.map +1 -0
  67. package/dist/components/cartesian-chart/use-cartesian-chart.js +29 -0
  68. package/dist/components/cartesian-chart/use-cartesian-chart.js.map +1 -0
  69. package/dist/components/cascader/cascader.d.ts +64 -3
  70. package/dist/components/cascader/cascader.d.ts.map +1 -1
  71. package/dist/components/cascader/cascader.js +107 -7
  72. package/dist/components/cascader/cascader.js.map +1 -1
  73. package/dist/components/cascader/context.js +10 -1
  74. package/dist/components/cascader/context.js.map +1 -1
  75. package/dist/components/cascader/use-cascader.d.ts +2 -1
  76. package/dist/components/cascader/use-cascader.d.ts.map +1 -1
  77. package/dist/components/cascader/use-cascader.js +4 -1
  78. package/dist/components/cascader/use-cascader.js.map +1 -1
  79. package/dist/components/checkbox/checkbox.js +1 -1
  80. package/dist/components/checkbox-group/checkbox-group.d.ts +24 -3
  81. package/dist/components/checkbox-group/checkbox-group.d.ts.map +1 -1
  82. package/dist/components/checkbox-group/checkbox-group.js +20 -3
  83. package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
  84. package/dist/components/citation/citation.d.ts +211 -0
  85. package/dist/components/citation/citation.d.ts.map +1 -0
  86. package/dist/components/citation/citation.js +222 -0
  87. package/dist/components/citation/citation.js.map +1 -0
  88. package/dist/components/citation/context.d.ts +11 -0
  89. package/dist/components/citation/context.d.ts.map +1 -0
  90. package/dist/components/citation/context.js +24 -0
  91. package/dist/components/citation/context.js.map +1 -0
  92. package/dist/components/citation/use-citation.d.ts +19 -0
  93. package/dist/components/citation/use-citation.d.ts.map +1 -0
  94. package/dist/components/citation/use-citation.js +51 -0
  95. package/dist/components/citation/use-citation.js.map +1 -0
  96. package/dist/components/code-view/code-view.d.ts +21 -0
  97. package/dist/components/code-view/code-view.d.ts.map +1 -1
  98. package/dist/components/code-view/code-view.js +23 -4
  99. package/dist/components/code-view/code-view.js.map +1 -1
  100. package/dist/components/collapsible/collapsible.d.ts +6 -0
  101. package/dist/components/collapsible/collapsible.d.ts.map +1 -1
  102. package/dist/components/collapsible/collapsible.js +4 -2
  103. package/dist/components/collapsible/collapsible.js.map +1 -1
  104. package/dist/components/color-field/color-field.d.ts +2 -2
  105. package/dist/components/color-field/color-field.js +1 -1
  106. package/dist/components/color-field/color-field.js.map +1 -1
  107. package/dist/components/color-picker/color-picker.d.ts +41 -3
  108. package/dist/components/color-picker/color-picker.d.ts.map +1 -1
  109. package/dist/components/color-picker/color-picker.js +33 -4
  110. package/dist/components/color-picker/color-picker.js.map +1 -1
  111. package/dist/components/color-picker/use-color-picker.d.ts +3 -1
  112. package/dist/components/color-picker/use-color-picker.d.ts.map +1 -1
  113. package/dist/components/color-picker/use-color-picker.js +8 -2
  114. package/dist/components/color-picker/use-color-picker.js.map +1 -1
  115. package/dist/components/color-slider/color-slider.d.ts +2 -2
  116. package/dist/components/color-slider/color-slider.js +1 -1
  117. package/dist/components/color-slider/color-slider.js.map +1 -1
  118. package/dist/components/combobox/combobox.d.ts +49 -4
  119. package/dist/components/combobox/combobox.d.ts.map +1 -1
  120. package/dist/components/combobox/combobox.js +73 -5
  121. package/dist/components/combobox/combobox.js.map +1 -1
  122. package/dist/components/combobox/context.js +10 -1
  123. package/dist/components/combobox/context.js.map +1 -1
  124. package/dist/components/command/command.js +2 -2
  125. package/dist/components/command/use-command.d.ts.map +1 -1
  126. package/dist/components/command/use-command.js +9 -30
  127. package/dist/components/command/use-command.js.map +1 -1
  128. package/dist/components/context-menu/context-menu.d.ts +50 -18
  129. package/dist/components/context-menu/context-menu.d.ts.map +1 -1
  130. package/dist/components/context-menu/context-menu.js +101 -47
  131. package/dist/components/context-menu/context-menu.js.map +1 -1
  132. package/dist/components/context-menu/context.js +1 -1
  133. package/dist/components/context-menu/context.js.map +1 -1
  134. package/dist/components/context-menu/use-context-menu.d.ts +1 -1
  135. package/dist/components/context-menu/use-context-menu.d.ts.map +1 -1
  136. package/dist/components/context-menu/use-context-menu.js +4 -2
  137. package/dist/components/context-menu/use-context-menu.js.map +1 -1
  138. package/dist/components/date-field/date-field.d.ts +9 -1
  139. package/dist/components/date-field/date-field.d.ts.map +1 -1
  140. package/dist/components/date-field/date-field.js +2 -0
  141. package/dist/components/date-field/date-field.js.map +1 -1
  142. package/dist/components/date-picker/date-picker.d.ts +41 -1
  143. package/dist/components/date-picker/date-picker.d.ts.map +1 -1
  144. package/dist/components/date-picker/date-picker.js +16 -3
  145. package/dist/components/date-picker/date-picker.js.map +1 -1
  146. package/dist/components/date-range-picker/date-range-picker.d.ts +77 -2
  147. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
  148. package/dist/components/date-range-picker/date-range-picker.js +102 -5
  149. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  150. package/dist/components/date-range-picker/use-date-range-picker.d.ts +1 -1
  151. package/dist/components/date-range-picker/use-date-range-picker.js.map +1 -1
  152. package/dist/components/descriptions/descriptions.d.ts +38 -7
  153. package/dist/components/descriptions/descriptions.d.ts.map +1 -1
  154. package/dist/components/descriptions/descriptions.js +38 -4
  155. package/dist/components/descriptions/descriptions.js.map +1 -1
  156. package/dist/components/dialog/dialog.d.ts +16 -1
  157. package/dist/components/dialog/dialog.d.ts.map +1 -1
  158. package/dist/components/dialog/dialog.js +15 -2
  159. package/dist/components/dialog/dialog.js.map +1 -1
  160. package/dist/components/dialog/use-dialog.d.ts.map +1 -1
  161. package/dist/components/dialog/use-dialog.js +9 -27
  162. package/dist/components/dialog/use-dialog.js.map +1 -1
  163. package/dist/components/diff-view/diff-view.d.ts +22 -2
  164. package/dist/components/diff-view/diff-view.d.ts.map +1 -1
  165. package/dist/components/diff-view/diff-view.js +37 -14
  166. package/dist/components/diff-view/diff-view.js.map +1 -1
  167. package/dist/components/diff-view/use-diff-view.d.ts +7 -2
  168. package/dist/components/diff-view/use-diff-view.d.ts.map +1 -1
  169. package/dist/components/diff-view/use-diff-view.js +12 -5
  170. package/dist/components/diff-view/use-diff-view.js.map +1 -1
  171. package/dist/components/drawer/drawer.d.ts +46 -1
  172. package/dist/components/drawer/drawer.d.ts.map +1 -1
  173. package/dist/components/drawer/drawer.js +28 -4
  174. package/dist/components/drawer/drawer.js.map +1 -1
  175. package/dist/components/drawer/use-drawer.d.ts +1 -1
  176. package/dist/components/drawer/use-drawer.d.ts.map +1 -1
  177. package/dist/components/drawer/use-drawer.js +12 -29
  178. package/dist/components/drawer/use-drawer.js.map +1 -1
  179. package/dist/components/empty-state/empty-state.js +4 -1
  180. package/dist/components/empty-state/empty-state.js.map +1 -1
  181. package/dist/components/empty-state/use-empty-state.js +12 -3
  182. package/dist/components/empty-state/use-empty-state.js.map +1 -1
  183. package/dist/components/field/field.js +1 -1
  184. package/dist/components/field-array/field-array.d.ts +1 -1
  185. package/dist/components/field-array/field-array.d.ts.map +1 -1
  186. package/dist/components/field-array/field-array.js +5 -1
  187. package/dist/components/field-array/field-array.js.map +1 -1
  188. package/dist/components/field-array/use-field-array.d.ts +3 -1
  189. package/dist/components/field-array/use-field-array.d.ts.map +1 -1
  190. package/dist/components/field-array/use-field-array.js +5 -2
  191. package/dist/components/field-array/use-field-array.js.map +1 -1
  192. package/dist/components/file-upload/file-upload.d.ts +24 -1
  193. package/dist/components/file-upload/file-upload.d.ts.map +1 -1
  194. package/dist/components/file-upload/file-upload.js +12 -2
  195. package/dist/components/file-upload/file-upload.js.map +1 -1
  196. package/dist/components/file-upload/use-file-upload.d.ts +1 -1
  197. package/dist/components/file-upload/use-file-upload.d.ts.map +1 -1
  198. package/dist/components/file-upload/use-file-upload.js.map +1 -1
  199. package/dist/components/flex/flex.d.ts +1 -1
  200. package/dist/components/flex/flex.d.ts.map +1 -1
  201. package/dist/components/flex/flex.js +4 -4
  202. package/dist/components/flex/flex.js.map +1 -1
  203. package/dist/components/form/form.d.ts +18 -4
  204. package/dist/components/form/form.d.ts.map +1 -1
  205. package/dist/components/form/form.js +21 -7
  206. package/dist/components/form/form.js.map +1 -1
  207. package/dist/components/form/use-form.d.ts +6 -0
  208. package/dist/components/form/use-form.d.ts.map +1 -1
  209. package/dist/components/form/use-form.js +4 -0
  210. package/dist/components/form/use-form.js.map +1 -1
  211. package/dist/components/funnel-chart/context.js +15 -0
  212. package/dist/components/funnel-chart/context.js.map +1 -0
  213. package/dist/components/funnel-chart/funnel-chart.d.ts +175 -0
  214. package/dist/components/funnel-chart/funnel-chart.d.ts.map +1 -0
  215. package/dist/components/funnel-chart/funnel-chart.js +188 -0
  216. package/dist/components/funnel-chart/funnel-chart.js.map +1 -0
  217. package/dist/components/funnel-chart/use-funnel-chart.d.ts +19 -0
  218. package/dist/components/funnel-chart/use-funnel-chart.d.ts.map +1 -0
  219. package/dist/components/funnel-chart/use-funnel-chart.js +26 -0
  220. package/dist/components/funnel-chart/use-funnel-chart.js.map +1 -0
  221. package/dist/components/graph-chart/context.js +15 -0
  222. package/dist/components/graph-chart/context.js.map +1 -0
  223. package/dist/components/graph-chart/graph-chart.d.ts +194 -0
  224. package/dist/components/graph-chart/graph-chart.d.ts.map +1 -0
  225. package/dist/components/graph-chart/graph-chart.js +219 -0
  226. package/dist/components/graph-chart/graph-chart.js.map +1 -0
  227. package/dist/components/graph-chart/use-graph-chart.d.ts +19 -0
  228. package/dist/components/graph-chart/use-graph-chart.d.ts.map +1 -0
  229. package/dist/components/graph-chart/use-graph-chart.js +26 -0
  230. package/dist/components/graph-chart/use-graph-chart.js.map +1 -0
  231. package/dist/components/grid/grid.d.ts +7 -0
  232. package/dist/components/grid/grid.d.ts.map +1 -1
  233. package/dist/components/grid/grid.js +7 -1
  234. package/dist/components/grid/grid.js.map +1 -1
  235. package/dist/components/grid-list/context.d.ts +9 -0
  236. package/dist/components/grid-list/context.d.ts.map +1 -0
  237. package/dist/components/grid-list/context.js +24 -0
  238. package/dist/components/grid-list/context.js.map +1 -0
  239. package/dist/components/grid-list/grid-list.d.ts +149 -0
  240. package/dist/components/grid-list/grid-list.d.ts.map +1 -0
  241. package/dist/components/grid-list/grid-list.js +118 -0
  242. package/dist/components/grid-list/grid-list.js.map +1 -0
  243. package/dist/components/grid-list/use-grid-list.d.ts +12 -0
  244. package/dist/components/grid-list/use-grid-list.d.ts.map +1 -0
  245. package/dist/components/grid-list/use-grid-list.js +20 -0
  246. package/dist/components/grid-list/use-grid-list.js.map +1 -0
  247. package/dist/components/heatmap/heatmap.d.ts +45 -4
  248. package/dist/components/heatmap/heatmap.d.ts.map +1 -1
  249. package/dist/components/heatmap/heatmap.js +40 -14
  250. package/dist/components/heatmap/heatmap.js.map +1 -1
  251. package/dist/components/heatmap/use-heatmap.d.ts +4 -2
  252. package/dist/components/heatmap/use-heatmap.d.ts.map +1 -1
  253. package/dist/components/heatmap/use-heatmap.js +8 -4
  254. package/dist/components/heatmap/use-heatmap.js.map +1 -1
  255. package/dist/components/hierarchy-chart/context.js +15 -0
  256. package/dist/components/hierarchy-chart/context.js.map +1 -0
  257. package/dist/components/hierarchy-chart/hierarchy-chart.d.ts +201 -0
  258. package/dist/components/hierarchy-chart/hierarchy-chart.d.ts.map +1 -0
  259. package/dist/components/hierarchy-chart/hierarchy-chart.js +228 -0
  260. package/dist/components/hierarchy-chart/hierarchy-chart.js.map +1 -0
  261. package/dist/components/hierarchy-chart/use-hierarchy-chart.d.ts +19 -0
  262. package/dist/components/hierarchy-chart/use-hierarchy-chart.d.ts.map +1 -0
  263. package/dist/components/hierarchy-chart/use-hierarchy-chart.js +26 -0
  264. package/dist/components/hierarchy-chart/use-hierarchy-chart.js.map +1 -0
  265. package/dist/components/hover-card/hover-card.js +2 -2
  266. package/dist/components/icon/icon.d.ts +7 -1
  267. package/dist/components/icon/icon.d.ts.map +1 -1
  268. package/dist/components/icon/icon.js +1 -0
  269. package/dist/components/icon/icon.js.map +1 -1
  270. package/dist/components/image/use-image.d.ts.map +1 -1
  271. package/dist/components/image/use-image.js +3 -1
  272. package/dist/components/image/use-image.js.map +1 -1
  273. package/dist/components/image-cropper/image-cropper.d.ts +35 -4
  274. package/dist/components/image-cropper/image-cropper.d.ts.map +1 -1
  275. package/dist/components/image-cropper/image-cropper.js +34 -5
  276. package/dist/components/image-cropper/image-cropper.js.map +1 -1
  277. package/dist/components/image-cropper/use-image-cropper.d.ts +3 -1
  278. package/dist/components/image-cropper/use-image-cropper.d.ts.map +1 -1
  279. package/dist/components/image-cropper/use-image-cropper.js +4 -1
  280. package/dist/components/image-cropper/use-image-cropper.js.map +1 -1
  281. package/dist/components/image-viewer/image-viewer.js +1 -1
  282. package/dist/components/image-viewer/use-image-viewer.d.ts.map +1 -1
  283. package/dist/components/image-viewer/use-image-viewer.js +9 -27
  284. package/dist/components/image-viewer/use-image-viewer.js.map +1 -1
  285. package/dist/components/infinite-scroll/infinite-scroll.d.ts +9 -1
  286. package/dist/components/infinite-scroll/infinite-scroll.d.ts.map +1 -1
  287. package/dist/components/infinite-scroll/infinite-scroll.js +2 -0
  288. package/dist/components/infinite-scroll/infinite-scroll.js.map +1 -1
  289. package/dist/components/json-viewer/json-viewer.d.ts +17 -2
  290. package/dist/components/json-viewer/json-viewer.d.ts.map +1 -1
  291. package/dist/components/json-viewer/json-viewer.js +26 -8
  292. package/dist/components/json-viewer/json-viewer.js.map +1 -1
  293. package/dist/components/listbox/listbox.d.ts +7 -1
  294. package/dist/components/listbox/listbox.d.ts.map +1 -1
  295. package/dist/components/listbox/listbox.js +2 -0
  296. package/dist/components/listbox/listbox.js.map +1 -1
  297. package/dist/components/loading-bar/use-loading-bar.d.ts.map +1 -1
  298. package/dist/components/loading-bar/use-loading-bar.js +3 -1
  299. package/dist/components/loading-bar/use-loading-bar.js.map +1 -1
  300. package/dist/components/log/log.d.ts +41 -2
  301. package/dist/components/log/log.d.ts.map +1 -1
  302. package/dist/components/log/log.js +25 -3
  303. package/dist/components/log/log.js.map +1 -1
  304. package/dist/components/log/use-log.d.ts +1 -1
  305. package/dist/components/log/use-log.d.ts.map +1 -1
  306. package/dist/components/log/use-log.js +4 -1
  307. package/dist/components/log/use-log.js.map +1 -1
  308. package/dist/components/markdown-stream/markdown-stream.d.ts +22 -2
  309. package/dist/components/markdown-stream/markdown-stream.d.ts.map +1 -1
  310. package/dist/components/markdown-stream/markdown-stream.js +43 -4
  311. package/dist/components/markdown-stream/markdown-stream.js.map +1 -1
  312. package/dist/components/marquee/marquee.d.ts +68 -12
  313. package/dist/components/marquee/marquee.d.ts.map +1 -1
  314. package/dist/components/marquee/marquee.js +52 -7
  315. package/dist/components/marquee/marquee.js.map +1 -1
  316. package/dist/components/mention/mention.d.ts +26 -6
  317. package/dist/components/mention/mention.d.ts.map +1 -1
  318. package/dist/components/mention/mention.js +14 -4
  319. package/dist/components/mention/mention.js.map +1 -1
  320. package/dist/components/menu/context.js +1 -1
  321. package/dist/components/menu/context.js.map +1 -1
  322. package/dist/components/menu/menu.d.ts +79 -28
  323. package/dist/components/menu/menu.d.ts.map +1 -1
  324. package/dist/components/menu/menu.js +104 -51
  325. package/dist/components/menu/menu.js.map +1 -1
  326. package/dist/components/menu/use-menu.d.ts +1 -1
  327. package/dist/components/menu/use-menu.d.ts.map +1 -1
  328. package/dist/components/menu/use-menu.js +8 -6
  329. package/dist/components/menu/use-menu.js.map +1 -1
  330. package/dist/components/menubar/context.js +1 -1
  331. package/dist/components/menubar/context.js.map +1 -1
  332. package/dist/components/menubar/menubar.d.ts +39 -18
  333. package/dist/components/menubar/menubar.d.ts.map +1 -1
  334. package/dist/components/menubar/menubar.js +96 -47
  335. package/dist/components/menubar/menubar.js.map +1 -1
  336. package/dist/components/menubar/use-menubar.d.ts +1 -1
  337. package/dist/components/menubar/use-menubar.d.ts.map +1 -1
  338. package/dist/components/menubar/use-menubar.js +4 -2
  339. package/dist/components/menubar/use-menubar.js.map +1 -1
  340. package/dist/components/message-feed/message-feed.d.ts +13 -1
  341. package/dist/components/message-feed/message-feed.d.ts.map +1 -1
  342. package/dist/components/message-feed/message-feed.js +25 -1
  343. package/dist/components/message-feed/message-feed.js.map +1 -1
  344. package/dist/components/navigation-menu/navigation-menu.d.ts +58 -1
  345. package/dist/components/navigation-menu/navigation-menu.d.ts.map +1 -1
  346. package/dist/components/navigation-menu/navigation-menu.js +82 -10
  347. package/dist/components/navigation-menu/navigation-menu.js.map +1 -1
  348. package/dist/components/notification/context.d.ts +5 -1
  349. package/dist/components/notification/context.d.ts.map +1 -1
  350. package/dist/components/notification/context.js.map +1 -1
  351. package/dist/components/notification/notification.d.ts +39 -23
  352. package/dist/components/notification/notification.d.ts.map +1 -1
  353. package/dist/components/notification/notification.js +27 -9
  354. package/dist/components/notification/notification.js.map +1 -1
  355. package/dist/components/notification/use-item-exit.js +22 -0
  356. package/dist/components/notification/use-item-exit.js.map +1 -0
  357. package/dist/components/notification/use-notification.d.ts +3 -3
  358. package/dist/components/notification/use-notification.d.ts.map +1 -1
  359. package/dist/components/notification/use-notification.js +20 -5
  360. package/dist/components/notification/use-notification.js.map +1 -1
  361. package/dist/components/number-animation/number-animation.d.ts +14 -2
  362. package/dist/components/number-animation/number-animation.d.ts.map +1 -1
  363. package/dist/components/number-animation/number-animation.js +5 -1
  364. package/dist/components/number-animation/number-animation.js.map +1 -1
  365. package/dist/components/number-field/number-field.d.ts +16 -1
  366. package/dist/components/number-field/number-field.d.ts.map +1 -1
  367. package/dist/components/number-field/number-field.js +6 -0
  368. package/dist/components/number-field/number-field.js.map +1 -1
  369. package/dist/components/pagination/pagination.d.ts +22 -2
  370. package/dist/components/pagination/pagination.d.ts.map +1 -1
  371. package/dist/components/pagination/pagination.js +22 -1
  372. package/dist/components/pagination/pagination.js.map +1 -1
  373. package/dist/components/pagination/use-pagination.js +1 -0
  374. package/dist/components/pagination/use-pagination.js.map +1 -1
  375. package/dist/components/pie-chart/context.js +15 -0
  376. package/dist/components/pie-chart/context.js.map +1 -0
  377. package/dist/components/pie-chart/pie-chart.d.ts +203 -0
  378. package/dist/components/pie-chart/pie-chart.d.ts.map +1 -0
  379. package/dist/components/pie-chart/pie-chart.js +236 -0
  380. package/dist/components/pie-chart/pie-chart.js.map +1 -0
  381. package/dist/components/pie-chart/use-pie-chart.d.ts +19 -0
  382. package/dist/components/pie-chart/use-pie-chart.d.ts.map +1 -0
  383. package/dist/components/pie-chart/use-pie-chart.js +26 -0
  384. package/dist/components/pie-chart/use-pie-chart.js.map +1 -0
  385. package/dist/components/popconfirm/popconfirm.js +2 -2
  386. package/dist/components/popover/popover.d.ts +11 -0
  387. package/dist/components/popover/popover.d.ts.map +1 -1
  388. package/dist/components/popover/popover.js +7 -2
  389. package/dist/components/popover/popover.js.map +1 -1
  390. package/dist/components/progress/progress.d.ts +63 -3
  391. package/dist/components/progress/progress.d.ts.map +1 -1
  392. package/dist/components/progress/progress.js +55 -3
  393. package/dist/components/progress/progress.js.map +1 -1
  394. package/dist/components/question-flow/question-flow.d.ts +40 -1
  395. package/dist/components/question-flow/question-flow.d.ts.map +1 -1
  396. package/dist/components/question-flow/question-flow.js +37 -1
  397. package/dist/components/question-flow/question-flow.js.map +1 -1
  398. package/dist/components/radar-chart/context.js +15 -0
  399. package/dist/components/radar-chart/context.js.map +1 -0
  400. package/dist/components/radar-chart/radar-chart.d.ts +189 -0
  401. package/dist/components/radar-chart/radar-chart.d.ts.map +1 -0
  402. package/dist/components/radar-chart/radar-chart.js +220 -0
  403. package/dist/components/radar-chart/radar-chart.js.map +1 -0
  404. package/dist/components/radar-chart/use-radar-chart.d.ts +19 -0
  405. package/dist/components/radar-chart/use-radar-chart.d.ts.map +1 -0
  406. package/dist/components/radar-chart/use-radar-chart.js +26 -0
  407. package/dist/components/radar-chart/use-radar-chart.js.map +1 -0
  408. package/dist/components/radio-group/radio-group.d.ts +37 -2
  409. package/dist/components/radio-group/radio-group.d.ts.map +1 -1
  410. package/dist/components/radio-group/radio-group.js +54 -8
  411. package/dist/components/radio-group/radio-group.js.map +1 -1
  412. package/dist/components/radio-group/use-radio-group.d.ts +3 -1
  413. package/dist/components/radio-group/use-radio-group.d.ts.map +1 -1
  414. package/dist/components/radio-group/use-radio-group.js +7 -3
  415. package/dist/components/radio-group/use-radio-group.js.map +1 -1
  416. package/dist/components/reasoning/reasoning.d.ts +1 -1
  417. package/dist/components/reasoning/reasoning.d.ts.map +1 -1
  418. package/dist/components/reasoning/reasoning.js +1 -0
  419. package/dist/components/reasoning/reasoning.js.map +1 -1
  420. package/dist/components/sankey-chart/context.js +15 -0
  421. package/dist/components/sankey-chart/context.js.map +1 -0
  422. package/dist/components/sankey-chart/sankey-chart.d.ts +161 -0
  423. package/dist/components/sankey-chart/sankey-chart.d.ts.map +1 -0
  424. package/dist/components/sankey-chart/sankey-chart.js +208 -0
  425. package/dist/components/sankey-chart/sankey-chart.js.map +1 -0
  426. package/dist/components/sankey-chart/use-sankey-chart.d.ts +19 -0
  427. package/dist/components/sankey-chart/use-sankey-chart.d.ts.map +1 -0
  428. package/dist/components/sankey-chart/use-sankey-chart.js +26 -0
  429. package/dist/components/sankey-chart/use-sankey-chart.js.map +1 -0
  430. package/dist/components/scroll-area/scroll-area.d.ts +13 -5
  431. package/dist/components/scroll-area/scroll-area.d.ts.map +1 -1
  432. package/dist/components/scroll-area/scroll-area.js +17 -3
  433. package/dist/components/scroll-area/scroll-area.js.map +1 -1
  434. package/dist/components/select/select.d.ts +7 -1
  435. package/dist/components/select/select.d.ts.map +1 -1
  436. package/dist/components/select/select.js +13 -4
  437. package/dist/components/select/select.js.map +1 -1
  438. package/dist/components/select/use-select.js +2 -1
  439. package/dist/components/select/use-select.js.map +1 -1
  440. package/dist/components/side-nav/context.js +17 -1
  441. package/dist/components/side-nav/context.js.map +1 -1
  442. package/dist/components/side-nav/side-nav.d.ts +51 -7
  443. package/dist/components/side-nav/side-nav.d.ts.map +1 -1
  444. package/dist/components/side-nav/side-nav.js +152 -13
  445. package/dist/components/side-nav/side-nav.js.map +1 -1
  446. package/dist/components/side-nav/use-side-nav.d.ts +4 -2
  447. package/dist/components/side-nav/use-side-nav.d.ts.map +1 -1
  448. package/dist/components/side-nav/use-side-nav.js +5 -3
  449. package/dist/components/side-nav/use-side-nav.js.map +1 -1
  450. package/dist/components/signature-pad/signature-pad.d.ts +26 -4
  451. package/dist/components/signature-pad/signature-pad.d.ts.map +1 -1
  452. package/dist/components/signature-pad/signature-pad.js +32 -4
  453. package/dist/components/signature-pad/signature-pad.js.map +1 -1
  454. package/dist/components/signature-pad/use-signature-pad.d.ts +1 -1
  455. package/dist/components/signature-pad/use-signature-pad.d.ts.map +1 -1
  456. package/dist/components/signature-pad/use-signature-pad.js.map +1 -1
  457. package/dist/components/skeleton/use-skeleton.js +6 -2
  458. package/dist/components/skeleton/use-skeleton.js.map +1 -1
  459. package/dist/components/slider/slider.d.ts +27 -0
  460. package/dist/components/slider/slider.d.ts.map +1 -1
  461. package/dist/components/slider/slider.js +12 -0
  462. package/dist/components/slider/slider.js.map +1 -1
  463. package/dist/components/sortable/sortable.d.ts +19 -1
  464. package/dist/components/sortable/sortable.d.ts.map +1 -1
  465. package/dist/components/sortable/sortable.js +7 -2
  466. package/dist/components/sortable/sortable.js.map +1 -1
  467. package/dist/components/sortable/use-sortable.d.ts +1 -1
  468. package/dist/components/sortable/use-sortable.d.ts.map +1 -1
  469. package/dist/components/sortable/use-sortable.js +2 -1
  470. package/dist/components/sortable/use-sortable.js.map +1 -1
  471. package/dist/components/sparkline/sparkline.d.ts +101 -0
  472. package/dist/components/sparkline/sparkline.d.ts.map +1 -0
  473. package/dist/components/sparkline/sparkline.js +54 -0
  474. package/dist/components/sparkline/sparkline.js.map +1 -0
  475. package/dist/components/sparkline/use-sparkline.d.ts +15 -0
  476. package/dist/components/sparkline/use-sparkline.d.ts.map +1 -0
  477. package/dist/components/sparkline/use-sparkline.js +21 -0
  478. package/dist/components/sparkline/use-sparkline.js.map +1 -0
  479. package/dist/components/spinner/spinner.d.ts +8 -0
  480. package/dist/components/spinner/spinner.d.ts.map +1 -1
  481. package/dist/components/spinner/spinner.js +2 -0
  482. package/dist/components/spinner/spinner.js.map +1 -1
  483. package/dist/components/spinner/use-spinner.js +4 -2
  484. package/dist/components/spinner/use-spinner.js.map +1 -1
  485. package/dist/components/steps/steps.d.ts +28 -1
  486. package/dist/components/steps/steps.d.ts.map +1 -1
  487. package/dist/components/steps/steps.js +11 -2
  488. package/dist/components/steps/steps.js.map +1 -1
  489. package/dist/components/switch/switch.js +1 -1
  490. package/dist/components/table/context.js +9 -1
  491. package/dist/components/table/context.js.map +1 -1
  492. package/dist/components/table/table.d.ts +54 -5
  493. package/dist/components/table/table.d.ts.map +1 -1
  494. package/dist/components/table/table.js +40 -11
  495. package/dist/components/table/table.js.map +1 -1
  496. package/dist/components/table/use-table.d.ts +3 -1
  497. package/dist/components/table/use-table.d.ts.map +1 -1
  498. package/dist/components/table/use-table.js +5 -2
  499. package/dist/components/table/use-table.js.map +1 -1
  500. package/dist/components/tabs/tabs.d.ts +51 -3
  501. package/dist/components/tabs/tabs.d.ts.map +1 -1
  502. package/dist/components/tabs/tabs.js +60 -8
  503. package/dist/components/tabs/tabs.js.map +1 -1
  504. package/dist/components/tag/use-tag.d.ts.map +1 -1
  505. package/dist/components/tag/use-tag.js +3 -1
  506. package/dist/components/tag/use-tag.js.map +1 -1
  507. package/dist/components/tags-input/tags-input.d.ts +10 -2
  508. package/dist/components/tags-input/tags-input.d.ts.map +1 -1
  509. package/dist/components/tags-input/tags-input.js +11 -4
  510. package/dist/components/tags-input/tags-input.js.map +1 -1
  511. package/dist/components/tags-input/use-tags-input.d.ts +4 -2
  512. package/dist/components/tags-input/use-tags-input.d.ts.map +1 -1
  513. package/dist/components/tags-input/use-tags-input.js +5 -2
  514. package/dist/components/tags-input/use-tags-input.js.map +1 -1
  515. package/dist/components/time-picker/time-picker.d.ts +11 -7
  516. package/dist/components/time-picker/time-picker.d.ts.map +1 -1
  517. package/dist/components/time-picker/time-picker.js +4 -2
  518. package/dist/components/time-picker/time-picker.js.map +1 -1
  519. package/dist/components/time-range-picker/time-range-picker.d.ts +11 -7
  520. package/dist/components/time-range-picker/time-range-picker.d.ts.map +1 -1
  521. package/dist/components/time-range-picker/time-range-picker.js +4 -2
  522. package/dist/components/time-range-picker/time-range-picker.js.map +1 -1
  523. package/dist/components/timer/timer.d.ts +1 -1
  524. package/dist/components/timestamp/timestamp.d.ts +20 -1
  525. package/dist/components/timestamp/timestamp.d.ts.map +1 -1
  526. package/dist/components/timestamp/timestamp.js +16 -5
  527. package/dist/components/timestamp/timestamp.js.map +1 -1
  528. package/dist/components/toolbar/toolbar.d.ts +17 -2
  529. package/dist/components/toolbar/toolbar.d.ts.map +1 -1
  530. package/dist/components/toolbar/toolbar.js +31 -4
  531. package/dist/components/toolbar/toolbar.js.map +1 -1
  532. package/dist/components/toolbar/use-toolbar.d.ts +4 -2
  533. package/dist/components/toolbar/use-toolbar.d.ts.map +1 -1
  534. package/dist/components/toolbar/use-toolbar.js +5 -2
  535. package/dist/components/toolbar/use-toolbar.js.map +1 -1
  536. package/dist/components/tooltip/context.d.ts +21 -0
  537. package/dist/components/tooltip/context.d.ts.map +1 -0
  538. package/dist/components/tooltip/context.js +10 -1
  539. package/dist/components/tooltip/context.js.map +1 -1
  540. package/dist/components/tooltip/tooltip.d.ts +53 -1
  541. package/dist/components/tooltip/tooltip.d.ts.map +1 -1
  542. package/dist/components/tooltip/tooltip.js +34 -3
  543. package/dist/components/tooltip/tooltip.js.map +1 -1
  544. package/dist/components/tooltip/use-tooltip.d.ts +3 -18
  545. package/dist/components/tooltip/use-tooltip.d.ts.map +1 -1
  546. package/dist/components/tooltip/use-tooltip.js +2 -0
  547. package/dist/components/tooltip/use-tooltip.js.map +1 -1
  548. package/dist/components/tour/tour.d.ts +9 -1
  549. package/dist/components/tour/tour.d.ts.map +1 -1
  550. package/dist/components/tour/tour.js +2 -0
  551. package/dist/components/tour/tour.js.map +1 -1
  552. package/dist/components/transfer/transfer.d.ts +21 -1
  553. package/dist/components/transfer/transfer.d.ts.map +1 -1
  554. package/dist/components/transfer/transfer.js +10 -2
  555. package/dist/components/transfer/transfer.js.map +1 -1
  556. package/dist/components/tree/tree.d.ts +34 -1
  557. package/dist/components/tree/tree.d.ts.map +1 -1
  558. package/dist/components/tree/tree.js +11 -0
  559. package/dist/components/tree/tree.js.map +1 -1
  560. package/dist/components/tree-select/context.js +10 -1
  561. package/dist/components/tree-select/context.js.map +1 -1
  562. package/dist/components/tree-select/tree-select.d.ts +70 -6
  563. package/dist/components/tree-select/tree-select.d.ts.map +1 -1
  564. package/dist/components/tree-select/tree-select.js +109 -12
  565. package/dist/components/tree-select/tree-select.js.map +1 -1
  566. package/dist/components/tree-select/use-tree-select.d.ts +3 -0
  567. package/dist/components/tree-select/use-tree-select.d.ts.map +1 -1
  568. package/dist/components/tree-select/use-tree-select.js +6 -1
  569. package/dist/components/tree-select/use-tree-select.js.map +1 -1
  570. package/dist/components/truncate/truncate.d.ts +25 -4
  571. package/dist/components/truncate/truncate.d.ts.map +1 -1
  572. package/dist/components/truncate/truncate.js +29 -14
  573. package/dist/components/truncate/truncate.js.map +1 -1
  574. package/dist/components/truncate/use-truncate.d.ts.map +1 -1
  575. package/dist/components/truncate/use-truncate.js +3 -1
  576. package/dist/components/truncate/use-truncate.js.map +1 -1
  577. package/dist/components/typography/typography.d.ts +35 -2
  578. package/dist/components/typography/typography.d.ts.map +1 -1
  579. package/dist/components/typography/typography.js +21 -3
  580. package/dist/components/typography/typography.js.map +1 -1
  581. package/dist/components/virtualizer/virtualizer.d.ts +26 -2
  582. package/dist/components/virtualizer/virtualizer.d.ts.map +1 -1
  583. package/dist/components/virtualizer/virtualizer.js +20 -3
  584. package/dist/components/virtualizer/virtualizer.js.map +1 -1
  585. package/dist/components/watermark/watermark.d.ts +14 -1
  586. package/dist/components/watermark/watermark.d.ts.map +1 -1
  587. package/dist/components/watermark/watermark.js +20 -5
  588. package/dist/components/watermark/watermark.js.map +1 -1
  589. package/dist/config/config.d.ts +1 -1
  590. package/dist/config/config.d.ts.map +1 -1
  591. package/dist/config/config.js +2 -1
  592. package/dist/config/config.js.map +1 -1
  593. package/dist/index.d.ts +59 -44
  594. package/dist/index.js +53 -38
  595. package/dist/package.js +1 -1
  596. package/dist/runtime/as-child.js +3 -2
  597. package/dist/runtime/as-child.js.map +1 -1
  598. package/dist/runtime/hydration.js +14 -0
  599. package/dist/runtime/hydration.js.map +1 -0
  600. package/dist/runtime/use-overlay-exit.js +0 -1
  601. package/dist/runtime/use-overlay-exit.js.map +1 -1
  602. package/dist/services/notification-service.d.ts +26 -7
  603. package/dist/services/notification-service.d.ts.map +1 -1
  604. package/dist/services/notification-service.js +35 -8
  605. package/dist/services/notification-service.js.map +1 -1
  606. package/dist/sound.d.ts +6 -7
  607. package/dist/sound.d.ts.map +1 -1
  608. package/dist/sound.js +6 -6
  609. package/dist/sound.js.map +1 -1
  610. package/package.json +15 -14
  611. package/dist/components/gradient-text/gradient-text.d.ts +0 -36
  612. package/dist/components/gradient-text/gradient-text.d.ts.map +0 -1
  613. package/dist/components/gradient-text/gradient-text.js +0 -20
  614. package/dist/components/gradient-text/gradient-text.js.map +0 -1
  615. package/dist/components/icon-wrapper/icon-wrapper.d.ts +0 -29
  616. package/dist/components/icon-wrapper/icon-wrapper.d.ts.map +0 -1
  617. package/dist/components/icon-wrapper/icon-wrapper.js +0 -20
  618. package/dist/components/icon-wrapper/icon-wrapper.js.map +0 -1
  619. package/dist/components/segmented/context.d.ts +0 -13
  620. package/dist/components/segmented/context.d.ts.map +0 -1
  621. package/dist/components/segmented/context.js +0 -24
  622. package/dist/components/segmented/context.js.map +0 -1
  623. package/dist/components/segmented/segmented.d.ts +0 -161
  624. package/dist/components/segmented/segmented.d.ts.map +0 -1
  625. package/dist/components/segmented/segmented.js +0 -142
  626. package/dist/components/segmented/segmented.js.map +0 -1
  627. package/dist/components/segmented/use-segmented.d.ts +0 -15
  628. package/dist/components/segmented/use-segmented.d.ts.map +0 -1
  629. package/dist/components/segmented/use-segmented.js +0 -22
  630. package/dist/components/segmented/use-segmented.js.map +0 -1
  631. package/dist/components/toast/context.js +0 -15
  632. package/dist/components/toast/context.js.map +0 -1
  633. package/dist/components/toast/toast.d.ts +0 -123
  634. package/dist/components/toast/toast.d.ts.map +0 -1
  635. package/dist/components/toast/toast.js +0 -112
  636. package/dist/components/toast/toast.js.map +0 -1
  637. package/dist/components/toast/use-toast.d.ts +0 -10
  638. package/dist/components/toast/use-toast.d.ts.map +0 -1
  639. package/dist/components/toast/use-toast.js +0 -17
  640. package/dist/components/toast/use-toast.js.map +0 -1
  641. package/dist/services/toast-service.d.ts +0 -69
  642. package/dist/services/toast-service.d.ts.map +0 -1
  643. package/dist/services/toast-service.js +0 -161
  644. package/dist/services/toast-service.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","names":["mergeVueProps","mergeProps"],"sources":["../../../src/components/menu/menu.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// 提供 menu 相关实现。\n\nimport type { Direction, Placement, Size, Tone } from '@xihan-ui/core'\nimport type { MenuApi, MenuGroupProps, MenuItemProps, MenuNode, MenuNodeMeta, MenuSchema, MenuTranslations } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { groupAdjacentRuns, mergeProps } from '@xihan-ui/core'\nimport { computed, defineComponent, h, mergeProps as mergeVueProps, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { mergeIntoChild } from '../../runtime/as-child'\nimport { mergePartProps } from '../../runtime/merge-props'\nimport { XhPortal } from '../../runtime/portal'\nimport { useScrollbars } from '../../runtime/use-scrollbars'\nimport { provideMenu, provideMenuGroup, provideMenuItem, provideMenuSub, useMenuContext, useMenuGroupContext, useMenuItemContext, useMenuSubContext } from './context'\nimport { useMenu, useMenuWithParent } from './use-menu'\n\ntype MenuProps = MenuSchema['props']\n\n/** 默认插槽的载荷:展开态与修改展开的动作。 */\nexport type MenuRootSlotProps = Pick<MenuApi, 'open' | 'setOpen'>\n\n/** 代铺条目时可逐槽接管的三个插槽;三个都不写即完全按数据铺。 */\nexport interface MenuItemSlots {\n /** 整条的接管口:写了它,代铺的标记位、文字、说明与快捷键一概不铺。 */\n 'item'?: (node: MenuNodeMeta) => VNode[]\n /** 只接管行首那一格(与数据里的 indicator 同一个部件),其余槽照旧由数据铺。 */\n 'item-prefix'?: (node: MenuNodeMeta) => VNode[]\n /** 只接管行尾那一格(计数、徽标、次级图标),其余槽照旧由数据铺。 */\n 'item-suffix'?: (node: MenuNodeMeta) => VNode[]\n}\n\nexport const XhMenuRoot = /* @__PURE__ */ defineComponent({\n name: 'XhMenuRoot',\n // 缺省值由 connect 给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<MenuNode[]> },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n typeahead: { type: Boolean, default: undefined },\n disabled: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<Partial<MenuTranslations>> },\n openOnHover: { type: Boolean, default: undefined },\n hoverOpenDelay: { type: Number },\n hoverCloseDelay: { type: Number },\n /**\n * 只提供 collection 时,触发器插槽给出的节点直接作为触发器使用,不再外包一个 <button>。\n * 放置部件的写法有 XhMenuTrigger 自己的 asChild,该 prop 是自动铺设路径的同一能力。\n */\n triggerAsChild: Boolean,\n },\n // open-change 携带 { open }、select 携带 { value },update:open 携带裸布尔\n emits: {\n 'open-change': (_details: PayloadOf<MenuProps, 'onOpenChange'>) => true,\n 'select': (_details: PayloadOf<MenuProps, 'onSelect'>) => true,\n 'update:open': (_open: PayloadOf<MenuProps, 'onOpenChange'>['open']) => true,\n },\n slots: Object as SlotsType<{\n 'default'?: (props: MenuRootSlotProps) => VNode[]\n 'trigger'?: () => VNode[]\n /** 整条的接管口:写了它,代铺的各格一概不铺,作者自己放置部件 */\n 'item'?: (node: MenuNodeMeta) => VNode[]\n /** 只接管行首那一格,其余槽照旧由数据铺 */\n 'item-prefix'?: (node: MenuNodeMeta) => VNode[]\n /** 只接管行尾那一格(计数、徽标、次级图标),其余槽照旧由数据铺 */\n 'item-suffix'?: (node: MenuNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyOpen: MenuProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const notifySelect: MenuProps['onSelect'] = details => emit('select', details)\n const ctx = useMenu(withXhConfig('menu', props) as MenuProps, notifyOpen, notifySelect)\n provideMenu(ctx)\n return () => (slots.default\n ? slots.default({ open: ctx.api.value.open, setOpen: ctx.api.value.setOpen })\n : props.collection\n ? renderDefaultTree(ctx.api.value.collection, slots.trigger?.() ?? null, { 'item': slots.item, 'item-prefix': slots['item-prefix'], 'item-suffix': slots['item-suffix'] }, props.triggerAsChild)\n : [])\n },\n})\n\nexport const XhMenuTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhMenuTrigger',\n // 直通属性自己合:Vue 默认把作者的处理器排在部件的后面,这里改成作者先跑\n inheritAttrs: false,\n props: {\n /** 借用作者的子节点作为触发器,不再渲染自己的包裹元素;子节点须恰好一个。 */\n asChild: Boolean,\n },\n setup(props, { slots, attrs }) {\n const ctx = useMenuContext()\n return () => {\n const part = mergePartProps({\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n }, attrs)\n const children = slots.default?.()\n // asChild:把触发器属性合到作者的节点上,不再自己渲染包裹元素\n if (props.asChild) {\n const merged = mergeIntoChild(children, part, 'menu')\n if (merged)\n return merged\n }\n return h('button', part, children)\n }\n },\n})\n\nexport const XhMenuPositioner = /* @__PURE__ */ defineComponent({\n name: 'XhMenuPositioner',\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 = useMenuContext()\n // 条目列表的自绘条:与 content 同级、绝对定位不占布局,壳是这层已经 fixed 的 positioner;浮层里的条子走 4px 档\n const bars = useScrollbars({ scrollable: () => ctx.contentRef.value, props: { size: 'sm' } })\n // 定位层搬到 portal 落点,逃开祖先的层叠上下文\n return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value, source: ctx.triggerRef }, () => [\n h('div', {\n ...mergeVueProps(ctx.api.value.getPositionerProps() as Record<string, unknown>, attrs),\n ref: (el: unknown) => { ctx.positionerRef.value = el as HTMLElement },\n }, [...(slots.default?.() ?? []), ...bars.render()]),\n ])\n },\n})\n\nexport const XhMenuContent = /* @__PURE__ */ defineComponent({\n name: 'XhMenuContent',\n setup(_, { slots }) {\n const ctx = useMenuContext()\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 XhMenuItem = /* @__PURE__ */ defineComponent({\n name: 'XhMenuItem',\n props: {\n value: { type: String, required: true },\n // 缺省交给 connect 回 collection 里查,写死 false 会盖掉数据里的禁用\n disabled: { type: Boolean, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useMenuContext()\n const item = computed<MenuItemProps>(() => ({ value: props.value, disabled: props.disabled }))\n provideMenuItem({ item })\n // 本条目持有焦点时,value 变更按新值重报焦点条目,卸载时上报焦点丢失\n const itemEl = ref<HTMLElement | null>(null)\n watch(() => props.value, (next, prev) => {\n if (next === prev)\n return\n const svc = ctx.service\n if (svc.getStatus() !== 'Started')\n return\n if (itemEl.value && svc.scope.getActiveElement() === itemEl.value)\n svc.send({ type: 'ITEM.FOCUS', value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n // 根已停机时不再送事件\n if (service.getStatus() !== 'Started')\n return\n // 按「本节点当下正持有焦点」判定,不按 value 比对\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'ITEM.LOST' })\n })\n return () => h(\n 'div',\n { ...ctx.api.value.getItemProps({ value: props.value, disabled: props.disabled }) as Record<string, unknown>, ref: itemEl },\n slots.default?.(),\n )\n },\n})\n\n/** 默认插槽的载荷:本层子菜单的展开态与修改展开的动作。 */\nexport type MenuSubSlotProps = Pick<MenuApi, 'open' | 'setOpen'>\n\n/**\n * 子菜单:内部再运行一台 menu 状态机(submenu 模式),触发条目由 XhMenuSubTrigger\n * 渲染为父菜单条目与本子菜单触发器的双重身份。本身不渲染节点。\n */\nexport const XhMenuSub = /* @__PURE__ */ defineComponent({\n name: 'XhMenuSub',\n props: {\n /** 它在父菜单中的条目身份。 */\n value: { type: String, required: true },\n disabled: { type: Boolean, default: undefined },\n collection: { type: Array as PropType<MenuNode[]> },\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n loop: { type: Boolean, default: undefined },\n openOnHover: { type: Boolean, default: undefined },\n hoverOpenDelay: { type: Number },\n /** 文字方向;默认继承父层。子层被迁移到浮层落点,无法继承父层的方向。 */\n dir: { type: String as PropType<Direction> },\n /** 语气;默认继承父层。子层是浮层落点下的同级节点,CSS 私有槽无法继承。 */\n tone: { type: String as PropType<Tone> },\n /** 尺寸;默认继承父层,理由同 tone。 */\n size: { type: String as PropType<Size> },\n hoverCloseDelay: { type: Number },\n },\n slots: Object as SlotsType<{\n default?: (props: MenuSubSlotProps) => VNode[]\n }>,\n setup(props, { slots }) {\n const parent = useMenuContext()\n const ctx = useMenuWithParent(\n {\n ...props,\n submenu: true,\n dir: props.dir ?? parent.service.prop('dir'),\n tone: props.tone ?? parent.service.prop('tone'),\n size: props.size ?? parent.service.prop('size'),\n } as MenuProps,\n undefined,\n parent.tree,\n )\n // 覆盖菜单上下文:本子树内的部件都归子机器\n provideMenu(ctx)\n provideMenuSub({ parent, value: props.value, disabled: props.disabled })\n // 父层收起(Escape、外点、选中)时本层跟着收,层层传导\n watch(() => parent.api.value.open, (open) => {\n if (!open)\n ctx.api.value.setOpen(false)\n })\n return () => slots.default?.({ open: ctx.api.value.open, setOpen: ctx.api.value.setOpen })\n },\n})\n\nexport const XhMenuSubTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhMenuSubTrigger',\n setup(_, { slots }) {\n const sub = useMenuSubContext()\n const ctx = useMenuContext()\n return () => h('div', {\n ...mergeProps(\n sub.parent.api.value.getItemProps({ value: sub.value, disabled: sub.disabled }) as Record<string, unknown>,\n ctx.api.value.getSubmenuTriggerProps({ value: sub.value, disabled: sub.disabled }) as Record<string, unknown>,\n ),\n // 子菜单的定位锚点就是这一条\n ref: (el: unknown) => {\n ctx.triggerRef.value = el as HTMLElement\n },\n }, slots.default?.())\n },\n})\n\n/** 条目中的文字载体:连打检索取它,图标与副文本的文字因此不进入检索串 */\nexport const XhMenuItemText = /* @__PURE__ */ defineComponent({\n name: 'XhMenuItemText',\n setup(_, { slots }) {\n const ctx = useMenuContext()\n const { item } = useMenuItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目中的标记位(勾选、图标),纯装饰 */\nexport const XhMenuItemIndicator = /* @__PURE__ */ defineComponent({\n name: 'XhMenuItemIndicator',\n setup(_, { slots }) {\n const ctx = useMenuContext()\n const { item } = useMenuItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目中的副文本,排在文字下一行 */\nexport const XhMenuItemDescription = /* @__PURE__ */ defineComponent({\n name: 'XhMenuItemDescription',\n setup(_, { slots }) {\n const ctx = useMenuContext()\n const { item } = useMenuItemContext()\n return () => h('span', ctx.api.value.getItemDescriptionProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目中的快捷键提示,贴行尾;纯装饰,读屏从条目文字取意 */\nexport const XhMenuItemShortcut = /* @__PURE__ */ defineComponent({\n name: 'XhMenuItemShortcut',\n setup(_, { slots }) {\n const ctx = useMenuContext()\n const { item } = useMenuItemContext()\n return () => h('span', ctx.api.value.getItemShortcutProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目行尾的作者内容(计数、徽标、次级图标);家族只管落位,不规定字号与颜色 */\nexport const XhMenuItemSuffix = /* @__PURE__ */ defineComponent({\n name: 'XhMenuItemSuffix',\n setup(_, { slots }) {\n const ctx = useMenuContext()\n const { item } = useMenuItemContext()\n return () => h('span', ctx.api.value.getItemSuffixProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhMenuGroup = /* @__PURE__ */ defineComponent({\n name: 'XhMenuGroup',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useMenuContext()\n const group = computed<MenuGroupProps>(() => ({ value: props.value }))\n provideMenuGroup({ group })\n return () => h('div', ctx.api.value.getGroupProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhMenuGroupLabel = /* @__PURE__ */ defineComponent({\n name: 'XhMenuGroupLabel',\n setup(_, { slots }) {\n const ctx = useMenuContext()\n const { group } = useMenuGroupContext()\n return () => h('span', ctx.api.value.getGroupLabelProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhMenuSeparator = /* @__PURE__ */ defineComponent({\n name: 'XhMenuSeparator',\n setup() {\n const ctx = useMenuContext()\n return () => h('div', ctx.api.value.getSeparatorProps() as Record<string, unknown>)\n },\n})\n\nexport const XhMenuArrow = /* @__PURE__ */ defineComponent({\n name: 'XhMenuArrow',\n setup() {\n const ctx = useMenuContext()\n return () => h('div', ctx.api.value.getArrowProps() as Record<string, unknown>)\n },\n})\n\n/**\n * 未写默认插槽时按 collection 铺开的整套结构,作者只提供数据。\n * 与手写部件产出的 DOM 完全一致,需要修改结构时写默认插槽,行为不变。\n * 触发器内容归作者,由 trigger 插槽承载;条目内容默认是 label,可由 item 插槽接管。\n */\nfunction renderDefaultTree(\n collection: readonly MenuNodeMeta[],\n trigger: (VNode | string)[] | null,\n itemSlots: MenuItemSlots,\n triggerAsChild?: boolean,\n): VNode[] {\n return [\n h(XhMenuTrigger, { asChild: triggerAsChild }, () => trigger ?? []),\n h(XhMenuPositioner, null, () => [\n h(XhMenuContent, null, () => renderNodes(collection, itemSlots)),\n ]),\n ]\n}\n\n/** content 的内容:分组段铺为 group,段首的分隔线落在 group 外面。 */\nfunction renderNodes(\n collection: readonly MenuNodeMeta[],\n itemSlots: MenuItemSlots,\n): VNode[] {\n return groupAdjacentRuns(collection, node => node.group).flatMap((run, runIndex) => {\n const head = run[0]!\n // 首条上的标记不产出分隔线:菜单开头不留一道空隔\n const lead = runIndex > 0 && head.separatorBefore\n ? [h(XhMenuSeparator, { key: `separator:${head.value}` })]\n : []\n if (head.group == null)\n return [...lead, renderItem(head, itemSlots)]\n const groupLabel = run.find(node => node.groupLabel != null)?.groupLabel ?? null\n return [\n ...lead,\n h(XhMenuGroup, { key: `group:${head.group}`, value: head.group }, () => [\n ...(groupLabel != null ? [h(XhMenuGroupLabel, null, () => groupLabel)] : []),\n ...run.flatMap((node, index) => [\n ...(index > 0 && node.separatorBefore ? [h(XhMenuSeparator, { key: `separator:${node.value}` })] : []),\n renderItem(node, itemSlots),\n ]),\n ]),\n ]\n })\n}\n\n/**\n * 单个条目:按数据铺标记位、文字、说明与快捷键,未提供的那几个不铺对应部件。\n *\n * 三个插槽各管一段,不必为了改一处把整条重搭:\n * - `item-prefix` / `item-suffix` 只接管行首与行尾那一格,其余槽照旧由数据铺。\n * 行首那一格与数据里的 `indicator` 同一个部件,插槽在场时以它为准。\n * - `item` 是整条的接管口:写了它,上面几格一概不铺,作者自己放置 XhMenuItemText 等部件\n * (与 ContextMenu 的 item 插槽语义不同,那边填的是文字槽)。\n */\nfunction renderItem(\n meta: MenuNodeMeta,\n itemSlots: MenuItemSlots,\n): VNode {\n const prefix = itemSlots['item-prefix']\n const suffix = itemSlots['item-suffix']\n return h(XhMenuItem, { key: meta.value, value: meta.value }, () => itemSlots.item?.(meta) ?? [\n ...(prefix\n ? [h(XhMenuItemIndicator, null, () => prefix(meta))]\n : meta.indicator != null ? [h(XhMenuItemIndicator, null, () => meta.indicator)] : []),\n h(XhMenuItemText, null, () => meta.label),\n ...(meta.description != null ? [h(XhMenuItemDescription, null, () => meta.description)] : []),\n ...(meta.shortcut != null ? [h(XhMenuItemShortcut, null, () => meta.shortcut)] : []),\n ...(suffix ? [h(XhMenuItemSuffix, null, () => suffix(meta))] : []),\n ])\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"menu.js","names":["mergeVueProps","mergeProps"],"sources":["../../../src/components/menu/menu.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// 提供 menu 相关实现。\n\nimport type { Direction, Placement, Size, Tone } from '@xihan-ui/core'\nimport type { MenuAnyItemProps, MenuApi, MenuGroupProps, MenuNode, MenuNodeMeta, MenuRadioValue, MenuSchema, MenuTranslations } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { groupAdjacentRuns, mergeProps } from '@xihan-ui/core'\nimport { computed, defineComponent, h, mergeProps as mergeVueProps, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { mergeIntoChild } from '../../runtime/as-child'\nimport { mergePartProps } from '../../runtime/merge-props'\nimport { XhPortal } from '../../runtime/portal'\nimport { useScrollbars } from '../../runtime/use-scrollbars'\nimport { provideMenu, provideMenuGroup, provideMenuItem, provideMenuSub, useMenuContext, useMenuGroupContext, useMenuItemContext, useMenuSubContext } from './context'\nimport { useMenu, useMenuWithParent } from './use-menu'\n\ntype MenuProps = MenuSchema['props']\n\n/** 默认插槽的载荷:展开态与修改展开的动作。 */\nexport type MenuRootSlotProps = Pick<MenuApi, 'open' | 'setOpen' | 'checkboxValue' | 'radioValue' | 'setCheckboxValue' | 'setRadioValue'>\n\n/** 代铺条目时可逐槽接管的三个插槽;三个都不写即完全按数据铺。 */\nexport interface MenuItemSlots {\n /** 整条的接管口:写了它,代铺的标记位、文字、说明与快捷键一概不铺。 */\n 'item'?: (node: MenuNodeMeta) => VNode[]\n /** 只接管行首那一格(与数据里的 indicator 同一个部件),其余槽照旧由数据铺。 */\n 'item-prefix'?: (node: MenuNodeMeta) => VNode[]\n /** 只接管行尾那一格(计数、徽标、次级图标),其余槽照旧由数据铺。 */\n 'item-suffix'?: (node: MenuNodeMeta) => VNode[]\n}\n\nexport const XhMenuRoot = /* @__PURE__ */ defineComponent({\n name: 'XhMenuRoot',\n // 缺省值由 connect 给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<MenuNode[]> },\n checkboxValue: { type: Array as PropType<string[]> },\n defaultCheckboxValue: { type: Array as PropType<string[]> },\n radioValue: { type: Object as PropType<MenuRadioValue> },\n defaultRadioValue: { type: Object as PropType<MenuRadioValue> },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n typeahead: { type: Boolean, default: undefined },\n disabled: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<Partial<MenuTranslations>> },\n openOnHover: { type: Boolean, default: undefined },\n hoverOpenDelay: { type: Number },\n hoverCloseDelay: { type: Number },\n /**\n * 只提供 collection 时,触发器插槽给出的节点直接作为触发器使用,不再外包一个 <button>。\n * 放置部件的写法有 XhMenuTrigger 自己的 asChild,该 prop 是自动铺设路径的同一能力。\n */\n triggerAsChild: Boolean,\n },\n // open-change 携带 { open }、select 携带 { value },update:open 携带裸布尔\n emits: {\n 'open-change': (_details: PayloadOf<MenuProps, 'onOpenChange'>) => true,\n 'select': (_details: PayloadOf<MenuProps, 'onSelect'>) => true,\n 'checkbox-value-change': (_details: PayloadOf<MenuProps, 'onCheckboxValueChange'>) => true,\n 'radio-value-change': (_details: PayloadOf<MenuProps, 'onRadioValueChange'>) => true,\n 'update:open': (_open: PayloadOf<MenuProps, 'onOpenChange'>['open']) => true,\n },\n slots: Object as SlotsType<{\n 'default'?: (props: MenuRootSlotProps) => VNode[]\n 'trigger'?: () => VNode[]\n /** 整条的接管口:写了它,代铺的各格一概不铺,作者自己放置部件 */\n 'item'?: (node: MenuNodeMeta) => VNode[]\n /** 只接管行首那一格,其余槽照旧由数据铺 */\n 'item-prefix'?: (node: MenuNodeMeta) => VNode[]\n /** 只接管行尾那一格(计数、徽标、次级图标),其余槽照旧由数据铺 */\n 'item-suffix'?: (node: MenuNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyOpen: MenuProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const notifySelect: MenuProps['onSelect'] = details => emit('select', details)\n const notifyCheckboxValue: MenuProps['onCheckboxValueChange'] = details => emit('checkbox-value-change', details)\n const notifyRadioValue: MenuProps['onRadioValueChange'] = details => emit('radio-value-change', details)\n const ctx = useMenu(withXhConfig('menu', props) as MenuProps, notifyOpen, notifySelect, notifyCheckboxValue, notifyRadioValue)\n provideMenu(ctx)\n return () => (slots.default\n ? slots.default({\n open: ctx.api.value.open,\n setOpen: ctx.api.value.setOpen,\n checkboxValue: ctx.api.value.checkboxValue,\n radioValue: ctx.api.value.radioValue,\n setCheckboxValue: ctx.api.value.setCheckboxValue,\n setRadioValue: ctx.api.value.setRadioValue,\n })\n : props.collection\n ? renderDefaultTree(ctx.api.value.collection, slots.trigger?.() ?? null, { 'item': slots.item, 'item-prefix': slots['item-prefix'], 'item-suffix': slots['item-suffix'] }, props.triggerAsChild)\n : [])\n },\n})\n\nexport const XhMenuTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhMenuTrigger',\n // 直通属性自己合:Vue 默认把作者的处理器排在部件的后面,这里改成作者先跑\n inheritAttrs: false,\n props: {\n /** 借用作者的子节点作为触发器,不再渲染自己的包裹元素;子节点须恰好一个。 */\n asChild: Boolean,\n },\n setup(props, { slots, attrs }) {\n const ctx = useMenuContext()\n return () => {\n const part = mergePartProps({\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n }, attrs)\n const children = slots.default?.()\n // asChild:把触发器属性合到作者的节点上,不再自己渲染包裹元素\n if (props.asChild) {\n const merged = mergeIntoChild(children, part, 'menu')\n if (merged)\n return merged\n }\n return h('button', part, children)\n }\n },\n})\n\nexport const XhMenuPositioner = /* @__PURE__ */ defineComponent({\n name: 'XhMenuPositioner',\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 = useMenuContext()\n // 条目列表的自绘条:与 content 同级、绝对定位不占布局,壳是这层已经 fixed 的 positioner;浮层里的条子走 4px 档\n const bars = useScrollbars({ scrollable: () => ctx.contentRef.value, props: { size: 'sm' } })\n // 定位层搬到 portal 落点,逃开祖先的层叠上下文\n return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value, source: ctx.triggerRef }, () => [\n h('div', {\n ...mergeVueProps(ctx.api.value.getPositionerProps() as Record<string, unknown>, attrs),\n ref: (el: unknown) => { ctx.positionerRef.value = el as HTMLElement },\n }, [...(slots.default?.() ?? []), ...bars.render()]),\n ])\n },\n})\n\nexport const XhMenuContent = /* @__PURE__ */ defineComponent({\n name: 'XhMenuContent',\n setup(_, { slots }) {\n const ctx = useMenuContext()\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\nfunction createMenuItemComponent(name: string, kind: 'item' | 'checkbox' | 'radio'): ReturnType<typeof defineComponent> {\n return defineComponent({\n name,\n props: {\n value: { type: String, required: true },\n disabled: { type: Boolean, default: undefined },\n closeOnSelect: { type: Boolean, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useMenuContext()\n const radioGroup = kind === 'radio' ? useMenuGroupContext() : null\n const item = computed<MenuAnyItemProps>(() => kind === 'radio'\n ? { value: props.value, disabled: props.disabled, closeOnSelect: props.closeOnSelect, kind, group: radioGroup!.group.value.value }\n : { value: props.value, disabled: props.disabled, closeOnSelect: props.closeOnSelect, kind })\n provideMenuItem({ item })\n // 本条目持有焦点时,value 变更按新值重报焦点条目,卸载时上报焦点丢失\n const itemEl = ref<HTMLElement | null>(null)\n watch(() => props.value, (next, prev) => {\n if (next === prev)\n return\n const svc = ctx.service\n if (svc.getStatus() !== 'Started')\n return\n if (itemEl.value && svc.scope.getActiveElement() === itemEl.value)\n svc.send({ type: 'ITEM.FOCUS', value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n // 根已停机时不再送事件\n if (service.getStatus() !== 'Started')\n return\n // 按「本节点当下正持有焦点」判定,不按 value 比对\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'ITEM.LOST' })\n })\n return () => {\n const declaration = item.value\n const part = declaration.kind === 'checkbox'\n ? ctx.api.value.getCheckboxItemProps(declaration)\n : declaration.kind === 'radio'\n ? ctx.api.value.getRadioItemProps(declaration)\n : ctx.api.value.getItemProps(declaration)\n return h('div', { ...part as Record<string, unknown>, ref: itemEl }, slots.default?.())\n }\n },\n })\n}\n\nexport const XhMenuItem = /* @__PURE__ */ createMenuItemComponent('XhMenuItem', 'item')\nexport const XhMenuCheckboxItem = /* @__PURE__ */ createMenuItemComponent('XhMenuCheckboxItem', 'checkbox')\nexport const XhMenuRadioItem = /* @__PURE__ */ createMenuItemComponent('XhMenuRadioItem', 'radio')\n\n/** 默认插槽的载荷:本层子菜单的展开态与修改展开的动作。 */\nexport type MenuSubSlotProps = Pick<MenuApi, 'open' | 'setOpen'>\n\n/**\n * 子菜单:内部再运行一台 menu 状态机(submenu 模式),触发条目由 XhMenuSubTrigger\n * 渲染为父菜单条目与本子菜单触发器的双重身份。本身不渲染节点。\n */\nexport const XhMenuSub = /* @__PURE__ */ defineComponent({\n name: 'XhMenuSub',\n props: {\n /** 它在父菜单中的条目身份。 */\n value: { type: String, required: true },\n disabled: { type: Boolean, default: undefined },\n collection: { type: Array as PropType<MenuNode[]> },\n checkboxValue: { type: Array as PropType<string[]> },\n defaultCheckboxValue: { type: Array as PropType<string[]> },\n radioValue: { type: Object as PropType<MenuRadioValue> },\n defaultRadioValue: { type: Object as PropType<MenuRadioValue> },\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n loop: { type: Boolean, default: undefined },\n openOnHover: { type: Boolean, default: undefined },\n hoverOpenDelay: { type: Number },\n /** 文字方向;默认继承父层。子层被迁移到浮层落点,无法继承父层的方向。 */\n dir: { type: String as PropType<Direction> },\n /** 语气;默认继承父层。子层是浮层落点下的同级节点,CSS 私有槽无法继承。 */\n tone: { type: String as PropType<Tone> },\n /** 尺寸;默认继承父层,理由同 tone。 */\n size: { type: String as PropType<Size> },\n hoverCloseDelay: { type: Number },\n },\n emits: {\n 'checkbox-value-change': (_details: PayloadOf<MenuProps, 'onCheckboxValueChange'>) => true,\n 'radio-value-change': (_details: PayloadOf<MenuProps, 'onRadioValueChange'>) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: MenuSubSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const parent = useMenuContext()\n const ctx = useMenuWithParent(\n {\n ...props,\n submenu: true,\n dir: props.dir ?? parent.service.prop('dir'),\n tone: props.tone ?? parent.service.prop('tone'),\n size: props.size ?? parent.service.prop('size'),\n } as MenuProps,\n undefined,\n parent.tree,\n details => emit('checkbox-value-change', details),\n details => emit('radio-value-change', details),\n )\n // 覆盖菜单上下文:本子树内的部件都归子机器\n provideMenu(ctx)\n provideMenuSub({ parent, value: props.value, disabled: props.disabled })\n // 父层收起(Escape、外点、选中)时本层跟着收,层层传导\n watch(() => parent.api.value.open, (open) => {\n if (!open)\n ctx.api.value.setOpen(false)\n })\n return () => slots.default?.({ open: ctx.api.value.open, setOpen: ctx.api.value.setOpen })\n },\n})\n\nexport const XhMenuSubTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhMenuSubTrigger',\n setup(_, { slots }) {\n const sub = useMenuSubContext()\n const ctx = useMenuContext()\n return () => h('div', {\n ...mergeProps(\n sub.parent.api.value.getItemProps({ value: sub.value, disabled: sub.disabled }) as Record<string, unknown>,\n ctx.api.value.getSubmenuTriggerProps({ value: sub.value, disabled: sub.disabled }) as Record<string, unknown>,\n ),\n // 子菜单的定位锚点就是这一条\n ref: (el: unknown) => {\n ctx.triggerRef.value = el as HTMLElement\n },\n }, slots.default?.())\n },\n})\n\n/** 条目中的文字载体:连打检索取它,图标与副文本的文字因此不进入检索串 */\nexport const XhMenuItemText = /* @__PURE__ */ defineComponent({\n name: 'XhMenuItemText',\n setup(_, { slots }) {\n const ctx = useMenuContext()\n const { item } = useMenuItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目中的标记位(勾选、图标),纯装饰 */\nexport const XhMenuItemIndicator = /* @__PURE__ */ defineComponent({\n name: 'XhMenuItemIndicator',\n setup(_, { slots }) {\n const ctx = useMenuContext()\n const { item } = useMenuItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目中的副文本,排在文字下一行 */\nexport const XhMenuItemDescription = /* @__PURE__ */ defineComponent({\n name: 'XhMenuItemDescription',\n setup(_, { slots }) {\n const ctx = useMenuContext()\n const { item } = useMenuItemContext()\n return () => h('span', ctx.api.value.getItemDescriptionProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目中的快捷键提示,贴行尾;纯装饰,读屏从条目文字取意 */\nexport const XhMenuItemShortcut = /* @__PURE__ */ defineComponent({\n name: 'XhMenuItemShortcut',\n setup(_, { slots }) {\n const ctx = useMenuContext()\n const { item } = useMenuItemContext()\n return () => h('span', ctx.api.value.getItemShortcutProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目行尾的作者内容(计数、徽标、次级图标);家族只管落位,不规定字号与颜色 */\nexport const XhMenuItemSuffix = /* @__PURE__ */ defineComponent({\n name: 'XhMenuItemSuffix',\n setup(_, { slots }) {\n const ctx = useMenuContext()\n const { item } = useMenuItemContext()\n return () => h('span', ctx.api.value.getItemSuffixProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhMenuGroup = /* @__PURE__ */ defineComponent({\n name: 'XhMenuGroup',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useMenuContext()\n const group = computed<MenuGroupProps>(() => ({ value: props.value }))\n provideMenuGroup({ group })\n return () => h('div', ctx.api.value.getGroupProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhMenuRadioGroup = /* @__PURE__ */ defineComponent({\n name: 'XhMenuRadioGroup',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useMenuContext()\n const group = computed<MenuGroupProps>(() => ({ value: props.value }))\n provideMenuGroup({ group })\n return () => h('div', ctx.api.value.getRadioGroupProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhMenuGroupLabel = /* @__PURE__ */ defineComponent({\n name: 'XhMenuGroupLabel',\n setup(_, { slots }) {\n const ctx = useMenuContext()\n const { group } = useMenuGroupContext()\n return () => h('span', ctx.api.value.getGroupLabelProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhMenuSeparator = /* @__PURE__ */ defineComponent({\n name: 'XhMenuSeparator',\n setup() {\n const ctx = useMenuContext()\n return () => h('div', ctx.api.value.getSeparatorProps() as Record<string, unknown>)\n },\n})\n\nexport const XhMenuArrow = /* @__PURE__ */ defineComponent({\n name: 'XhMenuArrow',\n setup() {\n const ctx = useMenuContext()\n return () => h('div', ctx.api.value.getArrowProps() as Record<string, unknown>)\n },\n})\n\n/**\n * 未写默认插槽时按 collection 铺开的整套结构,作者只提供数据。\n * 与手写部件产出的 DOM 完全一致,需要修改结构时写默认插槽,行为不变。\n * 触发器内容归作者,由 trigger 插槽承载;条目内容默认是 label,可由 item 插槽接管。\n */\nfunction renderDefaultTree(\n collection: readonly MenuNodeMeta[],\n trigger: (VNode | string)[] | null,\n itemSlots: MenuItemSlots,\n triggerAsChild?: boolean,\n): VNode[] {\n return [\n h(XhMenuTrigger, { asChild: triggerAsChild }, () => trigger ?? []),\n h(XhMenuPositioner, null, () => [\n h(XhMenuContent, null, () => renderNodes(collection, itemSlots)),\n ]),\n ]\n}\n\n/** content 的内容:分组段铺为 group,段首的分隔线落在 group 外面。 */\nfunction renderNodes(\n collection: readonly MenuNodeMeta[],\n itemSlots: MenuItemSlots,\n): VNode[] {\n return groupAdjacentRuns(collection, node => node.group).flatMap((run, runIndex) => {\n const head = run[0]!\n // 首条上的标记不产出分隔线:菜单开头不留一道空隔\n const lead = runIndex > 0 && head.separatorBefore\n ? [h(XhMenuSeparator, { key: `separator:${head.value}` })]\n : []\n if (head.group == null)\n return [...lead, renderItem(head, itemSlots)]\n const groupLabel = run.find(node => node.groupLabel != null)?.groupLabel ?? null\n return [\n ...lead,\n h(head.kind === 'radio' ? XhMenuRadioGroup : XhMenuGroup, { key: `group:${head.group}`, value: head.group }, () => [\n ...(groupLabel != null ? [h(XhMenuGroupLabel, null, () => groupLabel)] : []),\n ...run.flatMap((node, index) => [\n ...(index > 0 && node.separatorBefore ? [h(XhMenuSeparator, { key: `separator:${node.value}` })] : []),\n renderItem(node, itemSlots),\n ]),\n ]),\n ]\n })\n}\n\n/**\n * 单个条目:按数据铺标记位、文字、说明与快捷键,未提供的那几个不铺对应部件。\n *\n * 三个插槽各管一段,不必为了改一处把整条重搭:\n * - `item-prefix` / `item-suffix` 只接管行首与行尾那一格,其余槽照旧由数据铺。\n * 行首那一格与数据里的 `indicator` 同一个部件,插槽在场时以它为准。\n * - `item` 是整条的接管口:写了它,上面几格一概不铺,作者自己放置 XhMenuItemText 等部件\n * (与 ContextMenu 的 item 插槽语义不同,那边填的是文字槽)。\n */\nfunction renderItem(\n meta: MenuNodeMeta,\n itemSlots: MenuItemSlots,\n): VNode {\n const prefix = itemSlots['item-prefix']\n const suffix = itemSlots['item-suffix']\n const Item = meta.kind === 'checkbox' ? XhMenuCheckboxItem : meta.kind === 'radio' ? XhMenuRadioItem : XhMenuItem\n return h(Item, { key: meta.value, value: meta.value, closeOnSelect: meta.closeOnSelect }, () => itemSlots.item?.(meta) ?? [\n ...(prefix\n ? [h(XhMenuItemIndicator, null, () => prefix(meta))]\n : meta.indicator != null\n ? [h(XhMenuItemIndicator, null, () => meta.indicator)]\n : meta.kind !== 'item' ? [h(XhMenuItemIndicator)] : []),\n h(XhMenuItemText, null, () => meta.label),\n ...(meta.description != null ? [h(XhMenuItemDescription, null, () => meta.description)] : []),\n ...(meta.shortcut != null ? [h(XhMenuItemShortcut, null, () => meta.shortcut)] : []),\n ...(suffix ? [h(XhMenuItemSuffix, null, () => suffix(meta))] : []),\n ])\n}\n"],"mappings":"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"}
@@ -16,7 +16,7 @@ interface MenuContext {
16
16
  portalTarget: ComputedRef<string | Element>;
17
17
  }
18
18
  /** 公开 composable:建立一棵独立菜单树。 */
19
- declare function useMenu(props: MenuSchema['props'], onOpenChange?: MenuSchema['props']['onOpenChange'], onSelect?: MenuSchema['props']['onSelect']): MenuContext;
19
+ declare function useMenu(props: MenuSchema['props'], onOpenChange?: MenuSchema['props']['onOpenChange'], onSelect?: MenuSchema['props']['onSelect'], onCheckboxValueChange?: MenuSchema['props']['onCheckboxValueChange'], onRadioValueChange?: MenuSchema['props']['onRadioValueChange']): MenuContext;
20
20
  //#endregion
21
21
  export { MenuContext, useMenu };
22
22
  //# sourceMappingURL=use-menu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-menu.d.ts","names":[],"sources":["../../../src/components/menu/use-menu.ts"],"mappings":";;;;UAoBiB;EACf,SAAS,QAAQ;EACjB,KAAK,YAAY;EACjB,YAAY,IAAI;EAChB,eAAe,IAAI;EACnB,YAAY,IAAI;;EAEhB,MAAM;;EAEN,SAAS;;EAET,cAAc,qBAAqB;;;iBA0ErB,QACd,OAAO,qBACP,eAAe,qCACf,WAAW,kCACV"}
1
+ {"version":3,"file":"use-menu.d.ts","names":[],"sources":["../../../src/components/menu/use-menu.ts"],"mappings":";;;;UAoBiB;EACf,SAAS,QAAQ;EACjB,KAAK,YAAY;EACjB,YAAY,IAAI;EAChB,eAAe,IAAI;EACnB,YAAY,IAAI;;EAEhB,MAAM;;EAEN,SAAS;;EAET,cAAc,qBAAqB;;;iBA8ErB,QACd,OAAO,qBACP,eAAe,qCACf,WAAW,iCACX,wBAAwB,8CACxB,qBAAqB,4CACpB"}
@@ -8,7 +8,7 @@ import { createRuntimeConfig, createScope } from "@xihan-ui/core";
8
8
  import { connectMenu, createMenuTreeNode, menuMachine } from "@xihan-ui/headless";
9
9
  import { createPositionEngine } from "@xihan-ui/position";
10
10
  //#region src/components/menu/use-menu.ts
11
- function useMenuImpl(props, onOpenChange, onSelect, treeParent) {
11
+ function useMenuImpl(props, onOpenChange, onSelect, onCheckboxValueChange, onRadioValueChange, treeParent) {
12
12
  const xhConfig = useXhConfig();
13
13
  const triggerRef = ref(null);
14
14
  const positionerRef = ref(null);
@@ -26,7 +26,9 @@ function useMenuImpl(props, onOpenChange, onSelect, treeParent) {
26
26
  service = useMachine(menuMachine, () => ({
27
27
  ...props,
28
28
  onOpenChange,
29
- onSelect: treeParent ? tree.select : onSelect
29
+ onSelect: treeParent ? tree.select : onSelect,
30
+ onCheckboxValueChange,
31
+ onRadioValueChange
30
32
  }), scope);
31
33
  const releaseParent = treeParent?.registerChild(tree);
32
34
  onBeforeUnmount(() => releaseParent?.());
@@ -71,12 +73,12 @@ function useMenuImpl(props, onOpenChange, onSelect, treeParent) {
71
73
  };
72
74
  }
73
75
  /** 公开 composable:建立一棵独立菜单树。 */
74
- function useMenu(props, onOpenChange, onSelect) {
75
- return useMenuImpl(props, onOpenChange, onSelect);
76
+ function useMenu(props, onOpenChange, onSelect, onCheckboxValueChange, onRadioValueChange) {
77
+ return useMenuImpl(props, onOpenChange, onSelect, onCheckboxValueChange, onRadioValueChange);
76
78
  }
77
79
  /** 组合部件内部入口:把子菜单连接到 headless 逻辑树。 */
78
- function useMenuWithParent(props, onOpenChange, treeParent) {
79
- return useMenuImpl(props, onOpenChange, void 0, treeParent);
80
+ function useMenuWithParent(props, onOpenChange, treeParent, onCheckboxValueChange, onRadioValueChange) {
81
+ return useMenuImpl(props, onOpenChange, void 0, onCheckboxValueChange, onRadioValueChange, treeParent);
80
82
  }
81
83
  //#endregion
82
84
  export { useMenu, useMenuWithParent };
@@ -1 +1 @@
1
- {"version":3,"file":"use-menu.js","names":[],"sources":["../../../src/components/menu/use-menu.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 menu 相关实现。\n\nimport type { Cleanup, Layer, RuntimeConfig, Service } from '@xihan-ui/core'\nimport type { MenuApi, MenuSchema, MenuTreeNode } from '@xihan-ui/headless'\nimport type { ComputedRef, Ref } from 'vue'\nimport { createRuntimeConfig, createScope } from '@xihan-ui/core'\nimport { connectMenu, createMenuTreeNode, menuMachine } from '@xihan-ui/headless'\nimport { createPositionEngine } from '@xihan-ui/position'\nimport { computed, onBeforeUnmount, ref } from 'vue'\nimport { useXhConfig } from '../../config/config'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { useOverlayExit } from '../../runtime/use-overlay-exit'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface MenuContext {\n service: Service<MenuSchema>\n api: ComputedRef<MenuApi>\n triggerRef: Ref<HTMLElement | null>\n positionerRef: Ref<HTMLElement | null>\n contentRef: Ref<HTMLElement | null>\n /** Portal 之外的逻辑父子、悬停区域与选择收链由 headless 节点统一维护。 */\n tree: MenuTreeNode\n /** 当前是否应当渲染:退场动画播完之前仍为真。 */\n visible: Ref<boolean>\n /** 浮层迁移到的位置:全局配置的容器 > 运行时的浮层落点 > body。 */\n portalTarget: ComputedRef<string | Element>\n}\n\nfunction useMenuImpl(\n props: MenuSchema['props'],\n onOpenChange?: MenuSchema['props']['onOpenChange'],\n onSelect?: MenuSchema['props']['onSelect'],\n treeParent?: MenuTreeNode,\n): MenuContext {\n const xhConfig = useXhConfig()\n const triggerRef = ref<HTMLElement | null>(null)\n const positionerRef = ref<HTMLElement | null>(null)\n const contentRef = ref<HTMLElement | null>(null)\n\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n let service: Service<MenuSchema> | null = null\n const tree = createMenuTreeNode({\n getPositioner: () => positionerRef.value,\n isOpen: () => service?.state.get() === 'open',\n close: () => service?.send({ type: 'CLOSE' }),\n isRoot: () => !(service?.prop('submenu') ?? props.submenu),\n onRootSelect: details => onSelect?.(details),\n })\n service = useMachine(menuMachine, () => ({\n ...props,\n onOpenChange,\n onSelect: treeParent ? tree.select : onSelect,\n }), scope)\n const releaseParent = treeParent?.registerChild(tree)\n onBeforeUnmount(() => releaseParent?.())\n\n // 服务端没有 DOM、也就没有退场:config 传 null 时闸门退化成「跟着展开态」\n let config: RuntimeConfig | null = null\n\n if (typeof document !== 'undefined') {\n config = createRuntimeConfig({ scope, idGenerator: idGen })\n\n // 只提供注册函数,入栈出栈由机器的 trackLayer 效应按展开态驱动\n const registerLayer = (): { layer: Layer, dispose: Cleanup } => config!.layerRegistry.register({\n kind: 'popover',\n node: () => contentRef.value,\n // trigger 记为本层分支,点它算层内交互;\n // 浮层壳一并记上:条目列表之外还浮着自绘滚动条,按住它拖动不该把菜单消解掉\n branches: () => [triggerRef.value, positionerRef.value].filter(Boolean) as Element[],\n isModal: () => false,\n surfaces: () => [],\n })\n\n // 定位引擎由适配器注入,机器只经端口驱动\n service.refs.set('config', config!)\n service.refs.set('registerLayer', registerLayer)\n service.refs.set('position', createPositionEngine())\n service.refs.set('getAnchorEl', () => triggerRef.value)\n service.refs.set('getFloatingEl', () => positionerRef.value)\n service.refs.set('getContentEl', () => contentRef.value)\n service.refs.set('getHoverBranches', tree.getHoverBranches)\n }\n\n const api = computed(() => connectMenu(service, vueNormalize))\n // 退场闸门:收起从跟着 open 走,改成跟着 presence 走\n const visible = useOverlayExit({\n config,\n isOpen: () => api.value.open,\n contentRef,\n onPresence: presence => service.refs.set('presence', presence),\n })\n // 全局配置写了容器就用它,否则落到运行时那个单一浮层落点;没有 DOM 时才回到 body\n const portalTarget = computed<string | Element>(() => xhConfig.value.portalContainer?.() ?? config?.portalContainer() ?? 'body')\n\n return { visible, service, api, triggerRef, positionerRef, contentRef, tree, portalTarget }\n}\n\n/** 公开 composable:建立一棵独立菜单树。 */\nexport function useMenu(\n props: MenuSchema['props'],\n onOpenChange?: MenuSchema['props']['onOpenChange'],\n onSelect?: MenuSchema['props']['onSelect'],\n): MenuContext {\n return useMenuImpl(props, onOpenChange, onSelect)\n}\n\n/** 组合部件内部入口:把子菜单连接到 headless 逻辑树。 */\nexport function useMenuWithParent(\n props: MenuSchema['props'],\n onOpenChange: MenuSchema['props']['onOpenChange'] | undefined,\n treeParent: MenuTreeNode,\n): MenuContext {\n return useMenuImpl(props, onOpenChange, undefined, treeParent)\n}\n"],"mappings":";;;;;;;;;;AAkCA,SAAS,YACP,OACA,cACA,UACA,YACa;CACb,MAAM,WAAW,YAAY;CAC7B,MAAM,aAAa,IAAwB,IAAI;CAC/C,MAAM,gBAAgB,IAAwB,IAAI;CAClD,MAAM,aAAa,IAAwB,IAAI;CAE/C,MAAM,QAAQ,qBAAqB;CACnC,MAAM,QAAQ,YAAY,MAAM,KAAK;CACrC,IAAI,UAAsC;CAC1C,MAAM,OAAO,mBAAmB;EAC9B,qBAAqB,cAAc;EACnC,cAAc,SAAS,MAAM,IAAI,MAAM;EACvC,aAAa,SAAS,KAAK,EAAE,MAAM,QAAQ,CAAC;EAC5C,cAAc,EAAE,SAAS,KAAK,SAAS,KAAK,MAAM;EAClD,eAAc,YAAW,WAAW,OAAO;CAC7C,CAAC;CACD,UAAU,WAAW,oBAAoB;EACvC,GAAG;EACH;EACA,UAAU,aAAa,KAAK,SAAS;CACvC,IAAI,KAAK;CACT,MAAM,gBAAgB,YAAY,cAAc,IAAI;CACpD,sBAAsB,gBAAgB,CAAC;CAGvC,IAAI,SAA+B;CAEnC,IAAI,OAAO,aAAa,aAAa;EACnC,SAAS,oBAAoB;GAAE;GAAO,aAAa;EAAM,CAAC;EAG1D,MAAM,sBAA0D,OAAQ,cAAc,SAAS;GAC7F,MAAM;GACN,YAAY,WAAW;GAGvB,gBAAgB,CAAC,WAAW,OAAO,cAAc,KAAK,CAAC,CAAC,OAAO,OAAO;GACtE,eAAe;GACf,gBAAgB,CAAC;EACnB,CAAC;EAGD,QAAQ,KAAK,IAAI,UAAU,MAAO;EAClC,QAAQ,KAAK,IAAI,iBAAiB,aAAa;EAC/C,QAAQ,KAAK,IAAI,YAAY,qBAAqB,CAAC;EACnD,QAAQ,KAAK,IAAI,qBAAqB,WAAW,KAAK;EACtD,QAAQ,KAAK,IAAI,uBAAuB,cAAc,KAAK;EAC3D,QAAQ,KAAK,IAAI,sBAAsB,WAAW,KAAK;EACvD,QAAQ,KAAK,IAAI,oBAAoB,KAAK,gBAAgB;CAC5D;CAEA,MAAM,MAAM,eAAe,YAAY,SAAS,YAAY,CAAC;CAE7D,MAAM,UAAU,eAAe;EAC7B;EACA,cAAc,IAAI,MAAM;EACxB;EACA,aAAY,aAAY,QAAQ,KAAK,IAAI,YAAY,QAAQ;CAC/D,CAAC;CAED,MAAM,eAAe,eAAiC,SAAS,MAAM,kBAAkB,KAAK,QAAQ,gBAAgB,KAAK,MAAM;CAE/H,OAAO;EAAE;EAAS;EAAS;EAAK;EAAY;EAAe;EAAY;EAAM;CAAa;AAC5F;;AAGA,SAAgB,QACd,OACA,cACA,UACa;CACb,OAAO,YAAY,OAAO,cAAc,QAAQ;AAClD;;AAGA,SAAgB,kBACd,OACA,cACA,YACa;CACb,OAAO,YAAY,OAAO,cAAc,KAAA,GAAW,UAAU;AAC/D"}
1
+ {"version":3,"file":"use-menu.js","names":[],"sources":["../../../src/components/menu/use-menu.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 menu 相关实现。\n\nimport type { Cleanup, Layer, RuntimeConfig, Service } from '@xihan-ui/core'\nimport type { MenuApi, MenuSchema, MenuTreeNode } from '@xihan-ui/headless'\nimport type { ComputedRef, Ref } from 'vue'\nimport { createRuntimeConfig, createScope } from '@xihan-ui/core'\nimport { connectMenu, createMenuTreeNode, menuMachine } from '@xihan-ui/headless'\nimport { createPositionEngine } from '@xihan-ui/position'\nimport { computed, onBeforeUnmount, ref } from 'vue'\nimport { useXhConfig } from '../../config/config'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { useOverlayExit } from '../../runtime/use-overlay-exit'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface MenuContext {\n service: Service<MenuSchema>\n api: ComputedRef<MenuApi>\n triggerRef: Ref<HTMLElement | null>\n positionerRef: Ref<HTMLElement | null>\n contentRef: Ref<HTMLElement | null>\n /** Portal 之外的逻辑父子、悬停区域与选择收链由 headless 节点统一维护。 */\n tree: MenuTreeNode\n /** 当前是否应当渲染:退场动画播完之前仍为真。 */\n visible: Ref<boolean>\n /** 浮层迁移到的位置:全局配置的容器 > 运行时的浮层落点 > body。 */\n portalTarget: ComputedRef<string | Element>\n}\n\nfunction useMenuImpl(\n props: MenuSchema['props'],\n onOpenChange?: MenuSchema['props']['onOpenChange'],\n onSelect?: MenuSchema['props']['onSelect'],\n onCheckboxValueChange?: MenuSchema['props']['onCheckboxValueChange'],\n onRadioValueChange?: MenuSchema['props']['onRadioValueChange'],\n treeParent?: MenuTreeNode,\n): MenuContext {\n const xhConfig = useXhConfig()\n const triggerRef = ref<HTMLElement | null>(null)\n const positionerRef = ref<HTMLElement | null>(null)\n const contentRef = ref<HTMLElement | null>(null)\n\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n let service: Service<MenuSchema> | null = null\n const tree = createMenuTreeNode({\n getPositioner: () => positionerRef.value,\n isOpen: () => service?.state.get() === 'open',\n close: () => service?.send({ type: 'CLOSE' }),\n isRoot: () => !(service?.prop('submenu') ?? props.submenu),\n onRootSelect: details => onSelect?.(details),\n })\n service = useMachine(menuMachine, () => ({\n ...props,\n onOpenChange,\n onSelect: treeParent ? tree.select : onSelect,\n onCheckboxValueChange,\n onRadioValueChange,\n }), scope)\n const releaseParent = treeParent?.registerChild(tree)\n onBeforeUnmount(() => releaseParent?.())\n\n // 服务端没有 DOM、也就没有退场:config 传 null 时闸门退化成「跟着展开态」\n let config: RuntimeConfig | null = null\n\n if (typeof document !== 'undefined') {\n config = createRuntimeConfig({ scope, idGenerator: idGen })\n\n // 只提供注册函数,入栈出栈由机器的 trackLayer 效应按展开态驱动\n const registerLayer = (): { layer: Layer, dispose: Cleanup } => config!.layerRegistry.register({\n kind: 'popover',\n node: () => contentRef.value,\n // trigger 记为本层分支,点它算层内交互;\n // 浮层壳一并记上:条目列表之外还浮着自绘滚动条,按住它拖动不该把菜单消解掉\n branches: () => [triggerRef.value, positionerRef.value].filter(Boolean) as Element[],\n isModal: () => false,\n surfaces: () => [],\n })\n\n // 定位引擎由适配器注入,机器只经端口驱动\n service.refs.set('config', config!)\n service.refs.set('registerLayer', registerLayer)\n service.refs.set('position', createPositionEngine())\n service.refs.set('getAnchorEl', () => triggerRef.value)\n service.refs.set('getFloatingEl', () => positionerRef.value)\n service.refs.set('getContentEl', () => contentRef.value)\n service.refs.set('getHoverBranches', tree.getHoverBranches)\n }\n\n const api = computed(() => connectMenu(service, vueNormalize))\n // 退场闸门:收起从跟着 open 走,改成跟着 presence 走\n const visible = useOverlayExit({\n config,\n isOpen: () => api.value.open,\n contentRef,\n onPresence: presence => service.refs.set('presence', presence),\n })\n // 全局配置写了容器就用它,否则落到运行时那个单一浮层落点;没有 DOM 时才回到 body\n const portalTarget = computed<string | Element>(() => xhConfig.value.portalContainer?.() ?? config?.portalContainer() ?? 'body')\n\n return { visible, service, api, triggerRef, positionerRef, contentRef, tree, portalTarget }\n}\n\n/** 公开 composable:建立一棵独立菜单树。 */\nexport function useMenu(\n props: MenuSchema['props'],\n onOpenChange?: MenuSchema['props']['onOpenChange'],\n onSelect?: MenuSchema['props']['onSelect'],\n onCheckboxValueChange?: MenuSchema['props']['onCheckboxValueChange'],\n onRadioValueChange?: MenuSchema['props']['onRadioValueChange'],\n): MenuContext {\n return useMenuImpl(props, onOpenChange, onSelect, onCheckboxValueChange, onRadioValueChange)\n}\n\n/** 组合部件内部入口:把子菜单连接到 headless 逻辑树。 */\nexport function useMenuWithParent(\n props: MenuSchema['props'],\n onOpenChange: MenuSchema['props']['onOpenChange'] | undefined,\n treeParent: MenuTreeNode,\n onCheckboxValueChange?: MenuSchema['props']['onCheckboxValueChange'],\n onRadioValueChange?: MenuSchema['props']['onRadioValueChange'],\n): MenuContext {\n return useMenuImpl(props, onOpenChange, undefined, onCheckboxValueChange, onRadioValueChange, treeParent)\n}\n"],"mappings":";;;;;;;;;;AAkCA,SAAS,YACP,OACA,cACA,UACA,uBACA,oBACA,YACa;CACb,MAAM,WAAW,YAAY;CAC7B,MAAM,aAAa,IAAwB,IAAI;CAC/C,MAAM,gBAAgB,IAAwB,IAAI;CAClD,MAAM,aAAa,IAAwB,IAAI;CAE/C,MAAM,QAAQ,qBAAqB;CACnC,MAAM,QAAQ,YAAY,MAAM,KAAK;CACrC,IAAI,UAAsC;CAC1C,MAAM,OAAO,mBAAmB;EAC9B,qBAAqB,cAAc;EACnC,cAAc,SAAS,MAAM,IAAI,MAAM;EACvC,aAAa,SAAS,KAAK,EAAE,MAAM,QAAQ,CAAC;EAC5C,cAAc,EAAE,SAAS,KAAK,SAAS,KAAK,MAAM;EAClD,eAAc,YAAW,WAAW,OAAO;CAC7C,CAAC;CACD,UAAU,WAAW,oBAAoB;EACvC,GAAG;EACH;EACA,UAAU,aAAa,KAAK,SAAS;EACrC;EACA;CACF,IAAI,KAAK;CACT,MAAM,gBAAgB,YAAY,cAAc,IAAI;CACpD,sBAAsB,gBAAgB,CAAC;CAGvC,IAAI,SAA+B;CAEnC,IAAI,OAAO,aAAa,aAAa;EACnC,SAAS,oBAAoB;GAAE;GAAO,aAAa;EAAM,CAAC;EAG1D,MAAM,sBAA0D,OAAQ,cAAc,SAAS;GAC7F,MAAM;GACN,YAAY,WAAW;GAGvB,gBAAgB,CAAC,WAAW,OAAO,cAAc,KAAK,CAAC,CAAC,OAAO,OAAO;GACtE,eAAe;GACf,gBAAgB,CAAC;EACnB,CAAC;EAGD,QAAQ,KAAK,IAAI,UAAU,MAAO;EAClC,QAAQ,KAAK,IAAI,iBAAiB,aAAa;EAC/C,QAAQ,KAAK,IAAI,YAAY,qBAAqB,CAAC;EACnD,QAAQ,KAAK,IAAI,qBAAqB,WAAW,KAAK;EACtD,QAAQ,KAAK,IAAI,uBAAuB,cAAc,KAAK;EAC3D,QAAQ,KAAK,IAAI,sBAAsB,WAAW,KAAK;EACvD,QAAQ,KAAK,IAAI,oBAAoB,KAAK,gBAAgB;CAC5D;CAEA,MAAM,MAAM,eAAe,YAAY,SAAS,YAAY,CAAC;CAE7D,MAAM,UAAU,eAAe;EAC7B;EACA,cAAc,IAAI,MAAM;EACxB;EACA,aAAY,aAAY,QAAQ,KAAK,IAAI,YAAY,QAAQ;CAC/D,CAAC;CAED,MAAM,eAAe,eAAiC,SAAS,MAAM,kBAAkB,KAAK,QAAQ,gBAAgB,KAAK,MAAM;CAE/H,OAAO;EAAE;EAAS;EAAS;EAAK;EAAY;EAAe;EAAY;EAAM;CAAa;AAC5F;;AAGA,SAAgB,QACd,OACA,cACA,UACA,uBACA,oBACa;CACb,OAAO,YAAY,OAAO,cAAc,UAAU,uBAAuB,kBAAkB;AAC7F;;AAGA,SAAgB,kBACd,OACA,cACA,YACA,uBACA,oBACa;CACb,OAAO,YAAY,OAAO,cAAc,KAAA,GAAW,uBAAuB,oBAAoB,UAAU;AAC1G"}
@@ -24,7 +24,7 @@ function provideMenubarItem(ctx) {
24
24
  }
25
25
  function useMenubarItemContext() {
26
26
  const ctx = inject(ITEM_KEY, null);
27
- if (!ctx) throw new Error("[xh] Menubar 条目子部件必须用在 XhMenubarItem 内");
27
+ if (!ctx) throw new Error("[xh] Menubar 条目子部件必须用在 XhMenubarItem / XhMenubarCheckboxItem / XhMenubarRadioItem 内");
28
28
  return ctx;
29
29
  }
30
30
  function provideMenubarGroup(ctx) {
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/menubar/context.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 context 相关实现。\n\nimport type { MenubarContentProps, MenubarGroupProps, MenubarItemProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey, Ref } from 'vue'\nimport type { MenubarContext } from './use-menubar'\nimport { inject, provide } from 'vue'\n\n/** 某一项菜单声明的身份,供它的 positioner / content 取到同一个值(两者与 trigger 依靠它互相认领)。 */\nexport interface MenubarMenuContext {\n menu: ComputedRef<MenubarContentProps>\n /** 这张菜单的内容节点:positioner 给它配自绘条,content 挂载后写回。 */\n contentRef: Ref<HTMLElement | null>\n}\n\n/** 条目声明的值与禁用,供 item-text / item-indicator 等子部件复用同一份声明。 */\nexport interface MenubarItemContext {\n item: ComputedRef<MenubarItemProps>\n}\n\n/** 分组声明的身份,供分组标题取到同一个值(标题的 id 由它派生)。 */\nexport interface MenubarGroupContext {\n group: ComputedRef<MenubarGroupProps>\n}\n\nconst KEY: InjectionKey<MenubarContext> = Symbol.for('xh-menubar')\nconst MENU_KEY: InjectionKey<MenubarMenuContext> = Symbol.for('xh-menubar-menu')\nconst ITEM_KEY: InjectionKey<MenubarItemContext> = Symbol.for('xh-menubar-item')\nconst GROUP_KEY: InjectionKey<MenubarGroupContext> = Symbol.for('xh-menubar-group')\n\nexport function provideMenubar(ctx: MenubarContext): void {\n provide(KEY, ctx)\n}\n\nexport function useMenubarContext(): MenubarContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Menubar 部件必须用在 XhMenubarRoot 内')\n return ctx\n}\n\nexport function provideMenubarMenu(ctx: MenubarMenuContext): void {\n provide(MENU_KEY, ctx)\n}\n\n/** 取所属菜单项的身份,不在 positioner 内时返回 null(此时 content 须自带 value)。 */\nexport function useMenubarMenuContext(): MenubarMenuContext | null {\n return inject(MENU_KEY, null)\n}\n\nexport function provideMenubarItem(ctx: MenubarItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useMenubarItemContext(): MenubarItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] Menubar 条目子部件必须用在 XhMenubarItem 内')\n return ctx\n}\n\nexport function provideMenubarGroup(ctx: MenubarGroupContext): void {\n provide(GROUP_KEY, ctx)\n}\n\nexport function useMenubarGroupContext(): MenubarGroupContext {\n const ctx = inject(GROUP_KEY, null)\n if (!ctx)\n throw new Error('[xh] Menubar 分组标题必须用在 XhMenubarGroup 内')\n return ctx\n}\n\n/** 子菜单触发条目要同时访问父菜单栏与本子菜单,这里保存父层句柄与它在父层中的身份。 */\nexport interface MenubarSubHandle {\n parent: MenubarContext\n value: string\n disabled?: boolean\n}\n\nconst SUB_KEY: InjectionKey<MenubarSubHandle> = Symbol.for('xh-menubar-sub')\n\nexport function provideMenubarSub(handle: MenubarSubHandle): void {\n provide(SUB_KEY, handle)\n}\n\nexport function useMenubarSubContext(): MenubarSubHandle {\n const handle = inject(SUB_KEY, null)\n if (!handle)\n throw new Error('[xh] MenubarSubTrigger 必须用在 XhMenubarSub 内')\n return handle\n}\n"],"mappings":";;AA6BA,MAAM,MAAoC,OAAO,IAAI,YAAY;AACjE,MAAM,WAA6C,OAAO,IAAI,iBAAiB;AAC/E,MAAM,WAA6C,OAAO,IAAI,iBAAiB;AAC/E,MAAM,YAA+C,OAAO,IAAI,kBAAkB;AAElF,SAAgB,eAAe,KAA2B;CACxD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,oBAAoC;CAClD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,qCAAqC;CACvD,OAAO;AACT;AAEA,SAAgB,mBAAmB,KAA+B;CAChE,QAAQ,UAAU,GAAG;AACvB;;AAGA,SAAgB,wBAAmD;CACjE,OAAO,OAAO,UAAU,IAAI;AAC9B;AAEA,SAAgB,mBAAmB,KAA+B;CAChE,QAAQ,UAAU,GAAG;AACvB;AAEA,SAAgB,wBAA4C;CAC1D,MAAM,MAAM,OAAO,UAAU,IAAI;CACjC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,wCAAwC;CAC1D,OAAO;AACT;AAEA,SAAgB,oBAAoB,KAAgC;CAClE,QAAQ,WAAW,GAAG;AACxB;AAEA,SAAgB,yBAA8C;CAC5D,MAAM,MAAM,OAAO,WAAW,IAAI;CAClC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,wCAAwC;CAC1D,OAAO;AACT;AASA,MAAM,UAA0C,OAAO,IAAI,gBAAgB;AAE3E,SAAgB,kBAAkB,QAAgC;CAChE,QAAQ,SAAS,MAAM;AACzB;AAEA,SAAgB,uBAAyC;CACvD,MAAM,SAAS,OAAO,SAAS,IAAI;CACnC,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,4CAA4C;CAC9D,OAAO;AACT"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/menubar/context.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 context 相关实现。\n\nimport type { MenubarAnyItemProps, MenubarContentProps, MenubarGroupProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey, Ref } from 'vue'\nimport type { MenubarContext } from './use-menubar'\nimport { inject, provide } from 'vue'\n\n/** 某一项菜单声明的身份,供它的 positioner / content 取到同一个值(两者与 trigger 依靠它互相认领)。 */\nexport interface MenubarMenuContext {\n menu: ComputedRef<MenubarContentProps>\n /** 这张菜单的内容节点:positioner 给它配自绘条,content 挂载后写回。 */\n contentRef: Ref<HTMLElement | null>\n}\n\n/** 条目声明的值与禁用,供 item-text / item-indicator 等子部件复用同一份声明。 */\nexport interface MenubarItemContext {\n item: ComputedRef<MenubarAnyItemProps>\n}\n\n/** 分组声明的身份,供分组标题取到同一个值(标题的 id 由它派生)。 */\nexport interface MenubarGroupContext {\n group: ComputedRef<MenubarGroupProps>\n}\n\nconst KEY: InjectionKey<MenubarContext> = Symbol.for('xh-menubar')\nconst MENU_KEY: InjectionKey<MenubarMenuContext> = Symbol.for('xh-menubar-menu')\nconst ITEM_KEY: InjectionKey<MenubarItemContext> = Symbol.for('xh-menubar-item')\nconst GROUP_KEY: InjectionKey<MenubarGroupContext> = Symbol.for('xh-menubar-group')\n\nexport function provideMenubar(ctx: MenubarContext): void {\n provide(KEY, ctx)\n}\n\nexport function useMenubarContext(): MenubarContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Menubar 部件必须用在 XhMenubarRoot 内')\n return ctx\n}\n\nexport function provideMenubarMenu(ctx: MenubarMenuContext): void {\n provide(MENU_KEY, ctx)\n}\n\n/** 取所属菜单项的身份,不在 positioner 内时返回 null(此时 content 须自带 value)。 */\nexport function useMenubarMenuContext(): MenubarMenuContext | null {\n return inject(MENU_KEY, null)\n}\n\nexport function provideMenubarItem(ctx: MenubarItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useMenubarItemContext(): MenubarItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] Menubar 条目子部件必须用在 XhMenubarItem / XhMenubarCheckboxItem / XhMenubarRadioItem 内')\n return ctx\n}\n\nexport function provideMenubarGroup(ctx: MenubarGroupContext): void {\n provide(GROUP_KEY, ctx)\n}\n\nexport function useMenubarGroupContext(): MenubarGroupContext {\n const ctx = inject(GROUP_KEY, null)\n if (!ctx)\n throw new Error('[xh] Menubar 分组标题必须用在 XhMenubarGroup 内')\n return ctx\n}\n\n/** 子菜单触发条目要同时访问父菜单栏与本子菜单,这里保存父层句柄与它在父层中的身份。 */\nexport interface MenubarSubHandle {\n parent: MenubarContext\n value: string\n disabled?: boolean\n}\n\nconst SUB_KEY: InjectionKey<MenubarSubHandle> = Symbol.for('xh-menubar-sub')\n\nexport function provideMenubarSub(handle: MenubarSubHandle): void {\n provide(SUB_KEY, handle)\n}\n\nexport function useMenubarSubContext(): MenubarSubHandle {\n const handle = inject(SUB_KEY, null)\n if (!handle)\n throw new Error('[xh] MenubarSubTrigger 必须用在 XhMenubarSub 内')\n return handle\n}\n"],"mappings":";;AA6BA,MAAM,MAAoC,OAAO,IAAI,YAAY;AACjE,MAAM,WAA6C,OAAO,IAAI,iBAAiB;AAC/E,MAAM,WAA6C,OAAO,IAAI,iBAAiB;AAC/E,MAAM,YAA+C,OAAO,IAAI,kBAAkB;AAElF,SAAgB,eAAe,KAA2B;CACxD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,oBAAoC;CAClD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,qCAAqC;CACvD,OAAO;AACT;AAEA,SAAgB,mBAAmB,KAA+B;CAChE,QAAQ,UAAU,GAAG;AACvB;;AAGA,SAAgB,wBAAmD;CACjE,OAAO,OAAO,UAAU,IAAI;AAC9B;AAEA,SAAgB,mBAAmB,KAA+B;CAChE,QAAQ,UAAU,GAAG;AACvB;AAEA,SAAgB,wBAA4C;CAC1D,MAAM,MAAM,OAAO,UAAU,IAAI;CACjC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,qFAAqF;CACvG,OAAO;AACT;AAEA,SAAgB,oBAAoB,KAAgC;CAClE,QAAQ,WAAW,GAAG;AACxB;AAEA,SAAgB,yBAA8C;CAC5D,MAAM,MAAM,OAAO,WAAW,IAAI;CAClC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,wCAAwC;CAC1D,OAAO;AACT;AASA,MAAM,UAA0C,OAAO,IAAI,gBAAgB;AAE3E,SAAgB,kBAAkB,QAAgC;CAChE,QAAQ,SAAS,MAAM;AACzB;AAEA,SAAgB,uBAAyC;CACvD,MAAM,SAAS,OAAO,SAAS,IAAI;CACnC,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,4CAA4C;CAC9D,OAAO;AACT"}
@@ -1,15 +1,27 @@
1
1
  import { PayloadOf } from "../../runtime/payload.js";
2
2
  import { PropType, SlotsType, VNode } from "vue";
3
3
  import { Direction, Orientation, Placement, Size, Tone } from "@xihan-ui/core";
4
- import { MenubarApi, MenubarNode, MenubarNodeMeta, MenubarSchema } from "@xihan-ui/headless";
4
+ import { MenubarApi, MenubarNode, MenubarNodeMeta, MenubarRadioValue, MenubarSchema } from "@xihan-ui/headless";
5
5
  //#region src/components/menubar/menubar.d.ts
6
6
  type MenubarProps = MenubarSchema['props'];
7
7
  /** 默认插槽的载荷:当前展开的菜单项、是否有菜单展开,以及切换展开项的命令。 */
8
- type MenubarRootSlotProps = Pick<MenubarApi, 'value' | 'open' | 'setValue'>;
8
+ type MenubarRootSlotProps = Pick<MenubarApi, 'value' | 'open' | 'setValue' | 'checkboxValue' | 'radioValue' | 'setCheckboxValue' | 'setRadioValue'>;
9
9
  declare const XhMenubarRoot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
10
10
  collection: {
11
11
  type: PropType<MenubarNode[]>;
12
12
  };
13
+ checkboxValue: {
14
+ type: PropType<string[]>;
15
+ };
16
+ defaultCheckboxValue: {
17
+ type: PropType<string[]>;
18
+ };
19
+ radioValue: {
20
+ type: PropType<MenubarRadioValue>;
21
+ };
22
+ defaultRadioValue: {
23
+ type: PropType<MenubarRadioValue>;
24
+ };
13
25
  value: {
14
26
  type: PropType<string | null>;
15
27
  };
@@ -54,11 +66,25 @@ declare const XhMenubarRoot: import("vue").DefineComponent<import("vue").Extract
54
66
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
55
67
  'value-change': (_details: PayloadOf<MenubarProps, "onValueChange">) => true;
56
68
  select: (_details: PayloadOf<MenubarProps, "onSelect">) => true;
69
+ 'checkbox-value-change': (_details: PayloadOf<MenubarProps, "onCheckboxValueChange">) => true;
70
+ 'radio-value-change': (_details: PayloadOf<MenubarProps, "onRadioValueChange">) => true;
57
71
  'update:value': (_value: PayloadOf<MenubarProps, "onValueChange">["value"]) => true;
58
72
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
59
73
  collection: {
60
74
  type: PropType<MenubarNode[]>;
61
75
  };
76
+ checkboxValue: {
77
+ type: PropType<string[]>;
78
+ };
79
+ defaultCheckboxValue: {
80
+ type: PropType<string[]>;
81
+ };
82
+ radioValue: {
83
+ type: PropType<MenubarRadioValue>;
84
+ };
85
+ defaultRadioValue: {
86
+ type: PropType<MenubarRadioValue>;
87
+ };
62
88
  value: {
63
89
  type: PropType<string | null>;
64
90
  };
@@ -102,6 +128,8 @@ declare const XhMenubarRoot: import("vue").DefineComponent<import("vue").Extract
102
128
  onSelect?: ((_details: import("@xihan-ui/headless").MenubarSelectDetails) => any) | undefined;
103
129
  "onValue-change"?: ((_details: import("@xihan-ui/headless").MenubarValueChangeDetails) => any) | undefined;
104
130
  "onUpdate:value"?: ((_value: string | null) => any) | undefined;
131
+ "onCheckbox-value-change"?: ((_details: import("@xihan-ui/headless").ContextMenuCheckboxValueChangeDetails) => any) | undefined;
132
+ "onRadio-value-change"?: ((_details: import("@xihan-ui/headless").ContextMenuRadioValueChangeDetails) => any) | undefined;
105
133
  }>, {
106
134
  loop: boolean;
107
135
  disabled: boolean;
@@ -188,18 +216,11 @@ declare const XhMenubarGroup: import("vue").DefineComponent<import("vue").Extrac
188
216
  required: true;
189
217
  };
190
218
  }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
191
- declare const XhMenubarGroupLabel: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
192
- [key: string]: any;
193
- }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
194
- declare const XhMenubarItem: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
219
+ declare const XhMenubarRadioGroup: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
195
220
  value: {
196
221
  type: StringConstructor;
197
222
  required: true;
198
223
  };
199
- disabled: {
200
- type: BooleanConstructor;
201
- default: undefined;
202
- };
203
224
  }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
204
225
  [key: string]: any;
205
226
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
@@ -207,13 +228,13 @@ declare const XhMenubarItem: import("vue").DefineComponent<import("vue").Extract
207
228
  type: StringConstructor;
208
229
  required: true;
209
230
  };
210
- disabled: {
211
- type: BooleanConstructor;
212
- default: undefined;
213
- };
214
- }>> & Readonly<{}>, {
215
- disabled: boolean;
216
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
231
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
232
+ declare const XhMenubarGroupLabel: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
233
+ [key: string]: any;
234
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
235
+ declare const XhMenubarItem: any;
236
+ declare const XhMenubarCheckboxItem: any;
237
+ declare const XhMenubarRadioItem: any;
217
238
  declare const XhMenubarItemText: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
218
239
  [key: string]: any;
219
240
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -341,5 +362,5 @@ declare const XhMenubarSubTrigger: import("vue").DefineComponent<{}, () => VNode
341
362
  [key: string]: any;
342
363
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
343
364
  //#endregion
344
- export { MenubarRootSlotProps, MenubarSubSlotProps, XhMenubarArrow, XhMenubarContent, XhMenubarGroup, XhMenubarGroupLabel, XhMenubarItem, XhMenubarItemDescription, XhMenubarItemIndicator, XhMenubarItemShortcut, XhMenubarItemSuffix, XhMenubarItemText, XhMenubarPositioner, XhMenubarRoot, XhMenubarSeparator, XhMenubarSub, XhMenubarSubTrigger, XhMenubarTrigger };
365
+ export { MenubarRootSlotProps, MenubarSubSlotProps, XhMenubarArrow, XhMenubarCheckboxItem, XhMenubarContent, XhMenubarGroup, XhMenubarGroupLabel, XhMenubarItem, XhMenubarItemDescription, XhMenubarItemIndicator, XhMenubarItemShortcut, XhMenubarItemSuffix, XhMenubarItemText, XhMenubarPositioner, XhMenubarRadioGroup, XhMenubarRadioItem, XhMenubarRoot, XhMenubarSeparator, XhMenubarSub, XhMenubarSubTrigger, XhMenubarTrigger };
345
366
  //# sourceMappingURL=menubar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"menubar.d.ts","names":[],"sources":["../../../src/components/menubar/menubar.ts"],"mappings":";;;;;KAqCK,eAAe;;KAmBR,uBAAuB,KAAK;cAa3B,6BAAa,8BAAA;;IAIO,MAAA,SAAS;;;IACb,MAAA;;;IACO,MAAA;;;IACD,MAAA,SAAS;;;;;;;IAEjB,MAAA,SAAS;;;;;;;;;;;IAGH,MAAA,SAAS;;;;;;IAEd,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACD,MAAA,SAAS;;;;;EAId,iBAAA,UAAA,UAAU;EAChB,SAAA,UAAA,UAAU;EACN,iBAAA,QAAA,UAAU;;;IAlBN,MAAA,SAAS;;;IACb,MAAA;;;IACO,MAAA;;;IACD,MAAA,SAAS;;;;;;;IAEjB,MAAA,SAAS;;;;;;;;;;;IAGH,MAAA,SAAS;;;;;;IAEd,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACD,MAAA,SAAS;;;;;;;;;;;EAS7B,WAAC,OAAO,yBAAyB;;EAEpC,QAAC,MAAM,oBAAoB;;EAEpB,iBAAC,MAAM,oBAAoB;;EAE3B,iBAAC,MAAM,oBAAoB;kCAuB7C;cAEW,gCAAgB,8BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAqD3B;cAEW,mCAAmB,8BAAA;;;;;;;IAKC,MAAA,SAAS;;;;;;;;;;;IAAT,MAAA,SAAS;;MAsBxC,oDAAA;cAEW,gCAAgB,8BAAA;;;;;;;;;;MAyD3B,oDAAA;cAEW,8BAAc,8BAAA;;;;;;;;;;;;MAWzB,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAO9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6BAAa,8BAAA;;;;;;;;;;;;;;;;;;;;;;qCAqCxB;cAEW,iCAAiB,0BAAA,oBAAA,4BAAA;;8BAO5B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAOjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAOnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,qCAAqB,0BAAA,oBAAA,4BAAA;;8BAOhC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAO9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,8BAAc,0BAAA,oBAAA,4BAAA;;8BASzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAM7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;UAsEe;EACf;EACA,UAAU;;cAGC,4BAAY,8BAAA;;;;;;;;;;;IAMQ,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;IAOf,MAAA,SAAS;;;;IAER,MAAA,SAAS;;;;IAET,MAAA,SAAS;;;;;;;;;;;;;;;IAXJ,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;IAOf,MAAA,SAAS;;;;IAER,MAAA,SAAS;;;;IAET,MAAA,SAAS;;;;;;;EAGvB,WAAC,OAAO,wBAAwB;kCA6B5C;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAkB9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
1
+ {"version":3,"file":"menubar.d.ts","names":[],"sources":["../../../src/components/menubar/menubar.ts"],"mappings":";;;;;KAqCK,eAAe;;KAmBR,uBAAuB,KAAK;cAa3B,6BAAa,8BAAA;;IAIO,MAAA,SAAS;;;IACN,MAAA;;;IACO,MAAA;;;IACT,MAAA,SAAS;;;IACF,MAAA,SAAS;;;IACrB,MAAA;;;IACO,MAAA;;;IACD,MAAA,SAAS;;;;;;;IAEjB,MAAA,SAAS;;;;;;;;;;;IAGH,MAAA,SAAS;;;;;;IAEd,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACD,MAAA,SAAS;;;;;EAId,iBAAA,UAAA,UAAU;EAChB,SAAA,UAAA,UAAU;EACK,0BAAA,UAAA,UAAU;EACb,uBAAA,UAAA,UAAU;EAClB,iBAAA,QAAA,UAAU;;;IAxBN,MAAA,SAAS;;;IACN,MAAA;;;IACO,MAAA;;;IACT,MAAA,SAAS;;;IACF,MAAA,SAAS;;;IACrB,MAAA;;;IACO,MAAA;;;IACD,MAAA,SAAS;;;;;;;IAEjB,MAAA,SAAS;;;;;;;;;;;IAGH,MAAA,SAAS;;;;;;IAEd,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACD,MAAA,SAAS;;;;;;;;;;;;;EAW7B,WAAC,OAAO,yBAAyB;;EAEpC,QAAC,MAAM,oBAAoB;;EAEpB,iBAAC,MAAM,oBAAoB;;EAE3B,iBAAC,MAAM,oBAAoB;kCAiC7C;cAEW,gCAAgB,8BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAqD3B;cAEW,mCAAmB,8BAAA;;;;;;;IAKC,MAAA,SAAS;;;;;;;;;;;IAAT,MAAA,SAAS;;MAsBxC,oDAAA;cAEW,gCAAgB,8BAAA;;;;;;;;;;MAyD3B,oDAAA;cAEW,8BAAc,8BAAA;;;;;;;;;;;;MAWzB,oDAAA;cAEW,mCAAmB,8BAAA;;;;;;;;;;;;MAW9B,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAO9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAoDW;cACA;cACA;cAEA,iCAAiB,0BAAA,oBAAA,4BAAA;;8BAO5B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAOjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAOnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,qCAAqB,0BAAA,oBAAA,4BAAA;;8BAOhC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAO9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,8BAAc,0BAAA,oBAAA,4BAAA;;8BASzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAM7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;UAyEe;EACf;EACA,UAAU;;cAGC,4BAAY,8BAAA;;;;;;;;;;;IAMQ,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;IAOf,MAAA,SAAS;;;;IAER,MAAA,SAAS;;;;IAET,MAAA,SAAS;;;;;;;;;;;;;;;IAXJ,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;IAOf,MAAA,SAAS;;;;IAER,MAAA,SAAS;;;;IAET,MAAA,SAAS;;;;;;;EAGvB,WAAC,OAAO,wBAAwB;kCA6B5C;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAkB9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
@@ -1,9 +1,9 @@
1
1
  import { useOverlayExit } from "../../runtime/use-overlay-exit.js";
2
2
  import { withXhConfig } from "../../config/config.js";
3
- import { XhPortal } from "../../runtime/portal.js";
4
- import { useScrollbars } from "../../runtime/use-scrollbars.js";
5
3
  import { mergePartProps } from "../../runtime/merge-props.js";
6
4
  import { mergeIntoChild } from "../../runtime/as-child.js";
5
+ import { XhPortal } from "../../runtime/portal.js";
6
+ import { useScrollbars } from "../../runtime/use-scrollbars.js";
7
7
  import { provideMenu, useMenuContext } from "../menu/context.js";
8
8
  import { useMenuWithParent } from "../menu/use-menu.js";
9
9
  import { provideMenubar, provideMenubarGroup, provideMenubarItem, provideMenubarMenu, provideMenubarSub, useMenubarContext, useMenubarGroupContext, useMenubarItemContext, useMenubarMenuContext, useMenubarSubContext } from "./context.js";
@@ -29,6 +29,10 @@ const XhMenubarRoot = defineComponent({
29
29
  name: "XhMenubarRoot",
30
30
  props: {
31
31
  collection: { type: Array },
32
+ checkboxValue: { type: Array },
33
+ defaultCheckboxValue: { type: Array },
34
+ radioValue: { type: Object },
35
+ defaultRadioValue: { type: Object },
32
36
  value: { type: String },
33
37
  defaultValue: { type: String },
34
38
  orientation: { type: String },
@@ -54,6 +58,8 @@ const XhMenubarRoot = defineComponent({
54
58
  emits: {
55
59
  "value-change": (_details) => true,
56
60
  "select": (_details) => true,
61
+ "checkbox-value-change": (_details) => true,
62
+ "radio-value-change": (_details) => true,
57
63
  "update:value": (_value) => true
58
64
  },
59
65
  slots: Object,
@@ -63,7 +69,7 @@ const XhMenubarRoot = defineComponent({
63
69
  emit("update:value", details.value);
64
70
  };
65
71
  const notifySelect = (details) => emit("select", details);
66
- const ctx = useMenubar(withXhConfig("menubar", props), notifyValue, notifySelect);
72
+ const ctx = useMenubar(withXhConfig("menubar", props), notifyValue, notifySelect, (details) => emit("checkbox-value-change", details), (details) => emit("radio-value-change", details));
67
73
  provideMenubar(ctx);
68
74
  return () => h("div", {
69
75
  ...ctx.api.value.getRootProps(),
@@ -73,7 +79,11 @@ const XhMenubarRoot = defineComponent({
73
79
  }, slots.default ? slots.default({
74
80
  value: ctx.api.value.value,
75
81
  open: ctx.api.value.open,
76
- setValue: ctx.api.value.setValue
82
+ setValue: ctx.api.value.setValue,
83
+ checkboxValue: ctx.api.value.checkboxValue,
84
+ radioValue: ctx.api.value.radioValue,
85
+ setCheckboxValue: ctx.api.value.setCheckboxValue,
86
+ setRadioValue: ctx.api.value.setRadioValue
77
87
  }) : props.collection ? renderDefaultTree(ctx.api.value.collection, {
78
88
  "item": slots.item,
79
89
  "item-prefix": slots["item-prefix"],
@@ -234,6 +244,19 @@ const XhMenubarGroup = defineComponent({
234
244
  return () => h("div", ctx.api.value.getGroupProps(group.value), slots.default?.());
235
245
  }
236
246
  });
247
+ const XhMenubarRadioGroup = defineComponent({
248
+ name: "XhMenubarRadioGroup",
249
+ props: { value: {
250
+ type: String,
251
+ required: true
252
+ } },
253
+ setup(props, { slots }) {
254
+ const ctx = useMenubarContext();
255
+ const group = computed(() => ({ value: props.value }));
256
+ provideMenubarGroup({ group });
257
+ return () => h("div", ctx.api.value.getRadioGroupProps(group.value), slots.default?.());
258
+ }
259
+ });
237
260
  const XhMenubarGroupLabel = defineComponent({
238
261
  name: "XhMenubarGroupLabel",
239
262
  setup(_, { slots }) {
@@ -242,46 +265,71 @@ const XhMenubarGroupLabel = defineComponent({
242
265
  return () => h("span", ctx.api.value.getGroupLabelProps(group.value), slots.default?.());
243
266
  }
244
267
  });
245
- const XhMenubarItem = defineComponent({
246
- name: "XhMenubarItem",
247
- props: {
248
- value: {
249
- type: String,
250
- required: true
268
+ function createMenubarItemComponent(name, kind) {
269
+ return defineComponent({
270
+ name,
271
+ props: {
272
+ value: {
273
+ type: String,
274
+ required: true
275
+ },
276
+ disabled: {
277
+ type: Boolean,
278
+ default: void 0
279
+ },
280
+ closeOnSelect: {
281
+ type: Boolean,
282
+ default: void 0
283
+ }
251
284
  },
252
- disabled: {
253
- type: Boolean,
254
- default: void 0
255
- }
256
- },
257
- setup(props, { slots }) {
258
- const ctx = useMenubarContext();
259
- const item = computed(() => ({
260
- value: props.value,
261
- disabled: props.disabled
262
- }));
263
- provideMenubarItem({ item });
264
- const itemEl = ref(null);
265
- watch(() => props.value, (next, prev) => {
266
- if (next === prev) return;
267
- const { service } = ctx;
268
- if (service.getStatus() !== "Started") return;
269
- if (itemEl.value && service.scope.getActiveElement() === itemEl.value) service.send({
270
- type: "ITEM.FOCUS",
271
- value: next
285
+ setup(props, { slots }) {
286
+ const ctx = useMenubarContext();
287
+ const radioGroup = kind === "radio" ? useMenubarGroupContext() : null;
288
+ const item = computed(() => kind === "radio" ? {
289
+ value: props.value,
290
+ disabled: props.disabled,
291
+ closeOnSelect: props.closeOnSelect,
292
+ kind,
293
+ group: radioGroup.group.value.value
294
+ } : kind === "checkbox" ? {
295
+ value: props.value,
296
+ disabled: props.disabled,
297
+ closeOnSelect: props.closeOnSelect,
298
+ kind
299
+ } : {
300
+ value: props.value,
301
+ disabled: props.disabled,
302
+ kind
272
303
  });
273
- });
274
- onBeforeUnmount(() => {
275
- const { service } = ctx;
276
- if (service.getStatus() !== "Started") return;
277
- if (itemEl.value && service.scope.getActiveElement() === itemEl.value) service.send({ type: "ITEM.LOST" });
278
- });
279
- return () => h("div", {
280
- ...ctx.api.value.getItemProps(item.value),
281
- ref: itemEl
282
- }, slots.default?.());
283
- }
284
- });
304
+ provideMenubarItem({ item });
305
+ const itemEl = ref(null);
306
+ watch(() => props.value, (next, prev) => {
307
+ if (next === prev) return;
308
+ const { service } = ctx;
309
+ if (service.getStatus() !== "Started") return;
310
+ if (itemEl.value && service.scope.getActiveElement() === itemEl.value) service.send({
311
+ type: "ITEM.FOCUS",
312
+ value: next
313
+ });
314
+ });
315
+ onBeforeUnmount(() => {
316
+ const { service } = ctx;
317
+ if (service.getStatus() !== "Started") return;
318
+ if (itemEl.value && service.scope.getActiveElement() === itemEl.value) service.send({ type: "ITEM.LOST" });
319
+ });
320
+ return () => {
321
+ const declaration = item.value;
322
+ return h("div", {
323
+ ...declaration.kind === "checkbox" ? ctx.api.value.getCheckboxItemProps(declaration) : declaration.kind === "radio" ? ctx.api.value.getRadioItemProps(declaration) : ctx.api.value.getItemProps(declaration),
324
+ ref: itemEl
325
+ }, slots.default?.());
326
+ };
327
+ }
328
+ });
329
+ }
330
+ const XhMenubarItem = /* @__PURE__ */ createMenubarItemComponent("XhMenubarItem", "item");
331
+ const XhMenubarCheckboxItem = /* @__PURE__ */ createMenubarItemComponent("XhMenubarCheckboxItem", "checkbox");
332
+ const XhMenubarRadioItem = /* @__PURE__ */ createMenubarItemComponent("XhMenubarRadioItem", "radio");
285
333
  const XhMenubarItemText = defineComponent({
286
334
  name: "XhMenubarItemText",
287
335
  setup(_, { slots }) {
@@ -363,11 +411,12 @@ function renderDefaultTree(collection, itemSlots) {
363
411
  function renderNode(meta, itemSlots) {
364
412
  const prefix = itemSlots["item-prefix"];
365
413
  const suffix = itemSlots["item-suffix"];
366
- return h(XhMenubarItem, {
414
+ return h(meta.kind === "checkbox" ? XhMenubarCheckboxItem : meta.kind === "radio" ? XhMenubarRadioItem : XhMenubarItem, {
367
415
  key: meta.value,
368
- value: meta.value
416
+ value: meta.value,
417
+ closeOnSelect: meta.closeOnSelect
369
418
  }, () => [
370
- ...prefix ? [h(XhMenubarItemIndicator, null, () => prefix(meta))] : [],
419
+ ...prefix ? [h(XhMenubarItemIndicator, null, () => prefix(meta))] : meta.kind !== "item" ? [h(XhMenubarItemIndicator)] : [],
371
420
  h(XhMenubarItemText, null, () => itemSlots.item?.(meta) ?? meta.label),
372
421
  ...meta.description != null ? [h(XhMenubarItemDescription, null, () => meta.description)] : [],
373
422
  ...meta.shortcut != null ? [h(XhMenubarItemShortcut, null, () => meta.shortcut)] : [],
@@ -381,7 +430,7 @@ function renderNodes(collection, itemSlots) {
381
430
  const lead = runIndex > 0 && head.separatorBefore ? [h(XhMenubarSeparator, { key: `separator:${head.value}` })] : [];
382
431
  if (head.group == null) return [...lead, renderNode(head, itemSlots)];
383
432
  const groupLabel = run.find((node) => node.groupLabel != null)?.groupLabel ?? null;
384
- return [...lead, h(XhMenubarGroup, {
433
+ return [...lead, h(head.kind === "radio" ? XhMenubarRadioGroup : XhMenubarGroup, {
385
434
  key: `group:${head.group}`,
386
435
  value: head.group
387
436
  }, () => [...groupLabel != null ? [h(XhMenubarGroupLabel, null, () => groupLabel)] : [], ...run.flatMap((node, index) => [...index > 0 && node.separatorBefore ? [h(XhMenubarSeparator, { key: `separator:${node.value}` })] : [], renderNode(node, itemSlots)])])];
@@ -465,6 +514,6 @@ const XhMenubarSubTrigger = defineComponent({
465
514
  }
466
515
  });
467
516
  //#endregion
468
- export { XhMenubarArrow, XhMenubarContent, XhMenubarGroup, XhMenubarGroupLabel, XhMenubarItem, XhMenubarItemDescription, XhMenubarItemIndicator, XhMenubarItemShortcut, XhMenubarItemSuffix, XhMenubarItemText, XhMenubarPositioner, XhMenubarRoot, XhMenubarSeparator, XhMenubarSub, XhMenubarSubTrigger, XhMenubarTrigger };
517
+ export { XhMenubarArrow, XhMenubarCheckboxItem, XhMenubarContent, XhMenubarGroup, XhMenubarGroupLabel, XhMenubarItem, XhMenubarItemDescription, XhMenubarItemIndicator, XhMenubarItemShortcut, XhMenubarItemSuffix, XhMenubarItemText, XhMenubarPositioner, XhMenubarRadioGroup, XhMenubarRadioItem, XhMenubarRoot, XhMenubarSeparator, XhMenubarSub, XhMenubarSubTrigger, XhMenubarTrigger };
469
518
 
470
519
  //# sourceMappingURL=menubar.js.map