@xihan-ui/vue 1.0.0-alpha.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2057 -0
- package/dist/backgrounds.d.ts.map +1 -1
- package/dist/backgrounds.js +1 -5
- package/dist/backgrounds.js.map +1 -1
- package/dist/behavior.d.ts +38 -0
- package/dist/behavior.d.ts.map +1 -0
- package/dist/behavior.js +74 -0
- package/dist/behavior.js.map +1 -0
- package/dist/components/accordion/accordion.d.ts +1 -1
- package/dist/components/accordion/context.js +2 -2
- package/dist/components/accordion/context.js.map +1 -1
- package/dist/components/affix/context.js +1 -1
- package/dist/components/affix/context.js.map +1 -1
- package/dist/components/alert/context.js +1 -1
- package/dist/components/alert/context.js.map +1 -1
- package/dist/components/anchor/anchor.d.ts +2 -2
- package/dist/components/anchor/context.js +1 -1
- package/dist/components/anchor/context.js.map +1 -1
- package/dist/components/avatar/context.js +1 -1
- package/dist/components/avatar/context.js.map +1 -1
- package/dist/components/avatar-group/context.js +1 -1
- package/dist/components/avatar-group/context.js.map +1 -1
- package/dist/components/back-top/back-top.d.ts +2 -2
- package/dist/components/back-top/context.js +1 -1
- package/dist/components/back-top/context.js.map +1 -1
- package/dist/components/badge/badge.d.ts +142 -50
- package/dist/components/badge/badge.d.ts.map +1 -1
- package/dist/components/badge/badge.js +67 -37
- package/dist/components/badge/badge.js.map +1 -1
- package/dist/components/badge/context.js +15 -0
- package/dist/components/badge/context.js.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts +1 -1
- package/dist/components/breadcrumb/context.js +1 -1
- package/dist/components/breadcrumb/context.js.map +1 -1
- package/dist/components/button-group/button-group.d.ts +1 -1
- package/dist/components/calendar/context.js +2 -2
- package/dist/components/calendar/context.js.map +1 -1
- package/dist/components/card/card.d.ts +1 -1
- package/dist/components/card/context.js +1 -1
- package/dist/components/card/context.js.map +1 -1
- package/dist/components/carousel/context.js +1 -1
- package/dist/components/carousel/context.js.map +1 -1
- package/dist/components/cascader/cascader.d.ts +4 -4
- package/dist/components/cascader/cascader.d.ts.map +1 -1
- package/dist/components/cascader/cascader.js +14 -4
- package/dist/components/cascader/cascader.js.map +1 -1
- package/dist/components/cascader/context.js +2 -2
- package/dist/components/cascader/context.js.map +1 -1
- package/dist/components/cascader/use-cascader.js +1 -1
- package/dist/components/cascader/use-cascader.js.map +1 -1
- package/dist/components/checkbox-group/context.js +2 -2
- package/dist/components/checkbox-group/context.js.map +1 -1
- package/dist/components/clipboard/context.js +1 -1
- package/dist/components/clipboard/context.js.map +1 -1
- package/dist/components/collapsible/context.js +1 -1
- package/dist/components/collapsible/context.js.map +1 -1
- package/dist/components/color-picker/color-picker.d.ts +12 -3
- package/dist/components/color-picker/color-picker.d.ts.map +1 -1
- package/dist/components/color-picker/color-picker.js +7 -1
- package/dist/components/color-picker/color-picker.js.map +1 -1
- package/dist/components/color-picker/context.js +2 -2
- package/dist/components/color-picker/context.js.map +1 -1
- package/dist/components/color-picker/use-color-picker.js +1 -1
- package/dist/components/color-picker/use-color-picker.js.map +1 -1
- package/dist/components/combobox/combobox.d.ts +3 -3
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/combobox.js +10 -4
- package/dist/components/combobox/combobox.js.map +1 -1
- package/dist/components/combobox/context.js +3 -3
- package/dist/components/combobox/context.js.map +1 -1
- package/dist/components/combobox/use-combobox.js +1 -1
- package/dist/components/combobox/use-combobox.js.map +1 -1
- package/dist/components/composer/context.js +1 -1
- package/dist/components/composer/context.js.map +1 -1
- package/dist/components/context-menu/context-menu.d.ts +4 -4
- package/dist/components/context-menu/context-menu.d.ts.map +1 -1
- package/dist/components/context-menu/context-menu.js +3 -1
- package/dist/components/context-menu/context-menu.js.map +1 -1
- package/dist/components/context-menu/context.js +5 -5
- package/dist/components/context-menu/context.js.map +1 -1
- package/dist/components/context-menu/use-context-menu.js +1 -1
- package/dist/components/context-menu/use-context-menu.js.map +1 -1
- package/dist/components/date-field/context.js +1 -1
- package/dist/components/date-field/context.js.map +1 -1
- package/dist/components/date-field/date-field.d.ts +2 -2
- package/dist/components/date-picker/context.js +13 -4
- package/dist/components/date-picker/context.js.map +1 -1
- package/dist/components/date-picker/date-picker.d.ts +80 -44
- package/dist/components/date-picker/date-picker.d.ts.map +1 -1
- package/dist/components/date-picker/date-picker.js +68 -26
- package/dist/components/date-picker/date-picker.js.map +1 -1
- package/dist/components/date-picker/use-date-picker.js +1 -1
- package/dist/components/date-picker/use-date-picker.js.map +1 -1
- package/dist/components/descriptions/context.js +1 -1
- package/dist/components/descriptions/context.js.map +1 -1
- package/dist/components/dialog/context.js +1 -1
- package/dist/components/dialog/context.js.map +1 -1
- package/dist/components/dialog/dialog.d.ts +1 -1
- package/dist/components/drawer/context.js +1 -1
- package/dist/components/drawer/context.js.map +1 -1
- package/dist/components/drawer/drawer.d.ts +2 -2
- package/dist/components/dynamic-input/context.js +2 -2
- package/dist/components/dynamic-input/context.js.map +1 -1
- package/dist/components/editable/context.js +1 -1
- package/dist/components/editable/context.js.map +1 -1
- package/dist/components/empty-state/context.js +1 -1
- package/dist/components/empty-state/context.js.map +1 -1
- package/dist/components/field/context.d.ts +9 -0
- package/dist/components/field/context.d.ts.map +1 -0
- package/dist/components/field/context.js +6 -2
- package/dist/components/field/context.js.map +1 -1
- package/dist/components/field/field.d.ts +26 -2
- package/dist/components/field/field.d.ts.map +1 -1
- package/dist/components/field/field.js +15 -4
- package/dist/components/field/field.js.map +1 -1
- package/dist/components/field/use-field-control.d.ts +41 -0
- package/dist/components/field/use-field-control.d.ts.map +1 -0
- package/dist/components/field/use-field-control.js +77 -0
- package/dist/components/field/use-field-control.js.map +1 -0
- package/dist/components/fieldset/context.js +1 -1
- package/dist/components/fieldset/context.js.map +1 -1
- package/dist/components/file-upload/context.js +2 -2
- package/dist/components/file-upload/context.js.map +1 -1
- package/dist/components/flex/flex.d.ts +9 -0
- package/dist/components/flex/flex.d.ts.map +1 -1
- package/dist/components/flex/flex.js +4 -0
- package/dist/components/flex/flex.js.map +1 -1
- package/dist/components/float-button/context.js +1 -1
- package/dist/components/float-button/context.js.map +1 -1
- package/dist/components/float-button/float-button.d.ts +2 -2
- package/dist/components/floating-panel/context.js +1 -1
- package/dist/components/floating-panel/context.js.map +1 -1
- package/dist/components/floating-panel/floating-panel.d.ts +1 -1
- package/dist/components/form/context.js +2 -2
- package/dist/components/form/context.js.map +1 -1
- package/dist/components/grid/context.js +1 -1
- package/dist/components/grid/context.js.map +1 -1
- package/dist/components/heatmap/context.js +3 -3
- package/dist/components/heatmap/context.js.map +1 -1
- package/dist/components/heatmap/heatmap.d.ts +1 -1
- package/dist/components/hotkeys/hotkeys.d.ts +3 -1
- package/dist/components/hotkeys/hotkeys.d.ts.map +1 -1
- package/dist/components/hotkeys/hotkeys.js +7 -25
- package/dist/components/hotkeys/hotkeys.js.map +1 -1
- package/dist/components/hotkeys/use-hotkeys.d.ts +31 -0
- package/dist/components/hotkeys/use-hotkeys.d.ts.map +1 -0
- package/dist/components/hotkeys/use-hotkeys.js +60 -0
- package/dist/components/hotkeys/use-hotkeys.js.map +1 -0
- package/dist/components/hover-card/context.js +1 -1
- package/dist/components/hover-card/context.js.map +1 -1
- package/dist/components/hover-card/hover-card.d.ts +2 -2
- package/dist/components/hover-card/hover-card.d.ts.map +1 -1
- package/dist/components/hover-card/hover-card.js +3 -1
- package/dist/components/hover-card/hover-card.js.map +1 -1
- package/dist/components/hover-card/use-hover-card.js +1 -1
- package/dist/components/hover-card/use-hover-card.js.map +1 -1
- package/dist/components/icon/icon.d.ts +1 -1
- package/dist/components/icon-wrapper/icon-wrapper.d.ts +1 -1
- package/dist/components/image/context.js +1 -1
- package/dist/components/image/context.js.map +1 -1
- package/dist/components/image-cropper/context.js +1 -1
- package/dist/components/image-cropper/context.js.map +1 -1
- package/dist/components/image-cropper/image-cropper.d.ts +1 -1
- package/dist/components/image-viewer/context.js +1 -1
- package/dist/components/image-viewer/context.js.map +1 -1
- package/dist/components/image-viewer/image-viewer.d.ts +2 -2
- package/dist/components/infinite-scroll/context.js +1 -1
- package/dist/components/infinite-scroll/context.js.map +1 -1
- package/dist/components/infinite-scroll/infinite-scroll.d.ts +1 -1
- package/dist/components/json-viewer/json-viewer.d.ts +12 -3
- package/dist/components/json-viewer/json-viewer.d.ts.map +1 -1
- package/dist/components/json-viewer/json-viewer.js +23 -2
- package/dist/components/json-viewer/json-viewer.js.map +1 -1
- package/dist/components/layout/context.js +1 -1
- package/dist/components/layout/context.js.map +1 -1
- package/dist/components/list/context.js +1 -1
- package/dist/components/list/context.js.map +1 -1
- package/dist/components/list/list.d.ts +1 -1
- package/dist/components/listbox/context.js +3 -3
- package/dist/components/listbox/context.js.map +1 -1
- package/dist/components/loading-bar/context.js +1 -1
- package/dist/components/loading-bar/context.js.map +1 -1
- package/dist/components/log/context.js +1 -1
- package/dist/components/log/context.js.map +1 -1
- package/dist/components/marquee/context.js +1 -1
- package/dist/components/marquee/context.js.map +1 -1
- package/dist/components/mention/context.js +2 -2
- package/dist/components/mention/context.js.map +1 -1
- package/dist/components/mention/mention.d.ts +2 -2
- package/dist/components/mention/mention.d.ts.map +1 -1
- package/dist/components/mention/mention.js +10 -4
- package/dist/components/mention/mention.js.map +1 -1
- package/dist/components/mention/use-mention.js +1 -1
- package/dist/components/mention/use-mention.js.map +1 -1
- package/dist/components/menu/context.js +4 -4
- package/dist/components/menu/context.js.map +1 -1
- package/dist/components/menu/menu.d.ts +3 -3
- package/dist/components/menu/menu.d.ts.map +1 -1
- package/dist/components/menu/menu.js +3 -1
- package/dist/components/menu/menu.js.map +1 -1
- package/dist/components/menu/use-menu.js +1 -1
- package/dist/components/menu/use-menu.js.map +1 -1
- package/dist/components/menubar/context.js +6 -6
- package/dist/components/menubar/context.js.map +1 -1
- package/dist/components/menubar/menubar.d.ts +2 -2
- package/dist/components/menubar/menubar.js.map +1 -1
- package/dist/components/navigation-menu/context.js +1 -1
- package/dist/components/navigation-menu/context.js.map +1 -1
- package/dist/components/navigation-menu/navigation-menu.d.ts +1 -1
- package/dist/components/notification/context.d.ts +23 -0
- package/dist/components/notification/context.d.ts.map +1 -0
- package/dist/components/notification/context.js +28 -0
- package/dist/components/notification/context.js.map +1 -0
- package/dist/components/notification/notification.d.ts +249 -0
- package/dist/components/notification/notification.d.ts.map +1 -0
- package/dist/components/notification/notification.js +179 -0
- package/dist/components/notification/notification.js.map +1 -0
- package/dist/components/notification/use-notification.d.ts +14 -0
- package/dist/components/notification/use-notification.d.ts.map +1 -0
- package/dist/components/notification/use-notification.js +42 -0
- package/dist/components/notification/use-notification.js.map +1 -0
- package/dist/components/number-animation/number-animation.d.ts +1 -1
- package/dist/components/number-field/context.js +1 -1
- package/dist/components/number-field/context.js.map +1 -1
- package/dist/components/number-field/number-field.d.ts +3 -3
- package/dist/components/number-field/number-field.d.ts.map +1 -1
- package/dist/components/number-field/number-field.js +7 -1
- package/dist/components/number-field/number-field.js.map +1 -1
- package/dist/components/page-header/context.js +1 -1
- package/dist/components/page-header/context.js.map +1 -1
- package/dist/components/pagination/context.js +1 -1
- package/dist/components/pagination/context.js.map +1 -1
- package/dist/components/pagination/pagination.d.ts +60 -6
- package/dist/components/pagination/pagination.d.ts.map +1 -1
- package/dist/components/pagination/pagination.js +85 -5
- package/dist/components/pagination/pagination.js.map +1 -1
- package/dist/components/pagination/use-pagination.d.ts +12 -2
- package/dist/components/pagination/use-pagination.d.ts.map +1 -1
- package/dist/components/pagination/use-pagination.js +50 -5
- package/dist/components/pagination/use-pagination.js.map +1 -1
- package/dist/components/password-input/context.js +1 -1
- package/dist/components/password-input/context.js.map +1 -1
- package/dist/components/password-input/password-input.d.ts +2 -2
- package/dist/components/password-input/password-input.d.ts.map +1 -1
- package/dist/components/password-input/password-input.js +7 -1
- package/dist/components/password-input/password-input.js.map +1 -1
- package/dist/components/pin-input/context.js +1 -1
- package/dist/components/pin-input/context.js.map +1 -1
- package/dist/components/pin-input/pin-input.d.ts +1 -1
- package/dist/components/popconfirm/context.js +1 -1
- package/dist/components/popconfirm/context.js.map +1 -1
- package/dist/components/popconfirm/popconfirm.d.ts +1 -1
- package/dist/components/popover/context.js +1 -1
- package/dist/components/popover/context.js.map +1 -1
- package/dist/components/popover/popover.d.ts +2 -2
- package/dist/components/popover/popover.d.ts.map +1 -1
- package/dist/components/popover/popover.js +3 -1
- package/dist/components/popover/popover.js.map +1 -1
- package/dist/components/popover/use-popover.js +1 -1
- package/dist/components/popover/use-popover.js.map +1 -1
- package/dist/components/popselect/context.js +2 -2
- package/dist/components/popselect/context.js.map +1 -1
- package/dist/components/popselect/popselect.d.ts +3 -3
- package/dist/components/popselect/popselect.d.ts.map +1 -1
- package/dist/components/popselect/popselect.js +3 -1
- package/dist/components/popselect/popselect.js.map +1 -1
- package/dist/components/popselect/use-popselect.js +1 -1
- package/dist/components/popselect/use-popselect.js.map +1 -1
- package/dist/components/progress/progress.d.ts +1 -1
- package/dist/components/qr-code/context.js +1 -1
- package/dist/components/qr-code/context.js.map +1 -1
- package/dist/components/radio-group/context.js +2 -2
- package/dist/components/radio-group/context.js.map +1 -1
- package/dist/components/radio-group/radio-group.d.ts +1 -1
- package/dist/components/rating/context.js +1 -1
- package/dist/components/rating/context.js.map +1 -1
- package/dist/components/rating/rating.d.ts +2 -2
- package/dist/components/result/context.js +1 -1
- package/dist/components/result/context.js.map +1 -1
- package/dist/components/scroll-area/context.js +2 -2
- package/dist/components/scroll-area/context.js.map +1 -1
- package/dist/components/scroll-area/scroll-area.d.ts +1 -1
- package/dist/components/scrollbar/context.js +1 -1
- package/dist/components/scrollbar/context.js.map +1 -1
- package/dist/components/scrollbar/scrollbar.d.ts +1 -1
- package/dist/components/segmented/context.js +2 -2
- package/dist/components/segmented/context.js.map +1 -1
- package/dist/components/segmented/segmented.d.ts +1 -1
- package/dist/components/select/context.js +3 -3
- package/dist/components/select/context.js.map +1 -1
- package/dist/components/select/select.d.ts +3 -3
- package/dist/components/select/select.d.ts.map +1 -1
- package/dist/components/select/select.js +7 -3
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/side-nav/context.js +2 -2
- package/dist/components/side-nav/context.js.map +1 -1
- package/dist/components/side-nav/side-nav.d.ts +1 -1
- package/dist/components/signature-pad/context.js +1 -1
- package/dist/components/signature-pad/context.js.map +1 -1
- package/dist/components/skeleton/context.js +1 -1
- package/dist/components/skeleton/context.js.map +1 -1
- package/dist/components/slider/context.js +2 -2
- package/dist/components/slider/context.js.map +1 -1
- package/dist/components/slider/slider.d.ts +1 -1
- package/dist/components/space/context.js +1 -1
- package/dist/components/space/context.js.map +1 -1
- package/dist/components/space/space.d.ts +9 -0
- package/dist/components/space/space.d.ts.map +1 -1
- package/dist/components/space/space.js +4 -0
- package/dist/components/space/space.js.map +1 -1
- package/dist/components/spinner/context.js +1 -1
- package/dist/components/spinner/context.js.map +1 -1
- package/dist/components/spinner/spinner.d.ts +1 -1
- package/dist/components/splitter/context.js +1 -1
- package/dist/components/splitter/context.js.map +1 -1
- package/dist/components/statistic/context.js +1 -1
- package/dist/components/statistic/context.js.map +1 -1
- package/dist/components/statistic/statistic.d.ts +1 -1
- package/dist/components/steps/context.js +2 -2
- package/dist/components/steps/context.js.map +1 -1
- package/dist/components/steps/steps.d.ts +2 -2
- package/dist/components/table/context.js +4 -4
- package/dist/components/table/context.js.map +1 -1
- package/dist/components/table/table.d.ts +62 -3
- package/dist/components/table/table.d.ts.map +1 -1
- package/dist/components/table/table.js +37 -1
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/table/use-table.d.ts +1 -1
- package/dist/components/table/use-table.d.ts.map +1 -1
- package/dist/components/table/use-table.js +3 -2
- package/dist/components/table/use-table.js.map +1 -1
- package/dist/components/tabs/context.js +1 -1
- package/dist/components/tabs/context.js.map +1 -1
- package/dist/components/tabs/tabs.d.ts +1 -1
- package/dist/components/tag/context.js +1 -1
- package/dist/components/tag/context.js.map +1 -1
- package/dist/components/tag/use-tag.js +14 -2
- package/dist/components/tag/use-tag.js.map +1 -1
- package/dist/components/tags-input/context.js +2 -2
- package/dist/components/tags-input/context.js.map +1 -1
- package/dist/components/tags-input/tags-input.d.ts +3 -3
- package/dist/components/tags-input/tags-input.d.ts.map +1 -1
- package/dist/components/tags-input/tags-input.js +7 -1
- package/dist/components/tags-input/tags-input.js.map +1 -1
- package/dist/components/text-field/context.js +1 -1
- package/dist/components/text-field/context.js.map +1 -1
- package/dist/components/text-field/text-field.d.ts +1 -1
- package/dist/components/text-field/text-field.d.ts.map +1 -1
- package/dist/components/text-field/text-field.js +7 -3
- package/dist/components/text-field/text-field.js.map +1 -1
- package/dist/components/thread/context.d.ts +7 -0
- package/dist/components/thread/context.d.ts.map +1 -0
- package/dist/components/thread/context.js +1 -1
- package/dist/components/thread/context.js.map +1 -1
- package/dist/components/time-field/context.js +1 -1
- package/dist/components/time-field/context.js.map +1 -1
- package/dist/components/time-field/time-field.d.ts +2 -2
- package/dist/components/time-picker/context.js +2 -2
- package/dist/components/time-picker/context.js.map +1 -1
- package/dist/components/time-picker/time-picker.d.ts +5 -5
- package/dist/components/time-picker/time-picker.d.ts.map +1 -1
- package/dist/components/time-picker/time-picker.js +10 -1
- package/dist/components/time-picker/time-picker.js.map +1 -1
- package/dist/components/time-picker/use-time-picker.d.ts +1 -0
- package/dist/components/time-picker/use-time-picker.d.ts.map +1 -1
- package/dist/components/time-picker/use-time-picker.js +3 -0
- package/dist/components/time-picker/use-time-picker.js.map +1 -1
- package/dist/components/timeline/context.js +2 -2
- package/dist/components/timeline/context.js.map +1 -1
- package/dist/components/timeline/timeline.d.ts +1 -1
- package/dist/components/timer/context.js +1 -1
- package/dist/components/timer/context.js.map +1 -1
- package/dist/components/toast/context.js +1 -1
- package/dist/components/toast/context.js.map +1 -1
- package/dist/components/toast/toast.d.ts +3 -15
- package/dist/components/toast/toast.d.ts.map +1 -1
- package/dist/components/toast/toast.js +1 -12
- package/dist/components/toast/toast.js.map +1 -1
- package/dist/components/toast/use-toast.d.ts.map +1 -1
- package/dist/components/toast/use-toast.js +1 -7
- package/dist/components/toast/use-toast.js.map +1 -1
- package/dist/components/toggle-group/context.js +1 -1
- package/dist/components/toggle-group/context.js.map +1 -1
- package/dist/components/toggle-group/toggle-group.d.ts +10 -1
- package/dist/components/toggle-group/toggle-group.d.ts.map +1 -1
- package/dist/components/toggle-group/toggle-group.js +4 -0
- package/dist/components/toggle-group/toggle-group.js.map +1 -1
- package/dist/components/toolbar/context.js +1 -1
- package/dist/components/toolbar/context.js.map +1 -1
- package/dist/components/toolbar/toolbar.d.ts +1 -1
- package/dist/components/tooltip/context.js +1 -1
- package/dist/components/tooltip/context.js.map +1 -1
- package/dist/components/tooltip/tooltip.d.ts +2 -2
- package/dist/components/tour/context.js +1 -1
- package/dist/components/tour/context.js.map +1 -1
- package/dist/components/tour/tour.d.ts +2 -2
- package/dist/components/transfer/context.js +3 -3
- package/dist/components/transfer/context.js.map +1 -1
- package/dist/components/tree/context.js +2 -2
- package/dist/components/tree/context.js.map +1 -1
- package/dist/components/tree/tree.d.ts +20 -0
- package/dist/components/tree/tree.d.ts.map +1 -1
- package/dist/components/tree/tree.js +9 -0
- package/dist/components/tree/tree.js.map +1 -1
- package/dist/components/tree-select/context.js +2 -2
- package/dist/components/tree-select/context.js.map +1 -1
- package/dist/components/tree-select/tree-select.d.ts +3 -3
- package/dist/components/tree-select/tree-select.d.ts.map +1 -1
- package/dist/components/tree-select/tree-select.js +14 -4
- package/dist/components/tree-select/tree-select.js.map +1 -1
- package/dist/components/tree-select/use-tree-select.js +1 -1
- package/dist/components/tree-select/use-tree-select.js.map +1 -1
- package/dist/components/typography/context.js +1 -1
- package/dist/components/typography/context.js.map +1 -1
- package/dist/components/virtualizer/context.js +1 -1
- package/dist/components/virtualizer/context.js.map +1 -1
- package/dist/components/watermark/context.js +1 -1
- package/dist/components/watermark/context.js.map +1 -1
- package/dist/config/config.js +1 -1
- package/dist/config/config.js.map +1 -1
- package/dist/index.d.ts +16 -9
- package/dist/index.js +15 -8
- package/dist/package.js +1 -1
- package/dist/runtime/use-scrollbars.js +66 -0
- package/dist/runtime/use-scrollbars.js.map +1 -0
- package/dist/services/dialog-service.d.ts +33 -8
- package/dist/services/dialog-service.d.ts.map +1 -1
- package/dist/services/dialog-service.js +44 -20
- package/dist/services/dialog-service.js.map +1 -1
- package/dist/services/glyph.js +41 -1
- package/dist/services/glyph.js.map +1 -1
- package/dist/services/loading-bar-service.d.ts +46 -0
- package/dist/services/loading-bar-service.d.ts.map +1 -0
- package/dist/services/loading-bar-service.js +70 -0
- package/dist/services/loading-bar-service.js.map +1 -0
- package/dist/services/mount-host.js +35 -0
- package/dist/services/mount-host.js.map +1 -0
- package/dist/services/notification-service.d.ts +46 -0
- package/dist/services/notification-service.d.ts.map +1 -0
- package/dist/services/notification-service.js +91 -0
- package/dist/services/notification-service.js.map +1 -0
- package/dist/services/service-config.js +16 -0
- package/dist/services/service-config.js.map +1 -0
- package/dist/services/toast-service.d.ts +20 -12
- package/dist/services/toast-service.d.ts.map +1 -1
- package/dist/services/toast-service.js +103 -50
- package/dist/services/toast-service.js.map +1 -1
- package/package.json +18 -14
- package/dist/components/toaster/context.js +0 -19
- package/dist/components/toaster/context.js.map +0 -1
- package/dist/components/toaster/toaster.d.ts +0 -135
- package/dist/components/toaster/toaster.d.ts.map +0 -1
- package/dist/components/toaster/toaster.js +0 -91
- package/dist/components/toaster/toaster.js.map +0 -1
- package/dist/components/toaster/use-toaster.d.ts +0 -15
- package/dist/components/toaster/use-toaster.d.ts.map +0 -1
- package/dist/components/toaster/use-toaster.js +0 -23
- package/dist/components/toaster/use-toaster.js.map +0 -1
|
@@ -70,8 +70,8 @@ declare const XhProgress: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
70
70
|
size: PropType<Size>;
|
|
71
71
|
}>> & Readonly<{}>, {
|
|
72
72
|
value: number;
|
|
73
|
-
max: number;
|
|
74
73
|
variant: ProgressVariant;
|
|
74
|
+
max: number;
|
|
75
75
|
indeterminate: boolean;
|
|
76
76
|
valueText: string;
|
|
77
77
|
strokeWidth: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/qr-code/context.ts"],"sourcesContent":["import type { QrCodeApi } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\nexport interface QrCodeContext {\n api: ComputedRef<QrCodeApi>\n}\n\nconst KEY: InjectionKey<QrCodeContext> = Symbol('xh-qr-code')\n\nexport function provideQrCode(ctx: QrCodeContext): void {\n provide(KEY, ctx)\n}\n\nexport function useQrCodeContext(): QrCodeContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] QrCode 部件必须用在 XhQrCode 内')\n return ctx\n}\n"],"mappings":";;AAQA,MAAM,MAAmC,OAAO,YAAY;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/qr-code/context.ts"],"sourcesContent":["import type { QrCodeApi } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\nexport interface QrCodeContext {\n api: ComputedRef<QrCodeApi>\n}\n\nconst KEY: InjectionKey<QrCodeContext> = Symbol.for('xh-qr-code')\n\nexport function provideQrCode(ctx: QrCodeContext): void {\n provide(KEY, ctx)\n}\n\nexport function useQrCodeContext(): QrCodeContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] QrCode 部件必须用在 XhQrCode 内')\n return ctx\n}\n"],"mappings":";;AAQA,MAAM,MAAmC,OAAO,IAAI,YAAY;AAEhE,SAAgB,cAAc,KAA0B;CACtD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,mBAAkC;CAChD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,+BAA+B;CACjD,OAAO;AACT"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { inject, provide } from "vue";
|
|
2
2
|
//#region src/components/radio-group/context.ts
|
|
3
|
-
const KEY = Symbol("xh-radio-group");
|
|
4
|
-
const ITEM_KEY = Symbol("xh-radio-group-item");
|
|
3
|
+
const KEY = Symbol.for("xh-radio-group");
|
|
4
|
+
const ITEM_KEY = Symbol.for("xh-radio-group-item");
|
|
5
5
|
function provideRadioGroup(ctx) {
|
|
6
6
|
provide(KEY, ctx);
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/radio-group/context.ts"],"sourcesContent":["import type { RadioGroupItemProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { RadioGroupContext } from './use-radio-group'\nimport { inject, provide } from 'vue'\n\n/** 条目自报的值与禁用,供 item-text / indicator 这类子部件复用同一份声明。 */\nexport interface RadioGroupItemContext {\n item: ComputedRef<RadioGroupItemProps>\n}\n\nconst KEY: InjectionKey<RadioGroupContext> = Symbol('xh-radio-group')\nconst ITEM_KEY: InjectionKey<RadioGroupItemContext> = Symbol('xh-radio-group-item')\n\nexport function provideRadioGroup(ctx: RadioGroupContext): void {\n provide(KEY, ctx)\n}\n\nexport function useRadioGroupContext(): RadioGroupContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] RadioGroup 部件必须用在 XhRadioGroupRoot 内')\n return ctx\n}\n\nexport function provideRadioGroupItem(ctx: RadioGroupItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useRadioGroupItemContext(): RadioGroupItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] RadioGroup 条目子部件必须用在 XhRadioGroupItem 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAAuC,OAAO,gBAAgB;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/radio-group/context.ts"],"sourcesContent":["import type { RadioGroupItemProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { RadioGroupContext } from './use-radio-group'\nimport { inject, provide } from 'vue'\n\n/** 条目自报的值与禁用,供 item-text / indicator 这类子部件复用同一份声明。 */\nexport interface RadioGroupItemContext {\n item: ComputedRef<RadioGroupItemProps>\n}\n\nconst KEY: InjectionKey<RadioGroupContext> = Symbol.for('xh-radio-group')\nconst ITEM_KEY: InjectionKey<RadioGroupItemContext> = Symbol.for('xh-radio-group-item')\n\nexport function provideRadioGroup(ctx: RadioGroupContext): void {\n provide(KEY, ctx)\n}\n\nexport function useRadioGroupContext(): RadioGroupContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] RadioGroup 部件必须用在 XhRadioGroupRoot 内')\n return ctx\n}\n\nexport function provideRadioGroupItem(ctx: RadioGroupItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useRadioGroupItemContext(): RadioGroupItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] RadioGroup 条目子部件必须用在 XhRadioGroupItem 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAAuC,OAAO,IAAI,gBAAgB;AACxE,MAAM,WAAgD,OAAO,IAAI,qBAAqB;AAEtF,SAAgB,kBAAkB,KAA8B;CAC9D,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,uBAA0C;CACxD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,2CAA2C;CAC7D,OAAO;AACT;AAEA,SAAgB,sBAAsB,KAAkC;CACtE,QAAQ,UAAU,GAAG;AACvB;AAEA,SAAgB,2BAAkD;CAChE,MAAM,MAAM,OAAO,UAAU,IAAI;CACjC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,8CAA8C;CAChE,OAAO;AACT"}
|
|
@@ -101,13 +101,13 @@ declare const XhRadioGroupRoot: import("vue").DefineComponent<import("vue").Extr
|
|
|
101
101
|
name: string;
|
|
102
102
|
invalid: boolean;
|
|
103
103
|
label: string;
|
|
104
|
-
size: Size;
|
|
105
104
|
value: string | null;
|
|
106
105
|
collection: RadioGroupNode[];
|
|
107
106
|
defaultValue: string | null;
|
|
108
107
|
orientation: Orientation;
|
|
109
108
|
dir: Direction;
|
|
110
109
|
tone: Tone;
|
|
110
|
+
size: Size;
|
|
111
111
|
disabled: boolean;
|
|
112
112
|
readOnly: boolean;
|
|
113
113
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/rating/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { RatingContext } from './use-rating'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<RatingContext> = Symbol('xh-rating')\n\nexport function provideRating(ctx: RatingContext): void {\n provide(KEY, ctx)\n}\n\nexport function useRatingContext(): RatingContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Rating 部件必须用在 XhRatingRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAmC,OAAO,WAAW;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/rating/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { RatingContext } from './use-rating'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<RatingContext> = Symbol.for('xh-rating')\n\nexport function provideRating(ctx: RatingContext): void {\n provide(KEY, ctx)\n}\n\nexport function useRatingContext(): RatingContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Rating 部件必须用在 XhRatingRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAmC,OAAO,IAAI,WAAW;AAE/D,SAAgB,cAAc,KAA0B;CACtD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,mBAAkC;CAChD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,mCAAmC;CACrD,OAAO;AACT"}
|
|
@@ -95,14 +95,14 @@ declare const XhRatingRoot: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
95
95
|
}>, {
|
|
96
96
|
required: boolean;
|
|
97
97
|
name: string;
|
|
98
|
-
size: Size;
|
|
99
98
|
value: number;
|
|
100
99
|
defaultValue: number;
|
|
101
100
|
dir: Direction;
|
|
102
101
|
tone: Tone;
|
|
102
|
+
size: Size;
|
|
103
103
|
disabled: boolean;
|
|
104
|
-
count: number;
|
|
105
104
|
readOnly: boolean;
|
|
105
|
+
count: number;
|
|
106
106
|
allowHalf: boolean;
|
|
107
107
|
allowClear: boolean;
|
|
108
108
|
}, SlotsType<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/result/context.ts"],"sourcesContent":["import type { ResultApi } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\nexport interface ResultContext {\n api: ComputedRef<ResultApi>\n}\n\nconst KEY: InjectionKey<ResultContext> = Symbol('xh-result')\n\nexport function provideResult(ctx: ResultContext): void {\n provide(KEY, ctx)\n}\n\nexport function useResultContext(): ResultContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Result 部件必须用在 XhResultRoot 内')\n return ctx\n}\n"],"mappings":";;AAQA,MAAM,MAAmC,OAAO,WAAW;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/result/context.ts"],"sourcesContent":["import type { ResultApi } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\nexport interface ResultContext {\n api: ComputedRef<ResultApi>\n}\n\nconst KEY: InjectionKey<ResultContext> = Symbol.for('xh-result')\n\nexport function provideResult(ctx: ResultContext): void {\n provide(KEY, ctx)\n}\n\nexport function useResultContext(): ResultContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Result 部件必须用在 XhResultRoot 内')\n return ctx\n}\n"],"mappings":";;AAQA,MAAM,MAAmC,OAAO,IAAI,WAAW;AAE/D,SAAgB,cAAc,KAA0B;CACtD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,mBAAkC;CAChD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,mCAAmC;CACrD,OAAO;AACT"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { inject, provide } from "vue";
|
|
2
2
|
//#region src/components/scroll-area/context.ts
|
|
3
|
-
const KEY = Symbol("xh-scroll-area");
|
|
4
|
-
const SCROLLBAR_KEY = Symbol("xh-scroll-area-scrollbar");
|
|
3
|
+
const KEY = Symbol.for("xh-scroll-area");
|
|
4
|
+
const SCROLLBAR_KEY = Symbol.for("xh-scroll-area-scrollbar");
|
|
5
5
|
function provideScrollArea(ctx) {
|
|
6
6
|
provide(KEY, ctx);
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/scroll-area/context.ts"],"sourcesContent":["import type { ScrollAreaScrollbarProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { ScrollAreaContext } from './use-scroll-area'\nimport { inject, provide } from 'vue'\n\n/** 滚动条自报的轴向,供它内部的滑块复用同一份声明。 */\nexport interface ScrollAreaScrollbarContext {\n scrollbar: ComputedRef<ScrollAreaScrollbarProps>\n}\n\nconst KEY: InjectionKey<ScrollAreaContext> = Symbol('xh-scroll-area')\nconst SCROLLBAR_KEY: InjectionKey<ScrollAreaScrollbarContext> = Symbol('xh-scroll-area-scrollbar')\n\nexport function provideScrollArea(ctx: ScrollAreaContext): void {\n provide(KEY, ctx)\n}\n\nexport function useScrollAreaContext(): ScrollAreaContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] ScrollArea 部件必须用在 XhScrollAreaRoot 内')\n return ctx\n}\n\nexport function provideScrollAreaScrollbar(ctx: ScrollAreaScrollbarContext): void {\n provide(SCROLLBAR_KEY, ctx)\n}\n\nexport function useScrollAreaScrollbarContext(): ScrollAreaScrollbarContext {\n const ctx = inject(SCROLLBAR_KEY, null)\n if (!ctx)\n throw new Error('[xh] ScrollArea 滑块必须用在 XhScrollAreaScrollbar 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAAuC,OAAO,gBAAgB;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/scroll-area/context.ts"],"sourcesContent":["import type { ScrollAreaScrollbarProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { ScrollAreaContext } from './use-scroll-area'\nimport { inject, provide } from 'vue'\n\n/** 滚动条自报的轴向,供它内部的滑块复用同一份声明。 */\nexport interface ScrollAreaScrollbarContext {\n scrollbar: ComputedRef<ScrollAreaScrollbarProps>\n}\n\nconst KEY: InjectionKey<ScrollAreaContext> = Symbol.for('xh-scroll-area')\nconst SCROLLBAR_KEY: InjectionKey<ScrollAreaScrollbarContext> = Symbol.for('xh-scroll-area-scrollbar')\n\nexport function provideScrollArea(ctx: ScrollAreaContext): void {\n provide(KEY, ctx)\n}\n\nexport function useScrollAreaContext(): ScrollAreaContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] ScrollArea 部件必须用在 XhScrollAreaRoot 内')\n return ctx\n}\n\nexport function provideScrollAreaScrollbar(ctx: ScrollAreaScrollbarContext): void {\n provide(SCROLLBAR_KEY, ctx)\n}\n\nexport function useScrollAreaScrollbarContext(): ScrollAreaScrollbarContext {\n const ctx = inject(SCROLLBAR_KEY, null)\n if (!ctx)\n throw new Error('[xh] ScrollArea 滑块必须用在 XhScrollAreaScrollbar 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAAuC,OAAO,IAAI,gBAAgB;AACxE,MAAM,gBAA0D,OAAO,IAAI,0BAA0B;AAErG,SAAgB,kBAAkB,KAA8B;CAC9D,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,uBAA0C;CACxD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,2CAA2C;CAC7D,OAAO;AACT;AAEA,SAAgB,2BAA2B,KAAuC;CAChF,QAAQ,eAAe,GAAG;AAC5B;AAEA,SAAgB,gCAA4D;CAC1E,MAAM,MAAM,OAAO,eAAe,IAAI;CACtC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,gDAAgD;CAClE,OAAO;AACT"}
|
|
@@ -54,9 +54,9 @@ declare const XhScrollAreaRoot: import("vue").DefineComponent<import("vue").Extr
|
|
|
54
54
|
forceVisible: BooleanConstructor;
|
|
55
55
|
}>> & Readonly<{}>, {
|
|
56
56
|
type: ScrollbarType;
|
|
57
|
-
size: Size;
|
|
58
57
|
orientation: ScrollAreaOrientation;
|
|
59
58
|
dir: Direction;
|
|
59
|
+
size: Size;
|
|
60
60
|
forceVisible: boolean;
|
|
61
61
|
hideDelay: number;
|
|
62
62
|
}, SlotsType<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/scrollbar/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { ScrollbarContext } from './use-scrollbar'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<ScrollbarContext> = Symbol('xh-scrollbar')\n\nexport function provideScrollbar(ctx: ScrollbarContext): void {\n provide(KEY, ctx)\n}\n\nexport function useScrollbarContext(): ScrollbarContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Scrollbar 部件必须用在 XhScrollbarRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAsC,OAAO,cAAc;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/scrollbar/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { ScrollbarContext } from './use-scrollbar'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<ScrollbarContext> = Symbol.for('xh-scrollbar')\n\nexport function provideScrollbar(ctx: ScrollbarContext): void {\n provide(KEY, ctx)\n}\n\nexport function useScrollbarContext(): ScrollbarContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Scrollbar 部件必须用在 XhScrollbarRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAsC,OAAO,IAAI,cAAc;AAErE,SAAgB,iBAAiB,KAA6B;CAC5D,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,sBAAwC;CACtD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,yCAAyC;CAC3D,OAAO;AACT"}
|
|
@@ -131,9 +131,9 @@ declare const XhScrollbarRoot: import("vue").DefineComponent<import("vue").Extra
|
|
|
131
131
|
"onDrag-end"?: ((_details: import("@xihan-ui/headless").ScrollbarScrollDetails) => any) | undefined;
|
|
132
132
|
}>, {
|
|
133
133
|
type: ScrollbarType;
|
|
134
|
-
size: Size;
|
|
135
134
|
orientation: Orientation;
|
|
136
135
|
dir: Direction;
|
|
136
|
+
size: Size;
|
|
137
137
|
disabled: boolean;
|
|
138
138
|
translations: Partial<import("@xihan-ui/headless").ScrollbarTranslations> | undefined;
|
|
139
139
|
step: number;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { inject, provide } from "vue";
|
|
2
2
|
//#region src/components/segmented/context.ts
|
|
3
|
-
const KEY = Symbol("xh-segmented");
|
|
4
|
-
const ITEM_KEY = Symbol("xh-segmented-item");
|
|
3
|
+
const KEY = Symbol.for("xh-segmented");
|
|
4
|
+
const ITEM_KEY = Symbol.for("xh-segmented-item");
|
|
5
5
|
function provideSegmented(ctx) {
|
|
6
6
|
provide(KEY, ctx);
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/segmented/context.ts"],"sourcesContent":["import type { SegmentedItemProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { SegmentedContext } from './use-segmented'\nimport { inject, provide } from 'vue'\n\n/** 条目自报的值与禁用,供 item-text 这类子部件复用同一份声明。 */\nexport interface SegmentedItemContext {\n item: ComputedRef<SegmentedItemProps>\n}\n\nconst KEY: InjectionKey<SegmentedContext> = Symbol('xh-segmented')\nconst ITEM_KEY: InjectionKey<SegmentedItemContext> = Symbol('xh-segmented-item')\n\nexport function provideSegmented(ctx: SegmentedContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSegmentedContext(): SegmentedContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Segmented 部件必须用在 XhSegmentedRoot 内')\n return ctx\n}\n\nexport function provideSegmentedItem(ctx: SegmentedItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useSegmentedItemContext(): SegmentedItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] Segmented 条目子部件必须用在 XhSegmentedItem 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAAsC,OAAO,cAAc;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/segmented/context.ts"],"sourcesContent":["import type { SegmentedItemProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { SegmentedContext } from './use-segmented'\nimport { inject, provide } from 'vue'\n\n/** 条目自报的值与禁用,供 item-text 这类子部件复用同一份声明。 */\nexport interface SegmentedItemContext {\n item: ComputedRef<SegmentedItemProps>\n}\n\nconst KEY: InjectionKey<SegmentedContext> = Symbol.for('xh-segmented')\nconst ITEM_KEY: InjectionKey<SegmentedItemContext> = Symbol.for('xh-segmented-item')\n\nexport function provideSegmented(ctx: SegmentedContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSegmentedContext(): SegmentedContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Segmented 部件必须用在 XhSegmentedRoot 内')\n return ctx\n}\n\nexport function provideSegmentedItem(ctx: SegmentedItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useSegmentedItemContext(): SegmentedItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] Segmented 条目子部件必须用在 XhSegmentedItem 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAAsC,OAAO,IAAI,cAAc;AACrE,MAAM,WAA+C,OAAO,IAAI,mBAAmB;AAEnF,SAAgB,iBAAiB,KAA6B;CAC5D,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,sBAAwC;CACtD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,yCAAyC;CAC3D,OAAO;AACT;AAEA,SAAgB,qBAAqB,KAAiC;CACpE,QAAQ,UAAU,GAAG;AACvB;AAEA,SAAgB,0BAAgD;CAC9D,MAAM,MAAM,OAAO,UAAU,IAAI;CACjC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,4CAA4C;CAC9D,OAAO;AACT"}
|
|
@@ -130,13 +130,13 @@ declare const XhSegmentedRoot: import("vue").DefineComponent<import("vue").Extra
|
|
|
130
130
|
required: boolean;
|
|
131
131
|
name: string;
|
|
132
132
|
invalid: boolean;
|
|
133
|
-
size: Size;
|
|
134
133
|
value: string | null;
|
|
135
134
|
collection: SegmentedNode[];
|
|
136
135
|
defaultValue: string | null;
|
|
137
136
|
orientation: Orientation;
|
|
138
137
|
dir: Direction;
|
|
139
138
|
tone: Tone;
|
|
139
|
+
size: Size;
|
|
140
140
|
disabled: boolean;
|
|
141
141
|
readOnly: boolean;
|
|
142
142
|
loop: boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { inject, provide } from "vue";
|
|
2
2
|
//#region src/components/select/context.ts
|
|
3
|
-
const KEY = Symbol("xh-select");
|
|
4
|
-
const ITEM_KEY = Symbol("xh-select-item");
|
|
3
|
+
const KEY = Symbol.for("xh-select");
|
|
4
|
+
const ITEM_KEY = Symbol.for("xh-select-item");
|
|
5
5
|
function provideSelect(ctx) {
|
|
6
6
|
provide(KEY, ctx);
|
|
7
7
|
}
|
|
@@ -18,7 +18,7 @@ function useSelectItemContext() {
|
|
|
18
18
|
if (!ctx) throw new Error("[xh] Select 条目子部件必须用在 XhSelectItem 内");
|
|
19
19
|
return ctx;
|
|
20
20
|
}
|
|
21
|
-
const TAG_KEY = Symbol("xh-select-tag");
|
|
21
|
+
const TAG_KEY = Symbol.for("xh-select-tag");
|
|
22
22
|
function provideSelectTag(ctx) {
|
|
23
23
|
provide(TAG_KEY, ctx);
|
|
24
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/select/context.ts"],"sourcesContent":["import type { SelectItemProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { SelectContext } from './use-select'\nimport { inject, provide } from 'vue'\n\n/** 条目自报的值与禁用,供 item-text / item-indicator 这类子部件复用同一份声明。 */\nexport interface SelectItemContext {\n item: ComputedRef<SelectItemProps>\n}\n\nconst KEY: InjectionKey<SelectContext> = Symbol('xh-select')\nconst ITEM_KEY: InjectionKey<SelectItemContext> = Symbol('xh-select-item')\n\nexport function provideSelect(ctx: SelectContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSelectContext(): SelectContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Select 部件必须用在 XhSelectRoot 内')\n return ctx\n}\n\nexport function provideSelectItem(ctx: SelectItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useSelectItemContext(): SelectItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] Select 条目子部件必须用在 XhSelectItem 内')\n return ctx\n}\n\n/** 标签自报的值,供 item-delete-trigger 复用同一份声明。 */\nexport interface SelectTagContext {\n value: () => string\n}\n\nconst TAG_KEY: InjectionKey<SelectTagContext> = Symbol('xh-select-tag')\n\nexport function provideSelectTag(ctx: SelectTagContext): void {\n provide(TAG_KEY, ctx)\n}\n\nexport function useSelectTagContext(): SelectTagContext {\n const ctx = inject(TAG_KEY, null)\n if (!ctx)\n throw new Error('[xh] Select 标签子部件必须用在 XhSelectTag 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAAmC,OAAO,WAAW;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/select/context.ts"],"sourcesContent":["import type { SelectItemProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { SelectContext } from './use-select'\nimport { inject, provide } from 'vue'\n\n/** 条目自报的值与禁用,供 item-text / item-indicator 这类子部件复用同一份声明。 */\nexport interface SelectItemContext {\n item: ComputedRef<SelectItemProps>\n}\n\nconst KEY: InjectionKey<SelectContext> = Symbol.for('xh-select')\nconst ITEM_KEY: InjectionKey<SelectItemContext> = Symbol.for('xh-select-item')\n\nexport function provideSelect(ctx: SelectContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSelectContext(): SelectContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Select 部件必须用在 XhSelectRoot 内')\n return ctx\n}\n\nexport function provideSelectItem(ctx: SelectItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useSelectItemContext(): SelectItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] Select 条目子部件必须用在 XhSelectItem 内')\n return ctx\n}\n\n/** 标签自报的值,供 item-delete-trigger 复用同一份声明。 */\nexport interface SelectTagContext {\n value: () => string\n}\n\nconst TAG_KEY: InjectionKey<SelectTagContext> = Symbol.for('xh-select-tag')\n\nexport function provideSelectTag(ctx: SelectTagContext): void {\n provide(TAG_KEY, ctx)\n}\n\nexport function useSelectTagContext(): SelectTagContext {\n const ctx = inject(TAG_KEY, null)\n if (!ctx)\n throw new Error('[xh] Select 标签子部件必须用在 XhSelectTag 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAAmC,OAAO,IAAI,WAAW;AAC/D,MAAM,WAA4C,OAAO,IAAI,gBAAgB;AAE7E,SAAgB,cAAc,KAA0B;CACtD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,mBAAkC;CAChD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,mCAAmC;CACrD,OAAO;AACT;AAEA,SAAgB,kBAAkB,KAA8B;CAC9D,QAAQ,UAAU,GAAG;AACvB;AAEA,SAAgB,uBAA0C;CACxD,MAAM,MAAM,OAAO,UAAU,IAAI;CACjC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,sCAAsC;CACxD,OAAO;AACT;AAOA,MAAM,UAA0C,OAAO,IAAI,eAAe;AAE1E,SAAgB,iBAAiB,KAA6B;CAC5D,QAAQ,SAAS,GAAG;AACtB;AAEA,SAAgB,sBAAwC;CACtD,MAAM,MAAM,OAAO,SAAS,IAAI;CAChC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,qCAAqC;CACvD,OAAO;AACT"}
|
|
@@ -184,18 +184,18 @@ declare const XhSelectRoot: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
184
184
|
name: string;
|
|
185
185
|
invalid: boolean;
|
|
186
186
|
label: string;
|
|
187
|
-
size: Size;
|
|
188
187
|
value: string | string[] | null;
|
|
189
188
|
multiple: boolean;
|
|
190
189
|
collection: SelectNode[];
|
|
191
190
|
defaultValue: string | string[] | null;
|
|
192
191
|
dir: Direction;
|
|
193
192
|
tone: Tone;
|
|
193
|
+
size: Size;
|
|
194
194
|
disabled: boolean;
|
|
195
|
+
offset: number;
|
|
196
|
+
translations: Partial<import("@xihan-ui/headless").SelectTranslations> | undefined;
|
|
195
197
|
open: boolean;
|
|
196
198
|
defaultOpen: boolean;
|
|
197
|
-
translations: Partial<import("@xihan-ui/headless").SelectTranslations> | undefined;
|
|
198
|
-
offset: number;
|
|
199
199
|
variant: ControlVariant;
|
|
200
200
|
readOnly: boolean;
|
|
201
201
|
loop: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.d.ts","names":[],"sources":["../../../src/components/select/select.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"select.d.ts","names":[],"sources":["../../../src/components/select/select.ts"],"mappings":";;;;KASK,cAAc;;KAGP,sBAAsB,KAChC;cAIW,4BAAY,8BAAA;;IAIQ,MAAA,SAAS;;;;;;;;;IAGJ,MAAA;;;;IACO,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;IAYT,MAAA,SAAS;;;;;;;;;;;;IAGZ,MAAA,SAAS;;;;;;;;;;;;IAGf,MAAA,SAAS;;;;IACL,MAAA,SAAS;;;;IACZ,MAAA,SAAS;;;;IACT,MAAA,SAAS;;;;;;EAKN,iBAAA,UAAA;EACD,gBAAA,UAAA;EACD,iBAAA;EACF,gBAAA;;;IAjCM,MAAA,SAAS;;;;;;;;;IAGJ,MAAA;;;;IACO,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;IAYT,MAAA,SAAS;;;;;;;;;;;;IAGZ,MAAA,SAAS;;;;;;;;;;;;IAGf,MAAA,SAAS;;;;IACL,MAAA,SAAS;;;;IACZ,MAAA,SAAS;;;;IACT,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWvB,WAAC,OAAO,wBAAwB;EAClC,cAAM;EACP,QAAC,MAAM,mBAAmB;kCAgDnC;cAEW,6BAAa,0BAAA,oBAAA,4BAAA;;8BAMxB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,+BAAe,0BAAA,oBAAA,4BAAA;;8BAO1B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,+BAAe,0BAAA,oBAAA,4BAAA;;8BAc1B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,iCAAiB,0BAAA,oBAAA,4BAAA;;8BAW5B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,iCAAiB,0BAAA,oBAAA,4BAAA;;8BAM5B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,oCAAoB,0BAAA,oBAAA,4BAAA;;8BAO/B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,2BAAW,8BAAA;;;;;;;;;;;;;;MAWtB,oDAAA;cAEW,yCAAyB,0BAAA,oBAAA,4BAAA;;8BAOpC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAc7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,+BAAe,0BAAA,oBAAA,4BAAA;;8BAY1B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,4BAAY,0BAAA,oBAAA,4BAAA;;8BAOvB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,8BAAc,0BAAA,oBAAA,4BAAA;;8BAQzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,4BAAY,8BAAA;;;;;;;;;;;;;;;;;;;;;;qCAoCvB;cAEW,gCAAgB,0BAAA,oBAAA,4BAAA;;8BAO3B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,qCAAqB,0BAAA,oBAAA,4BAAA;;8BAOhC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { withXhConfig } from "../../config/config.js";
|
|
2
|
+
import { useFieldLabelWiring, useFieldStateWiring } from "../field/use-field-control.js";
|
|
2
3
|
import { provideSelect, provideSelectItem, provideSelectTag, useSelectContext, useSelectItemContext, useSelectTagContext } from "./context.js";
|
|
3
4
|
import { useSelect } from "./use-select.js";
|
|
4
5
|
import { Teleport, computed, defineComponent, h, mergeProps, onBeforeUnmount, ref, watch } from "vue";
|
|
@@ -144,13 +145,16 @@ const XhSelectControl = defineComponent({
|
|
|
144
145
|
const XhSelectTrigger = defineComponent({
|
|
145
146
|
name: "XhSelectTrigger",
|
|
146
147
|
setup(_, { slots }) {
|
|
148
|
+
const fieldWiring = useFieldStateWiring();
|
|
149
|
+
const fieldLabel = useFieldLabelWiring();
|
|
147
150
|
const ctx = useSelectContext();
|
|
148
|
-
return () => h("button", {
|
|
151
|
+
return () => h("button", fieldLabel.value({
|
|
149
152
|
...ctx.api.value.getTriggerProps(),
|
|
150
153
|
ref: (el) => {
|
|
151
154
|
ctx.triggerRef.value = el;
|
|
152
|
-
}
|
|
153
|
-
|
|
155
|
+
},
|
|
156
|
+
...fieldWiring.value
|
|
157
|
+
}), slots.default?.());
|
|
154
158
|
}
|
|
155
159
|
});
|
|
156
160
|
const XhSelectValueText = defineComponent({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.js","names":[],"sources":["../../../src/components/select/select.ts"],"sourcesContent":["import type { SelectApi, SelectItemProps, SelectNode, SelectNodeMeta, SelectOpenChangeDetails, SelectSchema, SelectValueChangeDetails } from '@xihan-ui/headless'\nimport type { ControlVariant, Direction, Placement, Size, Tone } from '@xihan-ui/kernel'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport { computed, defineComponent, h, mergeProps, onBeforeUnmount, ref, Teleport, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { provideSelect, provideSelectItem, provideSelectTag, useSelectContext, useSelectItemContext, useSelectTagContext } from './context'\nimport { useSelect } from './use-select'\n\ntype SelectProps = SelectSchema['props']\n\n/** 默认插槽的载荷:展开态、选中集合与显示文字、可见标签与被折起的个数,以及改展开、改值、清空、摘值四个动作。 */\nexport type SelectRootSlotProps = Pick<\n SelectApi,\n 'open' | 'value' | 'displayText' | 'tags' | 'overflowCount' | 'setOpen' | 'setValue' | 'clear' | 'deselect'\n>\n\nexport const XhSelectRoot = defineComponent({\n name: 'XhSelectRoot',\n // 有 connect 兜底的 prop 一律 default: undefined\n props: {\n collection: { type: Array as PropType<SelectNode[]>, default: undefined },\n /** 标题文字。给了它就不必再写 label 部件;要放别的内容改用 label 插槽。 */\n label: { type: String, default: undefined },\n value: { type: [String, Array] as PropType<string | string[] | null>, default: undefined },\n defaultValue: { type: [String, Array] as PropType<string | string[] | null>, default: undefined },\n multiple: Boolean,\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n disabled: Boolean,\n /** 只读:浮层照常展开与浏览,但选中值改不动、也清不掉。 */\n readOnly: { type: Boolean, default: undefined },\n /** 自动渲染树里是否带清空按钮;手写部件不看它,写了节点即可清。 */\n clearable: Boolean,\n invalid: { type: Boolean, default: undefined },\n required: Boolean,\n name: { type: String, default: undefined },\n translations: { type: Object as PropType<SelectProps['translations']>, default: undefined },\n maxTagCount: { type: Number, default: undefined },\n placeholder: { type: String, default: undefined },\n placement: { type: String as PropType<Placement>, default: undefined },\n offset: { type: Number, default: undefined },\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction>, default: undefined },\n variant: { type: String as PropType<ControlVariant>, default: undefined },\n tone: { type: String as PropType<Tone>, default: undefined },\n size: { type: String as PropType<Size>, default: undefined },\n },\n // *-change 携带 details 对象,update:* 携带裸值。\n // 校验函数恒真,只声明载荷类型:'update:value' 是 string[],单选也是长度 1 的数组而非裸串。\n emits: {\n 'value-change': (_details: SelectValueChangeDetails) => true,\n 'open-change': (_details: SelectOpenChangeDetails) => true,\n 'update:value': (_value: string[]) => true,\n 'update:open': (_open: boolean) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: SelectRootSlotProps) => VNode[]\n label?: () => VNode[]\n item?: (node: SelectNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: SelectProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyOpen: SelectProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const ctx = useSelect(withXhConfig('select', props) as SelectProps, notifyValue, notifyOpen)\n provideSelect(ctx)\n\n // 表单影子由根部件装配:空串选项打底,每个选中值一个 selected 选项,供 required 判定。\n // 选中态一律靠选项的 selected 表达,多选下 select.value 表达不了集合。\n const hiddenSelect = (): VNode => {\n const api = ctx.api.value\n const options = [h('option', { value: '' })]\n for (const [i, v] of api.value.entries())\n options.push(h('option', { value: v, selected: true }, api.valueText[i] ?? v))\n return h('select', api.getHiddenSelectProps() as Record<string, unknown>, options)\n }\n\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, [\n hiddenSelect(),\n ...(slots.default\n ? slots.default({\n open: ctx.api.value.open,\n value: ctx.api.value.value,\n displayText: ctx.api.value.displayText,\n tags: ctx.api.value.tags,\n overflowCount: ctx.api.value.overflowCount,\n setOpen: ctx.api.value.setOpen,\n setValue: ctx.api.value.setValue,\n clear: ctx.api.value.clear,\n deselect: ctx.api.value.deselect,\n }) ?? []\n : props.collection\n ? renderDefaultTree(\n ctx.api.value.collection,\n slots.label?.() ?? (props.label != null ? [props.label] : null),\n props.clearable,\n slots.item,\n )\n : []),\n ])\n },\n})\n\nexport const XhSelectLabel = defineComponent({\n name: 'XhSelectLabel',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectControl = defineComponent({\n name: 'XhSelectControl',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 盒:触发器与清空按钮在里面并排,描边、底色与聚焦环都长在它上面\n return () => h('div', ctx.api.value.getControlProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectTrigger = defineComponent({\n name: 'XhSelectTrigger',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n return () => h('button', {\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhSelectValueText = defineComponent({\n name: 'XhSelectValueText',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 有插槽用插槽,否则显示选中项文本或 placeholder\n return () => h(\n 'span',\n ctx.api.value.getValueTextProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.displayText,\n )\n },\n})\n\nexport const XhSelectIndicator = defineComponent({\n name: 'XhSelectIndicator',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n return () => h('span', ctx.api.value.getIndicatorProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectClearTrigger = defineComponent({\n name: 'XhSelectClearTrigger',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 节点常挂,清不了时靠 hidden 藏掉\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectTag = defineComponent({\n name: 'XhSelectTag',\n props: {\n /** 它代表哪个选中值。 */\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useSelectContext()\n provideSelectTag({ value: () => props.value })\n return () => h('span', ctx.api.value.getTagProps({ value: props.value }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectItemDeleteTrigger = defineComponent({\n name: 'XhSelectItemDeleteTrigger',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const tag = useSelectTagContext()\n return () => h('button', ctx.api.value.getItemDeleteTriggerProps({ value: tag.value() }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectPositioner = defineComponent({\n name: 'XhSelectPositioner',\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 positioner 上\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n const ctx = useSelectContext()\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => h(Teleport, { to: ctx.portalTarget.value }, [\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 XhSelectContent = defineComponent({\n name: 'XhSelectContent',\n setup(_, { slots }) {\n const ctx = useSelectContext()\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 XhSelectList = defineComponent({\n name: 'XhSelectList',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 列表框本体:条目放这里面。滚动也在这一层,底部操作区因此不随条目滚走\n return () => h('div', ctx.api.value.getListProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectFooter = defineComponent({\n name: 'XhSelectFooter',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 浮层底部的操作区:是 list 的兄弟,不进列表框的拥有关系,\n // 放在里面的按钮既不违反 listbox 的子节点约束,也不会被方向键与连打检索走到\n return () => h('div', ctx.api.value.getFooterProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectItem = defineComponent({\n name: 'XhSelectItem',\n props: {\n value: { type: String, required: true },\n // 缺省交给 connect 回 collection 里查,写死 false 会盖掉数据里的禁用\n disabled: { type: Boolean, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useSelectContext()\n const item = computed<SelectItemProps>(() => ({ value: props.value, disabled: props.disabled }))\n provideSelectItem({ item })\n // 本条目持有焦点时,value 变更重报高亮条目,卸载时上报条目丢失\n const itemEl = ref<HTMLElement | null>(null)\n watch(() => props.value, (next, prev) => {\n if (next === prev)\n return\n const svc = ctx.service\n if (svc.getStatus() !== 'Started')\n return\n if (itemEl.value && svc.scope.getActiveElement() === itemEl.value)\n svc.send({ type: 'ITEM.HIGHLIGHT', 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: 'ITEM.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\nexport const XhSelectItemText = defineComponent({\n name: 'XhSelectItemText',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { item } = useSelectItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectItemIndicator = defineComponent({\n name: 'XhSelectItemIndicator',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { item } = useSelectItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 没写默认插槽时按 collection 铺开的整套结构,作者只交数据。\n * 与手写部件产出的 DOM 完全一致,要改结构就写默认插槽,行为不变。\n */\nfunction renderDefaultTree(\n collection: readonly SelectNodeMeta[],\n label: (VNode | string)[] | null,\n clearable: boolean,\n itemSlot?: (node: SelectNodeMeta) => VNode[],\n): VNode[] {\n const trigger = h(XhSelectTrigger, null, () => [h(XhSelectValueText), h(XhSelectIndicator)])\n return [\n ...(label ? [h(XhSelectLabel, null, () => label)] : []),\n // control 是盒:描边、底色与聚焦环都长在它上面,触发器与清空钮在里面并排。\n // 清空钮排在触发器之后(按钮不能套按钮),展开箭头是触发器里的指示符,\n // 视觉上仍是「清空在左、箭头在右」\n h(XhSelectControl, null, () => (clearable ? [trigger, h(XhSelectClearTrigger)] : [trigger])),\n h(XhSelectPositioner, null, () => [\n h(XhSelectContent, null, () => h(XhSelectList, null, () => collection.map(node =>\n h(XhSelectItem, { key: node.value, value: node.value }, () => [\n h(XhSelectItemText, null, () => itemSlot?.(node) ?? node.label),\n h(XhSelectItemIndicator),\n ]),\n ))),\n ]),\n ]\n}\n"],"mappings":";;;;;AAgBA,MAAa,eAAe,gBAAgB;CAC1C,MAAM;CAEN,OAAO;EACL,YAAY;GAAE,MAAM;GAAiC,SAAS,KAAA;EAAU;;EAExE,OAAO;GAAE,MAAM;GAAQ,SAAS,KAAA;EAAU;EAC1C,OAAO;GAAE,MAAM,CAAC,QAAQ,KAAK;GAAyC,SAAS,KAAA;EAAU;EACzF,cAAc;GAAE,MAAM,CAAC,QAAQ,KAAK;GAAyC,SAAS,KAAA;EAAU;EAChG,UAAU;EACV,MAAM;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC1C,aAAa;EACb,UAAU;;EAEV,UAAU;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;;EAE9C,WAAW;EACX,SAAS;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC7C,UAAU;EACV,MAAM;GAAE,MAAM;GAAQ,SAAS,KAAA;EAAU;EACzC,cAAc;GAAE,MAAM;GAAiD,SAAS,KAAA;EAAU;EAC1F,aAAa;GAAE,MAAM;GAAQ,SAAS,KAAA;EAAU;EAChD,aAAa;GAAE,MAAM;GAAQ,SAAS,KAAA;EAAU;EAChD,WAAW;GAAE,MAAM;GAA+B,SAAS,KAAA;EAAU;EACrE,QAAQ;GAAE,MAAM;GAAQ,SAAS,KAAA;EAAU;EAC3C,MAAM;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC1C,KAAK;GAAE,MAAM;GAA+B,SAAS,KAAA;EAAU;EAC/D,SAAS;GAAE,MAAM;GAAoC,SAAS,KAAA;EAAU;EACxE,MAAM;GAAE,MAAM;GAA0B,SAAS,KAAA;EAAU;EAC3D,MAAM;GAAE,MAAM;GAA0B,SAAS,KAAA;EAAU;CAC7D;CAGA,OAAO;EACL,iBAAiB,aAAuC;EACxD,gBAAgB,aAAsC;EACtD,iBAAiB,WAAqB;EACtC,gBAAgB,UAAmB;CACrC;CACA,OAAO;CAKP,MAAM,OAAO,EAAE,OAAO,QAAQ;EAC5B,MAAM,eAA6C,YAAY;GAC7D,KAAK,gBAAgB,OAAO;GAC5B,KAAK,gBAAgB,QAAQ,KAAK;EACpC;EACA,MAAM,cAA2C,YAAY;GAC3D,KAAK,eAAe,OAAO;GAC3B,KAAK,eAAe,QAAQ,IAAI;EAClC;EACA,MAAM,MAAM,UAAU,aAAa,UAAU,KAAK,GAAkB,aAAa,UAAU;EAC3F,cAAc,GAAG;EAIjB,MAAM,qBAA4B;GAChC,MAAM,MAAM,IAAI,IAAI;GACpB,MAAM,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,GAAG,CAAC,CAAC;GAC3C,KAAK,MAAM,CAAC,GAAG,MAAM,IAAI,MAAM,QAAQ,GACrC,QAAQ,KAAK,EAAE,UAAU;IAAE,OAAO;IAAG,UAAU;GAAK,GAAG,IAAI,UAAU,MAAM,CAAC,CAAC;GAC/E,OAAO,EAAE,UAAU,IAAI,qBAAqB,GAA8B,OAAO;EACnF;EAEA,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,aAAa,GAA8B,CAC7E,aAAa,GACb,GAAI,MAAM,UACN,MAAM,QAAQ;GACd,MAAM,IAAI,IAAI,MAAM;GACpB,OAAO,IAAI,IAAI,MAAM;GACrB,aAAa,IAAI,IAAI,MAAM;GAC3B,MAAM,IAAI,IAAI,MAAM;GACpB,eAAe,IAAI,IAAI,MAAM;GAC7B,SAAS,IAAI,IAAI,MAAM;GACvB,UAAU,IAAI,IAAI,MAAM;GACxB,OAAO,IAAI,IAAI,MAAM;GACrB,UAAU,IAAI,IAAI,MAAM;EAC1B,CAAC,KAAK,CAAC,IACL,MAAM,aACJ,kBACE,IAAI,IAAI,MAAM,YACd,MAAM,QAAQ,MAAM,MAAM,SAAS,OAAO,CAAC,MAAM,KAAK,IAAI,OAC1D,MAAM,WACN,MAAM,IACR,IACA,CAAC,CACT,CAAC;CACH;AACF,CAAC;AAED,MAAa,gBAAgB,gBAAgB;CAC3C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,cAAc,GAA8B,MAAM,UAAU,CAAC;CACpG;AACF,CAAC;AAED,MAAa,kBAAkB,gBAAgB;CAC7C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAE7B,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,gBAAgB,GAA8B,MAAM,UAAU,CAAC;CACrG;AACF,CAAC;AAED,MAAa,kBAAkB,gBAAgB;CAC7C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,aAAa,EAAE,UAAU;GACvB,GAAG,IAAI,IAAI,MAAM,gBAAgB;GACjC,MAAM,OAAgB;IAAE,IAAI,WAAW,QAAQ;GAAkB;EACnE,GAAG,MAAM,UAAU,CAAC;CACtB;AACF,CAAC;AAED,MAAa,oBAAoB,gBAAgB;CAC/C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAE7B,aAAa,EACX,QACA,IAAI,IAAI,MAAM,kBAAkB,GAChC,MAAM,UAAU,KAAK,IAAI,IAAI,MAAM,WACrC;CACF;AACF,CAAC;AAED,MAAa,oBAAoB,gBAAgB;CAC/C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,kBAAkB,GAA8B,MAAM,UAAU,CAAC;CACxG;AACF,CAAC;AAED,MAAa,uBAAuB,gBAAgB;CAClD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAE7B,aAAa,EAAE,UAAU,IAAI,IAAI,MAAM,qBAAqB,GAA8B,MAAM,UAAU,CAAC;CAC7G;AACF,CAAC;AAED,MAAa,cAAc,gBAAgB;CACzC,MAAM;CACN,OAAO;;AAEL,OAAO;EAAE,MAAM;EAAQ,UAAU;CAAK,EACxC;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,MAAM,iBAAiB;EAC7B,iBAAiB,EAAE,aAAa,MAAM,MAAM,CAAC;EAC7C,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,YAAY,EAAE,OAAO,MAAM,MAAM,CAAC,GAA8B,MAAM,UAAU,CAAC;CACxH;AACF,CAAC;AAED,MAAa,4BAA4B,gBAAgB;CACvD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,MAAM,MAAM,oBAAoB;EAChC,aAAa,EAAE,UAAU,IAAI,IAAI,MAAM,0BAA0B,EAAE,OAAO,IAAI,MAAM,EAAE,CAAC,GAA8B,MAAM,UAAU,CAAC;CACxI;AACF,CAAC;AAED,MAAa,qBAAqB,gBAAgB;CAChD,MAAM;CAEN,cAAc;CACd,MAAM,GAAG,EAAE,OAAO,SAAS;EACzB,MAAM,MAAM,iBAAiB;EAE7B,aAAa,EAAE,UAAU,EAAE,IAAI,IAAI,aAAa,MAAM,GAAG,CACvD,EAAE,OAAO;GACP,GAAG,WAAW,IAAI,IAAI,MAAM,mBAAmB,GAA8B,KAAK;GAClF,MAAM,OAAgB;IAAE,IAAI,cAAc,QAAQ;GAAkB;EACtE,GAAG,MAAM,UAAU,CAAC,CACtB,CAAC;CACH;AACF,CAAC;AAED,MAAa,kBAAkB,gBAAgB;CAC7C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,aAAa,EAAE,OAAO;GACpB,GAAG,IAAI,IAAI,MAAM,gBAAgB;GAGjC,OAAO,IAAI,QAAQ,QAAQ,KAAA,IAAY,EAAE,SAAS,OAAO;GACzD,MAAM,OAAgB;IAAE,IAAI,WAAW,QAAQ;GAAkB;EACnE,GAAG,MAAM,UAAU,CAAC;CACtB;AACF,CAAC;AAED,MAAa,eAAe,gBAAgB;CAC1C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAE7B,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,aAAa,GAA8B,MAAM,UAAU,CAAC;CAClG;AACF,CAAC;AAED,MAAa,iBAAiB,gBAAgB;CAC5C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAG7B,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,eAAe,GAA8B,MAAM,UAAU,CAAC;CACpG;AACF,CAAC;AAED,MAAa,eAAe,gBAAgB;CAC1C,MAAM;CACN,OAAO;EACL,OAAO;GAAE,MAAM;GAAQ,UAAU;EAAK;EAEtC,UAAU;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;CAChD;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,MAAM,iBAAiB;EAC7B,MAAM,OAAO,gBAAiC;GAAE,OAAO,MAAM;GAAO,UAAU,MAAM;EAAS,EAAE;EAC/F,kBAAkB,EAAE,KAAK,CAAC;EAE1B,MAAM,SAAS,IAAwB,IAAI;EAC3C,YAAY,MAAM,QAAQ,MAAM,SAAS;GACvC,IAAI,SAAS,MACX;GACF,MAAM,MAAM,IAAI;GAChB,IAAI,IAAI,UAAU,MAAM,WACtB;GACF,IAAI,OAAO,SAAS,IAAI,MAAM,iBAAiB,MAAM,OAAO,OAC1D,IAAI,KAAK;IAAE,MAAM;IAAkB,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,OACA;GAAE,GAAG,IAAI,IAAI,MAAM,aAAa,KAAK,KAAK;GAA8B,KAAK;EAAO,GACpF,MAAM,UAAU,CAClB;CACF;AACF,CAAC;AAED,MAAa,mBAAmB,gBAAgB;CAC9C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,MAAM,EAAE,SAAS,qBAAqB;EACtC,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,iBAAiB,KAAK,KAAK,GAA8B,MAAM,UAAU,CAAC;CACjH;AACF,CAAC;AAED,MAAa,wBAAwB,gBAAgB;CACnD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,iBAAiB;EAC7B,MAAM,EAAE,SAAS,qBAAqB;EACtC,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,sBAAsB,KAAK,KAAK,GAA8B,MAAM,UAAU,CAAC;CACtH;AACF,CAAC;;;;;AAMD,SAAS,kBACP,YACA,OACA,WACA,UACS;CACT,MAAM,UAAU,EAAE,iBAAiB,YAAY,CAAC,EAAE,iBAAiB,GAAG,EAAE,iBAAiB,CAAC,CAAC;CAC3F,OAAO;EACL,GAAI,QAAQ,CAAC,EAAE,eAAe,YAAY,KAAK,CAAC,IAAI,CAAC;EAIrD,EAAE,iBAAiB,YAAa,YAAY,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAE;EAC3F,EAAE,oBAAoB,YAAY,CAChC,EAAE,iBAAiB,YAAY,EAAE,cAAc,YAAY,WAAW,KAAI,SACxE,EAAE,cAAc;GAAE,KAAK,KAAK;GAAO,OAAO,KAAK;EAAM,SAAS,CAC5D,EAAE,kBAAkB,YAAY,WAAW,IAAI,KAAK,KAAK,KAAK,GAC9D,EAAE,qBAAqB,CACzB,CAAC,CACH,CAAC,CAAC,CACJ,CAAC;CACH;AACF"}
|
|
1
|
+
{"version":3,"file":"select.js","names":[],"sources":["../../../src/components/select/select.ts"],"sourcesContent":["import type { SelectApi, SelectItemProps, SelectNode, SelectNodeMeta, SelectOpenChangeDetails, SelectSchema, SelectValueChangeDetails } from '@xihan-ui/headless'\nimport type { ControlVariant, Direction, Placement, Size, Tone } from '@xihan-ui/kernel'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport { computed, defineComponent, h, mergeProps, onBeforeUnmount, ref, Teleport, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { useFieldLabelWiring, useFieldStateWiring } from '../field/use-field-control'\nimport { provideSelect, provideSelectItem, provideSelectTag, useSelectContext, useSelectItemContext, useSelectTagContext } from './context'\nimport { useSelect } from './use-select'\n\ntype SelectProps = SelectSchema['props']\n\n/** 默认插槽的载荷:展开态、选中集合与显示文字、可见标签与被折起的个数,以及改展开、改值、清空、摘值四个动作。 */\nexport type SelectRootSlotProps = Pick<\n SelectApi,\n 'open' | 'value' | 'displayText' | 'tags' | 'overflowCount' | 'setOpen' | 'setValue' | 'clear' | 'deselect'\n>\n\nexport const XhSelectRoot = defineComponent({\n name: 'XhSelectRoot',\n // 有 connect 兜底的 prop 一律 default: undefined\n props: {\n collection: { type: Array as PropType<SelectNode[]>, default: undefined },\n /** 标题文字。给了它就不必再写 label 部件;要放别的内容改用 label 插槽。 */\n label: { type: String, default: undefined },\n value: { type: [String, Array] as PropType<string | string[] | null>, default: undefined },\n defaultValue: { type: [String, Array] as PropType<string | string[] | null>, default: undefined },\n multiple: Boolean,\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n disabled: Boolean,\n /** 只读:浮层照常展开与浏览,但选中值改不动、也清不掉。 */\n readOnly: { type: Boolean, default: undefined },\n /** 自动渲染树里是否带清空按钮;手写部件不看它,写了节点即可清。 */\n clearable: Boolean,\n invalid: { type: Boolean, default: undefined },\n required: Boolean,\n name: { type: String, default: undefined },\n translations: { type: Object as PropType<SelectProps['translations']>, default: undefined },\n maxTagCount: { type: Number, default: undefined },\n placeholder: { type: String, default: undefined },\n placement: { type: String as PropType<Placement>, default: undefined },\n offset: { type: Number, default: undefined },\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction>, default: undefined },\n variant: { type: String as PropType<ControlVariant>, default: undefined },\n tone: { type: String as PropType<Tone>, default: undefined },\n size: { type: String as PropType<Size>, default: undefined },\n },\n // *-change 携带 details 对象,update:* 携带裸值。\n // 校验函数恒真,只声明载荷类型:'update:value' 是 string[],单选也是长度 1 的数组而非裸串。\n emits: {\n 'value-change': (_details: SelectValueChangeDetails) => true,\n 'open-change': (_details: SelectOpenChangeDetails) => true,\n 'update:value': (_value: string[]) => true,\n 'update:open': (_open: boolean) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: SelectRootSlotProps) => VNode[]\n label?: () => VNode[]\n item?: (node: SelectNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: SelectProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyOpen: SelectProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const ctx = useSelect(withXhConfig('select', props) as SelectProps, notifyValue, notifyOpen)\n provideSelect(ctx)\n\n // 表单影子由根部件装配:空串选项打底,每个选中值一个 selected 选项,供 required 判定。\n // 选中态一律靠选项的 selected 表达,多选下 select.value 表达不了集合。\n const hiddenSelect = (): VNode => {\n const api = ctx.api.value\n const options = [h('option', { value: '' })]\n for (const [i, v] of api.value.entries())\n options.push(h('option', { value: v, selected: true }, api.valueText[i] ?? v))\n return h('select', api.getHiddenSelectProps() as Record<string, unknown>, options)\n }\n\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, [\n hiddenSelect(),\n ...(slots.default\n ? slots.default({\n open: ctx.api.value.open,\n value: ctx.api.value.value,\n displayText: ctx.api.value.displayText,\n tags: ctx.api.value.tags,\n overflowCount: ctx.api.value.overflowCount,\n setOpen: ctx.api.value.setOpen,\n setValue: ctx.api.value.setValue,\n clear: ctx.api.value.clear,\n deselect: ctx.api.value.deselect,\n }) ?? []\n : props.collection\n ? renderDefaultTree(\n ctx.api.value.collection,\n slots.label?.() ?? (props.label != null ? [props.label] : null),\n props.clearable,\n slots.item,\n )\n : []),\n ])\n },\n})\n\nexport const XhSelectLabel = defineComponent({\n name: 'XhSelectLabel',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectControl = defineComponent({\n name: 'XhSelectControl',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 盒:触发器与清空按钮在里面并排,描边、底色与聚焦环都长在它上面\n return () => h('div', ctx.api.value.getControlProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectTrigger = defineComponent({\n name: 'XhSelectTrigger',\n setup(_, { slots }) {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useSelectContext()\n return () => h('button', fieldLabel.value({\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n ...fieldWiring.value,\n }), slots.default?.())\n },\n})\n\nexport const XhSelectValueText = defineComponent({\n name: 'XhSelectValueText',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 有插槽用插槽,否则显示选中项文本或 placeholder\n return () => h(\n 'span',\n ctx.api.value.getValueTextProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.displayText,\n )\n },\n})\n\nexport const XhSelectIndicator = defineComponent({\n name: 'XhSelectIndicator',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n return () => h('span', ctx.api.value.getIndicatorProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectClearTrigger = defineComponent({\n name: 'XhSelectClearTrigger',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 节点常挂,清不了时靠 hidden 藏掉\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectTag = defineComponent({\n name: 'XhSelectTag',\n props: {\n /** 它代表哪个选中值。 */\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useSelectContext()\n provideSelectTag({ value: () => props.value })\n return () => h('span', ctx.api.value.getTagProps({ value: props.value }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectItemDeleteTrigger = defineComponent({\n name: 'XhSelectItemDeleteTrigger',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const tag = useSelectTagContext()\n return () => h('button', ctx.api.value.getItemDeleteTriggerProps({ value: tag.value() }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectPositioner = defineComponent({\n name: 'XhSelectPositioner',\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 positioner 上\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n const ctx = useSelectContext()\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => h(Teleport, { to: ctx.portalTarget.value }, [\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 XhSelectContent = defineComponent({\n name: 'XhSelectContent',\n setup(_, { slots }) {\n const ctx = useSelectContext()\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 XhSelectList = defineComponent({\n name: 'XhSelectList',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 列表框本体:条目放这里面。滚动也在这一层,底部操作区因此不随条目滚走\n return () => h('div', ctx.api.value.getListProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectFooter = defineComponent({\n name: 'XhSelectFooter',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n // 浮层底部的操作区:是 list 的兄弟,不进列表框的拥有关系,\n // 放在里面的按钮既不违反 listbox 的子节点约束,也不会被方向键与连打检索走到\n return () => h('div', ctx.api.value.getFooterProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectItem = defineComponent({\n name: 'XhSelectItem',\n props: {\n value: { type: String, required: true },\n // 缺省交给 connect 回 collection 里查,写死 false 会盖掉数据里的禁用\n disabled: { type: Boolean, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useSelectContext()\n const item = computed<SelectItemProps>(() => ({ value: props.value, disabled: props.disabled }))\n provideSelectItem({ item })\n // 本条目持有焦点时,value 变更重报高亮条目,卸载时上报条目丢失\n const itemEl = ref<HTMLElement | null>(null)\n watch(() => props.value, (next, prev) => {\n if (next === prev)\n return\n const svc = ctx.service\n if (svc.getStatus() !== 'Started')\n return\n if (itemEl.value && svc.scope.getActiveElement() === itemEl.value)\n svc.send({ type: 'ITEM.HIGHLIGHT', 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: 'ITEM.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\nexport const XhSelectItemText = defineComponent({\n name: 'XhSelectItemText',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { item } = useSelectItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSelectItemIndicator = defineComponent({\n name: 'XhSelectItemIndicator',\n setup(_, { slots }) {\n const ctx = useSelectContext()\n const { item } = useSelectItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 没写默认插槽时按 collection 铺开的整套结构,作者只交数据。\n * 与手写部件产出的 DOM 完全一致,要改结构就写默认插槽,行为不变。\n */\nfunction renderDefaultTree(\n collection: readonly SelectNodeMeta[],\n label: (VNode | string)[] | null,\n clearable: boolean,\n itemSlot?: (node: SelectNodeMeta) => VNode[],\n): VNode[] {\n const trigger = h(XhSelectTrigger, null, () => [h(XhSelectValueText), h(XhSelectIndicator)])\n return [\n ...(label ? [h(XhSelectLabel, null, () => label)] : []),\n // control 是盒:描边、底色与聚焦环都长在它上面,触发器与清空钮在里面并排。\n // 清空钮排在触发器之后(按钮不能套按钮),展开箭头是触发器里的指示符,\n // 视觉上仍是「清空在左、箭头在右」\n h(XhSelectControl, null, () => (clearable ? [trigger, h(XhSelectClearTrigger)] : [trigger])),\n h(XhSelectPositioner, null, () => [\n h(XhSelectContent, null, () => h(XhSelectList, null, () => collection.map(node =>\n h(XhSelectItem, { key: node.value, value: node.value }, () => [\n h(XhSelectItemText, null, () => itemSlot?.(node) ?? node.label),\n h(XhSelectItemIndicator),\n ]),\n ))),\n ]),\n ]\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { inject, provide } from "vue";
|
|
2
2
|
//#region src/components/side-nav/context.ts
|
|
3
|
-
const KEY = Symbol("xh-side-nav");
|
|
3
|
+
const KEY = Symbol.for("xh-side-nav");
|
|
4
4
|
function provideSideNav(ctx) {
|
|
5
5
|
provide(KEY, ctx);
|
|
6
6
|
}
|
|
@@ -10,7 +10,7 @@ function useSideNavContext() {
|
|
|
10
10
|
return ctx;
|
|
11
11
|
}
|
|
12
12
|
/** 分支上下文:子部件从中取所属分支的 value,不必逐个再声明。 */
|
|
13
|
-
const NODE_KEY = Symbol("xh-side-nav-node");
|
|
13
|
+
const NODE_KEY = Symbol.for("xh-side-nav-node");
|
|
14
14
|
function provideSideNavNode(node) {
|
|
15
15
|
provide(NODE_KEY, node);
|
|
16
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/side-nav/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { SideNavContext } from './use-side-nav'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<SideNavContext> = Symbol('xh-side-nav')\n\nexport function provideSideNav(ctx: SideNavContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSideNavContext(): SideNavContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] SideNav 部件必须用在 XhSideNavRoot 内')\n return ctx\n}\n\n/** 分支上下文:子部件从中取所属分支的 value,不必逐个再声明。 */\nconst NODE_KEY: InjectionKey<{ value: string }> = Symbol('xh-side-nav-node')\n\nexport function provideSideNavNode(node: { value: string }): void {\n provide(NODE_KEY, node)\n}\n\nexport function useSideNavNodeContext(): { value: string } {\n const node = inject(NODE_KEY, null)\n if (!node)\n throw new Error('[xh] SideNav 分支部件必须用在 XhSideNavBranch 内')\n return node\n}\n"],"mappings":";;AAIA,MAAM,MAAoC,OAAO,aAAa;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/side-nav/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { SideNavContext } from './use-side-nav'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<SideNavContext> = Symbol.for('xh-side-nav')\n\nexport function provideSideNav(ctx: SideNavContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSideNavContext(): SideNavContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] SideNav 部件必须用在 XhSideNavRoot 内')\n return ctx\n}\n\n/** 分支上下文:子部件从中取所属分支的 value,不必逐个再声明。 */\nconst NODE_KEY: InjectionKey<{ value: string }> = Symbol.for('xh-side-nav-node')\n\nexport function provideSideNavNode(node: { value: string }): void {\n provide(NODE_KEY, node)\n}\n\nexport function useSideNavNodeContext(): { value: string } {\n const node = inject(NODE_KEY, null)\n if (!node)\n throw new Error('[xh] SideNav 分支部件必须用在 XhSideNavBranch 内')\n return node\n}\n"],"mappings":";;AAIA,MAAM,MAAoC,OAAO,IAAI,aAAa;AAElE,SAAgB,eAAe,KAA2B;CACxD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,oBAAoC;CAClD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,qCAAqC;CACvD,OAAO;AACT;;AAGA,MAAM,WAA4C,OAAO,IAAI,kBAAkB;AAE/E,SAAgB,mBAAmB,MAA+B;CAChE,QAAQ,UAAU,IAAI;AACxB;AAEA,SAAgB,wBAA2C;CACzD,MAAM,OAAO,OAAO,UAAU,IAAI;CAClC,IAAI,CAAC,MACH,MAAM,IAAI,MAAM,yCAAyC;CAC3D,OAAO;AACT"}
|
|
@@ -113,8 +113,8 @@ declare const XhSideNavRoot: import("vue").DefineComponent<import("vue").Extract
|
|
|
113
113
|
accordion: boolean;
|
|
114
114
|
loop: boolean;
|
|
115
115
|
expandedValue: string[];
|
|
116
|
-
defaultExpandedValue: string[];
|
|
117
116
|
collapsed: boolean;
|
|
117
|
+
defaultExpandedValue: string[];
|
|
118
118
|
collapsedPopout: boolean;
|
|
119
119
|
}, SlotsType<{
|
|
120
120
|
default?: (props: SideNavRootSlotProps) => VNode[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/signature-pad/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { SignaturePadContext } from './use-signature-pad'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<SignaturePadContext> = Symbol('xh-signature-pad')\n\nexport function provideSignaturePad(ctx: SignaturePadContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSignaturePadContext(): SignaturePadContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] SignaturePad 部件必须用在 XhSignaturePadRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAyC,OAAO,kBAAkB;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/signature-pad/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { SignaturePadContext } from './use-signature-pad'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<SignaturePadContext> = Symbol.for('xh-signature-pad')\n\nexport function provideSignaturePad(ctx: SignaturePadContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSignaturePadContext(): SignaturePadContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] SignaturePad 部件必须用在 XhSignaturePadRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAyC,OAAO,IAAI,kBAAkB;AAE5E,SAAgB,oBAAoB,KAAgC;CAClE,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,yBAA8C;CAC5D,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,+CAA+C;CACjE,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/skeleton/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { SkeletonContext } from './use-skeleton'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<SkeletonContext> = Symbol('xh-skeleton')\n\nexport function provideSkeleton(ctx: SkeletonContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSkeletonContext(): SkeletonContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Skeleton 部件必须用在 XhSkeletonRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAqC,OAAO,aAAa;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/skeleton/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { SkeletonContext } from './use-skeleton'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<SkeletonContext> = Symbol.for('xh-skeleton')\n\nexport function provideSkeleton(ctx: SkeletonContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSkeletonContext(): SkeletonContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Skeleton 部件必须用在 XhSkeletonRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAqC,OAAO,IAAI,aAAa;AAEnE,SAAgB,gBAAgB,KAA4B;CAC1D,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,qBAAsC;CACpD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,uCAAuC;CACzD,OAAO;AACT"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { inject, provide } from "vue";
|
|
2
2
|
//#region src/components/slider/context.ts
|
|
3
|
-
const KEY = Symbol("xh-slider");
|
|
4
|
-
const THUMB_KEY = Symbol("xh-slider-thumb");
|
|
3
|
+
const KEY = Symbol.for("xh-slider");
|
|
4
|
+
const THUMB_KEY = Symbol.for("xh-slider-thumb");
|
|
5
5
|
function provideSlider(ctx) {
|
|
6
6
|
provide(KEY, ctx);
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/slider/context.ts"],"sourcesContent":["import type { ComputedRef, InjectionKey } from 'vue'\nimport type { SliderContext } from './use-slider'\nimport { inject, provide } from 'vue'\n\n/** 拇指自报的下标,供它内部的隐藏输入复用同一份声明。 */\nexport interface SliderThumbContext {\n index: ComputedRef<number>\n}\n\nconst KEY: InjectionKey<SliderContext> = Symbol('xh-slider')\nconst THUMB_KEY: InjectionKey<SliderThumbContext> = Symbol('xh-slider-thumb')\n\nexport function provideSlider(ctx: SliderContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSliderContext(): SliderContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Slider 部件必须用在 XhSliderRoot 内')\n return ctx\n}\n\nexport function provideSliderThumb(ctx: SliderThumbContext): void {\n provide(THUMB_KEY, ctx)\n}\n\nexport function useSliderThumbContext(): SliderThumbContext {\n const ctx = inject(THUMB_KEY, null)\n if (!ctx)\n throw new Error('[xh] Slider 隐藏输入必须用在 XhSliderThumb 内')\n return ctx\n}\n"],"mappings":";;AASA,MAAM,MAAmC,OAAO,WAAW;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/slider/context.ts"],"sourcesContent":["import type { ComputedRef, InjectionKey } from 'vue'\nimport type { SliderContext } from './use-slider'\nimport { inject, provide } from 'vue'\n\n/** 拇指自报的下标,供它内部的隐藏输入复用同一份声明。 */\nexport interface SliderThumbContext {\n index: ComputedRef<number>\n}\n\nconst KEY: InjectionKey<SliderContext> = Symbol.for('xh-slider')\nconst THUMB_KEY: InjectionKey<SliderThumbContext> = Symbol.for('xh-slider-thumb')\n\nexport function provideSlider(ctx: SliderContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSliderContext(): SliderContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Slider 部件必须用在 XhSliderRoot 内')\n return ctx\n}\n\nexport function provideSliderThumb(ctx: SliderThumbContext): void {\n provide(THUMB_KEY, ctx)\n}\n\nexport function useSliderThumbContext(): SliderThumbContext {\n const ctx = inject(THUMB_KEY, null)\n if (!ctx)\n throw new Error('[xh] Slider 隐藏输入必须用在 XhSliderThumb 内')\n return ctx\n}\n"],"mappings":";;AASA,MAAM,MAAmC,OAAO,IAAI,WAAW;AAC/D,MAAM,YAA8C,OAAO,IAAI,iBAAiB;AAEhF,SAAgB,cAAc,KAA0B;CACtD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,mBAAkC;CAChD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,mCAAmC;CACrD,OAAO;AACT;AAEA,SAAgB,mBAAmB,KAA+B;CAChE,QAAQ,WAAW,GAAG;AACxB;AAEA,SAAgB,wBAA4C;CAC1D,MAAM,MAAM,OAAO,WAAW,IAAI;CAClC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,sCAAsC;CACxD,OAAO;AACT"}
|
|
@@ -151,12 +151,12 @@ declare const XhSliderRoot: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
151
151
|
}>, {
|
|
152
152
|
name: string;
|
|
153
153
|
invalid: boolean;
|
|
154
|
-
size: Size;
|
|
155
154
|
value: number[];
|
|
156
155
|
defaultValue: number[];
|
|
157
156
|
orientation: Orientation;
|
|
158
157
|
dir: Direction;
|
|
159
158
|
tone: Tone;
|
|
159
|
+
size: Size;
|
|
160
160
|
disabled: boolean;
|
|
161
161
|
max: number;
|
|
162
162
|
readOnly: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/space/context.ts"],"sourcesContent":["import type { SpaceApi } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\nexport interface SpaceContext {\n api: ComputedRef<SpaceApi>\n}\n\nconst KEY: InjectionKey<SpaceContext> = Symbol('xh-space')\n\nexport function provideSpace(ctx: SpaceContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSpaceContext(): SpaceContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Space 部件必须用在 XhSpace 内')\n return ctx\n}\n"],"mappings":";;AAQA,MAAM,MAAkC,OAAO,UAAU;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/space/context.ts"],"sourcesContent":["import type { SpaceApi } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\nexport interface SpaceContext {\n api: ComputedRef<SpaceApi>\n}\n\nconst KEY: InjectionKey<SpaceContext> = Symbol.for('xh-space')\n\nexport function provideSpace(ctx: SpaceContext): void {\n provide(KEY, ctx)\n}\n\nexport function useSpaceContext(): SpaceContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Space 部件必须用在 XhSpace 内')\n return ctx\n}\n"],"mappings":";;AAQA,MAAM,MAAkC,OAAO,IAAI,UAAU;AAE7D,SAAgB,aAAa,KAAyB;CACpD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,kBAAgC;CAC9C,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,6BAA6B;CAC/C,OAAO;AACT"}
|
|
@@ -9,6 +9,10 @@ declare const XhSpaceSplit: import("vue").DefineComponent<{}, () => VNode<import
|
|
|
9
9
|
[key: string]: any;
|
|
10
10
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
11
11
|
declare const XhSpace: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
12
|
+
orientation: {
|
|
13
|
+
type: PropType<SpaceProps["orientation"]>;
|
|
14
|
+
default: undefined;
|
|
15
|
+
};
|
|
12
16
|
direction: {
|
|
13
17
|
type: PropType<SpaceProps["direction"]>;
|
|
14
18
|
default: undefined;
|
|
@@ -30,6 +34,10 @@ declare const XhSpace: import("vue").DefineComponent<import("vue").ExtractPropTy
|
|
|
30
34
|
}>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
31
35
|
[key: string]: any;
|
|
32
36
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
37
|
+
orientation: {
|
|
38
|
+
type: PropType<SpaceProps["orientation"]>;
|
|
39
|
+
default: undefined;
|
|
40
|
+
};
|
|
33
41
|
direction: {
|
|
34
42
|
type: PropType<SpaceProps["direction"]>;
|
|
35
43
|
default: undefined;
|
|
@@ -49,6 +57,7 @@ declare const XhSpace: import("vue").DefineComponent<import("vue").ExtractPropTy
|
|
|
49
57
|
wrap: BooleanConstructor;
|
|
50
58
|
inline: BooleanConstructor;
|
|
51
59
|
}>> & Readonly<{}>, {
|
|
60
|
+
orientation: import("@xihan-ui/kernel").Orientation | undefined;
|
|
52
61
|
wrap: boolean;
|
|
53
62
|
direction: import("@xihan-ui/kernel").Orientation | undefined;
|
|
54
63
|
align: import("@xihan-ui/headless").SpaceAlign | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"space.d.ts","names":[],"sources":["../../../src/components/space/space.ts"],"mappings":";;;;;;;cAWa,4BAAY,0BAAA,oBAAA,4BAAA;;8BAMvB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAyCW,uBAAO,8BAAA;;
|
|
1
|
+
{"version":3,"file":"space.d.ts","names":[],"sources":["../../../src/components/space/space.ts"],"mappings":";;;;;;;cAWa,4BAAY,0BAAA,oBAAA,4BAAA;;8BAMvB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAyCW,uBAAO,8BAAA;;IAIe,MAAA,SAAS;;;;IACX,MAAA,SAAS;;;;IACf,MAAA,SAAS;;;;IACP,MAAA,SAAS;;;;IACP,MAAA,SAAS;;;;;;;;;IAJL,MAAA,SAAS;;;;IACX,MAAA,SAAS;;;;IACf,MAAA,SAAS;;;;IACP,MAAA,SAAS;;;;IACP,MAAA,SAAS;;;;;;;;;;;;;;;EAM1B,gBAAM;;EAER,cAAM;kCAYhB"}
|