@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menubar.js","names":[],"sources":["../../../src/components/menubar/menubar.ts"],"sourcesContent":["import type { MenubarApi, MenubarContentProps, MenubarGroupProps, MenubarItemProps, MenubarNode, MenubarNodeMeta, MenubarSchema } from '@xihan-ui/headless'\nimport type { Direction, Orientation, Placement, Size, Tone } from '@xihan-ui/kernel'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport type { MenubarPartRegistry } from './use-menubar'\nimport { createRuntimeConfig } from '@xihan-ui/kernel'\nimport { computed, defineComponent, h, mergeProps, onBeforeUnmount, ref, Teleport, watch } from 'vue'\nimport { mergeIntoChild } from '../../runtime/as-child'\nimport { useOverlayExit } from '../../runtime/use-overlay-exit'\nimport {\n provideMenubar,\n provideMenubarChain,\n provideMenubarGroup,\n provideMenubarItem,\n provideMenubarMenu,\n provideMenubarSub,\n useMenubarChain,\n useMenubarContext,\n useMenubarGroupContext,\n useMenubarItemContext,\n useMenubarMenuContext,\n useMenubarSubContext,\n} from './context'\nimport { provideMenu, provideMenuChain, useMenuContext } from '../menu/context'\nimport { useMenu } from '../menu/use-menu'\nimport { useMenubar } from './use-menubar'\n\ntype MenubarProps = MenubarSchema['props']\n\n/** 在 ref 回调里把节点按 value 登记进菜单栏取值表,value 变更时迁移到新键,卸载时注销 */\nfunction useMenubarPart(register: MenubarPartRegistry, value: () => string): (el: HTMLElement | null) => void {\n const node = ref<HTMLElement | null>(null)\n watch(value, (next, prev) => {\n if (next === prev)\n return\n register(prev, null)\n register(next, node.value)\n })\n onBeforeUnmount(() => register(value(), null))\n return (el) => {\n node.value = el\n register(value(), el)\n }\n}\n\n/** 默认插槽的载荷:当前展开的那一项、有没有菜单展开着,与切换展开项的命令。 */\nexport type MenubarRootSlotProps = Pick<MenubarApi, 'value' | 'open' | 'setValue'>\n\n/** role=menubar 根节点:trigger 的 roving tabindex 作用域,各菜单浮层也挂在其内 */\nexport const XhMenubarRoot = defineComponent({\n name: 'XhMenubarRoot',\n // 全部 default: undefined,缺省值由机器与 connect 决定\n props: {\n collection: { type: Array as PropType<MenubarNode[]>, default: undefined },\n value: { type: String as PropType<string | null>, default: undefined },\n defaultValue: { type: String as PropType<string | null>, default: undefined },\n orientation: { type: String as PropType<Orientation>, default: undefined },\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction>, default: undefined },\n disabled: { type: Boolean, default: undefined },\n typeahead: { type: Boolean, default: undefined },\n placement: { type: String as PropType<Placement>, default: undefined },\n offset: { type: Number, default: undefined },\n tone: { type: String as PropType<Tone>, default: undefined },\n size: { type: String as PropType<Size>, default: undefined },\n },\n // value-change 携带 { value }、select 携带 { menu, value },update:value 携带裸值\n emits: {\n 'value-change': (_details: PayloadOf<MenubarProps, 'onValueChange'>) => true,\n 'select': (_details: PayloadOf<MenubarProps, 'onSelect'>) => true,\n 'update:value': (_value: PayloadOf<MenubarProps, 'onValueChange'>['value']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: MenubarRootSlotProps) => VNode[]\n item?: (node: MenubarNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: MenubarProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifySelect: MenubarProps['onSelect'] = details => emit('select', details)\n const ctx = useMenubar(props as MenubarProps, notifyValue, notifySelect)\n provideMenubar(ctx)\n // 子菜单任意层级的选中都汇到这里:先发根的 select,再关掉整条菜单栏。\n // 关根用 setValue(null) —— 菜单栏是「当前展开哪一项」的模型,没有 setOpen\n provideMenubarChain({\n notifySelect: (details) => {\n emit('select', details)\n ctx.api.value.setValue(null)\n },\n })\n return () => h('div', {\n ...ctx.api.value.getRootProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.rootRef.value = el as HTMLElement },\n }, slots.default\n ? slots.default({\n value: ctx.api.value.value,\n open: ctx.api.value.open,\n setValue: ctx.api.value.setValue,\n })\n : props.collection\n ? renderDefaultTree(ctx.api.value.collection, slots.item)\n : [])\n },\n})\n\nexport const XhMenubarTrigger = defineComponent({\n name: 'XhMenubarTrigger',\n props: {\n value: { type: String, required: true },\n // 缺省交给 connect 回 collection 里查,写死 false 会盖掉数据里的禁用\n disabled: { type: Boolean, default: undefined },\n /** 借用作者的子节点当触发器,不再渲染自己的包裹元素;子节点须恰好一个。 */\n asChild: Boolean,\n },\n setup(props, { slots }) {\n const ctx = useMenubarContext()\n // trigger 同时作为定位锚点与焦点归还目标\n const setEl = useMenubarPart(ctx.registerTrigger, () => props.value)\n return () => {\n const attrs = {\n ...ctx.api.value.getTriggerProps({ value: props.value, disabled: props.disabled }) as Record<string, unknown>,\n ref: (el: unknown) => setEl(el as HTMLElement | null),\n }\n const children = slots.default?.()\n // asChild:把触发器属性合到作者的节点上,不再自己渲染包裹元素\n if (props.asChild) {\n const merged = mergeIntoChild(children, attrs, 'menubar')\n if (merged)\n return merged\n }\n return h('button', attrs, children)\n }\n },\n})\n\nexport const XhMenubarPositioner = defineComponent({\n name: 'XhMenubarPositioner',\n props: {\n value: { type: String, required: true },\n },\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 positioner 上\n inheritAttrs: false,\n setup(props, { slots, attrs }) {\n const ctx = useMenubarContext()\n const menu = computed<MenubarContentProps>(() => ({ value: props.value }))\n // 供内部 content 继承 value\n provideMenubarMenu({ menu })\n const setEl = useMenubarPart(ctx.registerPositioner, () => props.value)\n // 每张菜单各搬各的定位层到 portal 落点,逃开祖先的层叠上下文\n return () => h(Teleport, { to: ctx.portalTarget.value }, [\n h('div', {\n ...mergeProps(ctx.api.value.getPositionerProps(menu.value) as Record<string, unknown>, attrs),\n ref: (el: unknown) => setEl(el as HTMLElement | null),\n }, slots.default?.()),\n ])\n },\n})\n\nexport const XhMenubarContent = defineComponent({\n name: 'XhMenubarContent',\n props: {\n // 缺省时沿用外层 positioner 提供的身份,无 positioner 时必填\n value: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useMenubarContext()\n const inherited = useMenubarMenuContext()\n if (props.value == null && !inherited)\n throw new Error('[xh] XhMenubarContent 必须写在 XhMenubarPositioner 内,或自带 value')\n const menu = computed<MenubarContentProps>(() => ({ value: props.value ?? inherited!.menu.value.value }))\n const setEl = useMenubarPart(ctx.registerContent, () => menu.value.value)\n // 一个菜单一份退场闸门:它们各开各的、动画各跑各的,一份管不过来。\n // 开合判据直接取 connect 这一帧的产出,不另起一套——两边各判一次迟早会说岔\n const contentRef = ref<HTMLElement | null>(null)\n const visible = useOverlayExit({\n config: typeof document === 'undefined' ? null : createRuntimeConfig(),\n isOpen: () => (ctx.api.value.getContentProps(menu.value) as Record<string, unknown>).hidden !== true,\n contentRef,\n })\n return () => h('div', {\n ...ctx.api.value.getContentProps(menu.value) as Record<string, unknown>,\n // 收起跟着闸门走:皮肤刻意没给 content 补 [hidden]{display:none}(补了退场就一帧都\n // 播不出来),所以真正的收起落成内联 display\n style: visible.value ? undefined : { display: 'none' },\n ref: (el: unknown) => {\n contentRef.value = el as HTMLElement | null\n setEl(el as HTMLElement | null)\n },\n }, slots.default?.())\n },\n})\n\nexport const XhMenubarGroup = defineComponent({\n name: 'XhMenubarGroup',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useMenubarContext()\n const group = computed<MenubarGroupProps>(() => ({ value: props.value }))\n provideMenubarGroup({ group })\n return () => h('div', ctx.api.value.getGroupProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhMenubarGroupLabel = defineComponent({\n name: 'XhMenubarGroupLabel',\n setup(_, { slots }) {\n const ctx = useMenubarContext()\n const { group } = useMenubarGroupContext()\n return () => h('span', ctx.api.value.getGroupLabelProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhMenubarItem = defineComponent({\n name: 'XhMenubarItem',\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 = useMenubarContext()\n const item = computed<MenubarItemProps>(() => ({ value: props.value, disabled: props.disabled }))\n provideMenubarItem({ item })\n // 本条目持有焦点时,value 变更重报焦点条目,卸载时上报焦点丢失\n const itemEl = ref<HTMLElement | null>(null)\n watch(() => props.value, (next, prev) => {\n if (next === prev)\n return\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'ITEM.FOCUS', value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n // 整组一起卸载时根部件先停机,此刻送事件会在 dev 下抛\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 XhMenubarItemText = defineComponent({\n name: 'XhMenubarItemText',\n setup(_, { slots }) {\n const ctx = useMenubarContext()\n const { item } = useMenubarItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhMenubarItemIndicator = defineComponent({\n name: 'XhMenubarItemIndicator',\n setup(_, { slots }) {\n const ctx = useMenubarContext()\n const { item } = useMenubarItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhMenubarSeparator = defineComponent({\n name: 'XhMenubarSeparator',\n setup() {\n const ctx = useMenubarContext()\n return () => h('div', ctx.api.value.getSeparatorProps() as Record<string, unknown>)\n },\n})\n\n/**\n * 没写默认插槽时按 collection 铺开的整套结构,作者只交数据。\n * 一排入口排在前、各自那张菜单的浮层排在后,与手写部件产出的 DOM 完全一致;\n * 要改结构就写默认插槽,行为不变。\n */\nfunction renderDefaultTree(\n collection: readonly MenubarNodeMeta[],\n itemSlot?: (node: MenubarNodeMeta) => VNode[],\n): VNode[] {\n return [\n ...collection.map(menu =>\n h(XhMenubarTrigger, { key: `trigger:${menu.value}`, value: menu.value }, () => menu.label),\n ),\n ...collection.map(menu =>\n h(XhMenubarPositioner, { key: `positioner:${menu.value}`, value: menu.value }, () => [\n h(XhMenubarContent, null, () => menu.items.map(item =>\n h(XhMenubarItem, { key: item.value, value: item.value }, () => [\n h(XhMenubarItemText, null, () => itemSlot?.(item) ?? item.label),\n ]),\n )),\n ]),\n ),\n ]\n}\n\n/** XhMenubarSub 默认插槽拿到的东西。 */\nexport interface MenubarSubSlotProps {\n open: boolean\n setOpen: (next: boolean) => void\n}\n\nexport const XhMenubarSub = defineComponent({\n name: 'XhMenubarSub',\n props: {\n /** 它在所属那张菜单里的条目身份。 */\n value: { type: String, required: true },\n disabled: { type: Boolean, default: undefined },\n placement: { type: String as PropType<Placement>, default: undefined },\n offset: { type: Number, default: undefined },\n loop: { type: Boolean, default: undefined },\n openOnHover: { type: Boolean, default: undefined },\n hoverOpenDelay: { type: Number, default: undefined },\n hoverCloseDelay: { type: Number, default: undefined },\n /** 文字方向;缺省继承父层。子层被搬到浮层落点,继承不到父层的方向。 */\n dir: { type: String as PropType<Direction>, default: undefined },\n /** 语气;缺省继承父层。子层是浮层落点下的同级节点,CSS 私有槽继承不到。 */\n tone: { type: String as PropType<Tone>, default: undefined },\n /** 尺寸;缺省继承父层,理由同 tone。 */\n size: { type: String as PropType<Size>, default: undefined },\n },\n slots: Object as SlotsType<{\n default?: (props: MenubarSubSlotProps) => VNode[]\n }>,\n setup(props, { slots }) {\n const parent = useMenubarContext()\n const owner = useMenubarMenuContext()\n if (!owner)\n throw new Error('[xh] MenubarSub 必须用在 XhMenubarPositioner 内')\n const chain = useMenubarChain()\n // 子层跑的是一台子菜单模式的 menu 机器:菜单栏那台是单机器单锚点,装不下第二层\n const sub = useMenu(\n {\n ...props,\n submenu: true,\n dir: props.dir ?? parent.service.prop('dir'),\n tone: props.tone ?? parent.service.prop('tone'),\n size: props.size ?? parent.service.prop('size'),\n },\n undefined,\n // 菜单栏的选中要带菜单身份,子层只知道条目值,在这里补上\n details => chain.notifySelect({ menu: owner.menu.value.value, value: details.value }),\n )\n // 子树内的 XhMenu 系部件都归子机器\n provideMenu(sub)\n // 子层里还能再嵌一层 XhMenuSub:那一层要往上找选中汇总的链\n provideMenuChain({\n notifySelect: details => chain.notifySelect({ menu: owner.menu.value.value, value: details.value }),\n })\n provideMenubarSub({ parent, value: props.value, disabled: props.disabled })\n // 所属那张菜单收起时本层跟着收,层层传导\n watch(() => parent.api.value.isOpen(owner.menu.value.value), (open) => {\n if (!open)\n sub.api.value.setOpen(false)\n })\n return () => slots.default?.({ open: sub.api.value.open, setOpen: sub.api.value.setOpen })\n },\n})\n\nexport const XhMenubarSubTrigger = defineComponent({\n name: 'XhMenubarSubTrigger',\n setup(_, { slots }) {\n const handle = useMenubarSubContext()\n const sub = useMenuContext()\n return () => h('div', {\n // 合并序=子先父后:父层的 data-scope/data-part 胜出,菜单栏的方向键与选中照常认它。\n // 反过来写会让节点带上 data-scope=\"menu\",菜单栏按自己的 scope 查条目就一条都找不到\n ...mergeProps(\n sub.api.value.getSubmenuTriggerProps({ value: handle.value, disabled: handle.disabled }) as Record<string, unknown>,\n handle.parent.api.value.getItemProps({ value: handle.value, disabled: handle.disabled }) as Record<string, unknown>,\n ),\n // 子菜单的定位锚点就是这一条\n ref: (el: unknown) => {\n sub.triggerRef.value = el as HTMLElement\n },\n }, slots.default?.())\n },\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"menubar.js","names":[],"sources":["../../../src/components/menubar/menubar.ts"],"sourcesContent":["import type { MenubarApi, MenubarContentProps, MenubarGroupProps, MenubarItemProps, MenubarNode, MenubarNodeMeta, MenubarSchema } from '@xihan-ui/headless'\nimport type { Direction, Orientation, Placement, Size, Tone } from '@xihan-ui/kernel'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport type { MenubarPartRegistry } from './use-menubar'\nimport { createRuntimeConfig } from '@xihan-ui/kernel'\nimport { computed, defineComponent, h, mergeProps, onBeforeUnmount, ref, Teleport, watch } from 'vue'\nimport { mergeIntoChild } from '../../runtime/as-child'\nimport { useOverlayExit } from '../../runtime/use-overlay-exit'\nimport { provideMenu, provideMenuChain, useMenuContext } from '../menu/context'\nimport { useMenu } from '../menu/use-menu'\nimport {\n provideMenubar,\n provideMenubarChain,\n provideMenubarGroup,\n provideMenubarItem,\n provideMenubarMenu,\n provideMenubarSub,\n useMenubarChain,\n useMenubarContext,\n useMenubarGroupContext,\n useMenubarItemContext,\n useMenubarMenuContext,\n useMenubarSubContext,\n} from './context'\nimport { useMenubar } from './use-menubar'\n\ntype MenubarProps = MenubarSchema['props']\n\n/** 在 ref 回调里把节点按 value 登记进菜单栏取值表,value 变更时迁移到新键,卸载时注销 */\nfunction useMenubarPart(register: MenubarPartRegistry, value: () => string): (el: HTMLElement | null) => void {\n const node = ref<HTMLElement | null>(null)\n watch(value, (next, prev) => {\n if (next === prev)\n return\n register(prev, null)\n register(next, node.value)\n })\n onBeforeUnmount(() => register(value(), null))\n return (el) => {\n node.value = el\n register(value(), el)\n }\n}\n\n/** 默认插槽的载荷:当前展开的那一项、有没有菜单展开着,与切换展开项的命令。 */\nexport type MenubarRootSlotProps = Pick<MenubarApi, 'value' | 'open' | 'setValue'>\n\n/** role=menubar 根节点:trigger 的 roving tabindex 作用域,各菜单浮层也挂在其内 */\nexport const XhMenubarRoot = defineComponent({\n name: 'XhMenubarRoot',\n // 全部 default: undefined,缺省值由机器与 connect 决定\n props: {\n collection: { type: Array as PropType<MenubarNode[]>, default: undefined },\n value: { type: String as PropType<string | null>, default: undefined },\n defaultValue: { type: String as PropType<string | null>, default: undefined },\n orientation: { type: String as PropType<Orientation>, default: undefined },\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction>, default: undefined },\n disabled: { type: Boolean, default: undefined },\n typeahead: { type: Boolean, default: undefined },\n placement: { type: String as PropType<Placement>, default: undefined },\n offset: { type: Number, default: undefined },\n tone: { type: String as PropType<Tone>, default: undefined },\n size: { type: String as PropType<Size>, default: undefined },\n },\n // value-change 携带 { value }、select 携带 { menu, value },update:value 携带裸值\n emits: {\n 'value-change': (_details: PayloadOf<MenubarProps, 'onValueChange'>) => true,\n 'select': (_details: PayloadOf<MenubarProps, 'onSelect'>) => true,\n 'update:value': (_value: PayloadOf<MenubarProps, 'onValueChange'>['value']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: MenubarRootSlotProps) => VNode[]\n item?: (node: MenubarNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: MenubarProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifySelect: MenubarProps['onSelect'] = details => emit('select', details)\n const ctx = useMenubar(props as MenubarProps, notifyValue, notifySelect)\n provideMenubar(ctx)\n // 子菜单任意层级的选中都汇到这里:先发根的 select,再关掉整条菜单栏。\n // 关根用 setValue(null) —— 菜单栏是「当前展开哪一项」的模型,没有 setOpen\n provideMenubarChain({\n notifySelect: (details) => {\n emit('select', details)\n ctx.api.value.setValue(null)\n },\n })\n return () => h('div', {\n ...ctx.api.value.getRootProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.rootRef.value = el as HTMLElement },\n }, slots.default\n ? slots.default({\n value: ctx.api.value.value,\n open: ctx.api.value.open,\n setValue: ctx.api.value.setValue,\n })\n : props.collection\n ? renderDefaultTree(ctx.api.value.collection, slots.item)\n : [])\n },\n})\n\nexport const XhMenubarTrigger = defineComponent({\n name: 'XhMenubarTrigger',\n props: {\n value: { type: String, required: true },\n // 缺省交给 connect 回 collection 里查,写死 false 会盖掉数据里的禁用\n disabled: { type: Boolean, default: undefined },\n /** 借用作者的子节点当触发器,不再渲染自己的包裹元素;子节点须恰好一个。 */\n asChild: Boolean,\n },\n setup(props, { slots }) {\n const ctx = useMenubarContext()\n // trigger 同时作为定位锚点与焦点归还目标\n const setEl = useMenubarPart(ctx.registerTrigger, () => props.value)\n return () => {\n const attrs = {\n ...ctx.api.value.getTriggerProps({ value: props.value, disabled: props.disabled }) as Record<string, unknown>,\n ref: (el: unknown) => setEl(el as HTMLElement | null),\n }\n const children = slots.default?.()\n // asChild:把触发器属性合到作者的节点上,不再自己渲染包裹元素\n if (props.asChild) {\n const merged = mergeIntoChild(children, attrs, 'menubar')\n if (merged)\n return merged\n }\n return h('button', attrs, children)\n }\n },\n})\n\nexport const XhMenubarPositioner = defineComponent({\n name: 'XhMenubarPositioner',\n props: {\n value: { type: String, required: true },\n },\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 positioner 上\n inheritAttrs: false,\n setup(props, { slots, attrs }) {\n const ctx = useMenubarContext()\n const menu = computed<MenubarContentProps>(() => ({ value: props.value }))\n // 供内部 content 继承 value\n provideMenubarMenu({ menu })\n const setEl = useMenubarPart(ctx.registerPositioner, () => props.value)\n // 每张菜单各搬各的定位层到 portal 落点,逃开祖先的层叠上下文\n return () => h(Teleport, { to: ctx.portalTarget.value }, [\n h('div', {\n ...mergeProps(ctx.api.value.getPositionerProps(menu.value) as Record<string, unknown>, attrs),\n ref: (el: unknown) => setEl(el as HTMLElement | null),\n }, slots.default?.()),\n ])\n },\n})\n\nexport const XhMenubarContent = defineComponent({\n name: 'XhMenubarContent',\n props: {\n // 缺省时沿用外层 positioner 提供的身份,无 positioner 时必填\n value: { type: String, default: undefined },\n },\n setup(props, { slots }) {\n const ctx = useMenubarContext()\n const inherited = useMenubarMenuContext()\n if (props.value == null && !inherited)\n throw new Error('[xh] XhMenubarContent 必须写在 XhMenubarPositioner 内,或自带 value')\n const menu = computed<MenubarContentProps>(() => ({ value: props.value ?? inherited!.menu.value.value }))\n const setEl = useMenubarPart(ctx.registerContent, () => menu.value.value)\n // 一个菜单一份退场闸门:它们各开各的、动画各跑各的,一份管不过来。\n // 开合判据直接取 connect 这一帧的产出,不另起一套——两边各判一次迟早会说岔\n const contentRef = ref<HTMLElement | null>(null)\n const visible = useOverlayExit({\n config: typeof document === 'undefined' ? null : createRuntimeConfig(),\n isOpen: () => (ctx.api.value.getContentProps(menu.value) as Record<string, unknown>).hidden !== true,\n contentRef,\n })\n return () => h('div', {\n ...ctx.api.value.getContentProps(menu.value) as Record<string, unknown>,\n // 收起跟着闸门走:皮肤刻意没给 content 补 [hidden]{display:none}(补了退场就一帧都\n // 播不出来),所以真正的收起落成内联 display\n style: visible.value ? undefined : { display: 'none' },\n ref: (el: unknown) => {\n contentRef.value = el as HTMLElement | null\n setEl(el as HTMLElement | null)\n },\n }, slots.default?.())\n },\n})\n\nexport const XhMenubarGroup = defineComponent({\n name: 'XhMenubarGroup',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useMenubarContext()\n const group = computed<MenubarGroupProps>(() => ({ value: props.value }))\n provideMenubarGroup({ group })\n return () => h('div', ctx.api.value.getGroupProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhMenubarGroupLabel = defineComponent({\n name: 'XhMenubarGroupLabel',\n setup(_, { slots }) {\n const ctx = useMenubarContext()\n const { group } = useMenubarGroupContext()\n return () => h('span', ctx.api.value.getGroupLabelProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhMenubarItem = defineComponent({\n name: 'XhMenubarItem',\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 = useMenubarContext()\n const item = computed<MenubarItemProps>(() => ({ value: props.value, disabled: props.disabled }))\n provideMenubarItem({ item })\n // 本条目持有焦点时,value 变更重报焦点条目,卸载时上报焦点丢失\n const itemEl = ref<HTMLElement | null>(null)\n watch(() => props.value, (next, prev) => {\n if (next === prev)\n return\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (itemEl.value && service.scope.getActiveElement() === itemEl.value)\n service.send({ type: 'ITEM.FOCUS', value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n // 整组一起卸载时根部件先停机,此刻送事件会在 dev 下抛\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 XhMenubarItemText = defineComponent({\n name: 'XhMenubarItemText',\n setup(_, { slots }) {\n const ctx = useMenubarContext()\n const { item } = useMenubarItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhMenubarItemIndicator = defineComponent({\n name: 'XhMenubarItemIndicator',\n setup(_, { slots }) {\n const ctx = useMenubarContext()\n const { item } = useMenubarItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhMenubarSeparator = defineComponent({\n name: 'XhMenubarSeparator',\n setup() {\n const ctx = useMenubarContext()\n return () => h('div', ctx.api.value.getSeparatorProps() as Record<string, unknown>)\n },\n})\n\n/**\n * 没写默认插槽时按 collection 铺开的整套结构,作者只交数据。\n * 一排入口排在前、各自那张菜单的浮层排在后,与手写部件产出的 DOM 完全一致;\n * 要改结构就写默认插槽,行为不变。\n */\nfunction renderDefaultTree(\n collection: readonly MenubarNodeMeta[],\n itemSlot?: (node: MenubarNodeMeta) => VNode[],\n): VNode[] {\n return [\n ...collection.map(menu =>\n h(XhMenubarTrigger, { key: `trigger:${menu.value}`, value: menu.value }, () => menu.label),\n ),\n ...collection.map(menu =>\n h(XhMenubarPositioner, { key: `positioner:${menu.value}`, value: menu.value }, () => [\n h(XhMenubarContent, null, () => menu.items.map(item =>\n h(XhMenubarItem, { key: item.value, value: item.value }, () => [\n h(XhMenubarItemText, null, () => itemSlot?.(item) ?? item.label),\n ]),\n )),\n ]),\n ),\n ]\n}\n\n/** XhMenubarSub 默认插槽拿到的东西。 */\nexport interface MenubarSubSlotProps {\n open: boolean\n setOpen: (next: boolean) => void\n}\n\nexport const XhMenubarSub = defineComponent({\n name: 'XhMenubarSub',\n props: {\n /** 它在所属那张菜单里的条目身份。 */\n value: { type: String, required: true },\n disabled: { type: Boolean, default: undefined },\n placement: { type: String as PropType<Placement>, default: undefined },\n offset: { type: Number, default: undefined },\n loop: { type: Boolean, default: undefined },\n openOnHover: { type: Boolean, default: undefined },\n hoverOpenDelay: { type: Number, default: undefined },\n hoverCloseDelay: { type: Number, default: undefined },\n /** 文字方向;缺省继承父层。子层被搬到浮层落点,继承不到父层的方向。 */\n dir: { type: String as PropType<Direction>, default: undefined },\n /** 语气;缺省继承父层。子层是浮层落点下的同级节点,CSS 私有槽继承不到。 */\n tone: { type: String as PropType<Tone>, default: undefined },\n /** 尺寸;缺省继承父层,理由同 tone。 */\n size: { type: String as PropType<Size>, default: undefined },\n },\n slots: Object as SlotsType<{\n default?: (props: MenubarSubSlotProps) => VNode[]\n }>,\n setup(props, { slots }) {\n const parent = useMenubarContext()\n const owner = useMenubarMenuContext()\n if (!owner)\n throw new Error('[xh] MenubarSub 必须用在 XhMenubarPositioner 内')\n const chain = useMenubarChain()\n // 子层跑的是一台子菜单模式的 menu 机器:菜单栏那台是单机器单锚点,装不下第二层\n const sub = useMenu(\n {\n ...props,\n submenu: true,\n dir: props.dir ?? parent.service.prop('dir'),\n tone: props.tone ?? parent.service.prop('tone'),\n size: props.size ?? parent.service.prop('size'),\n },\n undefined,\n // 菜单栏的选中要带菜单身份,子层只知道条目值,在这里补上\n details => chain.notifySelect({ menu: owner.menu.value.value, value: details.value }),\n )\n // 子树内的 XhMenu 系部件都归子机器\n provideMenu(sub)\n // 子层里还能再嵌一层 XhMenuSub:那一层要往上找选中汇总的链\n provideMenuChain({\n notifySelect: details => chain.notifySelect({ menu: owner.menu.value.value, value: details.value }),\n })\n provideMenubarSub({ parent, value: props.value, disabled: props.disabled })\n // 所属那张菜单收起时本层跟着收,层层传导\n watch(() => parent.api.value.isOpen(owner.menu.value.value), (open) => {\n if (!open)\n sub.api.value.setOpen(false)\n })\n return () => slots.default?.({ open: sub.api.value.open, setOpen: sub.api.value.setOpen })\n },\n})\n\nexport const XhMenubarSubTrigger = defineComponent({\n name: 'XhMenubarSubTrigger',\n setup(_, { slots }) {\n const handle = useMenubarSubContext()\n const sub = useMenuContext()\n return () => h('div', {\n // 合并序=子先父后:父层的 data-scope/data-part 胜出,菜单栏的方向键与选中照常认它。\n // 反过来写会让节点带上 data-scope=\"menu\",菜单栏按自己的 scope 查条目就一条都找不到\n ...mergeProps(\n sub.api.value.getSubmenuTriggerProps({ value: handle.value, disabled: handle.disabled }) as Record<string, unknown>,\n handle.parent.api.value.getItemProps({ value: handle.value, disabled: handle.disabled }) as Record<string, unknown>,\n ),\n // 子菜单的定位锚点就是这一条\n ref: (el: unknown) => {\n sub.triggerRef.value = el as HTMLElement\n },\n }, slots.default?.())\n },\n})\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/navigation-menu/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { NavigationMenuContext } from './use-navigation-menu'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<NavigationMenuContext> = Symbol('xh-navigation-menu')\n\nexport function provideNavigationMenu(ctx: NavigationMenuContext): void {\n provide(KEY, ctx)\n}\n\nexport function useNavigationMenuContext(): NavigationMenuContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] NavigationMenu 部件必须用在 XhNavigationMenuRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAA2C,OAAO,oBAAoB;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/navigation-menu/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { NavigationMenuContext } from './use-navigation-menu'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<NavigationMenuContext> = Symbol.for('xh-navigation-menu')\n\nexport function provideNavigationMenu(ctx: NavigationMenuContext): void {\n provide(KEY, ctx)\n}\n\nexport function useNavigationMenuContext(): NavigationMenuContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] NavigationMenu 部件必须用在 XhNavigationMenuRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAA2C,OAAO,IAAI,oBAAoB;AAEhF,SAAgB,sBAAsB,KAAkC;CACtE,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,2BAAkD;CAChE,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,mDAAmD;CACrE,OAAO;AACT"}
|
|
@@ -104,13 +104,13 @@ declare const XhNavigationMenuRoot: import("vue").DefineComponent<import("vue").
|
|
|
104
104
|
"onValue-change"?: ((_details: import("@xihan-ui/headless").NavigationMenuValueChangeDetails) => any) | undefined;
|
|
105
105
|
"onUpdate:value"?: ((_value: string | null) => any) | undefined;
|
|
106
106
|
}>, {
|
|
107
|
-
size: Size;
|
|
108
107
|
value: string | null;
|
|
109
108
|
collection: NavigationMenuNode[];
|
|
110
109
|
defaultValue: string | null;
|
|
111
110
|
orientation: Orientation;
|
|
112
111
|
dir: Direction;
|
|
113
112
|
tone: Tone;
|
|
113
|
+
size: Size;
|
|
114
114
|
translations: Partial<NavigationMenuTranslations>;
|
|
115
115
|
loop: boolean;
|
|
116
116
|
delayDuration: number;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ComputedRef } from "vue";
|
|
2
|
+
import { NotificationApi, NotificationItemApi, NotificationOptions } from "@xihan-ui/headless";
|
|
3
|
+
//#region src/components/notification/context.d.ts
|
|
4
|
+
interface NotificationContext {
|
|
5
|
+
api: ComputedRef<NotificationApi>;
|
|
6
|
+
/** 入队并返回 id;同 id 已存在则就地改写,位置不动。 */
|
|
7
|
+
create: (options?: NotificationOptions) => string;
|
|
8
|
+
update: (id: string, options: Partial<NotificationOptions>) => void;
|
|
9
|
+
dismiss: (id: string) => void;
|
|
10
|
+
dismissAll: () => void;
|
|
11
|
+
}
|
|
12
|
+
interface NotificationItemContext {
|
|
13
|
+
api: ComputedRef<NotificationItemApi>;
|
|
14
|
+
}
|
|
15
|
+
declare function provideNotification(ctx: NotificationContext): void;
|
|
16
|
+
declare function useNotificationContext(): NotificationContext;
|
|
17
|
+
/** 注入队列上下文,不在队列内时返回 null 而非抛错。 */
|
|
18
|
+
declare function useNotificationContextOptional(): NotificationContext | null;
|
|
19
|
+
declare function provideNotificationItem(ctx: NotificationItemContext): void;
|
|
20
|
+
declare function useNotificationItemContext(): NotificationItemContext;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { NotificationContext, NotificationItemContext, provideNotification, provideNotificationItem, useNotificationContext, useNotificationContextOptional, useNotificationItemContext };
|
|
23
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","names":[],"sources":["../../../src/components/notification/context.ts"],"mappings":";;;UAIiB;EACf,KAAK,YAAY;;EAEjB,SAAS,UAAU;EACnB,SAAS,YAAY,SAAS,QAAQ;EACtC,UAAU;EACV;;UAGe;EACf,KAAK,YAAY;;iBAMH,oBAAoB,KAAK;iBAIzB,0BAA0B;;iBAQ1B,kCAAkC;iBAIlC,wBAAwB,KAAK;iBAI7B,8BAA8B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { inject, provide } from "vue";
|
|
2
|
+
//#region src/components/notification/context.ts
|
|
3
|
+
const KEY = Symbol.for("xh-notification");
|
|
4
|
+
const ITEM_KEY = Symbol.for("xh-notification-item");
|
|
5
|
+
function provideNotification(ctx) {
|
|
6
|
+
provide(KEY, ctx);
|
|
7
|
+
}
|
|
8
|
+
function useNotificationContext() {
|
|
9
|
+
const ctx = inject(KEY, null);
|
|
10
|
+
if (!ctx) throw new Error("[xh] Notification 部件必须用在 XhNotificationRoot 内");
|
|
11
|
+
return ctx;
|
|
12
|
+
}
|
|
13
|
+
/** 注入队列上下文,不在队列内时返回 null 而非抛错。 */
|
|
14
|
+
function useNotificationContextOptional() {
|
|
15
|
+
return inject(KEY, null);
|
|
16
|
+
}
|
|
17
|
+
function provideNotificationItem(ctx) {
|
|
18
|
+
provide(ITEM_KEY, ctx);
|
|
19
|
+
}
|
|
20
|
+
function useNotificationItemContext() {
|
|
21
|
+
const ctx = inject(ITEM_KEY, null);
|
|
22
|
+
if (!ctx) throw new Error("[xh] Notification 卡片部件必须用在 XhNotificationItem 内");
|
|
23
|
+
return ctx;
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { provideNotification, provideNotificationItem, useNotificationContext, useNotificationContextOptional, useNotificationItemContext };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/notification/context.ts"],"sourcesContent":["import type { NotificationApi, NotificationItemApi, NotificationOptions } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\nexport interface NotificationContext {\n api: ComputedRef<NotificationApi>\n /** 入队并返回 id;同 id 已存在则就地改写,位置不动。 */\n create: (options?: NotificationOptions) => string\n update: (id: string, options: Partial<NotificationOptions>) => void\n dismiss: (id: string) => void\n dismissAll: () => void\n}\n\nexport interface NotificationItemContext {\n api: ComputedRef<NotificationItemApi>\n}\n\nconst KEY: InjectionKey<NotificationContext> = Symbol.for('xh-notification')\nconst ITEM_KEY: InjectionKey<NotificationItemContext> = Symbol.for('xh-notification-item')\n\nexport function provideNotification(ctx: NotificationContext): void {\n provide(KEY, ctx)\n}\n\nexport function useNotificationContext(): NotificationContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] Notification 部件必须用在 XhNotificationRoot 内')\n return ctx\n}\n\n/** 注入队列上下文,不在队列内时返回 null 而非抛错。 */\nexport function useNotificationContextOptional(): NotificationContext | null {\n return inject(KEY, null)\n}\n\nexport function provideNotificationItem(ctx: NotificationItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useNotificationItemContext(): NotificationItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] Notification 卡片部件必须用在 XhNotificationItem 内')\n return ctx\n}\n"],"mappings":";;AAiBA,MAAM,MAAyC,OAAO,IAAI,iBAAiB;AAC3E,MAAM,WAAkD,OAAO,IAAI,sBAAsB;AAEzF,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;;AAGA,SAAgB,iCAA6D;CAC3E,OAAO,OAAO,KAAK,IAAI;AACzB;AAEA,SAAgB,wBAAwB,KAAoC;CAC1E,QAAQ,UAAU,GAAG;AACvB;AAEA,SAAgB,6BAAsD;CACpE,MAAM,MAAM,OAAO,UAAU,IAAI;CACjC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,iDAAiD;CACnE,OAAO;AACT"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { PayloadOf } from "../../runtime/payload.js";
|
|
2
|
+
import { PropType, SlotsType, VNode } from "vue";
|
|
3
|
+
import { NotificationItemApi, NotificationOptions, NotificationPlacement, NotificationRecord, NotificationSchema, NotificationTranslations, ResolvedNotification, ToastSchema, ToastType } from "@xihan-ui/headless";
|
|
4
|
+
//#region src/components/notification/notification.d.ts
|
|
5
|
+
type NotificationProps = NotificationSchema['props'];
|
|
6
|
+
/** 默认插槽的载荷:当前可见的通知队列与它的落位分组,以及入队、改写、关闭的命令。 */
|
|
7
|
+
interface NotificationRootSlotProps {
|
|
8
|
+
items: ResolvedNotification[];
|
|
9
|
+
placements: NotificationPlacement[];
|
|
10
|
+
count: number;
|
|
11
|
+
getItemsByPlacement: (placement: NotificationPlacement) => ResolvedNotification[];
|
|
12
|
+
create: (options?: NotificationOptions) => string;
|
|
13
|
+
update: (id: string, options: Partial<NotificationOptions>) => void;
|
|
14
|
+
dismiss: (id: string) => void;
|
|
15
|
+
dismissAll: () => void;
|
|
16
|
+
}
|
|
17
|
+
declare const XhNotificationRoot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
18
|
+
items: {
|
|
19
|
+
type: PropType<NotificationRecord[]>;
|
|
20
|
+
default: undefined;
|
|
21
|
+
};
|
|
22
|
+
defaultItems: {
|
|
23
|
+
type: PropType<NotificationRecord[]>;
|
|
24
|
+
default: undefined;
|
|
25
|
+
};
|
|
26
|
+
placement: {
|
|
27
|
+
type: PropType<NotificationPlacement>;
|
|
28
|
+
default: undefined;
|
|
29
|
+
};
|
|
30
|
+
max: {
|
|
31
|
+
type: NumberConstructor;
|
|
32
|
+
default: undefined;
|
|
33
|
+
};
|
|
34
|
+
gap: {
|
|
35
|
+
type: NumberConstructor;
|
|
36
|
+
default: undefined;
|
|
37
|
+
};
|
|
38
|
+
duration: {
|
|
39
|
+
type: NumberConstructor;
|
|
40
|
+
default: undefined;
|
|
41
|
+
};
|
|
42
|
+
removeDelay: {
|
|
43
|
+
type: NumberConstructor;
|
|
44
|
+
default: undefined;
|
|
45
|
+
};
|
|
46
|
+
pauseOnPageIdle: {
|
|
47
|
+
type: BooleanConstructor;
|
|
48
|
+
default: undefined;
|
|
49
|
+
};
|
|
50
|
+
translations: {
|
|
51
|
+
type: PropType<Partial<NotificationTranslations>>;
|
|
52
|
+
default: undefined;
|
|
53
|
+
};
|
|
54
|
+
}>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
55
|
+
[key: string]: any;
|
|
56
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
57
|
+
'items-change': (_details: PayloadOf<NotificationProps, "onItemsChange">) => true;
|
|
58
|
+
'update:items': (_items: PayloadOf<NotificationProps, "onItemsChange">["items"]) => true;
|
|
59
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
60
|
+
items: {
|
|
61
|
+
type: PropType<NotificationRecord[]>;
|
|
62
|
+
default: undefined;
|
|
63
|
+
};
|
|
64
|
+
defaultItems: {
|
|
65
|
+
type: PropType<NotificationRecord[]>;
|
|
66
|
+
default: undefined;
|
|
67
|
+
};
|
|
68
|
+
placement: {
|
|
69
|
+
type: PropType<NotificationPlacement>;
|
|
70
|
+
default: undefined;
|
|
71
|
+
};
|
|
72
|
+
max: {
|
|
73
|
+
type: NumberConstructor;
|
|
74
|
+
default: undefined;
|
|
75
|
+
};
|
|
76
|
+
gap: {
|
|
77
|
+
type: NumberConstructor;
|
|
78
|
+
default: undefined;
|
|
79
|
+
};
|
|
80
|
+
duration: {
|
|
81
|
+
type: NumberConstructor;
|
|
82
|
+
default: undefined;
|
|
83
|
+
};
|
|
84
|
+
removeDelay: {
|
|
85
|
+
type: NumberConstructor;
|
|
86
|
+
default: undefined;
|
|
87
|
+
};
|
|
88
|
+
pauseOnPageIdle: {
|
|
89
|
+
type: BooleanConstructor;
|
|
90
|
+
default: undefined;
|
|
91
|
+
};
|
|
92
|
+
translations: {
|
|
93
|
+
type: PropType<Partial<NotificationTranslations>>;
|
|
94
|
+
default: undefined;
|
|
95
|
+
};
|
|
96
|
+
}>> & Readonly<{
|
|
97
|
+
"onItems-change"?: ((_details: import("@xihan-ui/headless").NotificationItemsChangeDetails) => any) | undefined;
|
|
98
|
+
"onUpdate:items"?: ((_items: NotificationRecord[]) => any) | undefined;
|
|
99
|
+
}>, {
|
|
100
|
+
translations: Partial<NotificationTranslations>;
|
|
101
|
+
max: number;
|
|
102
|
+
placement: NotificationPlacement;
|
|
103
|
+
items: NotificationRecord[];
|
|
104
|
+
gap: number;
|
|
105
|
+
defaultItems: NotificationRecord[];
|
|
106
|
+
duration: number;
|
|
107
|
+
removeDelay: number;
|
|
108
|
+
pauseOnPageIdle: boolean;
|
|
109
|
+
}, SlotsType<{
|
|
110
|
+
default?: (props: NotificationRootSlotProps) => VNode[];
|
|
111
|
+
}>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
112
|
+
/** 默认插槽的载荷:这一组里逐条铺开的通知。 */
|
|
113
|
+
interface NotificationGroupSlotProps {
|
|
114
|
+
item: ResolvedNotification;
|
|
115
|
+
}
|
|
116
|
+
declare const XhNotificationGroup: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
117
|
+
placement: {
|
|
118
|
+
type: PropType<NotificationPlacement>;
|
|
119
|
+
default: undefined;
|
|
120
|
+
};
|
|
121
|
+
}>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
122
|
+
[key: string]: any;
|
|
123
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
124
|
+
placement: {
|
|
125
|
+
type: PropType<NotificationPlacement>;
|
|
126
|
+
default: undefined;
|
|
127
|
+
};
|
|
128
|
+
}>> & Readonly<{}>, {
|
|
129
|
+
placement: NotificationPlacement;
|
|
130
|
+
}, SlotsType<{
|
|
131
|
+
default?: (props: NotificationGroupSlotProps) => VNode[];
|
|
132
|
+
}>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
133
|
+
/** 单条卡片。生命周期复用 toast 那台机器:会自己消失的卡片,这一行为与消息来源无关。 */
|
|
134
|
+
declare const XhNotificationItem: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
135
|
+
id: {
|
|
136
|
+
type: StringConstructor;
|
|
137
|
+
default: undefined;
|
|
138
|
+
};
|
|
139
|
+
title: {
|
|
140
|
+
type: StringConstructor;
|
|
141
|
+
default: undefined;
|
|
142
|
+
};
|
|
143
|
+
description: {
|
|
144
|
+
type: StringConstructor;
|
|
145
|
+
default: undefined;
|
|
146
|
+
};
|
|
147
|
+
type: {
|
|
148
|
+
type: PropType<ToastType>;
|
|
149
|
+
default: undefined;
|
|
150
|
+
};
|
|
151
|
+
duration: {
|
|
152
|
+
type: NumberConstructor;
|
|
153
|
+
default: undefined;
|
|
154
|
+
};
|
|
155
|
+
removeDelay: {
|
|
156
|
+
type: NumberConstructor;
|
|
157
|
+
default: undefined;
|
|
158
|
+
};
|
|
159
|
+
closable: {
|
|
160
|
+
type: BooleanConstructor;
|
|
161
|
+
default: undefined;
|
|
162
|
+
};
|
|
163
|
+
pauseOnPageIdle: {
|
|
164
|
+
type: BooleanConstructor;
|
|
165
|
+
default: undefined;
|
|
166
|
+
};
|
|
167
|
+
translations: {
|
|
168
|
+
type: PropType<Partial<NotificationTranslations>>;
|
|
169
|
+
default: undefined;
|
|
170
|
+
};
|
|
171
|
+
}>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
172
|
+
[key: string]: any;
|
|
173
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
174
|
+
'status-change': (_details: PayloadOf<ToastSchema["props"], "onStatusChange">) => true;
|
|
175
|
+
action: () => true;
|
|
176
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
177
|
+
id: {
|
|
178
|
+
type: StringConstructor;
|
|
179
|
+
default: undefined;
|
|
180
|
+
};
|
|
181
|
+
title: {
|
|
182
|
+
type: StringConstructor;
|
|
183
|
+
default: undefined;
|
|
184
|
+
};
|
|
185
|
+
description: {
|
|
186
|
+
type: StringConstructor;
|
|
187
|
+
default: undefined;
|
|
188
|
+
};
|
|
189
|
+
type: {
|
|
190
|
+
type: PropType<ToastType>;
|
|
191
|
+
default: undefined;
|
|
192
|
+
};
|
|
193
|
+
duration: {
|
|
194
|
+
type: NumberConstructor;
|
|
195
|
+
default: undefined;
|
|
196
|
+
};
|
|
197
|
+
removeDelay: {
|
|
198
|
+
type: NumberConstructor;
|
|
199
|
+
default: undefined;
|
|
200
|
+
};
|
|
201
|
+
closable: {
|
|
202
|
+
type: BooleanConstructor;
|
|
203
|
+
default: undefined;
|
|
204
|
+
};
|
|
205
|
+
pauseOnPageIdle: {
|
|
206
|
+
type: BooleanConstructor;
|
|
207
|
+
default: undefined;
|
|
208
|
+
};
|
|
209
|
+
translations: {
|
|
210
|
+
type: PropType<Partial<NotificationTranslations>>;
|
|
211
|
+
default: undefined;
|
|
212
|
+
};
|
|
213
|
+
}>> & Readonly<{
|
|
214
|
+
"onStatus-change"?: ((_details: import("@xihan-ui/headless").ToastStatusChangeDetails) => any) | undefined;
|
|
215
|
+
onAction?: (() => any) | undefined;
|
|
216
|
+
}>, {
|
|
217
|
+
type: ToastType;
|
|
218
|
+
title: string;
|
|
219
|
+
translations: Partial<NotificationTranslations>;
|
|
220
|
+
closable: boolean;
|
|
221
|
+
duration: number;
|
|
222
|
+
removeDelay: number;
|
|
223
|
+
pauseOnPageIdle: boolean;
|
|
224
|
+
id: string;
|
|
225
|
+
description: string;
|
|
226
|
+
}, SlotsType<{
|
|
227
|
+
default?: (props: {
|
|
228
|
+
item: NotificationItemApi;
|
|
229
|
+
}) => VNode[];
|
|
230
|
+
}>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
231
|
+
/** 类型指示符。作者不写内容时由皮肤按 data-type 画一枚兜底字形。 */
|
|
232
|
+
declare const XhNotificationItemIndicator: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
233
|
+
[key: string]: any;
|
|
234
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
235
|
+
declare const XhNotificationItemTitle: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
236
|
+
[key: string]: any;
|
|
237
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
238
|
+
declare const XhNotificationItemDescription: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
239
|
+
[key: string]: any;
|
|
240
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
241
|
+
declare const XhNotificationItemActionTrigger: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
242
|
+
[key: string]: any;
|
|
243
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
244
|
+
declare const XhNotificationItemCloseTrigger: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
245
|
+
[key: string]: any;
|
|
246
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
247
|
+
//#endregion
|
|
248
|
+
export { NotificationGroupSlotProps, NotificationRootSlotProps, XhNotificationGroup, XhNotificationItem, XhNotificationItemActionTrigger, XhNotificationItemCloseTrigger, XhNotificationItemDescription, XhNotificationItemIndicator, XhNotificationItemTitle, XhNotificationRoot };
|
|
249
|
+
//# sourceMappingURL=notification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification.d.ts","names":[],"sources":["../../../src/components/notification/notification.ts"],"mappings":";;;;KAQK,oBAAoB;;UAGR;EACf,OAAO;EACP,YAAY;EACZ;EACA,sBAAsB,WAAW,0BAA0B;EAC3D,SAAS,UAAU;EACnB,SAAS,YAAY,SAAS,QAAQ;EACtC,UAAU;EACV;;cAGW,kCAAkB,8BAAA;;IAIH,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;IACX,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;IAMN,MAAA,SAAS,QAAQ;;;;;;EAItB,iBAAA,UAAA,UAAU;EACZ,iBAAA,QAAA,UAAU;;;IAbX,MAAA,SAAS;;;;IACF,MAAA,SAAS;;;;IACX,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;IAMN,MAAA,SAAS,QAAQ;;;;;;;;;;;;;;;;;EAQvC,WAAC,OAAO,8BAA8B;kCAqBlD;;UAGe;EACf,MAAM;;cAGK,mCAAmB,8BAAA;;IAIC,MAAA,SAAS;;;;;;;IAAT,MAAA,SAAS;;;;;;EAG5B,WAAC,OAAO,+BAA+B;kCAkBnD;;cAGW,kCAAkB,8BAAA;;;;;;;;;;;;;;IAOH,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;IAKD,MAAA,SAAS,QAAQ;;;;;;EAGrB,kBAAA,UAAA,UAAU;;;;;;;;;;;;;;;;IARd,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;IAKD,MAAA,SAAS,QAAQ;;;;;;;;;;;;;;;;;EAOvC,WAAC;IAAS,MAAM;QAA0B;kCAiBtD;;cAGW,2CAA2B,0BAAA,oBAAA,4BAAA;;8BAMtC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAWlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,6CAA6B,0BAAA,oBAAA,4BAAA;;8BAUxC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,+CAA+B,0BAAA,oBAAA,4BAAA;;8BAM1C,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,8CAA8B,0BAAA,oBAAA,4BAAA;;8BAMzC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { withXhConfig } from "../../config/config.js";
|
|
2
|
+
import { provideNotification, provideNotificationItem, useNotificationContext, useNotificationItemContext } from "./context.js";
|
|
3
|
+
import { useNotification, useNotificationItem } from "./use-notification.js";
|
|
4
|
+
import { Fragment, defineComponent, h } from "vue";
|
|
5
|
+
//#region src/components/notification/notification.ts
|
|
6
|
+
const XhNotificationRoot = defineComponent({
|
|
7
|
+
name: "XhNotificationRoot",
|
|
8
|
+
props: {
|
|
9
|
+
items: {
|
|
10
|
+
type: Array,
|
|
11
|
+
default: void 0
|
|
12
|
+
},
|
|
13
|
+
defaultItems: {
|
|
14
|
+
type: Array,
|
|
15
|
+
default: void 0
|
|
16
|
+
},
|
|
17
|
+
placement: {
|
|
18
|
+
type: String,
|
|
19
|
+
default: void 0
|
|
20
|
+
},
|
|
21
|
+
max: {
|
|
22
|
+
type: Number,
|
|
23
|
+
default: void 0
|
|
24
|
+
},
|
|
25
|
+
gap: {
|
|
26
|
+
type: Number,
|
|
27
|
+
default: void 0
|
|
28
|
+
},
|
|
29
|
+
duration: {
|
|
30
|
+
type: Number,
|
|
31
|
+
default: void 0
|
|
32
|
+
},
|
|
33
|
+
removeDelay: {
|
|
34
|
+
type: Number,
|
|
35
|
+
default: void 0
|
|
36
|
+
},
|
|
37
|
+
pauseOnPageIdle: {
|
|
38
|
+
type: Boolean,
|
|
39
|
+
default: void 0
|
|
40
|
+
},
|
|
41
|
+
translations: {
|
|
42
|
+
type: Object,
|
|
43
|
+
default: void 0
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
emits: {
|
|
47
|
+
"items-change": (_details) => true,
|
|
48
|
+
"update:items": (_items) => true
|
|
49
|
+
},
|
|
50
|
+
slots: Object,
|
|
51
|
+
setup(props, { slots, emit }) {
|
|
52
|
+
const notify = (details) => {
|
|
53
|
+
emit("items-change", details);
|
|
54
|
+
emit("update:items", details.items);
|
|
55
|
+
};
|
|
56
|
+
const ctx = useNotification(withXhConfig("notification", props), notify);
|
|
57
|
+
provideNotification(ctx);
|
|
58
|
+
return () => h("div", ctx.api.value.getRootProps(), slots.default?.({
|
|
59
|
+
items: ctx.api.value.visibleNotifications,
|
|
60
|
+
placements: ctx.api.value.placements,
|
|
61
|
+
count: ctx.api.value.count,
|
|
62
|
+
getItemsByPlacement: ctx.api.value.getItemsByPlacement,
|
|
63
|
+
create: ctx.create,
|
|
64
|
+
update: ctx.update,
|
|
65
|
+
dismiss: ctx.dismiss,
|
|
66
|
+
dismissAll: ctx.dismissAll
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
const XhNotificationGroup = defineComponent({
|
|
71
|
+
name: "XhNotificationGroup",
|
|
72
|
+
props: { placement: {
|
|
73
|
+
type: String,
|
|
74
|
+
default: void 0
|
|
75
|
+
} },
|
|
76
|
+
slots: Object,
|
|
77
|
+
setup(props, { slots }) {
|
|
78
|
+
const ctx = useNotificationContext();
|
|
79
|
+
return () => {
|
|
80
|
+
const api = ctx.api.value;
|
|
81
|
+
const groupProps = api.getGroupProps({ placement: props.placement });
|
|
82
|
+
const placement = groupProps["data-placement"];
|
|
83
|
+
const list = api.getItemsByPlacement(placement);
|
|
84
|
+
return h("div", groupProps, slots.default ? list.map((item) => h(Fragment, { key: item.id }, slots.default({ item }))) : void 0);
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
/** 单条卡片。生命周期复用 toast 那台机器:会自己消失的卡片,这一行为与消息来源无关。 */
|
|
89
|
+
const XhNotificationItem = defineComponent({
|
|
90
|
+
name: "XhNotificationItem",
|
|
91
|
+
props: {
|
|
92
|
+
id: {
|
|
93
|
+
type: String,
|
|
94
|
+
default: void 0
|
|
95
|
+
},
|
|
96
|
+
title: {
|
|
97
|
+
type: String,
|
|
98
|
+
default: void 0
|
|
99
|
+
},
|
|
100
|
+
description: {
|
|
101
|
+
type: String,
|
|
102
|
+
default: void 0
|
|
103
|
+
},
|
|
104
|
+
type: {
|
|
105
|
+
type: String,
|
|
106
|
+
default: void 0
|
|
107
|
+
},
|
|
108
|
+
duration: {
|
|
109
|
+
type: Number,
|
|
110
|
+
default: void 0
|
|
111
|
+
},
|
|
112
|
+
removeDelay: {
|
|
113
|
+
type: Number,
|
|
114
|
+
default: void 0
|
|
115
|
+
},
|
|
116
|
+
closable: {
|
|
117
|
+
type: Boolean,
|
|
118
|
+
default: void 0
|
|
119
|
+
},
|
|
120
|
+
pauseOnPageIdle: {
|
|
121
|
+
type: Boolean,
|
|
122
|
+
default: void 0
|
|
123
|
+
},
|
|
124
|
+
translations: {
|
|
125
|
+
type: Object,
|
|
126
|
+
default: void 0
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
emits: {
|
|
130
|
+
"status-change": (_details) => true,
|
|
131
|
+
"action": () => true
|
|
132
|
+
},
|
|
133
|
+
slots: Object,
|
|
134
|
+
setup(props, { slots, emit }) {
|
|
135
|
+
const ctx = useNotificationItem(withXhConfig("notification", props), (details) => emit("status-change", details), () => emit("action"));
|
|
136
|
+
provideNotificationItem(ctx);
|
|
137
|
+
return () => h("div", ctx.api.value.getItemProps(), slots.default?.({ item: ctx.api.value }));
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
/** 类型指示符。作者不写内容时由皮肤按 data-type 画一枚兜底字形。 */
|
|
141
|
+
const XhNotificationItemIndicator = defineComponent({
|
|
142
|
+
name: "XhNotificationItemIndicator",
|
|
143
|
+
setup(_, { slots }) {
|
|
144
|
+
const ctx = useNotificationItemContext();
|
|
145
|
+
return () => h("span", ctx.api.value.getItemIndicatorProps(), slots.default?.());
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
const XhNotificationItemTitle = defineComponent({
|
|
149
|
+
name: "XhNotificationItemTitle",
|
|
150
|
+
setup(_, { slots }) {
|
|
151
|
+
const ctx = useNotificationItemContext();
|
|
152
|
+
return () => h("div", ctx.api.value.getItemTitleProps(), slots.default?.() ?? ctx.api.value.title);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
const XhNotificationItemDescription = defineComponent({
|
|
156
|
+
name: "XhNotificationItemDescription",
|
|
157
|
+
setup(_, { slots }) {
|
|
158
|
+
const ctx = useNotificationItemContext();
|
|
159
|
+
return () => h("div", ctx.api.value.getItemDescriptionProps(), slots.default?.() ?? ctx.api.value.description);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
const XhNotificationItemActionTrigger = defineComponent({
|
|
163
|
+
name: "XhNotificationItemActionTrigger",
|
|
164
|
+
setup(_, { slots }) {
|
|
165
|
+
const ctx = useNotificationItemContext();
|
|
166
|
+
return () => h("button", ctx.api.value.getItemActionTriggerProps(), slots.default?.());
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
const XhNotificationItemCloseTrigger = defineComponent({
|
|
170
|
+
name: "XhNotificationItemCloseTrigger",
|
|
171
|
+
setup(_, { slots }) {
|
|
172
|
+
const ctx = useNotificationItemContext();
|
|
173
|
+
return () => h("button", ctx.api.value.getItemCloseTriggerProps(), slots.default?.());
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
//#endregion
|
|
177
|
+
export { XhNotificationGroup, XhNotificationItem, XhNotificationItemActionTrigger, XhNotificationItemCloseTrigger, XhNotificationItemDescription, XhNotificationItemIndicator, XhNotificationItemTitle, XhNotificationRoot };
|
|
178
|
+
|
|
179
|
+
//# sourceMappingURL=notification.js.map
|