@xihan-ui/vue 1.0.0-alpha.3 → 1.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 (458) hide show
  1. package/CHANGELOG.md +2057 -0
  2. package/dist/backgrounds.d.ts.map +1 -1
  3. package/dist/backgrounds.js +1 -5
  4. package/dist/backgrounds.js.map +1 -1
  5. package/dist/behavior.d.ts +38 -0
  6. package/dist/behavior.d.ts.map +1 -0
  7. package/dist/behavior.js +74 -0
  8. package/dist/behavior.js.map +1 -0
  9. package/dist/components/accordion/accordion.d.ts +1 -1
  10. package/dist/components/accordion/context.js +2 -2
  11. package/dist/components/accordion/context.js.map +1 -1
  12. package/dist/components/affix/context.js +1 -1
  13. package/dist/components/affix/context.js.map +1 -1
  14. package/dist/components/alert/context.js +1 -1
  15. package/dist/components/alert/context.js.map +1 -1
  16. package/dist/components/anchor/anchor.d.ts +2 -2
  17. package/dist/components/anchor/context.js +1 -1
  18. package/dist/components/anchor/context.js.map +1 -1
  19. package/dist/components/avatar/context.js +1 -1
  20. package/dist/components/avatar/context.js.map +1 -1
  21. package/dist/components/avatar-group/context.js +1 -1
  22. package/dist/components/avatar-group/context.js.map +1 -1
  23. package/dist/components/back-top/back-top.d.ts +2 -2
  24. package/dist/components/back-top/context.js +1 -1
  25. package/dist/components/back-top/context.js.map +1 -1
  26. package/dist/components/badge/badge.d.ts +142 -50
  27. package/dist/components/badge/badge.d.ts.map +1 -1
  28. package/dist/components/badge/badge.js +67 -37
  29. package/dist/components/badge/badge.js.map +1 -1
  30. package/dist/components/badge/context.js +15 -0
  31. package/dist/components/badge/context.js.map +1 -0
  32. package/dist/components/breadcrumb/breadcrumb.d.ts +1 -1
  33. package/dist/components/breadcrumb/context.js +1 -1
  34. package/dist/components/breadcrumb/context.js.map +1 -1
  35. package/dist/components/button-group/button-group.d.ts +1 -1
  36. package/dist/components/calendar/context.js +2 -2
  37. package/dist/components/calendar/context.js.map +1 -1
  38. package/dist/components/card/card.d.ts +1 -1
  39. package/dist/components/card/context.js +1 -1
  40. package/dist/components/card/context.js.map +1 -1
  41. package/dist/components/carousel/context.js +1 -1
  42. package/dist/components/carousel/context.js.map +1 -1
  43. package/dist/components/cascader/cascader.d.ts +4 -4
  44. package/dist/components/cascader/cascader.d.ts.map +1 -1
  45. package/dist/components/cascader/cascader.js +14 -4
  46. package/dist/components/cascader/cascader.js.map +1 -1
  47. package/dist/components/cascader/context.js +2 -2
  48. package/dist/components/cascader/context.js.map +1 -1
  49. package/dist/components/cascader/use-cascader.js +1 -1
  50. package/dist/components/cascader/use-cascader.js.map +1 -1
  51. package/dist/components/checkbox-group/context.js +2 -2
  52. package/dist/components/checkbox-group/context.js.map +1 -1
  53. package/dist/components/clipboard/context.js +1 -1
  54. package/dist/components/clipboard/context.js.map +1 -1
  55. package/dist/components/collapsible/context.js +1 -1
  56. package/dist/components/collapsible/context.js.map +1 -1
  57. package/dist/components/color-picker/color-picker.d.ts +12 -3
  58. package/dist/components/color-picker/color-picker.d.ts.map +1 -1
  59. package/dist/components/color-picker/color-picker.js +7 -1
  60. package/dist/components/color-picker/color-picker.js.map +1 -1
  61. package/dist/components/color-picker/context.js +2 -2
  62. package/dist/components/color-picker/context.js.map +1 -1
  63. package/dist/components/color-picker/use-color-picker.js +1 -1
  64. package/dist/components/color-picker/use-color-picker.js.map +1 -1
  65. package/dist/components/combobox/combobox.d.ts +3 -3
  66. package/dist/components/combobox/combobox.d.ts.map +1 -1
  67. package/dist/components/combobox/combobox.js +10 -4
  68. package/dist/components/combobox/combobox.js.map +1 -1
  69. package/dist/components/combobox/context.js +3 -3
  70. package/dist/components/combobox/context.js.map +1 -1
  71. package/dist/components/combobox/use-combobox.js +1 -1
  72. package/dist/components/combobox/use-combobox.js.map +1 -1
  73. package/dist/components/composer/context.js +1 -1
  74. package/dist/components/composer/context.js.map +1 -1
  75. package/dist/components/context-menu/context-menu.d.ts +4 -4
  76. package/dist/components/context-menu/context-menu.d.ts.map +1 -1
  77. package/dist/components/context-menu/context-menu.js +3 -1
  78. package/dist/components/context-menu/context-menu.js.map +1 -1
  79. package/dist/components/context-menu/context.js +5 -5
  80. package/dist/components/context-menu/context.js.map +1 -1
  81. package/dist/components/context-menu/use-context-menu.js +1 -1
  82. package/dist/components/context-menu/use-context-menu.js.map +1 -1
  83. package/dist/components/date-field/context.js +1 -1
  84. package/dist/components/date-field/context.js.map +1 -1
  85. package/dist/components/date-field/date-field.d.ts +2 -2
  86. package/dist/components/date-picker/context.js +13 -4
  87. package/dist/components/date-picker/context.js.map +1 -1
  88. package/dist/components/date-picker/date-picker.d.ts +80 -44
  89. package/dist/components/date-picker/date-picker.d.ts.map +1 -1
  90. package/dist/components/date-picker/date-picker.js +68 -26
  91. package/dist/components/date-picker/date-picker.js.map +1 -1
  92. package/dist/components/date-picker/use-date-picker.js +1 -1
  93. package/dist/components/date-picker/use-date-picker.js.map +1 -1
  94. package/dist/components/descriptions/context.js +1 -1
  95. package/dist/components/descriptions/context.js.map +1 -1
  96. package/dist/components/dialog/context.js +1 -1
  97. package/dist/components/dialog/context.js.map +1 -1
  98. package/dist/components/dialog/dialog.d.ts +1 -1
  99. package/dist/components/drawer/context.js +1 -1
  100. package/dist/components/drawer/context.js.map +1 -1
  101. package/dist/components/drawer/drawer.d.ts +2 -2
  102. package/dist/components/dynamic-input/context.js +2 -2
  103. package/dist/components/dynamic-input/context.js.map +1 -1
  104. package/dist/components/editable/context.js +1 -1
  105. package/dist/components/editable/context.js.map +1 -1
  106. package/dist/components/empty-state/context.js +1 -1
  107. package/dist/components/empty-state/context.js.map +1 -1
  108. package/dist/components/field/context.d.ts +9 -0
  109. package/dist/components/field/context.d.ts.map +1 -0
  110. package/dist/components/field/context.js +6 -2
  111. package/dist/components/field/context.js.map +1 -1
  112. package/dist/components/field/field.d.ts +26 -2
  113. package/dist/components/field/field.d.ts.map +1 -1
  114. package/dist/components/field/field.js +15 -4
  115. package/dist/components/field/field.js.map +1 -1
  116. package/dist/components/field/use-field-control.d.ts +41 -0
  117. package/dist/components/field/use-field-control.d.ts.map +1 -0
  118. package/dist/components/field/use-field-control.js +77 -0
  119. package/dist/components/field/use-field-control.js.map +1 -0
  120. package/dist/components/fieldset/context.js +1 -1
  121. package/dist/components/fieldset/context.js.map +1 -1
  122. package/dist/components/file-upload/context.js +2 -2
  123. package/dist/components/file-upload/context.js.map +1 -1
  124. package/dist/components/flex/flex.d.ts +9 -0
  125. package/dist/components/flex/flex.d.ts.map +1 -1
  126. package/dist/components/flex/flex.js +4 -0
  127. package/dist/components/flex/flex.js.map +1 -1
  128. package/dist/components/float-button/context.js +1 -1
  129. package/dist/components/float-button/context.js.map +1 -1
  130. package/dist/components/float-button/float-button.d.ts +2 -2
  131. package/dist/components/floating-panel/context.js +1 -1
  132. package/dist/components/floating-panel/context.js.map +1 -1
  133. package/dist/components/floating-panel/floating-panel.d.ts +1 -1
  134. package/dist/components/form/context.js +2 -2
  135. package/dist/components/form/context.js.map +1 -1
  136. package/dist/components/grid/context.js +1 -1
  137. package/dist/components/grid/context.js.map +1 -1
  138. package/dist/components/heatmap/context.js +3 -3
  139. package/dist/components/heatmap/context.js.map +1 -1
  140. package/dist/components/heatmap/heatmap.d.ts +1 -1
  141. package/dist/components/hotkeys/hotkeys.d.ts +3 -1
  142. package/dist/components/hotkeys/hotkeys.d.ts.map +1 -1
  143. package/dist/components/hotkeys/hotkeys.js +7 -25
  144. package/dist/components/hotkeys/hotkeys.js.map +1 -1
  145. package/dist/components/hotkeys/use-hotkeys.d.ts +31 -0
  146. package/dist/components/hotkeys/use-hotkeys.d.ts.map +1 -0
  147. package/dist/components/hotkeys/use-hotkeys.js +60 -0
  148. package/dist/components/hotkeys/use-hotkeys.js.map +1 -0
  149. package/dist/components/hover-card/context.js +1 -1
  150. package/dist/components/hover-card/context.js.map +1 -1
  151. package/dist/components/hover-card/hover-card.d.ts +2 -2
  152. package/dist/components/hover-card/hover-card.d.ts.map +1 -1
  153. package/dist/components/hover-card/hover-card.js +3 -1
  154. package/dist/components/hover-card/hover-card.js.map +1 -1
  155. package/dist/components/hover-card/use-hover-card.js +1 -1
  156. package/dist/components/hover-card/use-hover-card.js.map +1 -1
  157. package/dist/components/icon/icon.d.ts +1 -1
  158. package/dist/components/icon-wrapper/icon-wrapper.d.ts +1 -1
  159. package/dist/components/image/context.js +1 -1
  160. package/dist/components/image/context.js.map +1 -1
  161. package/dist/components/image-cropper/context.js +1 -1
  162. package/dist/components/image-cropper/context.js.map +1 -1
  163. package/dist/components/image-cropper/image-cropper.d.ts +1 -1
  164. package/dist/components/image-viewer/context.js +1 -1
  165. package/dist/components/image-viewer/context.js.map +1 -1
  166. package/dist/components/image-viewer/image-viewer.d.ts +2 -2
  167. package/dist/components/infinite-scroll/context.js +1 -1
  168. package/dist/components/infinite-scroll/context.js.map +1 -1
  169. package/dist/components/infinite-scroll/infinite-scroll.d.ts +1 -1
  170. package/dist/components/json-viewer/json-viewer.d.ts +12 -3
  171. package/dist/components/json-viewer/json-viewer.d.ts.map +1 -1
  172. package/dist/components/json-viewer/json-viewer.js +23 -2
  173. package/dist/components/json-viewer/json-viewer.js.map +1 -1
  174. package/dist/components/layout/context.js +1 -1
  175. package/dist/components/layout/context.js.map +1 -1
  176. package/dist/components/list/context.js +1 -1
  177. package/dist/components/list/context.js.map +1 -1
  178. package/dist/components/list/list.d.ts +1 -1
  179. package/dist/components/listbox/context.js +3 -3
  180. package/dist/components/listbox/context.js.map +1 -1
  181. package/dist/components/loading-bar/context.js +1 -1
  182. package/dist/components/loading-bar/context.js.map +1 -1
  183. package/dist/components/log/context.js +1 -1
  184. package/dist/components/log/context.js.map +1 -1
  185. package/dist/components/marquee/context.js +1 -1
  186. package/dist/components/marquee/context.js.map +1 -1
  187. package/dist/components/mention/context.js +2 -2
  188. package/dist/components/mention/context.js.map +1 -1
  189. package/dist/components/mention/mention.d.ts +2 -2
  190. package/dist/components/mention/mention.d.ts.map +1 -1
  191. package/dist/components/mention/mention.js +10 -4
  192. package/dist/components/mention/mention.js.map +1 -1
  193. package/dist/components/mention/use-mention.js +1 -1
  194. package/dist/components/mention/use-mention.js.map +1 -1
  195. package/dist/components/menu/context.js +4 -4
  196. package/dist/components/menu/context.js.map +1 -1
  197. package/dist/components/menu/menu.d.ts +3 -3
  198. package/dist/components/menu/menu.d.ts.map +1 -1
  199. package/dist/components/menu/menu.js +3 -1
  200. package/dist/components/menu/menu.js.map +1 -1
  201. package/dist/components/menu/use-menu.js +1 -1
  202. package/dist/components/menu/use-menu.js.map +1 -1
  203. package/dist/components/menubar/context.js +6 -6
  204. package/dist/components/menubar/context.js.map +1 -1
  205. package/dist/components/menubar/menubar.d.ts +2 -2
  206. package/dist/components/menubar/menubar.js.map +1 -1
  207. package/dist/components/navigation-menu/context.js +1 -1
  208. package/dist/components/navigation-menu/context.js.map +1 -1
  209. package/dist/components/navigation-menu/navigation-menu.d.ts +1 -1
  210. package/dist/components/notification/context.d.ts +23 -0
  211. package/dist/components/notification/context.d.ts.map +1 -0
  212. package/dist/components/notification/context.js +28 -0
  213. package/dist/components/notification/context.js.map +1 -0
  214. package/dist/components/notification/notification.d.ts +249 -0
  215. package/dist/components/notification/notification.d.ts.map +1 -0
  216. package/dist/components/notification/notification.js +179 -0
  217. package/dist/components/notification/notification.js.map +1 -0
  218. package/dist/components/notification/use-notification.d.ts +14 -0
  219. package/dist/components/notification/use-notification.d.ts.map +1 -0
  220. package/dist/components/notification/use-notification.js +42 -0
  221. package/dist/components/notification/use-notification.js.map +1 -0
  222. package/dist/components/number-animation/number-animation.d.ts +1 -1
  223. package/dist/components/number-field/context.js +1 -1
  224. package/dist/components/number-field/context.js.map +1 -1
  225. package/dist/components/number-field/number-field.d.ts +3 -3
  226. package/dist/components/number-field/number-field.d.ts.map +1 -1
  227. package/dist/components/number-field/number-field.js +7 -1
  228. package/dist/components/number-field/number-field.js.map +1 -1
  229. package/dist/components/page-header/context.js +1 -1
  230. package/dist/components/page-header/context.js.map +1 -1
  231. package/dist/components/pagination/context.js +1 -1
  232. package/dist/components/pagination/context.js.map +1 -1
  233. package/dist/components/pagination/pagination.d.ts +60 -6
  234. package/dist/components/pagination/pagination.d.ts.map +1 -1
  235. package/dist/components/pagination/pagination.js +85 -5
  236. package/dist/components/pagination/pagination.js.map +1 -1
  237. package/dist/components/pagination/use-pagination.d.ts +12 -2
  238. package/dist/components/pagination/use-pagination.d.ts.map +1 -1
  239. package/dist/components/pagination/use-pagination.js +50 -5
  240. package/dist/components/pagination/use-pagination.js.map +1 -1
  241. package/dist/components/password-input/context.js +1 -1
  242. package/dist/components/password-input/context.js.map +1 -1
  243. package/dist/components/password-input/password-input.d.ts +2 -2
  244. package/dist/components/password-input/password-input.d.ts.map +1 -1
  245. package/dist/components/password-input/password-input.js +7 -1
  246. package/dist/components/password-input/password-input.js.map +1 -1
  247. package/dist/components/pin-input/context.js +1 -1
  248. package/dist/components/pin-input/context.js.map +1 -1
  249. package/dist/components/pin-input/pin-input.d.ts +1 -1
  250. package/dist/components/popconfirm/context.js +1 -1
  251. package/dist/components/popconfirm/context.js.map +1 -1
  252. package/dist/components/popconfirm/popconfirm.d.ts +1 -1
  253. package/dist/components/popover/context.js +1 -1
  254. package/dist/components/popover/context.js.map +1 -1
  255. package/dist/components/popover/popover.d.ts +2 -2
  256. package/dist/components/popover/popover.d.ts.map +1 -1
  257. package/dist/components/popover/popover.js +3 -1
  258. package/dist/components/popover/popover.js.map +1 -1
  259. package/dist/components/popover/use-popover.js +1 -1
  260. package/dist/components/popover/use-popover.js.map +1 -1
  261. package/dist/components/popselect/context.js +2 -2
  262. package/dist/components/popselect/context.js.map +1 -1
  263. package/dist/components/popselect/popselect.d.ts +3 -3
  264. package/dist/components/popselect/popselect.d.ts.map +1 -1
  265. package/dist/components/popselect/popselect.js +3 -1
  266. package/dist/components/popselect/popselect.js.map +1 -1
  267. package/dist/components/popselect/use-popselect.js +1 -1
  268. package/dist/components/popselect/use-popselect.js.map +1 -1
  269. package/dist/components/progress/progress.d.ts +1 -1
  270. package/dist/components/qr-code/context.js +1 -1
  271. package/dist/components/qr-code/context.js.map +1 -1
  272. package/dist/components/radio-group/context.js +2 -2
  273. package/dist/components/radio-group/context.js.map +1 -1
  274. package/dist/components/radio-group/radio-group.d.ts +1 -1
  275. package/dist/components/rating/context.js +1 -1
  276. package/dist/components/rating/context.js.map +1 -1
  277. package/dist/components/rating/rating.d.ts +2 -2
  278. package/dist/components/result/context.js +1 -1
  279. package/dist/components/result/context.js.map +1 -1
  280. package/dist/components/scroll-area/context.js +2 -2
  281. package/dist/components/scroll-area/context.js.map +1 -1
  282. package/dist/components/scroll-area/scroll-area.d.ts +1 -1
  283. package/dist/components/scrollbar/context.js +1 -1
  284. package/dist/components/scrollbar/context.js.map +1 -1
  285. package/dist/components/scrollbar/scrollbar.d.ts +1 -1
  286. package/dist/components/segmented/context.js +2 -2
  287. package/dist/components/segmented/context.js.map +1 -1
  288. package/dist/components/segmented/segmented.d.ts +1 -1
  289. package/dist/components/select/context.js +3 -3
  290. package/dist/components/select/context.js.map +1 -1
  291. package/dist/components/select/select.d.ts +3 -3
  292. package/dist/components/select/select.d.ts.map +1 -1
  293. package/dist/components/select/select.js +7 -3
  294. package/dist/components/select/select.js.map +1 -1
  295. package/dist/components/side-nav/context.js +2 -2
  296. package/dist/components/side-nav/context.js.map +1 -1
  297. package/dist/components/side-nav/side-nav.d.ts +1 -1
  298. package/dist/components/signature-pad/context.js +1 -1
  299. package/dist/components/signature-pad/context.js.map +1 -1
  300. package/dist/components/skeleton/context.js +1 -1
  301. package/dist/components/skeleton/context.js.map +1 -1
  302. package/dist/components/slider/context.js +2 -2
  303. package/dist/components/slider/context.js.map +1 -1
  304. package/dist/components/slider/slider.d.ts +1 -1
  305. package/dist/components/space/context.js +1 -1
  306. package/dist/components/space/context.js.map +1 -1
  307. package/dist/components/space/space.d.ts +9 -0
  308. package/dist/components/space/space.d.ts.map +1 -1
  309. package/dist/components/space/space.js +4 -0
  310. package/dist/components/space/space.js.map +1 -1
  311. package/dist/components/spinner/context.js +1 -1
  312. package/dist/components/spinner/context.js.map +1 -1
  313. package/dist/components/spinner/spinner.d.ts +1 -1
  314. package/dist/components/splitter/context.js +1 -1
  315. package/dist/components/splitter/context.js.map +1 -1
  316. package/dist/components/statistic/context.js +1 -1
  317. package/dist/components/statistic/context.js.map +1 -1
  318. package/dist/components/statistic/statistic.d.ts +1 -1
  319. package/dist/components/steps/context.js +2 -2
  320. package/dist/components/steps/context.js.map +1 -1
  321. package/dist/components/steps/steps.d.ts +2 -2
  322. package/dist/components/table/context.js +4 -4
  323. package/dist/components/table/context.js.map +1 -1
  324. package/dist/components/table/table.d.ts +62 -3
  325. package/dist/components/table/table.d.ts.map +1 -1
  326. package/dist/components/table/table.js +37 -1
  327. package/dist/components/table/table.js.map +1 -1
  328. package/dist/components/table/use-table.d.ts +1 -1
  329. package/dist/components/table/use-table.d.ts.map +1 -1
  330. package/dist/components/table/use-table.js +3 -2
  331. package/dist/components/table/use-table.js.map +1 -1
  332. package/dist/components/tabs/context.js +1 -1
  333. package/dist/components/tabs/context.js.map +1 -1
  334. package/dist/components/tabs/tabs.d.ts +1 -1
  335. package/dist/components/tag/context.js +1 -1
  336. package/dist/components/tag/context.js.map +1 -1
  337. package/dist/components/tag/use-tag.js +14 -2
  338. package/dist/components/tag/use-tag.js.map +1 -1
  339. package/dist/components/tags-input/context.js +2 -2
  340. package/dist/components/tags-input/context.js.map +1 -1
  341. package/dist/components/tags-input/tags-input.d.ts +3 -3
  342. package/dist/components/tags-input/tags-input.d.ts.map +1 -1
  343. package/dist/components/tags-input/tags-input.js +7 -1
  344. package/dist/components/tags-input/tags-input.js.map +1 -1
  345. package/dist/components/text-field/context.js +1 -1
  346. package/dist/components/text-field/context.js.map +1 -1
  347. package/dist/components/text-field/text-field.d.ts +1 -1
  348. package/dist/components/text-field/text-field.d.ts.map +1 -1
  349. package/dist/components/text-field/text-field.js +7 -3
  350. package/dist/components/text-field/text-field.js.map +1 -1
  351. package/dist/components/thread/context.d.ts +7 -0
  352. package/dist/components/thread/context.d.ts.map +1 -0
  353. package/dist/components/thread/context.js +1 -1
  354. package/dist/components/thread/context.js.map +1 -1
  355. package/dist/components/time-field/context.js +1 -1
  356. package/dist/components/time-field/context.js.map +1 -1
  357. package/dist/components/time-field/time-field.d.ts +2 -2
  358. package/dist/components/time-picker/context.js +2 -2
  359. package/dist/components/time-picker/context.js.map +1 -1
  360. package/dist/components/time-picker/time-picker.d.ts +5 -5
  361. package/dist/components/time-picker/time-picker.d.ts.map +1 -1
  362. package/dist/components/time-picker/time-picker.js +10 -1
  363. package/dist/components/time-picker/time-picker.js.map +1 -1
  364. package/dist/components/time-picker/use-time-picker.d.ts +1 -0
  365. package/dist/components/time-picker/use-time-picker.d.ts.map +1 -1
  366. package/dist/components/time-picker/use-time-picker.js +3 -0
  367. package/dist/components/time-picker/use-time-picker.js.map +1 -1
  368. package/dist/components/timeline/context.js +2 -2
  369. package/dist/components/timeline/context.js.map +1 -1
  370. package/dist/components/timeline/timeline.d.ts +1 -1
  371. package/dist/components/timer/context.js +1 -1
  372. package/dist/components/timer/context.js.map +1 -1
  373. package/dist/components/toast/context.js +1 -1
  374. package/dist/components/toast/context.js.map +1 -1
  375. package/dist/components/toast/toast.d.ts +3 -15
  376. package/dist/components/toast/toast.d.ts.map +1 -1
  377. package/dist/components/toast/toast.js +1 -12
  378. package/dist/components/toast/toast.js.map +1 -1
  379. package/dist/components/toast/use-toast.d.ts.map +1 -1
  380. package/dist/components/toast/use-toast.js +1 -7
  381. package/dist/components/toast/use-toast.js.map +1 -1
  382. package/dist/components/toggle-group/context.js +1 -1
  383. package/dist/components/toggle-group/context.js.map +1 -1
  384. package/dist/components/toggle-group/toggle-group.d.ts +10 -1
  385. package/dist/components/toggle-group/toggle-group.d.ts.map +1 -1
  386. package/dist/components/toggle-group/toggle-group.js +4 -0
  387. package/dist/components/toggle-group/toggle-group.js.map +1 -1
  388. package/dist/components/toolbar/context.js +1 -1
  389. package/dist/components/toolbar/context.js.map +1 -1
  390. package/dist/components/toolbar/toolbar.d.ts +1 -1
  391. package/dist/components/tooltip/context.js +1 -1
  392. package/dist/components/tooltip/context.js.map +1 -1
  393. package/dist/components/tooltip/tooltip.d.ts +2 -2
  394. package/dist/components/tour/context.js +1 -1
  395. package/dist/components/tour/context.js.map +1 -1
  396. package/dist/components/tour/tour.d.ts +2 -2
  397. package/dist/components/transfer/context.js +3 -3
  398. package/dist/components/transfer/context.js.map +1 -1
  399. package/dist/components/tree/context.js +2 -2
  400. package/dist/components/tree/context.js.map +1 -1
  401. package/dist/components/tree/tree.d.ts +20 -0
  402. package/dist/components/tree/tree.d.ts.map +1 -1
  403. package/dist/components/tree/tree.js +9 -0
  404. package/dist/components/tree/tree.js.map +1 -1
  405. package/dist/components/tree-select/context.js +2 -2
  406. package/dist/components/tree-select/context.js.map +1 -1
  407. package/dist/components/tree-select/tree-select.d.ts +3 -3
  408. package/dist/components/tree-select/tree-select.d.ts.map +1 -1
  409. package/dist/components/tree-select/tree-select.js +14 -4
  410. package/dist/components/tree-select/tree-select.js.map +1 -1
  411. package/dist/components/tree-select/use-tree-select.js +1 -1
  412. package/dist/components/tree-select/use-tree-select.js.map +1 -1
  413. package/dist/components/typography/context.js +1 -1
  414. package/dist/components/typography/context.js.map +1 -1
  415. package/dist/components/virtualizer/context.js +1 -1
  416. package/dist/components/virtualizer/context.js.map +1 -1
  417. package/dist/components/watermark/context.js +1 -1
  418. package/dist/components/watermark/context.js.map +1 -1
  419. package/dist/config/config.js +1 -1
  420. package/dist/config/config.js.map +1 -1
  421. package/dist/index.d.ts +16 -9
  422. package/dist/index.js +15 -8
  423. package/dist/package.js +1 -1
  424. package/dist/runtime/use-scrollbars.js +66 -0
  425. package/dist/runtime/use-scrollbars.js.map +1 -0
  426. package/dist/services/dialog-service.d.ts +33 -8
  427. package/dist/services/dialog-service.d.ts.map +1 -1
  428. package/dist/services/dialog-service.js +44 -20
  429. package/dist/services/dialog-service.js.map +1 -1
  430. package/dist/services/glyph.js +41 -1
  431. package/dist/services/glyph.js.map +1 -1
  432. package/dist/services/loading-bar-service.d.ts +46 -0
  433. package/dist/services/loading-bar-service.d.ts.map +1 -0
  434. package/dist/services/loading-bar-service.js +70 -0
  435. package/dist/services/loading-bar-service.js.map +1 -0
  436. package/dist/services/mount-host.js +35 -0
  437. package/dist/services/mount-host.js.map +1 -0
  438. package/dist/services/notification-service.d.ts +46 -0
  439. package/dist/services/notification-service.d.ts.map +1 -0
  440. package/dist/services/notification-service.js +91 -0
  441. package/dist/services/notification-service.js.map +1 -0
  442. package/dist/services/service-config.js +16 -0
  443. package/dist/services/service-config.js.map +1 -0
  444. package/dist/services/toast-service.d.ts +20 -12
  445. package/dist/services/toast-service.d.ts.map +1 -1
  446. package/dist/services/toast-service.js +103 -50
  447. package/dist/services/toast-service.js.map +1 -1
  448. package/package.json +18 -14
  449. package/dist/components/toaster/context.js +0 -19
  450. package/dist/components/toaster/context.js.map +0 -1
  451. package/dist/components/toaster/toaster.d.ts +0 -135
  452. package/dist/components/toaster/toaster.d.ts.map +0 -1
  453. package/dist/components/toaster/toaster.js +0 -91
  454. package/dist/components/toaster/toaster.js.map +0 -1
  455. package/dist/components/toaster/use-toaster.d.ts +0 -15
  456. package/dist/components/toaster/use-toaster.d.ts.map +0 -1
  457. package/dist/components/toaster/use-toaster.js +0 -23
  458. package/dist/components/toaster/use-toaster.js.map +0 -1
