@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":"navigation-menu.js","names":[],"sources":["../../../src/components/navigation-menu/navigation-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// 提供 navigation menu 相关实现。\n\nimport type { Direction, Orientation, Size, Tone } from '@xihan-ui/core'\nimport type { PresenceHandle } from '@xihan-ui/core/presence'\nimport type { NavigationMenuNode, NavigationMenuNodeMeta, NavigationMenuSchema, NavigationMenuTranslations } from '@xihan-ui/headless'\nimport type { PropType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, h, nextTick, onMounted, ref, useId } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { slotPaints } from '../../runtime/slot-content'\nimport { useOverlayExit } from '../../runtime/use-overlay-exit'\nimport { provideNavigationMenu, useNavigationMenuContext } from './context'\nimport { useNavigationMenu } from './use-navigation-menu'\n\ntype NavigationMenuProps = NavigationMenuSchema['props']\n\n/** 根节点渲染为 nav,收起的三条出口(指针离开、焦点离场、Escape)在这一层处理 */\nexport const XhNavigationMenuRoot = defineComponent({\n name: 'XhNavigationMenuRoot',\n // 缺省值由机器与 connect 决定;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<NavigationMenuNode[]> },\n value: { type: String as PropType<string | null> },\n defaultValue: { type: String as PropType<string | null> },\n orientation: { type: String as PropType<Orientation> },\n delayDuration: { type: Number },\n skipDelayDuration: { type: Number },\n dir: { type: String as PropType<Direction> },\n loop: { type: Boolean, default: undefined },\n disabled: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<Partial<NavigationMenuTranslations>> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n },\n // value-change 携带 { value },update:value 携带裸值以支持 v-model:value\n emits: {\n 'value-change': (_details: PayloadOf<NavigationMenuProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<NavigationMenuProps, 'onValueChange'>['value']) => true,\n },\n setup(props, { slots, emit }) {\n const notify: NavigationMenuProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const ctx = useNavigationMenu(withXhConfig('navigation-menu', props) as NavigationMenuProps, notify)\n provideNavigationMenu(ctx)\n return () => {\n // 默认插槽里有真内容就照旧交给作者;只剩注释或空白时当没写,给了 collection 就按数据铺开整套结构\n const authored = slots.default?.()\n const children = slotPaints(authored)\n ? authored\n : (props.collection ? renderDefaultTree(ctx.api.value.collection, slots.panel) : undefined)\n return h('nav', {\n ...ctx.api.value.getRootProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.rootRef.value = el as HTMLElement },\n }, children)\n }\n },\n})\n\n// 用 ul 而非 div:站点导航是一组并列的去处,读屏会念\"列表,共 n 项\"。\nexport const XhNavigationMenuList = defineComponent({\n name: 'XhNavigationMenuList',\n setup(_, { slots }) {\n const ctx = useNavigationMenuContext()\n return () => h('ul', {\n ...ctx.api.value.getListProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.listRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\n/** 一项渲染为一个 li;面板 content 写在同一个 li 内、紧跟 trigger 之后 */\nexport const XhNavigationMenuItem = defineComponent({\n name: 'XhNavigationMenuItem',\n setup(_, { slots }) {\n const ctx = useNavigationMenuContext()\n return () => h('li', ctx.api.value.getItemProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhNavigationMenuTrigger = defineComponent({\n name: 'XhNavigationMenuTrigger',\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 = useNavigationMenuContext()\n return () => h(\n 'button',\n ctx.api.value.getTriggerProps({ value: props.value, disabled: props.disabled }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\n// 面板常挂,靠 hidden 显隐,不做懒挂载\n/** 入口中表示下方还有面板的标记,展开时转向;身份与所在 trigger 同一份声明 */\nexport const XhNavigationMenuTriggerIndicator = defineComponent({\n name: 'XhNavigationMenuTriggerIndicator',\n props: {\n value: { type: String, required: true },\n disabled: { type: Boolean, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useNavigationMenuContext()\n return () => h(\n 'span',\n ctx.api.value.getTriggerIndicatorProps({ value: props.value, disabled: props.disabled }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhNavigationMenuContent = defineComponent({\n name: 'XhNavigationMenuContent',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useNavigationMenuContext()\n // 一个面板一份退场闸门:它们各开各的、动画各跑各的,一份管不过来。\n // 开合判据直接取 connect 这一帧的产出,不另起一套——两边各判一次迟早会说岔\n const contentRef = ref<HTMLElement | null>(null)\n let presence: PresenceHandle | null = null\n const visible = useOverlayExit({\n config: ctx.config,\n isOpen: () => ctx.api.value.isOpen(props.value),\n contentRef,\n onPresence: (next) => {\n const previous = presence\n presence = next\n if (ctx.service.getStatus() !== 'Started')\n return\n if (next) {\n ctx.service.send({ type: 'PRESENCE.SET', value: props.value, presence: next, connected: true })\n }\n else if (previous) {\n ctx.service.send({ type: 'PRESENCE.SET', value: props.value, presence: previous, connected: false })\n }\n },\n })\n // setup 期 Presence 早于根机器的 onMounted;挂载后补报一次,确保首帧句柄已入 Headless 表。\n onMounted(() => {\n // 子组件 mounted 早于父级根机器启动,再让出一次提交队列才可安全送事件。\n void nextTick(() => {\n if (presence && ctx.service.getStatus() === 'Started')\n ctx.service.send({ type: 'PRESENCE.SET', value: props.value, presence, connected: true })\n })\n })\n return () => h(\n 'div',\n {\n ...ctx.api.value.getContentProps({ value: props.value }) as Record<string, unknown>,\n // 收起跟着闸门走:皮肤刻意没给 content 补 [hidden]{display:none}(补了退场就一帧都\n // 播不出来),所以真正的收起落成内联 display\n style: visible.value ? undefined : { display: 'none' },\n ref: (el: unknown) => { contentRef.value = el as HTMLElement | null },\n },\n slots.default?.(),\n )\n },\n})\n\n/** 面板内的链接项:href 由作者写,点击不拦截,只收起导航 */\nexport const XhNavigationMenuLink = defineComponent({\n name: 'XhNavigationMenuLink',\n props: {\n current: Boolean,\n },\n setup(props, { slots }) {\n const ctx = useNavigationMenuContext()\n // 链接身份:按压通道按它记按住的那一条,按实例生成,作者不必提供\n const value = useId()\n return () => h(\n 'a',\n ctx.api.value.getLinkProps({ value, current: props.current }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\n/** 指示条容器,位置由状态机计算后写入内联样式;渲染为 li 以 list 为定位参照系 */\nexport const XhNavigationMenuIndicator = defineComponent({\n name: 'XhNavigationMenuIndicator',\n setup() {\n const ctx = useNavigationMenuContext()\n return () => h('li', ctx.api.value.getIndicatorProps() as Record<string, unknown>)\n },\n})\n\n/** 可选的共享面板外壳,放在 root 内、list 之后 */\nexport const XhNavigationMenuViewport = defineComponent({\n name: 'XhNavigationMenuViewport',\n setup(_, { slots }) {\n const ctx = useNavigationMenuContext()\n return () => h('div', ctx.api.value.getViewportProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 未写默认插槽时按 collection 铺开的整套结构,作者只提供数据。\n * 一项一个 li:带 href 的铺为直达链接,其余铺为 trigger 加面板,面板内容由 panel 插槽提供。\n * 与手写部件产出的 DOM 完全一致,需要修改结构时写默认插槽,行为不变。\n */\nfunction renderDefaultTree(\n collection: readonly NavigationMenuNodeMeta[],\n panelSlot?: (node: NavigationMenuNodeMeta) => VNode[],\n): VNode[] {\n return [\n h(XhNavigationMenuList, null, () => [\n ...collection.map(node => h(XhNavigationMenuItem, { key: node.value }, () => (\n node.href != null\n ? [h(XhNavigationMenuLink, { href: node.href, current: node.current }, () => node.label)]\n : [\n h(XhNavigationMenuTrigger, { value: node.value }, () => node.label),\n h(XhNavigationMenuContent, { value: node.value }, () => panelSlot?.(node) ?? []),\n ]\n ))),\n h(XhNavigationMenuIndicator),\n ]),\n ]\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"navigation-menu.js","names":[],"sources":["../../../src/components/navigation-menu/navigation-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// 提供 navigation menu 相关实现。\n\nimport type { Direction, Orientation, Size, Tone } from '@xihan-ui/core'\nimport type { PresenceHandle } from '@xihan-ui/core/presence'\nimport type { NavigationMenuNode, NavigationMenuNodeMeta, NavigationMenuSchema, NavigationMenuTranslations } from '@xihan-ui/headless'\nimport type { PropType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, h, nextTick, onMounted, ref, useId } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { mergeIntoChild } from '../../runtime/as-child'\nimport { mergePartProps } from '../../runtime/merge-props'\nimport { slotPaints } from '../../runtime/slot-content'\nimport { useOverlayExit } from '../../runtime/use-overlay-exit'\nimport { provideNavigationMenu, useNavigationMenuContext } from './context'\nimport { useNavigationMenu } from './use-navigation-menu'\n\ntype NavigationMenuProps = NavigationMenuSchema['props']\n\n/** 根节点渲染为 nav,收起的三条出口(指针离开、焦点离场、Escape)在这一层处理 */\nexport const XhNavigationMenuRoot = defineComponent({\n name: 'XhNavigationMenuRoot',\n // 缺省值由机器与 connect 决定;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<NavigationMenuNode[]> },\n value: { type: String as PropType<string | null> },\n defaultValue: { type: String as PropType<string | null> },\n orientation: { type: String as PropType<Orientation> },\n delayDuration: { type: Number },\n skipDelayDuration: { type: Number },\n dir: { type: String as PropType<Direction> },\n loop: { type: Boolean, default: undefined },\n disabled: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<Partial<NavigationMenuTranslations>> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n },\n // value-change 携带 { value },update:value 携带裸值以支持 v-model:value\n emits: {\n 'value-change': (_details: PayloadOf<NavigationMenuProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<NavigationMenuProps, 'onValueChange'>['value']) => true,\n },\n setup(props, { slots, emit }) {\n const notify: NavigationMenuProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const ctx = useNavigationMenu(withXhConfig('navigation-menu', props) as NavigationMenuProps, notify)\n provideNavigationMenu(ctx)\n return () => {\n // 默认插槽里有真内容就照旧交给作者;只剩注释或空白时当没写,给了 collection 就按数据铺开整套结构\n const authored = slots.default?.()\n const children = slotPaints(authored)\n ? authored\n : (props.collection ? renderDefaultTree(ctx.api.value.collection, slots.panel) : undefined)\n return h('nav', {\n ...ctx.api.value.getRootProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.rootRef.value = el as HTMLElement },\n }, children)\n }\n },\n})\n\n// 用 ul 而非 div:站点导航是一组并列的去处,读屏会念\"列表,共 n 项\"。\nexport const XhNavigationMenuList = defineComponent({\n name: 'XhNavigationMenuList',\n setup(_, { slots }) {\n const ctx = useNavigationMenuContext()\n return () => h('ul', {\n ...ctx.api.value.getListProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.listRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\n/** 一项渲染为一个 li;面板 content 写在同一个 li 内、紧跟 trigger 之后 */\nexport const XhNavigationMenuItem = defineComponent({\n name: 'XhNavigationMenuItem',\n setup(_, { slots }) {\n const ctx = useNavigationMenuContext()\n return () => h('li', ctx.api.value.getItemProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhNavigationMenuTrigger = defineComponent({\n name: 'XhNavigationMenuTrigger',\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 = useNavigationMenuContext()\n return () => h(\n 'button',\n ctx.api.value.getTriggerProps({ value: props.value, disabled: props.disabled }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\n// 面板常挂,靠 hidden 显隐,不做懒挂载\n/** 入口中表示下方还有面板的标记,展开时转向;身份与所在 trigger 同一份声明 */\nexport const XhNavigationMenuTriggerIndicator = defineComponent({\n name: 'XhNavigationMenuTriggerIndicator',\n props: {\n value: { type: String, required: true },\n disabled: { type: Boolean, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useNavigationMenuContext()\n return () => h(\n 'span',\n ctx.api.value.getTriggerIndicatorProps({ value: props.value, disabled: props.disabled }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhNavigationMenuContent = defineComponent({\n name: 'XhNavigationMenuContent',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useNavigationMenuContext()\n // 一个面板一份退场闸门:它们各开各的、动画各跑各的,一份管不过来。\n // 开合判据直接取 connect 这一帧的产出,不另起一套——两边各判一次迟早会说岔\n const contentRef = ref<HTMLElement | null>(null)\n let presence: PresenceHandle | null = null\n const visible = useOverlayExit({\n config: ctx.config,\n isOpen: () => ctx.api.value.isOpen(props.value),\n contentRef,\n onPresence: (next) => {\n const previous = presence\n presence = next\n if (ctx.service.getStatus() !== 'Started')\n return\n if (next) {\n ctx.service.send({ type: 'PRESENCE.SET', value: props.value, presence: next, connected: true })\n }\n else if (previous) {\n ctx.service.send({ type: 'PRESENCE.SET', value: props.value, presence: previous, connected: false })\n }\n },\n })\n // setup 期 Presence 早于根机器的 onMounted;挂载后补报一次,确保首帧句柄已入 Headless 表。\n onMounted(() => {\n // 子组件 mounted 早于父级根机器启动,再让出一次提交队列才可安全送事件。\n void nextTick(() => {\n if (presence && ctx.service.getStatus() === 'Started')\n ctx.service.send({ type: 'PRESENCE.SET', value: props.value, presence, connected: true })\n })\n })\n return () => h(\n 'div',\n {\n ...ctx.api.value.getContentProps({ value: props.value }) as Record<string, unknown>,\n // 收起跟着闸门走:皮肤刻意没给 content 补 [hidden]{display:none}(补了退场就一帧都\n // 播不出来),所以真正的收起落成内联 display\n style: visible.value ? undefined : { display: 'none' },\n ref: (el: unknown) => { contentRef.value = el as HTMLElement | null },\n },\n slots.default?.(),\n )\n },\n})\n\n/** 面板里一枝子级的开关:展开时紧跟其后的 XhNavigationMenuBranchContent 露出来 */\nexport const XhNavigationMenuBranchTrigger = defineComponent({\n name: 'XhNavigationMenuBranchTrigger',\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 = useNavigationMenuContext()\n return () => h(\n 'button',\n ctx.api.value.getBranchTriggerProps({ value: props.value, disabled: props.disabled }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\n/** 子级开关里的展开方向标记,展开时转向;身份与所在的开关同一份声明 */\nexport const XhNavigationMenuBranchIndicator = defineComponent({\n name: 'XhNavigationMenuBranchIndicator',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useNavigationMenuContext()\n return () => h(\n 'span',\n ctx.api.value.getBranchIndicatorProps({ value: props.value }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\n/** 一枝子级的容器,写在面板里、紧跟自己的开关之后;收着时 hidden */\nexport const XhNavigationMenuBranchContent = defineComponent({\n name: 'XhNavigationMenuBranchContent',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useNavigationMenuContext()\n return () => h(\n 'div',\n ctx.api.value.getBranchContentProps({ value: props.value }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\n/** 面板内的链接项:href 由作者写,点击不拦截,只收起导航 */\nexport const XhNavigationMenuLink = defineComponent({\n name: 'XhNavigationMenuLink',\n // 直通属性自己合:作者的处理器排在部件前面,asChild 时连同部件属性一起落到作者的链接上\n inheritAttrs: false,\n props: {\n current: Boolean,\n /** 借用作者的子节点(如路由链接)作为链接,不再渲染自己的 `<a>`;子节点须恰好一个。 */\n asChild: Boolean,\n },\n setup(props, { slots, attrs }) {\n const ctx = useNavigationMenuContext()\n // 链接身份:按压通道按它记按住的那一条,按实例生成,作者不必提供\n const value = useId()\n return () => {\n const part = mergePartProps(ctx.api.value.getLinkProps({ value, current: props.current }) as Record<string, unknown>, attrs)\n const children = slots.default?.()\n if (props.asChild)\n return mergeIntoChild(children, part, 'navigation-menu', { applyAnatomy: true })\n return h('a', part, children)\n }\n },\n})\n\n/** 指示条容器,位置由状态机计算后写入内联样式;渲染为 li 以 list 为定位参照系 */\nexport const XhNavigationMenuIndicator = defineComponent({\n name: 'XhNavigationMenuIndicator',\n setup() {\n const ctx = useNavigationMenuContext()\n return () => h('li', ctx.api.value.getIndicatorProps() as Record<string, unknown>)\n },\n})\n\n/** 可选的共享面板外壳,放在 root 内、list 之后 */\nexport const XhNavigationMenuViewport = defineComponent({\n name: 'XhNavigationMenuViewport',\n setup(_, { slots }) {\n const ctx = useNavigationMenuContext()\n return () => h('div', ctx.api.value.getViewportProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 未写默认插槽时按 collection 铺开的整套结构,作者只提供数据。\n * 一项一个 li:带 href 的铺为直达链接,其余铺为 trigger 加面板。面板内容给了 panel 插槽就由它提供,\n * 否则按这一项的 children 铺开:带 href 的条目铺为链接,带 children 的铺为一枝子级(开关 + 箭头 + 子级里的链接)。\n * 与手写部件产出的 DOM 完全一致,需要修改结构时写默认插槽,行为不变。\n */\nfunction renderDefaultTree(\n collection: readonly NavigationMenuNodeMeta[],\n panelSlot?: (node: NavigationMenuNodeMeta) => VNode[],\n): VNode[] {\n return [\n h(XhNavigationMenuList, null, () => [\n ...collection.map(node => h(XhNavigationMenuItem, { key: node.value }, () => (\n node.href != null\n ? [renderLink(node)]\n : [\n h(XhNavigationMenuTrigger, { value: node.value }, () => node.label),\n h(XhNavigationMenuContent, { value: node.value }, () => (panelSlot ? panelSlot(node) : renderPanelEntries(node.children))),\n ]\n ))),\n h(XhNavigationMenuIndicator),\n ]),\n ]\n}\n\nfunction renderLink(node: NavigationMenuNodeMeta): VNode {\n return h(XhNavigationMenuLink, { key: node.value, href: node.href, current: node.current }, () => node.label)\n}\n\n/** 面板条目:带 children 的铺为一枝子级,开关与容器相邻;其余铺为链接 */\nfunction renderPanelEntries(entries: readonly NavigationMenuNodeMeta[]): VNode[] {\n return entries.flatMap(entry => (entry.children.length > 0\n ? [\n h(XhNavigationMenuBranchTrigger, { key: `${entry.value}:trigger`, value: entry.value }, () => [\n entry.label,\n h(XhNavigationMenuBranchIndicator, { value: entry.value }),\n ]),\n h(XhNavigationMenuBranchContent, { key: `${entry.value}:content`, value: entry.value }, () => entry.children.map(renderLink)),\n ]\n : [renderLink(entry)]))\n}\n"],"mappings":"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"}
@@ -1,8 +1,10 @@
1
- import { ComputedRef } from "vue";
1
+ import { ComputedRef, Ref } from "vue";
2
2
  import { NotificationApi, NotificationItemApi, NotificationOptions } from "@xihan-ui/headless";
