@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
|
@@ -1,49 +1,79 @@
|
|
|
1
1
|
import { vueNormalize } from "../../runtime/normalize-props.js";
|
|
2
2
|
import { withXhConfig } from "../../config/config.js";
|
|
3
|
-
import {
|
|
3
|
+
import { provideBadge, useBadgeContext } from "./context.js";
|
|
4
|
+
import { computed, defineComponent, h } from "vue";
|
|
4
5
|
import { connectBadge } from "@xihan-ui/headless";
|
|
5
6
|
//#region src/components/badge/badge.ts
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
default: void 0
|
|
26
|
-
},
|
|
27
|
-
/** 只出一个点,不出数字。 */
|
|
28
|
-
dot: {
|
|
29
|
-
type: Boolean,
|
|
30
|
-
default: void 0
|
|
31
|
-
},
|
|
32
|
-
/** 读屏怎么念这枚徽标,例如「3 条未读」。 */
|
|
33
|
-
label: {
|
|
34
|
-
type: String,
|
|
35
|
-
default: void 0
|
|
36
|
-
}
|
|
7
|
+
const badgeProps = {
|
|
8
|
+
tone: String,
|
|
9
|
+
size: String,
|
|
10
|
+
/** 挂在哪个角上,默认 top-end。 */
|
|
11
|
+
placement: String,
|
|
12
|
+
/** 计数:给了它角标就自己出数字,超过 max 写成「max+」。 */
|
|
13
|
+
count: {
|
|
14
|
+
type: Number,
|
|
15
|
+
default: void 0
|
|
16
|
+
},
|
|
17
|
+
/** 计数上限,默认 99。 */
|
|
18
|
+
max: {
|
|
19
|
+
type: Number,
|
|
20
|
+
default: void 0
|
|
21
|
+
},
|
|
22
|
+
/** 计数为 0 时是否照样显示,默认不显示。 */
|
|
23
|
+
showZero: {
|
|
24
|
+
type: Boolean,
|
|
25
|
+
default: void 0
|
|
37
26
|
},
|
|
27
|
+
/** 只出一个点,不出数字。 */
|
|
28
|
+
dot: {
|
|
29
|
+
type: Boolean,
|
|
30
|
+
default: void 0
|
|
31
|
+
},
|
|
32
|
+
/** 读屏怎么念这枚角标,例如「3 条未读」。 */
|
|
33
|
+
label: {
|
|
34
|
+
type: String,
|
|
35
|
+
default: void 0
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* 锚点:被标记的那个东西(按钮、头像、标签页)写进默认插槽,角标另起一层贴在它的角上。
|
|
40
|
+
*
|
|
41
|
+
* 角标是挂在别的元素角上的一枚标记,不是可以单独摆的药丸——
|
|
42
|
+
* 行内的状态药丸请用 tag。
|
|
43
|
+
*/
|
|
44
|
+
const XhBadgeRoot = defineComponent({
|
|
45
|
+
name: "XhBadgeRoot",
|
|
46
|
+
props: badgeProps,
|
|
38
47
|
setup(props, { slots }) {
|
|
39
48
|
const configured = withXhConfig("badge", props);
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
49
|
+
const api = computed(() => connectBadge(configured, vueNormalize));
|
|
50
|
+
provideBadge({ api });
|
|
51
|
+
return () => h("span", api.value.getRootProps(), slots.default?.());
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
/** 角标本身,绝对定位在锚点的某个角上。不给内容就用算好的计数文本。 */
|
|
55
|
+
const XhBadgeIndicator = defineComponent({
|
|
56
|
+
name: "XhBadgeIndicator",
|
|
57
|
+
slots: Object,
|
|
58
|
+
setup(_, { slots }) {
|
|
59
|
+
const ctx = useBadgeContext();
|
|
60
|
+
return () => h("span", ctx.api.value.getIndicatorProps(), slots.default?.({ text: ctx.api.value.text }) ?? ctx.api.value.text);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
/**
|
|
64
|
+
* 一步到位的写法:默认插槽放被标记的东西,角标自动跟上。
|
|
65
|
+
*
|
|
66
|
+
* 要往角标里塞自定义内容(比如一枚小图标)时改用 XhBadgeRoot + XhBadgeIndicator。
|
|
67
|
+
*/
|
|
68
|
+
const XhBadge = defineComponent({
|
|
69
|
+
name: "XhBadge",
|
|
70
|
+
props: badgeProps,
|
|
71
|
+
slots: Object,
|
|
72
|
+
setup(props, { slots }) {
|
|
73
|
+
return () => h(XhBadgeRoot, props, () => [slots.default?.(), h(XhBadgeIndicator)]);
|
|
44
74
|
}
|
|
45
75
|
});
|
|
46
76
|
//#endregion
|
|
47
|
-
export { XhBadge };
|
|
77
|
+
export { XhBadge, XhBadgeIndicator, XhBadgeRoot };
|
|
48
78
|
|
|
49
79
|
//# sourceMappingURL=badge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"badge.js","names":[],"sources":["../../../src/components/badge/badge.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"badge.js","names":[],"sources":["../../../src/components/badge/badge.ts"],"sourcesContent":["import type { BadgePlacement, BadgeProps } from '@xihan-ui/headless'\nimport type { Size, Tone } from '@xihan-ui/kernel'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport { connectBadge } from '@xihan-ui/headless'\nimport { computed, defineComponent, h } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { provideBadge, useBadgeContext } from './context'\n\nconst badgeProps = {\n tone: String as PropType<Tone>,\n size: String as PropType<Size>,\n /** 挂在哪个角上,默认 top-end。 */\n placement: String as PropType<BadgePlacement>,\n /** 计数:给了它角标就自己出数字,超过 max 写成「max+」。 */\n count: { type: Number, default: undefined },\n /** 计数上限,默认 99。 */\n max: { type: Number, default: undefined },\n /** 计数为 0 时是否照样显示,默认不显示。 */\n showZero: { type: Boolean, default: undefined },\n /** 只出一个点,不出数字。 */\n dot: { type: Boolean, default: undefined },\n /** 读屏怎么念这枚角标,例如「3 条未读」。 */\n label: { type: String, default: undefined },\n} as const\n\n/**\n * 锚点:被标记的那个东西(按钮、头像、标签页)写进默认插槽,角标另起一层贴在它的角上。\n *\n * 角标是挂在别的元素角上的一枚标记,不是可以单独摆的药丸——\n * 行内的状态药丸请用 tag。\n */\nexport const XhBadgeRoot = defineComponent({\n name: 'XhBadgeRoot',\n props: badgeProps,\n setup(props, { slots }) {\n // withXhConfig 只能在 setup 期调,连接层在渲染期读这份代理\n const configured = withXhConfig('badge', props)\n const api = computed(() => connectBadge(configured as BadgeProps, vueNormalize))\n provideBadge({ api })\n return () => h('span', api.value.getRootProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 角标本身,绝对定位在锚点的某个角上。不给内容就用算好的计数文本。 */\nexport const XhBadgeIndicator = defineComponent({\n name: 'XhBadgeIndicator',\n slots: Object as SlotsType<{ default?: (props: { text: string }) => VNode[] }>,\n setup(_, { slots }) {\n const ctx = useBadgeContext()\n return () => h(\n 'span',\n ctx.api.value.getIndicatorProps() as Record<string, unknown>,\n slots.default?.({ text: ctx.api.value.text }) ?? ctx.api.value.text,\n )\n },\n})\n\n/**\n * 一步到位的写法:默认插槽放被标记的东西,角标自动跟上。\n *\n * 要往角标里塞自定义内容(比如一枚小图标)时改用 XhBadgeRoot + XhBadgeIndicator。\n */\nexport const XhBadge = defineComponent({\n name: 'XhBadge',\n props: badgeProps,\n slots: Object as SlotsType<{ default?: () => VNode[] }>,\n setup(props, { slots }) {\n return () => h(XhBadgeRoot, props, () => [slots.default?.(), h(XhBadgeIndicator)])\n },\n})\n"],"mappings":";;;;;;AASA,MAAM,aAAa;CACjB,MAAM;CACN,MAAM;;CAEN,WAAW;;CAEX,OAAO;EAAE,MAAM;EAAQ,SAAS,KAAA;CAAU;;CAE1C,KAAK;EAAE,MAAM;EAAQ,SAAS,KAAA;CAAU;;CAExC,UAAU;EAAE,MAAM;EAAS,SAAS,KAAA;CAAU;;CAE9C,KAAK;EAAE,MAAM;EAAS,SAAS,KAAA;CAAU;;CAEzC,OAAO;EAAE,MAAM;EAAQ,SAAS,KAAA;CAAU;AAC5C;;;;;;;AAQA,MAAa,cAAc,gBAAgB;CACzC,MAAM;CACN,OAAO;CACP,MAAM,OAAO,EAAE,SAAS;EAEtB,MAAM,aAAa,aAAa,SAAS,KAAK;EAC9C,MAAM,MAAM,eAAe,aAAa,YAA0B,YAAY,CAAC;EAC/E,aAAa,EAAE,IAAI,CAAC;EACpB,aAAa,EAAE,QAAQ,IAAI,MAAM,aAAa,GAA8B,MAAM,UAAU,CAAC;CAC/F;AACF,CAAC;;AAGD,MAAa,mBAAmB,gBAAgB;CAC9C,MAAM;CACN,OAAO;CACP,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,gBAAgB;EAC5B,aAAa,EACX,QACA,IAAI,IAAI,MAAM,kBAAkB,GAChC,MAAM,UAAU,EAAE,MAAM,IAAI,IAAI,MAAM,KAAK,CAAC,KAAK,IAAI,IAAI,MAAM,IACjE;CACF;AACF,CAAC;;;;;;AAOD,MAAa,UAAU,gBAAgB;CACrC,MAAM;CACN,OAAO;CACP,OAAO;CACP,MAAM,OAAO,EAAE,SAAS;EACtB,aAAa,EAAE,aAAa,aAAa,CAAC,MAAM,UAAU,GAAG,EAAE,gBAAgB,CAAC,CAAC;CACnF;AACF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { inject, provide } from "vue";
|
|
2
|
+
//#region src/components/badge/context.ts
|
|
3
|
+
const KEY = Symbol.for("xh-badge");
|
|
4
|
+
function provideBadge(ctx) {
|
|
5
|
+
provide(KEY, ctx);
|
|
6
|
+
}
|
|
7
|
+
function useBadgeContext() {
|
|
8
|
+
const ctx = inject(KEY, null);
|
|
9
|
+
if (!ctx) throw new Error("[xh] Badge 部件必须用在 XhBadgeRoot 内");
|
|
10
|
+
return ctx;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { provideBadge, useBadgeContext };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/badge/context.ts"],"sourcesContent":["import type { BadgeApi } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\nexport interface BadgeContext {\n api: ComputedRef<BadgeApi>\n}\n\nconst KEY: InjectionKey<BadgeContext> = Symbol.for('xh-badge')\n\nexport function provideBadge(ctx: BadgeContext): void {\n provide(KEY, ctx)\n}\n\nexport function useBadgeContext(): BadgeContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Badge 部件必须用在 XhBadgeRoot 内')\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,iCAAiC;CACnD,OAAO;AACT"}
|
|
@@ -40,9 +40,9 @@ declare const XhBreadcrumbRoot: import("vue").DefineComponent<import("vue").Extr
|
|
|
40
40
|
default: undefined;
|
|
41
41
|
};
|
|
42
42
|
}>> & Readonly<{}>, {
|
|
43
|
-
size: Size;
|
|
44
43
|
dir: Direction;
|
|
45
44
|
tone: Tone;
|
|
45
|
+
size: Size;
|
|
46
46
|
translations: Partial<BreadcrumbTranslations>;
|
|
47
47
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
48
48
|
declare const XhBreadcrumbList: import("vue").DefineComponent<{}, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/breadcrumb/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { BreadcrumbContext } from './use-breadcrumb'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<BreadcrumbContext> = Symbol('xh-breadcrumb')\n\nexport function provideBreadcrumb(ctx: BreadcrumbContext): void {\n provide(KEY, ctx)\n}\n\nexport function useBreadcrumbContext(): BreadcrumbContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Breadcrumb 部件必须用在 XhBreadcrumbRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAuC,OAAO,eAAe;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/breadcrumb/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { BreadcrumbContext } from './use-breadcrumb'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<BreadcrumbContext> = Symbol.for('xh-breadcrumb')\n\nexport function provideBreadcrumb(ctx: BreadcrumbContext): void {\n provide(KEY, ctx)\n}\n\nexport function useBreadcrumbContext(): BreadcrumbContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Breadcrumb 部件必须用在 XhBreadcrumbRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAuC,OAAO,IAAI,eAAe;AAEvE,SAAgB,kBAAkB,KAA8B;CAC9D,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,uBAA0C;CACxD,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,2CAA2C;CAC7D,OAAO;AACT"}
|
|
@@ -38,9 +38,9 @@ declare const XhButtonGroup: import("vue").DefineComponent<import("vue").Extract
|
|
|
38
38
|
default: undefined;
|
|
39
39
|
};
|
|
40
40
|
}>> & Readonly<{}>, {
|
|
41
|
-
size: Size;
|
|
42
41
|
orientation: "horizontal" | "vertical";
|
|
43
42
|
tone: Tone;
|
|
43
|
+
size: Size;
|
|
44
44
|
variant: ActionVariant;
|
|
45
45
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
46
46
|
//#endregion
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { inject, provide } from "vue";
|
|
2
2
|
//#region src/components/calendar/context.ts
|
|
3
|
-
const KEY = Symbol("xh-calendar");
|
|
4
|
-
const CELL_KEY = Symbol("xh-calendar-cell");
|
|
3
|
+
const KEY = Symbol.for("xh-calendar");
|
|
4
|
+
const CELL_KEY = Symbol.for("xh-calendar-cell");
|
|
5
5
|
function provideCalendar(ctx) {
|
|
6
6
|
provide(KEY, ctx);
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/calendar/context.ts"],"sourcesContent":["import type { CalendarCellProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { CalendarContext } from './use-calendar'\nimport { inject, provide } from 'vue'\n\n/** 格子自报的那一天,供 cell-trigger 复用同一份声明(作者只写一次 value)。 */\nexport interface CalendarCellContext {\n cell: ComputedRef<CalendarCellProps>\n}\n\nconst KEY: InjectionKey<CalendarContext> = Symbol('xh-calendar')\nconst CELL_KEY: InjectionKey<CalendarCellContext> = Symbol('xh-calendar-cell')\n\nexport function provideCalendar(ctx: CalendarContext): void {\n provide(KEY, ctx)\n}\n\nexport function useCalendarContext(): CalendarContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Calendar 部件必须用在 XhCalendarRoot 内')\n return ctx\n}\n\nexport function provideCalendarCell(ctx: CalendarCellContext): void {\n provide(CELL_KEY, ctx)\n}\n\nexport function useCalendarCellContext(): CalendarCellContext {\n const ctx = inject(CELL_KEY, null)\n if (!ctx)\n throw new Error('[xh] Calendar 日期触发器必须用在 XhCalendarCell 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAAqC,OAAO,aAAa;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/calendar/context.ts"],"sourcesContent":["import type { CalendarCellProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { CalendarContext } from './use-calendar'\nimport { inject, provide } from 'vue'\n\n/** 格子自报的那一天,供 cell-trigger 复用同一份声明(作者只写一次 value)。 */\nexport interface CalendarCellContext {\n cell: ComputedRef<CalendarCellProps>\n}\n\nconst KEY: InjectionKey<CalendarContext> = Symbol.for('xh-calendar')\nconst CELL_KEY: InjectionKey<CalendarCellContext> = Symbol.for('xh-calendar-cell')\n\nexport function provideCalendar(ctx: CalendarContext): void {\n provide(KEY, ctx)\n}\n\nexport function useCalendarContext(): CalendarContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Calendar 部件必须用在 XhCalendarRoot 内')\n return ctx\n}\n\nexport function provideCalendarCell(ctx: CalendarCellContext): void {\n provide(CELL_KEY, ctx)\n}\n\nexport function useCalendarCellContext(): CalendarCellContext {\n const ctx = inject(CELL_KEY, null)\n if (!ctx)\n throw new Error('[xh] Calendar 日期触发器必须用在 XhCalendarCell 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAAqC,OAAO,IAAI,aAAa;AACnE,MAAM,WAA8C,OAAO,IAAI,kBAAkB;AAEjF,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;AAEA,SAAgB,oBAAoB,KAAgC;CAClE,QAAQ,UAAU,GAAG;AACvB;AAEA,SAAgB,yBAA8C;CAC5D,MAAM,MAAM,OAAO,UAAU,IAAI;CACjC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,0CAA0C;CAC5D,OAAO;AACT"}
|
|
@@ -28,8 +28,8 @@ declare const XhCardRoot: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
28
28
|
segmented: BooleanConstructor;
|
|
29
29
|
}>> & Readonly<{}>, {
|
|
30
30
|
size: Size;
|
|
31
|
-
segmented: boolean;
|
|
32
31
|
variant: CardVariant;
|
|
32
|
+
segmented: boolean;
|
|
33
33
|
hoverable: boolean;
|
|
34
34
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
35
35
|
declare const XhCardCover: import("vue").DefineComponent<{}, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/card/context.ts"],"sourcesContent":["import type { CardApi } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\nexport interface CardContext {\n api: ComputedRef<CardApi>\n}\n\nconst KEY: InjectionKey<CardContext> = Symbol('xh-card')\n\nexport function provideCard(ctx: CardContext): void {\n provide(KEY, ctx)\n}\n\nexport function useCardContext(): CardContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Card 部件必须用在 XhCardRoot 内')\n return ctx\n}\n"],"mappings":";;AAQA,MAAM,MAAiC,OAAO,SAAS;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/card/context.ts"],"sourcesContent":["import type { CardApi } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\nexport interface CardContext {\n api: ComputedRef<CardApi>\n}\n\nconst KEY: InjectionKey<CardContext> = Symbol.for('xh-card')\n\nexport function provideCard(ctx: CardContext): void {\n provide(KEY, ctx)\n}\n\nexport function useCardContext(): CardContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Card 部件必须用在 XhCardRoot 内')\n return ctx\n}\n"],"mappings":";;AAQA,MAAM,MAAiC,OAAO,IAAI,SAAS;AAE3D,SAAgB,YAAY,KAAwB;CAClD,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,iBAA8B;CAC5C,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,+BAA+B;CACjD,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/carousel/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { CarouselContext } from './use-carousel'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<CarouselContext> = Symbol('xh-carousel')\n\nexport function provideCarousel(ctx: CarouselContext): void {\n provide(KEY, ctx)\n}\n\nexport function useCarouselContext(): CarouselContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Carousel 部件必须用在 XhCarouselRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAqC,OAAO,aAAa;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/carousel/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { CarouselContext } from './use-carousel'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<CarouselContext> = Symbol.for('xh-carousel')\n\nexport function provideCarousel(ctx: CarouselContext): void {\n provide(KEY, ctx)\n}\n\nexport function useCarouselContext(): CarouselContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Carousel 部件必须用在 XhCarouselRoot 内')\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"}
|
|
@@ -172,20 +172,20 @@ declare const XhCascaderRoot: import("vue").DefineComponent<import("vue").Extrac
|
|
|
172
172
|
"onUpdate:open"?: ((_open: boolean) => any) | undefined;
|
|
173
173
|
}>, {
|
|
174
174
|
invalid: boolean;
|
|
175
|
-
size: Size;
|
|
176
175
|
value: CascaderValue;
|
|
177
176
|
multiple: boolean;
|
|
178
177
|
collection: CascaderNode[];
|
|
179
178
|
defaultValue: CascaderValue;
|
|
180
179
|
dir: Direction;
|
|
181
180
|
tone: Tone;
|
|
181
|
+
size: Size;
|
|
182
182
|
disabled: boolean;
|
|
183
|
+
offset: number;
|
|
184
|
+
translations: Partial<CascaderTranslations>;
|
|
183
185
|
open: boolean;
|
|
184
186
|
defaultOpen: boolean;
|
|
185
|
-
translations: Partial<CascaderTranslations>;
|
|
186
|
-
offset: number;
|
|
187
|
-
separator: string;
|
|
188
187
|
variant: ControlVariant;
|
|
188
|
+
separator: string;
|
|
189
189
|
readOnly: boolean;
|
|
190
190
|
loop: boolean;
|
|
191
191
|
checkedStrategy: import("@xihan-ui/behavior").CascadeStrategy | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cascader.d.ts","names":[],"sources":["../../../src/components/cascader/cascader.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"cascader.d.ts","names":[],"sources":["../../../src/components/cascader/cascader.ts"],"mappings":";;;;;KAqBK,gBAAgB;;KAiCT,wBAAwB,KAClC;cAqBW,8BAAc,8BAAA;;IAIM,MAAA,SAAS;;;;IACd,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;;;;;;IAGP,MAAA,SAAS;;;;;;;;;;;IAKP,MAAA,SAAS;;;;;;;IAIZ,MAAA,SAAS,QAAQ;;;;IACtB,MAAA,SAAS;;;;IACZ,MAAA,SAAS;;;;IACT,MAAA,SAAS;;;;;;;;;;;;IAGJ,MAAA,SAAS;;;;;;;;;;;;IAGf,MAAA,SAAS;;;;;;EAIL,iBAAA,UAAA,UAAU;EACX,gBAAA,UAAA,UAAU;EACX,iBAAA,QAAA,UAAU;EACZ,gBAAA,OAAA,UAAU;;;IA9BJ,MAAA,SAAS;;;;IACd,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;;;;;;IAGP,MAAA,SAAS;;;;;;;;;;;IAKP,MAAA,SAAS;;;;;;;IAIZ,MAAA,SAAS,QAAQ;;;;IACtB,MAAA,SAAS;;;;IACZ,MAAA,SAAS;;;;IACT,MAAA,SAAS;;;;;;;;;;;;IAGJ,MAAA,SAAS;;;;;;;;;;;;IAGf,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUtB,WAAC,OAAO,0BAA0B;kCAuC9C;cAEW,+BAAe,0BAAA,oBAAA,4BAAA;;8BAM1B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,iCAAiB,0BAAA,oBAAA,4BAAA;;8BAO5B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,iCAAiB,0BAAA,oBAAA,4BAAA;;8BAc5B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAW9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAM9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAMjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,oCAAoB,0BAAA,oBAAA,4BAAA;;8BAsB/B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,iCAAiB,0BAAA,oBAAA,4BAAA;;8BAwB5B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,+BAAe,0BAAA,oBAAA,4BAAA;;8BAO1B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;UAGe;EACf,QAAQ;;cAGG,oCAAoB,0BAAA,oBAAA,4BAAA;;;EAGtB,QAAC,OAAO,oCAAoC;kCAarD;cAEW,gCAAgB,8BAAA;;IAIU,MAAA;;;;;;;IAAA,MAAA;;;MAWrC,oDAAA;cAEW,8BAAc,8BAAA;;;;;;;;;;;;MAiBzB,oDAAA;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAO7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAOlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { withXhConfig } from "../../config/config.js";
|
|
2
|
+
import { useScrollbars } from "../../runtime/use-scrollbars.js";
|
|
3
|
+
import { useFieldLabelWiring, useFieldStateWiring } from "../field/use-field-control.js";
|
|
2
4
|
import { provideCascader, provideCascaderItem, useCascaderContext, useCascaderItemContext } from "./context.js";
|
|
3
5
|
import { useCascader } from "./use-cascader.js";
|
|
4
6
|
import { Teleport, computed, defineComponent, h, mergeProps, onBeforeUnmount, ref, watch } from "vue";
|
|
@@ -162,13 +164,16 @@ const XhCascaderControl = defineComponent({
|
|
|
162
164
|
const XhCascaderTrigger = defineComponent({
|
|
163
165
|
name: "XhCascaderTrigger",
|
|
164
166
|
setup(_, { slots }) {
|
|
167
|
+
const fieldWiring = useFieldStateWiring();
|
|
168
|
+
const fieldLabel = useFieldLabelWiring();
|
|
165
169
|
const ctx = useCascaderContext();
|
|
166
|
-
return () => h("button", {
|
|
170
|
+
return () => h("button", fieldLabel.value({
|
|
167
171
|
...ctx.api.value.getTriggerProps(),
|
|
168
172
|
ref: (el) => {
|
|
169
173
|
ctx.triggerRef.value = el;
|
|
170
|
-
}
|
|
171
|
-
|
|
174
|
+
},
|
|
175
|
+
...fieldWiring.value
|
|
176
|
+
}), slots.default?.());
|
|
172
177
|
}
|
|
173
178
|
});
|
|
174
179
|
const XhCascaderValueText = defineComponent({
|
|
@@ -197,12 +202,17 @@ const XhCascaderPositioner = defineComponent({
|
|
|
197
202
|
inheritAttrs: false,
|
|
198
203
|
setup(_, { slots, attrs }) {
|
|
199
204
|
const ctx = useCascaderContext();
|
|
205
|
+
const bars = useScrollbars({
|
|
206
|
+
scrollable: () => ctx.contentRef.value,
|
|
207
|
+
axes: ["horizontal"],
|
|
208
|
+
props: () => ({ dir: ctx.api.value.getPositionerProps().dir })
|
|
209
|
+
});
|
|
200
210
|
return () => h(Teleport, { to: ctx.portalTarget.value }, [h("div", {
|
|
201
211
|
...mergeProps(ctx.api.value.getPositionerProps(), attrs),
|
|
202
212
|
ref: (el) => {
|
|
203
213
|
ctx.positionerRef.value = el;
|
|
204
214
|
}
|
|
205
|
-
}, slots.default?.())]);
|
|
215
|
+
}, [...slots.default?.() ?? [], ...bars.render()])]);
|
|
206
216
|
}
|
|
207
217
|
});
|
|
208
218
|
const XhCascaderContent = defineComponent({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cascader.js","names":[],"sources":["../../../src/components/cascader/cascader.ts"],"sourcesContent":["import type {\n CascaderApi,\n CascaderExpandTrigger,\n CascaderItemProps,\n CascaderNode,\n CascaderSchema,\n CascaderSearchResult,\n CascaderTranslations,\n CascaderValue,\n} from '@xihan-ui/headless'\nimport type { ControlVariant, Direction, Placement, Size, Tone } from '@xihan-ui/kernel'\nimport type { PropType, Ref, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport type { CascaderContext } from './use-cascader'\nimport { computed, defineComponent, h, mergeProps, onBeforeUnmount, ref, Teleport, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { provideCascader, provideCascaderItem, useCascaderContext, useCascaderItemContext } from './context'\nimport { useCascader } from './use-cascader'\n\ntype CascaderProps = CascaderSchema['props']\n\n/** 本条目持有焦点时,value 变更重报焦点条目,卸载时上报焦点丢失 */\nfunction reportItemFocus(\n ctx: CascaderContext,\n el: Ref<HTMLElement | null>,\n value: () => string,\n): void {\n watch(value, (next, prev) => {\n if (next === prev)\n return\n const { service, api } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (!el.value || service.scope.getActiveElement() !== el.value)\n return\n // 层号回 collection 里查,条目只自报值\n const meta = api.value.levels.flatMap(level => level.items).find(item => item.value === next)\n if (meta)\n service.send({ type: 'ITEM.FOCUS', level: meta.level, value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n // 整组一起卸载时根部件先停机,此刻送事件会在 dev 下抛\n if (service.getStatus() !== 'Started')\n return\n // 按「本条目当下正持有焦点」判定,不按 value 比对\n if (el.value && service.scope.getActiveElement() === el.value)\n service.send({ type: 'ITEM.LOST' })\n })\n}\n\n/** 默认插槽的载荷:级联的展开态、选中态与列数据,以及改动它们的方法。 */\nexport type CascaderRootSlotProps = Pick<\n CascaderApi,\n | 'open'\n | 'levels'\n | 'columns'\n | 'value'\n | 'valuePath'\n | 'activePath'\n | 'focusedPath'\n | 'displayText'\n | 'canClear'\n | 'isSelected'\n | 'isIndeterminate'\n | 'isActive'\n | 'isVisible'\n | 'setOpen'\n | 'setValue'\n | 'setActivePath'\n | 'select'\n | 'clear'\n>\n\nexport const XhCascaderRoot = defineComponent({\n name: 'XhCascaderRoot',\n // 有 connect 兜底的 prop 一律 default: undefined\n props: {\n collection: { type: Array as PropType<CascaderNode[]>, default: undefined },\n value: { type: Array as PropType<CascaderValue>, default: undefined },\n defaultValue: { type: Array as PropType<CascaderValue>, default: undefined },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n expandTrigger: { type: String as PropType<CascaderExpandTrigger>, default: undefined },\n changeOnSelect: Boolean,\n multiple: Boolean,\n searchable: { type: Boolean, default: undefined },\n cascade: Boolean,\n checkedStrategy: { type: String as PropType<CascaderProps['checkedStrategy']>, default: undefined },\n disabled: Boolean,\n readOnly: Boolean,\n invalid: Boolean,\n translations: { type: Object as PropType<Partial<CascaderTranslations>>, 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 placeholder: { type: String, default: undefined },\n separator: { 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 },\n // *-change 携带 details 对象,update:* 携带裸值;选中值恒为路径数组,单选时长度 ≤ 1\n emits: {\n 'value-change': (_details: PayloadOf<CascaderProps, 'onValueChange'>) => true,\n 'open-change': (_details: PayloadOf<CascaderProps, 'onOpenChange'>) => true,\n 'update:value': (_value: PayloadOf<CascaderProps, 'onValueChange'>['value']) => true,\n 'update:open': (_open: PayloadOf<CascaderProps, 'onOpenChange'>['open']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: CascaderRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: CascaderProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyOpen: CascaderProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const ctx = useCascader(withXhConfig('cascader', props) as CascaderProps, {\n onValueChange: notifyValue,\n onOpenChange: notifyOpen,\n })\n provideCascader(ctx)\n\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n open: ctx.api.value.open,\n // levels 每层一列、层内节点各一条目,供作者渲染;columns 只读当前展开的列\n levels: ctx.api.value.levels,\n columns: ctx.api.value.columns,\n value: ctx.api.value.value,\n valuePath: ctx.api.value.valuePath,\n activePath: ctx.api.value.activePath,\n focusedPath: ctx.api.value.focusedPath,\n displayText: ctx.api.value.displayText,\n canClear: ctx.api.value.canClear,\n isSelected: ctx.api.value.isSelected,\n isIndeterminate: ctx.api.value.isIndeterminate,\n isActive: ctx.api.value.isActive,\n isVisible: ctx.api.value.isVisible,\n setOpen: ctx.api.value.setOpen,\n setValue: ctx.api.value.setValue,\n setActivePath: ctx.api.value.setActivePath,\n select: ctx.api.value.select,\n clear: ctx.api.value.clear,\n }))\n },\n})\n\nexport const XhCascaderLabel = defineComponent({\n name: 'XhCascaderLabel',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCascaderControl = defineComponent({\n name: 'XhCascaderControl',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n // 描边、底色与聚焦环所在的那一层,触发按钮与尾部动作钮在里面并排\n return () => h('div', ctx.api.value.getControlProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCascaderTrigger = defineComponent({\n name: 'XhCascaderTrigger',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\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 XhCascaderValueText = defineComponent({\n name: 'XhCascaderValueText',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\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 XhCascaderIndicator = defineComponent({\n name: 'XhCascaderIndicator',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n return () => h('span', ctx.api.value.getIndicatorProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCascaderClearTrigger = defineComponent({\n name: 'XhCascaderClearTrigger',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCascaderPositioner = defineComponent({\n name: 'XhCascaderPositioner',\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 positioner 上\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n const ctx = useCascaderContext()\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 XhCascaderContent = defineComponent({\n name: 'XhCascaderContent',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n // 收起时只隐藏不卸载;跨列的键盘导航也在这一层处理\n return () => {\n const api = ctx.api.value\n return h('div', {\n ...api.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 }, [\n slots.default?.(),\n // 空态占位常挂在列后,露不露面归连接层;empty 插槽可换内容,缺省文案按视图取无匹配或无数据\n h(\n 'div',\n api.getEmptyProps() as Record<string, unknown>,\n slots.empty ? slots.empty() : (api.searching ? api.translations.noMatch : api.translations.empty),\n ),\n ])\n }\n },\n})\n\nexport const XhCascaderInput = defineComponent({\n name: 'XhCascaderInput',\n setup() {\n const ctx = useCascaderContext()\n // 搜索框放在 content 顶部;没开 searchable 时连接层给 hidden\n return () => h('input', ctx.api.value.getInputProps() as Record<string, unknown>)\n },\n})\n\n/** item 插槽的载荷:一条搜索候选。 */\nexport interface CascaderSearchListItemSlotProps {\n result: CascaderSearchResult\n}\n\nexport const XhCascaderSearchList = defineComponent({\n name: 'XhCascaderSearchList',\n slots: Object as SlotsType<{\n item?: (props: CascaderSearchListItemSlotProps) => VNode[]\n }>,\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n // 候选整组自动铺:整条路径连缀成一行;item 插槽可换内容\n return () => h('div', ctx.api.value.getSearchListProps() as Record<string, unknown>, ctx.api.value.searchResults.map(result =>\n h(\n 'div',\n { ...ctx.api.value.getSearchItemProps({ path: result.path }) as Record<string, unknown>, key: result.key },\n slots.item ? slots.item({ result }) : result.labels.join(' / '),\n ),\n ))\n },\n})\n\nexport const XhCascaderColumn = defineComponent({\n name: 'XhCascaderColumn',\n props: {\n // 层号,兼收字符串以支持模板里写 level=\"0\"\n level: { type: [Number, String] as PropType<number | string>, required: true },\n },\n setup(props, { slots }) {\n const ctx = useCascaderContext()\n // 展开路径变短时本列收起,节点常挂不卸载\n return () => h(\n 'div',\n ctx.api.value.getColumnProps({ level: Number(props.level) }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhCascaderItem = defineComponent({\n name: 'XhCascaderItem',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useCascaderContext()\n const item = computed<CascaderItemProps>(() => ({ value: props.value }))\n provideCascaderItem({ item })\n const el = ref<HTMLElement | null>(null)\n reportItemFocus(ctx, el, () => props.value)\n return () => h(\n 'div',\n { ...ctx.api.value.getItemProps(item.value) as Record<string, unknown>, ref: el },\n slots.default?.(),\n )\n },\n})\n\nexport const XhCascaderItemText = defineComponent({\n name: 'XhCascaderItemText',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n const { item } = useCascaderItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCascaderItemIndicator = defineComponent({\n name: 'XhCascaderItemIndicator',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n const { item } = useCascaderItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cascader.js","names":[],"sources":["../../../src/components/cascader/cascader.ts"],"sourcesContent":["import type {\n CascaderApi,\n CascaderExpandTrigger,\n CascaderItemProps,\n CascaderNode,\n CascaderSchema,\n CascaderSearchResult,\n CascaderTranslations,\n CascaderValue,\n} from '@xihan-ui/headless'\nimport type { ControlVariant, Direction, Placement, Size, Tone } from '@xihan-ui/kernel'\nimport type { PropType, Ref, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport type { CascaderContext } from './use-cascader'\nimport { computed, defineComponent, h, mergeProps, onBeforeUnmount, ref, Teleport, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { useScrollbars } from '../../runtime/use-scrollbars'\nimport { useFieldLabelWiring, useFieldStateWiring } from '../field/use-field-control'\nimport { provideCascader, provideCascaderItem, useCascaderContext, useCascaderItemContext } from './context'\nimport { useCascader } from './use-cascader'\n\ntype CascaderProps = CascaderSchema['props']\n\n/** 本条目持有焦点时,value 变更重报焦点条目,卸载时上报焦点丢失 */\nfunction reportItemFocus(\n ctx: CascaderContext,\n el: Ref<HTMLElement | null>,\n value: () => string,\n): void {\n watch(value, (next, prev) => {\n if (next === prev)\n return\n const { service, api } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (!el.value || service.scope.getActiveElement() !== el.value)\n return\n // 层号回 collection 里查,条目只自报值\n const meta = api.value.levels.flatMap(level => level.items).find(item => item.value === next)\n if (meta)\n service.send({ type: 'ITEM.FOCUS', level: meta.level, value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n // 整组一起卸载时根部件先停机,此刻送事件会在 dev 下抛\n if (service.getStatus() !== 'Started')\n return\n // 按「本条目当下正持有焦点」判定,不按 value 比对\n if (el.value && service.scope.getActiveElement() === el.value)\n service.send({ type: 'ITEM.LOST' })\n })\n}\n\n/** 默认插槽的载荷:级联的展开态、选中态与列数据,以及改动它们的方法。 */\nexport type CascaderRootSlotProps = Pick<\n CascaderApi,\n | 'open'\n | 'levels'\n | 'columns'\n | 'value'\n | 'valuePath'\n | 'activePath'\n | 'focusedPath'\n | 'displayText'\n | 'canClear'\n | 'isSelected'\n | 'isIndeterminate'\n | 'isActive'\n | 'isVisible'\n | 'setOpen'\n | 'setValue'\n | 'setActivePath'\n | 'select'\n | 'clear'\n>\n\nexport const XhCascaderRoot = defineComponent({\n name: 'XhCascaderRoot',\n // 有 connect 兜底的 prop 一律 default: undefined\n props: {\n collection: { type: Array as PropType<CascaderNode[]>, default: undefined },\n value: { type: Array as PropType<CascaderValue>, default: undefined },\n defaultValue: { type: Array as PropType<CascaderValue>, default: undefined },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n expandTrigger: { type: String as PropType<CascaderExpandTrigger>, default: undefined },\n changeOnSelect: Boolean,\n multiple: Boolean,\n searchable: { type: Boolean, default: undefined },\n cascade: Boolean,\n checkedStrategy: { type: String as PropType<CascaderProps['checkedStrategy']>, default: undefined },\n disabled: Boolean,\n readOnly: Boolean,\n invalid: Boolean,\n translations: { type: Object as PropType<Partial<CascaderTranslations>>, 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 placeholder: { type: String, default: undefined },\n separator: { 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 },\n // *-change 携带 details 对象,update:* 携带裸值;选中值恒为路径数组,单选时长度 ≤ 1\n emits: {\n 'value-change': (_details: PayloadOf<CascaderProps, 'onValueChange'>) => true,\n 'open-change': (_details: PayloadOf<CascaderProps, 'onOpenChange'>) => true,\n 'update:value': (_value: PayloadOf<CascaderProps, 'onValueChange'>['value']) => true,\n 'update:open': (_open: PayloadOf<CascaderProps, 'onOpenChange'>['open']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: CascaderRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: CascaderProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyOpen: CascaderProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const ctx = useCascader(withXhConfig('cascader', props) as CascaderProps, {\n onValueChange: notifyValue,\n onOpenChange: notifyOpen,\n })\n provideCascader(ctx)\n\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n open: ctx.api.value.open,\n // levels 每层一列、层内节点各一条目,供作者渲染;columns 只读当前展开的列\n levels: ctx.api.value.levels,\n columns: ctx.api.value.columns,\n value: ctx.api.value.value,\n valuePath: ctx.api.value.valuePath,\n activePath: ctx.api.value.activePath,\n focusedPath: ctx.api.value.focusedPath,\n displayText: ctx.api.value.displayText,\n canClear: ctx.api.value.canClear,\n isSelected: ctx.api.value.isSelected,\n isIndeterminate: ctx.api.value.isIndeterminate,\n isActive: ctx.api.value.isActive,\n isVisible: ctx.api.value.isVisible,\n setOpen: ctx.api.value.setOpen,\n setValue: ctx.api.value.setValue,\n setActivePath: ctx.api.value.setActivePath,\n select: ctx.api.value.select,\n clear: ctx.api.value.clear,\n }))\n },\n})\n\nexport const XhCascaderLabel = defineComponent({\n name: 'XhCascaderLabel',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCascaderControl = defineComponent({\n name: 'XhCascaderControl',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n // 描边、底色与聚焦环所在的那一层,触发按钮与尾部动作钮在里面并排\n return () => h('div', ctx.api.value.getControlProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCascaderTrigger = defineComponent({\n name: 'XhCascaderTrigger',\n setup(_, { slots }) {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useCascaderContext()\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 XhCascaderValueText = defineComponent({\n name: 'XhCascaderValueText',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\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 XhCascaderIndicator = defineComponent({\n name: 'XhCascaderIndicator',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n return () => h('span', ctx.api.value.getIndicatorProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCascaderClearTrigger = defineComponent({\n name: 'XhCascaderClearTrigger',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCascaderPositioner = defineComponent({\n name: 'XhCascaderPositioner',\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 positioner 上\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n const ctx = useCascaderContext()\n // 列区的自绘条:与 content 同级、绝对定位不占布局,壳是这层已经 fixed 的 positioner。\n // 只摆横的:列多到放不下时整体横向滚动,纵向溢出归每一列自己。\n // 横条的正负按排版方向算,而组件不读计算样式,把 positioner 上那份显式交过去\n const bars = useScrollbars({\n scrollable: () => ctx.contentRef.value,\n axes: ['horizontal'],\n props: () => ({ dir: (ctx.api.value.getPositionerProps() as { dir?: Direction }).dir }),\n })\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?.() ?? []), ...bars.render()]),\n ])\n },\n})\n\nexport const XhCascaderContent = defineComponent({\n name: 'XhCascaderContent',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n // 收起时只隐藏不卸载;跨列的键盘导航也在这一层处理\n return () => {\n const api = ctx.api.value\n return h('div', {\n ...api.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 }, [\n slots.default?.(),\n // 空态占位常挂在列后,露不露面归连接层;empty 插槽可换内容,缺省文案按视图取无匹配或无数据\n h(\n 'div',\n api.getEmptyProps() as Record<string, unknown>,\n slots.empty ? slots.empty() : (api.searching ? api.translations.noMatch : api.translations.empty),\n ),\n ])\n }\n },\n})\n\nexport const XhCascaderInput = defineComponent({\n name: 'XhCascaderInput',\n setup() {\n const ctx = useCascaderContext()\n // 搜索框放在 content 顶部;没开 searchable 时连接层给 hidden\n return () => h('input', ctx.api.value.getInputProps() as Record<string, unknown>)\n },\n})\n\n/** item 插槽的载荷:一条搜索候选。 */\nexport interface CascaderSearchListItemSlotProps {\n result: CascaderSearchResult\n}\n\nexport const XhCascaderSearchList = defineComponent({\n name: 'XhCascaderSearchList',\n slots: Object as SlotsType<{\n item?: (props: CascaderSearchListItemSlotProps) => VNode[]\n }>,\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n // 候选整组自动铺:整条路径连缀成一行;item 插槽可换内容\n return () => h('div', ctx.api.value.getSearchListProps() as Record<string, unknown>, ctx.api.value.searchResults.map(result =>\n h(\n 'div',\n { ...ctx.api.value.getSearchItemProps({ path: result.path }) as Record<string, unknown>, key: result.key },\n slots.item ? slots.item({ result }) : result.labels.join(' / '),\n ),\n ))\n },\n})\n\nexport const XhCascaderColumn = defineComponent({\n name: 'XhCascaderColumn',\n props: {\n // 层号,兼收字符串以支持模板里写 level=\"0\"\n level: { type: [Number, String] as PropType<number | string>, required: true },\n },\n setup(props, { slots }) {\n const ctx = useCascaderContext()\n // 展开路径变短时本列收起,节点常挂不卸载\n return () => h(\n 'div',\n ctx.api.value.getColumnProps({ level: Number(props.level) }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhCascaderItem = defineComponent({\n name: 'XhCascaderItem',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useCascaderContext()\n const item = computed<CascaderItemProps>(() => ({ value: props.value }))\n provideCascaderItem({ item })\n const el = ref<HTMLElement | null>(null)\n reportItemFocus(ctx, el, () => props.value)\n return () => h(\n 'div',\n { ...ctx.api.value.getItemProps(item.value) as Record<string, unknown>, ref: el },\n slots.default?.(),\n )\n },\n})\n\nexport const XhCascaderItemText = defineComponent({\n name: 'XhCascaderItemText',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n const { item } = useCascaderItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCascaderItemIndicator = defineComponent({\n name: 'XhCascaderItemIndicator',\n setup(_, { slots }) {\n const ctx = useCascaderContext()\n const { item } = useCascaderItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { inject, provide } from "vue";
|
|
2
2
|
//#region src/components/cascader/context.ts
|
|
3
|
-
const KEY = Symbol("xh-cascader");
|
|
4
|
-
const ITEM_KEY = Symbol("xh-cascader-item");
|
|
3
|
+
const KEY = Symbol.for("xh-cascader");
|
|
4
|
+
const ITEM_KEY = Symbol.for("xh-cascader-item");
|
|
5
5
|
function provideCascader(ctx) {
|
|
6
6
|
provide(KEY, ctx);
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/cascader/context.ts"],"sourcesContent":["import type { CascaderItemProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { CascaderContext } from './use-cascader'\nimport { inject, provide } from 'vue'\n\n/** 条目自报的值,供 item-text / item-indicator 复用同一份声明;所在列、路径、禁用与标签回 collection 里查。 */\nexport interface CascaderItemContext {\n item: ComputedRef<CascaderItemProps>\n}\n\nconst KEY: InjectionKey<CascaderContext> = Symbol('xh-cascader')\nconst ITEM_KEY: InjectionKey<CascaderItemContext> = Symbol('xh-cascader-item')\n\nexport function provideCascader(ctx: CascaderContext): void {\n provide(KEY, ctx)\n}\n\nexport function useCascaderContext(): CascaderContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Cascader 部件必须用在 XhCascaderRoot 内')\n return ctx\n}\n\nexport function provideCascaderItem(ctx: CascaderItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useCascaderItemContext(): CascaderItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] Cascader 条目子部件必须用在 XhCascaderItem 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAAqC,OAAO,aAAa;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/cascader/context.ts"],"sourcesContent":["import type { CascaderItemProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { CascaderContext } from './use-cascader'\nimport { inject, provide } from 'vue'\n\n/** 条目自报的值,供 item-text / item-indicator 复用同一份声明;所在列、路径、禁用与标签回 collection 里查。 */\nexport interface CascaderItemContext {\n item: ComputedRef<CascaderItemProps>\n}\n\nconst KEY: InjectionKey<CascaderContext> = Symbol.for('xh-cascader')\nconst ITEM_KEY: InjectionKey<CascaderItemContext> = Symbol.for('xh-cascader-item')\n\nexport function provideCascader(ctx: CascaderContext): void {\n provide(KEY, ctx)\n}\n\nexport function useCascaderContext(): CascaderContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Cascader 部件必须用在 XhCascaderRoot 内')\n return ctx\n}\n\nexport function provideCascaderItem(ctx: CascaderItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useCascaderItemContext(): CascaderItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] Cascader 条目子部件必须用在 XhCascaderItem 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAAqC,OAAO,IAAI,aAAa;AACnE,MAAM,WAA8C,OAAO,IAAI,kBAAkB;AAEjF,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;AAEA,SAAgB,oBAAoB,KAAgC;CAClE,QAAQ,UAAU,GAAG;AACvB;AAEA,SAAgB,yBAA8C;CAC5D,MAAM,MAAM,OAAO,UAAU,IAAI;CACjC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,0CAA0C;CAC5D,OAAO;AACT"}
|
|
@@ -28,7 +28,7 @@ function useCascader(props, handlers = {}) {
|
|
|
28
28
|
const registerLayer = () => config.layerRegistry.register({
|
|
29
29
|
kind: "popover",
|
|
30
30
|
node: () => contentRef.value,
|
|
31
|
-
branches: () => [triggerRef.value].filter(Boolean),
|
|
31
|
+
branches: () => [triggerRef.value, positionerRef.value].filter(Boolean),
|
|
32
32
|
isModal: () => false,
|
|
33
33
|
setModal: () => {},
|
|
34
34
|
surfaces: () => []
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-cascader.js","names":[],"sources":["../../../src/components/cascader/use-cascader.ts"],"sourcesContent":["import type { CascaderApi, CascaderSchema } from '@xihan-ui/headless'\nimport type { Cleanup, Layer, RuntimeConfig } from '@xihan-ui/kernel'\nimport type { Service } from '@xihan-ui/machine'\nimport type { ComputedRef, Ref } from 'vue'\nimport { cascaderMachine, connectCascader } from '@xihan-ui/headless'\nimport { createRuntimeConfig, createScope } from '@xihan-ui/kernel'\nimport { createPositionEngine } from '@xihan-ui/position'\nimport { computed, ref } from 'vue'\nimport { useXhConfig } from '../../config/config'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { useOverlayExit } from '../../runtime/use-overlay-exit'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface CascaderContext {\n /** 机器实例,供部件上报 DOM 侧的事实(如条目卸载带走了焦点)。 */\n service: Service<CascaderSchema>\n api: ComputedRef<CascaderApi>\n triggerRef: Ref<HTMLElement | null>\n positionerRef: Ref<HTMLElement | null>\n contentRef: Ref<HTMLElement | null>\n /** 此刻该不该渲染:退场动画播完之前仍为真。 */\n visible: Ref<boolean>\n /** 浮层搬到哪儿:全局配置的 portalContainer > body。 */\n portalTarget: ComputedRef<string | Element>\n}\n\nexport function useCascader(\n props: CascaderSchema['props'],\n handlers: Pick<CascaderSchema['props'], 'onValueChange' | 'onOpenChange'> = {},\n): CascaderContext {\n const xhConfig = useXhConfig()\n const triggerRef = ref<HTMLElement | null>(null)\n const positionerRef = ref<HTMLElement | null>(null)\n const contentRef = ref<HTMLElement | null>(null)\n\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n const service = useMachine(cascaderMachine, () => ({ ...props, ...handlers }), scope)\n\n // 服务端没有 DOM、也就没有退场:config 传 null 时闸门退化成「跟着展开态」\n let config: RuntimeConfig | null = null\n\n if (typeof document !== 'undefined') {\n config = createRuntimeConfig({ scope, idGenerator: idGen })\n\n // 只提供注册函数,入栈出栈由机器的 trackLayer 效应按展开态驱动\n const registerLayer = (): { layer: Layer, dispose: Cleanup } => config!.layerRegistry.register({\n kind: 'popover',\n node: () => contentRef.value,\n // trigger
|
|
1
|
+
{"version":3,"file":"use-cascader.js","names":[],"sources":["../../../src/components/cascader/use-cascader.ts"],"sourcesContent":["import type { CascaderApi, CascaderSchema } from '@xihan-ui/headless'\nimport type { Cleanup, Layer, RuntimeConfig } from '@xihan-ui/kernel'\nimport type { Service } from '@xihan-ui/machine'\nimport type { ComputedRef, Ref } from 'vue'\nimport { cascaderMachine, connectCascader } from '@xihan-ui/headless'\nimport { createRuntimeConfig, createScope } from '@xihan-ui/kernel'\nimport { createPositionEngine } from '@xihan-ui/position'\nimport { computed, ref } from 'vue'\nimport { useXhConfig } from '../../config/config'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { useOverlayExit } from '../../runtime/use-overlay-exit'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface CascaderContext {\n /** 机器实例,供部件上报 DOM 侧的事实(如条目卸载带走了焦点)。 */\n service: Service<CascaderSchema>\n api: ComputedRef<CascaderApi>\n triggerRef: Ref<HTMLElement | null>\n positionerRef: Ref<HTMLElement | null>\n contentRef: Ref<HTMLElement | null>\n /** 此刻该不该渲染:退场动画播完之前仍为真。 */\n visible: Ref<boolean>\n /** 浮层搬到哪儿:全局配置的 portalContainer > body。 */\n portalTarget: ComputedRef<string | Element>\n}\n\nexport function useCascader(\n props: CascaderSchema['props'],\n handlers: Pick<CascaderSchema['props'], 'onValueChange' | 'onOpenChange'> = {},\n): CascaderContext {\n const xhConfig = useXhConfig()\n const triggerRef = ref<HTMLElement | null>(null)\n const positionerRef = ref<HTMLElement | null>(null)\n const contentRef = ref<HTMLElement | null>(null)\n\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n const service = useMachine(cascaderMachine, () => ({ ...props, ...handlers }), scope)\n\n // 服务端没有 DOM、也就没有退场:config 传 null 时闸门退化成「跟着展开态」\n let config: RuntimeConfig | null = null\n\n if (typeof document !== 'undefined') {\n config = createRuntimeConfig({ scope, idGenerator: idGen })\n\n // 只提供注册函数,入栈出栈由机器的 trackLayer 效应按展开态驱动\n const registerLayer = (): { layer: Layer, dispose: Cleanup } => config!.layerRegistry.register({\n kind: 'popover',\n node: () => contentRef.value,\n // trigger 记为本层分支,点它算层内交互;\n // 浮层壳一并记上:content 之外还浮着自绘滚动条,按住它拖动不该把浮层消解掉\n branches: () => [triggerRef.value, positionerRef.value].filter(Boolean) as Element[],\n isModal: () => false,\n setModal: () => {},\n surfaces: () => [],\n })\n\n // 定位引擎由适配器注入,机器只经端口驱动;锚点取 trigger\n service.refs.set('config', config!)\n service.refs.set('registerLayer', registerLayer)\n service.refs.set('position', createPositionEngine())\n service.refs.set('getAnchorEl', () => triggerRef.value)\n service.refs.set('getFloatingEl', () => positionerRef.value)\n service.refs.set('getContentEl', () => contentRef.value)\n }\n\n const api = computed(() => connectCascader(service, vueNormalize))\n // 退场闸门:收起从跟着 open 走,改成跟着 presence 走\n const visible = useOverlayExit({ config, isOpen: () => api.value.open, contentRef })\n // 先问全局配置的落点,没有才落 body\n const portalTarget = computed<string | Element>(() => xhConfig.value.portalContainer?.() ?? config?.portalContainer() ?? 'body')\n\n return { visible, service, api, triggerRef, positionerRef, contentRef, portalTarget }\n}\n"],"mappings":";;;;;;;;;;AA2BA,SAAgB,YACd,OACA,WAA4E,CAAC,GAC5D;CACjB,MAAM,WAAW,YAAY;CAC7B,MAAM,aAAa,IAAwB,IAAI;CAC/C,MAAM,gBAAgB,IAAwB,IAAI;CAClD,MAAM,aAAa,IAAwB,IAAI;CAE/C,MAAM,QAAQ,qBAAqB;CACnC,MAAM,QAAQ,YAAY,MAAM,KAAK;CACrC,MAAM,UAAU,WAAW,wBAAwB;EAAE,GAAG;EAAO,GAAG;CAAS,IAAI,KAAK;CAGpF,IAAI,SAA+B;CAEnC,IAAI,OAAO,aAAa,aAAa;EACnC,SAAS,oBAAoB;GAAE;GAAO,aAAa;EAAM,CAAC;EAG1D,MAAM,sBAA0D,OAAQ,cAAc,SAAS;GAC7F,MAAM;GACN,YAAY,WAAW;GAGvB,gBAAgB,CAAC,WAAW,OAAO,cAAc,KAAK,CAAC,CAAC,OAAO,OAAO;GACtE,eAAe;GACf,gBAAgB,CAAC;GACjB,gBAAgB,CAAC;EACnB,CAAC;EAGD,QAAQ,KAAK,IAAI,UAAU,MAAO;EAClC,QAAQ,KAAK,IAAI,iBAAiB,aAAa;EAC/C,QAAQ,KAAK,IAAI,YAAY,qBAAqB,CAAC;EACnD,QAAQ,KAAK,IAAI,qBAAqB,WAAW,KAAK;EACtD,QAAQ,KAAK,IAAI,uBAAuB,cAAc,KAAK;EAC3D,QAAQ,KAAK,IAAI,sBAAsB,WAAW,KAAK;CACzD;CAEA,MAAM,MAAM,eAAe,gBAAgB,SAAS,YAAY,CAAC;CAMjE,OAAO;EAAE,SAJO,eAAe;GAAE;GAAQ,cAAc,IAAI,MAAM;GAAM;EAAW,CAInE;EAAG;EAAS;EAAK;EAAY;EAAe;EAAY,cAFlD,eAAiC,SAAS,MAAM,kBAAkB,KAAK,QAAQ,gBAAgB,KAAK,MAEvC;CAAE;AACtF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { inject, provide } from "vue";
|
|
2
2
|
//#region src/components/checkbox-group/context.ts
|
|
3
|
-
const KEY = Symbol("xh-checkbox-group");
|
|
4
|
-
const ITEM_KEY = Symbol("xh-checkbox-group-item");
|
|
3
|
+
const KEY = Symbol.for("xh-checkbox-group");
|
|
4
|
+
const ITEM_KEY = Symbol.for("xh-checkbox-group-item");
|
|
5
5
|
function provideCheckboxGroup(ctx) {
|
|
6
6
|
provide(KEY, ctx);
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/checkbox-group/context.ts"],"sourcesContent":["import type { CheckboxGroupItemProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { CheckboxGroupContext } from './use-checkbox-group'\nimport { inject, provide } from 'vue'\n\n/** 条目自报的值与禁用,供 indicator / item-text 这类子部件复用同一份声明。 */\nexport interface CheckboxGroupItemContext {\n item: ComputedRef<CheckboxGroupItemProps>\n}\n\nconst KEY: InjectionKey<CheckboxGroupContext> = Symbol('xh-checkbox-group')\nconst ITEM_KEY: InjectionKey<CheckboxGroupItemContext> = Symbol('xh-checkbox-group-item')\n\nexport function provideCheckboxGroup(ctx: CheckboxGroupContext): void {\n provide(KEY, ctx)\n}\n\nexport function useCheckboxGroupContext(): CheckboxGroupContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] CheckboxGroup 部件必须用在 XhCheckboxGroupRoot 内')\n return ctx\n}\n\nexport function provideCheckboxGroupItem(ctx: CheckboxGroupItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useCheckboxGroupItemContext(): CheckboxGroupItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] CheckboxGroup 条目子部件必须用在 XhCheckboxGroupItem 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAA0C,OAAO,mBAAmB;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/checkbox-group/context.ts"],"sourcesContent":["import type { CheckboxGroupItemProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { CheckboxGroupContext } from './use-checkbox-group'\nimport { inject, provide } from 'vue'\n\n/** 条目自报的值与禁用,供 indicator / item-text 这类子部件复用同一份声明。 */\nexport interface CheckboxGroupItemContext {\n item: ComputedRef<CheckboxGroupItemProps>\n}\n\nconst KEY: InjectionKey<CheckboxGroupContext> = Symbol.for('xh-checkbox-group')\nconst ITEM_KEY: InjectionKey<CheckboxGroupItemContext> = Symbol.for('xh-checkbox-group-item')\n\nexport function provideCheckboxGroup(ctx: CheckboxGroupContext): void {\n provide(KEY, ctx)\n}\n\nexport function useCheckboxGroupContext(): CheckboxGroupContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] CheckboxGroup 部件必须用在 XhCheckboxGroupRoot 内')\n return ctx\n}\n\nexport function provideCheckboxGroupItem(ctx: CheckboxGroupItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useCheckboxGroupItemContext(): CheckboxGroupItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] CheckboxGroup 条目子部件必须用在 XhCheckboxGroupItem 内')\n return ctx\n}\n"],"mappings":";;AAUA,MAAM,MAA0C,OAAO,IAAI,mBAAmB;AAC9E,MAAM,WAAmD,OAAO,IAAI,wBAAwB;AAE5F,SAAgB,qBAAqB,KAAiC;CACpE,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,0BAAgD;CAC9D,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,iDAAiD;CACnE,OAAO;AACT;AAEA,SAAgB,yBAAyB,KAAqC;CAC5E,QAAQ,UAAU,GAAG;AACvB;AAEA,SAAgB,8BAAwD;CACtE,MAAM,MAAM,OAAO,UAAU,IAAI;CACjC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,oDAAoD;CACtE,OAAO;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/clipboard/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { ClipboardContext } from './use-clipboard'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<ClipboardContext> = Symbol('xh-clipboard')\n\nexport function provideClipboard(ctx: ClipboardContext): void {\n provide(KEY, ctx)\n}\n\nexport function useClipboardContext(): ClipboardContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Clipboard 部件必须用在 XhClipboardRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAsC,OAAO,cAAc;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/clipboard/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { ClipboardContext } from './use-clipboard'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<ClipboardContext> = Symbol.for('xh-clipboard')\n\nexport function provideClipboard(ctx: ClipboardContext): void {\n provide(KEY, ctx)\n}\n\nexport function useClipboardContext(): ClipboardContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Clipboard 部件必须用在 XhClipboardRoot 内')\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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/collapsible/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { CollapsibleContext } from './use-collapsible'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<CollapsibleContext> = Symbol('xh-collapsible')\n\nexport function provideCollapsible(ctx: CollapsibleContext): void {\n provide(KEY, ctx)\n}\n\nexport function useCollapsibleContext(): CollapsibleContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Collapsible 部件必须用在 XhCollapsibleRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAwC,OAAO,gBAAgB;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/collapsible/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { CollapsibleContext } from './use-collapsible'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<CollapsibleContext> = Symbol.for('xh-collapsible')\n\nexport function provideCollapsible(ctx: CollapsibleContext): void {\n provide(KEY, ctx)\n}\n\nexport function useCollapsibleContext(): CollapsibleContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Collapsible 部件必须用在 XhCollapsibleRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAwC,OAAO,IAAI,gBAAgB;AAEzE,SAAgB,mBAAmB,KAA+B;CAChE,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,wBAA4C;CAC1D,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,6CAA6C;CAC/D,OAAO;AACT"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PayloadOf } from "../../runtime/payload.js";
|
|
2
2
|
import { PropType, SlotsType, VNode } from "vue";
|
|
3
3
|
import { ColorPickerApi, ColorPickerChannel, ColorPickerFormat, ColorPickerInputChannel, ColorPickerSchema, ColorPickerTranslations } from "@xihan-ui/headless";
|
|
4
|
-
import { Direction, Placement } from "@xihan-ui/kernel";
|
|
4
|
+
import { Direction, Placement, Size } from "@xihan-ui/kernel";
|
|
5
5
|
//#region src/components/color-picker/color-picker.d.ts
|
|
6
6
|
type ColorPickerProps = ColorPickerSchema['props'];
|
|
7
7
|
/** 默认插槽的载荷:展开态、当前颜色的各式表示、预设色板、屏幕取色状态,以及改展开与改值两个动作。 */
|
|
@@ -35,6 +35,10 @@ declare const XhColorPickerRoot: import("vue").DefineComponent<import("vue").Ext
|
|
|
35
35
|
type: StringConstructor;
|
|
36
36
|
default: undefined;
|
|
37
37
|
};
|
|
38
|
+
size: {
|
|
39
|
+
type: PropType<Size>;
|
|
40
|
+
default: undefined;
|
|
41
|
+
};
|
|
38
42
|
dir: {
|
|
39
43
|
type: PropType<Direction>;
|
|
40
44
|
default: undefined;
|
|
@@ -87,6 +91,10 @@ declare const XhColorPickerRoot: import("vue").DefineComponent<import("vue").Ext
|
|
|
87
91
|
type: StringConstructor;
|
|
88
92
|
default: undefined;
|
|
89
93
|
};
|
|
94
|
+
size: {
|
|
95
|
+
type: PropType<Size>;
|
|
96
|
+
default: undefined;
|
|
97
|
+
};
|
|
90
98
|
dir: {
|
|
91
99
|
type: PropType<Direction>;
|
|
92
100
|
default: undefined;
|
|
@@ -113,11 +121,12 @@ declare const XhColorPickerRoot: import("vue").DefineComponent<import("vue").Ext
|
|
|
113
121
|
value: string;
|
|
114
122
|
defaultValue: string;
|
|
115
123
|
dir: Direction;
|
|
124
|
+
size: Size;
|
|
116
125
|
disabled: boolean;
|
|
126
|
+
offset: number;
|
|
127
|
+
translations: Partial<ColorPickerTranslations>;
|
|
117
128
|
open: boolean;
|
|
118
129
|
defaultOpen: boolean;
|
|
119
|
-
translations: Partial<ColorPickerTranslations>;
|
|
120
|
-
offset: number;
|
|
121
130
|
readOnly: boolean;
|
|
122
131
|
placement: Placement;
|
|
123
132
|
swatches: string[];
|