@xihan-ui/vue 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1593 -0
- package/README.md +1 -1
- package/dist/components/accordion/accordion.d.ts +6 -0
- package/dist/components/accordion/accordion.d.ts.map +1 -1
- package/dist/components/accordion/accordion.js +4 -2
- package/dist/components/accordion/accordion.js.map +1 -1
- package/dist/components/alert/alert.d.ts +9 -0
- package/dist/components/alert/alert.d.ts.map +1 -1
- package/dist/components/alert/alert.js +4 -0
- package/dist/components/alert/alert.js.map +1 -1
- package/dist/components/anchor/anchor.d.ts +2 -2
- package/dist/components/anchor/anchor.d.ts.map +1 -1
- package/dist/components/anchor/anchor.js +2 -2
- package/dist/components/anchor/anchor.js.map +1 -1
- package/dist/components/anchor/use-anchor.d.ts +2 -2
- package/dist/components/anchor/use-anchor.js +3 -3
- package/dist/components/anchor/use-anchor.js.map +1 -1
- package/dist/components/approval/approval.d.ts +8 -1
- package/dist/components/approval/approval.d.ts.map +1 -1
- package/dist/components/approval/approval.js +10 -1
- package/dist/components/approval/approval.js.map +1 -1
- package/dist/components/avatar/avatar.d.ts +8 -0
- package/dist/components/avatar/avatar.d.ts.map +1 -1
- package/dist/components/avatar/avatar.js +3 -1
- package/dist/components/avatar/avatar.js.map +1 -1
- package/dist/components/avatar/use-avatar.d.ts.map +1 -1
- package/dist/components/avatar/use-avatar.js +3 -1
- package/dist/components/avatar/use-avatar.js.map +1 -1
- package/dist/components/avatar-group/avatar-group.d.ts.map +1 -1
- package/dist/components/avatar-group/avatar-group.js +2 -1
- package/dist/components/avatar-group/avatar-group.js.map +1 -1
- package/dist/components/back-top/use-back-top.d.ts.map +1 -1
- package/dist/components/back-top/use-back-top.js +3 -1
- package/dist/components/back-top/use-back-top.js.map +1 -1
- package/dist/components/badge/badge.d.ts +22 -0
- package/dist/components/badge/badge.d.ts.map +1 -1
- package/dist/components/badge/badge.js +11 -2
- package/dist/components/badge/badge.js.map +1 -1
- package/dist/components/breadcrumb/breadcrumb.d.ts +11 -1
- package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -1
- package/dist/components/breadcrumb/breadcrumb.js +28 -9
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/components/calendar-picker/calendar-picker.d.ts +16 -0
- package/dist/components/calendar-picker/calendar-picker.d.ts.map +1 -1
- package/dist/components/calendar-picker/calendar-picker.js +4 -0
- package/dist/components/calendar-picker/calendar-picker.js.map +1 -1
- package/dist/components/calendar-range-picker/calendar-range-picker.d.ts +16 -0
- package/dist/components/calendar-range-picker/calendar-range-picker.d.ts.map +1 -1
- package/dist/components/calendar-range-picker/calendar-range-picker.js +4 -0
- package/dist/components/calendar-range-picker/calendar-range-picker.js.map +1 -1
- package/dist/components/card/card.d.ts +37 -2
- package/dist/components/card/card.d.ts.map +1 -1
- package/dist/components/card/card.js +42 -3
- package/dist/components/card/card.js.map +1 -1
- package/dist/components/carousel/carousel.d.ts +7 -1
- package/dist/components/carousel/carousel.d.ts.map +1 -1
- package/dist/components/carousel/carousel.js +1 -0
- package/dist/components/carousel/carousel.js.map +1 -1
- package/dist/components/carousel/use-carousel.d.ts.map +1 -1
- package/dist/components/carousel/use-carousel.js +3 -1
- package/dist/components/carousel/use-carousel.js.map +1 -1
- package/dist/components/cartesian-chart/cartesian-chart.d.ts +262 -0
- package/dist/components/cartesian-chart/cartesian-chart.d.ts.map +1 -0
- package/dist/components/cartesian-chart/cartesian-chart.js +293 -0
- package/dist/components/cartesian-chart/cartesian-chart.js.map +1 -0
- package/dist/components/cartesian-chart/context.js +15 -0
- package/dist/components/cartesian-chart/context.js.map +1 -0
- package/dist/components/cartesian-chart/use-cartesian-chart.d.ts +21 -0
- package/dist/components/cartesian-chart/use-cartesian-chart.d.ts.map +1 -0
- package/dist/components/cartesian-chart/use-cartesian-chart.js +29 -0
- package/dist/components/cartesian-chart/use-cartesian-chart.js.map +1 -0
- package/dist/components/cascader/cascader.d.ts +72 -3
- package/dist/components/cascader/cascader.d.ts.map +1 -1
- package/dist/components/cascader/cascader.js +125 -7
- package/dist/components/cascader/cascader.js.map +1 -1
- package/dist/components/cascader/context.js +10 -1
- package/dist/components/cascader/context.js.map +1 -1
- package/dist/components/cascader/use-cascader.d.ts +2 -1
- package/dist/components/cascader/use-cascader.d.ts.map +1 -1
- package/dist/components/cascader/use-cascader.js +4 -1
- package/dist/components/cascader/use-cascader.js.map +1 -1
- package/dist/components/checkbox/checkbox.js +1 -1
- package/dist/components/checkbox-group/checkbox-group.d.ts +24 -3
- package/dist/components/checkbox-group/checkbox-group.d.ts.map +1 -1
- package/dist/components/checkbox-group/checkbox-group.js +20 -3
- package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
- package/dist/components/citation/citation.d.ts +211 -0
- package/dist/components/citation/citation.d.ts.map +1 -0
- package/dist/components/citation/citation.js +222 -0
- package/dist/components/citation/citation.js.map +1 -0
- package/dist/components/citation/context.d.ts +11 -0
- package/dist/components/citation/context.d.ts.map +1 -0
- package/dist/components/citation/context.js +24 -0
- package/dist/components/citation/context.js.map +1 -0
- package/dist/components/citation/use-citation.d.ts +19 -0
- package/dist/components/citation/use-citation.d.ts.map +1 -0
- package/dist/components/citation/use-citation.js +51 -0
- package/dist/components/citation/use-citation.js.map +1 -0
- package/dist/components/code-view/code-view.d.ts +21 -0
- package/dist/components/code-view/code-view.d.ts.map +1 -1
- package/dist/components/code-view/code-view.js +23 -4
- package/dist/components/code-view/code-view.js.map +1 -1
- package/dist/components/collapsible/collapsible.d.ts +6 -0
- package/dist/components/collapsible/collapsible.d.ts.map +1 -1
- package/dist/components/collapsible/collapsible.js +4 -2
- package/dist/components/collapsible/collapsible.js.map +1 -1
- package/dist/components/color-field/color-field.d.ts +2 -2
- package/dist/components/color-field/color-field.js +1 -1
- package/dist/components/color-field/color-field.js.map +1 -1
- package/dist/components/color-picker/color-picker.d.ts +41 -3
- package/dist/components/color-picker/color-picker.d.ts.map +1 -1
- package/dist/components/color-picker/color-picker.js +33 -4
- package/dist/components/color-picker/color-picker.js.map +1 -1
- package/dist/components/color-picker/use-color-picker.d.ts +3 -1
- package/dist/components/color-picker/use-color-picker.d.ts.map +1 -1
- package/dist/components/color-picker/use-color-picker.js +8 -2
- package/dist/components/color-picker/use-color-picker.js.map +1 -1
- package/dist/components/color-slider/color-slider.d.ts +2 -2
- package/dist/components/color-slider/color-slider.js +1 -1
- package/dist/components/color-slider/color-slider.js.map +1 -1
- package/dist/components/combobox/combobox.d.ts +66 -4
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/combobox.js +107 -6
- package/dist/components/combobox/combobox.js.map +1 -1
- package/dist/components/combobox/context.js +10 -1
- package/dist/components/combobox/context.js.map +1 -1
- package/dist/components/command/command.d.ts +23 -2
- package/dist/components/command/command.d.ts.map +1 -1
- package/dist/components/command/command.js +48 -6
- package/dist/components/command/command.js.map +1 -1
- package/dist/components/command/use-command.d.ts.map +1 -1
- package/dist/components/command/use-command.js +9 -30
- package/dist/components/command/use-command.js.map +1 -1
- package/dist/components/context-menu/context-menu.d.ts +63 -18
- package/dist/components/context-menu/context-menu.d.ts.map +1 -1
- package/dist/components/context-menu/context-menu.js +141 -57
- package/dist/components/context-menu/context-menu.js.map +1 -1
- package/dist/components/context-menu/context.js +1 -1
- package/dist/components/context-menu/context.js.map +1 -1
- package/dist/components/context-menu/use-context-menu.d.ts +1 -1
- package/dist/components/context-menu/use-context-menu.d.ts.map +1 -1
- package/dist/components/context-menu/use-context-menu.js +4 -2
- package/dist/components/context-menu/use-context-menu.js.map +1 -1
- package/dist/components/date-field/date-field.d.ts +9 -1
- package/dist/components/date-field/date-field.d.ts.map +1 -1
- package/dist/components/date-field/date-field.js +2 -0
- package/dist/components/date-field/date-field.js.map +1 -1
- package/dist/components/date-picker/date-picker.d.ts +41 -1
- package/dist/components/date-picker/date-picker.d.ts.map +1 -1
- package/dist/components/date-picker/date-picker.js +16 -3
- package/dist/components/date-picker/date-picker.js.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.d.ts +77 -2
- package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.js +102 -5
- package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/date-range-picker/use-date-range-picker.d.ts +1 -1
- package/dist/components/date-range-picker/use-date-range-picker.js.map +1 -1
- package/dist/components/descriptions/descriptions.d.ts +38 -7
- package/dist/components/descriptions/descriptions.d.ts.map +1 -1
- package/dist/components/descriptions/descriptions.js +38 -4
- package/dist/components/descriptions/descriptions.js.map +1 -1
- package/dist/components/dialog/dialog.d.ts +16 -1
- package/dist/components/dialog/dialog.d.ts.map +1 -1
- package/dist/components/dialog/dialog.js +15 -2
- package/dist/components/dialog/dialog.js.map +1 -1
- package/dist/components/dialog/use-dialog.d.ts.map +1 -1
- package/dist/components/dialog/use-dialog.js +9 -27
- package/dist/components/dialog/use-dialog.js.map +1 -1
- package/dist/components/diff-view/diff-view.d.ts +22 -2
- package/dist/components/diff-view/diff-view.d.ts.map +1 -1
- package/dist/components/diff-view/diff-view.js +37 -14
- package/dist/components/diff-view/diff-view.js.map +1 -1
- package/dist/components/diff-view/use-diff-view.d.ts +7 -2
- package/dist/components/diff-view/use-diff-view.d.ts.map +1 -1
- package/dist/components/diff-view/use-diff-view.js +12 -5
- package/dist/components/diff-view/use-diff-view.js.map +1 -1
- package/dist/components/drawer/drawer.d.ts +46 -1
- package/dist/components/drawer/drawer.d.ts.map +1 -1
- package/dist/components/drawer/drawer.js +28 -4
- package/dist/components/drawer/drawer.js.map +1 -1
- package/dist/components/drawer/use-drawer.d.ts +1 -1
- package/dist/components/drawer/use-drawer.d.ts.map +1 -1
- package/dist/components/drawer/use-drawer.js +12 -29
- package/dist/components/drawer/use-drawer.js.map +1 -1
- package/dist/components/empty-state/empty-state.js +4 -1
- package/dist/components/empty-state/empty-state.js.map +1 -1
- package/dist/components/empty-state/use-empty-state.js +12 -3
- package/dist/components/empty-state/use-empty-state.js.map +1 -1
- package/dist/components/field/field.js +1 -1
- package/dist/components/field-array/field-array.d.ts +1 -1
- package/dist/components/field-array/field-array.d.ts.map +1 -1
- package/dist/components/field-array/field-array.js +5 -1
- package/dist/components/field-array/field-array.js.map +1 -1
- package/dist/components/field-array/use-field-array.d.ts +3 -1
- package/dist/components/field-array/use-field-array.d.ts.map +1 -1
- package/dist/components/field-array/use-field-array.js +5 -2
- package/dist/components/field-array/use-field-array.js.map +1 -1
- package/dist/components/file-upload/file-upload.d.ts +24 -1
- package/dist/components/file-upload/file-upload.d.ts.map +1 -1
- package/dist/components/file-upload/file-upload.js +12 -2
- package/dist/components/file-upload/file-upload.js.map +1 -1
- package/dist/components/file-upload/use-file-upload.d.ts +1 -1
- package/dist/components/file-upload/use-file-upload.d.ts.map +1 -1
- package/dist/components/file-upload/use-file-upload.js.map +1 -1
- package/dist/components/flex/flex.d.ts +1 -1
- package/dist/components/flex/flex.d.ts.map +1 -1
- package/dist/components/flex/flex.js +4 -4
- package/dist/components/flex/flex.js.map +1 -1
- package/dist/components/form/form.d.ts +18 -4
- package/dist/components/form/form.d.ts.map +1 -1
- package/dist/components/form/form.js +21 -7
- package/dist/components/form/form.js.map +1 -1
- package/dist/components/form/use-form.d.ts +6 -0
- package/dist/components/form/use-form.d.ts.map +1 -1
- package/dist/components/form/use-form.js +4 -0
- package/dist/components/form/use-form.js.map +1 -1
- package/dist/components/funnel-chart/context.js +15 -0
- package/dist/components/funnel-chart/context.js.map +1 -0
- package/dist/components/funnel-chart/funnel-chart.d.ts +175 -0
- package/dist/components/funnel-chart/funnel-chart.d.ts.map +1 -0
- package/dist/components/funnel-chart/funnel-chart.js +188 -0
- package/dist/components/funnel-chart/funnel-chart.js.map +1 -0
- package/dist/components/funnel-chart/use-funnel-chart.d.ts +19 -0
- package/dist/components/funnel-chart/use-funnel-chart.d.ts.map +1 -0
- package/dist/components/funnel-chart/use-funnel-chart.js +26 -0
- package/dist/components/funnel-chart/use-funnel-chart.js.map +1 -0
- package/dist/components/graph-chart/context.js +15 -0
- package/dist/components/graph-chart/context.js.map +1 -0
- package/dist/components/graph-chart/graph-chart.d.ts +194 -0
- package/dist/components/graph-chart/graph-chart.d.ts.map +1 -0
- package/dist/components/graph-chart/graph-chart.js +219 -0
- package/dist/components/graph-chart/graph-chart.js.map +1 -0
- package/dist/components/graph-chart/use-graph-chart.d.ts +19 -0
- package/dist/components/graph-chart/use-graph-chart.d.ts.map +1 -0
- package/dist/components/graph-chart/use-graph-chart.js +26 -0
- package/dist/components/graph-chart/use-graph-chart.js.map +1 -0
- package/dist/components/grid/grid.d.ts +7 -0
- package/dist/components/grid/grid.d.ts.map +1 -1
- package/dist/components/grid/grid.js +7 -1
- package/dist/components/grid/grid.js.map +1 -1
- package/dist/components/grid-list/context.d.ts +9 -0
- package/dist/components/grid-list/context.d.ts.map +1 -0
- package/dist/components/grid-list/context.js +24 -0
- package/dist/components/grid-list/context.js.map +1 -0
- package/dist/components/grid-list/grid-list.d.ts +149 -0
- package/dist/components/grid-list/grid-list.d.ts.map +1 -0
- package/dist/components/grid-list/grid-list.js +118 -0
- package/dist/components/grid-list/grid-list.js.map +1 -0
- package/dist/components/grid-list/use-grid-list.d.ts +12 -0
- package/dist/components/grid-list/use-grid-list.d.ts.map +1 -0
- package/dist/components/grid-list/use-grid-list.js +20 -0
- package/dist/components/grid-list/use-grid-list.js.map +1 -0
- package/dist/components/heatmap/heatmap.d.ts +45 -4
- package/dist/components/heatmap/heatmap.d.ts.map +1 -1
- package/dist/components/heatmap/heatmap.js +40 -14
- package/dist/components/heatmap/heatmap.js.map +1 -1
- package/dist/components/heatmap/use-heatmap.d.ts +4 -2
- package/dist/components/heatmap/use-heatmap.d.ts.map +1 -1
- package/dist/components/heatmap/use-heatmap.js +8 -4
- package/dist/components/heatmap/use-heatmap.js.map +1 -1
- package/dist/components/hierarchy-chart/context.js +15 -0
- package/dist/components/hierarchy-chart/context.js.map +1 -0
- package/dist/components/hierarchy-chart/hierarchy-chart.d.ts +201 -0
- package/dist/components/hierarchy-chart/hierarchy-chart.d.ts.map +1 -0
- package/dist/components/hierarchy-chart/hierarchy-chart.js +228 -0
- package/dist/components/hierarchy-chart/hierarchy-chart.js.map +1 -0
- package/dist/components/hierarchy-chart/use-hierarchy-chart.d.ts +19 -0
- package/dist/components/hierarchy-chart/use-hierarchy-chart.d.ts.map +1 -0
- package/dist/components/hierarchy-chart/use-hierarchy-chart.js +26 -0
- package/dist/components/hierarchy-chart/use-hierarchy-chart.js.map +1 -0
- package/dist/components/hover-card/hover-card.js +2 -2
- package/dist/components/icon/icon.d.ts +7 -1
- package/dist/components/icon/icon.d.ts.map +1 -1
- package/dist/components/icon/icon.js +1 -0
- package/dist/components/icon/icon.js.map +1 -1
- package/dist/components/image/use-image.d.ts.map +1 -1
- package/dist/components/image/use-image.js +3 -1
- package/dist/components/image/use-image.js.map +1 -1
- package/dist/components/image-cropper/image-cropper.d.ts +35 -4
- package/dist/components/image-cropper/image-cropper.d.ts.map +1 -1
- package/dist/components/image-cropper/image-cropper.js +34 -5
- package/dist/components/image-cropper/image-cropper.js.map +1 -1
- package/dist/components/image-cropper/use-image-cropper.d.ts +3 -1
- package/dist/components/image-cropper/use-image-cropper.d.ts.map +1 -1
- package/dist/components/image-cropper/use-image-cropper.js +4 -1
- package/dist/components/image-cropper/use-image-cropper.js.map +1 -1
- package/dist/components/image-viewer/image-viewer.js +1 -1
- package/dist/components/image-viewer/use-image-viewer.d.ts.map +1 -1
- package/dist/components/image-viewer/use-image-viewer.js +9 -27
- package/dist/components/image-viewer/use-image-viewer.js.map +1 -1
- package/dist/components/infinite-scroll/infinite-scroll.d.ts +9 -1
- package/dist/components/infinite-scroll/infinite-scroll.d.ts.map +1 -1
- package/dist/components/infinite-scroll/infinite-scroll.js +2 -0
- package/dist/components/infinite-scroll/infinite-scroll.js.map +1 -1
- package/dist/components/input-group/input-group.d.ts.map +1 -1
- package/dist/components/input-group/input-group.js +2 -1
- package/dist/components/input-group/input-group.js.map +1 -1
- package/dist/components/json-viewer/json-viewer.d.ts +17 -2
- package/dist/components/json-viewer/json-viewer.d.ts.map +1 -1
- package/dist/components/json-viewer/json-viewer.js +26 -8
- package/dist/components/json-viewer/json-viewer.js.map +1 -1
- package/dist/components/kbd/kbd.d.ts.map +1 -1
- package/dist/components/kbd/kbd.js +27 -10
- package/dist/components/kbd/kbd.js.map +1 -1
- package/dist/components/listbox/listbox.d.ts +25 -2
- package/dist/components/listbox/listbox.d.ts.map +1 -1
- package/dist/components/listbox/listbox.js +39 -4
- package/dist/components/listbox/listbox.js.map +1 -1
- package/dist/components/loading-bar/use-loading-bar.d.ts.map +1 -1
- package/dist/components/loading-bar/use-loading-bar.js +3 -1
- package/dist/components/loading-bar/use-loading-bar.js.map +1 -1
- package/dist/components/log/log.d.ts +41 -2
- package/dist/components/log/log.d.ts.map +1 -1
- package/dist/components/log/log.js +25 -3
- package/dist/components/log/log.js.map +1 -1
- package/dist/components/log/use-log.d.ts +1 -1
- package/dist/components/log/use-log.d.ts.map +1 -1
- package/dist/components/log/use-log.js +4 -1
- package/dist/components/log/use-log.js.map +1 -1
- package/dist/components/markdown-stream/markdown-stream.d.ts +22 -2
- package/dist/components/markdown-stream/markdown-stream.d.ts.map +1 -1
- package/dist/components/markdown-stream/markdown-stream.js +43 -4
- package/dist/components/markdown-stream/markdown-stream.js.map +1 -1
- package/dist/components/marquee/marquee.d.ts +68 -12
- package/dist/components/marquee/marquee.d.ts.map +1 -1
- package/dist/components/marquee/marquee.js +52 -7
- package/dist/components/marquee/marquee.js.map +1 -1
- package/dist/components/mention/mention.d.ts +43 -7
- package/dist/components/mention/mention.d.ts.map +1 -1
- package/dist/components/mention/mention.js +50 -8
- package/dist/components/mention/mention.js.map +1 -1
- package/dist/components/menu/context.js +1 -1
- package/dist/components/menu/context.js.map +1 -1
- package/dist/components/menu/menu.d.ts +92 -28
- package/dist/components/menu/menu.d.ts.map +1 -1
- package/dist/components/menu/menu.js +162 -54
- package/dist/components/menu/menu.js.map +1 -1
- package/dist/components/menu/use-menu.d.ts +1 -1
- package/dist/components/menu/use-menu.d.ts.map +1 -1
- package/dist/components/menu/use-menu.js +8 -6
- package/dist/components/menu/use-menu.js.map +1 -1
- package/dist/components/menubar/context.js +1 -1
- package/dist/components/menubar/context.js.map +1 -1
- package/dist/components/menubar/menubar.d.ts +52 -19
- package/dist/components/menubar/menubar.d.ts.map +1 -1
- package/dist/components/menubar/menubar.js +137 -56
- package/dist/components/menubar/menubar.js.map +1 -1
- package/dist/components/menubar/use-menubar.d.ts +1 -1
- package/dist/components/menubar/use-menubar.d.ts.map +1 -1
- package/dist/components/menubar/use-menubar.js +4 -2
- package/dist/components/menubar/use-menubar.js.map +1 -1
- package/dist/components/message-feed/message-feed.d.ts +13 -1
- package/dist/components/message-feed/message-feed.d.ts.map +1 -1
- package/dist/components/message-feed/message-feed.js +25 -1
- package/dist/components/message-feed/message-feed.js.map +1 -1
- package/dist/components/navigation-menu/navigation-menu.d.ts +58 -1
- package/dist/components/navigation-menu/navigation-menu.d.ts.map +1 -1
- package/dist/components/navigation-menu/navigation-menu.js +82 -10
- package/dist/components/navigation-menu/navigation-menu.js.map +1 -1
- package/dist/components/notification/context.d.ts +5 -1
- package/dist/components/notification/context.d.ts.map +1 -1
- package/dist/components/notification/context.js.map +1 -1
- package/dist/components/notification/notification.d.ts +39 -23
- package/dist/components/notification/notification.d.ts.map +1 -1
- package/dist/components/notification/notification.js +27 -9
- package/dist/components/notification/notification.js.map +1 -1
- package/dist/components/notification/use-item-exit.js +22 -0
- package/dist/components/notification/use-item-exit.js.map +1 -0
- package/dist/components/notification/use-notification.d.ts +3 -3
- package/dist/components/notification/use-notification.d.ts.map +1 -1
- package/dist/components/notification/use-notification.js +20 -5
- package/dist/components/notification/use-notification.js.map +1 -1
- package/dist/components/number-animation/number-animation.d.ts +14 -2
- package/dist/components/number-animation/number-animation.d.ts.map +1 -1
- package/dist/components/number-animation/number-animation.js +5 -1
- package/dist/components/number-animation/number-animation.js.map +1 -1
- package/dist/components/number-field/number-field.d.ts +16 -1
- package/dist/components/number-field/number-field.d.ts.map +1 -1
- package/dist/components/number-field/number-field.js +6 -0
- package/dist/components/number-field/number-field.js.map +1 -1
- package/dist/components/page-header/page-header.d.ts.map +1 -1
- package/dist/components/page-header/page-header.js +2 -1
- package/dist/components/page-header/page-header.js.map +1 -1
- package/dist/components/pagination/pagination.d.ts +22 -2
- package/dist/components/pagination/pagination.d.ts.map +1 -1
- package/dist/components/pagination/pagination.js +22 -1
- package/dist/components/pagination/pagination.js.map +1 -1
- package/dist/components/pagination/use-pagination.js +1 -0
- package/dist/components/pagination/use-pagination.js.map +1 -1
- package/dist/components/pie-chart/context.js +15 -0
- package/dist/components/pie-chart/context.js.map +1 -0
- package/dist/components/pie-chart/pie-chart.d.ts +203 -0
- package/dist/components/pie-chart/pie-chart.d.ts.map +1 -0
- package/dist/components/pie-chart/pie-chart.js +236 -0
- package/dist/components/pie-chart/pie-chart.js.map +1 -0
- package/dist/components/pie-chart/use-pie-chart.d.ts +19 -0
- package/dist/components/pie-chart/use-pie-chart.d.ts.map +1 -0
- package/dist/components/pie-chart/use-pie-chart.js +26 -0
- package/dist/components/pie-chart/use-pie-chart.js.map +1 -0
- package/dist/components/popconfirm/popconfirm.js +2 -2
- package/dist/components/popover/popover.d.ts +11 -0
- package/dist/components/popover/popover.d.ts.map +1 -1
- package/dist/components/popover/popover.js +7 -2
- package/dist/components/popover/popover.js.map +1 -1
- package/dist/components/progress/progress.d.ts +63 -3
- package/dist/components/progress/progress.d.ts.map +1 -1
- package/dist/components/progress/progress.js +55 -3
- package/dist/components/progress/progress.js.map +1 -1
- package/dist/components/question-flow/question-flow.d.ts +40 -1
- package/dist/components/question-flow/question-flow.d.ts.map +1 -1
- package/dist/components/question-flow/question-flow.js +37 -1
- package/dist/components/question-flow/question-flow.js.map +1 -1
- package/dist/components/radar-chart/context.js +15 -0
- package/dist/components/radar-chart/context.js.map +1 -0
- package/dist/components/radar-chart/radar-chart.d.ts +189 -0
- package/dist/components/radar-chart/radar-chart.d.ts.map +1 -0
- package/dist/components/radar-chart/radar-chart.js +220 -0
- package/dist/components/radar-chart/radar-chart.js.map +1 -0
- package/dist/components/radar-chart/use-radar-chart.d.ts +19 -0
- package/dist/components/radar-chart/use-radar-chart.d.ts.map +1 -0
- package/dist/components/radar-chart/use-radar-chart.js +26 -0
- package/dist/components/radar-chart/use-radar-chart.js.map +1 -0
- package/dist/components/radio-group/radio-group.d.ts +37 -2
- package/dist/components/radio-group/radio-group.d.ts.map +1 -1
- package/dist/components/radio-group/radio-group.js +54 -8
- package/dist/components/radio-group/radio-group.js.map +1 -1
- package/dist/components/radio-group/use-radio-group.d.ts +3 -1
- package/dist/components/radio-group/use-radio-group.d.ts.map +1 -1
- package/dist/components/radio-group/use-radio-group.js +7 -3
- package/dist/components/radio-group/use-radio-group.js.map +1 -1
- package/dist/components/reasoning/reasoning.d.ts.map +1 -1
- package/dist/components/reasoning/reasoning.js +1 -0
- package/dist/components/reasoning/reasoning.js.map +1 -1
- package/dist/components/sankey-chart/context.js +15 -0
- package/dist/components/sankey-chart/context.js.map +1 -0
- package/dist/components/sankey-chart/sankey-chart.d.ts +161 -0
- package/dist/components/sankey-chart/sankey-chart.d.ts.map +1 -0
- package/dist/components/sankey-chart/sankey-chart.js +208 -0
- package/dist/components/sankey-chart/sankey-chart.js.map +1 -0
- package/dist/components/sankey-chart/use-sankey-chart.d.ts +19 -0
- package/dist/components/sankey-chart/use-sankey-chart.d.ts.map +1 -0
- package/dist/components/sankey-chart/use-sankey-chart.js +26 -0
- package/dist/components/sankey-chart/use-sankey-chart.js.map +1 -0
- package/dist/components/scroll-area/scroll-area.d.ts +13 -5
- package/dist/components/scroll-area/scroll-area.d.ts.map +1 -1
- package/dist/components/scroll-area/scroll-area.js +17 -3
- package/dist/components/scroll-area/scroll-area.js.map +1 -1
- package/dist/components/select/select.d.ts +25 -2
- package/dist/components/select/select.d.ts.map +1 -1
- package/dist/components/select/select.js +48 -6
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/select/use-select.js +2 -1
- package/dist/components/select/use-select.js.map +1 -1
- package/dist/components/side-nav/context.js +17 -1
- package/dist/components/side-nav/context.js.map +1 -1
- package/dist/components/side-nav/side-nav.d.ts +51 -7
- package/dist/components/side-nav/side-nav.d.ts.map +1 -1
- package/dist/components/side-nav/side-nav.js +152 -13
- package/dist/components/side-nav/side-nav.js.map +1 -1
- package/dist/components/side-nav/use-side-nav.d.ts +4 -2
- package/dist/components/side-nav/use-side-nav.d.ts.map +1 -1
- package/dist/components/side-nav/use-side-nav.js +5 -3
- package/dist/components/side-nav/use-side-nav.js.map +1 -1
- package/dist/components/signature-pad/signature-pad.d.ts +26 -4
- package/dist/components/signature-pad/signature-pad.d.ts.map +1 -1
- package/dist/components/signature-pad/signature-pad.js +32 -4
- package/dist/components/signature-pad/signature-pad.js.map +1 -1
- package/dist/components/signature-pad/use-signature-pad.d.ts +1 -1
- package/dist/components/signature-pad/use-signature-pad.d.ts.map +1 -1
- package/dist/components/signature-pad/use-signature-pad.js.map +1 -1
- package/dist/components/skeleton/use-skeleton.js +6 -2
- package/dist/components/skeleton/use-skeleton.js.map +1 -1
- package/dist/components/slider/slider.d.ts +27 -0
- package/dist/components/slider/slider.d.ts.map +1 -1
- package/dist/components/slider/slider.js +12 -0
- package/dist/components/slider/slider.js.map +1 -1
- package/dist/components/sortable/sortable.d.ts +18 -0
- package/dist/components/sortable/sortable.d.ts.map +1 -1
- package/dist/components/sortable/sortable.js +7 -2
- package/dist/components/sortable/sortable.js.map +1 -1
- package/dist/components/sortable/use-sortable.d.ts +1 -1
- package/dist/components/sortable/use-sortable.d.ts.map +1 -1
- package/dist/components/sortable/use-sortable.js +2 -1
- package/dist/components/sortable/use-sortable.js.map +1 -1
- package/dist/components/sparkline/sparkline.d.ts +101 -0
- package/dist/components/sparkline/sparkline.d.ts.map +1 -0
- package/dist/components/sparkline/sparkline.js +54 -0
- package/dist/components/sparkline/sparkline.js.map +1 -0
- package/dist/components/sparkline/use-sparkline.d.ts +15 -0
- package/dist/components/sparkline/use-sparkline.d.ts.map +1 -0
- package/dist/components/sparkline/use-sparkline.js +21 -0
- package/dist/components/sparkline/use-sparkline.js.map +1 -0
- package/dist/components/spinner/spinner.d.ts +8 -0
- package/dist/components/spinner/spinner.d.ts.map +1 -1
- package/dist/components/spinner/spinner.js +2 -0
- package/dist/components/spinner/spinner.js.map +1 -1
- package/dist/components/spinner/use-spinner.js +4 -2
- package/dist/components/spinner/use-spinner.js.map +1 -1
- package/dist/components/statistic/statistic.d.ts.map +1 -1
- package/dist/components/statistic/statistic.js +2 -1
- package/dist/components/statistic/statistic.js.map +1 -1
- package/dist/components/steps/steps.d.ts +28 -1
- package/dist/components/steps/steps.d.ts.map +1 -1
- package/dist/components/steps/steps.js +11 -2
- package/dist/components/steps/steps.js.map +1 -1
- package/dist/components/switch/switch.js +1 -1
- package/dist/components/table/context.js +9 -1
- package/dist/components/table/context.js.map +1 -1
- package/dist/components/table/table.d.ts +52 -3
- package/dist/components/table/table.d.ts.map +1 -1
- package/dist/components/table/table.js +40 -11
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/table/use-table.d.ts +3 -1
- package/dist/components/table/use-table.d.ts.map +1 -1
- package/dist/components/table/use-table.js +5 -2
- package/dist/components/table/use-table.js.map +1 -1
- package/dist/components/tabs/tabs.d.ts +51 -3
- package/dist/components/tabs/tabs.d.ts.map +1 -1
- package/dist/components/tabs/tabs.js +60 -8
- package/dist/components/tabs/tabs.js.map +1 -1
- package/dist/components/tag/use-tag.d.ts.map +1 -1
- package/dist/components/tag/use-tag.js +3 -1
- package/dist/components/tag/use-tag.js.map +1 -1
- package/dist/components/tag-group/tag-group.js +1 -1
- package/dist/components/tag-group/tag-group.js.map +1 -1
- package/dist/components/tags-input/tags-input.d.ts +10 -2
- package/dist/components/tags-input/tags-input.d.ts.map +1 -1
- package/dist/components/tags-input/tags-input.js +11 -4
- package/dist/components/tags-input/tags-input.js.map +1 -1
- package/dist/components/tags-input/use-tags-input.d.ts +4 -2
- package/dist/components/tags-input/use-tags-input.d.ts.map +1 -1
- package/dist/components/tags-input/use-tags-input.js +5 -2
- package/dist/components/tags-input/use-tags-input.js.map +1 -1
- package/dist/components/time-picker/time-picker.d.ts +11 -7
- package/dist/components/time-picker/time-picker.d.ts.map +1 -1
- package/dist/components/time-picker/time-picker.js +4 -2
- package/dist/components/time-picker/time-picker.js.map +1 -1
- package/dist/components/time-range-picker/time-range-picker.d.ts +11 -7
- package/dist/components/time-range-picker/time-range-picker.d.ts.map +1 -1
- package/dist/components/time-range-picker/time-range-picker.js +4 -2
- package/dist/components/time-range-picker/time-range-picker.js.map +1 -1
- package/dist/components/timeline/timeline.d.ts.map +1 -1
- package/dist/components/timeline/timeline.js +2 -1
- package/dist/components/timeline/timeline.js.map +1 -1
- package/dist/components/timestamp/timestamp.d.ts +20 -1
- package/dist/components/timestamp/timestamp.d.ts.map +1 -1
- package/dist/components/timestamp/timestamp.js +16 -5
- package/dist/components/timestamp/timestamp.js.map +1 -1
- package/dist/components/toolbar/toolbar.d.ts +17 -2
- package/dist/components/toolbar/toolbar.d.ts.map +1 -1
- package/dist/components/toolbar/toolbar.js +31 -4
- package/dist/components/toolbar/toolbar.js.map +1 -1
- package/dist/components/toolbar/use-toolbar.d.ts +4 -2
- package/dist/components/toolbar/use-toolbar.d.ts.map +1 -1
- package/dist/components/toolbar/use-toolbar.js +5 -2
- package/dist/components/toolbar/use-toolbar.js.map +1 -1
- package/dist/components/tooltip/context.d.ts +21 -0
- package/dist/components/tooltip/context.d.ts.map +1 -0
- package/dist/components/tooltip/context.js +10 -1
- package/dist/components/tooltip/context.js.map +1 -1
- package/dist/components/tooltip/tooltip.d.ts +53 -1
- package/dist/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/components/tooltip/tooltip.js +34 -3
- package/dist/components/tooltip/tooltip.js.map +1 -1
- package/dist/components/tooltip/use-tooltip.d.ts +3 -18
- package/dist/components/tooltip/use-tooltip.d.ts.map +1 -1
- package/dist/components/tooltip/use-tooltip.js +2 -0
- package/dist/components/tooltip/use-tooltip.js.map +1 -1
- package/dist/components/tour/tour.d.ts +8 -0
- package/dist/components/tour/tour.d.ts.map +1 -1
- package/dist/components/tour/tour.js +2 -0
- package/dist/components/tour/tour.js.map +1 -1
- package/dist/components/transfer/transfer.d.ts +30 -2
- package/dist/components/transfer/transfer.d.ts.map +1 -1
- package/dist/components/transfer/transfer.js +29 -3
- package/dist/components/transfer/transfer.js.map +1 -1
- package/dist/components/tree/tree.d.ts +43 -8
- package/dist/components/tree/tree.d.ts.map +1 -1
- package/dist/components/tree/tree.js +28 -15
- package/dist/components/tree/tree.js.map +1 -1
- package/dist/components/tree-select/context.js +10 -1
- package/dist/components/tree-select/context.js.map +1 -1
- package/dist/components/tree-select/tree-select.d.ts +78 -6
- package/dist/components/tree-select/tree-select.d.ts.map +1 -1
- package/dist/components/tree-select/tree-select.js +127 -12
- package/dist/components/tree-select/tree-select.js.map +1 -1
- package/dist/components/tree-select/use-tree-select.d.ts +3 -0
- package/dist/components/tree-select/use-tree-select.d.ts.map +1 -1
- package/dist/components/tree-select/use-tree-select.js +6 -1
- package/dist/components/tree-select/use-tree-select.js.map +1 -1
- package/dist/components/truncate/truncate.d.ts +25 -4
- package/dist/components/truncate/truncate.d.ts.map +1 -1
- package/dist/components/truncate/truncate.js +29 -14
- package/dist/components/truncate/truncate.js.map +1 -1
- package/dist/components/truncate/use-truncate.d.ts.map +1 -1
- package/dist/components/truncate/use-truncate.js +3 -1
- package/dist/components/truncate/use-truncate.js.map +1 -1
- package/dist/components/typography/typography.d.ts +35 -2
- package/dist/components/typography/typography.d.ts.map +1 -1
- package/dist/components/typography/typography.js +23 -4
- package/dist/components/typography/typography.js.map +1 -1
- package/dist/components/virtualizer/virtualizer.d.ts +26 -2
- package/dist/components/virtualizer/virtualizer.d.ts.map +1 -1
- package/dist/components/virtualizer/virtualizer.js +20 -3
- package/dist/components/virtualizer/virtualizer.js.map +1 -1
- package/dist/components/watermark/watermark.d.ts +14 -1
- package/dist/components/watermark/watermark.d.ts.map +1 -1
- package/dist/components/watermark/watermark.js +20 -5
- package/dist/components/watermark/watermark.js.map +1 -1
- package/dist/config/config.d.ts +1 -1
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +2 -1
- package/dist/config/config.js.map +1 -1
- package/dist/index.d.ts +65 -50
- package/dist/index.js +59 -44
- package/dist/package.js +1 -1
- package/dist/runtime/as-child.js +3 -2
- package/dist/runtime/as-child.js.map +1 -1
- package/dist/runtime/hydration.js +14 -0
- package/dist/runtime/hydration.js.map +1 -0
- package/dist/runtime/use-machine.js +3 -2
- package/dist/runtime/use-machine.js.map +1 -1
- package/dist/runtime/use-overlay-exit.js +0 -1
- package/dist/runtime/use-overlay-exit.js.map +1 -1
- package/dist/runtime/use-scrollbars.js +3 -1
- package/dist/runtime/use-scrollbars.js.map +1 -1
- package/dist/services/notification-service.d.ts +26 -7
- package/dist/services/notification-service.d.ts.map +1 -1
- package/dist/services/notification-service.js +35 -8
- package/dist/services/notification-service.js.map +1 -1
- package/dist/sound.d.ts +6 -7
- package/dist/sound.d.ts.map +1 -1
- package/dist/sound.js +6 -6
- package/dist/sound.js.map +1 -1
- package/package.json +15 -14
- package/dist/components/gradient-text/gradient-text.d.ts +0 -36
- package/dist/components/gradient-text/gradient-text.d.ts.map +0 -1
- package/dist/components/gradient-text/gradient-text.js +0 -20
- package/dist/components/gradient-text/gradient-text.js.map +0 -1
- package/dist/components/icon-wrapper/icon-wrapper.d.ts +0 -29
- package/dist/components/icon-wrapper/icon-wrapper.d.ts.map +0 -1
- package/dist/components/icon-wrapper/icon-wrapper.js +0 -20
- package/dist/components/icon-wrapper/icon-wrapper.js.map +0 -1
- package/dist/components/segmented/context.d.ts +0 -13
- package/dist/components/segmented/context.d.ts.map +0 -1
- package/dist/components/segmented/context.js +0 -24
- package/dist/components/segmented/context.js.map +0 -1
- package/dist/components/segmented/segmented.d.ts +0 -161
- package/dist/components/segmented/segmented.d.ts.map +0 -1
- package/dist/components/segmented/segmented.js +0 -142
- package/dist/components/segmented/segmented.js.map +0 -1
- package/dist/components/segmented/use-segmented.d.ts +0 -15
- package/dist/components/segmented/use-segmented.d.ts.map +0 -1
- package/dist/components/segmented/use-segmented.js +0 -22
- package/dist/components/segmented/use-segmented.js.map +0 -1
- package/dist/components/toast/context.js +0 -15
- package/dist/components/toast/context.js.map +0 -1
- package/dist/components/toast/toast.d.ts +0 -123
- package/dist/components/toast/toast.d.ts.map +0 -1
- package/dist/components/toast/toast.js +0 -112
- package/dist/components/toast/toast.js.map +0 -1
- package/dist/components/toast/use-toast.d.ts +0 -10
- package/dist/components/toast/use-toast.d.ts.map +0 -1
- package/dist/components/toast/use-toast.js +0 -17
- package/dist/components/toast/use-toast.js.map +0 -1
- package/dist/services/toast-service.d.ts +0 -69
- package/dist/services/toast-service.d.ts.map +0 -1
- package/dist/services/toast-service.js +0 -161
- package/dist/services/toast-service.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tag-group.js","names":[],"sources":["../../../src/components/tag-group/tag-group.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// 提供 tag group 相关实现。\n\nimport type { Direction, Orientation, Size, Tone } from '@xihan-ui/core'\nimport type { TagGroupApi, TagGroupItemProps, TagGroupNode, TagGroupNodeMeta, TagGroupSchema, TagGroupSelectionMode, TagGroupTranslations, TagVariant } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { computed, defineComponent, h, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideTagGroup, provideTagGroupItem, useTagGroupContext, useTagGroupItemContext } from './context'\nimport { useTagGroup } from './use-tag-group'\n\ntype TagGroupProps = TagGroupSchema['props']\n\n/** 默认插槽的载荷:选中集合、选择模式与焦点锚点,以及判定选中与整份赋值、单选、切换、移除的命令。 */\nexport type TagGroupRootSlotProps = Pick<\n TagGroupApi,\n 'value' | 'selectionMode' | 'focusedValue' | 'isSelected' | 'setValue' | 'select' | 'toggle' | 'deleteItem'\n>\n\nexport const XhTagGroupRoot = defineComponent({\n name: 'XhTagGroupRoot',\n // 有 connect 兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<TagGroupNode[]> },\n /** 标题文字。提供后不必再写 label 部件;需要放置其他内容时改用 label 插槽。 */\n label: { type: String },\n value: { type: [String, Array] as PropType<string | string[]> },\n defaultValue: { type: [String, Array] as PropType<string | string[]> },\n selectionMode: { type: String as PropType<TagGroupSelectionMode> },\n deletable: Boolean,\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction> },\n orientation: { type: String as PropType<Orientation> },\n typeahead: { type: Boolean, default: undefined },\n variant: { type: String as PropType<TagVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n translations: { type: Object as PropType<Partial<TagGroupTranslations>> },\n },\n // value-change 携带 { value },update:value 携带裸集合;回传值恒为数组,单选时长度 ≤ 1。\n // item-delete 只报「用户要摘这一枚」,条目的去留由宿主改自己的数据\n emits: {\n 'value-change': (_details: PayloadOf<TagGroupProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<TagGroupProps, 'onValueChange'>['value']) => true,\n 'item-delete': (_details: PayloadOf<TagGroupProps, 'onItemDelete'>) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TagGroupRootSlotProps) => VNode[]\n label?: () => VNode[]\n item?: (node: TagGroupNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notify: TagGroupProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyDelete: TagGroupProps['onItemDelete'] = (details) => {\n emit('item-delete', details)\n }\n const ctx = useTagGroup(withXhConfig('tag-group', useFormControlProps(props)) as TagGroupProps, notify, notifyDelete)\n provideTagGroup(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, [\n ...(slots.default\n ? slots.default({\n value: ctx.api.value.value,\n selectionMode: ctx.api.value.selectionMode,\n focusedValue: ctx.api.value.focusedValue,\n isSelected: ctx.api.value.isSelected,\n setValue: ctx.api.value.setValue,\n select: ctx.api.value.select,\n toggle: ctx.api.value.toggle,\n deleteItem: ctx.api.value.deleteItem,\n }) ?? []\n : props.collection\n ? renderDefaultTree(\n ctx.api.value.collection,\n slots.label?.() ?? (props.label != null ? [props.label] : null),\n slots.item,\n )\n : []),\n ])\n },\n})\n\nexport const XhTagGroupLabel = defineComponent({\n name: 'XhTagGroupLabel',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTagGroupList = defineComponent({\n name: 'XhTagGroupList',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n return () => h('div', ctx.api.value.getListProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 一个标签:渲染为 tag 的 root(data-scope=\"tag\"),组把行角色、Tab 停靠点、选中与锚点叠加在它上面。 */\nexport const XhTagGroupItem = defineComponent({\n name: 'XhTagGroupItem',\n props: {\n value: { type: String, required: true },\n // 缺省交给 connect 回 collection 里查,写死 false 会盖掉数据里的声明\n disabled: { type: Boolean, default: undefined },\n deletable: { type: Boolean, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useTagGroupContext()\n const item = computed<TagGroupItemProps>(() => ({\n value: props.value,\n disabled: props.disabled,\n deletable: props.deletable,\n }))\n provideTagGroupItem({ item })\n // 本条目持有焦点时,value 变更重报焦点条目,卸载时上报整组失焦\n const itemEl = ref<HTMLElement | null>(null)\n watch(() => props.value, (next, prev) => {\n if (next === prev)\n return\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'ITEM.FOCUS', value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n // 按「本节点当下正持有焦点」判定,不按 value 比对\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'LIST.BLUR' })\n })\n return () => h(\n 'span',\n { ...ctx.api.value.getItemProps(item.value) as Record<string, unknown>, ref: itemEl },\n slots.default?.(),\n )\n },\n})\n\nexport const XhTagGroupCell = defineComponent({\n name: 'XhTagGroupCell',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('span', ctx.api.value.getCellProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 选中标记:落在格子内、文字之前,选中时展示、未选中时收起;内容留空时由皮肤绘制对号。 */\nexport const XhTagGroupItemIndicator = defineComponent({\n name: 'XhTagGroupItemIndicator',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 标签文字:渲染为 tag 的 label。 */\nexport const XhTagGroupItemText = defineComponent({\n name: 'XhTagGroupItemText',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 移除按钮:渲染为所在标签那份 tag 的 close-trigger,不占 Tab 位;整组未开放移除时收起。 */\nexport const XhTagGroupItemDeleteTrigger = defineComponent({\n name: 'XhTagGroupItemDeleteTrigger',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('button', ctx.api.value.getItemDeleteTriggerProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 未写默认插槽时按 collection 铺开的整套结构,作者只提供数据。\n * 与手写部件产出的 DOM 完全一致,需要修改结构时写默认插槽。\n */\nfunction renderDefaultTree(\n collection: readonly TagGroupNodeMeta[],\n label: (VNode | string)[] | null,\n itemSlot?: (node: TagGroupNodeMeta) => VNode[],\n): VNode[] {\n return [\n ...(label ? [h(XhTagGroupLabel, null, () => label)] : []),\n h(XhTagGroupList, null, () => collection.map(node =>\n h(XhTagGroupItem, { key: node.value, value: node.value }, () => [\n h(XhTagGroupCell, null, () => [\n h(XhTagGroupItemIndicator),\n h(XhTagGroupItemText, null, () => itemSlot?.(node) ?? node.label),\n h(XhTagGroupItemDeleteTrigger),\n ]),\n ]),\n )),\n ]\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tag-group.js","names":[],"sources":["../../../src/components/tag-group/tag-group.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// 提供 tag group 相关实现。\n\nimport type { Direction, Orientation, Size, Tone } from '@xihan-ui/core'\nimport type { TagGroupApi, TagGroupItemProps, TagGroupNode, TagGroupNodeMeta, TagGroupSchema, TagGroupSelectionMode, TagGroupTranslations, TagVariant } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { computed, defineComponent, h, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideTagGroup, provideTagGroupItem, useTagGroupContext, useTagGroupItemContext } from './context'\nimport { useTagGroup } from './use-tag-group'\n\ntype TagGroupProps = TagGroupSchema['props']\n\n/** 默认插槽的载荷:选中集合、选择模式与焦点锚点,以及判定选中与整份赋值、单选、切换、移除的命令。 */\nexport type TagGroupRootSlotProps = Pick<\n TagGroupApi,\n 'value' | 'selectionMode' | 'focusedValue' | 'isSelected' | 'setValue' | 'select' | 'toggle' | 'deleteItem'\n>\n\nexport const XhTagGroupRoot = defineComponent({\n name: 'XhTagGroupRoot',\n // 有 connect 兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<TagGroupNode[]> },\n /** 标题文字。提供后不必再写 label 部件;需要放置其他内容时改用 label 插槽。 */\n label: { type: String },\n value: { type: [String, Array] as PropType<string | string[]> },\n defaultValue: { type: [String, Array] as PropType<string | string[]> },\n selectionMode: { type: String as PropType<TagGroupSelectionMode> },\n deletable: Boolean,\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction> },\n orientation: { type: String as PropType<Orientation> },\n typeahead: { type: Boolean, default: undefined },\n variant: { type: String as PropType<TagVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n translations: { type: Object as PropType<Partial<TagGroupTranslations>> },\n },\n // value-change 携带 { value },update:value 携带裸集合;回传值恒为数组,单选时长度 ≤ 1。\n // item-delete 只报「用户要摘这一枚」,条目的去留由宿主改自己的数据\n emits: {\n 'value-change': (_details: PayloadOf<TagGroupProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<TagGroupProps, 'onValueChange'>['value']) => true,\n 'item-delete': (_details: PayloadOf<TagGroupProps, 'onItemDelete'>) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TagGroupRootSlotProps) => VNode[]\n label?: () => VNode[]\n item?: (node: TagGroupNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notify: TagGroupProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyDelete: TagGroupProps['onItemDelete'] = (details) => {\n emit('item-delete', details)\n }\n const ctx = useTagGroup(withXhConfig('tag-group', useFormControlProps(props)) as TagGroupProps, notify, notifyDelete)\n provideTagGroup(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, [\n ...(slots.default\n ? slots.default({\n value: ctx.api.value.value,\n selectionMode: ctx.api.value.selectionMode,\n focusedValue: ctx.api.value.focusedValue,\n isSelected: ctx.api.value.isSelected,\n setValue: ctx.api.value.setValue,\n select: ctx.api.value.select,\n toggle: ctx.api.value.toggle,\n deleteItem: ctx.api.value.deleteItem,\n }) ?? []\n : props.collection\n ? renderDefaultTree(\n ctx.api.value.collection,\n slots.label?.() ?? (props.label != null ? [props.label] : null),\n slots.item,\n )\n : []),\n ])\n },\n})\n\nexport const XhTagGroupLabel = defineComponent({\n name: 'XhTagGroupLabel',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTagGroupList = defineComponent({\n name: 'XhTagGroupList',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n return () => h('div', ctx.api.value.getListProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 一个标签:渲染为 tag 的 root(data-scope=\"tag\"),组把行角色、Tab 停靠点、选中与锚点叠加在它上面。 */\nexport const XhTagGroupItem = defineComponent({\n name: 'XhTagGroupItem',\n props: {\n value: { type: String, required: true },\n // 缺省交给 connect 回 collection 里查,写死 false 会盖掉数据里的声明\n disabled: { type: Boolean, default: undefined },\n deletable: { type: Boolean, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useTagGroupContext()\n const item = computed<TagGroupItemProps>(() => ({\n value: props.value,\n disabled: props.disabled,\n deletable: props.deletable,\n }))\n provideTagGroupItem({ item })\n // 本条目持有焦点时,value 变更重报焦点条目,卸载时上报整组失焦\n const itemEl = ref<HTMLElement | null>(null)\n watch(() => props.value, (next, prev) => {\n if (next === prev)\n return\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'ITEM.FOCUS', value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n // 按「本节点当下正持有焦点」判定,不按 value 比对\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'LIST.BLUR' })\n })\n return () => h(\n 'span',\n { ...ctx.api.value.getItemProps(item.value) as Record<string, unknown>, ref: itemEl },\n slots.default?.(),\n )\n },\n})\n\nexport const XhTagGroupCell = defineComponent({\n name: 'XhTagGroupCell',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('span', ctx.api.value.getCellProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 选中标记:落在格子内、文字之前,选中时展示、未选中时收起;内容留空时由皮肤绘制对号。 */\nexport const XhTagGroupItemIndicator = defineComponent({\n name: 'XhTagGroupItemIndicator',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 标签文字:渲染为 tag 的 label。 */\nexport const XhTagGroupItemText = defineComponent({\n name: 'XhTagGroupItemText',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 移除按钮:渲染为所在标签那份 tag 的 close-trigger,不占 Tab 位;整组未开放移除时收起。 */\nexport const XhTagGroupItemDeleteTrigger = defineComponent({\n name: 'XhTagGroupItemDeleteTrigger',\n setup(_, { slots }) {\n const ctx = useTagGroupContext()\n const { item } = useTagGroupItemContext()\n return () => h('button', ctx.api.value.getItemDeleteTriggerProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 未写默认插槽时按 collection 铺开的整套结构,作者只提供数据。\n * 与手写部件产出的 DOM 完全一致,需要修改结构时写默认插槽。\n */\nfunction renderDefaultTree(\n collection: readonly TagGroupNodeMeta[],\n label: (VNode | string)[] | null,\n itemSlot?: (node: TagGroupNodeMeta) => VNode[],\n): VNode[] {\n return [\n ...(label ? [h(XhTagGroupLabel, null, () => label)] : []),\n h(XhTagGroupList, null, () => collection.map(node =>\n h(XhTagGroupItem, { key: node.value, value: node.value }, () => [\n h(XhTagGroupCell, null, () => [\n h(XhTagGroupItemText, null, () => itemSlot?.(node) ?? node.label),\n h(XhTagGroupItemIndicator),\n h(XhTagGroupItemDeleteTrigger),\n ]),\n ]),\n )),\n ]\n}\n"],"mappings":";;;;;;AAyBA,MAAa,iBAAiB,gBAAgB;CAC5C,MAAM;CAEN,OAAO;EACL,YAAY,EAAE,MAAM,MAAkC;;EAEtD,OAAO,EAAE,MAAM,OAAO;EACtB,OAAO,EAAE,MAAM,CAAC,QAAQ,KAAK,EAAiC;EAC9D,cAAc,EAAE,MAAM,CAAC,QAAQ,KAAK,EAAiC;EACrE,eAAe,EAAE,MAAM,OAA0C;EACjE,WAAW;EACX,UAAU;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC9C,UAAU;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC9C,MAAM;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC1C,KAAK,EAAE,MAAM,OAA8B;EAC3C,aAAa,EAAE,MAAM,OAAgC;EACrD,WAAW;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC/C,SAAS,EAAE,MAAM,OAA+B;EAChD,MAAM,EAAE,MAAM,OAAyB;EACvC,MAAM,EAAE,MAAM,OAAyB;EACvC,cAAc,EAAE,MAAM,OAAkD;CAC1E;CAGA,OAAO;EACL,iBAAiB,aAAwD;EACzE,iBAAiB,WAA+D;EAChF,gBAAgB,aAAuD;CACzE;CACA,OAAO;CAKP,MAAM,OAAO,EAAE,OAAO,QAAQ;EAC5B,MAAM,UAA0C,YAAY;GAC1D,KAAK,gBAAgB,OAAO;GAC5B,KAAK,gBAAgB,QAAQ,KAAK;EACpC;EACA,MAAM,gBAA+C,YAAY;GAC/D,KAAK,eAAe,OAAO;EAC7B;EACA,MAAM,MAAM,YAAY,aAAa,aAAa,oBAAoB,KAAK,CAAC,GAAoB,QAAQ,YAAY;EACpH,gBAAgB,GAAG;EACnB,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,aAAa,GAA8B,CAC7E,GAAI,MAAM,UACN,MAAM,QAAQ;GACd,OAAO,IAAI,IAAI,MAAM;GACrB,eAAe,IAAI,IAAI,MAAM;GAC7B,cAAc,IAAI,IAAI,MAAM;GAC5B,YAAY,IAAI,IAAI,MAAM;GAC1B,UAAU,IAAI,IAAI,MAAM;GACxB,QAAQ,IAAI,IAAI,MAAM;GACtB,QAAQ,IAAI,IAAI,MAAM;GACtB,YAAY,IAAI,IAAI,MAAM;EAC5B,CAAC,KAAK,CAAC,IACL,MAAM,aACJ,kBACE,IAAI,IAAI,MAAM,YACd,MAAM,QAAQ,MAAM,MAAM,SAAS,OAAO,CAAC,MAAM,KAAK,IAAI,OAC1D,MAAM,IACR,IACA,CAAC,CACT,CAAC;CACH;AACF,CAAC;AAED,MAAa,kBAAkB,gBAAgB;CAC7C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,mBAAmB;EAC/B,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,cAAc,GAA8B,MAAM,UAAU,CAAC;CACpG;AACF,CAAC;AAED,MAAa,iBAAiB,gBAAgB;CAC5C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,mBAAmB;EAC/B,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,aAAa,GAA8B,MAAM,UAAU,CAAC;CAClG;AACF,CAAC;;AAGD,MAAa,iBAAiB,gBAAgB;CAC5C,MAAM;CACN,OAAO;EACL,OAAO;GAAE,MAAM;GAAQ,UAAU;EAAK;EAEtC,UAAU;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC9C,WAAW;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;CACjD;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,MAAM,mBAAmB;EAC/B,MAAM,OAAO,gBAAmC;GAC9C,OAAO,MAAM;GACb,UAAU,MAAM;GAChB,WAAW,MAAM;EACnB,EAAE;EACF,oBAAoB,EAAE,KAAK,CAAC;EAE5B,MAAM,SAAS,IAAwB,IAAI;EAC3C,YAAY,MAAM,QAAQ,MAAM,SAAS;GACvC,IAAI,SAAS,MACX;GACF,MAAM,EAAE,YAAY;GACpB,IAAI,QAAQ,UAAU,MAAM,WAC1B;GACF,IAAI,OAAO,SAAS,QAAQ,MAAM,iBAAiB,MAAM,OAAO,OAC9D,QAAQ,KAAK;IAAE,MAAM;IAAc,OAAO;GAAK,CAAC;EACpD,CAAC;EACD,sBAAsB;GACpB,MAAM,EAAE,YAAY;GACpB,IAAI,QAAQ,UAAU,MAAM,WAC1B;GAEF,IAAI,OAAO,SAAS,QAAQ,MAAM,iBAAiB,MAAM,OAAO,OAC9D,QAAQ,KAAK,EAAE,MAAM,YAAY,CAAC;EACtC,CAAC;EACD,aAAa,EACX,QACA;GAAE,GAAG,IAAI,IAAI,MAAM,aAAa,KAAK,KAAK;GAA8B,KAAK;EAAO,GACpF,MAAM,UAAU,CAClB;CACF;AACF,CAAC;AAED,MAAa,iBAAiB,gBAAgB;CAC5C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,mBAAmB;EAC/B,MAAM,EAAE,SAAS,uBAAuB;EACxC,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,aAAa,KAAK,KAAK,GAA8B,MAAM,UAAU,CAAC;CAC7G;AACF,CAAC;;AAGD,MAAa,0BAA0B,gBAAgB;CACrD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,mBAAmB;EAC/B,MAAM,EAAE,SAAS,uBAAuB;EACxC,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,sBAAsB,KAAK,KAAK,GAA8B,MAAM,UAAU,CAAC;CACtH;AACF,CAAC;;AAGD,MAAa,qBAAqB,gBAAgB;CAChD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,mBAAmB;EAC/B,MAAM,EAAE,SAAS,uBAAuB;EACxC,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,iBAAiB,KAAK,KAAK,GAA8B,MAAM,UAAU,CAAC;CACjH;AACF,CAAC;;AAGD,MAAa,8BAA8B,gBAAgB;CACzD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,mBAAmB;EAC/B,MAAM,EAAE,SAAS,uBAAuB;EACxC,aAAa,EAAE,UAAU,IAAI,IAAI,MAAM,0BAA0B,KAAK,KAAK,GAA8B,MAAM,UAAU,CAAC;CAC5H;AACF,CAAC;;;;;AAMD,SAAS,kBACP,YACA,OACA,UACS;CACT,OAAO,CACL,GAAI,QAAQ,CAAC,EAAE,iBAAiB,YAAY,KAAK,CAAC,IAAI,CAAC,GACvD,EAAE,gBAAgB,YAAY,WAAW,KAAI,SAC3C,EAAE,gBAAgB;EAAE,KAAK,KAAK;EAAO,OAAO,KAAK;CAAM,SAAS,CAC9D,EAAE,gBAAgB,YAAY;EAC5B,EAAE,oBAAoB,YAAY,WAAW,IAAI,KAAK,KAAK,KAAK;EAChE,EAAE,uBAAuB;EACzB,EAAE,2BAA2B;CAC/B,CAAC,CACH,CAAC,CACH,CAAC,CACH;AACF"}
|
|
@@ -49,7 +49,10 @@ declare const XhTagsInputRoot: import("vue").DefineComponent<import("vue").Extra
|
|
|
49
49
|
type: StringConstructor;
|
|
50
50
|
};
|
|
51
51
|
delimiter: {
|
|
52
|
-
type:
|
|
52
|
+
type: PropType<string | string[]>;
|
|
53
|
+
};
|
|
54
|
+
validate: {
|
|
55
|
+
type: PropType<TagsInputProps["validate"]>;
|
|
53
56
|
};
|
|
54
57
|
addOnPaste: BooleanConstructor;
|
|
55
58
|
editable: BooleanConstructor;
|
|
@@ -75,6 +78,7 @@ declare const XhTagsInputRoot: import("vue").DefineComponent<import("vue").Extra
|
|
|
75
78
|
'update:value': (_value: PayloadOf<TagsInputProps, "onValueChange">["value"]) => true;
|
|
76
79
|
'input-value-change': (_details: PayloadOf<TagsInputProps, "onInputValueChange">) => true;
|
|
77
80
|
'update:inputValue': (_inputValue: PayloadOf<TagsInputProps, "onInputValueChange">["inputValue"]) => true;
|
|
81
|
+
'tag-reject': (_details: PayloadOf<TagsInputProps, "onTagReject">) => true;
|
|
78
82
|
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
79
83
|
value: {
|
|
80
84
|
type: PropType<string[]>;
|
|
@@ -116,7 +120,10 @@ declare const XhTagsInputRoot: import("vue").DefineComponent<import("vue").Extra
|
|
|
116
120
|
type: StringConstructor;
|
|
117
121
|
};
|
|
118
122
|
delimiter: {
|
|
119
|
-
type:
|
|
123
|
+
type: PropType<string | string[]>;
|
|
124
|
+
};
|
|
125
|
+
validate: {
|
|
126
|
+
type: PropType<TagsInputProps["validate"]>;
|
|
120
127
|
};
|
|
121
128
|
addOnPaste: BooleanConstructor;
|
|
122
129
|
editable: BooleanConstructor;
|
|
@@ -140,6 +147,7 @@ declare const XhTagsInputRoot: import("vue").DefineComponent<import("vue").Extra
|
|
|
140
147
|
"onUpdate:value"?: ((_value: string[]) => any) | undefined;
|
|
141
148
|
"onInput-value-change"?: ((_details: import("@xihan-ui/headless").TagsInputInputValueChangeDetails) => any) | undefined;
|
|
142
149
|
"onUpdate:inputValue"?: ((_inputValue: string) => any) | undefined;
|
|
150
|
+
"onTag-reject"?: ((_details: import("@xihan-ui/headless").TagsInputTagRejectDetails) => any) | undefined;
|
|
143
151
|
}>, {
|
|
144
152
|
required: boolean;
|
|
145
153
|
invalid: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags-input.d.ts","names":[],"sources":["../../../src/components/tags-input/tags-input.ts"],"mappings":";;;;;KAkBK,iBAAiB;;KAGV,0BAA0B,KAAK;;KAG/B,yBAAyB,KACnC;cAmBW,+BAAe,8BAAA;;IAKA,MAAA;;;IACO,MAAA
|
|
1
|
+
{"version":3,"file":"tags-input.d.ts","names":[],"sources":["../../../src/components/tags-input/tags-input.ts"],"mappings":";;;;;KAkBK,iBAAiB;;KAGV,0BAA0B,KAAK;;KAG/B,yBAAyB,KACnC;cAmBW,+BAAe,8BAAA;;IAKA,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAYO,MAAA;;;IACR,MAAA,SAAS;;;;;IAGP,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACD,MAAA,SAAS,QAAQ;;;;;EAItB,iBAAA,UAAA,UAAU;EACZ,iBAAA,QAAA,UAAU;EACF,uBAAA,UAAA,UAAU;EACR,sBAAA,aAAA,UAAU;EACpB,eAAA,UAAA,UAAU;;;IA7BX,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAYO,MAAA;;;IACR,MAAA,SAAS;;;;;IAGP,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACD,MAAA,SAAS,QAAQ;;;;;;;;;;;;;;;;;;EAWvC,WAAC,OAAO,2BAA2B;kCAiC/C;cAEW,gCAAgB,0BAAA,oBAAA,4BAAA;;8BAO3B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAM7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,gCAAgB,0BAAA,oBAAA,4BAAA;;8BAU3B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,+BAAe,8BAAA;;;;;;;;;;;;MAgC1B,oDAAA;;cAGW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAOjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAO9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,4CAA4B,0BAAA,oBAAA,4BAAA;;8BAOvC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,oCAAoB,0BAAA,oBAAA,4BAAA;;8BAO/B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAMlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,gCAAgB,0BAAA,oBAAA,4BAAA;;;EAGf,WAAC,OAAO,4BAA4B;kCAchD;cAEW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAMjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
|
|
@@ -33,7 +33,8 @@ const XhTagsInputRoot = defineComponent({
|
|
|
33
33
|
showCount: Boolean,
|
|
34
34
|
name: { type: String },
|
|
35
35
|
placeholder: { type: String },
|
|
36
|
-
delimiter: { type: String },
|
|
36
|
+
delimiter: { type: [String, Array] },
|
|
37
|
+
validate: { type: Function },
|
|
37
38
|
addOnPaste: Boolean,
|
|
38
39
|
editable: Boolean,
|
|
39
40
|
blurBehavior: { type: String },
|
|
@@ -46,7 +47,8 @@ const XhTagsInputRoot = defineComponent({
|
|
|
46
47
|
"value-change": (_details) => true,
|
|
47
48
|
"update:value": (_value) => true,
|
|
48
49
|
"input-value-change": (_details) => true,
|
|
49
|
-
"update:inputValue": (_inputValue) => true
|
|
50
|
+
"update:inputValue": (_inputValue) => true,
|
|
51
|
+
"tag-reject": (_details) => true
|
|
50
52
|
},
|
|
51
53
|
slots: Object,
|
|
52
54
|
setup(props, { slots, emit }) {
|
|
@@ -58,9 +60,11 @@ const XhTagsInputRoot = defineComponent({
|
|
|
58
60
|
emit("input-value-change", details);
|
|
59
61
|
emit("update:inputValue", details.inputValue);
|
|
60
62
|
};
|
|
63
|
+
const onTagReject = (details) => emit("tag-reject", details);
|
|
61
64
|
const ctx = useTagsInput(withXhConfig("tags-input", useFormControlProps(props)), {
|
|
62
65
|
onValueChange,
|
|
63
|
-
onInputValueChange
|
|
66
|
+
onInputValueChange,
|
|
67
|
+
onTagReject
|
|
64
68
|
});
|
|
65
69
|
provideTagsInput(ctx);
|
|
66
70
|
return () => h("div", ctx.api.value.getRootProps(), slots.default?.({
|
|
@@ -94,7 +98,10 @@ const XhTagsInputControl = defineComponent({
|
|
|
94
98
|
name: "XhTagsInputControl",
|
|
95
99
|
setup(_, { slots }) {
|
|
96
100
|
const ctx = useTagsInputContext();
|
|
97
|
-
return () => h("div",
|
|
101
|
+
return () => h("div", {
|
|
102
|
+
...ctx.api.value.getControlProps(),
|
|
103
|
+
ref: ctx.controlRef
|
|
104
|
+
}, slots.default?.());
|
|
98
105
|
}
|
|
99
106
|
});
|
|
100
107
|
const XhTagsInputInput = defineComponent({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags-input.js","names":[],"sources":["../../../src/components/tags-input/tags-input.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// 提供 tags input 相关实现。\n\nimport type { ControlVariant, Size, Tone } from '@xihan-ui/core'\nimport type { TagsInputApi, TagsInputBlurBehavior, TagsInputItemProps, TagsInputSchema, TagsInputTranslations } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { computed, defineComponent, h, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { useFieldLabelWiring, useFieldStateWiring } from '../field/use-field-control'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideTagsInput, provideTagsInputItem, useTagsInputContext, useTagsInputItemContext } from './context'\nimport { useTagsInput } from './use-tags-input'\n\ntype TagsInputProps = TagsInputSchema['props']\n\n/** 计数部件默认插槽的载荷:当前个数、上限与已达上限、越界两个标志。 */\nexport type TagsInputCountSlotProps = Pick<TagsInputApi, 'count' | 'max' | 'atMax' | 'overflow'>\n\n/** 默认插槽的载荷:标签集合与输入文本、数量与越界标志、光标与编辑锚点,以及增删改与清空的动作。 */\nexport type TagsInputRootSlotProps = Pick<\n TagsInputApi,\n | 'value'\n | 'count'\n | 'inputValue'\n | 'empty'\n | 'atMax'\n | 'overflow'\n | 'highlightedValue'\n | 'editedValue'\n | 'canClear'\n | 'setValue'\n | 'addValue'\n | 'deleteValue'\n | 'clear'\n | 'setInputValue'\n | 'highlight'\n | 'edit'\n>\n\nexport const XhTagsInputRoot = defineComponent({\n name: 'XhTagsInputRoot',\n // 有 connect 与机器兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n // 缺席值 undefined 表示非受控\n value: { type: Array as PropType<string[]> },\n defaultValue: { type: Array as PropType<string[]> },\n inputValue: { type: String },\n defaultInputValue: { type: String },\n max: { type: Number },\n allowOverflow: Boolean,\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n invalid: { type: Boolean, default: undefined },\n showCount: Boolean,\n name: { type: String },\n placeholder: { type: String },\n delimiter: { type: String },\n addOnPaste: Boolean,\n editable: Boolean,\n blurBehavior: { type: String as PropType<TagsInputBlurBehavior | null> },\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n translations: { type: Object as PropType<Partial<TagsInputTranslations>> },\n },\n // value-change 携带 { value },update:value 携带裸数组;输入文本走 input-value-change 一路\n emits: {\n 'value-change': (_details: PayloadOf<TagsInputProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<TagsInputProps, 'onValueChange'>['value']) => true,\n 'input-value-change': (_details: PayloadOf<TagsInputProps, 'onInputValueChange'>) => true,\n 'update:inputValue': (_inputValue: PayloadOf<TagsInputProps, 'onInputValueChange'>['inputValue']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TagsInputRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const onValueChange: TagsInputProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const onInputValueChange: TagsInputProps['onInputValueChange'] = (details) => {\n emit('input-value-change', details)\n emit('update:inputValue', details.inputValue)\n }\n const ctx = useTagsInput(withXhConfig('tags-input', useFormControlProps(props)) as TagsInputProps, { onValueChange, onInputValueChange })\n provideTagsInput(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n value: ctx.api.value.value,\n count: ctx.api.value.count,\n inputValue: ctx.api.value.inputValue,\n empty: ctx.api.value.empty,\n atMax: ctx.api.value.atMax,\n overflow: ctx.api.value.overflow,\n highlightedValue: ctx.api.value.highlightedValue,\n editedValue: ctx.api.value.editedValue,\n canClear: ctx.api.value.canClear,\n setValue: ctx.api.value.setValue,\n addValue: ctx.api.value.addValue,\n deleteValue: ctx.api.value.deleteValue,\n clear: ctx.api.value.clear,\n setInputValue: ctx.api.value.setInputValue,\n highlight: ctx.api.value.highlight,\n edit: ctx.api.value.edit,\n }))\n },\n})\n\nexport const XhTagsInputLabel = defineComponent({\n name: 'XhTagsInputLabel',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n // 用原生 label,getLabelProps 的 for 指向输入框\n return () => h('label', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTagsInputControl = defineComponent({\n name: 'XhTagsInputControl',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n return () => h('div', ctx.api.value.getControlProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTagsInputInput = defineComponent({\n name: 'XhTagsInputInput',\n setup() {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useTagsInputContext()\n return () => h('input', fieldLabel.value({ ...fieldWiring.value, ...ctx.api.value.getInputProps() as Record<string, unknown> }))\n },\n})\n\nexport const XhTagsInputItem = defineComponent({\n name: 'XhTagsInputItem',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTagsInputContext()\n const item = computed<TagsInputItemProps>(() => ({ value: props.value }))\n provideTagsInputItem({ item })\n // 本标签持有焦点时,value 变更或卸载都上报焦点离场以终止编辑会话\n const itemEl = ref<HTMLElement | null>(null)\n const holdsFocus = (): boolean => {\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return false\n const active = service.scope.getActiveElement()\n return !!itemEl.value && !!active && (itemEl.value === active || itemEl.value.contains(active))\n }\n watch(() => props.value, (next, prev) => {\n if (next !== prev && holdsFocus())\n ctx.service.send({ type: 'ITEM.FOCUS_LOST' })\n })\n onBeforeUnmount(() => {\n if (holdsFocus())\n ctx.service.send({ type: 'ITEM.FOCUS_LOST' })\n })\n return () => h(\n 'div',\n { ...ctx.api.value.getItemProps(item.value) as Record<string, unknown>, ref: itemEl },\n slots.default?.(),\n )\n },\n})\n\n/** 标签的预览:渲染为库内 tag 的 root(data-scope=\"tag\"),就地编辑时由 tag 收起。 */\nexport const XhTagsInputItemPreview = defineComponent({\n name: 'XhTagsInputItemPreview',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('span', ctx.api.value.getItemPreviewProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 标签文字:渲染为 tag 的 label,截断落在这一层。 */\nexport const XhTagsInputItemText = defineComponent({\n name: 'XhTagsInputItemText',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 删除按钮:渲染为所在标签那份 tag 的 close-trigger,不占 Tab 位;禁用与只读时保留位置、原生 disabled。 */\nexport const XhTagsInputItemDeleteTrigger = defineComponent({\n name: 'XhTagsInputItemDeleteTrigger',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('button', ctx.api.value.getItemDeleteTriggerProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTagsInputItemInput = defineComponent({\n name: 'XhTagsInputItemInput',\n setup() {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('input', ctx.api.value.getItemInputProps(item.value) as Record<string, unknown>)\n },\n})\n\nexport const XhTagsInputClearTrigger = defineComponent({\n name: 'XhTagsInputClearTrigger',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 计数:未写内容时渲染「已用 / 上限」,未设上限时只渲染已用。 */\nexport const XhTagsInputCount = defineComponent({\n name: 'XhTagsInputCount',\n slots: Object as SlotsType<{\n default?: (props: TagsInputCountSlotProps) => VNode[]\n }>,\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n return () => {\n const api = ctx.api.value\n const fallback = api.max === undefined ? `${api.count}` : `${api.count} / ${api.max}`\n return h(\n 'span',\n api.getCountProps() as Record<string, unknown>,\n slots.default?.({ count: api.count, max: api.max, atMax: api.atMax, overflow: api.overflow }) ?? fallback,\n )\n }\n },\n})\n\nexport const XhTagsInputHiddenInput = defineComponent({\n name: 'XhTagsInputHiddenInput',\n setup() {\n const ctx = useTagsInputContext()\n return () => h('input', ctx.api.value.getHiddenInputProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tags-input.js","names":[],"sources":["../../../src/components/tags-input/tags-input.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// 提供 tags input 相关实现。\n\nimport type { ControlVariant, Size, Tone } from '@xihan-ui/core'\nimport type { TagsInputApi, TagsInputBlurBehavior, TagsInputItemProps, TagsInputSchema, TagsInputTranslations } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { computed, defineComponent, h, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { useFieldLabelWiring, useFieldStateWiring } from '../field/use-field-control'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideTagsInput, provideTagsInputItem, useTagsInputContext, useTagsInputItemContext } from './context'\nimport { useTagsInput } from './use-tags-input'\n\ntype TagsInputProps = TagsInputSchema['props']\n\n/** 计数部件默认插槽的载荷:当前个数、上限与已达上限、越界两个标志。 */\nexport type TagsInputCountSlotProps = Pick<TagsInputApi, 'count' | 'max' | 'atMax' | 'overflow'>\n\n/** 默认插槽的载荷:标签集合与输入文本、数量与越界标志、光标与编辑锚点,以及增删改与清空的动作。 */\nexport type TagsInputRootSlotProps = Pick<\n TagsInputApi,\n | 'value'\n | 'count'\n | 'inputValue'\n | 'empty'\n | 'atMax'\n | 'overflow'\n | 'highlightedValue'\n | 'editedValue'\n | 'canClear'\n | 'setValue'\n | 'addValue'\n | 'deleteValue'\n | 'clear'\n | 'setInputValue'\n | 'highlight'\n | 'edit'\n>\n\nexport const XhTagsInputRoot = defineComponent({\n name: 'XhTagsInputRoot',\n // 有 connect 与机器兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n // 缺席值 undefined 表示非受控\n value: { type: Array as PropType<string[]> },\n defaultValue: { type: Array as PropType<string[]> },\n inputValue: { type: String },\n defaultInputValue: { type: String },\n max: { type: Number },\n allowOverflow: Boolean,\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n invalid: { type: Boolean, default: undefined },\n showCount: Boolean,\n name: { type: String },\n placeholder: { type: String },\n delimiter: { type: [String, Array] as PropType<string | string[]> },\n validate: { type: Function as PropType<TagsInputProps['validate']> },\n addOnPaste: Boolean,\n editable: Boolean,\n blurBehavior: { type: String as PropType<TagsInputBlurBehavior | null> },\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n translations: { type: Object as PropType<Partial<TagsInputTranslations>> },\n },\n // value-change 携带 { value },update:value 携带裸数组;输入文本走 input-value-change 一路\n emits: {\n 'value-change': (_details: PayloadOf<TagsInputProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<TagsInputProps, 'onValueChange'>['value']) => true,\n 'input-value-change': (_details: PayloadOf<TagsInputProps, 'onInputValueChange'>) => true,\n 'update:inputValue': (_inputValue: PayloadOf<TagsInputProps, 'onInputValueChange'>['inputValue']) => true,\n 'tag-reject': (_details: PayloadOf<TagsInputProps, 'onTagReject'>) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TagsInputRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const onValueChange: TagsInputProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const onInputValueChange: TagsInputProps['onInputValueChange'] = (details) => {\n emit('input-value-change', details)\n emit('update:inputValue', details.inputValue)\n }\n const onTagReject: TagsInputProps['onTagReject'] = details => emit('tag-reject', details)\n const ctx = useTagsInput(withXhConfig('tags-input', useFormControlProps(props)) as TagsInputProps, { onValueChange, onInputValueChange, onTagReject })\n provideTagsInput(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n value: ctx.api.value.value,\n count: ctx.api.value.count,\n inputValue: ctx.api.value.inputValue,\n empty: ctx.api.value.empty,\n atMax: ctx.api.value.atMax,\n overflow: ctx.api.value.overflow,\n highlightedValue: ctx.api.value.highlightedValue,\n editedValue: ctx.api.value.editedValue,\n canClear: ctx.api.value.canClear,\n setValue: ctx.api.value.setValue,\n addValue: ctx.api.value.addValue,\n deleteValue: ctx.api.value.deleteValue,\n clear: ctx.api.value.clear,\n setInputValue: ctx.api.value.setInputValue,\n highlight: ctx.api.value.highlight,\n edit: ctx.api.value.edit,\n }))\n },\n})\n\nexport const XhTagsInputLabel = defineComponent({\n name: 'XhTagsInputLabel',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n // 用原生 label,getLabelProps 的 for 指向输入框\n return () => h('label', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTagsInputControl = defineComponent({\n name: 'XhTagsInputControl',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n return () => h('div', { ...(ctx.api.value.getControlProps() as Record<string, unknown>), ref: ctx.controlRef }, slots.default?.())\n },\n})\n\nexport const XhTagsInputInput = defineComponent({\n name: 'XhTagsInputInput',\n setup() {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useTagsInputContext()\n return () => h('input', fieldLabel.value({ ...fieldWiring.value, ...ctx.api.value.getInputProps() as Record<string, unknown> }))\n },\n})\n\nexport const XhTagsInputItem = defineComponent({\n name: 'XhTagsInputItem',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTagsInputContext()\n const item = computed<TagsInputItemProps>(() => ({ value: props.value }))\n provideTagsInputItem({ item })\n // 本标签持有焦点时,value 变更或卸载都上报焦点离场以终止编辑会话\n const itemEl = ref<HTMLElement | null>(null)\n const holdsFocus = (): boolean => {\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return false\n const active = service.scope.getActiveElement()\n return !!itemEl.value && !!active && (itemEl.value === active || itemEl.value.contains(active))\n }\n watch(() => props.value, (next, prev) => {\n if (next !== prev && holdsFocus())\n ctx.service.send({ type: 'ITEM.FOCUS_LOST' })\n })\n onBeforeUnmount(() => {\n if (holdsFocus())\n ctx.service.send({ type: 'ITEM.FOCUS_LOST' })\n })\n return () => h(\n 'div',\n { ...ctx.api.value.getItemProps(item.value) as Record<string, unknown>, ref: itemEl },\n slots.default?.(),\n )\n },\n})\n\n/** 标签的预览:渲染为库内 tag 的 root(data-scope=\"tag\"),就地编辑时由 tag 收起。 */\nexport const XhTagsInputItemPreview = defineComponent({\n name: 'XhTagsInputItemPreview',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('span', ctx.api.value.getItemPreviewProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 标签文字:渲染为 tag 的 label,截断落在这一层。 */\nexport const XhTagsInputItemText = defineComponent({\n name: 'XhTagsInputItemText',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 删除按钮:渲染为所在标签那份 tag 的 close-trigger,不占 Tab 位;禁用与只读时保留位置、原生 disabled。 */\nexport const XhTagsInputItemDeleteTrigger = defineComponent({\n name: 'XhTagsInputItemDeleteTrigger',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('button', ctx.api.value.getItemDeleteTriggerProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTagsInputItemInput = defineComponent({\n name: 'XhTagsInputItemInput',\n setup() {\n const ctx = useTagsInputContext()\n const { item } = useTagsInputItemContext()\n return () => h('input', ctx.api.value.getItemInputProps(item.value) as Record<string, unknown>)\n },\n})\n\nexport const XhTagsInputClearTrigger = defineComponent({\n name: 'XhTagsInputClearTrigger',\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 计数:未写内容时渲染「已用 / 上限」,未设上限时只渲染已用。 */\nexport const XhTagsInputCount = defineComponent({\n name: 'XhTagsInputCount',\n slots: Object as SlotsType<{\n default?: (props: TagsInputCountSlotProps) => VNode[]\n }>,\n setup(_, { slots }) {\n const ctx = useTagsInputContext()\n return () => {\n const api = ctx.api.value\n const fallback = api.max === undefined ? `${api.count}` : `${api.count} / ${api.max}`\n return h(\n 'span',\n api.getCountProps() as Record<string, unknown>,\n slots.default?.({ count: api.count, max: api.max, atMax: api.atMax, overflow: api.overflow }) ?? fallback,\n )\n }\n },\n})\n\nexport const XhTagsInputHiddenInput = defineComponent({\n name: 'XhTagsInputHiddenInput',\n setup() {\n const ctx = useTagsInputContext()\n return () => h('input', ctx.api.value.getHiddenInputProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ComputedRef } from "vue";
|
|
1
|
+
import { ComputedRef, Ref } from "vue";
|
|
2
2
|
import { Service } from "@xihan-ui/core";
|
|
3
3
|
import { TagsInputApi, TagsInputSchema } from "@xihan-ui/headless";
|
|
4
4
|
//#region src/components/tags-input/use-tags-input.d.ts
|
|
@@ -6,8 +6,10 @@ interface TagsInputContext {
|
|
|
6
6
|
api: ComputedRef<TagsInputApi>;
|
|
7
7
|
/** 状态机实例,供部件上报 DOM 侧的事实(如标签节点带着焦点离场)。 */
|
|
8
8
|
service: Service<TagsInputSchema>;
|
|
9
|
+
/** 标签所在的容器:列表动效接在它上面。 */
|
|
10
|
+
controlRef: Ref<HTMLElement | null>;
|
|
9
11
|
}
|
|
10
|
-
declare function useTagsInput(props: TagsInputSchema['props'], handlers?: Pick<TagsInputSchema['props'], 'onValueChange' | 'onInputValueChange'>): TagsInputContext;
|
|
12
|
+
declare function useTagsInput(props: TagsInputSchema['props'], handlers?: Pick<TagsInputSchema['props'], 'onValueChange' | 'onInputValueChange' | 'onTagReject'>): TagsInputContext;
|
|
11
13
|
//#endregion
|
|
12
14
|
export { TagsInputContext, useTagsInput };
|
|
13
15
|
//# sourceMappingURL=use-tags-input.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-tags-input.d.ts","names":[],"sources":["../../../src/components/tags-input/use-tags-input.ts"],"mappings":";;;;UAiBiB;EACf,KAAK,YAAY;;EAEjB,SAAS,QAAQ;;
|
|
1
|
+
{"version":3,"file":"use-tags-input.d.ts","names":[],"sources":["../../../src/components/tags-input/use-tags-input.ts"],"mappings":";;;;UAiBiB;EACf,KAAK,YAAY;;EAEjB,SAAS,QAAQ;;EAEjB,YAAY,IAAI;;iBAGF,aACd,OAAO,0BACP,WAAU,KAAK,oFACd"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { vueNormalize } from "../../runtime/normalize-props.js";
|
|
2
2
|
import { useMachine } from "../../runtime/use-machine.js";
|
|
3
3
|
import { createVueIdGenerator } from "../../runtime/vue-id.js";
|
|
4
|
-
import { computed } from "vue";
|
|
4
|
+
import { computed, ref } from "vue";
|
|
5
5
|
import { createScope } from "@xihan-ui/core";
|
|
6
6
|
import { connectTagsInput, tagsInputMachine } from "@xihan-ui/headless";
|
|
7
7
|
//#region src/components/tags-input/use-tags-input.ts
|
|
@@ -10,9 +10,12 @@ function useTagsInput(props, handlers = {}) {
|
|
|
10
10
|
...props,
|
|
11
11
|
...handlers
|
|
12
12
|
}), createScope(null, createVueIdGenerator()));
|
|
13
|
+
const controlRef = ref(null);
|
|
14
|
+
service.refs.set("getControlEl", () => controlRef.value);
|
|
13
15
|
return {
|
|
14
16
|
api: computed(() => connectTagsInput(service, vueNormalize)),
|
|
15
|
-
service
|
|
17
|
+
service,
|
|
18
|
+
controlRef
|
|
16
19
|
};
|
|
17
20
|
}
|
|
18
21
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-tags-input.js","names":[],"sources":["../../../src/components/tags-input/use-tags-input.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 use tags input 相关实现。\n\nimport type { Service } from '@xihan-ui/core'\nimport type { TagsInputApi, TagsInputSchema } from '@xihan-ui/headless'\nimport type { ComputedRef } from 'vue'\nimport { createScope } from '@xihan-ui/core'\nimport { connectTagsInput, tagsInputMachine } from '@xihan-ui/headless'\nimport { computed } from 'vue'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface TagsInputContext {\n api: ComputedRef<TagsInputApi>\n /** 状态机实例,供部件上报 DOM 侧的事实(如标签节点带着焦点离场)。 */\n service: Service<TagsInputSchema>\n}\n\nexport function useTagsInput(\n props: TagsInputSchema['props'],\n handlers: Pick<TagsInputSchema['props'], 'onValueChange' | 'onInputValueChange'> = {},\n): TagsInputContext {\n // scope id 走 Vue 的 useId,保证同页多实例的 IDREF 不相撞\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n const service = useMachine(tagsInputMachine, () => ({ ...props, ...handlers }), scope)\n const api = computed(() => connectTagsInput(service, vueNormalize))\n return { api, service }\n}\n"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"use-tags-input.js","names":[],"sources":["../../../src/components/tags-input/use-tags-input.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 use tags input 相关实现。\n\nimport type { Service } from '@xihan-ui/core'\nimport type { TagsInputApi, TagsInputSchema } from '@xihan-ui/headless'\nimport type { ComputedRef, Ref } from 'vue'\nimport { createScope } from '@xihan-ui/core'\nimport { connectTagsInput, tagsInputMachine } from '@xihan-ui/headless'\nimport { computed, ref } from 'vue'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface TagsInputContext {\n api: ComputedRef<TagsInputApi>\n /** 状态机实例,供部件上报 DOM 侧的事实(如标签节点带着焦点离场)。 */\n service: Service<TagsInputSchema>\n /** 标签所在的容器:列表动效接在它上面。 */\n controlRef: Ref<HTMLElement | null>\n}\n\nexport function useTagsInput(\n props: TagsInputSchema['props'],\n handlers: Pick<TagsInputSchema['props'], 'onValueChange' | 'onInputValueChange' | 'onTagReject'> = {},\n): TagsInputContext {\n // scope id 走 Vue 的 useId,保证同页多实例的 IDREF 不相撞\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n const service = useMachine(tagsInputMachine, () => ({ ...props, ...handlers }), scope)\n const controlRef = ref<HTMLElement | null>(null)\n // 传 getter 而非节点本身,ref 在挂载后才有值\n service.refs.set('getControlEl', () => controlRef.value)\n const api = computed(() => connectTagsInput(service, vueNormalize))\n return { api, service, controlRef }\n}\n"],"mappings":";;;;;;;AAyBA,SAAgB,aACd,OACA,WAAmG,CAAC,GAClF;CAIlB,MAAM,UAAU,WAAW,yBAAyB;EAAE,GAAG;EAAO,GAAG;CAAS,IAD9D,YAAY,MADZ,qBACsB,CACgD,CAAC;CACrF,MAAM,aAAa,IAAwB,IAAI;CAE/C,QAAQ,KAAK,IAAI,sBAAsB,WAAW,KAAK;CAEvD,OAAO;EAAE,KADG,eAAe,iBAAiB,SAAS,YAAY,CACtD;EAAG;EAAS;CAAW;AACpC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PayloadOf } from "../../runtime/payload.js";
|
|
2
2
|
import { PropType, SlotsType, VNode } from "vue";
|
|
3
3
|
import { ControlVariant, Direction, Placement, Size, Tone } from "@xihan-ui/core";
|
|
4
|
-
import { TimeGranularity, TimeHourCycle, TimePickerApi, TimePickerColumn, TimePickerColumnUnit, TimePickerPreset, TimePickerPresetState, TimePickerSchema, TimeSegmentType } from "@xihan-ui/headless";
|
|
4
|
+
import { TimeGranularity, TimeHourCycle, TimePickerApi, TimePickerColumn, TimePickerColumnUnit, TimePickerPreset, TimePickerPresetState, TimePickerSchema, TimeSegmentType, TimeStep, TimeUnavailablePredicate } from "@xihan-ui/headless";
|
|
5
5
|
//#region src/components/time-picker/time-picker.d.ts
|
|
6
6
|
type TimePickerProps = TimePickerSchema['props'];
|
|
7
7
|
/** 默认插槽的载荷:浮层开合与当前值、值状态标志、当前的段与列,以及开合、写值、清空的动作。 */
|
|
@@ -41,8 +41,9 @@ declare const XhTimePickerRoot: import("vue").DefineComponent<import("vue").Extr
|
|
|
41
41
|
granularity: {
|
|
42
42
|
type: PropType<TimeGranularity>;
|
|
43
43
|
};
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
/** 按单位的步进:`{ hour?, minute?, second? }`,各单位缺省 1。 */
|
|
45
|
+
timeStep: {
|
|
46
|
+
type: PropType<TimeStep>;
|
|
46
47
|
};
|
|
47
48
|
/** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */
|
|
48
49
|
presets: {
|
|
@@ -55,8 +56,9 @@ declare const XhTimePickerRoot: import("vue").DefineComponent<import("vue").Extr
|
|
|
55
56
|
translations: {
|
|
56
57
|
type: PropType<TimePickerProps["translations"]>;
|
|
57
58
|
};
|
|
59
|
+
/** 逐格可选性:时列按 24 小时制给值,第三个参数带已选的时与分。 */
|
|
58
60
|
isTimeUnavailable: {
|
|
59
|
-
type: PropType<
|
|
61
|
+
type: PropType<TimeUnavailablePredicate>;
|
|
60
62
|
};
|
|
61
63
|
readOnly: {
|
|
62
64
|
type: BooleanConstructor;
|
|
@@ -126,8 +128,9 @@ declare const XhTimePickerRoot: import("vue").DefineComponent<import("vue").Extr
|
|
|
126
128
|
granularity: {
|
|
127
129
|
type: PropType<TimeGranularity>;
|
|
128
130
|
};
|
|
129
|
-
|
|
130
|
-
|
|
131
|
+
/** 按单位的步进:`{ hour?, minute?, second? }`,各单位缺省 1。 */
|
|
132
|
+
timeStep: {
|
|
133
|
+
type: PropType<TimeStep>;
|
|
131
134
|
};
|
|
132
135
|
/** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */
|
|
133
136
|
presets: {
|
|
@@ -140,8 +143,9 @@ declare const XhTimePickerRoot: import("vue").DefineComponent<import("vue").Extr
|
|
|
140
143
|
translations: {
|
|
141
144
|
type: PropType<TimePickerProps["translations"]>;
|
|
142
145
|
};
|
|
146
|
+
/** 逐格可选性:时列按 24 小时制给值,第三个参数带已选的时与分。 */
|
|
143
147
|
isTimeUnavailable: {
|
|
144
|
-
type: PropType<
|
|
148
|
+
type: PropType<TimeUnavailablePredicate>;
|
|
145
149
|
};
|
|
146
150
|
readOnly: {
|
|
147
151
|
type: BooleanConstructor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time-picker.d.ts","names":[],"sources":["../../../src/components/time-picker/time-picker.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"time-picker.d.ts","names":[],"sources":["../../../src/components/time-picker/time-picker.ts"],"mappings":";;;;;KAsCK,kBAAkB;;KAGX,0BAA0B,KACpC;;UAce;EACf,SAAS;;;UAIM;EACf,kBAAkB;;cAGP,gCAAgB,8BAAA;;;;;;;;;;;;;;;;;;;;;;IAWI,MAAA,SAAS;;;IACP,MAAA,SAAS;;;;IAEZ,MAAA,SAAS;;;;IAEX,MAAA,SAAS;;;;;;;IAEH,MAAA,SAAS;;;;IAEF,MAAA,SAAS;;;;;;;;;;;;;;;;;;IAKrB,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACJ,MAAA,SAAS;;;;;;;IAGf,MAAA,SAAS;;;;;EAIL,iBAAA,UAAA,UAAU;EACX,gBAAA,UAAA,UAAU;EACX,iBAAA,QAAA,UAAU;EACZ,gBAAA,OAAA,UAAU;;;;;;;;;;;;;;;;;;;;;;;IA3BJ,MAAA,SAAS;;;IACP,MAAA,SAAS;;;;IAEZ,MAAA,SAAS;;;;IAEX,MAAA,SAAS;;;;;;;IAEH,MAAA,SAAS;;;;IAEF,MAAA,SAAS;;;;;;;;;;;;;;;;;;IAKrB,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACJ,MAAA,SAAS;;;;;;;IAGf,MAAA,SAAS;;;;;;;;;;;;;;;EAUtB,WAAC,OAAO,4BAA4B;kCA8BhD;cAEW,iCAAiB,0BAAA,oBAAA,4BAAA;;8BAO5B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAS9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAMnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,8BAAA;;IAID,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;;MAWtC,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAe9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAMnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,sCAAsB,8BAAA;;;IAIF,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;MAcxC,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAY9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;;;EAItB,WAAC,OAAO,+BAA+B;kCAoCnD;cAEW,kCAAkB,8BAAA;;;;;;;;;;;;;;;;EAQjB,gBAAM;kCAclB;cAEW,kCAAkB,8BAAA;;IAGH,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;;;EAGvB,WAAC,OAAO,8BAA8B;kCA6BlD;cAEW,gCAAgB,8BAAA;;;;;;;;;;;;;;MAgB3B,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAMlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { withXhConfig } from "../../config/config.js";
|
|
2
2
|
import { XhPortal } from "../../runtime/portal.js";
|
|
3
|
+
import { slotPaints } from "../../runtime/slot-content.js";
|
|
3
4
|
import { useScrollbars } from "../../runtime/use-scrollbars.js";
|
|
4
5
|
import { useFormControlProps } from "../form/use-form-control.js";
|
|
5
6
|
import { useFieldLabelWiring, useFieldStateWiring } from "../field/use-field-control.js";
|
|
6
|
-
import { slotPaints } from "../../runtime/slot-content.js";
|
|
7
7
|
import { provideTimePicker, provideTimePickerColumn, useTimePickerColumnContext, useTimePickerContext } from "./context.js";
|
|
8
8
|
import { useTimePicker } from "./use-time-picker.js";
|
|
9
9
|
import { computed, defineComponent, h, mergeProps, onUpdated, ref } from "vue";
|
|
@@ -23,7 +23,8 @@ const XhTimePickerRoot = defineComponent({
|
|
|
23
23
|
locale: { type: String },
|
|
24
24
|
hourCycle: { type: Number },
|
|
25
25
|
granularity: { type: String },
|
|
26
|
-
|
|
26
|
+
/** 按单位的步进:`{ hour?, minute?, second? }`,各单位缺省 1。 */
|
|
27
|
+
timeStep: { type: Object },
|
|
27
28
|
/** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */
|
|
28
29
|
presets: { type: Array },
|
|
29
30
|
disabled: {
|
|
@@ -31,6 +32,7 @@ const XhTimePickerRoot = defineComponent({
|
|
|
31
32
|
default: void 0
|
|
32
33
|
},
|
|
33
34
|
translations: { type: Object },
|
|
35
|
+
/** 逐格可选性:时列按 24 小时制给值,第三个参数带已选的时与分。 */
|
|
34
36
|
isTimeUnavailable: { type: Function },
|
|
35
37
|
readOnly: {
|
|
36
38
|
type: Boolean,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time-picker.js","names":[],"sources":["../../../src/components/time-picker/time-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// 提供 time picker 相关实现。\n\nimport type { ControlVariant, Direction, Placement, Size, Tone } from '@xihan-ui/core'\nimport type {\n TimeGranularity,\n TimeHourCycle,\n TimePickerApi,\n TimePickerColumn,\n TimePickerColumnUnit,\n TimePickerPreset,\n TimePickerPresetState,\n TimePickerSchema,\n TimeSegmentType,\n} from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\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 provideTimePicker,\n provideTimePickerColumn,\n useTimePickerColumnContext,\n useTimePickerContext,\n} from './context'\nimport { useTimePicker } from './use-time-picker'\n\ntype TimePickerProps = TimePickerSchema['props']\n\n/** 默认插槽的载荷:浮层开合与当前值、值状态标志、当前的段与列,以及开合、写值、清空的动作。 */\nexport type TimePickerRootSlotProps = Pick<\n TimePickerApi,\n | 'open'\n | 'value'\n | 'empty'\n | 'outOfRange'\n | 'segments'\n | 'columns'\n | 'canClear'\n | 'setOpen'\n | 'setValue'\n | 'clear'\n>\n\n/** 默认插槽的载荷:该列当前的可选值。 */\nexport interface TimePickerColumnSlotProps {\n options: TimePickerColumn['options']\n}\n\n/** 快捷选项列默认插槽的载荷:逐条的投影,作者据此自行铺设条目。 */\nexport interface TimePickerPresetsSlotProps {\n presets: readonly TimePickerPresetState[]\n}\n\nexport const XhTimePickerRoot = defineComponent({\n name: 'XhTimePickerRoot',\n // 缺省值由 connect 给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n value: { type: String },\n defaultValue: { type: String },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n min: { type: String },\n max: { type: String },\n locale: { type: String },\n hourCycle: { type: Number as PropType<TimeHourCycle> },\n granularity: { type: String as PropType<TimeGranularity> },\n step: { type: Number },\n /** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */\n presets: { type: Array as PropType<TimePickerPreset[]> },\n disabled: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<TimePickerProps['translations']> },\n isTimeUnavailable: { type: Function as PropType<(value: string, unit: TimePickerColumnUnit) => boolean> },\n readOnly: { type: Boolean, default: undefined },\n invalid: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n name: { type: String },\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 },\n // *-change 携带 details 对象,update:* 携带裸值\n emits: {\n 'value-change': (_details: PayloadOf<TimePickerProps, 'onValueChange'>) => true,\n 'open-change': (_details: PayloadOf<TimePickerProps, 'onOpenChange'>) => true,\n 'update:value': (_value: PayloadOf<TimePickerProps, 'onValueChange'>['value']) => true,\n 'update:open': (_open: PayloadOf<TimePickerProps, 'onOpenChange'>['open']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TimePickerRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: TimePickerProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyOpen: TimePickerProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const ctx = useTimePicker(withXhConfig('time-picker', useFormControlProps(props)) as TimePickerProps, {\n onValueChange: notifyValue,\n onOpenChange: notifyOpen,\n })\n provideTimePicker(ctx)\n\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n open: ctx.api.value.open,\n value: ctx.api.value.value,\n empty: ctx.api.value.empty,\n outOfRange: ctx.api.value.outOfRange,\n segments: ctx.api.value.segments,\n columns: ctx.api.value.columns,\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 XhTimePickerLabel = defineComponent({\n name: 'XhTimePickerLabel',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\n // 仍用原生 label 保持表单语义,点标题聚焦第一段由连接层的 click 接管\n return () => h('label', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTimePickerControl = defineComponent({\n name: 'XhTimePickerControl',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\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 XhTimePickerSegmentGroup = defineComponent({\n name: 'XhTimePickerSegmentGroup',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\n return () => h('div', ctx.api.value.getSegmentGroupProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTimePickerSegment = defineComponent({\n name: 'XhTimePickerSegment',\n props: {\n // 段的身份由作者声明\n segment: { type: String as PropType<TimeSegmentType>, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTimePickerContext()\n // 有插槽用插槽,否则显示该段的文字,空段为占位串\n return () => h(\n 'span',\n ctx.api.value.getSegmentProps({ segment: props.segment }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.getSegmentText({ segment: props.segment }),\n )\n },\n})\n\nexport const XhTimePickerTrigger = defineComponent({\n name: 'XhTimePickerTrigger',\n setup(_, { slots }) {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useTimePickerContext()\n return () => h('button', fieldLabel.value({\n ...fieldWiring.value,\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n // 归还焦点要落到它身上:锚点取的是整个输入行,那一层不可聚焦\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n }), slots.default?.())\n },\n})\n\nexport const XhTimePickerClearTrigger = defineComponent({\n name: 'XhTimePickerClearTrigger',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTimePickerPositioner = defineComponent({\n name: 'XhTimePickerPositioner',\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 = useTimePickerContext()\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value, source: ctx.controlRef }, () => [\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?.()),\n ])\n },\n})\n\nexport const XhTimePickerContent = defineComponent({\n name: 'XhTimePickerContent',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\n return () => h('div', {\n ...ctx.api.value.getContentProps() as Record<string, unknown>,\n // 收起跟着退场闸门走:皮肤刻意没给 content 补 [hidden]{display:none}(补了退场\n // 就一帧都播不出来),所以真正的收起落成内联 display——节点始终留在原地\n style: ctx.visible.value ? undefined : { display: 'none' },\n ref: (el: unknown) => { ctx.contentRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhTimePickerPresetGroup = defineComponent({\n name: 'XhTimePickerPresetGroup',\n slots: Object as SlotsType<{\n /** 自行铺设条目;未写时按 presets 数据自动铺设,两者产出的 DOM 一致。 */\n default?: (props: TimePickerPresetsSlotProps) => VNode[]\n }>,\n // 根是片段(选项列节点 + 贴层的条子),Vue 不会把直通属性合上去:作者写的 class、style 与 data-* 自己接住落到列节点上\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n const ctx = useTimePickerContext()\n const presetGroupRef = ref<HTMLElement | null>(null)\n // 快捷选项列定高自己竖滚:条子贴在它的盒子上、紧跟在它后面(浮层 4px 档)\n const bars = useScrollbars({\n scrollable: () => presetGroupRef.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 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 XhTimePickerPreset = defineComponent({\n name: 'XhTimePickerPreset',\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 = useTimePickerContext()\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\nexport const XhTimePickerColumn = defineComponent({\n name: 'XhTimePickerColumn',\n props: {\n unit: { type: String as PropType<TimePickerColumnUnit>, required: true },\n },\n slots: Object as SlotsType<{\n default?: (props: TimePickerColumnSlotProps) => VNode[]\n }>,\n // 根是片段(列节点 + 贴层的条子),Vue 不会把直通属性合上去:作者写的 class、style 与 data-* 自己接住落到列节点上\n inheritAttrs: false,\n setup(props, { slots, attrs }) {\n const ctx = useTimePickerContext()\n const unit = computed(() => props.unit)\n // 下传单位,供列内选项取到自己归哪一列\n provideTimePickerColumn({ unit })\n const columnRef = ref<HTMLElement | null>(null)\n // 定高的时间列自己竖滚:条子贴在本列的盒子上、紧跟在它后面(浮层 4px 档)\n const bars = useScrollbars({\n scrollable: () => columnRef.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 h(\n 'div',\n {\n ...mergeProps(ctx.api.value.getColumnProps({ unit: props.unit }) as Record<string, unknown>, attrs),\n ref: (el: unknown) => { columnRef.value = el as HTMLElement },\n },\n slots.default?.({ options: ctx.api.value.columns.find(c => c.unit === props.unit)?.options ?? [] }),\n ),\n ...bars.render(),\n ]\n },\n})\n\nexport const XhTimePickerItem = defineComponent({\n name: 'XhTimePickerItem',\n props: {\n /** 两位补零的显示串('09' / '30');上下午列写 '00' / '01'。 */\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTimePickerContext()\n const { unit } = useTimePickerColumnContext()\n // 有插槽用插槽,否则显示这一格该显示的文字(上下午列按 locale 译成「上午 / 下午」)\n return () => h(\n 'div',\n ctx.api.value.getItemProps({ unit: unit.value, value: props.value }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.getItemText({ unit: unit.value, value: props.value }),\n )\n },\n})\n\nexport const XhTimePickerHiddenInput = defineComponent({\n name: 'XhTimePickerHiddenInput',\n setup() {\n const ctx = useTimePickerContext()\n return () => h('input', ctx.api.value.getHiddenInputProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"time-picker.js","names":[],"sources":["../../../src/components/time-picker/time-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// 提供 time picker 相关实现。\n\nimport type { ControlVariant, Direction, Placement, Size, Tone } from '@xihan-ui/core'\nimport type {\n TimeGranularity,\n TimeHourCycle,\n TimePickerApi,\n TimePickerColumn,\n TimePickerColumnUnit,\n TimePickerPreset,\n TimePickerPresetState,\n TimePickerSchema,\n TimeSegmentType,\n TimeStep,\n TimeUnavailablePredicate,\n} from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\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 provideTimePicker,\n provideTimePickerColumn,\n useTimePickerColumnContext,\n useTimePickerContext,\n} from './context'\nimport { useTimePicker } from './use-time-picker'\n\ntype TimePickerProps = TimePickerSchema['props']\n\n/** 默认插槽的载荷:浮层开合与当前值、值状态标志、当前的段与列,以及开合、写值、清空的动作。 */\nexport type TimePickerRootSlotProps = Pick<\n TimePickerApi,\n | 'open'\n | 'value'\n | 'empty'\n | 'outOfRange'\n | 'segments'\n | 'columns'\n | 'canClear'\n | 'setOpen'\n | 'setValue'\n | 'clear'\n>\n\n/** 默认插槽的载荷:该列当前的可选值。 */\nexport interface TimePickerColumnSlotProps {\n options: TimePickerColumn['options']\n}\n\n/** 快捷选项列默认插槽的载荷:逐条的投影,作者据此自行铺设条目。 */\nexport interface TimePickerPresetsSlotProps {\n presets: readonly TimePickerPresetState[]\n}\n\nexport const XhTimePickerRoot = defineComponent({\n name: 'XhTimePickerRoot',\n // 缺省值由 connect 给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n value: { type: String },\n defaultValue: { type: String },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n min: { type: String },\n max: { type: String },\n locale: { type: String },\n hourCycle: { type: Number as PropType<TimeHourCycle> },\n granularity: { type: String as PropType<TimeGranularity> },\n /** 按单位的步进:`{ hour?, minute?, second? }`,各单位缺省 1。 */\n timeStep: { type: Object as PropType<TimeStep> },\n /** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */\n presets: { type: Array as PropType<TimePickerPreset[]> },\n disabled: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<TimePickerProps['translations']> },\n /** 逐格可选性:时列按 24 小时制给值,第三个参数带已选的时与分。 */\n isTimeUnavailable: { type: Function as PropType<TimeUnavailablePredicate> },\n readOnly: { type: Boolean, default: undefined },\n invalid: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n name: { type: String },\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 },\n // *-change 携带 details 对象,update:* 携带裸值\n emits: {\n 'value-change': (_details: PayloadOf<TimePickerProps, 'onValueChange'>) => true,\n 'open-change': (_details: PayloadOf<TimePickerProps, 'onOpenChange'>) => true,\n 'update:value': (_value: PayloadOf<TimePickerProps, 'onValueChange'>['value']) => true,\n 'update:open': (_open: PayloadOf<TimePickerProps, 'onOpenChange'>['open']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TimePickerRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: TimePickerProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyOpen: TimePickerProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const ctx = useTimePicker(withXhConfig('time-picker', useFormControlProps(props)) as TimePickerProps, {\n onValueChange: notifyValue,\n onOpenChange: notifyOpen,\n })\n provideTimePicker(ctx)\n\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n open: ctx.api.value.open,\n value: ctx.api.value.value,\n empty: ctx.api.value.empty,\n outOfRange: ctx.api.value.outOfRange,\n segments: ctx.api.value.segments,\n columns: ctx.api.value.columns,\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 XhTimePickerLabel = defineComponent({\n name: 'XhTimePickerLabel',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\n // 仍用原生 label 保持表单语义,点标题聚焦第一段由连接层的 click 接管\n return () => h('label', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTimePickerControl = defineComponent({\n name: 'XhTimePickerControl',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\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 XhTimePickerSegmentGroup = defineComponent({\n name: 'XhTimePickerSegmentGroup',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\n return () => h('div', ctx.api.value.getSegmentGroupProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTimePickerSegment = defineComponent({\n name: 'XhTimePickerSegment',\n props: {\n // 段的身份由作者声明\n segment: { type: String as PropType<TimeSegmentType>, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTimePickerContext()\n // 有插槽用插槽,否则显示该段的文字,空段为占位串\n return () => h(\n 'span',\n ctx.api.value.getSegmentProps({ segment: props.segment }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.getSegmentText({ segment: props.segment }),\n )\n },\n})\n\nexport const XhTimePickerTrigger = defineComponent({\n name: 'XhTimePickerTrigger',\n setup(_, { slots }) {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useTimePickerContext()\n return () => h('button', fieldLabel.value({\n ...fieldWiring.value,\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n // 归还焦点要落到它身上:锚点取的是整个输入行,那一层不可聚焦\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n }), slots.default?.())\n },\n})\n\nexport const XhTimePickerClearTrigger = defineComponent({\n name: 'XhTimePickerClearTrigger',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTimePickerPositioner = defineComponent({\n name: 'XhTimePickerPositioner',\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 = useTimePickerContext()\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value, source: ctx.controlRef }, () => [\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?.()),\n ])\n },\n})\n\nexport const XhTimePickerContent = defineComponent({\n name: 'XhTimePickerContent',\n setup(_, { slots }) {\n const ctx = useTimePickerContext()\n return () => h('div', {\n ...ctx.api.value.getContentProps() as Record<string, unknown>,\n // 收起跟着退场闸门走:皮肤刻意没给 content 补 [hidden]{display:none}(补了退场\n // 就一帧都播不出来),所以真正的收起落成内联 display——节点始终留在原地\n style: ctx.visible.value ? undefined : { display: 'none' },\n ref: (el: unknown) => { ctx.contentRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhTimePickerPresetGroup = defineComponent({\n name: 'XhTimePickerPresetGroup',\n slots: Object as SlotsType<{\n /** 自行铺设条目;未写时按 presets 数据自动铺设,两者产出的 DOM 一致。 */\n default?: (props: TimePickerPresetsSlotProps) => VNode[]\n }>,\n // 根是片段(选项列节点 + 贴层的条子),Vue 不会把直通属性合上去:作者写的 class、style 与 data-* 自己接住落到列节点上\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n const ctx = useTimePickerContext()\n const presetGroupRef = ref<HTMLElement | null>(null)\n // 快捷选项列定高自己竖滚:条子贴在它的盒子上、紧跟在它后面(浮层 4px 档)\n const bars = useScrollbars({\n scrollable: () => presetGroupRef.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 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 XhTimePickerPreset = defineComponent({\n name: 'XhTimePickerPreset',\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 = useTimePickerContext()\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\nexport const XhTimePickerColumn = defineComponent({\n name: 'XhTimePickerColumn',\n props: {\n unit: { type: String as PropType<TimePickerColumnUnit>, required: true },\n },\n slots: Object as SlotsType<{\n default?: (props: TimePickerColumnSlotProps) => VNode[]\n }>,\n // 根是片段(列节点 + 贴层的条子),Vue 不会把直通属性合上去:作者写的 class、style 与 data-* 自己接住落到列节点上\n inheritAttrs: false,\n setup(props, { slots, attrs }) {\n const ctx = useTimePickerContext()\n const unit = computed(() => props.unit)\n // 下传单位,供列内选项取到自己归哪一列\n provideTimePickerColumn({ unit })\n const columnRef = ref<HTMLElement | null>(null)\n // 定高的时间列自己竖滚:条子贴在本列的盒子上、紧跟在它后面(浮层 4px 档)\n const bars = useScrollbars({\n scrollable: () => columnRef.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 h(\n 'div',\n {\n ...mergeProps(ctx.api.value.getColumnProps({ unit: props.unit }) as Record<string, unknown>, attrs),\n ref: (el: unknown) => { columnRef.value = el as HTMLElement },\n },\n slots.default?.({ options: ctx.api.value.columns.find(c => c.unit === props.unit)?.options ?? [] }),\n ),\n ...bars.render(),\n ]\n },\n})\n\nexport const XhTimePickerItem = defineComponent({\n name: 'XhTimePickerItem',\n props: {\n /** 两位补零的显示串('09' / '30');上下午列写 '00' / '01'。 */\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTimePickerContext()\n const { unit } = useTimePickerColumnContext()\n // 有插槽用插槽,否则显示这一格该显示的文字(上下午列按 locale 译成「上午 / 下午」)\n return () => h(\n 'div',\n ctx.api.value.getItemProps({ unit: unit.value, value: props.value }) as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.getItemText({ unit: unit.value, value: props.value }),\n )\n },\n})\n\nexport const XhTimePickerHiddenInput = defineComponent({\n name: 'XhTimePickerHiddenInput',\n setup() {\n const ctx = useTimePickerContext()\n return () => h('input', ctx.api.value.getHiddenInputProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PayloadOf } from "../../runtime/payload.js";
|
|
2
2
|
import { PropType, SlotsType, VNode } from "vue";
|
|
3
3
|
import { ControlVariant, Direction, Placement, Size, Tone } from "@xihan-ui/core";
|
|
4
|
-
import { TimeGranularity, TimeHourCycle, TimePickerColumn, TimePickerColumnUnit, TimeRangePickerApi,
|
|
4
|
+
import { TimeGranularity, TimeHourCycle, TimePickerColumn, TimePickerColumnUnit, TimeRangePickerApi, TimeRangePickerPreset, TimeRangePickerPresetState, TimeRangePickerSchema, TimeSegmentType, TimeStep, TimeUnavailablePredicate } from "@xihan-ui/headless";
|
|
5
5
|
//#region src/components/time-range-picker/time-range-picker.d.ts
|
|
6
6
|
type TimeRangePickerProps = TimeRangePickerSchema['props'];
|
|
7
7
|
/** 默认插槽的载荷:浮层开合与两端、值状态标志、当前的段与两组时列,以及开合、写值、清空的动作。 */
|
|
@@ -46,8 +46,9 @@ declare const XhTimeRangePickerRoot: import("vue").DefineComponent<import("vue")
|
|
|
46
46
|
granularity: {
|
|
47
47
|
type: PropType<TimeGranularity>;
|
|
48
48
|
};
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
/** 按单位的步进:`{ hour?, minute?, second? }`,各单位缺省 1。 */
|
|
50
|
+
timeStep: {
|
|
51
|
+
type: PropType<TimeStep>;
|
|
51
52
|
};
|
|
52
53
|
/** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */
|
|
53
54
|
presets: {
|
|
@@ -60,8 +61,9 @@ declare const XhTimeRangePickerRoot: import("vue").DefineComponent<import("vue")
|
|
|
60
61
|
translations: {
|
|
61
62
|
type: PropType<TimeRangePickerProps["translations"]>;
|
|
62
63
|
};
|
|
64
|
+
/** 逐格可选性:时列按 24 小时制给值,第三个参数带这一端已选的时分与端号。 */
|
|
63
65
|
isTimeUnavailable: {
|
|
64
|
-
type: PropType<
|
|
66
|
+
type: PropType<TimeUnavailablePredicate>;
|
|
65
67
|
};
|
|
66
68
|
readOnly: {
|
|
67
69
|
type: BooleanConstructor;
|
|
@@ -135,8 +137,9 @@ declare const XhTimeRangePickerRoot: import("vue").DefineComponent<import("vue")
|
|
|
135
137
|
granularity: {
|
|
136
138
|
type: PropType<TimeGranularity>;
|
|
137
139
|
};
|
|
138
|
-
|
|
139
|
-
|
|
140
|
+
/** 按单位的步进:`{ hour?, minute?, second? }`,各单位缺省 1。 */
|
|
141
|
+
timeStep: {
|
|
142
|
+
type: PropType<TimeStep>;
|
|
140
143
|
};
|
|
141
144
|
/** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */
|
|
142
145
|
presets: {
|
|
@@ -149,8 +152,9 @@ declare const XhTimeRangePickerRoot: import("vue").DefineComponent<import("vue")
|
|
|
149
152
|
translations: {
|
|
150
153
|
type: PropType<TimeRangePickerProps["translations"]>;
|
|
151
154
|
};
|
|
155
|
+
/** 逐格可选性:时列按 24 小时制给值,第三个参数带这一端已选的时分与端号。 */
|
|
152
156
|
isTimeUnavailable: {
|
|
153
|
-
type: PropType<
|
|
157
|
+
type: PropType<TimeUnavailablePredicate>;
|
|
154
158
|
};
|
|
155
159
|
readOnly: {
|
|
156
160
|
type: BooleanConstructor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time-range-picker.d.ts","names":[],"sources":["../../../src/components/time-range-picker/time-range-picker.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"time-range-picker.d.ts","names":[],"sources":["../../../src/components/time-range-picker/time-range-picker.ts"],"mappings":";;;;;KA0CK,uBAAuB;;KAGhB,+BAA+B,KACzC;;UAiBe;EACf,kBAAkB;;;UAIH;EACf,SAAS;;;UAIM;EACf,kBAAkB;;cAGP,qCAAqB,8BAAA;;;IAKN,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;IAMF,MAAA,SAAS;;;IACP,MAAA,SAAS;;;;IAEZ,MAAA,SAAS;;;;IAEX,MAAA,SAAS;;;;;;;IAGH,MAAA,SAAS;;;;IAEF,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;IAOrB,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACJ,MAAA,SAAS;;;;;;;IAGf,MAAA,SAAS;;;;;EAIL,iBAAA,UAAA,UAAU;EACX,gBAAA,UAAA,UAAU;EACX,iBAAA,QAAA,UAAU;EACZ,gBAAA,OAAA,UAAU;;;;IArCT,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;IAMF,MAAA,SAAS;;;IACP,MAAA,SAAS;;;;IAEZ,MAAA,SAAS;;;;IAEX,MAAA,SAAS;;;;;;;IAGH,MAAA,SAAS;;;;IAEF,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;IAOrB,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACJ,MAAA,SAAS;;;;;;;IAGf,MAAA,SAAS;;;;;;;;;;;;;;;EAUtB,WAAC,OAAO,iCAAiC;kCAiCrD;cAEW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAOjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BASnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6CAA6B,8BAAA;;IAIH,MAAA;;;;;;;IAAA,MAAA;;;;;qCASrC;cAEW,wCAAwB,8BAAA;;IAIN,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;;MAYtC,oDAAA;cAEW,+CAA+B,0BAAA,oBAAA,4BAAA;;8BAU1C,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAenC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6CAA6B,0BAAA,oBAAA,4BAAA;;8BAMxC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,2CAA2B,8BAAA;;;IAIP,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;MAqBxC,oDAAA;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAYnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,4CAA4B,0BAAA,oBAAA,4BAAA;;;;EAI3B,WAAC,OAAO,oCAAoC;kCAoCxD;cAEW,uCAAuB,8BAAA;;;;;;;;;;;;;;;;EAQtB,gBAAM;kCAclB;cAEW,4CAA4B,8BAAA;;IAIF,MAAA;;;;;;;IAAA,MAAA;;;;;;EAGzB,WAAC,OAAO,wCAAwC;kCAa5D;cAEW,iDAAiC,0BAAA,oBAAA,4BAAA;;8BAO5C,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,8BAAA;;IAGR,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;;;EAGvB,WAAC,OAAO,mCAAmC;kCA8BvD;cAEW,qCAAqB,8BAAA;;;;;;;;;;;;;;MAiBhC,oDAAA;cAEW,4CAA4B,8BAAA;;IAIF,MAAA;;;;;;IAAA,MAAA;;MAUrC,oDAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { withXhConfig } from "../../config/config.js";
|
|
2
2
|
import { XhPortal } from "../../runtime/portal.js";
|
|
3
|
+
import { slotPaints } from "../../runtime/slot-content.js";
|
|
3
4
|
import { useScrollbars } from "../../runtime/use-scrollbars.js";
|
|
4
5
|
import { useFormControlProps } from "../form/use-form-control.js";
|
|
5
6
|
import { useFieldLabelWiring, useFieldStateWiring } from "../field/use-field-control.js";
|
|
6
|
-
import { slotPaints } from "../../runtime/slot-content.js";
|
|
7
7
|
import { provideTimeRangePicker, provideTimeRangePickerColumn, provideTimeRangePickerEnd, useTimeRangePickerColumnContext, useTimeRangePickerContext, useTimeRangePickerEndContext } from "./context.js";
|
|
8
8
|
import { useTimeRangePicker } from "./use-time-range-picker.js";
|
|
9
9
|
import { computed, defineComponent, h, mergeProps, onUpdated, ref } from "vue";
|
|
@@ -25,7 +25,8 @@ const XhTimeRangePickerRoot = defineComponent({
|
|
|
25
25
|
locale: { type: String },
|
|
26
26
|
hourCycle: { type: Number },
|
|
27
27
|
granularity: { type: String },
|
|
28
|
-
|
|
28
|
+
/** 按单位的步进:`{ hour?, minute?, second? }`,各单位缺省 1。 */
|
|
29
|
+
timeStep: { type: Object },
|
|
29
30
|
/** 快捷选项;提供后浮层中多出一列,时刻要在自己的 computed 中计算后再传入。 */
|
|
30
31
|
presets: { type: Array },
|
|
31
32
|
disabled: {
|
|
@@ -33,6 +34,7 @@ const XhTimeRangePickerRoot = defineComponent({
|
|
|
33
34
|
default: void 0
|
|
34
35
|
},
|
|
35
36
|
translations: { type: Object },
|
|
37
|
+
/** 逐格可选性:时列按 24 小时制给值,第三个参数带这一端已选的时分与端号。 */
|
|
36
38
|
isTimeUnavailable: { type: Function },
|
|
37
39
|
readOnly: {
|
|
38
40
|
type: Boolean,
|