3
3
  //#region src/components/notification/context.d.ts
4
4
  interface NotificationContext {
5
5
  api: ComputedRef<NotificationApi>;
6
+ /** 作用域包装节点:条目到达的追踪挂在它上面。 */
7
+ rootRef: Ref<HTMLElement | null>;
6
8
  /** 入队并返回 id;同 id 已存在则就地改写,位置不变。 */
7
9
  create: (options?: NotificationOptions) => string;
8
10
  update: (id: string, options: Partial<NotificationOptions>) => void;
@@ -11,6 +13,8 @@ interface NotificationContext {
11
13
  }
12
14
  interface NotificationItemContext {
13
15
  api: ComputedRef<NotificationItemApi>;
16
+ /** 卡片根节点:退场动画从它上面探测。 */
17
+ rootRef: Ref<HTMLElement | null>;
14
18
  }
15
19
  declare function provideNotification(ctx: NotificationContext): void;
16
20
  declare function useNotificationContext(): NotificationContext;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","names":[],"sources":["../../../src/components/notification/context.ts"],"mappings":";;;UAWiB;EACf,KAAK,YAAY;;EAEjB,SAAS,UAAU;EACnB,SAAS,YAAY,SAAS,QAAQ;EACtC,UAAU;EACV;;UAGe;EACf,KAAK,YAAY;;iBAMH,oBAAoB,KAAK;iBAIzB,0BAA0B;;iBAQ1B,kCAAkC;iBAIlC,wBAAwB,KAAK;iBAI7B,8BAA8B"}
1
+ {"version":3,"file":"context.d.ts","names":[],"sources":["../../../src/components/notification/context.ts"],"mappings":";;;UAWiB;EACf,KAAK,YAAY;;EAEjB,SAAS,IAAI;;EAEb,SAAS,UAAU;EACnB,SAAS,YAAY,SAAS,QAAQ;EACtC,UAAU;EACV;;UAGe;EACf,KAAK,YAAY;;EAEjB,SAAS,IAAI;;iBAMC,oBAAoB,KAAK;iBAIzB,0BAA0B;;iBAQ1B,kCAAkC;iBAIlC,wBAAwB,KAAK;iBAI7B,8BAA8B"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/notification/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 { NotificationApi, NotificationItemApi, NotificationOptions } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\nexport interface NotificationContext {\n api: ComputedRef<NotificationApi>\n /** 入队并返回 id;同 id 已存在则就地改写,位置不变。 */\n create: (options?: NotificationOptions) => string\n update: (id: string, options: Partial<NotificationOptions>) => void\n dismiss: (id: string) => void\n dismissAll: () => void\n}\n\nexport interface NotificationItemContext {\n api: ComputedRef<NotificationItemApi>\n}\n\nconst KEY: InjectionKey<NotificationContext> = Symbol.for('xh-notification')\nconst ITEM_KEY: InjectionKey<NotificationItemContext> = Symbol.for('xh-notification-item')\n\nexport function provideNotification(ctx: NotificationContext): void {\n provide(KEY, ctx)\n}\n\nexport function useNotificationContext(): NotificationContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Notification 部件必须用在 XhNotificationRoot 内')\n return ctx\n}\n\n/** 注入队列上下文,不在队列内时返回 null 而非抛错。 */\nexport function useNotificationContextOptional(): NotificationContext | null {\n return inject(KEY, null)\n}\n\nexport function provideNotificationItem(ctx: NotificationItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useNotificationItemContext(): NotificationItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] Notification 卡片部件必须用在 XhNotificationItem 内')\n return ctx\n}\n"],"mappings":";;AAwBA,MAAM,MAAyC,OAAO,IAAI,iBAAiB;AAC3E,MAAM,WAAkD,OAAO,IAAI,sBAAsB;AAEzF,SAAgB,oBAAoB,KAAgC;CAClE,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,yBAA8C;CAC5D,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,+CAA+C;CACjE,OAAO;AACT;;AAGA,SAAgB,iCAA6D;CAC3E,OAAO,OAAO,KAAK,IAAI;AACzB;AAEA,SAAgB,wBAAwB,KAAoC;CAC1E,QAAQ,UAAU,GAAG;AACvB;AAEA,SAAgB,6BAAsD;CACpE,MAAM,MAAM,OAAO,UAAU,IAAI;CACjC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,iDAAiD;CACnE,OAAO;AACT"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/notification/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 { NotificationApi, NotificationItemApi, NotificationOptions } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey, Ref } from 'vue'\nimport { inject, provide } from 'vue'\n\nexport interface NotificationContext {\n api: ComputedRef<NotificationApi>\n /** 作用域包装节点:条目到达的追踪挂在它上面。 */\n rootRef: Ref<HTMLElement | null>\n /** 入队并返回 id;同 id 已存在则就地改写,位置不变。 */\n create: (options?: NotificationOptions) => string\n update: (id: string, options: Partial<NotificationOptions>) => void\n dismiss: (id: string) => void\n dismissAll: () => void\n}\n\nexport interface NotificationItemContext {\n api: ComputedRef<NotificationItemApi>\n /** 卡片根节点:退场动画从它上面探测。 */\n rootRef: Ref<HTMLElement | null>\n}\n\nconst KEY: InjectionKey<NotificationContext> = Symbol.for('xh-notification')\nconst ITEM_KEY: InjectionKey<NotificationItemContext> = Symbol.for('xh-notification-item')\n\nexport function provideNotification(ctx: NotificationContext): void {\n provide(KEY, ctx)\n}\n\nexport function useNotificationContext(): NotificationContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Notification 部件必须用在 XhNotificationRoot 内')\n return ctx\n}\n\n/** 注入队列上下文,不在队列内时返回 null 而非抛错。 */\nexport function useNotificationContextOptional(): NotificationContext | null {\n return inject(KEY, null)\n}\n\nexport function provideNotificationItem(ctx: NotificationItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useNotificationItemContext(): NotificationItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] Notification 卡片部件必须用在 XhNotificationItem 内')\n return ctx\n}\n"],"mappings":";;AA4BA,MAAM,MAAyC,OAAO,IAAI,iBAAiB;AAC3E,MAAM,WAAkD,OAAO,IAAI,sBAAsB;AAEzF,SAAgB,oBAAoB,KAAgC;CAClE,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,yBAA8C;CAC5D,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,+CAA+C;CACjE,OAAO;AACT;;AAGA,SAAgB,iCAA6D;CAC3E,OAAO,OAAO,KAAK,IAAI;AACzB;AAEA,SAAgB,wBAAwB,KAAoC;CAC1E,QAAQ,UAAU,GAAG;AACvB;AAEA,SAAgB,6BAAsD;CACpE,MAAM,MAAM,OAAO,UAAU,IAAI;CACjC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,iDAAiD;CACnE,OAAO;AACT"}
@@ -1,8 +1,9 @@
1
1
  import { PayloadOf } from "../../runtime/payload.js";
