@xihan-ui/vue 3.0.0 → 3.2.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 (237) hide show
  1. package/CHANGELOG.md +148 -0
  2. package/README.md +1 -1
  3. package/dist/components/carousel/carousel.d.ts +7 -1
  4. package/dist/components/carousel/carousel.d.ts.map +1 -1
  5. package/dist/components/carousel/carousel.js +1 -0
  6. package/dist/components/carousel/carousel.js.map +1 -1
  7. package/dist/components/cartesian-chart/cartesian-chart.d.ts.map +1 -1
  8. package/dist/components/cartesian-chart/cartesian-chart.js +2 -2
  9. package/dist/components/cartesian-chart/cartesian-chart.js.map +1 -1
  10. package/dist/components/cascader/cascader.d.ts +2 -0
  11. package/dist/components/cascader/cascader.d.ts.map +1 -1
  12. package/dist/components/cascader/cascader.js +5 -2
  13. package/dist/components/cascader/cascader.js.map +1 -1
  14. package/dist/components/checkbox-group/checkbox-group.d.ts.map +1 -1
  15. package/dist/components/checkbox-group/checkbox-group.js +30 -11
  16. package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
  17. package/dist/components/checkbox-group/use-checkbox-group.d.ts +6 -1
  18. package/dist/components/checkbox-group/use-checkbox-group.d.ts.map +1 -1
  19. package/dist/components/checkbox-group/use-checkbox-group.js +7 -3
  20. package/dist/components/checkbox-group/use-checkbox-group.js.map +1 -1
  21. package/dist/components/citation/citation.d.ts.map +1 -1
  22. package/dist/components/citation/citation.js +8 -6
  23. package/dist/components/citation/citation.js.map +1 -1
  24. package/dist/components/color-field/color-field.d.ts +2 -0
  25. package/dist/components/color-field/color-field.d.ts.map +1 -1
  26. package/dist/components/color-field/color-field.js +3 -1
  27. package/dist/components/color-field/color-field.js.map +1 -1
  28. package/dist/components/color-picker/color-picker.d.ts +76 -9
  29. package/dist/components/color-picker/color-picker.d.ts.map +1 -1
  30. package/dist/components/color-picker/color-picker.js +89 -7
  31. package/dist/components/color-picker/color-picker.js.map +1 -1
  32. package/dist/components/color-picker/context.js +10 -1
  33. package/dist/components/color-picker/context.js.map +1 -1
  34. package/dist/components/color-picker/use-color-picker.js +14 -4
  35. package/dist/components/color-picker/use-color-picker.js.map +1 -1
  36. package/dist/components/color-swatch-picker/color-swatch-picker.d.ts.map +1 -1
  37. package/dist/components/color-swatch-picker/color-swatch-picker.js +21 -4
  38. package/dist/components/color-swatch-picker/color-swatch-picker.js.map +1 -1
  39. package/dist/components/color-swatch-picker/use-color-swatch-picker.d.ts +6 -1
  40. package/dist/components/color-swatch-picker/use-color-swatch-picker.d.ts.map +1 -1
  41. package/dist/components/color-swatch-picker/use-color-swatch-picker.js +7 -3
  42. package/dist/components/color-swatch-picker/use-color-swatch-picker.js.map +1 -1
  43. package/dist/components/combobox/combobox.d.ts +2 -0
  44. package/dist/components/combobox/combobox.d.ts.map +1 -1
  45. package/dist/components/combobox/combobox.js +6 -4
  46. package/dist/components/combobox/combobox.js.map +1 -1
  47. package/dist/components/command/command.d.ts +3 -3
  48. package/dist/components/context-menu/context-menu.d.ts +9 -1
  49. package/dist/components/context-menu/context-menu.d.ts.map +1 -1
  50. package/dist/components/context-menu/context-menu.js +11 -1
  51. package/dist/components/context-menu/context-menu.js.map +1 -1
  52. package/dist/components/date-field/date-field.d.ts +6 -2
  53. package/dist/components/date-field/date-field.d.ts.map +1 -1
  54. package/dist/components/date-field/date-field.js +5 -2
  55. package/dist/components/date-field/date-field.js.map +1 -1
  56. package/dist/components/date-picker/context.js +10 -1
  57. package/dist/components/date-picker/context.js.map +1 -1
  58. package/dist/components/date-picker/date-picker.d.ts +58 -3
  59. package/dist/components/date-picker/date-picker.d.ts.map +1 -1
  60. package/dist/components/date-picker/date-picker.js +77 -5
  61. package/dist/components/date-picker/date-picker.js.map +1 -1
  62. package/dist/components/date-range-picker/date-range-picker.d.ts +27 -1
  63. package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
  64. package/dist/components/date-range-picker/date-range-picker.js +10 -1
  65. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  66. package/dist/components/dialog/dialog.d.ts +12 -1
  67. package/dist/components/dialog/dialog.d.ts.map +1 -1
  68. package/dist/components/dialog/dialog.js +14 -4
  69. package/dist/components/dialog/dialog.js.map +1 -1
  70. package/dist/components/drawer/drawer.d.ts +12 -1
  71. package/dist/components/drawer/drawer.d.ts.map +1 -1
  72. package/dist/components/drawer/drawer.js +14 -4
  73. package/dist/components/drawer/drawer.js.map +1 -1
  74. package/dist/components/field/context.d.ts +6 -1
  75. package/dist/components/field/context.d.ts.map +1 -1
  76. package/dist/components/field/context.js +10 -1
  77. package/dist/components/field/context.js.map +1 -1
  78. package/dist/components/field/field.d.ts +9 -1
  79. package/dist/components/field/field.d.ts.map +1 -1
  80. package/dist/components/field/field.js +14 -2
  81. package/dist/components/field/field.js.map +1 -1
  82. package/dist/components/field/use-field-control.d.ts +8 -1
  83. package/dist/components/field/use-field-control.d.ts.map +1 -1
  84. package/dist/components/field/use-field-control.js +14 -1
  85. package/dist/components/field/use-field-control.js.map +1 -1
  86. package/dist/components/file-upload/file-upload.d.ts +2 -0
  87. package/dist/components/file-upload/file-upload.d.ts.map +1 -1
  88. package/dist/components/file-upload/file-upload.js +3 -1
  89. package/dist/components/file-upload/file-upload.js.map +1 -1
  90. package/dist/components/float-button/float-button.d.ts +26 -1
  91. package/dist/components/float-button/float-button.d.ts.map +1 -1
  92. package/dist/components/float-button/float-button.js +17 -5
  93. package/dist/components/float-button/float-button.js.map +1 -1
  94. package/dist/components/float-button/use-float-button.js +7 -1
  95. package/dist/components/float-button/use-float-button.js.map +1 -1
  96. package/dist/components/floating-panel/floating-panel.d.ts +2 -2
  97. package/dist/components/floating-panel/floating-panel.js +4 -1
  98. package/dist/components/floating-panel/floating-panel.js.map +1 -1
  99. package/dist/components/form/context.js +5 -1
  100. package/dist/components/form/context.js.map +1 -1
  101. package/dist/components/form/form.d.ts +8 -0
  102. package/dist/components/form/form.d.ts.map +1 -1
  103. package/dist/components/form/form.js +4 -1
  104. package/dist/components/form/form.js.map +1 -1
  105. package/dist/components/form/use-form-control.js +1 -1
  106. package/dist/components/funnel-chart/funnel-chart.d.ts.map +1 -1
  107. package/dist/components/funnel-chart/funnel-chart.js +2 -2
  108. package/dist/components/funnel-chart/funnel-chart.js.map +1 -1
  109. package/dist/components/graph-chart/graph-chart.d.ts.map +1 -1
  110. package/dist/components/graph-chart/graph-chart.js +2 -2
  111. package/dist/components/graph-chart/graph-chart.js.map +1 -1
  112. package/dist/components/hierarchy-chart/hierarchy-chart.d.ts.map +1 -1
  113. package/dist/components/hierarchy-chart/hierarchy-chart.js +2 -2
  114. package/dist/components/hierarchy-chart/hierarchy-chart.js.map +1 -1
  115. package/dist/components/hover-card/hover-card.js +2 -1
  116. package/dist/components/hover-card/hover-card.js.map +1 -1
  117. package/dist/components/image-viewer/image-viewer.d.ts +7 -1
  118. package/dist/components/image-viewer/image-viewer.d.ts.map +1 -1
  119. package/dist/components/image-viewer/image-viewer.js +1 -0
  120. package/dist/components/image-viewer/image-viewer.js.map +1 -1
  121. package/dist/components/mention/mention.d.ts +1 -1
  122. package/dist/components/mention/mention.js +5 -4
  123. package/dist/components/mention/mention.js.map +1 -1
  124. package/dist/components/menu/menu.js +31 -2
  125. package/dist/components/menu/menu.js.map +1 -1
  126. package/dist/components/menubar/context.d.ts.map +1 -1
  127. package/dist/components/menubar/context.js.map +1 -1
  128. package/dist/components/menubar/menubar.d.ts +9 -1
  129. package/dist/components/menubar/menubar.d.ts.map +1 -1
  130. package/dist/components/menubar/menubar.js +29 -2
  131. package/dist/components/menubar/menubar.js.map +1 -1
  132. package/dist/components/pagination/pagination.js +4 -2
  133. package/dist/components/pagination/pagination.js.map +1 -1
  134. package/dist/components/pie-chart/pie-chart.d.ts.map +1 -1
  135. package/dist/components/pie-chart/pie-chart.js +2 -2
  136. package/dist/components/pie-chart/pie-chart.js.map +1 -1
  137. package/dist/components/pin-input/pin-input.d.ts.map +1 -1
  138. package/dist/components/pin-input/pin-input.js +7 -1
  139. package/dist/components/pin-input/pin-input.js.map +1 -1
  140. package/dist/components/popconfirm/popconfirm.d.ts +20 -1
  141. package/dist/components/popconfirm/popconfirm.d.ts.map +1 -1
  142. package/dist/components/popconfirm/popconfirm.js +9 -1
  143. package/dist/components/popconfirm/popconfirm.js.map +1 -1
  144. package/dist/components/popconfirm/use-popconfirm.js +2 -0
  145. package/dist/components/popconfirm/use-popconfirm.js.map +1 -1
  146. package/dist/components/popover/popover.d.ts +1 -1
  147. package/dist/components/popover/popover.js +2 -1
  148. package/dist/components/popover/popover.js.map +1 -1
  149. package/dist/components/radar-chart/radar-chart.d.ts.map +1 -1
  150. package/dist/components/radar-chart/radar-chart.js +2 -2
  151. package/dist/components/radar-chart/radar-chart.js.map +1 -1
  152. package/dist/components/radio-group/radio-group.d.ts.map +1 -1
  153. package/dist/components/radio-group/radio-group.js +25 -6
  154. package/dist/components/radio-group/radio-group.js.map +1 -1
  155. package/dist/components/radio-group/use-radio-group.d.ts +5 -0
  156. package/dist/components/radio-group/use-radio-group.d.ts.map +1 -1
  157. package/dist/components/radio-group/use-radio-group.js +4 -1
  158. package/dist/components/radio-group/use-radio-group.js.map +1 -1
  159. package/dist/components/rating/rating.d.ts.map +1 -1
  160. package/dist/components/rating/rating.js +7 -1
  161. package/dist/components/rating/rating.js.map +1 -1
  162. package/dist/components/sankey-chart/sankey-chart.d.ts.map +1 -1
  163. package/dist/components/sankey-chart/sankey-chart.js +2 -2
  164. package/dist/components/sankey-chart/sankey-chart.js.map +1 -1
  165. package/dist/components/select/select.d.ts +13 -0
  166. package/dist/components/select/select.d.ts.map +1 -1
  167. package/dist/components/select/select.js +15 -4
  168. package/dist/components/select/select.js.map +1 -1
  169. package/dist/components/side-nav/side-nav.d.ts.map +1 -1
  170. package/dist/components/side-nav/side-nav.js +8 -2
  171. package/dist/components/side-nav/side-nav.js.map +1 -1
  172. package/dist/components/signature-pad/signature-pad.d.ts +2 -0
  173. package/dist/components/signature-pad/signature-pad.d.ts.map +1 -1
  174. package/dist/components/signature-pad/signature-pad.js +3 -1
  175. package/dist/components/signature-pad/signature-pad.js.map +1 -1
  176. package/dist/components/slider/slider.d.ts.map +1 -1
  177. package/dist/components/slider/slider.js +7 -1
  178. package/dist/components/slider/slider.js.map +1 -1
  179. package/dist/components/tags-input/tags-input.d.ts +2 -0
  180. package/dist/components/tags-input/tags-input.d.ts.map +1 -1
  181. package/dist/components/tags-input/tags-input.js +3 -1
  182. package/dist/components/tags-input/tags-input.js.map +1 -1
  183. package/dist/components/text-field/text-field.d.ts +2 -0
  184. package/dist/components/text-field/text-field.d.ts.map +1 -1
  185. package/dist/components/text-field/text-field.js +3 -1
  186. package/dist/components/text-field/text-field.js.map +1 -1
  187. package/dist/components/time-field/time-field.d.ts +2 -0
  188. package/dist/components/time-field/time-field.d.ts.map +1 -1
  189. package/dist/components/time-field/time-field.js +3 -1
  190. package/dist/components/time-field/time-field.js.map +1 -1
  191. package/dist/components/time-picker/context.js +10 -1
  192. package/dist/components/time-picker/context.js.map +1 -1
  193. package/dist/components/time-picker/time-picker.d.ts +78 -9
  194. package/dist/components/time-picker/time-picker.d.ts.map +1 -1
  195. package/dist/components/time-picker/time-picker.js +91 -9
  196. package/dist/components/time-picker/time-picker.js.map +1 -1
  197. package/dist/components/time-range-picker/time-range-picker.d.ts +2 -0
  198. package/dist/components/time-range-picker/time-range-picker.d.ts.map +1 -1
  199. package/dist/components/time-range-picker/time-range-picker.js +5 -2
  200. package/dist/components/time-range-picker/time-range-picker.js.map +1 -1
  201. package/dist/components/toggle-group/toggle-group.d.ts.map +1 -1
  202. package/dist/components/toggle-group/toggle-group.js +7 -1
  203. package/dist/components/toggle-group/toggle-group.js.map +1 -1
  204. package/dist/components/tooltip/tooltip.js +2 -1
  205. package/dist/components/tooltip/tooltip.js.map +1 -1
  206. package/dist/components/tour/tour.js +12 -3
  207. package/dist/components/tour/tour.js.map +1 -1
  208. package/dist/components/tree/tree.d.ts +2 -2
  209. package/dist/components/tree/tree.js +1 -1
  210. package/dist/components/tree/tree.js.map +1 -1
  211. package/dist/components/tree-select/tree-select.d.ts +2 -0
  212. package/dist/components/tree-select/tree-select.d.ts.map +1 -1
  213. package/dist/components/tree-select/tree-select.js +6 -4
  214. package/dist/components/tree-select/tree-select.js.map +1 -1
  215. package/dist/components/truncate/truncate.d.ts.map +1 -1
  216. package/dist/components/truncate/truncate.js +4 -8
  217. package/dist/components/truncate/truncate.js.map +1 -1
  218. package/dist/index.d.ts +7 -7
  219. package/dist/index.js +8 -8
  220. package/dist/locale.d.ts +2 -0
  221. package/dist/locale.js +2 -0
  222. package/dist/package.js +1 -1
  223. package/dist/runtime/as-child.js +7 -2
  224. package/dist/runtime/as-child.js.map +1 -1
  225. package/dist/runtime/portal.js +13 -1
  226. package/dist/runtime/portal.js.map +1 -1
  227. package/dist/runtime/use-overlay-exit.js +6 -1
  228. package/dist/runtime/use-overlay-exit.js.map +1 -1
  229. package/dist/runtime/with-handlers.js +25 -0
  230. package/dist/runtime/with-handlers.js.map +1 -0
  231. package/dist/services/dialog-service.d.ts +3 -3
  232. package/dist/services/dialog-service.d.ts.map +1 -1
  233. package/dist/services/dialog-service.js +8 -6
  234. package/dist/services/dialog-service.js.map +1 -1
  235. package/dist/services/service-config.js +2 -1
  236. package/dist/services/service-config.js.map +1 -1
  237. package/package.json +19 -15
