@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":"date-range-picker.js","names":[],"sources":["../../../src/components/date-range-picker/date-range-picker.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 date range picker 相关实现。\n\nimport type { ControlVariant, Direction, Placement, Size, Tone } from '@xihan-ui/core'\nimport type {\n CalendarCellProps,\n CalendarGranularity,\n CalendarRangePickerApi,\n CalendarView,\n DateFieldSegmentState,\n DatePickerTimeUnit,\n DateRangePickerApi,\n DateRangePickerEndIndex,\n DateRangePickerPreset,\n DateRangePickerPresetState,\n DateRangePickerSchema,\n DateSegmentSet,\n DateSegmentType,\n TimeHourCycle,\n TimeStep,\n TimeUnavailablePredicate,\n} from '@xihan-ui/headless'\nimport type { ComputedRef, PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { dateRangePickerFieldAt, resolveDateRangePickerFieldIndex, resolveDateRangePickerPanelIndex } from '@xihan-ui/headless'\nimport { computed, defineComponent, h, mergeProps, onUpdated, ref } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { XhPortal } from '../../runtime/portal'\nimport { slotPaints } from '../../runtime/slot-content'\nimport { useScrollbars } from '../../runtime/use-scrollbars'\nimport { useFieldLabelWiring, useFieldStateWiring } from '../field/use-field-control'\nimport { useFormControlProps } from '../form/use-form-control'\nimport {\n provideDateRangePicker,\n provideDateRangePickerCell,\n provideDateRangePickerPanel,\n provideDateRangePickerSegmentGroup,\n useDateRangePickerCellContext,\n useDateRangePickerContext,\n useDateRangePickerPanelContext,\n useDateRangePickerSegmentGroupContext,\n} from './context'\nimport { useDateRangePickerWithRoot } from './use-date-range-picker'\n\ntype DateRangePickerProps = DateRangePickerSchema['props']\n\n/**\n * 部件属于并排的第几张面板:自己写了即按自己写的,未写时跟随所在的日历。\n * 兼收字符串以支持模板中写 index=\"1\"。\n */\nfunction usePanelIndex(props: { index?: number | string }): ComputedRef<number> {\n const panel = useDateRangePickerPanelContext()\n return computed(() => resolveDateRangePickerPanelIndex(props.index, panel.index.value))\n}\n\n/** 默认插槽的载荷:选择器的开合与两端、内嵌范围日历的展示数据、两组段位,以及改写值的句柄。 */\nexport type DateRangePickerRootSlotProps\n = & Pick<\n DateRangePickerApi,\n | 'open'\n | 'value'\n | 'start'\n | 'end'\n | 'periodValue'\n | 'focusedValue'\n | 'canClear'\n | 'setOpen'\n | 'setValue'\n | 'clear'\n >\n & Pick<\n CalendarRangePickerApi,\n | 'visibleMonth'\n | 'panels'\n | 'periods'\n | 'weeks'\n | 'weekDays'\n | 'headingLabel'\n | 'canGoPrev'\n | 'canGoNext'\n >\n & {\n /** 起点组段位。 */\n segments: DateFieldSegmentState[]\n /** 终点组段位。 */\n endSegments: DateFieldSegmentState[]\n }\n\n/** 段位默认插槽的载荷:本段的投影;下标越界时缺席。 */\nexport interface DateRangePickerSegmentSlotProps {\n segment: DateFieldSegmentState | undefined\n}\n\n/** 快捷选项列默认插槽的载荷:逐条的投影,作者据此自行铺设条目。 */\nexport interface DateRangePickerPresetsSlotProps {\n presets: readonly DateRangePickerPresetState[]\n}\n\nexport const XhDateRangePickerRoot = defineComponent({\n name: 'XhDateRangePickerRoot',\n // 有 connect / machine 兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n /** 区间两端 [start, end];空缺的一端用空串占位。 */\n value: { type: Array as PropType<string[]> },\n defaultValue: { type: Array as PropType<string[]> },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n min: { type: String },\n max: { type: String },\n locale: { type: String },\n /** 周首日,0 = 星期日 … 6 = 星期六;不给按 locale。只改日历的表头、行首与 Home / End,月份名与星期名仍按 locale。 */\n firstDayOfWeek: { type: Number },\n timeZone: { type: String },\n /** 选择粒度;两组输入行铺设哪几段也跟随它。 */\n granularity: { type: String as PropType<CalendarGranularity> },\n /** 面板当前所处的层级;给定即受控,默认跟随 granularity。 */\n activeView: { type: String as PropType<CalendarView> },\n /** 输入行铺设哪几段;未提供时按 granularity 推导。 */\n segments: { type: Array as PropType<DateSegmentSet> },\n /** 并排展示几页;默认 1,起止常跨月时可设为 2。 */\n visibleCount: { type: Number },\n /** 日历恒渲染六行,默认开启。关闭后翻页时浮层高度会随月份变化。 */\n fixedWeeks: { type: Boolean, default: undefined },\n /** 初始聚焦日,同时决定展开时先落在哪一页;未提供时退回起点,再退回今天。 */\n defaultFocusedValue: { type: String },\n /** 快捷选项;提供后浮层中多出一列,日期要在自己的 computed 中计算后再传入。 */\n presets: { type: Array as PropType<DateRangePickerPreset[]> },\n isDateUnavailable: { type: Function as PropType<(value: string, anchor: string | null) => boolean> },\n /** 允许跨过不可用的日期;默认关闭,落下起点后只能选到两侧最近的不可用日为止。 */\n allowsNonContiguousRanges: { type: Boolean, default: undefined },\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 // 终点那份隐藏输入的表单名;不给即终点不参与提交\n endName: { type: String },\n // 两组段位各自的读屏名字与快捷选项列的名字\n translations: { type: Object as PropType<DateRangePickerProps['translations']> },\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n /** 文字方向;浮层迁移到落点后无法继承作者子树上的方向,需要 RTL 时显式提供。 */\n dir: { type: String as PropType<Direction> },\n closeOnSelect: { type: Boolean, default: undefined },\n /** 一体化时间:两端升格为日期时间,起止各多出一组时间列,由确认按钮收口;只在按天挑时生效。 */\n showTime: { type: Boolean, default: undefined },\n timeGranularity: { type: String as PropType<DateRangePickerProps['timeGranularity']> },\n /** showTime 的小时制,默认 24;12 时多出上下午列与上下午段。 */\n hourCycle: { type: Number as PropType<TimeHourCycle> },\n /** showTime 时间列按单位的步进:`{ hour?, minute?, second? }`。 */\n timeStep: { type: Object as PropType<TimeStep> },\n /** showTime 时间列的逐格可选性:时列按 24 小时制给值,第三个参数带这一端已选的时分、日期与端号。 */\n isTimeUnavailable: { type: Function as PropType<TimeUnavailablePredicate> },\n /** 只点日期时起止各补的时刻,例如 ['00:00:00', '23:59:59']。 */\n defaultTime: { type: Array as unknown as PropType<[string, string]> },\n /** 当前编辑哪一端;给定即受控,未给时每次展开按入口重定。 */\n activeIndex: { type: Number as PropType<DateRangePickerEndIndex> },\n },\n // *-change 携带 details 对象,update:* 携带裸值;值恒为 [start, end],只填了终点时是 ['', end]\n emits: {\n 'value-change': (_details: PayloadOf<DateRangePickerProps, 'onValueChange'>) => true,\n 'open-change': (_details: PayloadOf<DateRangePickerProps, 'onOpenChange'>) => true,\n 'focused-value-change': (_details: PayloadOf<DateRangePickerProps, 'onFocusedValueChange'>) => true,\n 'active-view-change': (_details: PayloadOf<DateRangePickerProps, 'onActiveViewChange'>) => true,\n 'update:value': (_value: PayloadOf<DateRangePickerProps, 'onValueChange'>['value']) => true,\n 'update:open': (_open: PayloadOf<DateRangePickerProps, 'onOpenChange'>['open']) => true,\n 'update:activeView': (_view: PayloadOf<DateRangePickerProps, 'onActiveViewChange'>['activeView']) => true,\n 'active-index-change': (_details: PayloadOf<DateRangePickerProps, 'onActiveIndexChange'>) => true,\n 'update:activeIndex': (_index: PayloadOf<DateRangePickerProps, 'onActiveIndexChange'>['activeIndex']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: DateRangePickerRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const rootRef = ref<HTMLElement | null>(null)\n const notifyValue: DateRangePickerProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyOpen: DateRangePickerProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n // 聚焦日只对外播报,不提供 v-model\n const notifyFocus: DateRangePickerProps['onFocusedValueChange'] = details => emit('focused-value-change', details)\n const notifyActiveView: DateRangePickerProps['onActiveViewChange'] = (details) => {\n emit('active-view-change', details)\n emit('update:activeView', details.activeView)\n }\n const notifyActiveIndex: DateRangePickerProps['onActiveIndexChange'] = (details) => {\n emit('active-index-change', details)\n emit('update:activeIndex', details.activeIndex)\n }\n const ctx = useDateRangePickerWithRoot(withXhConfig('date-range-picker', useFormControlProps(props)) as DateRangePickerProps, {\n onValueChange: notifyValue,\n onOpenChange: notifyOpen,\n onFocusedValueChange: notifyFocus,\n onActiveViewChange: notifyActiveView,\n onActiveIndexChange: notifyActiveIndex,\n }, rootRef)\n provideDateRangePicker(ctx)\n // 网格与段位由作者照插槽里的 weeks / segments 自行渲染\n return () => h('div', { ...ctx.api.value.getRootProps() as Record<string, unknown>, ref: rootRef }, slots.default?.({\n open: ctx.api.value.open,\n value: ctx.api.value.value,\n start: ctx.api.value.start,\n end: ctx.api.value.end,\n periodValue: ctx.api.value.periodValue,\n focusedValue: ctx.api.value.focusedValue,\n visibleMonth: ctx.api.value.calendar.visibleMonth,\n panels: ctx.api.value.calendar.panels,\n periods: ctx.api.value.calendar.periods,\n weeks: ctx.api.value.calendar.weeks,\n weekDays: ctx.api.value.calendar.weekDays,\n headingLabel: ctx.api.value.calendar.headingLabel,\n canGoPrev: ctx.api.value.calendar.canGoPrev,\n canGoNext: ctx.api.value.calendar.canGoNext,\n segments: ctx.api.value.field.segments,\n endSegments: ctx.api.value.fieldEnd.segments,\n canClear: ctx.api.value.canClear,\n setOpen: ctx.api.value.setOpen,\n setValue: ctx.api.value.setValue,\n clear: ctx.api.value.clear,\n }))\n },\n})\n\nexport const XhDateRangePickerLabel = defineComponent({\n name: 'XhDateRangePickerLabel',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n // 渲染为 span 而非 label,点击聚焦由连接层接管\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerControl = defineComponent({\n name: 'XhDateRangePickerControl',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('div', {\n ...ctx.api.value.getControlProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.controlRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerSegmentGroup = defineComponent({\n name: 'XhDateRangePickerSegmentGroup',\n props: {\n // 组号:0 起点、1 终点,兼收字符串以支持模板里写 index=\"1\"\n index: { type: [Number, String] as PropType<number | string>, default: 0 },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const index = computed<0 | 1>(() => resolveDateRangePickerFieldIndex(props.index))\n // 组内的段位与隐藏输入据此认领起止\n provideDateRangePickerSegmentGroup({ index })\n // role=group 的分段容器,也是换段时的查询边界\n return () => h(\n 'div',\n ctx.api.value.getSegmentGroupProps({ index: index.value }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhDateRangePickerSegment = defineComponent({\n name: 'XhDateRangePickerSegment',\n props: {\n // 段位下标,兼收字符串以支持模板里写 index=\"0\"\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: DateRangePickerSegmentSlotProps) => VNode[]\n }>,\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const group = useDateRangePickerSegmentGroupContext()\n return () => {\n const field = dateRangePickerFieldAt(ctx.api.value, group.index.value)\n // 落点由连接层算:按下标还是按段名是同一条路,适配器这边不重写一份\n const declared = props.segment != null\n ? { segment: props.segment }\n : { index: Math.trunc(Number(props.index)) }\n const state = field.segmentOf(declared)\n // 有插槽用插槽,否则渲染连接层算好的段位文本\n return h(\n 'div',\n field.getSegmentProps(declared) as Record<string, unknown>,\n slots.default ? slots.default({ segment: state }) : state?.text,\n )\n }\n },\n})\n\nexport const XhDateRangePickerRangeSeparator = defineComponent({\n name: 'XhDateRangePickerRangeSeparator',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h(\n 'span',\n ctx.api.value.getRangeSeparatorProps() as Record<string, unknown>,\n slots.default?.() ?? '-',\n )\n },\n})\n\nexport const XhDateRangePickerClearTrigger = defineComponent({\n name: 'XhDateRangePickerClearTrigger',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerTrigger = defineComponent({\n name: 'XhDateRangePickerTrigger',\n setup(_, { slots }) {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useDateRangePickerContext()\n return () => h('button', fieldLabel.value({ ...fieldWiring.value, ...ctx.api.value.getTriggerProps() as Record<string, unknown> }), slots.default?.())\n },\n})\n\nexport const XhDateRangePickerPositioner = defineComponent({\n name: 'XhDateRangePickerPositioner',\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 = useDateRangePickerContext()\n // 浮层面板的自绘条:与 content 同级、绝对定位不占布局,壳是这层已经 fixed 的 positioner;\n // 面板皮肤两轴都滚,条子走浮层 4px 档\n const bars = useScrollbars({\n scrollable: () => ctx.contentRef.value,\n scope: ctx.services.root.scope,\n axes: ['vertical', 'horizontal'],\n props: () => ({ dir: (ctx.api.value.getPositionerProps() as { dir?: Direction }).dir, size: 'sm' }),\n })\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => {\n const target = props.container ?? ctx.portalTarget.value\n return h(XhPortal, {\n to: target,\n source: ctx.controlRef,\n // SSR 与客户端首帧都还没有真实 root:保持同一原地结构,绑定 Scope 后再搬运。\n disabled: props.container == null && typeof target === 'string',\n }, () => [\n h('div', {\n ...mergeProps(ctx.api.value.getPositionerProps() as Record<string, unknown>, attrs),\n ref: (el: unknown) => { ctx.positionerRef.value = el as HTMLElement },\n }, [...(slots.default?.() ?? []), ...bars.render()]),\n ])\n }\n },\n})\n\nexport const XhDateRangePickerContent = defineComponent({\n name: 'XhDateRangePickerContent',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\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\n// 以下是内嵌范围日历的角色节点,DOM 上带 data-scope=\"calendar-range-picker\",行为取自本组件持有的日历机器\n\nexport const XhDateRangePickerCalendar = defineComponent({\n name: 'XhDateRangePickerCalendar',\n props: {\n /** 并排的第几张面板,默认 0。写在这里,面板内的标题、网格与格子就不必各写一遍。 */\n index: { type: [Number, String], default: 0 },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n provideDateRangePickerPanel({ index: usePanelIndex(props) })\n // 内嵌日历的挂载点,同时是日历的根节点\n return () => h('div', ctx.api.value.getCalendarProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerPresetGroup = defineComponent({\n name: 'XhDateRangePickerPresetGroup',\n slots: Object as SlotsType<{\n /** 自行铺设条目;未写时按 presets 数据自动铺设,两者产出的 DOM 一致。 */\n default?: (props: DateRangePickerPresetsSlotProps) => VNode[]\n }>,\n // 根是片段(选项列节点 + 贴层的条子),Vue 不会把直通属性合上去:作者写的 class、style 与 data-* 自己接住落到列节点上\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n const ctx = useDateRangePickerContext()\n const presetGroupRef = ref<HTMLElement | null>(null)\n // 快捷选项列自己滚(窄视口横排横滚、宽视口竖排竖滚):两轴的条子贴在它的盒子上、紧跟在它后面\n const bars = useScrollbars({\n scrollable: () => presetGroupRef.value,\n anchor: 'layer',\n axes: ['vertical', 'horizontal'],\n props: () => ({ dir: (ctx.api.value.getPositionerProps() as { dir?: Direction }).dir, size: 'sm' }),\n })\n onUpdated(() => bars.measure())\n return () => {\n const api = ctx.api.value\n const authored = slots.default?.({ presets: api.presets })\n return [\n h(\n 'div',\n {\n ...mergeProps(api.getPresetGroupProps() as Record<string, unknown>, attrs),\n ref: (el: unknown) => { presetGroupRef.value = el as HTMLElement },\n },\n slotPaints(authored)\n ? authored\n : api.presets.map(preset => h(\n 'div',\n { ...api.getPresetProps({ value: preset.value }) as Record<string, unknown>, key: preset.value },\n preset.label,\n )),\n ),\n ...bars.render(),\n ]\n }\n },\n})\n\nexport const XhDateRangePickerPreset = defineComponent({\n name: 'XhDateRangePickerPreset',\n props: {\n /** 该条目的身份,与 presets 数据中的 value 逐字对应。 */\n value: { type: String, required: true },\n },\n slots: Object as SlotsType<{\n /** 条目内容;未写时使用数据中的 label。 */\n default?: () => VNode[]\n }>,\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => {\n const api = ctx.api.value\n const authored = slots.default?.()\n return h(\n 'div',\n api.getPresetProps({ value: props.value }) as Record<string, unknown>,\n slotPaints(authored) ? authored : api.presets.find(p => p.value === props.value)?.label,\n )\n }\n },\n})\n\n/** 一列时间选项连同贴在它盒子上的竖条:每列一台滚动条机器,列数随精度与小时制变时组件实例跟着增减。 */\nconst XhDateRangePickerTimeColumnHost = defineComponent({\n name: 'XhDateRangePickerTimeColumnHost',\n props: {\n index: { type: Number as PropType<DateRangePickerEndIndex>, required: true },\n unit: { type: String as PropType<DatePickerTimeUnit>, required: true },\n },\n setup(props) {\n const ctx = useDateRangePickerContext()\n const timeColumnRef = ref<HTMLElement | null>(null)\n // 定高的时间列自己竖滚:条子贴在本列的盒子上、紧跟在它后面(浮层 4px 档)\n const bars = useScrollbars({\n scrollable: () => timeColumnRef.value,\n anchor: 'layer',\n props: () => ({ dir: (ctx.api.value.getPositionerProps() as { dir?: Direction }).dir, size: 'sm' }),\n })\n onUpdated(() => bars.measure())\n return () => {\n const api = ctx.api.value\n const column = api.timeColumnGroups[props.index].columns.find(item => item.unit === props.unit)\n if (!column)\n return null\n return [\n h(\n 'div',\n {\n ...api.getTimeColumnProps({ index: props.index, unit: column.unit }) as Record<string, unknown>,\n ref: (el: unknown) => { timeColumnRef.value = el as HTMLElement },\n },\n column.options.map(option =>\n h(\n 'div',\n { ...api.getTimeItemProps({ index: props.index, unit: column.unit, value: option }) as Record<string, unknown>, key: option },\n api.getTimeItemText({ unit: column.unit, value: option }),\n ),\n ),\n ),\n ...bars.render(),\n ]\n }\n },\n})\n\nexport const XhDateRangePickerTimePanel = defineComponent({\n name: 'XhDateRangePickerTimePanel',\n setup() {\n const ctx = useDateRangePickerContext()\n // 起止两组时间列整组自动铺:每组一个外壳、一行小标题与时/分[/秒][/上下午]各一列;没开 showTime 时整组带 hidden\n return () => ctx.api.value.timeColumnGroups.map(group =>\n h('div', { ...ctx.api.value.getColumnGroupProps({ index: group.index }) as Record<string, unknown>, key: group.index }, [\n h('div', ctx.api.value.getColumnGroupLabelProps({ index: group.index }) as Record<string, unknown>, group.label),\n ...group.columns.map(column =>\n h(XhDateRangePickerTimeColumnHost, { index: group.index, unit: column.unit, key: column.unit }),\n ),\n ]),\n )\n },\n})\n\nexport const XhDateRangePickerConfirmTrigger = defineComponent({\n name: 'XhDateRangePickerConfirmTrigger',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('button', ctx.api.value.getConfirmTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerHeader = defineComponent({\n name: 'XhDateRangePickerHeader',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('div', ctx.api.value.calendar.getHeaderProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerPrevYearTrigger = defineComponent({\n name: 'XhDateRangePickerPrevYearTrigger',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('button', ctx.api.value.calendar.getPrevYearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerPrevTrigger = defineComponent({\n name: 'XhDateRangePickerPrevTrigger',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('button', ctx.api.value.calendar.getPrevTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerNextTrigger = defineComponent({\n name: 'XhDateRangePickerNextTrigger',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('button', ctx.api.value.calendar.getNextTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerNextYearTrigger = defineComponent({\n name: 'XhDateRangePickerNextYearTrigger',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('button', ctx.api.value.calendar.getNextYearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerHeading = defineComponent({\n name: 'XhDateRangePickerHeading',\n props: {\n /** 属于第几个面板;未写时跟随所在的日历。 */\n index: { type: [Number, String] },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const index = usePanelIndex(props)\n // 有插槽用插槽,否则渲染本面板的标题\n return () => h(\n 'div',\n ctx.api.value.calendar.getHeadingProps({ index: index.value }) as Record<string, unknown>,\n slots.default?.() ?? (ctx.api.value.calendar.panels[index.value]?.headingLabel ?? ctx.api.value.calendar.headingLabel),\n )\n },\n})\n\nexport const XhDateRangePickerHeadingYearTrigger = defineComponent({\n name: 'XhDateRangePickerHeadingYearTrigger',\n props: {\n /** 属于第几个面板;未写时跟随所在的日历。 */\n index: { type: [Number, String] },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const index = usePanelIndex(props)\n // 有插槽用插槽,否则渲染标题里年那一截;年视图下它是整个十年跨度\n return () => h(\n 'button',\n ctx.api.value.calendar.getHeadingYearTriggerProps({ index: index.value }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.calendar.panels[index.value]?.headingYear,\n )\n },\n})\n\nexport const XhDateRangePickerHeadingMonthTrigger = defineComponent({\n name: 'XhDateRangePickerHeadingMonthTrigger',\n props: {\n /** 属于第几个面板;未写时跟随所在的日历。 */\n index: { type: [Number, String] },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const index = usePanelIndex(props)\n return () => h(\n 'button',\n ctx.api.value.calendar.getHeadingMonthTriggerProps({ index: index.value }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.calendar.panels[index.value]?.headingMonth,\n )\n },\n})\n\nexport const XhDateRangePickerGrid = defineComponent({\n name: 'XhDateRangePickerGrid',\n props: {\n /** 属于第几个面板;未写时跟随所在的日历。 */\n index: { type: [Number, String] },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const index = usePanelIndex(props)\n return () => h(\n 'div',\n {\n ...ctx.api.value.calendar.getGridProps({ index: index.value }) as Record<string, unknown>,\n // 键盘在首个网格上收口;其余面板只渲染,方向键仍能跨面板走(落点按值现查)\n ref: index.value === 0 ? ctx.gridRef : undefined,\n },\n slots.default?.(),\n )\n },\n})\n\nexport const XhDateRangePickerGridHead = defineComponent({\n name: 'XhDateRangePickerGridHead',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('div', ctx.api.value.calendar.getGridHeadProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerGridBody = defineComponent({\n name: 'XhDateRangePickerGridBody',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('div', ctx.api.value.calendar.getGridBodyProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n// 表头行与日期行共用同一个 role=row\nexport const XhDateRangePickerWeekRow = defineComponent({\n name: 'XhDateRangePickerWeekRow',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('div', ctx.api.value.calendar.getWeekRowProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerWeekNumber = defineComponent({\n name: 'XhDateRangePickerWeekNumber',\n props: {\n /** 该行行首那一天的 ISO 串。 */\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n // 有插槽用插槽,否则显示这一行的周序号\n return () => h(\n 'span',\n ctx.api.value.calendar.getWeekNumberProps({ value: props.value }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.calendar.getWeekNumberText({ value: props.value }),\n )\n },\n})\n\nexport const XhDateRangePickerWeekDay = defineComponent({\n name: 'XhDateRangePickerWeekDay',\n props: {\n // 列序 0-6,兼收字符串\n value: { type: [Number, String] as PropType<number | string>, required: true },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const index = computed(() => Number(props.value))\n return () => h(\n 'span',\n ctx.api.value.calendar.getWeekDayProps({ value: index.value }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.calendar.weekDays[index.value]?.label,\n )\n },\n})\n\nexport const XhDateRangePickerCell = defineComponent({\n name: 'XhDateRangePickerCell',\n props: {\n /** ISO 日期串。 */\n value: { type: String, required: true },\n /**\n * 属于第几个面板;未写时跟随所在的日历。同一天会同时出现在两个面板中\n * (8 月末的几天也铺在 9 月的首行),是否为本月只有连同面板一起看才能判定。\n */\n index: { type: [Number, String] },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const index = usePanelIndex(props)\n const cell = computed<CalendarCellProps>(() => ({ value: props.value, index: index.value }))\n provideDateRangePickerCell({ cell })\n // 不上报格子卸载,翻月后由日历机器按聚焦日重新落点\n return () => h('div', ctx.api.value.calendar.getCellProps(cell.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerCellTrigger = defineComponent({\n name: 'XhDateRangePickerCellTrigger',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n const { cell } = useDateRangePickerCellContext()\n return () => h(\n 'div',\n ctx.api.value.calendar.getCellTriggerProps(cell.value) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhDateRangePickerHiddenInput = defineComponent({\n name: 'XhDateRangePickerHiddenInput',\n props: {\n // 写在分段容器外面时用它指明属于哪一端;写在容器里面不必给,跟着容器走\n index: { type: [Number, String] as PropType<number | string> },\n },\n setup(props) {\n const ctx = useDateRangePickerContext()\n const group = useDateRangePickerSegmentGroupContext()\n return () => {\n const index = props.index === undefined ? group.index.value : resolveDateRangePickerFieldIndex(props.index)\n return h('input', dateRangePickerFieldAt(ctx.api.value, index).getHiddenInputProps() as Record<string, unknown>)\n }\n },\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"date-range-picker.js","names":[],"sources":["../../../src/components/date-range-picker/date-range-picker.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 date range picker 相关实现。\n\nimport type { ControlVariant, Direction, Placement, Size, Tone } from '@xihan-ui/core'\nimport type {\n CalendarCellProps,\n CalendarGranularity,\n CalendarRangePickerApi,\n CalendarView,\n DateFieldSegmentState,\n DatePickerTimeUnit,\n DateRangePickerApi,\n DateRangePickerEndIndex,\n DateRangePickerPreset,\n DateRangePickerPresetState,\n DateRangePickerSchema,\n DateSegmentPlaceholders,\n DateSegmentSet,\n DateSegmentType,\n TimeHourCycle,\n TimeStep,\n TimeUnavailablePredicate,\n} from '@xihan-ui/headless'\nimport type { ComputedRef, PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { dateRangePickerFieldAt, resolveDateRangePickerFieldIndex, resolveDateRangePickerPanelIndex } from '@xihan-ui/headless'\nimport { computed, defineComponent, h, mergeProps, onUpdated, ref } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { XhPortal } from '../../runtime/portal'\nimport { slotPaints } from '../../runtime/slot-content'\nimport { useScrollbars } from '../../runtime/use-scrollbars'\nimport { withHandlers } from '../../runtime/with-handlers'\nimport { useFieldLabelWiring, useFieldStateWiring } from '../field/use-field-control'\nimport { useFormControlProps } from '../form/use-form-control'\nimport {\n provideDateRangePicker,\n provideDateRangePickerCell,\n provideDateRangePickerPanel,\n provideDateRangePickerSegmentGroup,\n useDateRangePickerCellContext,\n useDateRangePickerContext,\n useDateRangePickerPanelContext,\n useDateRangePickerSegmentGroupContext,\n} from './context'\nimport { useDateRangePickerWithRoot } from './use-date-range-picker'\n\ntype DateRangePickerProps = DateRangePickerSchema['props']\n\n/**\n * 部件属于并排的第几张面板:自己写了即按自己写的,未写时跟随所在的日历。\n * 兼收字符串以支持模板中写 index=\"1\"。\n */\nfunction usePanelIndex(props: { index?: number | string }): ComputedRef<number> {\n const panel = useDateRangePickerPanelContext()\n return computed(() => resolveDateRangePickerPanelIndex(props.index, panel.index.value))\n}\n\n/** 默认插槽的载荷:选择器的开合与两端、内嵌范围日历的展示数据、两组段位,以及改写值的句柄。 */\nexport type DateRangePickerRootSlotProps\n = & Pick<\n DateRangePickerApi,\n | 'open'\n | 'value'\n | 'start'\n | 'end'\n | 'periodValue'\n | 'focusedValue'\n | 'canClear'\n | 'setOpen'\n | 'setValue'\n | 'clear'\n >\n & Pick<\n CalendarRangePickerApi,\n | 'visibleMonth'\n | 'panels'\n | 'periods'\n | 'weeks'\n | 'weekDays'\n | 'headingLabel'\n | 'canGoPrev'\n | 'canGoNext'\n >\n & {\n /** 起点组段位。 */\n segments: DateFieldSegmentState[]\n /** 终点组段位。 */\n endSegments: DateFieldSegmentState[]\n }\n\n/** 段位默认插槽的载荷:本段的投影;下标越界时缺席。 */\nexport interface DateRangePickerSegmentSlotProps {\n segment: DateFieldSegmentState | undefined\n}\n\n/** 快捷选项列默认插槽的载荷:逐条的投影,作者据此自行铺设条目。 */\nexport interface DateRangePickerPresetsSlotProps {\n presets: readonly DateRangePickerPresetState[]\n}\n\nexport const XhDateRangePickerRoot = defineComponent({\n name: 'XhDateRangePickerRoot',\n // 有 connect / machine 兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n /** 区间两端 [start, end];空缺的一端用空串占位。 */\n value: { type: Array as PropType<string[]> },\n defaultValue: { type: Array as PropType<string[]> },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n min: { type: String },\n max: { type: String },\n locale: { type: String },\n /** 周首日,0 = 星期日 … 6 = 星期六;不给按 locale。只改日历的表头、行首与 Home / End,月份名与星期名仍按 locale。 */\n firstDayOfWeek: { type: Number },\n timeZone: { type: String },\n /** 选择粒度;两组输入行铺设哪几段也跟随它。 */\n granularity: { type: String as PropType<CalendarGranularity> },\n /** 面板当前所处的层级;给定即受控,默认跟随 granularity。 */\n activeView: { type: String as PropType<CalendarView> },\n /** 输入行铺设哪几段;未提供时按 granularity 推导。 */\n segments: { type: Array as PropType<DateSegmentSet> },\n /** 逐段的占位串,两组段位共用,覆盖内置的 yyyy / mm / dd。 */\n placeholder: { type: Object as PropType<DateSegmentPlaceholders> },\n /** 起点那组段位的整条占位:一段都没填、焦点也不在段上时显示这句文字,焦点进到段上即换回段位。 */\n startPlaceholder: { type: String },\n /** 终点那组段位的整条占位,规则同 startPlaceholder。 */\n endPlaceholder: { type: String },\n /** 并排展示几页;默认 1,起止常跨月时可设为 2。 */\n visibleCount: { type: Number },\n /** 日历恒渲染六行,默认开启。关闭后翻页时浮层高度会随月份变化。 */\n fixedWeeks: { type: Boolean, default: undefined },\n /** 初始聚焦日,同时决定展开时先落在哪一页;未提供时退回起点,再退回今天。 */\n defaultFocusedValue: { type: String },\n /** 快捷选项;提供后浮层中多出一列,日期要在自己的 computed 中计算后再传入。 */\n presets: { type: Array as PropType<DateRangePickerPreset[]> },\n isDateUnavailable: { type: Function as PropType<(value: string, anchor: string | null) => boolean> },\n /** 允许跨过不可用的日期;默认关闭,落下起点后只能选到两侧最近的不可用日为止。 */\n allowsNonContiguousRanges: { type: Boolean, default: undefined },\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 // 终点那份隐藏输入的表单名;不给即终点不参与提交\n endName: { type: String },\n // 两组段位各自的读屏名字与快捷选项列的名字\n translations: { type: Object as PropType<DateRangePickerProps['translations']> },\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n /** 文字方向;浮层迁移到落点后无法继承作者子树上的方向,需要 RTL 时显式提供。 */\n dir: { type: String as PropType<Direction> },\n closeOnSelect: { type: Boolean, default: undefined },\n /** 一体化时间:两端升格为日期时间,起止各多出一组时间列,由确认按钮收口;只在按天挑时生效。 */\n showTime: { type: Boolean, default: undefined },\n timeGranularity: { type: String as PropType<DateRangePickerProps['timeGranularity']> },\n /** showTime 的小时制,默认 24;12 时多出上下午列与上下午段。 */\n hourCycle: { type: Number as PropType<TimeHourCycle> },\n /** showTime 时间列按单位的步进:`{ hour?, minute?, second? }`。 */\n timeStep: { type: Object as PropType<TimeStep> },\n /** showTime 时间列的逐格可选性:时列按 24 小时制给值,第三个参数带这一端已选的时分、日期与端号。 */\n isTimeUnavailable: { type: Function as PropType<TimeUnavailablePredicate> },\n /** 只点日期时起止各补的时刻,例如 ['00:00:00', '23:59:59']。 */\n defaultTime: { type: Array as unknown as PropType<[string, string]> },\n /** 当前编辑哪一端;给定即受控,未给时每次展开按入口重定。 */\n activeIndex: { type: Number as PropType<DateRangePickerEndIndex> },\n },\n // *-change 携带 details 对象,update:* 携带裸值;值恒为 [start, end],只填了终点时是 ['', end]\n emits: {\n 'clear': () => true,\n 'value-change': (_details: PayloadOf<DateRangePickerProps, 'onValueChange'>) => true,\n 'open-change': (_details: PayloadOf<DateRangePickerProps, 'onOpenChange'>) => true,\n 'focused-value-change': (_details: PayloadOf<DateRangePickerProps, 'onFocusedValueChange'>) => true,\n 'active-view-change': (_details: PayloadOf<DateRangePickerProps, 'onActiveViewChange'>) => true,\n 'update:value': (_value: PayloadOf<DateRangePickerProps, 'onValueChange'>['value']) => true,\n 'update:open': (_open: PayloadOf<DateRangePickerProps, 'onOpenChange'>['open']) => true,\n 'update:activeView': (_view: PayloadOf<DateRangePickerProps, 'onActiveViewChange'>['activeView']) => true,\n 'active-index-change': (_details: PayloadOf<DateRangePickerProps, 'onActiveIndexChange'>) => true,\n 'update:activeIndex': (_index: PayloadOf<DateRangePickerProps, 'onActiveIndexChange'>['activeIndex']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: DateRangePickerRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const rootRef = ref<HTMLElement | null>(null)\n const notifyValue: DateRangePickerProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyOpen: DateRangePickerProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n // 聚焦日只对外播报,不提供 v-model\n const notifyFocus: DateRangePickerProps['onFocusedValueChange'] = details => emit('focused-value-change', details)\n const notifyActiveView: DateRangePickerProps['onActiveViewChange'] = (details) => {\n emit('active-view-change', details)\n emit('update:activeView', details.activeView)\n }\n const notifyActiveIndex: DateRangePickerProps['onActiveIndexChange'] = (details) => {\n emit('active-index-change', details)\n emit('update:activeIndex', details.activeIndex)\n }\n const ctx = useDateRangePickerWithRoot(withHandlers(withXhConfig('date-range-picker', useFormControlProps(props)), { onClear: () => emit('clear') }) as DateRangePickerProps, {\n onValueChange: notifyValue,\n onOpenChange: notifyOpen,\n onFocusedValueChange: notifyFocus,\n onActiveViewChange: notifyActiveView,\n onActiveIndexChange: notifyActiveIndex,\n }, rootRef)\n provideDateRangePicker(ctx)\n // 网格与段位由作者照插槽里的 weeks / segments 自行渲染\n return () => h('div', { ...ctx.api.value.getRootProps() as Record<string, unknown>, ref: rootRef }, slots.default?.({\n open: ctx.api.value.open,\n value: ctx.api.value.value,\n start: ctx.api.value.start,\n end: ctx.api.value.end,\n periodValue: ctx.api.value.periodValue,\n focusedValue: ctx.api.value.focusedValue,\n visibleMonth: ctx.api.value.calendar.visibleMonth,\n panels: ctx.api.value.calendar.panels,\n periods: ctx.api.value.calendar.periods,\n weeks: ctx.api.value.calendar.weeks,\n weekDays: ctx.api.value.calendar.weekDays,\n headingLabel: ctx.api.value.calendar.headingLabel,\n canGoPrev: ctx.api.value.calendar.canGoPrev,\n canGoNext: ctx.api.value.calendar.canGoNext,\n segments: ctx.api.value.field.segments,\n endSegments: ctx.api.value.fieldEnd.segments,\n canClear: ctx.api.value.canClear,\n setOpen: ctx.api.value.setOpen,\n setValue: ctx.api.value.setValue,\n clear: ctx.api.value.clear,\n }))\n },\n})\n\nexport const XhDateRangePickerLabel = defineComponent({\n name: 'XhDateRangePickerLabel',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n // 渲染为 span 而非 label,点击聚焦由连接层接管\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerControl = defineComponent({\n name: 'XhDateRangePickerControl',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('div', {\n ...ctx.api.value.getControlProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.controlRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerSegmentGroup = defineComponent({\n name: 'XhDateRangePickerSegmentGroup',\n props: {\n // 组号:0 起点、1 终点,兼收字符串以支持模板里写 index=\"1\"\n index: { type: [Number, String] as PropType<number | string>, default: 0 },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const index = computed<0 | 1>(() => resolveDateRangePickerFieldIndex(props.index))\n // 组内的段位与隐藏输入据此认领起止\n provideDateRangePickerSegmentGroup({ index })\n // role=group 的分段容器,也是换段时的查询边界\n return () => h(\n 'div',\n ctx.api.value.getSegmentGroupProps({ index: index.value }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhDateRangePickerSegment = defineComponent({\n name: 'XhDateRangePickerSegment',\n props: {\n // 段位下标,兼收字符串以支持模板里写 index=\"0\"\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: DateRangePickerSegmentSlotProps) => VNode[]\n }>,\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const group = useDateRangePickerSegmentGroupContext()\n return () => {\n const field = dateRangePickerFieldAt(ctx.api.value, group.index.value)\n // 落点由连接层算:按下标还是按段名是同一条路,适配器这边不重写一份\n const declared = props.segment != null\n ? { segment: props.segment }\n : { index: Math.trunc(Number(props.index)) }\n const state = field.segmentOf(declared)\n // 有插槽用插槽,否则渲染连接层算好的段位文本\n return h(\n 'div',\n field.getSegmentProps(declared) as Record<string, unknown>,\n slots.default ? slots.default({ segment: state }) : state?.text,\n )\n }\n },\n})\n\nexport const XhDateRangePickerRangeSeparator = defineComponent({\n name: 'XhDateRangePickerRangeSeparator',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h(\n 'span',\n ctx.api.value.getRangeSeparatorProps() as Record<string, unknown>,\n slots.default?.() ?? '-',\n )\n },\n})\n\nexport const XhDateRangePickerClearTrigger = defineComponent({\n name: 'XhDateRangePickerClearTrigger',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerTrigger = defineComponent({\n name: 'XhDateRangePickerTrigger',\n setup(_, { slots }) {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useDateRangePickerContext()\n return () => h('button', fieldLabel.value({ ...fieldWiring.value, ...ctx.api.value.getTriggerProps() as Record<string, unknown> }), slots.default?.())\n },\n})\n\nexport const XhDateRangePickerPositioner = defineComponent({\n name: 'XhDateRangePickerPositioner',\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 = useDateRangePickerContext()\n // 浮层面板的自绘条:与 content 同级、绝对定位不占布局,壳是这层已经 fixed 的 positioner;\n // 面板皮肤两轴都滚,条子走浮层 4px 档\n const bars = useScrollbars({\n scrollable: () => ctx.contentRef.value,\n scope: ctx.services.root.scope,\n axes: ['vertical', 'horizontal'],\n props: () => ({ dir: (ctx.api.value.getPositionerProps() as { dir?: Direction }).dir, size: 'sm' }),\n })\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => {\n const target = props.container ?? ctx.portalTarget.value\n return h(XhPortal, {\n to: target,\n source: ctx.controlRef,\n present: ctx.visible.value,\n // SSR 与客户端首帧都还没有真实 root:保持同一原地结构,绑定 Scope 后再搬运。\n disabled: props.container == null && typeof target === 'string',\n }, () => [\n h('div', {\n ...mergeProps(ctx.api.value.getPositionerProps() as Record<string, unknown>, attrs),\n ref: (el: unknown) => { ctx.positionerRef.value = el as HTMLElement },\n }, [...(slots.default?.() ?? []), ...bars.render()]),\n ])\n }\n },\n})\n\nexport const XhDateRangePickerContent = defineComponent({\n name: 'XhDateRangePickerContent',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\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\n// 以下是内嵌范围日历的角色节点,DOM 上带 data-scope=\"calendar-range-picker\",行为取自本组件持有的日历机器\n\nexport const XhDateRangePickerCalendar = defineComponent({\n name: 'XhDateRangePickerCalendar',\n props: {\n /** 并排的第几张面板,默认 0。写在这里,面板内的标题、网格与格子就不必各写一遍。 */\n index: { type: [Number, String], default: 0 },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n provideDateRangePickerPanel({ index: usePanelIndex(props) })\n // 内嵌日历的挂载点,同时是日历的根节点\n return () => h('div', ctx.api.value.getCalendarProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerPresetGroup = defineComponent({\n name: 'XhDateRangePickerPresetGroup',\n slots: Object as SlotsType<{\n /** 自行铺设条目;未写时按 presets 数据自动铺设,两者产出的 DOM 一致。 */\n default?: (props: DateRangePickerPresetsSlotProps) => VNode[]\n }>,\n // 根是片段(选项列节点 + 贴层的条子),Vue 不会把直通属性合上去:作者写的 class、style 与 data-* 自己接住落到列节点上\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n const ctx = useDateRangePickerContext()\n const presetGroupRef = ref<HTMLElement | null>(null)\n // 快捷选项列自己滚(窄视口横排横滚、宽视口竖排竖滚):两轴的条子贴在它的盒子上、紧跟在它后面\n const bars = useScrollbars({\n scrollable: () => presetGroupRef.value,\n anchor: 'layer',\n axes: ['vertical', 'horizontal'],\n props: () => ({ dir: (ctx.api.value.getPositionerProps() as { dir?: Direction }).dir, size: 'sm' }),\n })\n onUpdated(() => bars.measure())\n return () => {\n const api = ctx.api.value\n const authored = slots.default?.({ presets: api.presets })\n return [\n h(\n 'div',\n {\n ...mergeProps(api.getPresetGroupProps() as Record<string, unknown>, attrs),\n ref: (el: unknown) => { presetGroupRef.value = el as HTMLElement },\n },\n slotPaints(authored)\n ? authored\n : api.presets.map(preset => h(\n 'div',\n { ...api.getPresetProps({ value: preset.value }) as Record<string, unknown>, key: preset.value },\n preset.label,\n )),\n ),\n ...bars.render(),\n ]\n }\n },\n})\n\nexport const XhDateRangePickerPreset = defineComponent({\n name: 'XhDateRangePickerPreset',\n props: {\n /** 该条目的身份,与 presets 数据中的 value 逐字对应。 */\n value: { type: String, required: true },\n },\n slots: Object as SlotsType<{\n /** 条目内容;未写时使用数据中的 label。 */\n default?: () => VNode[]\n }>,\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => {\n const api = ctx.api.value\n const authored = slots.default?.()\n return h(\n 'div',\n api.getPresetProps({ value: props.value }) as Record<string, unknown>,\n slotPaints(authored) ? authored : api.presets.find(p => p.value === props.value)?.label,\n )\n }\n },\n})\n\n/** 一列时间选项连同贴在它盒子上的竖条:每列一台滚动条机器,列数随精度与小时制变时组件实例跟着增减。 */\nconst XhDateRangePickerTimeColumnHost = defineComponent({\n name: 'XhDateRangePickerTimeColumnHost',\n props: {\n index: { type: Number as PropType<DateRangePickerEndIndex>, required: true },\n unit: { type: String as PropType<DatePickerTimeUnit>, required: true },\n },\n setup(props) {\n const ctx = useDateRangePickerContext()\n const timeColumnRef = ref<HTMLElement | null>(null)\n // 定高的时间列自己竖滚:条子贴在本列的盒子上、紧跟在它后面(浮层 4px 档)\n const bars = useScrollbars({\n scrollable: () => timeColumnRef.value,\n anchor: 'layer',\n props: () => ({ dir: (ctx.api.value.getPositionerProps() as { dir?: Direction }).dir, size: 'sm' }),\n })\n onUpdated(() => bars.measure())\n return () => {\n const api = ctx.api.value\n const column = api.timeColumnGroups[props.index].columns.find(item => item.unit === props.unit)\n if (!column)\n return null\n return [\n h(\n 'div',\n {\n ...api.getTimeColumnProps({ index: props.index, unit: column.unit }) as Record<string, unknown>,\n ref: (el: unknown) => { timeColumnRef.value = el as HTMLElement },\n },\n column.options.map(option =>\n h(\n 'div',\n { ...api.getTimeItemProps({ index: props.index, unit: column.unit, value: option }) as Record<string, unknown>, key: option },\n api.getTimeItemText({ unit: column.unit, value: option }),\n ),\n ),\n ),\n ...bars.render(),\n ]\n }\n },\n})\n\nexport const XhDateRangePickerTimePanel = defineComponent({\n name: 'XhDateRangePickerTimePanel',\n setup() {\n const ctx = useDateRangePickerContext()\n // 起止两组时间列整组自动铺:每组一个外壳、一行小标题与时/分[/秒][/上下午]各一列;没开 showTime 时整组带 hidden\n return () => ctx.api.value.timeColumnGroups.map(group =>\n h('div', { ...ctx.api.value.getColumnGroupProps({ index: group.index }) as Record<string, unknown>, key: group.index }, [\n h('div', ctx.api.value.getColumnGroupLabelProps({ index: group.index }) as Record<string, unknown>, group.label),\n ...group.columns.map(column =>\n h(XhDateRangePickerTimeColumnHost, { index: group.index, unit: column.unit, key: column.unit }),\n ),\n ]),\n )\n },\n})\n\nexport const XhDateRangePickerConfirmTrigger = defineComponent({\n name: 'XhDateRangePickerConfirmTrigger',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('button', ctx.api.value.getConfirmTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerHeader = defineComponent({\n name: 'XhDateRangePickerHeader',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('div', ctx.api.value.calendar.getHeaderProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerPrevYearTrigger = defineComponent({\n name: 'XhDateRangePickerPrevYearTrigger',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('button', ctx.api.value.calendar.getPrevYearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerPrevTrigger = defineComponent({\n name: 'XhDateRangePickerPrevTrigger',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('button', ctx.api.value.calendar.getPrevTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerNextTrigger = defineComponent({\n name: 'XhDateRangePickerNextTrigger',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('button', ctx.api.value.calendar.getNextTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerNextYearTrigger = defineComponent({\n name: 'XhDateRangePickerNextYearTrigger',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('button', ctx.api.value.calendar.getNextYearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerHeading = defineComponent({\n name: 'XhDateRangePickerHeading',\n props: {\n /** 属于第几个面板;未写时跟随所在的日历。 */\n index: { type: [Number, String] },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const index = usePanelIndex(props)\n // 有插槽用插槽,否则渲染本面板的标题\n return () => h(\n 'div',\n ctx.api.value.calendar.getHeadingProps({ index: index.value }) as Record<string, unknown>,\n slots.default?.() ?? (ctx.api.value.calendar.panels[index.value]?.headingLabel ?? ctx.api.value.calendar.headingLabel),\n )\n },\n})\n\nexport const XhDateRangePickerHeadingYearTrigger = defineComponent({\n name: 'XhDateRangePickerHeadingYearTrigger',\n props: {\n /** 属于第几个面板;未写时跟随所在的日历。 */\n index: { type: [Number, String] },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const index = usePanelIndex(props)\n // 有插槽用插槽,否则渲染标题里年那一截;年视图下它是整个十年跨度\n return () => h(\n 'button',\n ctx.api.value.calendar.getHeadingYearTriggerProps({ index: index.value }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.calendar.panels[index.value]?.headingYear,\n )\n },\n})\n\nexport const XhDateRangePickerHeadingMonthTrigger = defineComponent({\n name: 'XhDateRangePickerHeadingMonthTrigger',\n props: {\n /** 属于第几个面板;未写时跟随所在的日历。 */\n index: { type: [Number, String] },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const index = usePanelIndex(props)\n return () => h(\n 'button',\n ctx.api.value.calendar.getHeadingMonthTriggerProps({ index: index.value }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.calendar.panels[index.value]?.headingMonth,\n )\n },\n})\n\nexport const XhDateRangePickerGrid = defineComponent({\n name: 'XhDateRangePickerGrid',\n props: {\n /** 属于第几个面板;未写时跟随所在的日历。 */\n index: { type: [Number, String] },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const index = usePanelIndex(props)\n return () => h(\n 'div',\n {\n ...ctx.api.value.calendar.getGridProps({ index: index.value }) as Record<string, unknown>,\n // 键盘在首个网格上收口;其余面板只渲染,方向键仍能跨面板走(落点按值现查)\n ref: index.value === 0 ? ctx.gridRef : undefined,\n },\n slots.default?.(),\n )\n },\n})\n\nexport const XhDateRangePickerGridHead = defineComponent({\n name: 'XhDateRangePickerGridHead',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('div', ctx.api.value.calendar.getGridHeadProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerGridBody = defineComponent({\n name: 'XhDateRangePickerGridBody',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('div', ctx.api.value.calendar.getGridBodyProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n// 表头行与日期行共用同一个 role=row\nexport const XhDateRangePickerWeekRow = defineComponent({\n name: 'XhDateRangePickerWeekRow',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n return () => h('div', ctx.api.value.calendar.getWeekRowProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerWeekNumber = defineComponent({\n name: 'XhDateRangePickerWeekNumber',\n props: {\n /** 该行行首那一天的 ISO 串。 */\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n // 有插槽用插槽,否则显示这一行的周序号\n return () => h(\n 'span',\n ctx.api.value.calendar.getWeekNumberProps({ value: props.value }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.calendar.getWeekNumberText({ value: props.value }),\n )\n },\n})\n\nexport const XhDateRangePickerWeekDay = defineComponent({\n name: 'XhDateRangePickerWeekDay',\n props: {\n // 列序 0-6,兼收字符串\n value: { type: [Number, String] as PropType<number | string>, required: true },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const index = computed(() => Number(props.value))\n return () => h(\n 'span',\n ctx.api.value.calendar.getWeekDayProps({ value: index.value }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.calendar.weekDays[index.value]?.label,\n )\n },\n})\n\nexport const XhDateRangePickerCell = defineComponent({\n name: 'XhDateRangePickerCell',\n props: {\n /** ISO 日期串。 */\n value: { type: String, required: true },\n /**\n * 属于第几个面板;未写时跟随所在的日历。同一天会同时出现在两个面板中\n * (8 月末的几天也铺在 9 月的首行),是否为本月只有连同面板一起看才能判定。\n */\n index: { type: [Number, String] },\n },\n setup(props, { slots }) {\n const ctx = useDateRangePickerContext()\n const index = usePanelIndex(props)\n const cell = computed<CalendarCellProps>(() => ({ value: props.value, index: index.value }))\n provideDateRangePickerCell({ cell })\n // 不上报格子卸载,翻月后由日历机器按聚焦日重新落点\n return () => h('div', ctx.api.value.calendar.getCellProps(cell.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDateRangePickerCellTrigger = defineComponent({\n name: 'XhDateRangePickerCellTrigger',\n setup(_, { slots }) {\n const ctx = useDateRangePickerContext()\n const { cell } = useDateRangePickerCellContext()\n return () => h(\n 'div',\n ctx.api.value.calendar.getCellTriggerProps(cell.value) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhDateRangePickerHiddenInput = defineComponent({\n name: 'XhDateRangePickerHiddenInput',\n props: {\n // 写在分段容器外面时用它指明属于哪一端;写在容器里面不必给,跟着容器走\n index: { type: [Number, String] as PropType<number | string> },\n },\n setup(props) {\n const ctx = useDateRangePickerContext()\n const group = useDateRangePickerSegmentGroupContext()\n return () => {\n const index = props.index === undefined ? group.index.value : resolveDateRangePickerFieldIndex(props.index)\n return h('input', dateRangePickerFieldAt(ctx.api.value, index).getHiddenInputProps() as Record<string, unknown>)\n }\n },\n})\n"],"mappings":"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"}
@@ -46,6 +46,11 @@ declare const XhDialogRoot: import("vue").DefineComponent<import("vue").ExtractP
46
46
  type: BooleanConstructor;
47
47
  default: undefined;
48
48
  };
49
+ /** 收起动画播完后卸载内容,默认 true;false 时第一次打开才挂载、此后收起只隐藏,再打开不重挂。 */
50
+ unmountOnExit: {
51
+ type: BooleanConstructor;
52
+ default: undefined;
53
+ };
49
54
  translations: {
50
55
  type: PropType<DialogProps["translations"]>;
51
56
  };
@@ -95,6 +100,11 @@ declare const XhDialogRoot: import("vue").DefineComponent<import("vue").ExtractP
95
100
  type: BooleanConstructor;
96
101
  default: undefined;
97
102
  };
103
+ /** 收起动画播完后卸载内容,默认 true;false 时第一次打开才挂载、此后收起只隐藏,再打开不重挂。 */
104
+ unmountOnExit: {
105
+ type: BooleanConstructor;
106
+ default: undefined;
107
+ };
98
108
  translations: {
99
109
  type: PropType<DialogProps["translations"]>;
100
110
  };
@@ -103,12 +113,13 @@ declare const XhDialogRoot: import("vue").DefineComponent<import("vue").ExtractP
103
113
  "onUpdate:open"?: ((_open: boolean) => any) | undefined;
104
114
  "onExit-complete"?: (() => any) | undefined;
105
115
  }>, {
116
+ unmountOnExit: boolean;
106
117
  open: boolean;
107
118
  defaultOpen: boolean;
108
- modal: boolean;
109
119
  closeOnEscape: boolean;
110
120
  closeOnInteractOutside: boolean;
111
121
  restoreFocus: boolean;
122
+ modal: boolean;
112
123
  role: "dialog" | "alertdialog";
113
124
  draggable: boolean;
114
125
  }, SlotsType<{
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.d.ts","names":[],"sources":["../../../src/components/dialog/dialog.ts"],"mappings":";;;;;KAmBK,cAAc;;KAGP,sBAAsB,KAAK;cAE1B,4BAAY,8BAAA;;;;;;;;;;;IAMG,MAAA;;;;;;;;;;;;;;;;;;;IAKA,MAAA,SAAS;;;IACN,MAAA,SAAS;;;;;;;;IAGJ,MAAA,SAAS;;;;;EAIf,gBAAA,UAAA,UAAU;EACb,gBAAA,OAAA,UAAU;;;;;;;;;;;;;IAdT,MAAA;;;;;;;;;;;;;;;;;;;IAKA,MAAA,SAAS;;;IACN,MAAA,SAAS;;;;;;;;IAGJ,MAAA,SAAS;;;;;;;;;;;;;;;;EAS/B,WAAC,OAAO,wBAAwB;kCAW5C;cAEW,+BAAe,8BAAA;;;;;;;;;;qCAsB1B;cAEW,+BAAe,8BAAA;;;IAIK,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;MA4BxC,oDAAA;cAEW,8BAAc,0BAAA,oBAAA,4BAAA;;8BAMzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAM9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,iCAAiB,0BAAA,oBAAA,4BAAA;;8BAM5B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6BAAa,0BAAA,oBAAA,4BAAA;;8BAMxB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAM9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,4BAAY,0BAAA,oBAAA,4BAAA;;8BAMvB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,8BAAc,0BAAA,oBAAA,4BAAA;;8BAMzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,oCAAoB,0BAAA,oBAAA,4BAAA;;8BAM/B,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
1
+ {"version":3,"file":"dialog.d.ts","names":[],"sources":["../../../src/components/dialog/dialog.ts"],"mappings":";;;;;KAoBK,cAAc;;KAGP,sBAAsB,KAAK;cAE1B,4BAAY,8BAAA;;;;;;;;;;;IAMG,MAAA;;;;;;;;;;;;;;;;;;;IAKA,MAAA,SAAS;;;IACN,MAAA,SAAS;;;;;;;;;;;;;IAKJ,MAAA,SAAS;;;;;EAIf,gBAAA,UAAA,UAAU;EACb,gBAAA,OAAA,UAAU;;;;;;;;;;;;;IAhBT,MAAA;;;;;;;;;;;;;;;;;;;IAKA,MAAA,SAAS;;;IACN,MAAA,SAAS;;;;;;;;;;;;;IAKJ,MAAA,SAAS;;;;;;;;;;;;;;;;;EAS/B,WAAC,OAAO,wBAAwB;kCAW5C;cAEW,+BAAe,8BAAA;;;;;;;;;;qCAsB1B;cAEW,+BAAe,8BAAA;;;IAIK,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;MA+BxC,oDAAA;cAEW,8BAAc,0BAAA,oBAAA,4BAAA;;8BAMzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAM9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,iCAAiB,0BAAA,oBAAA,4BAAA;;8BAM5B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6BAAa,0BAAA,oBAAA,4BAAA;;8BAMxB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAM9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,4BAAY,0BAAA,oBAAA,4BAAA;;8BAMvB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,8BAAc,0BAAA,oBAAA,4BAAA;;8BAMzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,oCAAoB,0BAAA,oBAAA,4BAAA;;8BAM/B,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
@@ -1,3 +1,4 @@
1
+ import { OVERLAY_STOWED_PROPS } from "../../runtime/use-overlay-exit.js";
1
2
  import { withXhConfig } from "../../config/config.js";
2
3
  import { mergePartProps } from "../../runtime/merge-props.js";
3
4
  import { mergeIntoChild } from "../../runtime/as-child.js";
@@ -42,6 +43,11 @@ const XhDialogRoot = /* @__PURE__ */ defineComponent({
42
43
  type: Boolean,
43
44
  default: void 0
44
45
  },
46
+ /** 收起动画播完后卸载内容,默认 true;false 时第一次打开才挂载、此后收起只隐藏,再打开不重挂。 */
47
+ unmountOnExit: {
48
+ type: Boolean,
49
+ default: void 0
50
+ },
45
51
  translations: { type: Object }
46
52
  },
47
53
  emits: {
@@ -91,17 +97,21 @@ container: { type: Object } },
91
97
  setup(props, { slots, attrs }) {
92
98
  const ctx = useDialogContext();
93
99
  return () => {
94
- if (!ctx.rendered.value) return null;
95
100
  const api = ctx.api.value;
101
+ const shown = ctx.rendered.value;
102
+ if (!api.isContentMounted(shown)) return null;
96
103
  const backdrop = api.getBackdropProps();
97
- return h(XhPortal, { to: props.container ?? ctx.portalTarget.value }, () => [!backdrop.hidden ? h("div", {
104
+ return h(XhPortal, {
105
+ to: props.container ?? ctx.portalTarget.value,
106
+ present: shown
107
+ }, () => [shown && !backdrop.hidden ? h("div", {
98
108
  ...backdrop,
99
109
  ref: (el) => {
100
110
  ctx.backdropRef.value = el;
101
111
  }
102
- }) : null, h("div", api.getPositionerProps(), [h("div", {
112
+ }) : null, h("div", mergeProps(api.getPositionerProps(), shown ? {} : OVERLAY_STOWED_PROPS), [h("div", {
103
113
  ...mergeProps(api.getContentProps(), attrs),
104
- hidden: !ctx.rendered.value || void 0,
114
+ hidden: !shown || void 0,
105
115
  ref: (el) => {
106
116
  ctx.contentRef.value = el;
107
117
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","names":[],"sources":["../../../src/components/dialog/dialog.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// 提供 dialog 相关实现。\n\nimport type { OverlayBackdropVariant, Size } from '@xihan-ui/core'\nimport type { DialogApi, DialogSchema } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, h, mergeProps } 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 { provideDialog, useDialogContext } from './context'\nimport { useDialog } from './use-dialog'\n\ntype DialogProps = DialogSchema['props']\n\n/** 默认插槽的载荷:展开态与修改展开的动作。 */\nexport type DialogRootSlotProps = Pick<DialogApi, 'open' | 'setOpen'>\n\nexport const XhDialogRoot = /* @__PURE__ */ defineComponent({\n name: 'XhDialogRoot',\n props: {\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n modal: { type: Boolean, default: true },\n role: { type: String as PropType<'dialog' | 'alertdialog'>, default: 'dialog' },\n closeOnEscape: { type: Boolean, default: true },\n closeOnInteractOutside: { type: Boolean, default: undefined },\n restoreFocus: { type: Boolean, default: true },\n initialFocus: { type: String },\n size: { type: String as PropType<Size> },\n variant: { type: String as PropType<OverlayBackdropVariant> },\n /** 可拖动:按住标题栏或拖动把手挪走面板,方向键在把手上挪一步;面板始终夹在视口内。 */\n draggable: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<DialogProps['translations']> },\n },\n // open-change 携带 { open },update:open 携带裸布尔\n emits: {\n 'open-change': (_details: PayloadOf<DialogProps, 'onOpenChange'>) => true,\n 'update:open': (_open: PayloadOf<DialogProps, 'onOpenChange'>['open']) => true,\n 'exit-complete': () => true,\n },\n slots: Object as SlotsType<{\n default?: (props: DialogRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notify: DialogProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const ctx = useDialog(withXhConfig('dialog', props) as DialogProps, notify, () => emit('exit-complete'))\n provideDialog(ctx)\n return () => slots.default?.({ open: ctx.api.value.open, setOpen: ctx.api.value.setOpen })\n },\n})\n\nexport const XhDialogTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhDialogTrigger',\n // 直通属性自己合:Vue 默认把作者的处理器排在部件的后面,这里改成作者先跑\n inheritAttrs: false,\n props: {\n /** 借用作者的子节点作为触发器,不再渲染自己的包裹元素;子节点须恰好一个。 */\n asChild: Boolean,\n },\n setup(props, { slots, attrs }) {\n const ctx = useDialogContext()\n return () => {\n const part = mergePartProps(ctx.api.value.getTriggerProps() as Record<string, unknown>, attrs)\n const children = slots.default?.()\n // asChild:把触发器属性合到作者的节点上,不再自己渲染包裹元素\n if (props.asChild) {\n const merged = mergeIntoChild(children, part, 'dialog')\n if (merged)\n return merged\n }\n return h('button', part, children)\n }\n },\n})\n\nexport const XhDialogContent = /* @__PURE__ */ defineComponent({\n name: 'XhDialogContent',\n props: {\n /** 本实例的 Portal 容器;优先于应用级配置。 */\n container: { type: Object as PropType<Element> },\n },\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 content 上\n inheritAttrs: false,\n setup(props, { slots, attrs }) {\n const ctx = useDialogContext()\n return () => {\n if (!ctx.rendered.value)\n return null\n const api = ctx.api.value\n const backdrop = api.getBackdropProps() as Record<string, unknown>\n return h(XhPortal, { to: props.container ?? ctx.portalTarget.value }, () => [\n !backdrop.hidden\n ? h('div', {\n ...backdrop,\n ref: (el: unknown) => { ctx.backdropRef.value = el as HTMLElement },\n })\n : null,\n h('div', api.getPositionerProps() as Record<string, unknown>, [\n h('div', {\n ...mergeProps(api.getContentProps() as Record<string, unknown>, attrs),\n hidden: !ctx.rendered.value || undefined,\n ref: (el: unknown) => { ctx.contentRef.value = el as HTMLElement },\n }, slots.default?.()),\n ]),\n ])\n }\n },\n})\n\nexport const XhDialogHeader = /* @__PURE__ */ defineComponent({\n name: 'XhDialogHeader',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('header', ctx.api.value.getHeaderProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 拖动把手:键盘挪动面板的入口;放在 XhDialogHeader 里时铺满标题栏。 */\nexport const XhDialogDragTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhDialogDragTrigger',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('button', ctx.api.value.getDragTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 语气徽记:未提供内容时由皮肤按节点上的 data-tone 绘制兜底字形,放入节点即整个替换。 */\nexport const XhDialogIndicator = /* @__PURE__ */ defineComponent({\n name: 'XhDialogIndicator',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('span', ctx.api.value.getIndicatorProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDialogTitle = /* @__PURE__ */ defineComponent({\n name: 'XhDialogTitle',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('h2', ctx.api.value.getTitleProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDialogDescription = /* @__PURE__ */ defineComponent({\n name: 'XhDialogDescription',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('p', ctx.api.value.getDescriptionProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDialogBody = /* @__PURE__ */ defineComponent({\n name: 'XhDialogBody',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('div', ctx.api.value.getBodyProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDialogFooter = /* @__PURE__ */ defineComponent({\n name: 'XhDialogFooter',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('footer', ctx.api.value.getFooterProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDialogCloseTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhDialogCloseTrigger',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('button', ctx.api.value.getCloseTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"dialog.js","names":[],"sources":["../../../src/components/dialog/dialog.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// 提供 dialog 相关实现。\n\nimport type { OverlayBackdropVariant, Size } from '@xihan-ui/core'\nimport type { DialogApi, DialogSchema } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, h, mergeProps } 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 { OVERLAY_STOWED_PROPS } from '../../runtime/use-overlay-exit'\nimport { provideDialog, useDialogContext } from './context'\nimport { useDialog } from './use-dialog'\n\ntype DialogProps = DialogSchema['props']\n\n/** 默认插槽的载荷:展开态与修改展开的动作。 */\nexport type DialogRootSlotProps = Pick<DialogApi, 'open' | 'setOpen'>\n\nexport const XhDialogRoot = /* @__PURE__ */ defineComponent({\n name: 'XhDialogRoot',\n props: {\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n modal: { type: Boolean, default: true },\n role: { type: String as PropType<'dialog' | 'alertdialog'>, default: 'dialog' },\n closeOnEscape: { type: Boolean, default: true },\n closeOnInteractOutside: { type: Boolean, default: undefined },\n restoreFocus: { type: Boolean, default: true },\n initialFocus: { type: String },\n size: { type: String as PropType<Size> },\n variant: { type: String as PropType<OverlayBackdropVariant> },\n /** 可拖动:按住标题栏或拖动把手挪走面板,方向键在把手上挪一步;面板始终夹在视口内。 */\n draggable: { type: Boolean, default: undefined },\n /** 收起动画播完后卸载内容,默认 true;false 时第一次打开才挂载、此后收起只隐藏,再打开不重挂。 */\n unmountOnExit: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<DialogProps['translations']> },\n },\n // open-change 携带 { open },update:open 携带裸布尔\n emits: {\n 'open-change': (_details: PayloadOf<DialogProps, 'onOpenChange'>) => true,\n 'update:open': (_open: PayloadOf<DialogProps, 'onOpenChange'>['open']) => true,\n 'exit-complete': () => true,\n },\n slots: Object as SlotsType<{\n default?: (props: DialogRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notify: DialogProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const ctx = useDialog(withXhConfig('dialog', props) as DialogProps, notify, () => emit('exit-complete'))\n provideDialog(ctx)\n return () => slots.default?.({ open: ctx.api.value.open, setOpen: ctx.api.value.setOpen })\n },\n})\n\nexport const XhDialogTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhDialogTrigger',\n // 直通属性自己合:Vue 默认把作者的处理器排在部件的后面,这里改成作者先跑\n inheritAttrs: false,\n props: {\n /** 借用作者的子节点作为触发器,不再渲染自己的包裹元素;子节点须恰好一个。 */\n asChild: Boolean,\n },\n setup(props, { slots, attrs }) {\n const ctx = useDialogContext()\n return () => {\n const part = mergePartProps(ctx.api.value.getTriggerProps() as Record<string, unknown>, attrs)\n const children = slots.default?.()\n // asChild:把触发器属性合到作者的节点上,不再自己渲染包裹元素\n if (props.asChild) {\n const merged = mergeIntoChild(children, part, 'dialog')\n if (merged)\n return merged\n }\n return h('button', part, children)\n }\n },\n})\n\nexport const XhDialogContent = /* @__PURE__ */ defineComponent({\n name: 'XhDialogContent',\n props: {\n /** 本实例的 Portal 容器;优先于应用级配置。 */\n container: { type: Object as PropType<Element> },\n },\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 content 上\n inheritAttrs: false,\n setup(props, { slots, attrs }) {\n const ctx = useDialogContext()\n return () => {\n const api = ctx.api.value\n const shown = ctx.rendered.value\n // 没打开过、或退场播完且要卸载时整棵不渲染\n if (!api.isContentMounted(shown))\n return null\n const backdrop = api.getBackdropProps() as Record<string, unknown>\n // 收起后常驻(unmountOnExit 为 false):遮罩不留,定位层以内联 display 收起,视觉桥随之断开\n return h(XhPortal, { to: props.container ?? ctx.portalTarget.value, present: shown }, () => [\n shown && !backdrop.hidden\n ? h('div', {\n ...backdrop,\n ref: (el: unknown) => { ctx.backdropRef.value = el as HTMLElement },\n })\n : null,\n h('div', mergeProps(api.getPositionerProps() as Record<string, unknown>, shown ? {} : OVERLAY_STOWED_PROPS), [\n h('div', {\n ...mergeProps(api.getContentProps() as Record<string, unknown>, attrs),\n hidden: !shown || undefined,\n ref: (el: unknown) => { ctx.contentRef.value = el as HTMLElement },\n }, slots.default?.()),\n ]),\n ])\n }\n },\n})\n\nexport const XhDialogHeader = /* @__PURE__ */ defineComponent({\n name: 'XhDialogHeader',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('header', ctx.api.value.getHeaderProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 拖动把手:键盘挪动面板的入口;放在 XhDialogHeader 里时铺满标题栏。 */\nexport const XhDialogDragTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhDialogDragTrigger',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('button', ctx.api.value.getDragTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 语气徽记:未提供内容时由皮肤按节点上的 data-tone 绘制兜底字形,放入节点即整个替换。 */\nexport const XhDialogIndicator = /* @__PURE__ */ defineComponent({\n name: 'XhDialogIndicator',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('span', ctx.api.value.getIndicatorProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDialogTitle = /* @__PURE__ */ defineComponent({\n name: 'XhDialogTitle',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('h2', ctx.api.value.getTitleProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDialogDescription = /* @__PURE__ */ defineComponent({\n name: 'XhDialogDescription',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('p', ctx.api.value.getDescriptionProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDialogBody = /* @__PURE__ */ defineComponent({\n name: 'XhDialogBody',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('div', ctx.api.value.getBodyProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDialogFooter = /* @__PURE__ */ defineComponent({\n name: 'XhDialogFooter',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('footer', ctx.api.value.getFooterProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDialogCloseTrigger = /* @__PURE__ */ defineComponent({\n name: 'XhDialogCloseTrigger',\n setup(_, { slots }) {\n const ctx = useDialogContext()\n return () => h('button', ctx.api.value.getCloseTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n"],"mappings":"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"}
@@ -76,6 +76,11 @@ declare const XhDrawerRoot: import("vue").DefineComponent<import("vue").ExtractP
76
76
  maxPanelSize: {
77
77
  type: NumberConstructor;
78
78
  };
79
+ /** 收起动画播完后卸载内容,默认 true;false 时第一次打开才挂载、此后收起只隐藏,再打开不重挂。 */
80
+ unmountOnExit: {
81
+ type: BooleanConstructor;
82
+ default: undefined;
83
+ };
79
84
  translations: {
80
85
  type: PropType<DrawerProps["translations"]>;
81
86
  };
@@ -157,6 +162,11 @@ declare const XhDrawerRoot: import("vue").DefineComponent<import("vue").ExtractP
157
162
  maxPanelSize: {
158
163
  type: NumberConstructor;
159
164
  };
165
+ /** 收起动画播完后卸载内容,默认 true;false 时第一次打开才挂载、此后收起只隐藏,再打开不重挂。 */
166
+ unmountOnExit: {
167
+ type: BooleanConstructor;
168
+ default: undefined;
169
+ };
160
170
  translations: {
161
171
  type: PropType<DrawerProps["translations"]>;
162
172
  };
@@ -167,13 +177,14 @@ declare const XhDrawerRoot: import("vue").DefineComponent<import("vue").ExtractP
167
177
  "onPanel-size-change"?: ((_details: import("@xihan-ui/headless").DrawerPanelSizeChangeDetails) => any) | undefined;
168
178
  "onUpdate:panelSize"?: ((_size: number) => any) | undefined;
169
179
  }>, {
180
+ unmountOnExit: boolean;
170
181
  open: boolean;
171
182
  defaultOpen: boolean;
172
183
  resizable: boolean;
173
- modal: boolean;
174
184
  closeOnEscape: boolean;
175
185
  closeOnInteractOutside: boolean;
176
186
  restoreFocus: boolean;
187
+ modal: boolean;
177
188
  contained: boolean;
178
189
  }, SlotsType<{
179
190
  default?: (props: DrawerRootSlotProps) => VNode[];
@@ -1 +1 @@
1
- {"version":3,"file":"drawer.d.ts","names":[],"sources":["../../../src/components/drawer/drawer.ts"],"mappings":";;;;;KAmBK,cAAc;;KAGP,sBAAsB,KAAK;cAE1B,4BAAY,8BAAA;;;;;;;;;;;IAOG,MAAA,SAAS;;;IACT,MAAA;;;;;;;;;;;;;;;IAIA,MAAA,SAAS;;;IACN,MAAA,SAAS;;;;;;;;;;IAQG,MAAA,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAazB,MAAA,SAAS;;;;;EAIf,gBAAA,UAAA,UAAU;EACb,gBAAA,OAAA,UAAU;;EAED,sBAAA,UAAA,UAAU;EACd,qBAAA,OAAA,UAAU;;;;;;;;;;;;IAnCd,MAAA,SAAS;;;IACT,MAAA;;;;;;;;;;;;;;;IAIA,MAAA,SAAS;;;IACN,MAAA,SAAS;;;;;;;;;;IAQG,MAAA,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAazB,MAAA,SAAS;;;;;;;;;;;;;;;;;;EAW/B,WAAC,OAAO,wBAAwB;kCAsB5C;cAEW,+BAAe,8BAAA;;;;;;;;;;qCAsB1B;cAEW,+BAAe,0BAAA,oBAAA,4BAAA;;qCA6B1B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,8BAAc,0BAAA,oBAAA,4BAAA;;8BAMzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6BAAa,0BAAA,oBAAA,4BAAA;;8BAMxB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAM9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,4BAAY,0BAAA,oBAAA,4BAAA;;8BAMvB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,8BAAc,0BAAA,oBAAA,4BAAA;;8BAMzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,oCAAoB,0BAAA,oBAAA,4BAAA;;8BAM/B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,qCAAqB,0BAAA,oBAAA,4BAAA;;8BAMhC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
1
+ {"version":3,"file":"drawer.d.ts","names":[],"sources":["../../../src/components/drawer/drawer.ts"],"mappings":";;;;;KAoBK,cAAc;;KAGP,sBAAsB,KAAK;cAE1B,4BAAY,8BAAA;;;;;;;;;;;IAOG,MAAA,SAAS;;;IACT,MAAA;;;;;;;;;;;;;;;IAIA,MAAA,SAAS;;;IACN,MAAA,SAAS;;;;;;;;;;IAQG,MAAA,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAezB,MAAA,SAAS;;;;;EAIf,gBAAA,UAAA,UAAU;EACb,gBAAA,OAAA,UAAU;;EAED,sBAAA,UAAA,UAAU;EACd,qBAAA,OAAA,UAAU;;;;;;;;;;;;IArCd,MAAA,SAAS;;;IACT,MAAA;;;;;;;;;;;;;;;IAIA,MAAA,SAAS;;;IACN,MAAA,SAAS;;;;;;;;;;IAQG,MAAA,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAezB,MAAA,SAAS;;;;;;;;;;;;;;;;;;;EAW/B,WAAC,OAAO,wBAAwB;kCAsB5C;cAEW,+BAAe,8BAAA;;;;;;;;;;qCAsB1B;cAEW,+BAAe,0BAAA,oBAAA,4BAAA;;qCA+B1B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,8BAAc,0BAAA,oBAAA,4BAAA;;8BAMzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6BAAa,0BAAA,oBAAA,4BAAA;;8BAMxB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAM9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,4BAAY,0BAAA,oBAAA,4BAAA;;8BAMvB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,8BAAc,0BAAA,oBAAA,4BAAA;;8BAMzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,oCAAoB,0BAAA,oBAAA,4BAAA;;8BAM/B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,qCAAqB,0BAAA,oBAAA,4BAAA;;8BAMhC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
@@ -1,3 +1,4 @@
1
+ import { OVERLAY_STOWED_PROPS } from "../../runtime/use-overlay-exit.js";
1
2
  import { withXhConfig } from "../../config/config.js";
2
3
  import { mergePartProps } from "../../runtime/merge-props.js";
3
4
  import { mergeIntoChild } from "../../runtime/as-child.js";
@@ -60,6 +61,11 @@ const XhDrawerRoot = defineComponent({
60
61
  defaultPanelSize: { type: Number },
61
62
  minPanelSize: { type: Number },
62
63
  maxPanelSize: { type: Number },
64
+ /** 收起动画播完后卸载内容,默认 true;false 时第一次打开才挂载、此后收起只隐藏,再打开不重挂。 */
65
+ unmountOnExit: {
66
+ type: Boolean,
67
+ default: void 0
68
+ },
63
69
  translations: { type: Object }
64
70
  },
65
71
  emits: {
@@ -113,17 +119,21 @@ const XhDrawerContent = defineComponent({
113
119
  setup(_, { slots, attrs }) {
114
120
  const ctx = useDrawerContext();
115
121
  return () => {
116
- if (!ctx.rendered.value) return null;
117
122
  const api = ctx.api.value;
123
+ const shown = ctx.rendered.value;
124
+ if (!api.isContentMounted(shown)) return null;
118
125
  const backdrop = api.getBackdropProps();
119
- return h(XhPortal, { to: ctx.portalTarget.value }, () => [!backdrop.hidden ? h("div", {
126
+ return h(XhPortal, {
127
+ to: ctx.portalTarget.value,
128
+ present: shown
129
+ }, () => [shown && !backdrop.hidden ? h("div", {
120
130
  ...backdrop,
121
131
  ref: (el) => {
122
132
  ctx.backdropRef.value = el;
123
133
  }
124
- }) : null, h("div", api.getPositionerProps(), [h("div", {
134
+ }) : null, h("div", mergeProps(api.getPositionerProps(), shown ? {} : OVERLAY_STOWED_PROPS), [h("div", {
125
135
  ...mergeProps(api.getContentProps(), attrs),
126
- hidden: !ctx.rendered.value || void 0,
136
+ hidden: !shown || void 0,
127
137
  ref: (el) => {
128
138
  ctx.contentRef.value = el;
129
139
  }
@@ -1 +1 @@
1
- {"version":3,"file":"drawer.js","names":[],"sources":["../../../src/components/drawer/drawer.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// 提供 drawer 相关实现。\n\nimport type { OverlayBackdropVariant, Size } from '@xihan-ui/core'\nimport type { DrawerApi, DrawerSchema, DrawerSide } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, h, mergeProps } 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 { provideDrawer, useDrawerContext } from './context'\nimport { useDrawer } from './use-drawer'\n\ntype DrawerProps = DrawerSchema['props']\n\n/** 默认插槽的载荷:展开状态、已解析的滑出边,与开合命令。 */\nexport type DrawerRootSlotProps = Pick<DrawerApi, 'open' | 'side' | 'setOpen'>\n\nexport const XhDrawerRoot = defineComponent({\n name: 'XhDrawerRoot',\n props: {\n // 缺省值由 connect 给出;普通类型省略 default,Boolean 显式保留 undefined\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n modal: { type: Boolean, default: undefined },\n side: { type: String as PropType<DrawerSide> },\n role: { type: String as PropType<'dialog' | 'alertdialog'> },\n closeOnEscape: { type: Boolean, default: undefined },\n closeOnInteractOutside: { type: Boolean, default: undefined },\n restoreFocus: { type: Boolean, default: undefined },\n size: { type: String as PropType<Size> },\n variant: { type: String as PropType<OverlayBackdropVariant> },\n /**\n * 挂载的容器(CSS 选择器或元素)。提供后即为局部抽屉:\n * 浮层迁移进该容器,遮罩与定位层从 fixed 换为 absolute,只覆盖它而不是整屏。\n *\n * 该容器要自带 position(relative 等),否则 absolute 会向上找到其他定位祖先。\n * 未提供时查询全局配置的 portalContainer,再没有才落到 body。\n */\n container: { type: [String, Object] as PropType<string | Element> },\n /**\n * 只把绘制方式改为局部(遮罩与定位层从 fixed 换为 absolute),不改变迁移位置。\n * 提供 container 后默认为真,不必再写一遍;两个都未提供即铺满视口。\n */\n contained: { type: Boolean, default: undefined },\n /** 可调厚度:朝向页面那条边上的把手拖动或用方向键推。 */\n resizable: { type: Boolean, default: undefined },\n /** 受控厚度(像素),支持 v-model:panel-size;未提供即非受控。 */\n panelSize: { type: Number },\n defaultPanelSize: { type: Number },\n minPanelSize: { type: Number },\n maxPanelSize: { type: Number },\n translations: { type: Object as PropType<DrawerProps['translations']> },\n },\n // open-change 携带 { open },update:open 携带裸布尔;panel-size-change 携带 { panelSize }\n emits: {\n 'open-change': (_details: PayloadOf<DrawerProps, 'onOpenChange'>) => true,\n 'update:open': (_open: PayloadOf<DrawerProps, 'onOpenChange'>['open']) => true,\n 'exit-complete': () => true,\n 'panel-size-change': (_details: PayloadOf<DrawerProps, 'onPanelSizeChange'>) => true,\n 'update:panelSize': (_size: PayloadOf<DrawerProps, 'onPanelSizeChange'>['panelSize']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: DrawerRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notify: DrawerProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n // 容器一处给定,两件事都从它派生:contained 交给机器(皮肤据此把遮罩与定位层\n // 从 fixed 换成 absolute),同一个值又是 Teleport 的落点,两边不会各说各话\n const notifySize: DrawerProps['onPanelSizeChange'] = (details) => {\n emit('panel-size-change', details)\n emit('update:panelSize', details.panelSize)\n }\n const ctx = useDrawer(withXhConfig('drawer', props) as DrawerProps, notify, () => props.container, () => emit('exit-complete'), notifySize)\n provideDrawer(ctx)\n // root 是真实节点,content 会被 portal 到 body,data-side 挂在这里供页面内的部分读取\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n open: ctx.api.value.open,\n side: ctx.api.value.side,\n setOpen: ctx.api.value.setOpen,\n }))\n },\n})\n\nexport const XhDrawerTrigger = defineComponent({\n name: 'XhDrawerTrigger',\n // 直通属性自己合:Vue 默认把作者的处理器排在部件的后面,这里改成作者先跑\n inheritAttrs: false,\n props: {\n /** 借用作者的子节点作为触发器,不再渲染自己的包裹元素;子节点须恰好一个。 */\n asChild: Boolean,\n },\n setup(props, { slots, attrs }) {\n const ctx = useDrawerContext()\n return () => {\n const part = mergePartProps(ctx.api.value.getTriggerProps() as Record<string, unknown>, attrs)\n const children = slots.default?.()\n // asChild:把触发器属性合到作者的节点上,不再自己渲染包裹元素\n if (props.asChild) {\n const merged = mergeIntoChild(children, part, 'drawer')\n if (merged)\n return merged\n }\n return h('button', part, children)\n }\n },\n})\n\nexport const XhDrawerContent = defineComponent({\n name: 'XhDrawerContent',\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 content 上\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n const ctx = useDrawerContext()\n return () => {\n // presence 判定不在场则整棵不渲染,退场动画播完才翻假\n if (!ctx.rendered.value)\n return null\n const api = ctx.api.value\n const backdrop = api.getBackdropProps() as Record<string, unknown>\n return h(XhPortal, { to: ctx.portalTarget.value }, () => [\n !backdrop.hidden\n ? h('div', {\n ...backdrop,\n ref: (el: unknown) => { ctx.backdropRef.value = el as HTMLElement },\n })\n : null,\n h('div', api.getPositionerProps() as Record<string, unknown>, [\n h('div', {\n ...mergeProps(api.getContentProps() as Record<string, unknown>, attrs),\n hidden: !ctx.rendered.value || undefined,\n ref: (el: unknown) => { ctx.contentRef.value = el as HTMLElement },\n }, slots.default?.()),\n ]),\n ])\n }\n },\n})\n\nexport const XhDrawerHeader = defineComponent({\n name: 'XhDrawerHeader',\n setup(_, { slots }) {\n const ctx = useDrawerContext()\n return () => h('header', ctx.api.value.getHeaderProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDrawerTitle = defineComponent({\n name: 'XhDrawerTitle',\n setup(_, { slots }) {\n const ctx = useDrawerContext()\n return () => h('h2', ctx.api.value.getTitleProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDrawerDescription = defineComponent({\n name: 'XhDrawerDescription',\n setup(_, { slots }) {\n const ctx = useDrawerContext()\n return () => h('p', ctx.api.value.getDescriptionProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDrawerBody = defineComponent({\n name: 'XhDrawerBody',\n setup(_, { slots }) {\n const ctx = useDrawerContext()\n return () => h('div', ctx.api.value.getBodyProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDrawerFooter = defineComponent({\n name: 'XhDrawerFooter',\n setup(_, { slots }) {\n const ctx = useDrawerContext()\n return () => h('footer', ctx.api.value.getFooterProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDrawerCloseTrigger = defineComponent({\n name: 'XhDrawerCloseTrigger',\n setup(_, { slots }) {\n const ctx = useDrawerContext()\n return () => h('button', ctx.api.value.getCloseTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 改尺把手:role=separator,落在朝向页面的那条边上;放在 XhDrawerContent 里。 */\nexport const XhDrawerResizeTrigger = defineComponent({\n name: 'XhDrawerResizeTrigger',\n setup() {\n const ctx = useDrawerContext()\n return () => h('div', ctx.api.value.getResizeTriggerProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"drawer.js","names":[],"sources":["../../../src/components/drawer/drawer.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// 提供 drawer 相关实现。\n\nimport type { OverlayBackdropVariant, Size } from '@xihan-ui/core'\nimport type { DrawerApi, DrawerSchema, DrawerSide } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, h, mergeProps } 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 { OVERLAY_STOWED_PROPS } from '../../runtime/use-overlay-exit'\nimport { provideDrawer, useDrawerContext } from './context'\nimport { useDrawer } from './use-drawer'\n\ntype DrawerProps = DrawerSchema['props']\n\n/** 默认插槽的载荷:展开状态、已解析的滑出边,与开合命令。 */\nexport type DrawerRootSlotProps = Pick<DrawerApi, 'open' | 'side' | 'setOpen'>\n\nexport const XhDrawerRoot = defineComponent({\n name: 'XhDrawerRoot',\n props: {\n // 缺省值由 connect 给出;普通类型省略 default,Boolean 显式保留 undefined\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n modal: { type: Boolean, default: undefined },\n side: { type: String as PropType<DrawerSide> },\n role: { type: String as PropType<'dialog' | 'alertdialog'> },\n closeOnEscape: { type: Boolean, default: undefined },\n closeOnInteractOutside: { type: Boolean, default: undefined },\n restoreFocus: { type: Boolean, default: undefined },\n size: { type: String as PropType<Size> },\n variant: { type: String as PropType<OverlayBackdropVariant> },\n /**\n * 挂载的容器(CSS 选择器或元素)。提供后即为局部抽屉:\n * 浮层迁移进该容器,遮罩与定位层从 fixed 换为 absolute,只覆盖它而不是整屏。\n *\n * 该容器要自带 position(relative 等),否则 absolute 会向上找到其他定位祖先。\n * 未提供时查询全局配置的 portalContainer,再没有才落到 body。\n */\n container: { type: [String, Object] as PropType<string | Element> },\n /**\n * 只把绘制方式改为局部(遮罩与定位层从 fixed 换为 absolute),不改变迁移位置。\n * 提供 container 后默认为真,不必再写一遍;两个都未提供即铺满视口。\n */\n contained: { type: Boolean, default: undefined },\n /** 可调厚度:朝向页面那条边上的把手拖动或用方向键推。 */\n resizable: { type: Boolean, default: undefined },\n /** 受控厚度(像素),支持 v-model:panel-size;未提供即非受控。 */\n panelSize: { type: Number },\n defaultPanelSize: { type: Number },\n minPanelSize: { type: Number },\n maxPanelSize: { type: Number },\n /** 收起动画播完后卸载内容,默认 true;false 时第一次打开才挂载、此后收起只隐藏,再打开不重挂。 */\n unmountOnExit: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<DrawerProps['translations']> },\n },\n // open-change 携带 { open },update:open 携带裸布尔;panel-size-change 携带 { panelSize }\n emits: {\n 'open-change': (_details: PayloadOf<DrawerProps, 'onOpenChange'>) => true,\n 'update:open': (_open: PayloadOf<DrawerProps, 'onOpenChange'>['open']) => true,\n 'exit-complete': () => true,\n 'panel-size-change': (_details: PayloadOf<DrawerProps, 'onPanelSizeChange'>) => true,\n 'update:panelSize': (_size: PayloadOf<DrawerProps, 'onPanelSizeChange'>['panelSize']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: DrawerRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notify: DrawerProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n // 容器一处给定,两件事都从它派生:contained 交给机器(皮肤据此把遮罩与定位层\n // 从 fixed 换成 absolute),同一个值又是 Teleport 的落点,两边不会各说各话\n const notifySize: DrawerProps['onPanelSizeChange'] = (details) => {\n emit('panel-size-change', details)\n emit('update:panelSize', details.panelSize)\n }\n const ctx = useDrawer(withXhConfig('drawer', props) as DrawerProps, notify, () => props.container, () => emit('exit-complete'), notifySize)\n provideDrawer(ctx)\n // root 是真实节点,content 会被 portal 到 body,data-side 挂在这里供页面内的部分读取\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n open: ctx.api.value.open,\n side: ctx.api.value.side,\n setOpen: ctx.api.value.setOpen,\n }))\n },\n})\n\nexport const XhDrawerTrigger = defineComponent({\n name: 'XhDrawerTrigger',\n // 直通属性自己合:Vue 默认把作者的处理器排在部件的后面,这里改成作者先跑\n inheritAttrs: false,\n props: {\n /** 借用作者的子节点作为触发器,不再渲染自己的包裹元素;子节点须恰好一个。 */\n asChild: Boolean,\n },\n setup(props, { slots, attrs }) {\n const ctx = useDrawerContext()\n return () => {\n const part = mergePartProps(ctx.api.value.getTriggerProps() as Record<string, unknown>, attrs)\n const children = slots.default?.()\n // asChild:把触发器属性合到作者的节点上,不再自己渲染包裹元素\n if (props.asChild) {\n const merged = mergeIntoChild(children, part, 'drawer')\n if (merged)\n return merged\n }\n return h('button', part, children)\n }\n },\n})\n\nexport const XhDrawerContent = defineComponent({\n name: 'XhDrawerContent',\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 content 上\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n const ctx = useDrawerContext()\n return () => {\n const api = ctx.api.value\n // presence 判定不在场即退场动画播完;没打开过、或播完且要卸载时整棵不渲染\n const shown = ctx.rendered.value\n if (!api.isContentMounted(shown))\n return null\n const backdrop = api.getBackdropProps() as Record<string, unknown>\n // 收起后常驻(unmountOnExit 为 false):遮罩不留,定位层以内联 display 收起,视觉桥随之断开\n return h(XhPortal, { to: ctx.portalTarget.value, present: shown }, () => [\n shown && !backdrop.hidden\n ? h('div', {\n ...backdrop,\n ref: (el: unknown) => { ctx.backdropRef.value = el as HTMLElement },\n })\n : null,\n h('div', mergeProps(api.getPositionerProps() as Record<string, unknown>, shown ? {} : OVERLAY_STOWED_PROPS), [\n h('div', {\n ...mergeProps(api.getContentProps() as Record<string, unknown>, attrs),\n hidden: !shown || undefined,\n ref: (el: unknown) => { ctx.contentRef.value = el as HTMLElement },\n }, slots.default?.()),\n ]),\n ])\n }\n },\n})\n\nexport const XhDrawerHeader = defineComponent({\n name: 'XhDrawerHeader',\n setup(_, { slots }) {\n const ctx = useDrawerContext()\n return () => h('header', ctx.api.value.getHeaderProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDrawerTitle = defineComponent({\n name: 'XhDrawerTitle',\n setup(_, { slots }) {\n const ctx = useDrawerContext()\n return () => h('h2', ctx.api.value.getTitleProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDrawerDescription = defineComponent({\n name: 'XhDrawerDescription',\n setup(_, { slots }) {\n const ctx = useDrawerContext()\n return () => h('p', ctx.api.value.getDescriptionProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDrawerBody = defineComponent({\n name: 'XhDrawerBody',\n setup(_, { slots }) {\n const ctx = useDrawerContext()\n return () => h('div', ctx.api.value.getBodyProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDrawerFooter = defineComponent({\n name: 'XhDrawerFooter',\n setup(_, { slots }) {\n const ctx = useDrawerContext()\n return () => h('footer', ctx.api.value.getFooterProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhDrawerCloseTrigger = defineComponent({\n name: 'XhDrawerCloseTrigger',\n setup(_, { slots }) {\n const ctx = useDrawerContext()\n return () => h('button', ctx.api.value.getCloseTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 改尺把手:role=separator,落在朝向页面的那条边上;放在 XhDrawerContent 里。 */\nexport const XhDrawerResizeTrigger = defineComponent({\n name: 'XhDrawerResizeTrigger',\n setup() {\n const ctx = useDrawerContext()\n return () => h('div', ctx.api.value.getResizeTriggerProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"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"}
@@ -1,9 +1,14 @@
1
1
  import { FieldContext } from "./use-field.js";
2
2
  //#region src/components/field/context.d.ts
3
3
  declare function provideField(ctx: FieldContext): void;
4
+ /**
5
+ * 在这棵子树里断开外层字段:后代控件不再被外层字段命名、描述,不再继承它的禁用、只读、必填与无效,
6
+ * 也不再拿到同一个控件 id;表单字段组随之断开。XhFieldBoundary 与浮层的 Portal 都在这里断开。
7
+ */
8
+ declare function clearFieldContext(): void;
4
9
  /** 字段外调用时返回 null,供薄封装在字段内外都能安全使用。 */
5
10
  declare function useOptionalFieldContext(): FieldContext | null;
6
11
  declare function useFieldContext(): FieldContext;
7
12
  //#endregion
8
- export { provideField, useFieldContext, useOptionalFieldContext };
13
+ export { clearFieldContext, provideField, useFieldContext, useOptionalFieldContext };
9
14
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","names":[],"sources":["../../../src/components/field/context.ts"],"mappings":";;iBAagB,aAAa,KAAK;;iBAKlB,2BAA2B;iBAI3B,mBAAmB"}
1
+ {"version":3,"file":"context.d.ts","names":[],"sources":["../../../src/components/field/context.ts"],"mappings":";;iBAcgB,aAAa,KAAK;;;;;iBAQlB;;iBAMA,2BAA2B;iBAI3B,mBAAmB"}
@@ -1,9 +1,18 @@
1
+ import { clearFormField } from "../form/context.js";
1
2
  import { inject, provide } from "vue";
2
3
  //#region src/components/field/context.ts
3
4
  const KEY = Symbol.for("xh-field");
4
5
  function provideField(ctx) {
5
6
  provide(KEY, ctx);
6
7
  }
8
+ /**
9
+ * 在这棵子树里断开外层字段:后代控件不再被外层字段命名、描述,不再继承它的禁用、只读、必填与无效,
10
+ * 也不再拿到同一个控件 id;表单字段组随之断开。XhFieldBoundary 与浮层的 Portal 都在这里断开。
11
+ */
12
+ function clearFieldContext() {
13
+ provide(KEY, null);
14
+ clearFormField();
15
+ }
7
16
  /** 字段外调用时返回 null,供薄封装在字段内外都能安全使用。 */
8
17
  function useOptionalFieldContext() {
9
18
  return inject(KEY, null);
@@ -14,6 +23,6 @@ function useFieldContext() {
14
23
  return ctx;
15
24
  }
16
25
  //#endregion
17
- export { provideField, useFieldContext, useOptionalFieldContext };
26
+ export { clearFieldContext, provideField, useFieldContext, useOptionalFieldContext };
18
27
 
19
28
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/field/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 { InjectionKey } from 'vue'\nimport type { FieldContext } from './use-field'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<FieldContext> = Symbol.for('xh-field')\n\nexport function provideField(ctx: FieldContext): void {\n provide(KEY, ctx)\n}\n\n/** 字段外调用时返回 null,供薄封装在字段内外都能安全使用。 */\nexport function useOptionalFieldContext(): FieldContext | null {\n return inject(KEY, null)\n}\n\nexport function useFieldContext(): FieldContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Field 部件必须用在 XhFieldRoot 内')\n return ctx\n}\n"],"mappings":";;AAWA,MAAM,MAAkC,OAAO,IAAI,UAAU;AAE7D,SAAgB,aAAa,KAAyB;CACpD,QAAQ,KAAK,GAAG;AAClB;;AAGA,SAAgB,0BAA+C;CAC7D,OAAO,OAAO,KAAK,IAAI;AACzB;AAEA,SAAgB,kBAAgC;CAC9C,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,iCAAiC;CACnD,OAAO;AACT"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../src/components/field/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 { InjectionKey } from 'vue'\nimport type { FieldContext } from './use-field'\nimport { inject, provide } from 'vue'\nimport { clearFormField } from '../form/context'\n\nconst KEY: InjectionKey<FieldContext | null> = Symbol.for('xh-field')\n\nexport function provideField(ctx: FieldContext): void {\n provide(KEY, ctx)\n}\n\n/**\n * 在这棵子树里断开外层字段:后代控件不再被外层字段命名、描述,不再继承它的禁用、只读、必填与无效,\n * 也不再拿到同一个控件 id;表单字段组随之断开。XhFieldBoundary 与浮层的 Portal 都在这里断开。\n */\nexport function clearFieldContext(): void {\n provide(KEY, null)\n clearFormField()\n}\n\n/** 字段外调用时返回 null,供薄封装在字段内外都能安全使用。 */\nexport function useOptionalFieldContext(): FieldContext | null {\n return inject(KEY, null)\n}\n\nexport function useFieldContext(): FieldContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Field 部件必须用在 XhFieldRoot 内')\n return ctx\n}\n"],"mappings":";;;AAYA,MAAM,MAAyC,OAAO,IAAI,UAAU;AAEpE,SAAgB,aAAa,KAAyB;CACpD,QAAQ,KAAK,GAAG;AAClB;;;;;AAMA,SAAgB,oBAA0B;CACxC,QAAQ,KAAK,IAAI;CACjB,eAAe;AACjB;;AAGA,SAAgB,0BAA+C;CAC7D,OAAO,OAAO,KAAK,IAAI;AACzB;AAEA,SAAgB,kBAAgC;CAC9C,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,iCAAiC;CACnD,OAAO;AACT"}