2
2
  import { PropType, SlotsType, VNode } from "vue";
3
- import { NotificationDedupe, NotificationItemApi, NotificationOptions, NotificationPlacement, NotificationRecord, NotificationSchema, NotificationTranslations, ResolvedNotification, ToastSchema, ToastTone } from "@xihan-ui/headless";
3
+ import { NotificationDedupe, NotificationItemApi, NotificationItemSchema, NotificationOptions, NotificationPlacement, NotificationPreset, NotificationRecord, NotificationSchema, NotificationTone, NotificationTranslations, ResolvedNotification } from "@xihan-ui/headless";
4
4
  //#region src/components/notification/notification.d.ts
5
5
  type NotificationProps = NotificationSchema['props'];
6
+ type NotificationItemProps = NotificationItemSchema['props'];
6
7
  /** 默认插槽的载荷:当前可见的通知队列与它的落位分组,以及入队、改写、关闭的命令。 */
7
8
  interface NotificationRootSlotProps {
8
9
  items: ResolvedNotification[];
@@ -21,6 +22,9 @@ declare const XhNotificationRoot: import("vue").DefineComponent<import("vue").Ex
21
22
  defaultItems: {
22
23
  type: PropType<NotificationRecord[]>;
23
24
  };
25
+ preset: {
26
+ type: PropType<NotificationPreset>;
27
+ };
24
28
  placement: {
25
29
  type: PropType<NotificationPlacement>;
26
30
  };
@@ -36,8 +40,9 @@ declare const XhNotificationRoot: import("vue").DefineComponent<import("vue").Ex
36
40
  duration: {
37
41
  type: NumberConstructor;
38
42
  };
39
- removeDelay: {
40
- type: NumberConstructor;
43
+ stacked: {
44
+ type: BooleanConstructor;
45
+ default: undefined;
41
46
  };
42
47
  pauseOnPageIdle: {
43
48
  type: BooleanConstructor;
@@ -58,6 +63,9 @@ declare const XhNotificationRoot: import("vue").DefineComponent<import("vue").Ex
58
63
  defaultItems: {
59
64
  type: PropType<NotificationRecord[]>;
60
65
  };
66
+ preset: {
67
+ type: PropType<NotificationPreset>;
68
+ };
61
69
  placement: {
62
70
  type: PropType<NotificationPlacement>;
63
71
  };
@@ -73,8 +81,9 @@ declare const XhNotificationRoot: import("vue").DefineComponent<import("vue").Ex
73
81
  duration: {
74
82
  type: NumberConstructor;
75
83
  };
76
- removeDelay: {
77
- type: NumberConstructor;
84
+ stacked: {
85
+ type: BooleanConstructor;
86
+ default: undefined;
78
87
  };
79
88
  pauseOnPageIdle: {
80
89
  type: BooleanConstructor;
@@ -87,6 +96,7 @@ declare const XhNotificationRoot: import("vue").DefineComponent<import("vue").Ex
87
96
  "onItems-change"?: ((_details: import("@xihan-ui/headless").NotificationItemsChangeDetails) => any) | undefined;
88
97
  "onUpdate:items"?: ((_items: NotificationRecord[]) => any) | undefined;
89
98
  }>, {
99
+ stacked: boolean;
90
100
  pauseOnPageIdle: boolean;
91
101
  }, SlotsType<{
92
102
  default?: (props: NotificationRootSlotProps) => VNode[];
@@ -108,11 +118,18 @@ declare const XhNotificationGroup: import("vue").DefineComponent<import("vue").E
108
118
  }>> & Readonly<{}>, {}, SlotsType<{
109
119
  default?: (props: NotificationGroupSlotProps) => VNode[];
110
120
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
111
- /** 单条卡片。生命周期复用 toast 的状态机:会自动消失的卡片,该行为与消息来源无关。 */
121
+ /** 默认插槽的载荷:该卡片自己的 api。 */
122
+ interface NotificationItemSlotProps {
123
+ item: NotificationItemApi;
124
+ }
125
+ /** 单条卡片:到期自行消失的一条消息,计时、暂停、按压与退场都在它自己身上。 */
112
126
  declare const XhNotificationItem: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
113
127
  id: {
114
128
  type: StringConstructor;
115
129
  };
130
+ preset: {
131
+ type: PropType<NotificationPreset>;
132
+ };
116
133
  title: {
117
134
  type: StringConstructor;
118
135
  };
@@ -120,7 +137,7 @@ declare const XhNotificationItem: import("vue").DefineComponent<import("vue").Ex
120
137
  type: StringConstructor;
121
138
  };
122
139
  tone: {
123
- type: PropType<ToastTone>;
140
+ type: PropType<NotificationTone>;
124
141
  };
125
142
  loading: {
126
143
  type: BooleanConstructor;
@@ -129,9 +146,6 @@ declare const XhNotificationItem: import("vue").DefineComponent<import("vue").Ex
129
146
  duration: {
130
147
  type: NumberConstructor;
131
148
  };
132
- removeDelay: {
133
- type: NumberConstructor;
134
- };
135
149
  closable: {
136
150
  type: BooleanConstructor;
137
151
  default: undefined;
@@ -150,12 +164,15 @@ declare const XhNotificationItem: import("vue").DefineComponent<import("vue").Ex
150
164
  }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
151
165
  [key: string]: any;
152
166
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
153
- 'status-change': (_details: PayloadOf<ToastSchema["props"], "onStatusChange">) => true;
154
- action: () => true;
167
+ 'status-change': (_details: PayloadOf<NotificationItemProps, "onStatusChange">) => true;
168
+ action: (_details: PayloadOf<NotificationItemProps, "onAction">) => true;
155
169
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
156
170
  id: {
157
171
  type: StringConstructor;
158
172
  };
173
+ preset: {
174
+ type: PropType<NotificationPreset>;
175
+ };
159
176
  title: {
160
177
  type: StringConstructor;
161
178
  };
@@ -163,7 +180,7 @@ declare const XhNotificationItem: import("vue").DefineComponent<import("vue").Ex
163
180
  type: StringConstructor;
164
181
  };
165
182
  tone: {
166
- type: PropType<ToastTone>;
183
+ type: PropType<NotificationTone>;
167
184
  };
168
185
  loading: {
169
186
  type: BooleanConstructor;
@@ -172,9 +189,6 @@ declare const XhNotificationItem: import("vue").DefineComponent<import("vue").Ex
172
189
  duration: {
173
190
  type: NumberConstructor;
174
191
  };
175
- removeDelay: {
176
- type: NumberConstructor;
177
- };
178
192
  closable: {
179
193
  type: BooleanConstructor;
180
194
  default: undefined;
@@ -191,22 +205,24 @@ declare const XhNotificationItem: import("vue").DefineComponent<import("vue").Ex
191
205
  type: PropType<Partial<NotificationTranslations>>;
192
206
  };
193
207
  }>> & Readonly<{
194
- "onStatus-change"?: ((_details: import("@xihan-ui/headless").ToastStatusChangeDetails) => any) | undefined;
195
- onAction?: (() => any) | undefined;
208
+ "onStatus-change"?: ((_details: import("@xihan-ui/headless").NotificationStatusChangeDetails) => any) | undefined;
209
+ onAction?: ((_details: import("@xihan-ui/headless").NotificationActionDetails) => any) | undefined;
196
210
  }>, {
197
211
  closable: boolean;
198
212
  loading: boolean;
199
213
  paused: boolean;
200
214
  pauseOnPageIdle: boolean;
201
215
  }, SlotsType<{
202
- default?: (props: {
203
- item: NotificationItemApi;
204
- }) => VNode[];
216
+ default?: (props: NotificationItemSlotProps) => VNode[];
205
217
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
206
- /** 语气指示符。作者未写内容时由皮肤按 data-tone 绘制兜底字形,data-loading 时换为加载指示。 */
218
+ /** 语气指示符。作者未写内容时由皮肤按 data-tone 绘制兜底字形,data-loading 时换为加载环。 */
207
219
  declare const XhNotificationItemIndicator: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
208
220
  [key: string]: any;
209
221
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
222
+ /** 标题与说明的文本列。 */
223
+ declare const XhNotificationItemContent: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
224
+ [key: string]: any;
225
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
210
226
  declare const XhNotificationItemTitle: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
211
227
  [key: string]: any;
212
228
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -223,5 +239,5 @@ declare const XhNotificationItemCloseTrigger: import("vue").DefineComponent<{},
223
239
  [key: string]: any;
224
240
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
225
241
  //#endregion
226
- export { NotificationGroupSlotProps, NotificationRootSlotProps, XhNotificationGroup, XhNotificationItem, XhNotificationItemActionTrigger, XhNotificationItemCloseTrigger, XhNotificationItemDescription, XhNotificationItemIndicator, XhNotificationItemProgress, XhNotificationItemTitle, XhNotificationRoot };
242
+ export { NotificationGroupSlotProps, NotificationItemSlotProps, NotificationRootSlotProps, XhNotificationGroup, XhNotificationItem, XhNotificationItemActionTrigger, XhNotificationItemCloseTrigger, XhNotificationItemContent, XhNotificationItemDescription, XhNotificationItemIndicator, XhNotificationItemProgress, XhNotificationItemTitle, XhNotificationRoot };
227
243
  //# sourceMappingURL=notification.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"notification.d.ts","names":[],"sources":["../../../src/components/notification/notification.ts"],"mappings":";;;;KAeK,oBAAoB;;UAGR;EACf,OAAO;EACP,YAAY;EACZ;EACA,sBAAsB,WAAW,0BAA0B;EAC3D,SAAS,UAAU;EACnB,SAAS,YAAY,SAAS,QAAQ;EACtC,UAAU;EACV;;cAGW,kCAAkB,8BAAA;;IAIH,MAAA,SAAS;;;IACF,MAAA,SAAS;;;IACX,MAAA,SAAS;;;;;;IAEZ,MAAA,SAAS;;;;;;;;;;;;;;;;IAKH,MAAA,SAAS,QAAQ;;;;;EAItB,iBAAA,UAAA,UAAU;EACZ,iBAAA,QAAA,UAAU;;;IAdX,MAAA,SAAS;;;IACF,MAAA,SAAS;;;IACX,MAAA,SAAS;;;;;;IAEZ,MAAA,SAAS;;;;;;;;;;;;;;;;IAKH,MAAA,SAAS,QAAQ;;;;;;;;EAQvC,WAAC,OAAO,8BAA8B;kCAqBlD;;UAGe;EACf,MAAM;;cAGK,mCAAmB,8BAAA;;IAIC,MAAA,SAAS;;;;;;IAAT,MAAA,SAAS;;;EAG5B,WAAC,OAAO,+BAA+B;kCAkBnD;;cAGW,kCAAkB,8BAAA;;;;;;;;;;;IAOH,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;IAQD,MAAA,SAAS,QAAQ;;;;;EAGrB,kBAAA,UAAA,UAAU;;;;;;;;;;;;;IAXd,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;IAQD,MAAA,SAAS,QAAQ;;;;;;;;;;;EAOvC,WAAC;IAAS,MAAM;QAA0B;kCAiBtD;;cAGW,2CAA2B,0BAAA,oBAAA,4BAAA;;8BAMtC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAWlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6CAA6B,0BAAA,oBAAA,4BAAA;;8BAUxC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,+CAA+B,0BAAA,oBAAA,4BAAA;;8BAM1C,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,0CAA0B,0BAAA,oBAAA,4BAAA;;8BAMrC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,8CAA8B,0BAAA,oBAAA,4BAAA;;8BAMzC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
1
+ {"version":3,"file":"notification.d.ts","names":[],"sources":["../../../src/components/notification/notification.ts"],"mappings":";;;;KA2BK,oBAAoB;KACpB,wBAAwB;;UAGZ;EACf,OAAO;EACP,YAAY;EACZ;EACA,sBAAsB,WAAW,0BAA0B;EAC3D,SAAS,UAAU;EACnB,SAAS,YAAY,SAAS,QAAQ;EACtC,UAAU;EACV;;cAGW,kCAAkB,8BAAA;;IAIH,MAAA,SAAS;;;IACF,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACN,MAAA,SAAS;;;;;;IAEZ,MAAA,SAAS;;;;;;;;;;;;;;;;;IAKH,MAAA,SAAS,QAAQ;;;;;EAItB,iBAAA,UAAA,UAAU;EACZ,iBAAA,QAAA,UAAU;;;IAfX,MAAA,SAAS;;;IACF,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACN,MAAA,SAAS;;;;;;IAEZ,MAAA,SAAS;;;;;;;;;;;;;;;;;IAKH,MAAA,SAAS,QAAQ;;;;;;;;;EAQvC,WAAC,OAAO,8BAA8B;kCAqBlD;;UAGe;EACf,MAAM;;cAGK,mCAAmB,8BAAA;;IAIC,MAAA,SAAS;;;;;;IAAT,MAAA,SAAS;;;EAG5B,WAAC,OAAO,+BAA+B;kCAkBnD;;UAGe;EACf,MAAM;;;cAIK,kCAAkB,8BAAA;;;;;IAMD,MAAA,SAAS;;;;;;;;;IAGX,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;IAOD,MAAA,SAAS,QAAQ;;;;;EAIrB,kBAAA,UAAA,UAAU;EACjB,SAAA,UAAA,UAAU;;;;;;IAfL,MAAA,SAAS;;;;;;;;;IAGX,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;IAOD,MAAA,SAAS,QAAQ;;;;;;;;;;;EAQvC,WAAC,OAAO,8BAA8B;kCAelD;;cAGW,2CAA2B,0BAAA,oBAAA,4BAAA;;8BAMtC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,yCAAyB,0BAAA,oBAAA,4BAAA;;8BAMpC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAWlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6CAA6B,0BAAA,oBAAA,4BAAA;;8BAUxC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,+CAA+B,0BAAA,oBAAA,4BAAA;;8BAO1C,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,0CAA0B,0BAAA,oBAAA,4BAAA;;8BAMrC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,8CAA8B,0BAAA,oBAAA,4BAAA;;8BAMzC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
@@ -8,12 +8,16 @@ const XhNotificationRoot = defineComponent({
8
8
  props: {
9
9
  items: { type: Array },
10
10
  defaultItems: { type: Array },
11
+ preset: { type: String },
11
12
  placement: { type: String },
12
13
  max: { type: Number },
13
14
  dedupe: { type: String },
14
15
  gap: { type: Number },
15
16
  duration: { type: Number },
16
- removeDelay: { type: Number },
17
+ stacked: {
18
+ type: Boolean,
19
+ default: void 0
20
+ },
17
21
  pauseOnPageIdle: {
18
22
  type: Boolean,
19
23
  default: void 0
@@ -32,7 +36,10 @@ const XhNotificationRoot = defineComponent({
32
36
  };
33
37
  const ctx = useNotification(withXhConfig("notification", props), notify);
34
38
  provideNotification(ctx);
35
- return () => h("div", ctx.api.value.getRootProps(), slots.default?.({
39
+ return () => h("div", {
40
+ ...ctx.api.value.getRootProps(),
41
+ ref: ctx.rootRef
42
+ }, slots.default?.({
36
43
  items: ctx.api.value.visibleNotifications,
37
44
  placements: ctx.api.value.placements,
38
45
  count: ctx.api.value.count,
@@ -59,11 +66,12 @@ const XhNotificationGroup = defineComponent({
59
66
  };
60
67
  }
61
68
  });
62
- /** 单条卡片。生命周期复用 toast 的状态机:会自动消失的卡片,该行为与消息来源无关。 */
69
+ /** 单条卡片:到期自行消失的一条消息,计时、暂停、按压与退场都在它自己身上。 */
63
70
  const XhNotificationItem = defineComponent({
64
71
  name: "XhNotificationItem",
65
72
  props: {
66
73
  id: { type: String },
74
+ preset: { type: String },
67
75
  title: { type: String },
68
76
  description: { type: String },
69
77
  tone: { type: String },
@@ -72,7 +80,6 @@ const XhNotificationItem = defineComponent({
72
80
  default: void 0
73
81
  },
74
82
  duration: { type: Number },
75
- removeDelay: { type: Number },
76
83
  closable: {
77
84
  type: Boolean,
78
85
  default: void 0
@@ -89,16 +96,19 @@ const XhNotificationItem = defineComponent({
89
96
  },
90
97
  emits: {
91
98
  "status-change": (_details) => true,
92
- "action": () => true
99
+ "action": (_details) => true
93
100
  },
94
101
  slots: Object,
95
102
  setup(props, { slots, emit }) {
96
- const ctx = useNotificationItem(withXhConfig("notification", props), (details) => emit("status-change", details), () => emit("action"));
103
+ const ctx = useNotificationItem(withXhConfig("notification", props), (details) => emit("status-change", details), (details) => emit("action", details));
97
104
  provideNotificationItem(ctx);
98
- return () => h("div", ctx.api.value.getItemProps(), slots.default?.({ item: ctx.api.value }));
105
+ return () => h("div", {
106
+ ...ctx.api.value.getItemProps(),
107
+ ref: ctx.rootRef
108
+ }, slots.default?.({ item: ctx.api.value }));
99
109
  }
100
110
  });
101
- /** 语气指示符。作者未写内容时由皮肤按 data-tone 绘制兜底字形,data-loading 时换为加载指示。 */
111
+ /** 语气指示符。作者未写内容时由皮肤按 data-tone 绘制兜底字形,data-loading 时换为加载环。 */
102
112
  const XhNotificationItemIndicator = defineComponent({
103
113
  name: "XhNotificationItemIndicator",
104
114
  setup(_, { slots }) {
@@ -106,6 +116,14 @@ const XhNotificationItemIndicator = defineComponent({
106
116
  return () => h("span", ctx.api.value.getItemIndicatorProps(), slots.default?.());
107
117
  }
108
118
  });
119
+ /** 标题与说明的文本列。 */
120
+ const XhNotificationItemContent = defineComponent({
121
+ name: "XhNotificationItemContent",
122
+ setup(_, { slots }) {
123
+ const ctx = useNotificationItemContext();
124
+ return () => h("div", ctx.api.value.getItemContentProps(), slots.default?.());
125
+ }
126
+ });
109
127
  const XhNotificationItemTitle = defineComponent({
110
128
  name: "XhNotificationItemTitle",
111
129
  setup(_, { slots }) {
@@ -142,6 +160,6 @@ const XhNotificationItemCloseTrigger = defineComponent({
142
160
  }
143
161
  });
144
162
  //#endregion
145
- export { XhNotificationGroup, XhNotificationItem, XhNotificationItemActionTrigger, XhNotificationItemCloseTrigger, XhNotificationItemDescription, XhNotificationItemIndicator, XhNotificationItemProgress, XhNotificationItemTitle, XhNotificationRoot };
163
+ export { XhNotificationGroup, XhNotificationItem, XhNotificationItemActionTrigger, XhNotificationItemCloseTrigger, XhNotificationItemContent, XhNotificationItemDescription, XhNotificationItemIndicator, XhNotificationItemProgress, XhNotificationItemTitle, XhNotificationRoot };
146
164
 
147
165
  //# sourceMappingURL=notification.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notification.js","names":[],"sources":["../../../src/components/notification/notification.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// 提供 notification 相关实现。\n\nimport type { NotificationDedupe, NotificationItemApi, NotificationOptions, NotificationPlacement, NotificationRecord, NotificationSchema, NotificationTranslations, ResolvedNotification, ToastSchema, ToastTone } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, Fragment, h } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { provideNotification, provideNotificationItem, useNotificationContext, useNotificationItemContext } from './context'\nimport { useNotification, useNotificationItem } from './use-notification'\n\ntype NotificationProps = NotificationSchema['props']\n\n/** 默认插槽的载荷:当前可见的通知队列与它的落位分组,以及入队、改写、关闭的命令。 */\nexport interface NotificationRootSlotProps {\n items: ResolvedNotification[]\n placements: NotificationPlacement[]\n count: number\n getItemsByPlacement: (placement: NotificationPlacement) => ResolvedNotification[]\n create: (options?: NotificationOptions) => string\n update: (id: string, options: Partial<NotificationOptions>) => void\n dismiss: (id: string) => void\n dismissAll: () => void\n}\n\nexport const XhNotificationRoot = defineComponent({\n name: 'XhNotificationRoot',\n // 缺省值由 connect 决定;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n items: { type: Array as PropType<NotificationRecord[]> },\n defaultItems: { type: Array as PropType<NotificationRecord[]> },\n placement: { type: String as PropType<NotificationPlacement> },\n max: { type: Number },\n dedupe: { type: String as PropType<NotificationDedupe> },\n gap: { type: Number },\n duration: { type: Number },\n removeDelay: { type: Number },\n pauseOnPageIdle: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<Partial<NotificationTranslations>> },\n },\n // items-change 携带 { items },update:items 携带裸队列以支持 v-model:items\n emits: {\n 'items-change': (_details: PayloadOf<NotificationProps, 'onItemsChange'>) => true,\n 'update:items': (_items: PayloadOf<NotificationProps, 'onItemsChange'>['items']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: NotificationRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notify: NotificationProps['onItemsChange'] = (details) => {\n emit('items-change', details)\n emit('update:items', details.items)\n }\n const ctx = useNotification(withXhConfig('notification', props) as NotificationProps, notify)\n provideNotification(ctx)\n // 根节点是地标容器,插槽作用域里一并暴露队列与增删改命令\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n items: ctx.api.value.visibleNotifications,\n placements: ctx.api.value.placements,\n count: ctx.api.value.count,\n getItemsByPlacement: ctx.api.value.getItemsByPlacement,\n create: ctx.create,\n update: ctx.update,\n dismiss: ctx.dismiss,\n dismissAll: ctx.dismissAll,\n }))\n },\n})\n\n/** 默认插槽的载荷:该组中逐条铺开的通知。 */\nexport interface NotificationGroupSlotProps {\n item: ResolvedNotification\n}\n\nexport const XhNotificationGroup = defineComponent({\n name: 'XhNotificationGroup',\n props: {\n // 不写就用 notification 的 placement;写了就只收这个位置上的条目\n placement: { type: String as PropType<NotificationPlacement> },\n },\n slots: Object as SlotsType<{\n default?: (props: NotificationGroupSlotProps) => VNode[]\n }>,\n setup(props, { slots }) {\n const ctx = useNotificationContext()\n return () => {\n const api = ctx.api.value\n const groupProps = api.getGroupProps({ placement: props.placement }) as Record<string, unknown>\n // 落位从 group 自己的产出里读回,不在这边重算缺省\n const placement = groupProps['data-placement'] as NotificationPlacement\n const list = api.getItemsByPlacement(placement)\n // 每条通知按队列身份 id 给 key,避免节点被就地复用\n return h(\n 'div',\n groupProps,\n slots.default ? list.map(item => h(Fragment, { key: item.id }, slots.default!({ item }))) : undefined,\n )\n }\n },\n})\n\n/** 单条卡片。生命周期复用 toast 的状态机:会自动消失的卡片,该行为与消息来源无关。 */\nexport const XhNotificationItem = defineComponent({\n name: 'XhNotificationItem',\n // 缺省值由 connect 决定;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n id: { type: String },\n title: { type: String },\n description: { type: String },\n tone: { type: String as PropType<ToastTone> },\n loading: { type: Boolean, default: undefined },\n duration: { type: Number },\n removeDelay: { type: Number },\n closable: { type: Boolean, default: undefined },\n pauseOnPageIdle: { type: Boolean, default: undefined },\n // 由宿主整摞一起按住计时;与指针、焦点那几路并存,最后一个松开才继续走\n paused: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<Partial<NotificationTranslations>> },\n },\n emits: {\n 'status-change': (_details: PayloadOf<ToastSchema['props'], 'onStatusChange'>) => true,\n 'action': () => true,\n },\n slots: Object as SlotsType<{\n default?: (props: { item: NotificationItemApi }) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n // 桶名写 notification 而不是 toast:卡片跑的虽然是 toast 那台机器,\n // 但它的文案该跟着通知走——写 toast 的话,改这颗叉的读屏名会连所有轻提示一起改\n const ctx = useNotificationItem(\n withXhConfig('notification', props) as ToastSchema['props'],\n details => emit('status-change', details),\n () => emit('action'),\n )\n provideNotificationItem(ctx)\n return () => h(\n 'div',\n ctx.api.value.getItemProps() as Record<string, unknown>,\n slots.default?.({ item: ctx.api.value }),\n )\n },\n})\n\n/** 语气指示符。作者未写内容时由皮肤按 data-tone 绘制兜底字形,data-loading 时换为加载指示。 */\nexport const XhNotificationItemIndicator = defineComponent({\n name: 'XhNotificationItemIndicator',\n setup(_, { slots }) {\n const ctx = useNotificationItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhNotificationItemTitle = defineComponent({\n name: 'XhNotificationItemTitle',\n setup(_, { slots }) {\n const ctx = useNotificationItemContext()\n // 作者没写内容就用队列里那条记录的标题\n return () => h(\n 'div',\n ctx.api.value.getItemTitleProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.title,\n )\n },\n})\n\nexport const XhNotificationItemDescription = defineComponent({\n name: 'XhNotificationItemDescription',\n setup(_, { slots }) {\n const ctx = useNotificationItemContext()\n return () => h(\n 'div',\n ctx.api.value.getItemDescriptionProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.description,\n )\n },\n})\n\nexport const XhNotificationItemActionTrigger = defineComponent({\n name: 'XhNotificationItemActionTrigger',\n setup(_, { slots }) {\n const ctx = useNotificationItemContext()\n return () => h('button', ctx.api.value.getItemActionTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhNotificationItemProgress = defineComponent({\n name: 'XhNotificationItemProgress',\n setup(_, { slots }) {\n const ctx = useNotificationItemContext()\n return () => h('div', ctx.api.value.getItemProgressProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhNotificationItemCloseTrigger = defineComponent({\n name: 'XhNotificationItemCloseTrigger',\n setup(_, { slots }) {\n const ctx = useNotificationItemContext()\n return () => h('button', ctx.api.value.getItemCloseTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n"],"mappings":";;;;;AA6BA,MAAa,qBAAqB,gBAAgB;CAChD,MAAM;CAEN,OAAO;EACL,OAAO,EAAE,MAAM,MAAwC;EACvD,cAAc,EAAE,MAAM,MAAwC;EAC9D,WAAW,EAAE,MAAM,OAA0C;EAC7D,KAAK,EAAE,MAAM,OAAO;EACpB,QAAQ,EAAE,MAAM,OAAuC;EACvD,KAAK,EAAE,MAAM,OAAO;EACpB,UAAU,EAAE,MAAM,OAAO;EACzB,aAAa,EAAE,MAAM,OAAO;EAC5B,iBAAiB;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EACrD,cAAc,EAAE,MAAM,OAAsD;CAC9E;CAEA,OAAO;EACL,iBAAiB,aAA4D;EAC7E,iBAAiB,WAAmE;CACtF;CACA,OAAO;CAGP,MAAM,OAAO,EAAE,OAAO,QAAQ;EAC5B,MAAM,UAA8C,YAAY;GAC9D,KAAK,gBAAgB,OAAO;GAC5B,KAAK,gBAAgB,QAAQ,KAAK;EACpC;EACA,MAAM,MAAM,gBAAgB,aAAa,gBAAgB,KAAK,GAAwB,MAAM;EAC5F,oBAAoB,GAAG;EAEvB,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,aAAa,GAA8B,MAAM,UAAU;GAC7F,OAAO,IAAI,IAAI,MAAM;GACrB,YAAY,IAAI,IAAI,MAAM;GAC1B,OAAO,IAAI,IAAI,MAAM;GACrB,qBAAqB,IAAI,IAAI,MAAM;GACnC,QAAQ,IAAI;GACZ,QAAQ,IAAI;GACZ,SAAS,IAAI;GACb,YAAY,IAAI;EAClB,CAAC,CAAC;CACJ;AACF,CAAC;AAOD,MAAa,sBAAsB,gBAAgB;CACjD,MAAM;CACN,OAAO,EAEL,WAAW,EAAE,MAAM,OAA0C,EAC/D;CACA,OAAO;CAGP,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,MAAM,uBAAuB;EACnC,aAAa;GACX,MAAM,MAAM,IAAI,IAAI;GACpB,MAAM,aAAa,IAAI,cAAc,EAAE,WAAW,MAAM,UAAU,CAAC;GAEnE,MAAM,YAAY,WAAW;GAC7B,MAAM,OAAO,IAAI,oBAAoB,SAAS;GAE9C,OAAO,EACL,OACA,YACA,MAAM,UAAU,KAAK,KAAI,SAAQ,EAAE,UAAU,EAAE,KAAK,KAAK,GAAG,GAAG,MAAM,QAAS,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,KAAA,CAC9F;EACF;CACF;AACF,CAAC;;AAGD,MAAa,qBAAqB,gBAAgB;CAChD,MAAM;CAEN,OAAO;EACL,IAAI,EAAE,MAAM,OAAO;EACnB,OAAO,EAAE,MAAM,OAAO;EACtB,aAAa,EAAE,MAAM,OAAO;EAC5B,MAAM,EAAE,MAAM,OAA8B;EAC5C,SAAS;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC7C,UAAU,EAAE,MAAM,OAAO;EACzB,aAAa,EAAE,MAAM,OAAO;EAC5B,UAAU;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC9C,iBAAiB;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAErD,QAAQ;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC5C,cAAc,EAAE,MAAM,OAAsD;CAC9E;CACA,OAAO;EACL,kBAAkB,aAAgE;EAClF,gBAAgB;CAClB;CACA,OAAO;CAGP,MAAM,OAAO,EAAE,OAAO,QAAQ;EAG5B,MAAM,MAAM,oBACV,aAAa,gBAAgB,KAAK,IAClC,YAAW,KAAK,iBAAiB,OAAO,SAClC,KAAK,QAAQ,CACrB;EACA,wBAAwB,GAAG;EAC3B,aAAa,EACX,OACA,IAAI,IAAI,MAAM,aAAa,GAC3B,MAAM,UAAU,EAAE,MAAM,IAAI,IAAI,MAAM,CAAC,CACzC;CACF;AACF,CAAC;;AAGD,MAAa,8BAA8B,gBAAgB;CACzD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,2BAA2B;EACvC,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,sBAAsB,GAA8B,MAAM,UAAU,CAAC;CAC5G;AACF,CAAC;AAED,MAAa,0BAA0B,gBAAgB;CACrD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,2BAA2B;EAEvC,aAAa,EACX,OACA,IAAI,IAAI,MAAM,kBAAkB,GAChC,MAAM,UAAU,KAAK,IAAI,IAAI,MAAM,KACrC;CACF;AACF,CAAC;AAED,MAAa,gCAAgC,gBAAgB;CAC3D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,2BAA2B;EACvC,aAAa,EACX,OACA,IAAI,IAAI,MAAM,wBAAwB,GACtC,MAAM,UAAU,KAAK,IAAI,IAAI,MAAM,WACrC;CACF;AACF,CAAC;AAED,MAAa,kCAAkC,gBAAgB;CAC7D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,2BAA2B;EACvC,aAAa,EAAE,UAAU,IAAI,IAAI,MAAM,0BAA0B,GAA8B,MAAM,UAAU,CAAC;CAClH;AACF,CAAC;AAED,MAAa,6BAA6B,gBAAgB;CACxD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,2BAA2B;EACvC,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,qBAAqB,GAA8B,MAAM,UAAU,CAAC;CAC1G;AACF,CAAC;AAED,MAAa,iCAAiC,gBAAgB;CAC5D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,2BAA2B;EACvC,aAAa,EAAE,UAAU,IAAI,IAAI,MAAM,yBAAyB,GAA8B,MAAM,UAAU,CAAC;CACjH;AACF,CAAC"}
1
+ {"version":3,"file":"notification.js","names":[],"sources":["../../../src/components/notification/notification.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// 提供 notification 相关实现。\n\nimport type {\n NotificationDedupe,\n NotificationItemApi,\n NotificationItemSchema,\n NotificationOptions,\n NotificationPlacement,\n NotificationPreset,\n NotificationRecord,\n NotificationSchema,\n NotificationTone,\n NotificationTranslations,\n ResolvedNotification,\n} from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, Fragment, h } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { provideNotification, provideNotificationItem, useNotificationContext, useNotificationItemContext } from './context'\nimport { useNotification, useNotificationItem } from './use-notification'\n\ntype NotificationProps = NotificationSchema['props']\ntype NotificationItemProps = NotificationItemSchema['props']\n\n/** 默认插槽的载荷:当前可见的通知队列与它的落位分组,以及入队、改写、关闭的命令。 */\nexport interface NotificationRootSlotProps {\n items: ResolvedNotification[]\n placements: NotificationPlacement[]\n count: number\n getItemsByPlacement: (placement: NotificationPlacement) => ResolvedNotification[]\n create: (options?: NotificationOptions) => string\n update: (id: string, options: Partial<NotificationOptions>) => void\n dismiss: (id: string) => void\n dismissAll: () => void\n}\n\nexport const XhNotificationRoot = defineComponent({\n name: 'XhNotificationRoot',\n // 缺省值由 connect 决定;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n items: { type: Array as PropType<NotificationRecord[]> },\n defaultItems: { type: Array as PropType<NotificationRecord[]> },\n preset: { type: String as PropType<NotificationPreset> },\n placement: { type: String as PropType<NotificationPlacement> },\n max: { type: Number },\n dedupe: { type: String as PropType<NotificationDedupe> },\n gap: { type: Number },\n duration: { type: Number },\n stacked: { type: Boolean, default: undefined },\n pauseOnPageIdle: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<Partial<NotificationTranslations>> },\n },\n // items-change 携带 { items },update:items 携带裸队列以支持 v-model:items\n emits: {\n 'items-change': (_details: PayloadOf<NotificationProps, 'onItemsChange'>) => true,\n 'update:items': (_items: PayloadOf<NotificationProps, 'onItemsChange'>['items']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: NotificationRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notify: NotificationProps['onItemsChange'] = (details) => {\n emit('items-change', details)\n emit('update:items', details.items)\n }\n const ctx = useNotification(withXhConfig('notification', props) as NotificationProps, notify)\n provideNotification(ctx)\n // 根节点是地标容器,插槽作用域里一并暴露队列与增删改命令\n return () => h('div', { ...ctx.api.value.getRootProps() as Record<string, unknown>, ref: ctx.rootRef }, slots.default?.({\n items: ctx.api.value.visibleNotifications,\n placements: ctx.api.value.placements,\n count: ctx.api.value.count,\n getItemsByPlacement: ctx.api.value.getItemsByPlacement,\n create: ctx.create,\n update: ctx.update,\n dismiss: ctx.dismiss,\n dismissAll: ctx.dismissAll,\n }))\n },\n})\n\n/** 默认插槽的载荷:该组中逐条铺开的通知。 */\nexport interface NotificationGroupSlotProps {\n item: ResolvedNotification\n}\n\nexport const XhNotificationGroup = defineComponent({\n name: 'XhNotificationGroup',\n props: {\n // 不写就用 notification 的 placement;写了就只收这个位置上的条目\n placement: { type: String as PropType<NotificationPlacement> },\n },\n slots: Object as SlotsType<{\n default?: (props: NotificationGroupSlotProps) => VNode[]\n }>,\n setup(props, { slots }) {\n const ctx = useNotificationContext()\n return () => {\n const api = ctx.api.value\n const groupProps = api.getGroupProps({ placement: props.placement }) as Record<string, unknown>\n // 落位从 group 自己的产出里读回,不在这边重算缺省\n const placement = groupProps['data-placement'] as NotificationPlacement\n const list = api.getItemsByPlacement(placement)\n // 每条通知按队列身份 id 给 key,避免节点被就地复用\n return h(\n 'div',\n groupProps,\n slots.default ? list.map(item => h(Fragment, { key: item.id }, slots.default!({ item }))) : undefined,\n )\n }\n },\n})\n\n/** 默认插槽的载荷:该卡片自己的 api。 */\nexport interface NotificationItemSlotProps {\n item: NotificationItemApi\n}\n\n/** 单条卡片:到期自行消失的一条消息,计时、暂停、按压与退场都在它自己身上。 */\nexport const XhNotificationItem = defineComponent({\n name: 'XhNotificationItem',\n // 缺省值由 connect 决定;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n // 队列身份,不是 DOM id;不给则回落到实例的 scope id\n id: { type: String },\n preset: { type: String as PropType<NotificationPreset> },\n title: { type: String },\n description: { type: String },\n tone: { type: String as PropType<NotificationTone> },\n loading: { type: Boolean, default: undefined },\n duration: { type: Number },\n closable: { type: Boolean, default: undefined },\n pauseOnPageIdle: { type: Boolean, default: undefined },\n // 由宿主整摞一起按住计时;与指针、焦点那几路并存,最后一个松开才继续走\n paused: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<Partial<NotificationTranslations>> },\n },\n // status-change 携带 { id, status },action 携带 { id }\n emits: {\n 'status-change': (_details: PayloadOf<NotificationItemProps, 'onStatusChange'>) => true,\n 'action': (_details: PayloadOf<NotificationItemProps, 'onAction'>) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: NotificationItemSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const ctx = useNotificationItem(\n withXhConfig('notification', props) as NotificationItemProps,\n details => emit('status-change', details),\n details => emit('action', details),\n )\n provideNotificationItem(ctx)\n return () => h(\n 'div',\n { ...ctx.api.value.getItemProps() as Record<string, unknown>, ref: ctx.rootRef },\n slots.default?.({ item: ctx.api.value }),\n )\n },\n})\n\n/** 语气指示符。作者未写内容时由皮肤按 data-tone 绘制兜底字形,data-loading 时换为加载环。 */\nexport const XhNotificationItemIndicator = defineComponent({\n name: 'XhNotificationItemIndicator',\n setup(_, { slots }) {\n const ctx = useNotificationItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 标题与说明的文本列。 */\nexport const XhNotificationItemContent = defineComponent({\n name: 'XhNotificationItemContent',\n setup(_, { slots }) {\n const ctx = useNotificationItemContext()\n return () => h('div', ctx.api.value.getItemContentProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhNotificationItemTitle = defineComponent({\n name: 'XhNotificationItemTitle',\n setup(_, { slots }) {\n const ctx = useNotificationItemContext()\n // 作者没写内容就用队列里那条记录的标题\n return () => h(\n 'div',\n ctx.api.value.getItemTitleProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.title,\n )\n },\n})\n\nexport const XhNotificationItemDescription = defineComponent({\n name: 'XhNotificationItemDescription',\n setup(_, { slots }) {\n const ctx = useNotificationItemContext()\n return () => h(\n 'div',\n ctx.api.value.getItemDescriptionProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.description,\n )\n },\n})\n\nexport const XhNotificationItemActionTrigger = defineComponent({\n name: 'XhNotificationItemActionTrigger',\n setup(_, { slots }) {\n const ctx = useNotificationItemContext()\n // 原生 <button>,激活行为交给平台\n return () => h('button', ctx.api.value.getItemActionTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhNotificationItemProgress = defineComponent({\n name: 'XhNotificationItemProgress',\n setup(_, { slots }) {\n const ctx = useNotificationItemContext()\n return () => h('div', ctx.api.value.getItemProgressProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhNotificationItemCloseTrigger = defineComponent({\n name: 'XhNotificationItemCloseTrigger',\n setup(_, { slots }) {\n const ctx = useNotificationItemContext()\n return () => h('button', ctx.api.value.getItemCloseTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { useOverlayExit } from "../../runtime/use-overlay-exit.js";
2
+ import { createRuntimeConfig } from "@xihan-ui/core";
3
+ //#region src/components/notification/use-item-exit.ts
4
+ /**
5
+ * 进入 dismissing 之后,卡片的机器等这里交给它的 Presence 把卡片上真实的退场动画播完再转 unmounted。
6
+ * 服务端没有 DOM,不接闸门,机器下一拍自行收起。
7
+ */
8
+ function useNotificationItemExit(options) {
9
+ const { service } = options;
10
+ let config = null;
11
+ if (typeof document !== "undefined") config = createRuntimeConfig({ scope: service.scope });
12
+ useOverlayExit({
13
+ config,
14
+ isOpen: options.isOpen,
15
+ contentRef: options.rootRef,
16
+ onPresence: (presence) => service.refs.set("presence", presence)
17
+ });
18
+ }
19
+ //#endregion
20
+ export { useNotificationItemExit };
21
+
22
+ //# sourceMappingURL=use-item-exit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-item-exit.js","names":[],"sources":["../../../src/components/notification/use-item-exit.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// 提供通知卡片的退场闸门接线。\n\nimport type { RuntimeConfig, Service } from '@xihan-ui/core'\nimport type { NotificationItemSchema } from '@xihan-ui/headless'\nimport type { Ref } from 'vue'\nimport { createRuntimeConfig } from '@xihan-ui/core'\nimport { useOverlayExit } from '../../runtime/use-overlay-exit'\n\nexport interface NotificationItemExitOptions {\n service: Service<NotificationItemSchema>\n /** 还在台上:dismissing 与 unmounted 之外的状态。 */\n isOpen: () => boolean\n /** 卡片根节点,退场动画从它上面探测。 */\n rootRef: Ref<HTMLElement | null>\n}\n\n/**\n * 进入 dismissing 之后,卡片的机器等这里交给它的 Presence 把卡片上真实的退场动画播完再转 unmounted。\n * 服务端没有 DOM,不接闸门,机器下一拍自行收起。\n */\nexport function useNotificationItemExit(options: NotificationItemExitOptions): void {\n const { service } = options\n let config: RuntimeConfig | null = null\n if (typeof document !== 'undefined')\n config = createRuntimeConfig({ scope: service.scope })\n\n useOverlayExit({\n config,\n isOpen: options.isOpen,\n contentRef: options.rootRef,\n onPresence: presence => service.refs.set('presence', presence),\n })\n}\n"],"mappings":";;;;;;;AAyBA,SAAgB,wBAAwB,SAA4C;CAClF,MAAM,EAAE,YAAY;CACpB,IAAI,SAA+B;CACnC,IAAI,OAAO,aAAa,aACtB,SAAS,oBAAoB,EAAE,OAAO,QAAQ,MAAM,CAAC;CAEvD,eAAe;EACb;EACA,QAAQ,QAAQ;EAChB,YAAY,QAAQ;EACpB,aAAY,aAAY,QAAQ,KAAK,IAAI,YAAY,QAAQ;CAC/D,CAAC;AACH"}
@@ -1,14 +1,14 @@
1
1
  import { NotificationContext, NotificationItemContext } from "./context.js";
2
2
  import { MaybeRefOrGetter } from "vue";
3
- import { NotificationSchema, ToastSchema } from "@xihan-ui/headless";
3
+ import { NotificationItemSchema, NotificationSchema } from "@xihan-ui/headless";
4
4
  //#region src/components/notification/use-notification.d.ts
5
5
  /** props 接收 ref/getter 时每帧现取,文案等值可以在运行期更换。 */
6
6
  declare function useNotification(props: MaybeRefOrGetter<NotificationSchema['props']>, onItemsChange?: NotificationSchema['props']['onItemsChange']): NotificationContext;
7
7
  /**
8
- * 单条卡片。生命周期复用 toast 的状态机:那是会自动消失的卡片这一通用行为。
8
+ * 单条卡片:计时、暂停、按压与退场都在它自己的机器上。
9
9
  * 退场完成后由这里通知队列删除记录:队列在外层,卡片自身不知道它。
10
10
  */
11
- declare function useNotificationItem(props: ToastSchema['props'], onStatusChange?: ToastSchema['props']['onStatusChange'], onAction?: ToastSchema['props']['onAction']): NotificationItemContext;
11
+ declare function useNotificationItem(props: NotificationItemSchema['props'], onStatusChange?: NotificationItemSchema['props']['onStatusChange'], onAction?: NotificationItemSchema['props']['onAction']): NotificationItemContext;
12
12
  //#endregion
13
13
  export { useNotification, useNotificationItem };
14
14
  //# sourceMappingURL=use-notification.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-notification.d.ts","names":[],"sources":["../../../src/components/notification/use-notification.ts"],"mappings":";;;;;iBAiBgB,gBACd,OAAO,iBAAiB,8BACxB,gBAAgB,+CACf;;;;;iBAiBa,oBACd,OAAO,sBACP,iBAAiB,wCACjB,WAAW,mCACV"}
1
+ {"version":3,"file":"use-notification.d.ts","names":[],"sources":["../../../src/components/notification/use-notification.ts"],"mappings":";;;;;iBAkBgB,gBACd,OAAO,iBAAiB,8BACxB,gBAAgB,+CACf;;;;;iBAqBa,oBACd,OAAO,iCACP,iBAAiB,mDACjB,WAAW,8CACV"}
@@ -1,8 +1,9 @@
1
1
  import { vueNormalize } from "../../runtime/normalize-props.js";
2
2
  import { useMachine } from "../../runtime/use-machine.js";
3
3
  import { useNotificationContextOptional } from "./context.js";
4
- import { computed, toValue } from "vue";
5
- import { connectNotification, connectNotificationItem, notificationMachine, toastMachine } from "@xihan-ui/headless";
4
+ import { useNotificationItemExit } from "./use-item-exit.js";
5
+ import { computed, ref, toValue } from "vue";
6
+ import { connectNotification, connectNotificationItem, notificationItemMachine, notificationMachine } from "@xihan-ui/headless";
6
7
  //#region src/components/notification/use-notification.ts
7
8
  /** props 接收 ref/getter 时每帧现取,文案等值可以在运行期更换。 */
8
9
  function useNotification(props, onItemsChange) {
@@ -11,8 +12,11 @@ function useNotification(props, onItemsChange) {
11
12
  onItemsChange
12
13
  }));
13
14
  const api = computed(() => connectNotification(service, vueNormalize));
15
+ const rootRef = ref(null);
16
+ service.refs.set("getRootEl", () => rootRef.value);
14
17
  return {
15
18
  api,
19
+ rootRef,
16
20
  create: (options) => api.value.create(options),
17
21
  update: (id, options) => api.value.update(id, options),
18
22
  dismiss: (id) => api.value.dismiss(id),
@@ -20,7 +24,7 @@ function useNotification(props, onItemsChange) {
20
24
  };
21
25
  }
22
26
  /**
23
- * 单条卡片。生命周期复用 toast 的状态机:那是会自动消失的卡片这一通用行为。
27
+ * 单条卡片:计时、暂停、按压与退场都在它自己的机器上。
24
28
  * 退场完成后由这里通知队列删除记录:队列在外层,卡片自身不知道它。
25
29
  */
26
30
  function useNotificationItem(props, onStatusChange, onAction) {
@@ -29,12 +33,23 @@ function useNotificationItem(props, onStatusChange, onAction) {
29
33
  onStatusChange?.(details);
30
34
  if (details.status === "unmounted") queue?.dismiss(details.id);
31
35
  };
32
- const service = useMachine(toastMachine, () => ({
36
+ const service = useMachine(notificationItemMachine, () => ({
33
37
  ...props,
34
38
  onStatusChange: notifyStatus,
35
39
  onAction
36
40
  }));
37
- return { api: computed(() => connectNotificationItem(service, vueNormalize)) };
41
+ const api = computed(() => connectNotificationItem(service, vueNormalize));
42
+ const rootRef = ref(null);
43
+ service.refs.set("getRootEl", () => rootRef.value);
44
+ useNotificationItemExit({
45
+ service,
46
+ isOpen: () => api.value.status === "visible",
47
+ rootRef
48
+ });
49
+ return {
50
+ api,
51
+ rootRef
52
+ };
38
53
  }
39
54
  //#endregion
40
55
  export { useNotification, useNotificationItem };
@@ -1 +1 @@
1
- {"version":3,"file":"use-notification.js","names":[],"sources":["../../../src/components/notification/use-notification.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 notification 相关实现。\n\nimport type { NotificationSchema, ToastSchema } from '@xihan-ui/headless'\nimport type { MaybeRefOrGetter } from 'vue'\nimport type { NotificationContext, NotificationItemContext } from './context'\nimport { connectNotification, connectNotificationItem, notificationMachine, toastMachine } from '@xihan-ui/headless'\nimport { computed, toValue } from 'vue'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { useNotificationContextOptional } from './context'\n\n/** props 接收 ref/getter 时每帧现取,文案等值可以在运行期更换。 */\nexport function useNotification(\n props: MaybeRefOrGetter<NotificationSchema['props']>,\n onItemsChange?: NotificationSchema['props']['onItemsChange'],\n): NotificationContext {\n const service = useMachine(notificationMachine, () => ({ ...toValue(props), onItemsChange }))\n const api = computed(() => connectNotification(service, vueNormalize))\n // 四个命令在顶层摊平,函数身份稳定,可解构后随时调用且不读取队列\n return {\n api,\n create: options => api.value.create(options),\n update: (id, options) => api.value.update(id, options),\n dismiss: id => api.value.dismiss(id),\n dismissAll: () => api.value.dismissAll(),\n }\n}\n\n/**\n * 单条卡片。生命周期复用 toast 的状态机:那是会自动消失的卡片这一通用行为。\n * 退场完成后由这里通知队列删除记录:队列在外层,卡片自身不知道它。\n */\nexport function useNotificationItem(\n props: ToastSchema['props'],\n onStatusChange?: ToastSchema['props']['onStatusChange'],\n onAction?: ToastSchema['props']['onAction'],\n): NotificationItemContext {\n const queue = useNotificationContextOptional()\n const notifyStatus: ToastSchema['props']['onStatusChange'] = (details) => {\n onStatusChange?.(details)\n if (details.status === 'unmounted')\n queue?.dismiss(details.id)\n }\n const service = useMachine(toastMachine, () => ({ ...props, onStatusChange: notifyStatus, onAction }))\n const api = computed(() => connectNotificationItem(service, vueNormalize))\n return { api }\n}\n"],"mappings":";;;;;;;AAiBA,SAAgB,gBACd,OACA,eACqB;CACrB,MAAM,UAAU,WAAW,4BAA4B;EAAE,GAAG,QAAQ,KAAK;EAAG;CAAc,EAAE;CAC5F,MAAM,MAAM,eAAe,oBAAoB,SAAS,YAAY,CAAC;CAErE,OAAO;EACL;EACA,SAAQ,YAAW,IAAI,MAAM,OAAO,OAAO;EAC3C,SAAS,IAAI,YAAY,IAAI,MAAM,OAAO,IAAI,OAAO;EACrD,UAAS,OAAM,IAAI,MAAM,QAAQ,EAAE;EACnC,kBAAkB,IAAI,MAAM,WAAW;CACzC;AACF;;;;;AAMA,SAAgB,oBACd,OACA,gBACA,UACyB;CACzB,MAAM,QAAQ,+BAA+B;CAC7C,MAAM,gBAAwD,YAAY;EACxE,iBAAiB,OAAO;EACxB,IAAI,QAAQ,WAAW,aACrB,OAAO,QAAQ,QAAQ,EAAE;CAC7B;CACA,MAAM,UAAU,WAAW,qBAAqB;EAAE,GAAG;EAAO,gBAAgB;EAAc;CAAS,EAAE;CAErG,OAAO,EAAE,KADG,eAAe,wBAAwB,SAAS,YAAY,CAC7D,EAAE;AACf"}
1
+ {"version":3,"file":"use-notification.js","names":[],"sources":["../../../src/components/notification/use-notification.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 notification 相关实现。\n\nimport type { NotificationItemSchema, NotificationSchema } from '@xihan-ui/headless'\nimport type { MaybeRefOrGetter } from 'vue'\nimport type { NotificationContext, NotificationItemContext } from './context'\nimport { connectNotification, connectNotificationItem, notificationItemMachine, notificationMachine } from '@xihan-ui/headless'\nimport { computed, ref, toValue } from 'vue'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { useNotificationContextOptional } from './context'\nimport { useNotificationItemExit } from './use-item-exit'\n\n/** props 接收 ref/getter 时每帧现取,文案等值可以在运行期更换。 */\nexport function useNotification(\n props: MaybeRefOrGetter<NotificationSchema['props']>,\n onItemsChange?: NotificationSchema['props']['onItemsChange'],\n): NotificationContext {\n const service = useMachine(notificationMachine, () => ({ ...toValue(props), onItemsChange }))\n const api = computed(() => connectNotification(service, vueNormalize))\n const rootRef = ref<HTMLElement | null>(null)\n // 传 getter 而非节点本身,ref 在挂载后才有值\n service.refs.set('getRootEl', () => rootRef.value)\n // 四个命令在顶层摊平,函数身份稳定,可解构后随时调用且不读取队列\n return {\n api,\n rootRef,\n create: options => api.value.create(options),\n update: (id, options) => api.value.update(id, options),\n dismiss: id => api.value.dismiss(id),\n dismissAll: () => api.value.dismissAll(),\n }\n}\n\n/**\n * 单条卡片:计时、暂停、按压与退场都在它自己的机器上。\n * 退场完成后由这里通知队列删除记录:队列在外层,卡片自身不知道它。\n */\nexport function useNotificationItem(\n props: NotificationItemSchema['props'],\n onStatusChange?: NotificationItemSchema['props']['onStatusChange'],\n onAction?: NotificationItemSchema['props']['onAction'],\n): NotificationItemContext {\n const queue = useNotificationContextOptional()\n const notifyStatus: NotificationItemSchema['props']['onStatusChange'] = (details) => {\n onStatusChange?.(details)\n if (details.status === 'unmounted')\n queue?.dismiss(details.id)\n }\n const service = useMachine(notificationItemMachine, () => ({ ...props, onStatusChange: notifyStatus, onAction }))\n const api = computed(() => connectNotificationItem(service, vueNormalize))\n const rootRef = ref<HTMLElement | null>(null)\n // 传 getter 而非节点本身,ref 在挂载后才有值;叠摞展开的追踪从它找所在的那一摞\n service.refs.set('getRootEl', () => rootRef.value)\n useNotificationItemExit({ service, isOpen: () => api.value.status === 'visible', rootRef })\n return { api, rootRef }\n}\n"],"mappings":";;;;;;;;AAkBA,SAAgB,gBACd,OACA,eACqB;CACrB,MAAM,UAAU,WAAW,4BAA4B;EAAE,GAAG,QAAQ,KAAK;EAAG;CAAc,EAAE;CAC5F,MAAM,MAAM,eAAe,oBAAoB,SAAS,YAAY,CAAC;CACrE,MAAM,UAAU,IAAwB,IAAI;CAE5C,QAAQ,KAAK,IAAI,mBAAmB,QAAQ,KAAK;CAEjD,OAAO;EACL;EACA;EACA,SAAQ,YAAW,IAAI,MAAM,OAAO,OAAO;EAC3C,SAAS,IAAI,YAAY,IAAI,MAAM,OAAO,IAAI,OAAO;EACrD,UAAS,OAAM,IAAI,MAAM,QAAQ,EAAE;EACnC,kBAAkB,IAAI,MAAM,WAAW;CACzC;AACF;;;;;AAMA,SAAgB,oBACd,OACA,gBACA,UACyB;CACzB,MAAM,QAAQ,+BAA+B;CAC7C,MAAM,gBAAmE,YAAY;EACnF,iBAAiB,OAAO;EACxB,IAAI,QAAQ,WAAW,aACrB,OAAO,QAAQ,QAAQ,EAAE;CAC7B;CACA,MAAM,UAAU,WAAW,gCAAgC;EAAE,GAAG;EAAO,gBAAgB;EAAc;CAAS,EAAE;CAChH,MAAM,MAAM,eAAe,wBAAwB,SAAS,YAAY,CAAC;CACzE,MAAM,UAAU,IAAwB,IAAI;CAE5C,QAAQ,KAAK,IAAI,mBAAmB,QAAQ,KAAK;CACjD,wBAAwB;EAAE;EAAS,cAAc,IAAI,MAAM,WAAW;EAAW;CAAQ,CAAC;CAC1F,OAAO;EAAE;EAAK;CAAQ;AACxB"}