@@ -1 +1 @@
1
- {"version":3,"file":"context-menu.js","names":["mergeVueProps","mergeProps"],"sources":["../../../src/components/context-menu/context-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// 提供 context menu 相关实现。\n\nimport type { Direction, Placement, Size, Tone } from '@xihan-ui/core'\nimport type { ContextMenuAnyItemProps, ContextMenuApi, ContextMenuGroupProps, ContextMenuNode, ContextMenuNodeMeta, ContextMenuRadioValue, ContextMenuSchema, MenuApi } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { groupAdjacentRuns, mergeProps } from '@xihan-ui/core'\nimport { computed, defineComponent, h, mergeProps as mergeVueProps, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { mergeIntoChild } from '../../runtime/as-child'\nimport { mergePartProps } from '../../runtime/merge-props'\nimport { XhPortal } from '../../runtime/portal'\nimport { useScrollbars } from '../../runtime/use-scrollbars'\nimport { provideMenu, useMenuContext } from '../menu/context'\nimport { useMenuWithParent } from '../menu/use-menu'\nimport {\n provideContextMenu,\n provideContextMenuGroup,\n provideContextMenuItem,\n provideContextMenuSub,\n useContextMenuContext,\n useContextMenuGroupContext,\n useContextMenuItemContext,\n useContextMenuSubContext,\n} from './context'\nimport { useContextMenu } from './use-context-menu'\n\ntype ContextMenuProps = ContextMenuSchema['props']\n\n/** 默认插槽的载荷:右键菜单的展开态与锚点坐标,以及开合、按坐标展开的命令。 */\nexport type ContextMenuRootSlotProps = Pick<ContextMenuApi, 'open' | 'point' | 'setOpen' | 'openAt' | 'checkboxValue' | 'radioValue' | 'setCheckboxValue' | 'setRadioValue'>\n\n/** 子菜单默认插槽的载荷:该层子菜单自己的展开态与开合命令。 */\nexport type ContextMenuSubSlotProps = Pick<MenuApi, 'open' | 'setOpen'>\n\n/** 代铺条目时可逐槽接管的三个插槽;三个都不写即完全按数据铺。 */\nexport interface ContextMenuItemSlots {\n /** 只填条目的文字槽,其余槽照旧由数据铺。 */\n item?: (node: ContextMenuNodeMeta) => VNode[]\n /** 只接管行首那一格,其余槽照旧由数据铺。 */\n ['item-prefix']?: (node: ContextMenuNodeMeta) => VNode[]\n /** 只接管行尾那一格(计数、徽标、次级图标),其余槽照旧由数据铺。 */\n ['item-suffix']?: (node: ContextMenuNodeMeta) => VNode[]\n}\n\nexport const XhContextMenuRoot = defineComponent({\n name: 'XhContextMenuRoot',\n // 缺省值由 connect 与机器给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<ContextMenuNode[]> },\n checkboxValue: { type: Array as PropType<string[]> },\n defaultCheckboxValue: { type: Array as PropType<string[]> },\n radioValue: { type: Object as PropType<ContextMenuRadioValue> },\n defaultRadioValue: { type: Object as PropType<ContextMenuRadioValue> },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n loop: { type: Boolean, default: undefined },\n typeahead: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<ContextMenuProps['translations']> },\n dir: { type: String as PropType<Direction> },\n longPressDelay: { type: Number },\n /** 整张菜单禁用:不再展开,浏览器自己的右键菜单照常出现。 */\n disabled: { type: Boolean, default: undefined },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n },\n // open-change 携带 { open }、select 携带 { value },update:open 携带裸布尔\n emits: {\n 'open-change': (_details: PayloadOf<ContextMenuProps, 'onOpenChange'>) => true,\n 'select': (_details: PayloadOf<ContextMenuProps, 'onSelect'>) => true,\n 'checkbox-value-change': (_details: PayloadOf<ContextMenuProps, 'onCheckboxValueChange'>) => true,\n 'radio-value-change': (_details: PayloadOf<ContextMenuProps, 'onRadioValueChange'>) => true,\n 'update:open': (_open: PayloadOf<ContextMenuProps, 'onOpenChange'>['open']) => true,\n },\n slots: Object as SlotsType<{\n 'default'?: (props: ContextMenuRootSlotProps) => VNode[]\n 'trigger'?: () => VNode[]\n /** 只填条目的文字槽,标记位、副文本与快捷键照旧由数据铺 */\n 'item'?: (node: ContextMenuNodeMeta) => VNode[]\n /** 只接管行首那一格,其余槽照旧由数据铺 */\n 'item-prefix'?: (node: ContextMenuNodeMeta) => VNode[]\n /** 只接管行尾那一格(计数、徽标、次级图标),其余槽照旧由数据铺 */\n 'item-suffix'?: (node: ContextMenuNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit, expose }) {\n const notifyOpen: ContextMenuProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const notifySelect: ContextMenuProps['onSelect'] = details => emit('select', details)\n const ctx = useContextMenu(\n withXhConfig('context-menu', props) as ContextMenuProps,\n notifyOpen,\n notifySelect,\n details => emit('checkbox-value-change', details),\n details => emit('radio-value-change', details),\n )\n provideContextMenu(ctx)\n // 菜单钉在坐标上,坐标只能由 openAt 交进来。默认插槽那条路从载荷里拿,\n // 只交 collection 的那条路没有载荷,所以同一组命令也从实例上暴露一份。\n expose({\n openAt: (x: number, y: number) => ctx.api.value.openAt(x, y),\n setOpen: (open: boolean) => ctx.api.value.setOpen(open),\n get open() {\n return ctx.api.value.open\n },\n get point() {\n return ctx.api.value.point\n },\n })\n return () => h(\n 'div',\n ctx.api.value.getRootProps() as Record<string, unknown>,\n slots.default\n ? slots.default({\n open: ctx.api.value.open,\n point: ctx.api.value.point,\n setOpen: ctx.api.value.setOpen,\n openAt: ctx.api.value.openAt,\n checkboxValue: ctx.api.value.checkboxValue,\n radioValue: ctx.api.value.radioValue,\n setCheckboxValue: ctx.api.value.setCheckboxValue,\n setRadioValue: ctx.api.value.setRadioValue,\n })\n : props.collection\n ? renderDefaultTree(ctx.api.value.collection, slots.trigger?.() ?? null, { 'item': slots.item, 'item-prefix': slots['item-prefix'], 'item-suffix': slots['item-suffix'] })\n : [],\n )\n },\n})\n\nexport const XhContextMenuTrigger = defineComponent({\n name: 'XhContextMenuTrigger',\n // 直通属性自己合:Vue 默认把作者的处理器排在部件的后面,这里改成作者先跑\n inheritAttrs: false,\n props: {\n /** 借用作者的子节点作为触发器,不再渲染自己的包裹元素;子节点须恰好一个。 */\n asChild: Boolean,\n },\n setup(props, { slots, attrs }) {\n const ctx = useContextMenuContext()\n // 触发区渲染为 div,语义由 connect 打上的 ARIA 属性给出\n return () => {\n const part = mergePartProps({\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n }, attrs)\n const children = slots.default?.()\n // asChild:把触发器属性合到作者的节点上,不再自己渲染包裹元素\n if (props.asChild) {\n const merged = mergeIntoChild(children, part, 'context-menu')\n if (merged)\n return merged\n }\n return h('div', part, children)\n }\n },\n})\n\nexport const XhContextMenuPositioner = defineComponent({\n name: 'XhContextMenuPositioner',\n props: {\n /** 本实例的 Portal 容器;优先于应用级配置。 */\n container: { type: Object as PropType<Element> },\n },\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 positioner 上\n inheritAttrs: false,\n setup(props, { slots, attrs }) {\n const ctx = useContextMenuContext()\n // 条目列表的自绘条:与 content 同级、绝对定位不占布局,壳是这层已经 fixed 的 positioner\n // 浮层里的条子走 4px 档\n const bars = useScrollbars({ scrollable: () => ctx.contentRef.value, props: { size: 'sm' } })\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value, source: ctx.triggerRef }, () => [\n h('div', {\n ...mergeVueProps(ctx.api.value.getPositionerProps() as Record<string, unknown>, attrs),\n ref: (el: unknown) => { ctx.positionerRef.value = el as HTMLElement },\n }, [...(slots.default?.() ?? []), ...bars.render()]),\n ])\n },\n})\n\nexport const XhContextMenuContent = defineComponent({\n name: 'XhContextMenuContent',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n return () => h('div', {\n ...ctx.api.value.getContentProps() as Record<string, unknown>,\n // 收起跟着退场闸门走:皮肤刻意没给 content 补 [hidden]{display:none}(补了退场\n // 就一帧都播不出来),所以真正的收起落成内联 display——节点始终留在原地\n style: ctx.visible.value ? undefined : { display: 'none' },\n ref: (el: unknown) => { ctx.contentRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhContextMenuGroup = defineComponent({\n name: 'XhContextMenuGroup',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useContextMenuContext()\n const group = computed<ContextMenuGroupProps>(() => ({ value: props.value }))\n provideContextMenuGroup({ group })\n return () => h('div', ctx.api.value.getGroupProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuRadioGroup = defineComponent({\n name: 'XhContextMenuRadioGroup',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useContextMenuContext()\n const group = computed<ContextMenuGroupProps>(() => ({ value: props.value }))\n provideContextMenuGroup({ group })\n return () => h('div', ctx.api.value.getRadioGroupProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuGroupLabel = defineComponent({\n name: 'XhContextMenuGroupLabel',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { group } = useContextMenuGroupContext()\n return () => h('span', ctx.api.value.getGroupLabelProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nfunction createContextMenuItemComponent(name: string, kind: 'item' | 'checkbox' | 'radio'): ReturnType<typeof defineComponent> {\n return defineComponent({\n name,\n props: {\n value: { type: String, required: true },\n disabled: { type: Boolean, default: undefined },\n closeOnSelect: { type: Boolean, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useContextMenuContext()\n const radioGroup = kind === 'radio' ? useContextMenuGroupContext() : null\n const item = computed<ContextMenuAnyItemProps>(() => kind === 'radio'\n ? { value: props.value, disabled: props.disabled, closeOnSelect: props.closeOnSelect, kind, group: radioGroup!.group.value.value }\n : kind === 'checkbox'\n ? { value: props.value, disabled: props.disabled, closeOnSelect: props.closeOnSelect, kind }\n : { value: props.value, disabled: props.disabled, kind })\n provideContextMenuItem({ item })\n // 本条目持有焦点时,value 变更按新值重报焦点条目,卸载时上报焦点丢失\n const itemEl = ref<HTMLElement | null>(null)\n watch(() => props.value, (next, prev) => {\n if (next === prev)\n return\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'ITEM.FOCUS', value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n // 根已停机时不再送事件\n if (service.getStatus() !== 'Started')\n return\n // 按「本节点当下正持有焦点」判定,不按 value 比对\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'ITEM.LOST' })\n })\n return () => {\n const declaration = item.value\n const part = declaration.kind === 'checkbox'\n ? ctx.api.value.getCheckboxItemProps(declaration)\n : declaration.kind === 'radio'\n ? ctx.api.value.getRadioItemProps(declaration)\n : ctx.api.value.getItemProps(declaration)\n return h('div', { ...part as Record<string, unknown>, ref: itemEl }, slots.default?.())\n }\n },\n })\n}\n\nexport const XhContextMenuItem = /* @__PURE__ */ createContextMenuItemComponent('XhContextMenuItem', 'item')\nexport const XhContextMenuCheckboxItem = /* @__PURE__ */ createContextMenuItemComponent('XhContextMenuCheckboxItem', 'checkbox')\nexport const XhContextMenuRadioItem = /* @__PURE__ */ createContextMenuItemComponent('XhContextMenuRadioItem', 'radio')\n\n/**\n * 右键菜单中的子菜单:子层运行一台 submenu 模式的 menu 状态机,触发条目由\n * XhContextMenuSubTrigger 渲染为父层条目与子层触发器的双重身份。\n * 子层内部使用 XhMenu 系部件(再往深嵌套即 menu 嵌套 menu)。本身不渲染节点。\n */\nexport const XhContextMenuSub = defineComponent({\n name: 'XhContextMenuSub',\n props: {\n /** 它在父右键菜单中的条目身份。 */\n value: { type: String, required: true },\n disabled: { type: Boolean, default: undefined },\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n loop: { type: Boolean, default: undefined },\n openOnHover: { type: Boolean, default: undefined },\n hoverOpenDelay: { type: Number },\n /** 文字方向;默认继承父层。子层被迁移到浮层落点,无法继承父层的方向。 */\n dir: { type: String as PropType<Direction> },\n /** 语气;默认继承父层。子层是浮层落点下的同级节点,CSS 私有槽无法继承。 */\n tone: { type: String as PropType<Tone> },\n /** 尺寸;默认继承父层,理由同 tone。 */\n size: { type: String as PropType<Size> },\n hoverCloseDelay: { type: Number },\n },\n slots: Object as SlotsType<{\n default?: (props: ContextMenuSubSlotProps) => VNode[]\n }>,\n setup(props, { slots }) {\n const parent = useContextMenuContext()\n const sub = useMenuWithParent(\n {\n ...props,\n submenu: true,\n dir: props.dir ?? parent.service.prop('dir'),\n tone: props.tone ?? parent.service.prop('tone'),\n size: props.size ?? parent.service.prop('size'),\n },\n undefined,\n parent.tree,\n )\n // 子树内的 XhMenu 系部件都归子机器\n provideMenu(sub)\n provideContextMenuSub({ parent, value: props.value, disabled: props.disabled })\n // 父层收起(Escape、外点、选中)时本层跟着收,层层传导\n watch(() => parent.api.value.open, (open) => {\n if (!open)\n sub.api.value.setOpen(false)\n })\n return () => slots.default?.({ open: sub.api.value.open, setOpen: sub.api.value.setOpen })\n },\n})\n\nexport const XhContextMenuSubTrigger = defineComponent({\n name: 'XhContextMenuSubTrigger',\n setup(_, { slots }) {\n const handle = useContextMenuSubContext()\n const sub = useMenuContext()\n return () => h('div', {\n // 合并序=子先父后:父层的 data-scope/data-part 胜出,父层的方向键与选中照常认它\n ...mergeProps(\n sub.api.value.getSubmenuTriggerProps({ value: handle.value, disabled: handle.disabled }) as Record<string, unknown>,\n handle.parent.api.value.getItemProps({ value: handle.value, disabled: handle.disabled }) as Record<string, unknown>,\n ),\n // 子菜单的定位锚点就是这一条\n ref: (el: unknown) => {\n sub.triggerRef.value = el as HTMLElement\n },\n }, slots.default?.())\n },\n})\n\nexport const XhContextMenuItemText = defineComponent({\n name: 'XhContextMenuItemText',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { item } = useContextMenuItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuItemIndicator = defineComponent({\n name: 'XhContextMenuItemIndicator',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { item } = useContextMenuItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目中的副文本,排在文字下一行 */\nexport const XhContextMenuItemDescription = defineComponent({\n name: 'XhContextMenuItemDescription',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { item } = useContextMenuItemContext()\n return () => h('span', ctx.api.value.getItemDescriptionProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目中的快捷键提示,贴行尾;纯装饰,读屏从条目文字取意 */\nexport const XhContextMenuItemShortcut = defineComponent({\n name: 'XhContextMenuItemShortcut',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { item } = useContextMenuItemContext()\n return () => h('span', ctx.api.value.getItemShortcutProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目行尾的作者内容(计数、徽标、次级图标);家族只管落位,不规定字号与颜色 */\nexport const XhContextMenuItemSuffix = defineComponent({\n name: 'XhContextMenuItemSuffix',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { item } = useContextMenuItemContext()\n return () => h('span', ctx.api.value.getItemSuffixProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuSeparator = defineComponent({\n name: 'XhContextMenuSeparator',\n setup() {\n const ctx = useContextMenuContext()\n return () => h('div', ctx.api.value.getSeparatorProps() as Record<string, unknown>)\n },\n})\n\nexport const XhContextMenuArrow = defineComponent({\n name: 'XhContextMenuArrow',\n setup() {\n const ctx = useContextMenuContext()\n return () => h('div', ctx.api.value.getArrowProps() as Record<string, unknown>)\n },\n})\n\n/** 一段连续的同组条目;不分组的条目各自单独成段。 */\n/**\n * 未写默认插槽时按 collection 铺开的整套结构,作者只提供数据。\n * 与手写部件产出的 DOM 完全一致,需要修改结构时写默认插槽,行为不变。\n * 触发区中放置的内容由作者决定,经 trigger 插槽给出。\n */\nfunction renderDefaultTree(\n collection: readonly ContextMenuNodeMeta[],\n trigger: (VNode | string)[] | null,\n itemSlots: ContextMenuItemSlots,\n): VNode[] {\n return [\n h(XhContextMenuTrigger, null, () => trigger ?? []),\n h(XhContextMenuPositioner, null, () => [\n h(XhContextMenuContent, null, () => renderNodes(collection, itemSlots)),\n ]),\n ]\n}\n\n/** content 的内容:分组段铺为 group,段首的分隔线落在 group 外面。 */\nfunction renderNodes(\n collection: readonly ContextMenuNodeMeta[],\n itemSlots: ContextMenuItemSlots,\n): VNode[] {\n return groupAdjacentRuns(collection, node => node.group).flatMap((run, runIndex) => {\n const head = run[0]\n // 首条上的标记不产出分隔线:菜单开头不留一道空隔\n const lead = runIndex > 0 && head.separatorBefore\n ? [h(XhContextMenuSeparator, { key: `separator:${head.value}` })]\n : []\n if (head.group == null)\n return [...lead, renderItem(head, itemSlots)]\n const groupLabel = run.find(node => node.groupLabel != null)?.groupLabel ?? null\n return [\n ...lead,\n h(head.kind === 'radio' ? XhContextMenuRadioGroup : XhContextMenuGroup, { key: `group:${head.group}`, value: head.group }, () => [\n ...(groupLabel != null ? [h(XhContextMenuGroupLabel, null, () => groupLabel)] : []),\n ...run.flatMap((node, index) => [\n ...(index > 0 && node.separatorBefore ? [h(XhContextMenuSeparator, { key: `separator:${node.value}` })] : []),\n renderItem(node, itemSlots),\n ]),\n ]),\n ]\n })\n}\n\n/**\n * 单个条目:标记位排在文字前面,未提供标记位时不铺该部件。\n * `item-prefix` / `item-suffix` 插槽各接管首尾一格,其余槽照旧由数据铺;\n * 行首那一格与数据里的 `indicator` 同一个部件,插槽在场时以它为准。\n */\nfunction renderItem(\n meta: ContextMenuNodeMeta,\n itemSlots: ContextMenuItemSlots,\n): VNode {\n const prefix = itemSlots['item-prefix']\n const suffix = itemSlots['item-suffix']\n const Item = meta.kind === 'checkbox' ? XhContextMenuCheckboxItem : meta.kind === 'radio' ? XhContextMenuRadioItem : XhContextMenuItem\n return h(Item, { key: meta.value, value: meta.value, closeOnSelect: meta.closeOnSelect }, () => [\n ...(prefix\n ? [h(XhContextMenuItemIndicator, null, () => prefix(meta))]\n : meta.indicator != null\n ? [h(XhContextMenuItemIndicator, null, () => meta.indicator)]\n : meta.kind !== 'item' ? [h(XhContextMenuItemIndicator)] : []),\n h(XhContextMenuItemText, null, () => itemSlots.item?.(meta) ?? meta.label),\n ...(meta.description != null ? [h(XhContextMenuItemDescription, null, () => meta.description)] : []),\n ...(meta.shortcut != null ? [h(XhContextMenuItemShortcut, null, () => meta.shortcut)] : []),\n ...(suffix ? [h(XhContextMenuItemSuffix, null, () => suffix(meta))] : []),\n ])\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"context-menu.js","names":["mergeVueProps","mergeProps"],"sources":["../../../src/components/context-menu/context-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// 提供 context menu 相关实现。\n\nimport type { Direction, Placement, Size, Tone } from '@xihan-ui/core'\nimport type { ContextMenuAnyItemProps, ContextMenuApi, ContextMenuGroupProps, ContextMenuNode, ContextMenuNodeMeta, ContextMenuRadioValue, ContextMenuSchema, MenuApi, MenuNode } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { groupAdjacentRuns, mergeProps } from '@xihan-ui/core'\nimport { computed, defineComponent, h, mergeProps as mergeVueProps, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { mergeIntoChild } from '../../runtime/as-child'\nimport { mergePartProps } from '../../runtime/merge-props'\nimport { XhPortal } from '../../runtime/portal'\nimport { useScrollbars } from '../../runtime/use-scrollbars'\nimport { provideMenu, useMenuContext } from '../menu/context'\nimport { MenuDefaultNodes, XhMenuContent, XhMenuPositioner } from '../menu/menu'\nimport { useMenuWithParent } from '../menu/use-menu'\nimport {\n provideContextMenu,\n provideContextMenuGroup,\n provideContextMenuItem,\n provideContextMenuSub,\n useContextMenuContext,\n useContextMenuGroupContext,\n useContextMenuItemContext,\n useContextMenuSubContext,\n} from './context'\nimport { useContextMenu } from './use-context-menu'\n\ntype ContextMenuProps = ContextMenuSchema['props']\n\n/** 默认插槽的载荷:右键菜单的展开态与锚点坐标,以及开合、按坐标展开的命令。 */\nexport type ContextMenuRootSlotProps = Pick<ContextMenuApi, 'open' | 'point' | 'setOpen' | 'openAt' | 'checkboxValue' | 'radioValue' | 'setCheckboxValue' | 'setRadioValue'>\n\n/** 子菜单默认插槽的载荷:该层子菜单自己的展开态与开合命令。 */\nexport type ContextMenuSubSlotProps = Pick<MenuApi, 'open' | 'setOpen'>\n\n/** 代铺条目时可逐槽接管的三个插槽;三个都不写即完全按数据铺。 */\nexport interface ContextMenuItemSlots {\n /** 只填条目的文字槽,其余槽照旧由数据铺。 */\n item?: (node: ContextMenuNodeMeta) => VNode[]\n /** 只接管行首那一格,其余槽照旧由数据铺。 */\n ['item-prefix']?: (node: ContextMenuNodeMeta) => VNode[]\n /** 只接管行尾那一格(计数、徽标、次级图标),其余槽照旧由数据铺。 */\n ['item-suffix']?: (node: ContextMenuNodeMeta) => VNode[]\n}\n\nexport const XhContextMenuRoot = defineComponent({\n name: 'XhContextMenuRoot',\n // 缺省值由 connect 与机器给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<ContextMenuNode[]> },\n checkboxValue: { type: Array as PropType<string[]> },\n defaultCheckboxValue: { type: Array as PropType<string[]> },\n radioValue: { type: Object as PropType<ContextMenuRadioValue> },\n defaultRadioValue: { type: Object as PropType<ContextMenuRadioValue> },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n loop: { type: Boolean, default: undefined },\n typeahead: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<ContextMenuProps['translations']> },\n dir: { type: String as PropType<Direction> },\n longPressDelay: { type: Number },\n /** 整张菜单禁用:不再展开,浏览器自己的右键菜单照常出现。 */\n disabled: { type: Boolean, default: undefined },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n },\n // open-change 携带 { open }、select 携带 { value },update:open 携带裸布尔\n emits: {\n 'open-change': (_details: PayloadOf<ContextMenuProps, 'onOpenChange'>) => true,\n 'select': (_details: PayloadOf<ContextMenuProps, 'onSelect'>) => true,\n 'checkbox-value-change': (_details: PayloadOf<ContextMenuProps, 'onCheckboxValueChange'>) => true,\n 'radio-value-change': (_details: PayloadOf<ContextMenuProps, 'onRadioValueChange'>) => true,\n 'update:open': (_open: PayloadOf<ContextMenuProps, 'onOpenChange'>['open']) => true,\n },\n slots: Object as SlotsType<{\n 'default'?: (props: ContextMenuRootSlotProps) => VNode[]\n 'trigger'?: () => VNode[]\n /** 只填条目的文字槽,标记位、副文本与快捷键照旧由数据铺 */\n 'item'?: (node: ContextMenuNodeMeta) => VNode[]\n /** 只接管行首那一格,其余槽照旧由数据铺 */\n 'item-prefix'?: (node: ContextMenuNodeMeta) => VNode[]\n /** 只接管行尾那一格(计数、徽标、次级图标),其余槽照旧由数据铺 */\n 'item-suffix'?: (node: ContextMenuNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit, expose }) {\n const notifyOpen: ContextMenuProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const notifySelect: ContextMenuProps['onSelect'] = details => emit('select', details)\n const ctx = useContextMenu(\n withXhConfig('context-menu', props) as ContextMenuProps,\n notifyOpen,\n notifySelect,\n details => emit('checkbox-value-change', details),\n details => emit('radio-value-change', details),\n )\n provideContextMenu(ctx)\n // 菜单钉在坐标上,坐标只能由 openAt 交进来。默认插槽那条路从载荷里拿,\n // 只交 collection 的那条路没有载荷,所以同一组命令也从实例上暴露一份。\n expose({\n openAt: (x: number, y: number) => ctx.api.value.openAt(x, y),\n setOpen: (open: boolean) => ctx.api.value.setOpen(open),\n get open() {\n return ctx.api.value.open\n },\n get point() {\n return ctx.api.value.point\n },\n })\n return () => h(\n 'div',\n ctx.api.value.getRootProps() as Record<string, unknown>,\n slots.default\n ? slots.default({\n open: ctx.api.value.open,\n point: ctx.api.value.point,\n setOpen: ctx.api.value.setOpen,\n openAt: ctx.api.value.openAt,\n checkboxValue: ctx.api.value.checkboxValue,\n radioValue: ctx.api.value.radioValue,\n setCheckboxValue: ctx.api.value.setCheckboxValue,\n setRadioValue: ctx.api.value.setRadioValue,\n })\n : props.collection\n ? renderDefaultTree(ctx.api.value.collection, slots.trigger?.() ?? null, { 'item': slots.item, 'item-prefix': slots['item-prefix'], 'item-suffix': slots['item-suffix'] })\n : [],\n )\n },\n})\n\nexport const XhContextMenuTrigger = defineComponent({\n name: 'XhContextMenuTrigger',\n // 直通属性自己合:Vue 默认把作者的处理器排在部件的后面,这里改成作者先跑\n inheritAttrs: false,\n props: {\n /** 借用作者的子节点作为触发器,不再渲染自己的包裹元素;子节点须恰好一个。 */\n asChild: Boolean,\n },\n setup(props, { slots, attrs }) {\n const ctx = useContextMenuContext()\n // 触发区渲染为 div,语义由 connect 打上的 ARIA 属性给出\n return () => {\n const part = mergePartProps({\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n }, attrs)\n const children = slots.default?.()\n // asChild:把触发器属性合到作者的节点上,不再自己渲染包裹元素\n if (props.asChild) {\n const merged = mergeIntoChild(children, part, 'context-menu')\n if (merged)\n return merged\n }\n return h('div', part, children)\n }\n },\n})\n\nexport const XhContextMenuPositioner = defineComponent({\n name: 'XhContextMenuPositioner',\n props: {\n /** 本实例的 Portal 容器;优先于应用级配置。 */\n container: { type: Object as PropType<Element> },\n },\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 positioner 上\n inheritAttrs: false,\n setup(props, { slots, attrs }) {\n const ctx = useContextMenuContext()\n // 条目列表的自绘条:与 content 同级、绝对定位不占布局,壳是这层已经 fixed 的 positioner\n // 浮层里的条子走 4px 档\n const bars = useScrollbars({ scrollable: () => ctx.contentRef.value, props: { size: 'sm' } })\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value, source: ctx.triggerRef, present: ctx.visible.value }, () => [\n h('div', {\n ...mergeVueProps(ctx.api.value.getPositionerProps() as Record<string, unknown>, attrs),\n ref: (el: unknown) => { ctx.positionerRef.value = el as HTMLElement },\n }, [...(slots.default?.() ?? []), ...bars.render()]),\n ])\n },\n})\n\nexport const XhContextMenuContent = defineComponent({\n name: 'XhContextMenuContent',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n return () => h('div', {\n ...ctx.api.value.getContentProps() as Record<string, unknown>,\n // 收起跟着退场闸门走:皮肤刻意没给 content 补 [hidden]{display:none}(补了退场\n // 就一帧都播不出来),所以真正的收起落成内联 display——节点始终留在原地\n style: ctx.visible.value ? undefined : { display: 'none' },\n ref: (el: unknown) => { ctx.contentRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhContextMenuGroup = defineComponent({\n name: 'XhContextMenuGroup',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useContextMenuContext()\n const group = computed<ContextMenuGroupProps>(() => ({ value: props.value }))\n provideContextMenuGroup({ group })\n return () => h('div', ctx.api.value.getGroupProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuRadioGroup = defineComponent({\n name: 'XhContextMenuRadioGroup',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useContextMenuContext()\n const group = computed<ContextMenuGroupProps>(() => ({ value: props.value }))\n provideContextMenuGroup({ group })\n return () => h('div', ctx.api.value.getRadioGroupProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuGroupLabel = defineComponent({\n name: 'XhContextMenuGroupLabel',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { group } = useContextMenuGroupContext()\n return () => h('span', ctx.api.value.getGroupLabelProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nfunction createContextMenuItemComponent(name: string, kind: 'item' | 'checkbox' | 'radio'): ReturnType<typeof defineComponent> {\n return defineComponent({\n name,\n props: {\n value: { type: String, required: true },\n disabled: { type: Boolean, default: undefined },\n closeOnSelect: { type: Boolean, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useContextMenuContext()\n const radioGroup = kind === 'radio' ? useContextMenuGroupContext() : null\n const item = computed<ContextMenuAnyItemProps>(() => kind === 'radio'\n ? { value: props.value, disabled: props.disabled, closeOnSelect: props.closeOnSelect, kind, group: radioGroup!.group.value.value }\n : kind === 'checkbox'\n ? { value: props.value, disabled: props.disabled, closeOnSelect: props.closeOnSelect, kind }\n : { value: props.value, disabled: props.disabled, kind })\n provideContextMenuItem({ item })\n // 本条目持有焦点时,value 变更按新值重报焦点条目,卸载时上报焦点丢失\n const itemEl = ref<HTMLElement | null>(null)\n watch(() => props.value, (next, prev) => {\n if (next === prev)\n return\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'ITEM.FOCUS', value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n // 根已停机时不再送事件\n if (service.getStatus() !== 'Started')\n return\n // 按「本节点当下正持有焦点」判定,不按 value 比对\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'ITEM.LOST' })\n })\n return () => {\n const declaration = item.value\n const part = declaration.kind === 'checkbox'\n ? ctx.api.value.getCheckboxItemProps(declaration)\n : declaration.kind === 'radio'\n ? ctx.api.value.getRadioItemProps(declaration)\n : ctx.api.value.getItemProps(declaration)\n return h('div', { ...part as Record<string, unknown>, ref: itemEl }, slots.default?.())\n }\n },\n })\n}\n\nexport const XhContextMenuItem = /* @__PURE__ */ createContextMenuItemComponent('XhContextMenuItem', 'item')\nexport const XhContextMenuCheckboxItem = /* @__PURE__ */ createContextMenuItemComponent('XhContextMenuCheckboxItem', 'checkbox')\nexport const XhContextMenuRadioItem = /* @__PURE__ */ createContextMenuItemComponent('XhContextMenuRadioItem', 'radio')\n\n/**\n * 右键菜单中的子菜单:子层运行一台 submenu 模式的 menu 状态机,触发条目由\n * XhContextMenuSubTrigger 渲染为父层条目与子层触发器的双重身份。\n * 子层内部使用 XhMenu 系部件(再往深嵌套即 menu 嵌套 menu)。本身不渲染节点。\n */\nexport const XhContextMenuSub = defineComponent({\n name: 'XhContextMenuSub',\n props: {\n /** 它在父右键菜单中的条目身份。 */\n value: { type: String, required: true },\n disabled: { type: Boolean, default: undefined },\n /** 子层的条目数据:显示文本与禁用的事实源,按数据铺子层时由默认树代填。 */\n collection: { type: Array as PropType<MenuNode[]> },\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n loop: { type: Boolean, default: undefined },\n openOnHover: { type: Boolean, default: undefined },\n hoverOpenDelay: { type: Number },\n /** 文字方向;默认继承父层。子层被迁移到浮层落点,无法继承父层的方向。 */\n dir: { type: String as PropType<Direction> },\n /** 语气;默认继承父层。子层是浮层落点下的同级节点,CSS 私有槽无法继承。 */\n tone: { type: String as PropType<Tone> },\n /** 尺寸;默认继承父层,理由同 tone。 */\n size: { type: String as PropType<Size> },\n hoverCloseDelay: { type: Number },\n },\n slots: Object as SlotsType<{\n default?: (props: ContextMenuSubSlotProps) => VNode[]\n }>,\n setup(props, { slots }) {\n const parent = useContextMenuContext()\n const sub = useMenuWithParent(\n {\n ...props,\n submenu: true,\n dir: props.dir ?? parent.service.prop('dir'),\n tone: props.tone ?? parent.service.prop('tone'),\n size: props.size ?? parent.service.prop('size'),\n },\n undefined,\n parent.tree,\n )\n // 子树内的 XhMenu 系部件都归子机器\n provideMenu(sub)\n provideContextMenuSub({ parent, value: props.value, disabled: props.disabled })\n // 父层收起(Escape、外点、选中)时本层跟着收,层层传导\n watch(() => parent.api.value.open, (open) => {\n if (!open)\n sub.api.value.setOpen(false)\n })\n return () => slots.default?.({ open: sub.api.value.open, setOpen: sub.api.value.setOpen })\n },\n})\n\nexport const XhContextMenuSubTrigger = defineComponent({\n name: 'XhContextMenuSubTrigger',\n setup(_, { slots }) {\n const handle = useContextMenuSubContext()\n const sub = useMenuContext()\n return () => h('div', {\n // 合并序=子先父后:父层的 data-scope/data-part 胜出,父层的方向键与选中照常认它\n ...mergeProps(\n sub.api.value.getSubmenuTriggerProps({ value: handle.value, disabled: handle.disabled }) as Record<string, unknown>,\n handle.parent.api.value.getItemProps({ value: handle.value, disabled: handle.disabled }) as Record<string, unknown>,\n ),\n // 子菜单的定位锚点就是这一条\n ref: (el: unknown) => {\n sub.triggerRef.value = el as HTMLElement\n },\n }, slots.default?.())\n },\n})\n\nexport const XhContextMenuItemText = defineComponent({\n name: 'XhContextMenuItemText',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { item } = useContextMenuItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuItemIndicator = defineComponent({\n name: 'XhContextMenuItemIndicator',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { item } = useContextMenuItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目中的副文本,排在文字下一行 */\nexport const XhContextMenuItemDescription = defineComponent({\n name: 'XhContextMenuItemDescription',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { item } = useContextMenuItemContext()\n return () => h('span', ctx.api.value.getItemDescriptionProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目中的快捷键提示,贴行尾;纯装饰,读屏从条目文字取意 */\nexport const XhContextMenuItemShortcut = defineComponent({\n name: 'XhContextMenuItemShortcut',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { item } = useContextMenuItemContext()\n return () => h('span', ctx.api.value.getItemShortcutProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目行尾的作者内容(计数、徽标、次级图标);家族只管落位,不规定字号与颜色 */\nexport const XhContextMenuItemSuffix = defineComponent({\n name: 'XhContextMenuItemSuffix',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { item } = useContextMenuItemContext()\n return () => h('span', ctx.api.value.getItemSuffixProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuSeparator = defineComponent({\n name: 'XhContextMenuSeparator',\n setup() {\n const ctx = useContextMenuContext()\n return () => h('div', ctx.api.value.getSeparatorProps() as Record<string, unknown>)\n },\n})\n\nexport const XhContextMenuArrow = defineComponent({\n name: 'XhContextMenuArrow',\n setup() {\n const ctx = useContextMenuContext()\n return () => h('div', ctx.api.value.getArrowProps() as Record<string, unknown>)\n },\n})\n\n/** 一段连续的同组条目;不分组的条目各自单独成段。 */\n/**\n * 未写默认插槽时按 collection 铺开的整套结构,作者只提供数据。\n * 与手写部件产出的 DOM 完全一致,需要修改结构时写默认插槽,行为不变。\n * 触发区中放置的内容由作者决定,经 trigger 插槽给出。\n */\nfunction renderDefaultTree(\n collection: readonly ContextMenuNodeMeta[],\n trigger: (VNode | string)[] | null,\n itemSlots: ContextMenuItemSlots,\n): VNode[] {\n return [\n h(XhContextMenuTrigger, null, () => trigger ?? []),\n h(XhContextMenuPositioner, null, () => [\n h(XhContextMenuContent, null, () => renderNodes(collection, itemSlots)),\n ]),\n ]\n}\n\n/** content 的内容:分组段铺为 group,段首的分隔线落在 group 外面。 */\nfunction renderNodes(\n collection: readonly ContextMenuNodeMeta[],\n itemSlots: ContextMenuItemSlots,\n): VNode[] {\n return groupAdjacentRuns(collection, node => node.group).flatMap((run, runIndex) => {\n const head = run[0]\n // 首条上的标记不产出分隔线:菜单开头不留一道空隔\n const lead = runIndex > 0 && head.separatorBefore\n ? [h(XhContextMenuSeparator, { key: `separator:${head.value}` })]\n : []\n if (head.group == null)\n return [...lead, renderItem(head, itemSlots)]\n const groupLabel = run.find(node => node.groupLabel != null)?.groupLabel ?? null\n return [\n ...lead,\n h(head.kind === 'radio' ? XhContextMenuRadioGroup : XhContextMenuGroup, { key: `group:${head.group}`, value: head.group }, () => [\n ...(groupLabel != null ? [h(XhContextMenuGroupLabel, null, () => groupLabel)] : []),\n ...run.flatMap((node, index) => [\n ...(index > 0 && node.separatorBefore ? [h(XhContextMenuSeparator, { key: `separator:${node.value}` })] : []),\n renderItem(node, itemSlots),\n ]),\n ]),\n ]\n })\n}\n\n/**\n * 单个条目:标记位排在文字前面,未提供标记位时不铺该部件。\n * `item-prefix` / `item-suffix` 插槽各接管首尾一格,其余槽照旧由数据铺;\n * 行首那一格与数据里的 `indicator` 同一个部件,插槽在场时以它为准。\n */\nfunction renderItem(\n meta: ContextMenuNodeMeta,\n itemSlots: ContextMenuItemSlots,\n): VNode {\n // 带 children 的条目铺成子菜单:子层跑的是 menu 机器,条目按数据铺、不经本层的插槽\n if (meta.children) {\n return h(XhContextMenuSub, { key: meta.value, value: meta.value, disabled: meta.disabled || undefined, collection: meta.children as MenuNode[] }, () => [\n h(XhContextMenuSubTrigger, null, () => [meta.label]),\n h(XhMenuPositioner, null, () => [h(XhMenuContent, null, () => [h(MenuDefaultNodes)])]),\n ])\n }\n const prefix = itemSlots['item-prefix']\n const suffix = itemSlots['item-suffix']\n const Item = meta.kind === 'checkbox' ? XhContextMenuCheckboxItem : meta.kind === 'radio' ? XhContextMenuRadioItem : XhContextMenuItem\n return h(Item, { key: meta.value, value: meta.value, closeOnSelect: meta.closeOnSelect }, () => [\n ...(prefix\n ? [h(XhContextMenuItemIndicator, null, () => prefix(meta))]\n : meta.indicator != null\n ? [h(XhContextMenuItemIndicator, null, () => meta.indicator)]\n : meta.kind !== 'item' ? [h(XhContextMenuItemIndicator)] : []),\n h(XhContextMenuItemText, null, () => itemSlots.item?.(meta) ?? meta.label),\n ...(meta.description != null ? [h(XhContextMenuItemDescription, null, () => meta.description)] : []),\n ...(meta.shortcut != null ? [h(XhContextMenuItemShortcut, null, () => meta.shortcut)] : []),\n ...(suffix ? [h(XhContextMenuItemSuffix, null, () => suffix(meta))] : []),\n ])\n}\n"],"mappings":"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"}
@@ -59,8 +59,9 @@ declare const XhDateFieldRoot: import("vue").DefineComponent<import("vue").Extra
59
59
  name: {
60
60
  type: StringConstructor;
61
61
  };
62
+ /** 占位。字符串是整条占位:一段都没填、焦点也不在段上时输入行显示这句文字,焦点进到段上即换回段位;对象是逐段的占位串,覆盖内置的 yyyy / mm / dd。 */
62
63
  placeholder: {
63
- type: PropType<SegmentTexts>;
64
+ type: PropType<string | SegmentTexts>;
64
65
  };
65
66
  translations: {
66
67
  type: PropType<DateFieldTranslations>;
@@ -77,6 +78,7 @@ declare const XhDateFieldRoot: import("vue").DefineComponent<import("vue").Extra
77
78
  }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
78
79
  [key: string]: any;
79
80
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
81
+ clear: () => true;
80
82
  'value-change': (_details: PayloadOf<DateFieldProps, "onValueChange">) => true;
81
83
  'update:value': (_value: PayloadOf<DateFieldProps, "onValueChange">["value"]) => true;
82
84
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
@@ -127,8 +129,9 @@ declare const XhDateFieldRoot: import("vue").DefineComponent<import("vue").Extra
127
129
  name: {
128
130
  type: StringConstructor;
129
131
  };
132
+ /** 占位。字符串是整条占位:一段都没填、焦点也不在段上时输入行显示这句文字,焦点进到段上即换回段位;对象是逐段的占位串,覆盖内置的 yyyy / mm / dd。 */
130
133
  placeholder: {
131
- type: PropType<SegmentTexts>;
134
+ type: PropType<string | SegmentTexts>;
132
135
  };
133
136
  translations: {
134
137
  type: PropType<DateFieldTranslations>;
@@ -145,6 +148,7 @@ declare const XhDateFieldRoot: import("vue").DefineComponent<import("vue").Extra
145
148
  }>> & Readonly<{
146
149
  "onValue-change"?: ((_details: import("@xihan-ui/headless").DateFieldValueChangeDetails) => any) | undefined;
147
150
  "onUpdate:value"?: ((_value: string | null) => any) | undefined;
151
+ onClear?: (() => any) | undefined;
148
152
  }>, {
149
153
  required: boolean;
150
154
  invalid: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"date-field.d.ts","names":[],"sources":["../../../src/components/date-field/date-field.ts"],"mappings":";;;;;KAiBK,iBAAiB;KACjB,2BAA2B,KAAK;;KAGzB,yBAAyB,KACnC;;UAce;EACf,SAAS;;cAGE,+BAAe,8BAAA;;IAIC,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;IAKD,MAAA,SAAS;;;;IAEX,MAAA,SAAS;;;IAEX,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;IAML,MAAA,SAAS;;;IACR,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;;;EAIN,iBAAA,UAAA,UAAU;EACZ,iBAAA,QAAA,UAAU;;;IAzBV,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;IAKD,MAAA,SAAS;;;;IAEX,MAAA,SAAS;;;IAEX,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;IAML,MAAA,SAAS;;;IACR,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;;;;;;;;;EAQvB,WAAC,OAAO,2BAA2B;kCAsB/C;cAEW,gCAAgB,0BAAA,oBAAA,4BAAA;;8BAO3B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAM7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAMlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,8BAAA;;IAIQ,MAAA;;;;IAER,MAAA,SAAS;;;;;;IAFD,MAAA;;;;IAER,MAAA,SAAS;;;EAG1B,WAAC,OAAO,8BAA8B;kCAmBlD;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAOlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAMjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
1
+ {"version":3,"file":"date-field.d.ts","names":[],"sources":["../../../src/components/date-field/date-field.ts"],"mappings":";;;;;KAkBK,iBAAiB;KACjB,2BAA2B,KAAK;;KAGzB,yBAAyB,KACnC;;UAce;EACf,SAAS;;cAGE,+BAAe,8BAAA;;IAIC,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;IAKD,MAAA,SAAS;;;;IAEX,MAAA,SAAS;;;IAEX,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;IAOK,MAAA,kBAAkB;;;IAC3B,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;;;;EAKN,iBAAA,UAAA,UAAU;EACZ,iBAAA,QAAA,UAAU;;;IA3BV,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;IAKD,MAAA,SAAS;;;;IAEX,MAAA,SAAS;;;IAEX,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;IAOK,MAAA,kBAAkB;;;IAC3B,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;;;;;;;;;;EASvB,WAAC,OAAO,2BAA2B;kCAsB/C;cAEW,gCAAgB,0BAAA,oBAAA,4BAAA;;8BAO3B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAM7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAMlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,8BAAA;;IAIQ,MAAA;;;;IAER,MAAA,SAAS;;;;;;IAFD,MAAA;;;;IAER,MAAA,SAAS;;;EAG1B,WAAC,OAAO,8BAA8B;kCAmBlD;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAOlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAMjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
@@ -1,4 +1,5 @@
1
1
  import { withXhConfig } from "../../config/config.js";
2
+ import { withHandlers } from "../../runtime/with-handlers.js";
2
3
  import { useFormControlProps } from "../form/use-form-control.js";
3
4
  import { provideDateField, useDateFieldContext } from "./context.js";
4
5
  import { useDateField } from "./use-date-field.js";
@@ -34,13 +35,15 @@ const XhDateFieldRoot = defineComponent({
34
35
  default: void 0
35
36
  },
36
37
  name: { type: String },
37
- placeholder: { type: Object },
38
+ /** 占位。字符串是整条占位:一段都没填、焦点也不在段上时输入行显示这句文字,焦点进到段上即换回段位;对象是逐段的占位串,覆盖内置的 yyyy / mm / dd。 */
39
+ placeholder: { type: [String, Object] },
38
40
  translations: { type: Object },
39
41
  variant: { type: String },
40
42
  tone: { type: String },
41
43
  size: { type: String }
42
44
  },
43
45
  emits: {
46
+ "clear": () => true,
44
47
  "value-change": (_details) => true,
45
48
  "update:value": (_value) => true
46
49
  },
@@ -50,7 +53,7 @@ const XhDateFieldRoot = defineComponent({
50
53
  emit("value-change", details);
51
54
  emit("update:value", details.value);
52
55
  };
53
- const ctx = useDateField(withXhConfig("date-field", useFormControlProps(props)), { onValueChange });
56
+ const ctx = useDateField(withHandlers(withXhConfig("date-field", useFormControlProps(props)), { onClear: () => emit("clear") }), { onValueChange });
54
57
  provideDateField(ctx);
55
58
  return () => h("div", ctx.api.value.getRootProps(), slots.default?.({
56
59
  value: ctx.api.value.value,
@@ -1 +1 @@
1
- {"version":3,"file":"date-field.js","names":[],"sources":["../../../src/components/date-field/date-field.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// 提供 date field 相关实现。\n\nimport type { ControlVariant, Size, Tone } from '@xihan-ui/core'\nimport type { DateFieldApi, DateFieldSchema, DateFieldSegmentState, DateFieldTranslations, DateGranularity, DateHourCycle, DateSegmentSet, DateSegmentType } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, h } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideDateField, useDateFieldContext } from './context'\nimport { useDateField } from './use-date-field'\n\ntype DateFieldProps = DateFieldSchema['props']\ntype SegmentTexts = { readonly [K in DateSegmentType]?: string }\n\n/** 默认插槽的载荷:整份值、逐段投影、填写状态,以及改写与清空的句柄。 */\nexport type DateFieldRootSlotProps = Pick<\n DateFieldApi,\n | 'value'\n | 'valueAsDate'\n | 'segments'\n | 'complete'\n | 'empty'\n | 'outOfRange'\n | 'focusedSegment'\n | 'setValue'\n | 'clear'\n | 'canClear'\n>\n\n/** 段位默认插槽的载荷:本段的投影;下标越界时缺席。 */\nexport interface DateFieldSegmentSlotProps {\n segment: DateFieldSegmentState | undefined\n}\n\nexport const XhDateFieldRoot = defineComponent({\n name: 'XhDateFieldRoot',\n // 缺省值由 connect 给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n value: { type: String as PropType<string | null> },\n defaultValue: { type: String as PropType<string | null> },\n min: { type: String },\n max: { type: String },\n locale: { type: String },\n timeZone: { type: String },\n granularity: { type: String as PropType<DateGranularity> },\n /** 时刻段的小时制,默认 24;12 时小时段收 1-12 并多出上下午段。 */\n hourCycle: { type: Number as PropType<DateHourCycle> },\n // 段集:给了就以它为准,granularity 让路。段位节点仍按下标认段,段集是有序的\n segments: { type: Array as PropType<DateSegmentSet> },\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n invalid: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n name: { type: String },\n placeholder: { type: Object as PropType<SegmentTexts> },\n translations: { type: Object as PropType<DateFieldTranslations> },\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n },\n // value-change 携带 { value },update:value 携带裸串\n emits: {\n 'value-change': (_details: PayloadOf<DateFieldProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<DateFieldProps, 'onValueChange'>['value']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: DateFieldRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const onValueChange: DateFieldProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const ctx = useDateField(withXhConfig('date-field', useFormControlProps(props)) as DateFieldProps, { onValueChange })\n provideDateField(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n value: ctx.api.value.value,\n valueAsDate: ctx.api.value.valueAsDate,\n segments: ctx.api.value.segments,\n complete: ctx.api.value.complete,\n empty: ctx.api.value.empty,\n outOfRange: ctx.api.value.outOfRange,\n focusedSegment: ctx.api.value.focusedSegment,\n setValue: ctx.api.value.setValue,\n clear: ctx.api.value.clear,\n canClear: ctx.api.value.canClear,\n }))\n },\n})\n\nexport const XhDateFieldLabel = defineComponent({\n name: 'XhDateFieldLabel',\n setup(_, { slots }) {\n const ctx = useDateFieldContext()\n // 渲染为 span 而非 label,段位不是可被 for 标注的控件;点标题聚焦由连接层接管\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateFieldControl = defineComponent({\n name: 'XhDateFieldControl',\n setup(_, { slots }) {\n const ctx = useDateFieldContext()\n return () => h('div', ctx.api.value.getControlProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateFieldSegmentGroup = defineComponent({\n name: 'XhDateFieldSegmentGroup',\n setup(_, { slots }) {\n const ctx = useDateFieldContext()\n return () => h('div', ctx.api.value.getSegmentGroupProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateFieldSegment = defineComponent({\n name: 'XhDateFieldSegment',\n props: {\n // 下标由作者声明,是哪一段由 locale 与段集算出;兼收字符串\n index: { type: [Number, String] as PropType<number | string> },\n /** 按段名声明该格。段集中没有该段时它收起;与 index 二选一,两个都写时按段名计算。 */\n segment: { type: String as PropType<DateSegmentType> },\n },\n slots: Object as SlotsType<{\n default?: (props: DateFieldSegmentSlotProps) => VNode[]\n }>,\n setup(props, { slots }) {\n const ctx = useDateFieldContext()\n return () => {\n const api = ctx.api.value\n // 落点由连接层算:按下标还是按段名是同一条路,适配器这边不重写一份\n const declared = props.segment != null\n ? { segment: props.segment }\n : { index: Math.trunc(Number(props.index)) }\n const state = api.segmentOf(declared)\n // 有插槽用插槽,否则渲染连接层算好的段位文本\n return h(\n 'div',\n api.getSegmentProps(declared) as Record<string, unknown>,\n slots.default ? slots.default({ segment: state }) : state?.text,\n )\n }\n },\n})\n\nexport const XhDateFieldClearTrigger = defineComponent({\n name: 'XhDateFieldClearTrigger',\n setup(_, { slots }) {\n const ctx = useDateFieldContext()\n // 没有默认插槽时由皮肤画兜底字形\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateFieldHiddenInput = defineComponent({\n name: 'XhDateFieldHiddenInput',\n setup() {\n const ctx = useDateFieldContext()\n return () => h('input', ctx.api.value.getHiddenInputProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"date-field.js","names":[],"sources":["../../../src/components/date-field/date-field.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// 提供 date field 相关实现。\n\nimport type { ControlVariant, Size, Tone } from '@xihan-ui/core'\nimport type { DateFieldApi, DateFieldSchema, DateFieldSegmentState, DateFieldTranslations, DateGranularity, DateHourCycle, DateSegmentSet, DateSegmentType } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, h } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { withHandlers } from '../../runtime/with-handlers'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideDateField, useDateFieldContext } from './context'\nimport { useDateField } from './use-date-field'\n\ntype DateFieldProps = DateFieldSchema['props']\ntype SegmentTexts = { readonly [K in DateSegmentType]?: string }\n\n/** 默认插槽的载荷:整份值、逐段投影、填写状态,以及改写与清空的句柄。 */\nexport type DateFieldRootSlotProps = Pick<\n DateFieldApi,\n | 'value'\n | 'valueAsDate'\n | 'segments'\n | 'complete'\n | 'empty'\n | 'outOfRange'\n | 'focusedSegment'\n | 'setValue'\n | 'clear'\n | 'canClear'\n>\n\n/** 段位默认插槽的载荷:本段的投影;下标越界时缺席。 */\nexport interface DateFieldSegmentSlotProps {\n segment: DateFieldSegmentState | undefined\n}\n\nexport const XhDateFieldRoot = defineComponent({\n name: 'XhDateFieldRoot',\n // 缺省值由 connect 给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n value: { type: String as PropType<string | null> },\n defaultValue: { type: String as PropType<string | null> },\n min: { type: String },\n max: { type: String },\n locale: { type: String },\n timeZone: { type: String },\n granularity: { type: String as PropType<DateGranularity> },\n /** 时刻段的小时制,默认 24;12 时小时段收 1-12 并多出上下午段。 */\n hourCycle: { type: Number as PropType<DateHourCycle> },\n // 段集:给了就以它为准,granularity 让路。段位节点仍按下标认段,段集是有序的\n segments: { type: Array as PropType<DateSegmentSet> },\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n invalid: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n name: { type: String },\n /** 占位。字符串是整条占位:一段都没填、焦点也不在段上时输入行显示这句文字,焦点进到段上即换回段位;对象是逐段的占位串,覆盖内置的 yyyy / mm / dd。 */\n placeholder: { type: [String, Object] as PropType<string | SegmentTexts> },\n translations: { type: Object as PropType<DateFieldTranslations> },\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n },\n // value-change 携带 { value },update:value 携带裸串\n emits: {\n 'clear': () => true,\n 'value-change': (_details: PayloadOf<DateFieldProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<DateFieldProps, 'onValueChange'>['value']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: DateFieldRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const onValueChange: DateFieldProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const ctx = useDateField(withHandlers(withXhConfig('date-field', useFormControlProps(props)), { onClear: () => emit('clear') }) as DateFieldProps, { onValueChange })\n provideDateField(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n value: ctx.api.value.value,\n valueAsDate: ctx.api.value.valueAsDate,\n segments: ctx.api.value.segments,\n complete: ctx.api.value.complete,\n empty: ctx.api.value.empty,\n outOfRange: ctx.api.value.outOfRange,\n focusedSegment: ctx.api.value.focusedSegment,\n setValue: ctx.api.value.setValue,\n clear: ctx.api.value.clear,\n canClear: ctx.api.value.canClear,\n }))\n },\n})\n\nexport const XhDateFieldLabel = defineComponent({\n name: 'XhDateFieldLabel',\n setup(_, { slots }) {\n const ctx = useDateFieldContext()\n // 渲染为 span 而非 label,段位不是可被 for 标注的控件;点标题聚焦由连接层接管\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateFieldControl = defineComponent({\n name: 'XhDateFieldControl',\n setup(_, { slots }) {\n const ctx = useDateFieldContext()\n return () => h('div', ctx.api.value.getControlProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateFieldSegmentGroup = defineComponent({\n name: 'XhDateFieldSegmentGroup',\n setup(_, { slots }) {\n const ctx = useDateFieldContext()\n return () => h('div', ctx.api.value.getSegmentGroupProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateFieldSegment = defineComponent({\n name: 'XhDateFieldSegment',\n props: {\n // 下标由作者声明,是哪一段由 locale 与段集算出;兼收字符串\n index: { type: [Number, String] as PropType<number | string> },\n /** 按段名声明该格。段集中没有该段时它收起;与 index 二选一,两个都写时按段名计算。 */\n segment: { type: String as PropType<DateSegmentType> },\n },\n slots: Object as SlotsType<{\n default?: (props: DateFieldSegmentSlotProps) => VNode[]\n }>,\n setup(props, { slots }) {\n const ctx = useDateFieldContext()\n return () => {\n const api = ctx.api.value\n // 落点由连接层算:按下标还是按段名是同一条路,适配器这边不重写一份\n const declared = props.segment != null\n ? { segment: props.segment }\n : { index: Math.trunc(Number(props.index)) }\n const state = api.segmentOf(declared)\n // 有插槽用插槽,否则渲染连接层算好的段位文本\n return h(\n 'div',\n api.getSegmentProps(declared) as Record<string, unknown>,\n slots.default ? slots.default({ segment: state }) : state?.text,\n )\n }\n },\n})\n\nexport const XhDateFieldClearTrigger = defineComponent({\n name: 'XhDateFieldClearTrigger',\n setup(_, { slots }) {\n const ctx = useDateFieldContext()\n // 没有默认插槽时由皮肤画兜底字形\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateFieldHiddenInput = defineComponent({\n name: 'XhDateFieldHiddenInput',\n setup() {\n const ctx = useDateFieldContext()\n return () => h('input', ctx.api.value.getHiddenInputProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"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"}
@@ -21,6 +21,15 @@ function useDatePickerCellContext() {
21
21
  if (!ctx) throw new Error("[xh] DatePicker 日期触发器必须用在 XhDatePickerCell 内");
22
22
  return ctx;
23
23
  }
24
+ const TAG_KEY = Symbol.for("xh-date-picker-tag");
25
+ function provideDatePickerTag(ctx) {
26
+ provide(TAG_KEY, ctx);
27
+ }
28
+ function useDatePickerTagContext() {
29
+ const ctx = inject(TAG_KEY, null);
30
+ if (!ctx) throw new Error("[xh] DatePicker 标签子部件必须用在 XhDatePickerTag 内");
31
+ return ctx;
32
+ }
24
33
  function provideDatePickerPanel(ctx) {
25
34
  provide(PANEL_KEY, ctx);
26
35
  }
@@ -28,6 +37,6 @@ function useDatePickerPanelContext() {
28
37
  return inject(PANEL_KEY, FIRST_PANEL);
29
38
  }
30
39
  //#endregion
31
- export { provideDatePicker, provideDatePickerCell, provideDatePickerPanel, useDatePickerCellContext, useDatePickerContext, useDatePickerPanelContext };
40
+ export { provideDatePicker, provideDatePickerCell, provideDatePickerPanel, provideDatePickerTag, useDatePickerCellContext, useDatePickerContext, useDatePickerPanelContext, useDatePickerTagContext };
32
41
 
33
42
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/date-picker/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 { CalendarCellProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { DatePickerContext } from './use-date-picker'\nimport { computed, inject, provide } from 'vue'\n\n/** 格子声明的那一天,供 cell-trigger 复用同一份声明(作者只写一次 value)。 */\nexport interface DatePickerCellContext {\n cell: ComputedRef<CalendarCellProps>\n}\n\n/** 日历声明的面板号,供面板内的标题、网格与格子认领自己属于并排的第几张。 */\nexport interface DatePickerPanelContext {\n index: ComputedRef<number>\n}\n\nconst KEY: InjectionKey<DatePickerContext> = Symbol.for('xh-date-picker')\nconst CELL_KEY: InjectionKey<DatePickerCellContext> = Symbol.for('xh-date-picker-cell')\nconst PANEL_KEY: InjectionKey<DatePickerPanelContext> = Symbol.for('xh-date-picker-panel')\n\n/** 日历未声明面板号时的落点,与单面板时一致。 */\nconst FIRST_PANEL: DatePickerPanelContext = { index: computed(() => 0) }\n\nexport function provideDatePicker(ctx: DatePickerContext): void {\n provide(KEY, ctx)\n}\n\nexport function useDatePickerContext(): DatePickerContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] DatePicker 部件必须用在 XhDatePickerRoot 内')\n return ctx\n}\n\nexport function provideDatePickerCell(ctx: DatePickerCellContext): void {\n provide(CELL_KEY, ctx)\n}\n\nexport function useDatePickerCellContext(): DatePickerCellContext {\n const ctx = inject(CELL_KEY, null)\n if (!ctx)\n throw new Error('[xh] DatePicker 日期触发器必须用在 XhDatePickerCell 内')\n return ctx\n}\n\nexport function provideDatePickerPanel(ctx: DatePickerPanelContext): void {\n provide(PANEL_KEY, ctx)\n}\n\nexport function useDatePickerPanelContext(): DatePickerPanelContext {\n return inject(PANEL_KEY, FIRST_PANEL)\n}\n"],"mappings":";;AAsBA,MAAM,MAAuC,OAAO,IAAI,gBAAgB;AACxE,MAAM,WAAgD,OAAO,IAAI,qBAAqB;AACtF,MAAM,YAAkD,OAAO,IAAI,sBAAsB;;AAGzF,MAAM,cAAsC,EAAE,OAAO,eAAe,CAAC,EAAE;AAEvE,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;AAEA,SAAgB,uBAAuB,KAAmC;CACxE,QAAQ,WAAW,GAAG;AACxB;AAEA,SAAgB,4BAAoD;CAClE,OAAO,OAAO,WAAW,WAAW;AACtC"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/date-picker/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 { CalendarCellProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { DatePickerContext } from './use-date-picker'\nimport { computed, inject, provide } from 'vue'\n\n/** 格子声明的那一天,供 cell-trigger 复用同一份声明(作者只写一次 value)。 */\nexport interface DatePickerCellContext {\n cell: ComputedRef<CalendarCellProps>\n}\n\n/** 日历声明的面板号,供面板内的标题、网格与格子认领自己属于并排的第几张。 */\nexport interface DatePickerPanelContext {\n index: ComputedRef<number>\n}\n\nconst KEY: InjectionKey<DatePickerContext> = Symbol.for('xh-date-picker')\nconst CELL_KEY: InjectionKey<DatePickerCellContext> = Symbol.for('xh-date-picker-cell')\nconst PANEL_KEY: InjectionKey<DatePickerPanelContext> = Symbol.for('xh-date-picker-panel')\n\n/** 日历未声明面板号时的落点,与单面板时一致。 */\nconst FIRST_PANEL: DatePickerPanelContext = { index: computed(() => 0) }\n\nexport function provideDatePicker(ctx: DatePickerContext): void {\n provide(KEY, ctx)\n}\n\nexport function useDatePickerContext(): DatePickerContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] DatePicker 部件必须用在 XhDatePickerRoot 内')\n return ctx\n}\n\nexport function provideDatePickerCell(ctx: DatePickerCellContext): void {\n provide(CELL_KEY, ctx)\n}\n\nexport function useDatePickerCellContext(): DatePickerCellContext {\n const ctx = inject(CELL_KEY, null)\n if (!ctx)\n throw new Error('[xh] DatePicker 日期触发器必须用在 XhDatePickerCell 内')\n return ctx\n}\n\n/** 标签声明的值,供标签中的删除按钮复用同一份声明。 */\nexport interface DatePickerTagContext {\n value: () => string\n}\n\nconst TAG_KEY: InjectionKey<DatePickerTagContext> = Symbol.for('xh-date-picker-tag')\n\nexport function provideDatePickerTag(ctx: DatePickerTagContext): void {\n provide(TAG_KEY, ctx)\n}\n\nexport function useDatePickerTagContext(): DatePickerTagContext {\n const ctx = inject(TAG_KEY, null)\n if (!ctx)\n throw new Error('[xh] DatePicker 标签子部件必须用在 XhDatePickerTag 内')\n return ctx\n}\n\nexport function provideDatePickerPanel(ctx: DatePickerPanelContext): void {\n provide(PANEL_KEY, ctx)\n}\n\nexport function useDatePickerPanelContext(): DatePickerPanelContext {\n return inject(PANEL_KEY, FIRST_PANEL)\n}\n"],"mappings":";;AAsBA,MAAM,MAAuC,OAAO,IAAI,gBAAgB;AACxE,MAAM,WAAgD,OAAO,IAAI,qBAAqB;AACtF,MAAM,YAAkD,OAAO,IAAI,sBAAsB;;AAGzF,MAAM,cAAsC,EAAE,OAAO,eAAe,CAAC,EAAE;AAEvE,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;AAOA,MAAM,UAA8C,OAAO,IAAI,oBAAoB;AAEnF,SAAgB,qBAAqB,KAAiC;CACpE,QAAQ,SAAS,GAAG;AACtB;AAEA,SAAgB,0BAAgD;CAC9D,MAAM,MAAM,OAAO,SAAS,IAAI;CAChC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,6CAA6C;CAC/D,OAAO;AACT;AAEA,SAAgB,uBAAuB,KAAmC;CACxE,QAAQ,WAAW,GAAG;AACxB;AAEA,SAAgB,4BAAoD;CAClE,OAAO,OAAO,WAAW,WAAW;AACtC"}
@@ -1,7 +1,7 @@
1
1
  import { PayloadOf } from "../../runtime/payload.js";
2
2
  import { PropType, SlotsType, VNode } from "vue";
3
3
  import { ControlVariant, Direction, Placement, Size, Tone } from "@xihan-ui/core";
4
- import { CalendarGranularity, CalendarPickerApi, CalendarPickerSelectionMode, CalendarView, DateFieldSegmentState, DatePickerApi, DatePickerPreset, DatePickerPresetState, DatePickerSchema, DateSegmentSet, DateSegmentType, TimeHourCycle, TimeStep, TimeUnavailablePredicate } from "@xihan-ui/headless";
4
+ import { CalendarGranularity, CalendarPickerApi, CalendarPickerSelectionMode, CalendarView, DateFieldSegmentState, DatePickerApi, DatePickerPreset, DatePickerPresetState, DatePickerSchema, DateSegmentPlaceholders, DateSegmentSet, DateSegmentType, TimeHourCycle, TimeStep, TimeUnavailablePredicate } from "@xihan-ui/headless";
5
5
  //#region src/components/date-picker/date-picker.d.ts
6
6
  type DatePickerProps = DatePickerSchema['props'];
7
7
  /** 默认插槽的载荷:选择器的开合与选中值、内嵌日历的展示数据、段位,以及改写值的句柄。 */
@@ -51,6 +51,10 @@ declare const XhDatePickerRoot: import("vue").DefineComponent<import("vue").Extr
51
51
  maxSelected: {
52
52
  type: NumberConstructor;
53
53
  };
54
+ /** 多选时输入行最多摆几枚标签,其余折进 +N 那一枚;默认 3。 */
55
+ maxTagCount: {
56
+ type: NumberConstructor;
57
+ };
54
58
  /** 选择粒度;与 selectionMode 正交,输入行铺设哪几段也跟随它。 */
55
59
  granularity: {
56
60
  type: PropType<CalendarGranularity>;
@@ -63,6 +67,10 @@ declare const XhDatePickerRoot: import("vue").DefineComponent<import("vue").Extr
63
67
  segments: {
64
68
  type: PropType<DateSegmentSet>;
65
69
  };
70
+ /** 占位。字符串是整条占位:一段都没填、焦点也不在段上时输入行显示这句文字,焦点进到段上即换回段位;对象是逐段的占位串,覆盖内置的 yyyy / mm / dd。 */
71
+ placeholder: {
72
+ type: PropType<string | DateSegmentPlaceholders>;
73
+ };
66
74
  /** 并排展示几页;默认 1。 */
67
75
  visibleCount: {
68
76
  type: NumberConstructor;
@@ -150,6 +158,7 @@ declare const XhDatePickerRoot: import("vue").DefineComponent<import("vue").Extr
150
158
  }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
151
159
  [key: string]: any;
152
160
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
161
+ clear: () => true;
153
162
  'value-change': (_details: PayloadOf<DatePickerProps, "onValueChange">) => true;
154
163
  'open-change': (_details: PayloadOf<DatePickerProps, "onOpenChange">) => true;
155
164
  'focused-value-change': (_details: PayloadOf<DatePickerProps, "onFocusedValueChange">) => true;
@@ -192,6 +201,10 @@ declare const XhDatePickerRoot: import("vue").DefineComponent<import("vue").Extr
192
201
  maxSelected: {
193
202
  type: NumberConstructor;
194
203
  };
204
+ /** 多选时输入行最多摆几枚标签,其余折进 +N 那一枚;默认 3。 */
205
+ maxTagCount: {
206
+ type: NumberConstructor;
207
+ };
195
208
  /** 选择粒度;与 selectionMode 正交,输入行铺设哪几段也跟随它。 */
196
209
  granularity: {
197
210
  type: PropType<CalendarGranularity>;
@@ -204,6 +217,10 @@ declare const XhDatePickerRoot: import("vue").DefineComponent<import("vue").Extr
204
217
  segments: {
205
218
  type: PropType<DateSegmentSet>;
206
219
  };
220
+ /** 占位。字符串是整条占位:一段都没填、焦点也不在段上时输入行显示这句文字,焦点进到段上即换回段位;对象是逐段的占位串,覆盖内置的 yyyy / mm / dd。 */
221
+ placeholder: {
222
+ type: PropType<string | DateSegmentPlaceholders>;
223
+ };
207
224
  /** 并排展示几页;默认 1。 */
208
225
  visibleCount: {
209
226
  type: NumberConstructor;
@@ -291,6 +308,7 @@ declare const XhDatePickerRoot: import("vue").DefineComponent<import("vue").Extr
291
308
  }>> & Readonly<{
292
309
  "onValue-change"?: ((_details: import("@xihan-ui/headless").DatePickerValueChangeDetails) => any) | undefined;
293
310
  "onUpdate:value"?: ((_value: string[]) => any) | undefined;
311
+ onClear?: (() => any) | undefined;
294
312
  "onOpen-change"?: ((_details: import("@xihan-ui/headless").DatePickerOpenChangeDetails) => any) | undefined;
295
313
  "onUpdate:open"?: ((_open: boolean) => any) | undefined;
296
314
  "onFocused-value-change"?: ((_details: import("@xihan-ui/headless").DatePickerFocusChangeDetails) => any) | undefined;
@@ -315,6 +333,41 @@ declare const XhDatePickerLabel: import("vue").DefineComponent<{}, () => VNode<i
315
333
  declare const XhDatePickerControl: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
316
334
  [key: string]: any;
317
335
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
336
+ /** 标签文字所在的块(tag 的 label):截断规则挂在这一层。 */
337
+ declare const XhDatePickerTagLabel: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
338
+ [key: string]: any;
339
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
340
+ /** 标签中的删除按钮:即所在标签那份 tag 的 close-trigger,可及名使用 translations.deleteItem;点按摘掉所在标签的选中值,焦点不动。 */
341
+ declare const XhDatePickerItemDeleteTrigger: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
342
+ [key: string]: any;
343
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
344
+ /** 多选时一个选中值一个标签,即库内 tag 的 root(data-scope="tag"):语气、尺寸与禁用从日期选择器传下,形态按盒的面派生。 */
345
+ declare const XhDatePickerTag: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
346
+ /** 它代表哪个选中值。 */
347
+ value: {
348
+ type: StringConstructor;
349
+ required: true;
350
+ };
351
+ }>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
352
+ [key: string]: any;
353
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
354
+ /** 它代表哪个选中值。 */
355
+ value: {
356
+ type: StringConstructor;
357
+ required: true;
358
+ };
359
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
360
+ /** 折叠的标签合成的一个标签:同样是 tag 的 root;有插槽时使用插槽,否则显示 +N。没有折叠的标签时连接层写 hidden。 */
361
+ declare const XhDatePickerOverflowTag: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
362
+ [key: string]: any;
363
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
364
+ /**
365
+ * 标签行:多选时放在盒里、触发钮之前;没有选中时承载整条占位,单选时连接层给 hidden。
366
+ * 不写插槽即按 tags 铺出带删除钮的标签与 +N 那一枚,写了插槽由作者自己铺。
367
+ */
368
+ declare const XhDatePickerTagList: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
369
+ [key: string]: any;
370
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
318
371
  declare const XhDatePickerSegmentGroup: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
319
372
  [key: string]: any;
320
373
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -546,7 +599,9 @@ declare const XhDatePickerCellTrigger: import("vue").DefineComponent<{}, () => V
546
599
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
547
600
  declare const XhDatePickerHiddenInput: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
548
601
  [key: string]: any;
549
- }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
602
+ }> | VNode<import("vue").RendererNode, import("vue").RendererElement, {
603
+ [key: string]: any;
604
+ }>[], {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
550
605
  //#endregion
551
- export { DatePickerPresetsSlotProps, DatePickerRootSlotProps, DatePickerSegmentSlotProps, XhDatePickerCalendar, XhDatePickerCell, XhDatePickerCellTrigger, XhDatePickerClearTrigger, XhDatePickerConfirmTrigger, XhDatePickerContent, XhDatePickerControl, XhDatePickerGrid, XhDatePickerGridBody, XhDatePickerGridHead, XhDatePickerHeader, XhDatePickerHeading, XhDatePickerHeadingMonthTrigger, XhDatePickerHeadingYearTrigger, XhDatePickerHiddenInput, XhDatePickerLabel, XhDatePickerNextTrigger, XhDatePickerNextYearTrigger, XhDatePickerPositioner, XhDatePickerPreset, XhDatePickerPresetGroup, XhDatePickerPrevTrigger, XhDatePickerPrevYearTrigger, XhDatePickerRoot, XhDatePickerSegment, XhDatePickerSegmentGroup, XhDatePickerTimePanel, XhDatePickerTrigger, XhDatePickerWeekDay, XhDatePickerWeekNumber, XhDatePickerWeekRow };
606
+ export { DatePickerPresetsSlotProps, DatePickerRootSlotProps, DatePickerSegmentSlotProps, XhDatePickerCalendar, XhDatePickerCell, XhDatePickerCellTrigger, XhDatePickerClearTrigger, XhDatePickerConfirmTrigger, XhDatePickerContent, XhDatePickerControl, XhDatePickerGrid, XhDatePickerGridBody, XhDatePickerGridHead, XhDatePickerHeader, XhDatePickerHeading, XhDatePickerHeadingMonthTrigger, XhDatePickerHeadingYearTrigger, XhDatePickerHiddenInput, XhDatePickerItemDeleteTrigger, XhDatePickerLabel, XhDatePickerNextTrigger, XhDatePickerNextYearTrigger, XhDatePickerOverflowTag, XhDatePickerPositioner, XhDatePickerPreset, XhDatePickerPresetGroup, XhDatePickerPrevTrigger, XhDatePickerPrevYearTrigger, XhDatePickerRoot, XhDatePickerSegment, XhDatePickerSegmentGroup, XhDatePickerTag, XhDatePickerTagLabel, XhDatePickerTagList, XhDatePickerTimePanel, XhDatePickerTrigger, XhDatePickerWeekDay, XhDatePickerWeekNumber, XhDatePickerWeekRow };
552
607
  //# sourceMappingURL=date-picker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"date-picker.d.ts","names":[],"sources":["../../../src/components/date-picker/date-picker.ts"],"mappings":"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"}
1
+ {"version":3,"file":"date-picker.d.ts","names":[],"sources":["../../../src/components/date-picker/date-picker.ts"],"mappings":"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"}