@@ -56,11 +56,35 @@ declare const XhFieldLabel: import("vue").DefineComponent<{}, () => VNode<import
56
56
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
57
57
  /** 默认插槽的载荷:控件节点该挂的那组属性,作者把它交给自己渲染的控件。 */
58
58
  type FieldControlSlotProps = Record<string, unknown>;
59
- declare const XhFieldControl: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
59
+ declare const XhFieldControl: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
60
+ /**
61
+ * 把接线属性合到唯一的子节点上,缺省开。
62
+ *
63
+ * 子节点是薄封装(根不是可聚焦元素)时关掉它:属性只经插槽载荷交出去,
64
+ * 由封装内部调 useFieldControl 绑到真控件上。
65
+ */
66
+ asChild: {
67
+ type: BooleanConstructor;
68
+ default: boolean;
69
+ };
70
+ }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
60
71
  [key: string]: any;
61
72
  }> | VNode<import("vue").RendererNode, import("vue").RendererElement, {
62
73
  [key: string]: any;
63
- }>[], {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, SlotsType<{
74
+ }>[], {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
75
+ /**
76
+ * 把接线属性合到唯一的子节点上,缺省开。
77
+ *
78
+ * 子节点是薄封装(根不是可聚焦元素)时关掉它:属性只经插槽载荷交出去,
79
+ * 由封装内部调 useFieldControl 绑到真控件上。
80
+ */
81
+ asChild: {
82
+ type: BooleanConstructor;
83
+ default: boolean;
84
+ };
85
+ }>> & Readonly<{}>, {
86
+ asChild: boolean;
87
+ }, SlotsType<{
64
88
  default?: (props: FieldControlSlotProps) => VNode[];
65
89
  }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
66
90
  declare const XhFieldDescription: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
@@ -1 +1 @@
1
- {"version":3,"file":"field.d.ts","names":[],"sources":["../../../src/components/field/field.ts"],"mappings":";;cAaa,2BAAW,8BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAoCtB;cAEW,4BAAY,0BAAA,oBAAA,4BAAA;;8BAMvB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;KAGU,wBAAwB;cAYvB,8BAAc,0BAAA,oBAAA,4BAAA;;;;;EAGb,WAAC,OAAO,0BAA0B;kCAiB9C;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAM7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,gCAAgB,0BAAA,oBAAA,4BAAA;;8BAe3B,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
1
+ {"version":3,"file":"field.d.ts","names":[],"sources":["../../../src/components/field/field.ts"],"mappings":";;cAaa,2BAAW,8BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAoCtB;cAEW,4BAAY,0BAAA,oBAAA,4BAAA;;8BAMvB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;KAGU,wBAAwB;cAYvB,8BAAc,8BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYb,WAAC,OAAO,0BAA0B;kCAiB9C;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAM7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,gCAAgB,0BAAA,oBAAA,4BAAA;;8BAe3B,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
@@ -1,6 +1,6 @@
1
+ import { provideField, useFieldContext } from "./context.js";
1
2
  import { carriesOwnAnatomy } from "../../runtime/as-child.js";
2
3
  import { useOptionalFormContext, useOptionalFormField } from "../form/context.js";
3
- import { provideField, useFieldContext } from "./context.js";
4
4
  import { useField } from "./use-field.js";
5
5
  import { Comment, Text, cloneVNode, defineComponent, h } from "vue";
6
6
  //#region src/components/field/field.ts
@@ -71,14 +71,25 @@ function wiringOnly(controlProps) {
71
71
  }
72
72
  const XhFieldControl = defineComponent({
73
73
  name: "XhFieldControl",
74
+ props: {
75
+ /**
76
+ * 把接线属性合到唯一的子节点上,缺省开。
77
+ *
78
+ * 子节点是薄封装(根不是可聚焦元素)时关掉它:属性只经插槽载荷交出去,
79
+ * 由封装内部调 useFieldControl 绑到真控件上。
80
+ */
81
+ asChild: {
82
+ type: Boolean,
83
+ default: true
84
+ } },
74
85
  slots: Object,
75
- setup(_, { slots }) {
86
+ setup(props, { slots }) {
76
87
  const ctx = useFieldContext();
77
88
  return () => {
78
89
  const controlProps = ctx.api.value.getControlProps();
79
90
  const children = slots.default?.(controlProps) ?? [];
80
91
  const nodes = attributable(children);
81
- if (nodes.length !== 1) return children;
92
+ if (!props.asChild || nodes.length !== 1) return children;
82
93
  const node = nodes[0];
83
94
  return cloneVNode(node, carriesOwnAnatomy(node) ? wiringOnly(controlProps) : controlProps);
84
95
  };
@@ -105,6 +116,6 @@ const XhFieldErrorText = defineComponent({
105
116
  }
106
117
  });
107
118
  //#endregion
108
- export { XhFieldControl, XhFieldDescription, XhFieldErrorText, XhFieldLabel, XhFieldRoot };
119
+ export { XhFieldControl, XhFieldDescription, XhFieldErrorText, XhFieldLabel, XhFieldRoot, wiringOnly };
109
120
 
110
121
  //# sourceMappingURL=field.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"field.js","names":[],"sources":["../../../src/components/field/field.ts"],"sourcesContent":["import type { FieldProps } from '@xihan-ui/headless'\nimport type { SlotsType, VNode } from 'vue'\nimport { cloneVNode, Comment, defineComponent, h, Text } from 'vue'\nimport { carriesOwnAnatomy } from '../../runtime/as-child'\nimport { useOptionalFormContext, useOptionalFormField } from '../form/context'\nimport { provideField, useFieldContext } from './context'\nimport { useField } from './use-field'\n\n/** 滤掉注释与纯文本节点,只留能挂属性的节点。 */\nfunction attributable(nodes: readonly VNode[]): VNode[] {\n return nodes.filter(node => node.type !== Comment && node.type !== Text)\n}\n\nexport const XhFieldRoot = defineComponent({\n name: 'XhFieldRoot',\n // 三个布尔缺省 undefined:在 XhFormFieldGroup 里没写就从表单上下文自取,写了以写的为准\n props: {\n invalid: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n // 控件节点的 id,不占用根节点自己的 DOM id\n controlId: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n const form = useOptionalFormContext()\n const handle = useOptionalFormField()\n // getter 透传保住响应性:props 与表单 api 谁变都会带动 connect 重算\n const merged: FieldProps = {\n get invalid() {\n return props.invalid ?? (form && handle ? form.api.value.isFieldInvalid(handle.name()) : undefined)\n },\n get required() {\n return props.required ?? (form && handle ? form.api.value.isFieldRequired(handle.name()) : undefined)\n },\n get disabled() {\n return props.disabled ?? (form && handle ? form.api.value.disabled : undefined)\n },\n get readOnly() {\n return props.readOnly ?? (form && handle ? form.api.value.readOnly : undefined)\n },\n get controlId() {\n return props.controlId\n },\n }\n const ctx = useField(merged)\n provideField(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhFieldLabel = defineComponent({\n name: 'XhFieldLabel',\n setup(_, { slots }) {\n const ctx = useFieldContext()\n return () => h('label', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 默认插槽的载荷:控件节点该挂的那组属性,作者把它交给自己渲染的控件。 */\nexport type FieldControlSlotProps = Record<string, unknown>\n\n/** 去掉角色标记,只留接线属性(id 与 aria-*)。 */\nfunction wiringOnly(controlProps: Record<string, unknown>): Record<string, unknown> {\n const rest: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(controlProps)) {\n if (key !== 'data-scope' && key !== 'data-part')\n rest[key] = value\n }\n return rest\n}\n\nexport const XhFieldControl = defineComponent({\n name: 'XhFieldControl',\n slots: Object as SlotsType<{\n default?: (props: FieldControlSlotProps) => VNode[]\n }>,\n setup(_, { slots }) {\n const ctx = useFieldContext()\n return () => {\n const controlProps = ctx.api.value.getControlProps() as Record<string, unknown>\n // control props 经 slot props 交给作者,控件节点由作者渲染\n const children = slots.default?.(controlProps) ?? []\n const nodes = attributable(children)\n // 多个节点视为作者已用 slot props 自行接线\n if (nodes.length !== 1)\n return children\n const node = nodes[0]!\n // 单个节点合并属性;它自带角色标记时不覆盖,只落接线属性\n return cloneVNode(node, carriesOwnAnatomy(node) ? wiringOnly(controlProps) : controlProps)\n }\n },\n})\n\nexport const XhFieldDescription = defineComponent({\n name: 'XhFieldDescription',\n setup(_, { slots }) {\n const ctx = useFieldContext()\n return () => h('p', ctx.api.value.getDescriptionProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhFieldErrorText = defineComponent({\n name: 'XhFieldErrorText',\n setup(_, { slots }) {\n const ctx = useFieldContext()\n const form = useOptionalFormContext()\n const handle = useOptionalFormField()\n // 节点常挂,靠 hidden 显隐;插槽没给内容时在表单里自取该字段的错误文案\n return () => {\n const kids = slots.default?.()\n const auto = (!kids || kids.length === 0) && form && handle\n ? form.api.value.getFieldError(handle.name())\n : undefined\n return h('p', ctx.api.value.getErrorTextProps() as Record<string, unknown>, kids?.length ? kids : auto)\n }\n },\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"field.js","names":[],"sources":["../../../src/components/field/field.ts"],"sourcesContent":["import type { FieldProps } from '@xihan-ui/headless'\nimport type { SlotsType, VNode } from 'vue'\nimport { cloneVNode, Comment, defineComponent, h, Text } from 'vue'\nimport { carriesOwnAnatomy } from '../../runtime/as-child'\nimport { useOptionalFormContext, useOptionalFormField } from '../form/context'\nimport { provideField, useFieldContext } from './context'\nimport { useField } from './use-field'\n\n/** 滤掉注释与纯文本节点,只留能挂属性的节点。 */\nfunction attributable(nodes: readonly VNode[]): VNode[] {\n return nodes.filter(node => node.type !== Comment && node.type !== Text)\n}\n\nexport const XhFieldRoot = defineComponent({\n name: 'XhFieldRoot',\n // 三个布尔缺省 undefined:在 XhFormFieldGroup 里没写就从表单上下文自取,写了以写的为准\n props: {\n invalid: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n // 控件节点的 id,不占用根节点自己的 DOM id\n controlId: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n const form = useOptionalFormContext()\n const handle = useOptionalFormField()\n // getter 透传保住响应性:props 与表单 api 谁变都会带动 connect 重算\n const merged: FieldProps = {\n get invalid() {\n return props.invalid ?? (form && handle ? form.api.value.isFieldInvalid(handle.name()) : undefined)\n },\n get required() {\n return props.required ?? (form && handle ? form.api.value.isFieldRequired(handle.name()) : undefined)\n },\n get disabled() {\n return props.disabled ?? (form && handle ? form.api.value.disabled : undefined)\n },\n get readOnly() {\n return props.readOnly ?? (form && handle ? form.api.value.readOnly : undefined)\n },\n get controlId() {\n return props.controlId\n },\n }\n const ctx = useField(merged)\n provideField(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhFieldLabel = defineComponent({\n name: 'XhFieldLabel',\n setup(_, { slots }) {\n const ctx = useFieldContext()\n return () => h('label', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 默认插槽的载荷:控件节点该挂的那组属性,作者把它交给自己渲染的控件。 */\nexport type FieldControlSlotProps = Record<string, unknown>\n\n/** 去掉角色标记,只留接线属性(id 与 aria-*)。 */\nexport function wiringOnly(controlProps: Record<string, unknown>): Record<string, unknown> {\n const rest: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(controlProps)) {\n if (key !== 'data-scope' && key !== 'data-part')\n rest[key] = value\n }\n return rest\n}\n\nexport const XhFieldControl = defineComponent({\n name: 'XhFieldControl',\n props: {\n /**\n * 把接线属性合到唯一的子节点上,缺省开。\n *\n * 子节点是薄封装(根不是可聚焦元素)时关掉它:属性只经插槽载荷交出去,\n * 由封装内部调 useFieldControl 绑到真控件上。\n */\n asChild: { type: Boolean, default: true },\n },\n slots: Object as SlotsType<{\n default?: (props: FieldControlSlotProps) => VNode[]\n }>,\n setup(props, { slots }) {\n const ctx = useFieldContext()\n return () => {\n const controlProps = ctx.api.value.getControlProps() as Record<string, unknown>\n // control props 经 slot props 交给作者,控件节点由作者渲染\n const children = slots.default?.(controlProps) ?? []\n const nodes = attributable(children)\n // 关了 asChild、或不止一个节点:都视为作者已用 slot props 自行接线\n if (!props.asChild || nodes.length !== 1)\n return children\n const node = nodes[0]!\n // 单个节点合并属性;它自带角色标记时不覆盖,只落接线属性\n return cloneVNode(node, carriesOwnAnatomy(node) ? wiringOnly(controlProps) : controlProps)\n }\n },\n})\n\nexport const XhFieldDescription = defineComponent({\n name: 'XhFieldDescription',\n setup(_, { slots }) {\n const ctx = useFieldContext()\n return () => h('p', ctx.api.value.getDescriptionProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhFieldErrorText = defineComponent({\n name: 'XhFieldErrorText',\n setup(_, { slots }) {\n const ctx = useFieldContext()\n const form = useOptionalFormContext()\n const handle = useOptionalFormField()\n // 节点常挂,靠 hidden 显隐;插槽没给内容时在表单里自取该字段的错误文案\n return () => {\n const kids = slots.default?.()\n const auto = (!kids || kids.length === 0) && form && handle\n ? form.api.value.getFieldError(handle.name())\n : undefined\n return h('p', ctx.api.value.getErrorTextProps() as Record<string, unknown>, kids?.length ? kids : auto)\n }\n },\n})\n"],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { ComputedRef } from "vue";
2
+ //#region src/components/field/use-field-control.d.ts
3
+ /**
4
+ * 在薄封装内部取字段的控件接线属性(id 与 aria-*),把它们绑到真正可聚焦的那个节点上。
5
+ *
6
+ * XhFieldControl 默认把属性合到它唯一的子节点上,而子节点是组件时合的是组件根——
7
+ * 封装的根往往是个 div,label 的 for 指过去就聚不到焦(for 只对可标注元素生效),
8
+ * 而且这种失效不报错。封装内部调一次本组合式,接线就落在该落的节点上。
9
+ *
10
+ * 外层要写 `<XhFieldControl :as-child="false">`,否则属性会被合两遍。
11
+ * 不在字段里时返回空对象,封装照样能单独用。
12
+ */
13
+ declare function useFieldControl(): ComputedRef<Record<string, unknown>>;
14
+ /**
15
+ * 只取字段的「状态接线」(说明、校验、只读),不含 id 与名字。
16
+ *
17
+ * 给库自己的薄封装用:XhFieldControl 默认把整套属性合到封装根上,id 与
18
+ * aria-labelledby 落在那里是对的(label 的 for 得指得到一个真节点);但
19
+ * aria-describedby 与 aria-invalid 落在根上就等于没落——焦点进的是里面那个
20
+ * input / button,读屏只念焦点所在节点的描述,说明与错误文本因此播报不出来。
21
+ * 封装把这几条补到真控件上,两边不冲突:id 只有一份,描述有两份不影响播报。
22
+ *
23
+ * 作者自己写封装时用上面那个 useFieldControl(配 `:as-child="false"`),
24
+ * 那条路整套属性都落到真控件上。
25
+ */
26
+ declare function useFieldStateWiring(): ComputedRef<Record<string, unknown>>;
27
+ /**
28
+ * 把字段标签的 id 并进这份属性里的名字链,供库自己的薄封装包在渲染属性外面。
29
+ *
30
+ * 复合控件的可聚焦部件自带 aria-labelledby,指的是它自己的 label 部件。套进字段时
31
+ * 作者用的是字段的标签、组件那个 label 部件根本没渲染,这条引用于是指向一个不存在的
32
+ * 节点——按 accname 规则悬空 IDREF 直接跳过,而名字也回退不到 label 的 for:for 指的
33
+ * 是封装根那个 div,只对可标注元素生效。结果是焦点所在的那个控件一个名字都没有。
34
+ *
35
+ * 字段的标签排在最前,控件自己的那截(值文本这类)跟在后面,两边都念得到。
36
+ * 不在字段里时属性原样返回。
37
+ */
38
+ declare function useFieldLabelWiring(): ComputedRef<(props: Record<string, unknown>) => Record<string, unknown>>;
39
+ //#endregion
40
+ export { useFieldControl, useFieldLabelWiring, useFieldStateWiring };
41
+ //# sourceMappingURL=use-field-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-field-control.d.ts","names":[],"sources":["../../../src/components/field/use-field-control.ts"],"mappings":";;;;;;;;;;;;iBAegB,mBAAmB,YAAY;;;;;;;;;;;;;iBAqB/B,uBAAuB,YAAY;;;;;;;;;;;;iBA0BnC,uBAAuB,aAAa,OAAO,4BAA4B"}
@@ -0,0 +1,77 @@
1
+ import { useOptionalFieldContext } from "./context.js";
2
+ import { wiringOnly } from "./field.js";
3
+ import { computed } from "vue";
4
+ //#region src/components/field/use-field-control.ts
5
+ /**
6
+ * 在薄封装内部取字段的控件接线属性(id 与 aria-*),把它们绑到真正可聚焦的那个节点上。
7
+ *
8
+ * XhFieldControl 默认把属性合到它唯一的子节点上,而子节点是组件时合的是组件根——
9
+ * 封装的根往往是个 div,label 的 for 指过去就聚不到焦(for 只对可标注元素生效),
10
+ * 而且这种失效不报错。封装内部调一次本组合式,接线就落在该落的节点上。
11
+ *
12
+ * 外层要写 `<XhFieldControl :as-child="false">`,否则属性会被合两遍。
13
+ * 不在字段里时返回空对象,封装照样能单独用。
14
+ */
15
+ function useFieldControl() {
16
+ const ctx = useOptionalFieldContext();
17
+ return computed(() => {
18
+ if (!ctx) return {};
19
+ return wiringOnly(ctx.api.value.getControlProps());
20
+ });
21
+ }
22
+ /**
23
+ * 只取字段的「状态接线」(说明、校验、只读),不含 id 与名字。
24
+ *
25
+ * 给库自己的薄封装用:XhFieldControl 默认把整套属性合到封装根上,id 与
26
+ * aria-labelledby 落在那里是对的(label 的 for 得指得到一个真节点);但
27
+ * aria-describedby 与 aria-invalid 落在根上就等于没落——焦点进的是里面那个
28
+ * input / button,读屏只念焦点所在节点的描述,说明与错误文本因此播报不出来。
29
+ * 封装把这几条补到真控件上,两边不冲突:id 只有一份,描述有两份不影响播报。
30
+ *
31
+ * 作者自己写封装时用上面那个 useFieldControl(配 `:as-child="false"`),
32
+ * 那条路整套属性都落到真控件上。
33
+ */
34
+ function useFieldStateWiring() {
35
+ const ctx = useOptionalFieldContext();
36
+ return computed(() => {
37
+ if (!ctx) return {};
38
+ const control = ctx.api.value.getControlProps();
39
+ const wiring = {};
40
+ for (const key of [
41
+ "aria-describedby",
42
+ "aria-invalid",
43
+ "aria-required",
44
+ "aria-readonly"
45
+ ]) if (control[key] !== void 0) wiring[key] = control[key];
46
+ return wiring;
47
+ });
48
+ }
49
+ /**
50
+ * 把字段标签的 id 并进这份属性里的名字链,供库自己的薄封装包在渲染属性外面。
51
+ *
52
+ * 复合控件的可聚焦部件自带 aria-labelledby,指的是它自己的 label 部件。套进字段时
53
+ * 作者用的是字段的标签、组件那个 label 部件根本没渲染,这条引用于是指向一个不存在的
54
+ * 节点——按 accname 规则悬空 IDREF 直接跳过,而名字也回退不到 label 的 for:for 指的
55
+ * 是封装根那个 div,只对可标注元素生效。结果是焦点所在的那个控件一个名字都没有。
56
+ *
57
+ * 字段的标签排在最前,控件自己的那截(值文本这类)跟在后面,两边都念得到。
58
+ * 不在字段里时属性原样返回。
59
+ */
60
+ function useFieldLabelWiring() {
61
+ const ctx = useOptionalFieldContext();
62
+ return computed(() => {
63
+ const labelId = ctx?.api.value.labelId;
64
+ return (props) => {
65
+ if (!labelId) return props;
66
+ const own = props["aria-labelledby"];
67
+ return {
68
+ ...props,
69
+ "aria-labelledby": typeof own === "string" && own ? `${labelId} ${own}` : labelId
70
+ };
71
+ };
72
+ });
73
+ }
74
+ //#endregion
75
+ export { useFieldControl, useFieldLabelWiring, useFieldStateWiring };
76
+
77
+ //# sourceMappingURL=use-field-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-field-control.js","names":[],"sources":["../../../src/components/field/use-field-control.ts"],"sourcesContent":["import type { ComputedRef } from 'vue'\nimport { computed } from 'vue'\nimport { useOptionalFieldContext } from './context'\nimport { wiringOnly } from './field'\n\n/**\n * 在薄封装内部取字段的控件接线属性(id 与 aria-*),把它们绑到真正可聚焦的那个节点上。\n *\n * XhFieldControl 默认把属性合到它唯一的子节点上,而子节点是组件时合的是组件根——\n * 封装的根往往是个 div,label 的 for 指过去就聚不到焦(for 只对可标注元素生效),\n * 而且这种失效不报错。封装内部调一次本组合式,接线就落在该落的节点上。\n *\n * 外层要写 `<XhFieldControl :as-child=\"false\">`,否则属性会被合两遍。\n * 不在字段里时返回空对象,封装照样能单独用。\n */\nexport function useFieldControl(): ComputedRef<Record<string, unknown>> {\n const ctx = useOptionalFieldContext()\n return computed(() => {\n if (!ctx)\n return {}\n return wiringOnly(ctx.api.value.getControlProps() as Record<string, unknown>)\n })\n}\n\n/**\n * 只取字段的「状态接线」(说明、校验、只读),不含 id 与名字。\n *\n * 给库自己的薄封装用:XhFieldControl 默认把整套属性合到封装根上,id 与\n * aria-labelledby 落在那里是对的(label 的 for 得指得到一个真节点);但\n * aria-describedby 与 aria-invalid 落在根上就等于没落——焦点进的是里面那个\n * input / button,读屏只念焦点所在节点的描述,说明与错误文本因此播报不出来。\n * 封装把这几条补到真控件上,两边不冲突:id 只有一份,描述有两份不影响播报。\n *\n * 作者自己写封装时用上面那个 useFieldControl(配 `:as-child=\"false\"`),\n * 那条路整套属性都落到真控件上。\n */\nexport function useFieldStateWiring(): ComputedRef<Record<string, unknown>> {\n const ctx = useOptionalFieldContext()\n return computed(() => {\n if (!ctx)\n return {}\n const control = ctx.api.value.getControlProps() as Record<string, unknown>\n const wiring: Record<string, unknown> = {}\n for (const key of ['aria-describedby', 'aria-invalid', 'aria-required', 'aria-readonly']) {\n if (control[key] !== undefined)\n wiring[key] = control[key]\n }\n return wiring\n })\n}\n\n/**\n * 把字段标签的 id 并进这份属性里的名字链,供库自己的薄封装包在渲染属性外面。\n *\n * 复合控件的可聚焦部件自带 aria-labelledby,指的是它自己的 label 部件。套进字段时\n * 作者用的是字段的标签、组件那个 label 部件根本没渲染,这条引用于是指向一个不存在的\n * 节点——按 accname 规则悬空 IDREF 直接跳过,而名字也回退不到 label 的 for:for 指的\n * 是封装根那个 div,只对可标注元素生效。结果是焦点所在的那个控件一个名字都没有。\n *\n * 字段的标签排在最前,控件自己的那截(值文本这类)跟在后面,两边都念得到。\n * 不在字段里时属性原样返回。\n */\nexport function useFieldLabelWiring(): ComputedRef<(props: Record<string, unknown>) => Record<string, unknown>> {\n const ctx = useOptionalFieldContext()\n return computed(() => {\n const labelId = ctx?.api.value.labelId\n return (props: Record<string, unknown>) => {\n if (!labelId)\n return props\n const own = props['aria-labelledby']\n return {\n ...props,\n 'aria-labelledby': typeof own === 'string' && own ? `${labelId} ${own}` : labelId,\n }\n }\n })\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA,SAAgB,kBAAwD;CACtE,MAAM,MAAM,wBAAwB;CACpC,OAAO,eAAe;EACpB,IAAI,CAAC,KACH,OAAO,CAAC;EACV,OAAO,WAAW,IAAI,IAAI,MAAM,gBAAgB,CAA4B;CAC9E,CAAC;AACH;;;;;;;;;;;;;AAcA,SAAgB,sBAA4D;CAC1E,MAAM,MAAM,wBAAwB;CACpC,OAAO,eAAe;EACpB,IAAI,CAAC,KACH,OAAO,CAAC;EACV,MAAM,UAAU,IAAI,IAAI,MAAM,gBAAgB;EAC9C,MAAM,SAAkC,CAAC;EACzC,KAAK,MAAM,OAAO;GAAC;GAAoB;GAAgB;GAAiB;EAAe,GACrF,IAAI,QAAQ,SAAS,KAAA,GACnB,OAAO,OAAO,QAAQ;EAE1B,OAAO;CACT,CAAC;AACH;;;;;;;;;;;;AAaA,SAAgB,sBAAgG;CAC9G,MAAM,MAAM,wBAAwB;CACpC,OAAO,eAAe;EACpB,MAAM,UAAU,KAAK,IAAI,MAAM;EAC/B,QAAQ,UAAmC;GACzC,IAAI,CAAC,SACH,OAAO;GACT,MAAM,MAAM,MAAM;GAClB,OAAO;IACL,GAAG;IACH,mBAAmB,OAAO,QAAQ,YAAY,MAAM,GAAG,QAAQ,GAAG,QAAQ;GAC5E;EACF;CACF,CAAC;AACH"}
@@ -1,6 +1,6 @@
1
1
  import { inject, provide } from "vue";
2
2
  //#region src/components/fieldset/context.ts
3
- const KEY = Symbol("xh-fieldset");
3
+ const KEY = Symbol.for("xh-fieldset");
4
4
  function provideFieldset(ctx) {
5
5
  provide(KEY, ctx);
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/fieldset/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { FieldsetContext } from './use-fieldset'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<FieldsetContext> = Symbol('xh-fieldset')\n\nexport function provideFieldset(ctx: FieldsetContext): void {\n provide(KEY, ctx)\n}\n\nexport function useFieldsetContext(): FieldsetContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Fieldset 部件必须用在 XhFieldsetRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAqC,OAAO,aAAa;AAE/D,SAAgB,gBAAgB,KAA4B;CAC1D,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,qBAAsC;CACpD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,uCAAuC;CACzD,OAAO;AACT"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/fieldset/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { FieldsetContext } from './use-fieldset'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<FieldsetContext> = Symbol.for('xh-fieldset')\n\nexport function provideFieldset(ctx: FieldsetContext): void {\n provide(KEY, ctx)\n}\n\nexport function useFieldsetContext(): FieldsetContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Fieldset 部件必须用在 XhFieldsetRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAqC,OAAO,IAAI,aAAa;AAEnE,SAAgB,gBAAgB,KAA4B;CAC1D,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,qBAAsC;CACpD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,uCAAuC;CACzD,OAAO;AACT"}
@@ -1,7 +1,7 @@
1
1
  import { inject, provide } from "vue";
2
2
  //#region src/components/file-upload/context.ts
3
- const KEY = Symbol("xh-file-upload");
4
- const ITEM_KEY = Symbol("xh-file-upload-item");
3
+ const KEY = Symbol.for("xh-file-upload");
4
+ const ITEM_KEY = Symbol.for("xh-file-upload-item");
5
5
  function provideFileUpload(ctx) {
6
6
  provide(KEY, ctx);
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/file-upload/context.ts"],"sourcesContent":["import type { FileUploadItemProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { FileUploadContext } from './use-file-upload'\nimport { inject, provide } from 'vue'\n\n/** 条目自报的文件,供 item-name / item-size-text / 删除按钮这些子部件复用同一份声明。 */\nexport interface FileUploadItemContext {\n item: ComputedRef<FileUploadItemProps>\n}\n\nconst KEY: InjectionKey<FileUploadContext> = Symbol('xh-file-upload')\nconst ITEM_KEY: InjectionKey<FileUploadItemContext> = Symbol('xh-file-upload-item')\n\nexport function provideFileUpload(ctx: FileUploadContext): void {\n provide(KEY, ctx)\n}\n\nexport function useFileUploadContext(): FileUploadContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] FileUpload 部件必须用在 XhFileUploadRoot 内')\n return ctx\n}\n\nexport function provideFileUploadItem(ctx: FileUploadItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useFileUploadItemContext(): FileUploadItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] FileUpload 条目子部件必须用在 XhFileUploadItem 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAAuC,OAAO,gBAAgB;AACpE,MAAM,WAAgD,OAAO,qBAAqB;AAElF,SAAgB,kBAAkB,KAA8B;CAC9D,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,uBAA0C;CACxD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,2CAA2C;CAC7D,OAAO;AACT;AAEA,SAAgB,sBAAsB,KAAkC;CACtE,QAAQ,UAAU,GAAG;AACvB;AAEA,SAAgB,2BAAkD;CAChE,MAAM,MAAM,OAAO,UAAU,IAAI;CACjC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,8CAA8C;CAChE,OAAO;AACT"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/file-upload/context.ts"],"sourcesContent":["import type { FileUploadItemProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { FileUploadContext } from './use-file-upload'\nimport { inject, provide } from 'vue'\n\n/** 条目自报的文件,供 item-name / item-size-text / 删除按钮这些子部件复用同一份声明。 */\nexport interface FileUploadItemContext {\n item: ComputedRef<FileUploadItemProps>\n}\n\nconst KEY: InjectionKey<FileUploadContext> = Symbol.for('xh-file-upload')\nconst ITEM_KEY: InjectionKey<FileUploadItemContext> = Symbol.for('xh-file-upload-item')\n\nexport function provideFileUpload(ctx: FileUploadContext): void {\n provide(KEY, ctx)\n}\n\nexport function useFileUploadContext(): FileUploadContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] FileUpload 部件必须用在 XhFileUploadRoot 内')\n return ctx\n}\n\nexport function provideFileUploadItem(ctx: FileUploadItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useFileUploadItemContext(): FileUploadItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] FileUpload 条目子部件必须用在 XhFileUploadItem 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAAuC,OAAO,IAAI,gBAAgB;AACxE,MAAM,WAAgD,OAAO,IAAI,qBAAqB;AAEtF,SAAgB,kBAAkB,KAA8B;CAC9D,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,uBAA0C;CACxD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,2CAA2C;CAC7D,OAAO;AACT;AAEA,SAAgB,sBAAsB,KAAkC;CACtE,QAAQ,UAAU,GAAG;AACvB;AAEA,SAAgB,2BAAkD;CAChE,MAAM,MAAM,OAAO,UAAU,IAAI;CACjC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,8CAA8C;CAChE,OAAO;AACT"}
@@ -2,6 +2,10 @@ import { PropType } from "vue";
2
2
  import { FlexProps } from "@xihan-ui/headless";
3
3
  //#region src/components/flex/flex.d.ts
4
4
  declare const XhFlex: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
5
+ orientation: {
6
+ type: PropType<FlexProps["orientation"]>;
7
+ default: undefined;
8
+ };
5
9
  direction: {
6
10
  type: PropType<FlexProps["direction"]>;
7
11
  default: undefined;
@@ -23,6 +27,10 @@ declare const XhFlex: import("vue").DefineComponent<import("vue").ExtractPropTyp
23
27
  }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
24
28
  [key: string]: any;
25
29
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
30
+ orientation: {
31
+ type: PropType<FlexProps["orientation"]>;
32
+ default: undefined;
33
+ };
26
34
  direction: {
27
35
  type: PropType<FlexProps["direction"]>;
28
36
  default: undefined;
@@ -42,6 +50,7 @@ declare const XhFlex: import("vue").DefineComponent<import("vue").ExtractPropTyp
42
50
  wrap: BooleanConstructor;
43
51
  inline: BooleanConstructor;
44
52
  }>> & Readonly<{}>, {
53
+ orientation: import("@xihan-ui/kernel").Orientation | undefined;
45
54
  wrap: boolean;
46
55
  direction: import("@xihan-ui/headless").FlexDirection | undefined;
47
56
  align: import("@xihan-ui/headless").FlexAlign | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"flex.d.ts","names":[],"sources":["../../../src/components/flex/flex.ts"],"mappings":";;;cAMa,sBAAM,8BAAA;;IAIc,MAAA,SAAS;;;;IACb,MAAA,SAAS;;;;IACP,MAAA,SAAS;;;;IACb,MAAA,SAAS;;;;;;;;;IAHH,MAAA,SAAS;;;;IACb,MAAA,SAAS;;;;IACP,MAAA,SAAS;;;;IACb,MAAA,SAAS;;;;;;;;;;;;qCAWlC"}
1
+ {"version":3,"file":"flex.d.ts","names":[],"sources":["../../../src/components/flex/flex.ts"],"mappings":";;;cAMa,sBAAM,8BAAA;;IAIgB,MAAA,SAAS;;;;IACX,MAAA,SAAS;;;;IACb,MAAA,SAAS;;;;IACP,MAAA,SAAS;;;;IACb,MAAA,SAAS;;;;;;;;;IAJD,MAAA,SAAS;;;;IACX,MAAA,SAAS;;;;IACb,MAAA,SAAS;;;;IACP,MAAA,SAAS;;;;IACb,MAAA,SAAS;;;;;;;;;;;;;qCAWlC"}
@@ -5,6 +5,10 @@ import { connectFlex } from "@xihan-ui/headless";
5
5
  const XhFlex = defineComponent({
6
6
  name: "XhFlex",
7
7
  props: {
8
+ orientation: {
9
+ type: String,
10
+ default: void 0
11
+ },
8
12
  direction: {
9
13
  type: String,
10
14
  default: void 0
@@ -1 +1 @@
1
- {"version":3,"file":"flex.js","names":[],"sources":["../../../src/components/flex/flex.ts"],"sourcesContent":["import type { FlexProps } from '@xihan-ui/headless'\nimport type { PropType } from 'vue'\nimport { connectFlex } from '@xihan-ui/headless'\nimport { defineComponent, h } from 'vue'\nimport { vueNormalize } from '../../runtime/normalize-props'\n\nexport const XhFlex = defineComponent({\n name: 'XhFlex',\n // 有 connect 兜底的 prop 一律 default: undefined\n props: {\n direction: { type: String as PropType<FlexProps['direction']>, default: undefined },\n align: { type: String as PropType<FlexProps['align']>, default: undefined },\n justify: { type: String as PropType<FlexProps['justify']>, default: undefined },\n gap: { type: String as PropType<FlexProps['gap']>, default: undefined },\n wrap: Boolean,\n inline: Boolean,\n },\n setup(props, { slots }) {\n return () => h(\n 'div',\n connectFlex(props as FlexProps, vueNormalize).getRootProps() as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n"],"mappings":";;;;AAMA,MAAa,SAAS,gBAAgB;CACpC,MAAM;CAEN,OAAO;EACL,WAAW;GAAE,MAAM;GAA4C,SAAS,KAAA;EAAU;EAClF,OAAO;GAAE,MAAM;GAAwC,SAAS,KAAA;EAAU;EAC1E,SAAS;GAAE,MAAM;GAA0C,SAAS,KAAA;EAAU;EAC9E,KAAK;GAAE,MAAM;GAAsC,SAAS,KAAA;EAAU;EACtE,MAAM;EACN,QAAQ;CACV;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,aAAa,EACX,OACA,YAAY,OAAoB,YAAY,CAAC,CAAC,aAAa,GAC3D,MAAM,UAAU,CAClB;CACF;AACF,CAAC"}
1
+ {"version":3,"file":"flex.js","names":[],"sources":["../../../src/components/flex/flex.ts"],"sourcesContent":["import type { FlexProps } from '@xihan-ui/headless'\nimport type { PropType } from 'vue'\nimport { connectFlex } from '@xihan-ui/headless'\nimport { defineComponent, h } from 'vue'\nimport { vueNormalize } from '../../runtime/normalize-props'\n\nexport const XhFlex = defineComponent({\n name: 'XhFlex',\n // 有 connect 兜底的 prop 一律 default: undefined\n props: {\n orientation: { type: String as PropType<FlexProps['orientation']>, default: undefined },\n direction: { type: String as PropType<FlexProps['direction']>, default: undefined },\n align: { type: String as PropType<FlexProps['align']>, default: undefined },\n justify: { type: String as PropType<FlexProps['justify']>, default: undefined },\n gap: { type: String as PropType<FlexProps['gap']>, default: undefined },\n wrap: Boolean,\n inline: Boolean,\n },\n setup(props, { slots }) {\n return () => h(\n 'div',\n connectFlex(props as FlexProps, vueNormalize).getRootProps() as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n"],"mappings":";;;;AAMA,MAAa,SAAS,gBAAgB;CACpC,MAAM;CAEN,OAAO;EACL,aAAa;GAAE,MAAM;GAA8C,SAAS,KAAA;EAAU;EACtF,WAAW;GAAE,MAAM;GAA4C,SAAS,KAAA;EAAU;EAClF,OAAO;GAAE,MAAM;GAAwC,SAAS,KAAA;EAAU;EAC1E,SAAS;GAAE,MAAM;GAA0C,SAAS,KAAA;EAAU;EAC9E,KAAK;GAAE,MAAM;GAAsC,SAAS,KAAA;EAAU;EACtE,MAAM;EACN,QAAQ;CACV;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,aAAa,EACX,OACA,YAAY,OAAoB,YAAY,CAAC,CAAC,aAAa,GAC3D,MAAM,UAAU,CAClB;CACF;AACF,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { inject, provide } from "vue";
2
2
  //#region src/components/float-button/context.ts
3
- const KEY = Symbol("xh-float-button");
3
+ const KEY = Symbol.for("xh-float-button");
4
4
  function provideFloatButton(ctx) {
5
5
  provide(KEY, ctx);
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/float-button/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { FloatButtonContext } from './use-float-button'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<FloatButtonContext> = Symbol('xh-float-button')\n\nexport function provideFloatButton(ctx: FloatButtonContext): void {\n provide(KEY, ctx)\n}\n\nexport function useFloatButtonContext(): FloatButtonContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] FloatButton 部件必须用在 XhFloatButtonRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAwC,OAAO,iBAAiB;AAEtE,SAAgB,mBAAmB,KAA+B;CAChE,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,wBAA4C;CAC1D,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,6CAA6C;CAC/D,OAAO;AACT"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/float-button/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { FloatButtonContext } from './use-float-button'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<FloatButtonContext> = Symbol.for('xh-float-button')\n\nexport function provideFloatButton(ctx: FloatButtonContext): void {\n provide(KEY, ctx)\n}\n\nexport function useFloatButtonContext(): FloatButtonContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] FloatButton 部件必须用在 XhFloatButtonRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAwC,OAAO,IAAI,iBAAiB;AAE1E,SAAgB,mBAAmB,KAA+B;CAChE,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,wBAA4C;CAC1D,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,6CAA6C;CAC/D,OAAO;AACT"}
@@ -69,10 +69,10 @@ declare const XhFloatButtonRoot: import("vue").DefineComponent<import("vue").Ext
69
69
  "onUpdate:open"?: ((_open: boolean) => any) | undefined;
70
70
  }>, {
71
71
  disabled: boolean;
72
+ offset: number;
73
+ translations: Partial<FloatButtonTranslations>;
72
74
  open: boolean;
73
75
  defaultOpen: boolean;
74
- translations: Partial<FloatButtonTranslations>;
75
- offset: number;
76
76
  expandTrigger: FloatButtonExpandTrigger;
77
77
  placement: FloatButtonPlacement;
78
78
  shape: FloatButtonShape;
@@ -1,6 +1,6 @@
1
1
  import { inject, provide } from "vue";
2
2
  //#region src/components/floating-panel/context.ts
3
- const KEY = Symbol("xh-floating-panel");
3
+ const KEY = Symbol.for("xh-floating-panel");
4
4
  function provideFloatingPanel(ctx) {
5
5
  provide(KEY, ctx);
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/floating-panel/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { FloatingPanelContext } from './use-floating-panel'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<FloatingPanelContext> = Symbol('xh-floating-panel')\n\nexport function provideFloatingPanel(ctx: FloatingPanelContext): void {\n provide(KEY, ctx)\n}\n\nexport function useFloatingPanelContext(): FloatingPanelContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] FloatingPanel 部件必须用在 XhFloatingPanelRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAA0C,OAAO,mBAAmB;AAE1E,SAAgB,qBAAqB,KAAiC;CACpE,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,0BAAgD;CAC9D,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,iDAAiD;CACnE,OAAO;AACT"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/floating-panel/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { FloatingPanelContext } from './use-floating-panel'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<FloatingPanelContext> = Symbol.for('xh-floating-panel')\n\nexport function provideFloatingPanel(ctx: FloatingPanelContext): void {\n provide(KEY, ctx)\n}\n\nexport function useFloatingPanelContext(): FloatingPanelContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] FloatingPanel 部件必须用在 XhFloatingPanelRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAA0C,OAAO,IAAI,mBAAmB;AAE9E,SAAgB,qBAAqB,KAAiC;CACpE,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,0BAAgD;CAC9D,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,iDAAiD;CACnE,OAAO;AACT"}
@@ -142,9 +142,9 @@ declare const XhFloatingPanelRoot: import("vue").DefineComponent<import("vue").E
142
142
  }>, {
143
143
  size: FloatingPanelSize;
144
144
  disabled: boolean;
145
+ translations: Partial<import("@xihan-ui/headless").FloatingPanelTranslations> | undefined;
145
146
  open: boolean;
146
147
  defaultOpen: boolean;
147
- translations: Partial<import("@xihan-ui/headless").FloatingPanelTranslations> | undefined;
148
148
  position: FloatingPanelPosition;
149
149
  stage: FloatingPanelStage;
150
150
  defaultPosition: FloatingPanelPosition;
@@ -1,6 +1,6 @@
1
1
  import { inject, provide } from "vue";
2
2
  //#region src/components/form/context.ts
3
- const KEY = Symbol("xh-form");
3
+ const KEY = Symbol.for("xh-form");
4
4
  function provideForm(ctx) {
5
5
  provide(KEY, ctx);
6
6
  }
@@ -13,7 +13,7 @@ function useFormContext() {
13
13
  function useOptionalFormContext() {
14
14
  return inject(KEY, null);
15
15
  }
16
- const FIELD_KEY = Symbol("xh-form-field");
16
+ const FIELD_KEY = Symbol.for("xh-form-field");
17
17
  function provideFormField(handle) {
18
18
  provide(FIELD_KEY, handle);
19
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/form/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { FormContext } from './use-form'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<FormContext> = Symbol('xh-form')\n\nexport function provideForm(ctx: FormContext): void {\n provide(KEY, ctx)\n}\n\nexport function useFormContext(): FormContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Form 部件必须用在 XhFormRoot 内')\n return ctx\n}\n\n/** 表单外也能用的部件(如 Field)从这里拿:不在表单里就是 null。 */\nexport function useOptionalFormContext(): FormContext | null {\n return inject(KEY, null)\n}\n\n/** 字段容器把字段名交给后代:Field 据此从表单上下文自取校验态。 */\nexport interface FormFieldHandle {\n name: () => string\n}\n\nconst FIELD_KEY: InjectionKey<FormFieldHandle> = Symbol('xh-form-field')\n\nexport function provideFormField(handle: FormFieldHandle): void {\n provide(FIELD_KEY, handle)\n}\n\nexport function useOptionalFormField(): FormFieldHandle | null {\n return inject(FIELD_KEY, null)\n}\n"],"mappings":";;AAIA,MAAM,MAAiC,OAAO,SAAS;AAEvD,SAAgB,YAAY,KAAwB;CAClD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,iBAA8B;CAC5C,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,+BAA+B;CACjD,OAAO;AACT;;AAGA,SAAgB,yBAA6C;CAC3D,OAAO,OAAO,KAAK,IAAI;AACzB;AAOA,MAAM,YAA2C,OAAO,eAAe;AAEvE,SAAgB,iBAAiB,QAA+B;CAC9D,QAAQ,WAAW,MAAM;AAC3B;AAEA,SAAgB,uBAA+C;CAC7D,OAAO,OAAO,WAAW,IAAI;AAC/B"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/form/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { FormContext } from './use-form'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<FormContext> = Symbol.for('xh-form')\n\nexport function provideForm(ctx: FormContext): void {\n provide(KEY, ctx)\n}\n\nexport function useFormContext(): FormContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Form 部件必须用在 XhFormRoot 内')\n return ctx\n}\n\n/** 表单外也能用的部件(如 Field)从这里拿:不在表单里就是 null。 */\nexport function useOptionalFormContext(): FormContext | null {\n return inject(KEY, null)\n}\n\n/** 字段容器把字段名交给后代:Field 据此从表单上下文自取校验态。 */\nexport interface FormFieldHandle {\n name: () => string\n}\n\nconst FIELD_KEY: InjectionKey<FormFieldHandle> = Symbol.for('xh-form-field')\n\nexport function provideFormField(handle: FormFieldHandle): void {\n provide(FIELD_KEY, handle)\n}\n\nexport function useOptionalFormField(): FormFieldHandle | null {\n return inject(FIELD_KEY, null)\n}\n"],"mappings":";;AAIA,MAAM,MAAiC,OAAO,IAAI,SAAS;AAE3D,SAAgB,YAAY,KAAwB;CAClD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,iBAA8B;CAC5C,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,+BAA+B;CACjD,OAAO;AACT;;AAGA,SAAgB,yBAA6C;CAC3D,OAAO,OAAO,KAAK,IAAI;AACzB;AAOA,MAAM,YAA2C,OAAO,IAAI,eAAe;AAE3E,SAAgB,iBAAiB,QAA+B;CAC9D,QAAQ,WAAW,MAAM;AAC3B;AAEA,SAAgB,uBAA+C;CAC7D,OAAO,OAAO,WAAW,IAAI;AAC/B"}
@@ -1,6 +1,6 @@
1
1
  import { inject, provide } from "vue";
2
2
  //#region src/components/grid/context.ts
3
- const KEY = Symbol("xh-grid");
3
+ const KEY = Symbol.for("xh-grid");
4
4
  function provideGrid(ctx) {
5
5
  provide(KEY, ctx);
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/grid/context.ts"],"sourcesContent":["import type { GridApi } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\nexport interface GridContext {\n api: ComputedRef<GridApi>\n}\n\nconst KEY: InjectionKey<GridContext> = Symbol('xh-grid')\n\nexport function provideGrid(ctx: GridContext): void {\n provide(KEY, ctx)\n}\n\nexport function useGridContext(): GridContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Grid 部件必须用在 XhGridRoot 内')\n return ctx\n}\n"],"mappings":";;AAQA,MAAM,MAAiC,OAAO,SAAS;AAEvD,SAAgB,YAAY,KAAwB;CAClD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,iBAA8B;CAC5C,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,+BAA+B;CACjD,OAAO;AACT"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/grid/context.ts"],"sourcesContent":["import type { GridApi } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\nexport interface GridContext {\n api: ComputedRef<GridApi>\n}\n\nconst KEY: InjectionKey<GridContext> = Symbol.for('xh-grid')\n\nexport function provideGrid(ctx: GridContext): void {\n provide(KEY, ctx)\n}\n\nexport function useGridContext(): GridContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Grid 部件必须用在 XhGridRoot 内')\n return ctx\n}\n"],"mappings":";;AAQA,MAAM,MAAiC,OAAO,IAAI,SAAS;AAE3D,SAAgB,YAAY,KAAwB;CAClD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,iBAA8B;CAC5C,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,+BAA+B;CACjD,OAAO;AACT"}
@@ -1,10 +1,10 @@
1
1
  import { inject, provide } from "vue";
2
2
  //#region src/components/heatmap/context.ts
3
- const KEY = Symbol("xh-heatmap");
3
+ const KEY = Symbol.for("xh-heatmap");
4
4
  /** 月块把自己的月份身份传给块内的行:一行由「哪个月 + 月内第几周」定位。 */
5
- const MONTH_KEY = Symbol("xh-heatmap-month");
5
+ const MONTH_KEY = Symbol.for("xh-heatmap-month");
6
6
  /** 行把自己的行身份传给行里的格子:矩阵的一格由「哪一行 + 哪一列」定位。 */
7
- const ROW_KEY = Symbol("xh-heatmap-row");
7
+ const ROW_KEY = Symbol.for("xh-heatmap-row");
8
8
  function provideHeatmap(ctx) {
9
9
  provide(KEY, ctx);
10
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/heatmap/context.ts"],"sourcesContent":["import type { ComputedRef, InjectionKey } from 'vue'\nimport type { HeatmapContext } from './use-heatmap'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<HeatmapContext> = Symbol('xh-heatmap')\n\n/** 月块把自己的月份身份传给块内的行:一行由「哪个月 + 月内第几周」定位。 */\nconst MONTH_KEY: InjectionKey<ComputedRef<string>> = Symbol('xh-heatmap-month')\n\n/** 行把自己的行身份传给行里的格子:矩阵的一格由「哪一行 + 哪一列」定位。 */\nconst ROW_KEY: InjectionKey<ComputedRef<string | undefined>> = Symbol('xh-heatmap-row')\n\nexport function provideHeatmap(ctx: HeatmapContext): void {\n provide(KEY, ctx)\n}\n\nexport function useHeatmapContext(): HeatmapContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Heatmap 部件必须用在 XhHeatmapRoot 内')\n return ctx\n}\n\nexport function provideHeatmapMonth(month: ComputedRef<string>): void {\n provide(MONTH_KEY, month)\n}\n\n/** 没写在月块里就没有月份身份,行自己再从 props 上找。 */\nexport function useHeatmapMonth(): ComputedRef<string> | null {\n return inject(MONTH_KEY, null)\n}\n\nexport function provideHeatmapRow(row: ComputedRef<string | undefined>): void {\n provide(ROW_KEY, row)\n}\n\nexport function useHeatmapRow(): ComputedRef<string | undefined> | null {\n return inject(ROW_KEY, null)\n}\n"],"mappings":";;AAIA,MAAM,MAAoC,OAAO,YAAY;;AAG7D,MAAM,YAA+C,OAAO,kBAAkB;;AAG9E,MAAM,UAAyD,OAAO,gBAAgB;AAEtF,SAAgB,eAAe,KAA2B;CACxD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,oBAAoC;CAClD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,qCAAqC;CACvD,OAAO;AACT;AAEA,SAAgB,oBAAoB,OAAkC;CACpE,QAAQ,WAAW,KAAK;AAC1B;;AAGA,SAAgB,kBAA8C;CAC5D,OAAO,OAAO,WAAW,IAAI;AAC/B;AAEA,SAAgB,kBAAkB,KAA4C;CAC5E,QAAQ,SAAS,GAAG;AACtB;AAEA,SAAgB,gBAAwD;CACtE,OAAO,OAAO,SAAS,IAAI;AAC7B"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/heatmap/context.ts"],"sourcesContent":["import type { ComputedRef, InjectionKey } from 'vue'\nimport type { HeatmapContext } from './use-heatmap'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<HeatmapContext> = Symbol.for('xh-heatmap')\n\n/** 月块把自己的月份身份传给块内的行:一行由「哪个月 + 月内第几周」定位。 */\nconst MONTH_KEY: InjectionKey<ComputedRef<string>> = Symbol.for('xh-heatmap-month')\n\n/** 行把自己的行身份传给行里的格子:矩阵的一格由「哪一行 + 哪一列」定位。 */\nconst ROW_KEY: InjectionKey<ComputedRef<string | undefined>> = Symbol.for('xh-heatmap-row')\n\nexport function provideHeatmap(ctx: HeatmapContext): void {\n provide(KEY, ctx)\n}\n\nexport function useHeatmapContext(): HeatmapContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Heatmap 部件必须用在 XhHeatmapRoot 内')\n return ctx\n}\n\nexport function provideHeatmapMonth(month: ComputedRef<string>): void {\n provide(MONTH_KEY, month)\n}\n\n/** 没写在月块里就没有月份身份,行自己再从 props 上找。 */\nexport function useHeatmapMonth(): ComputedRef<string> | null {\n return inject(MONTH_KEY, null)\n}\n\nexport function provideHeatmapRow(row: ComputedRef<string | undefined>): void {\n provide(ROW_KEY, row)\n}\n\nexport function useHeatmapRow(): ComputedRef<string | undefined> | null {\n return inject(ROW_KEY, null)\n}\n"],"mappings":";;AAIA,MAAM,MAAoC,OAAO,IAAI,YAAY;;AAGjE,MAAM,YAA+C,OAAO,IAAI,kBAAkB;;AAGlF,MAAM,UAAyD,OAAO,IAAI,gBAAgB;AAE1F,SAAgB,eAAe,KAA2B;CACxD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,oBAAoC;CAClD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,qCAAqC;CACvD,OAAO;AACT;AAEA,SAAgB,oBAAoB,OAAkC;CACpE,QAAQ,WAAW,KAAK;AAC1B;;AAGA,SAAgB,kBAA8C;CAC5D,OAAO,OAAO,WAAW,IAAI;AAC/B;AAEA,SAAgB,kBAAkB,KAA4C;CAC5E,QAAQ,SAAS,GAAG;AACtB;AAEA,SAAgB,gBAAwD;CACtE,OAAO,OAAO,SAAS,IAAI;AAC7B"}
@@ -146,10 +146,10 @@ declare const XhHeatmapRoot: import("vue").DefineComponent<import("vue").Extract
146
146
  "onCell-focus"?: ((_details: HeatmapCellDetails) => any) | undefined;
147
147
  "onCell-active"?: ((_details: HeatmapCellDetails | null) => any) | undefined;
148
148
  }>, {
149
- size: Size;
150
149
  value: HeatmapValue[];
151
150
  dir: Direction;
152
151
  tone: Tone;
152
+ size: Size;
153
153
  translations: Partial<HeatmapTranslations>;
154
154
  variant: HeatmapVariant;
155
155
  locale: string;
@@ -8,6 +8,8 @@ import { Size } from "@xihan-ui/kernel";
8
8
  *
9
9
  * 内容整份由 keys 与平台算出,组件不收默认插槽——键帽上写什么、连接符出不出,
10
10
  * 两个平台的答案不一样,内容另有来源就对不上了。
11
+ *
12
+ * 注册与渲染是两件事:只要注册不要键帽就直接用 useHotkeys。
11
13
  */
12
14
  declare const XhHotkeys: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
13
15
  keys: {
@@ -75,9 +77,9 @@ declare const XhHotkeys: import("vue").DefineComponent<import("vue").ExtractProp
75
77
  "onHot-key"?: ((_details: import("@xihan-ui/headless").HotkeysTriggerDetails) => any) | undefined;
76
78
  }>, {
77
79
  keys: string[];
78
- target: HotkeysTarget;
79
80
  size: Size;
80
81
  translations: Partial<HotkeysTranslations>;
82
+ target: HotkeysTarget;
81
83
  platform: HotkeysPlatform;
82
84
  preventDefault: boolean;
83
85
  enabled: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"hotkeys.d.ts","names":[],"sources":["../../../src/components/hotkeys/hotkeys.ts"],"mappings":";;;;;;;;;;;cAea,yBAAS,8BAAA;;IAIK,MAAA;;;;IACK,MAAA,SAAS;;;;IACX,MAAA,SAAS;;;;;;;;;;;;IAGX,MAAA,SAAS;;;;IACD,MAAA,SAAS,QAAQ;;;;;;EAI3B,YAAA,UAAA,UAAU;;;IAVT,MAAA;;;;IACK,MAAA,SAAS;;;;IACX,MAAA,SAAS;;;;;;;;;;;;IAGX,MAAA,SAAS;;;;IACD,MAAA,SAAS,QAAQ;;;;;;;;;;;;;qCA8DnD"}
1
+ {"version":3,"file":"hotkeys.d.ts","names":[],"sources":["../../../src/components/hotkeys/hotkeys.ts"],"mappings":";;;;;;;;;;;;;cAgBa,yBAAS,8BAAA;;IAIK,MAAA;;;;IACK,MAAA,SAAS;;;;IACX,MAAA,SAAS;;;;;;;;;;;;IAGX,MAAA,SAAS;;;;IACD,MAAA,SAAS,QAAQ;;;;;;EAI3B,YAAA,UAAA,UAAU;;;IAVT,MAAA;;;;IACK,MAAA,SAAS;;;;IACX,MAAA,SAAS;;;;;;;;;;;;IAGX,MAAA,SAAS;;;;IACD,MAAA,SAAS,QAAQ;;;;;;;;;;;;;qCAqCnD"}
@@ -1,13 +1,14 @@
1
- import { vueNormalize } from "../../runtime/normalize-props.js";
2
1
  import { withXhConfig } from "../../config/config.js";
3
- import { computed, defineComponent, h, onBeforeUnmount, onMounted, ref, watchEffect } from "vue";
4
- import { connectHotkeys, detectHotkeysPlatform } from "@xihan-ui/headless";
2
+ import { useHotkeys } from "./use-hotkeys.js";
3
+ import { defineComponent, h, ref } from "vue";
5
4
  //#region src/components/hotkeys/hotkeys.ts
6
5
  /**
7
6
  * 把一组键铺成一排键帽,并按 target 指定的节点接住这次组合。
8
7
  *
9
8
  * 内容整份由 keys 与平台算出,组件不收默认插槽——键帽上写什么、连接符出不出,
10
9
  * 两个平台的答案不一样,内容另有来源就对不上了。
10
+ *
11
+ * 注册与渲染是两件事:只要注册不要键帽就直接用 useHotkeys。
11
12
  */
12
13
  const XhHotkeys = defineComponent({
13
14
  name: "XhHotkeys",
@@ -44,36 +45,17 @@ const XhHotkeys = defineComponent({
44
45
  emits: { "hot-key": (_details) => true },
45
46
  setup(props, { emit }) {
46
47
  const rootEl = ref(null);
47
- const detected = ref("auto");
48
- onMounted(() => {
49
- detected.value = detectHotkeysPlatform();
50
- });
51
48
  const merged = withXhConfig("hotkeys", props);
52
- const api = computed(() => connectHotkeys({
49
+ const { api } = useHotkeys(() => ({
53
50
  keys: props.keys,
54
- platform: props.platform && props.platform !== "auto" ? props.platform : detected.value,
51
+ platform: props.platform,
55
52
  target: props.target,
56
53
  preventDefault: props.preventDefault,
57
54
  enabled: props.enabled,
58
55
  size: props.size,
59
56
  translations: merged.translations,
60
57
  onHotKey: (details) => emit("hot-key", details)
61
- }, vueNormalize));
62
- const onKeyDown = (event) => api.value.handleKeyDown(event);
63
- let bound = null;
64
- const unbind = () => {
65
- bound?.removeEventListener("keydown", onKeyDown);
66
- bound = null;
67
- };
68
- watchEffect(() => {
69
- const el = rootEl.value;
70
- const next = el === null ? null : api.value.target === "parent" ? el.parentElement : el.ownerDocument;
71
- if (next === bound) return;
72
- unbind();
73
- bound = next;
74
- bound?.addEventListener("keydown", onKeyDown);
75
- });
76
- onBeforeUnmount(unbind);
58
+ }), rootEl);
77
59
  return () => {
78
60
  const current = api.value;
79
61
  const separatorProps = current.getSeparatorProps();