@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":"context-menu.js","names":["mergeVueProps","mergeProps"],"sources":["../../../src/components/context-menu/context-menu.ts"],"sourcesContent":["import type { ContextMenuApi, ContextMenuGroupProps, ContextMenuItemProps, ContextMenuNode, ContextMenuNodeMeta, ContextMenuSchema, MenuApi } from '@xihan-ui/headless'\nimport type { Direction, Placement, Size, Tone } from '@xihan-ui/kernel'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { mergeProps } from '@xihan-ui/kernel'\nimport { computed, defineComponent, h, mergeProps as mergeVueProps, onBeforeUnmount, ref, Teleport, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { mergeIntoChild } from '../../runtime/as-child'\nimport { provideMenu, provideMenuChain, useMenuContext } from '../menu/context'\nimport { useMenu } from '../menu/use-menu'\nimport {\n provideContextMenu,\n provideContextMenuChain,\n provideContextMenuGroup,\n provideContextMenuItem,\n provideContextMenuSub,\n useContextMenuChain,\n useContextMenuContext,\n useContextMenuGroupContext,\n useContextMenuItemContext,\n useContextMenuSubContext,\n} from './context'\nimport { useContextMenu } from './use-context-menu'\n\ntype ContextMenuProps = ContextMenuSchema['props']\n\n/** 默认插槽的载荷:右键菜单的展开态与锚点坐标,以及开合、按坐标展开的命令。 */\nexport type ContextMenuRootSlotProps = Pick<ContextMenuApi, 'open' | 'point' | 'setOpen' | 'openAt'>\n\n/** 子菜单默认插槽的载荷:这一层子菜单自己的展开态与开合命令。 */\nexport type ContextMenuSubSlotProps = Pick<MenuApi, 'open' | 'setOpen'>\n\nexport const XhContextMenuRoot = defineComponent({\n name: 'XhContextMenuRoot',\n // 缺省值由 connect 与机器给出,这里一律 default: undefined\n props: {\n collection: { type: Array as PropType<ContextMenuNode[]>, default: undefined },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n placement: { type: String as PropType<Placement>, default: undefined },\n offset: { type: Number, default: undefined },\n loop: { type: Boolean, default: undefined },\n typeahead: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<ContextMenuProps['translations']>, default: undefined },\n dir: { type: String as PropType<Direction>, default: undefined },\n longPressDelay: { type: Number, default: undefined },\n tone: { type: String as PropType<Tone>, default: undefined },\n size: { type: String as PropType<Size>, default: undefined },\n },\n // open-change 携带 { open }、select 携带 { value },update:open 携带裸布尔\n emits: {\n 'open-change': (_details: PayloadOf<ContextMenuProps, 'onOpenChange'>) => true,\n 'select': (_details: PayloadOf<ContextMenuProps, 'onSelect'>) => true,\n 'update:open': (_open: PayloadOf<ContextMenuProps, 'onOpenChange'>['open']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: ContextMenuRootSlotProps) => VNode[]\n trigger?: () => VNode[]\n item?: (node: ContextMenuNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit, expose }) {\n const notifyOpen: ContextMenuProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const notifySelect: ContextMenuProps['onSelect'] = details => emit('select', details)\n const ctx = useContextMenu(withXhConfig('context-menu', props) as ContextMenuProps, notifyOpen, notifySelect)\n provideContextMenu(ctx)\n // 菜单钉在坐标上,坐标只能由 openAt 交进来。默认插槽那条路从载荷里拿,\n // 只交 collection 的那条路没有载荷,所以同一组命令也从实例上暴露一份。\n expose({\n openAt: (x: number, y: number) => ctx.api.value.openAt(x, y),\n setOpen: (open: boolean) => ctx.api.value.setOpen(open),\n get open() {\n return ctx.api.value.open\n },\n get point() {\n return ctx.api.value.point\n },\n })\n // 子菜单任意层级的选中都汇到根:先发根的 select 再关根,各级随父关闭级联收起\n provideContextMenuChain({\n notifySelect: (details) => {\n emit('select', details)\n ctx.api.value.setOpen(false)\n },\n })\n return () => h(\n 'div',\n ctx.api.value.getRootProps() as Record<string, unknown>,\n slots.default\n ? slots.default({\n open: ctx.api.value.open,\n point: ctx.api.value.point,\n setOpen: ctx.api.value.setOpen,\n openAt: ctx.api.value.openAt,\n })\n : props.collection\n ? renderDefaultTree(ctx.api.value.collection, slots.trigger?.() ?? null, slots.item)\n : [],\n )\n },\n})\n\nexport const XhContextMenuTrigger = defineComponent({\n name: 'XhContextMenuTrigger',\n props: {\n /** 借用作者的子节点当触发器,不再渲染自己的包裹元素;子节点须恰好一个。 */\n asChild: Boolean,\n },\n setup(props, { slots }) {\n const ctx = useContextMenuContext()\n // 触发区渲染为 div,语义由 connect 打上的 ARIA 属性给出\n return () => {\n const attrs = {\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n }\n const children = slots.default?.()\n // asChild:把触发器属性合到作者的节点上,不再自己渲染包裹元素\n if (props.asChild) {\n const merged = mergeIntoChild(children, attrs, 'context-menu')\n if (merged)\n return merged\n }\n return h('div', attrs, children)\n }\n },\n})\n\nexport const XhContextMenuPositioner = defineComponent({\n name: 'XhContextMenuPositioner',\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 positioner 上\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n const ctx = useContextMenuContext()\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => h(Teleport, { to: ctx.portalTarget.value }, [\n h('div', {\n ...mergeVueProps(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 XhContextMenuContent = defineComponent({\n name: 'XhContextMenuContent',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n return () => h('div', {\n ...ctx.api.value.getContentProps() as Record<string, unknown>,\n // 收起跟着退场闸门走:皮肤刻意没给 content 补 [hidden]{display:none}(补了退场\n // 就一帧都播不出来),所以真正的收起落成内联 display——节点始终留在原地\n style: ctx.visible.value ? undefined : { display: 'none' },\n ref: (el: unknown) => { ctx.contentRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhContextMenuGroup = defineComponent({\n name: 'XhContextMenuGroup',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useContextMenuContext()\n const group = computed<ContextMenuGroupProps>(() => ({ value: props.value }))\n provideContextMenuGroup({ group })\n return () => h('div', ctx.api.value.getGroupProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuGroupLabel = defineComponent({\n name: 'XhContextMenuGroupLabel',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { group } = useContextMenuGroupContext()\n return () => h('span', ctx.api.value.getGroupLabelProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuItem = defineComponent({\n name: 'XhContextMenuItem',\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 = useContextMenuContext()\n const item = computed<ContextMenuItemProps>(() => ({ value: props.value, disabled: props.disabled }))\n provideContextMenuItem({ 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 // 根已停机时不再送事件\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\n/**\n * 右键菜单里的子菜单:子层跑一台 submenu 模式的 menu 机器,触发条目由\n * XhContextMenuSubTrigger 渲染成「父层条目 + 子层触发器」的双重身份。\n * 子层内部用 XhMenu 系部件(再往深嵌套即 menu 套 menu)。本身不渲染节点。\n */\nexport const XhContextMenuSub = defineComponent({\n name: 'XhContextMenuSub',\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 /** 文字方向;缺省继承父层。子层被搬到浮层落点,继承不到父层的方向。 */\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 hoverCloseDelay: { type: Number, default: undefined },\n },\n slots: Object as SlotsType<{\n default?: (props: ContextMenuSubSlotProps) => VNode[]\n }>,\n setup(props, { slots }) {\n const parent = useContextMenuContext()\n const chain = useContextMenuChain()\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 details => chain.notifySelect(details),\n )\n // 子树内的 XhMenu 系部件都归子机器\n provideMenu(sub)\n // 子层里还能再嵌一层 XhMenuSub:那一层要往上找选中汇总的链,\n // 而链只在 XhMenuRoot 里 provide 过,右键菜单这一支得自己接上\n provideMenuChain({ notifySelect: details => chain.notifySelect(details) })\n provideContextMenuSub({ parent, value: props.value, disabled: props.disabled })\n // 父层收起(Escape、外点、选中)时本层跟着收,层层传导\n watch(() => parent.api.value.open, (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 XhContextMenuSubTrigger = defineComponent({\n name: 'XhContextMenuSubTrigger',\n setup(_, { slots }) {\n const handle = useContextMenuSubContext()\n const sub = useMenuContext()\n return () => h('div', {\n // 合并序=子先父后:父层的 data-scope/data-part 胜出,父层的方向键与选中照常认它\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\nexport const XhContextMenuItemText = defineComponent({\n name: 'XhContextMenuItemText',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { item } = useContextMenuItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuItemIndicator = defineComponent({\n name: 'XhContextMenuItemIndicator',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { item } = useContextMenuItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuSeparator = defineComponent({\n name: 'XhContextMenuSeparator',\n setup() {\n const ctx = useContextMenuContext()\n return () => h('div', ctx.api.value.getSeparatorProps() as Record<string, unknown>)\n },\n})\n\nexport const XhContextMenuArrow = defineComponent({\n name: 'XhContextMenuArrow',\n setup() {\n const ctx = useContextMenuContext()\n return () => h('div', ctx.api.value.getArrowProps() as Record<string, unknown>)\n },\n})\n\n/** 一段连续的同组条目;不分组的条目各自单独成段。 */\ntype NodeRun = [ContextMenuNodeMeta, ...ContextMenuNodeMeta[]]\n\n/**\n * 没写默认插槽时按 collection 铺开的整套结构,作者只交数据。\n * 与手写部件产出的 DOM 完全一致,要改结构就写默认插槽,行为不变。\n * 触发区里放什么是作者的事,由 trigger 插槽给出。\n */\nfunction renderDefaultTree(\n collection: readonly ContextMenuNodeMeta[],\n trigger: (VNode | string)[] | null,\n itemSlot?: (node: ContextMenuNodeMeta) => VNode[],\n): VNode[] {\n return [\n h(XhContextMenuTrigger, null, () => trigger ?? []),\n h(XhContextMenuPositioner, null, () => [\n h(XhContextMenuContent, null, () => renderNodes(collection, itemSlot)),\n ]),\n ]\n}\n\n/** 相邻同 group 的条目并成一段,没写 group 的各自成段。 */\nfunction groupRuns(collection: readonly ContextMenuNodeMeta[]): NodeRun[] {\n const runs: NodeRun[] = []\n for (const meta of collection) {\n const last = runs.at(-1)\n if (last && meta.group != null && last[0].group === meta.group)\n last.push(meta)\n else\n runs.push([meta])\n }\n return runs\n}\n\n/** content 的内容:分组段铺成 group,段首的分隔线落在 group 外面。 */\nfunction renderNodes(\n collection: readonly ContextMenuNodeMeta[],\n itemSlot?: (node: ContextMenuNodeMeta) => VNode[],\n): VNode[] {\n return groupRuns(collection).flatMap((run, runIndex) => {\n const head = run[0]\n // 首条上的标记不产出分隔线:菜单开头不留一道空隔\n const lead = runIndex > 0 && head.separatorBefore\n ? [h(XhContextMenuSeparator, { key: `separator:${head.value}` })]\n : []\n if (head.group == null)\n return [...lead, renderItem(head, itemSlot)]\n const groupLabel = run.find(node => node.groupLabel != null)?.groupLabel ?? null\n return [\n ...lead,\n h(XhContextMenuGroup, { key: `group:${head.group}`, value: head.group }, () => [\n ...(groupLabel != null ? [h(XhContextMenuGroupLabel, null, () => groupLabel)] : []),\n ...run.flatMap((node, index) => [\n ...(index > 0 && node.separatorBefore ? [h(XhContextMenuSeparator, { key: `separator:${node.value}` })] : []),\n renderItem(node, itemSlot),\n ]),\n ]),\n ]\n })\n}\n\n/** 单个条目:标记位排在文字前面,没给标记位就不铺那个部件。 */\nfunction renderItem(\n meta: ContextMenuNodeMeta,\n itemSlot?: (node: ContextMenuNodeMeta) => VNode[],\n): VNode {\n return h(XhContextMenuItem, { key: meta.value, value: meta.value }, () => [\n ...(meta.indicator != null ? [h(XhContextMenuItemIndicator, null, () => meta.indicator)] : []),\n h(XhContextMenuItemText, null, () => itemSlot?.(meta) ?? meta.label),\n ])\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"context-menu.js","names":["mergeVueProps","mergeProps"],"sources":["../../../src/components/context-menu/context-menu.ts"],"sourcesContent":["import type { ContextMenuApi, ContextMenuGroupProps, ContextMenuItemProps, ContextMenuNode, ContextMenuNodeMeta, ContextMenuSchema, MenuApi } from '@xihan-ui/headless'\nimport type { Direction, Placement, Size, Tone } from '@xihan-ui/kernel'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { mergeProps } from '@xihan-ui/kernel'\nimport { computed, defineComponent, h, mergeProps as mergeVueProps, onBeforeUnmount, ref, Teleport, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { mergeIntoChild } from '../../runtime/as-child'\nimport { useScrollbars } from '../../runtime/use-scrollbars'\nimport { provideMenu, provideMenuChain, useMenuContext } from '../menu/context'\nimport { useMenu } from '../menu/use-menu'\nimport {\n provideContextMenu,\n provideContextMenuChain,\n provideContextMenuGroup,\n provideContextMenuItem,\n provideContextMenuSub,\n useContextMenuChain,\n useContextMenuContext,\n useContextMenuGroupContext,\n useContextMenuItemContext,\n useContextMenuSubContext,\n} from './context'\nimport { useContextMenu } from './use-context-menu'\n\ntype ContextMenuProps = ContextMenuSchema['props']\n\n/** 默认插槽的载荷:右键菜单的展开态与锚点坐标,以及开合、按坐标展开的命令。 */\nexport type ContextMenuRootSlotProps = Pick<ContextMenuApi, 'open' | 'point' | 'setOpen' | 'openAt'>\n\n/** 子菜单默认插槽的载荷:这一层子菜单自己的展开态与开合命令。 */\nexport type ContextMenuSubSlotProps = Pick<MenuApi, 'open' | 'setOpen'>\n\nexport const XhContextMenuRoot = defineComponent({\n name: 'XhContextMenuRoot',\n // 缺省值由 connect 与机器给出,这里一律 default: undefined\n props: {\n collection: { type: Array as PropType<ContextMenuNode[]>, default: undefined },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n placement: { type: String as PropType<Placement>, default: undefined },\n offset: { type: Number, default: undefined },\n loop: { type: Boolean, default: undefined },\n typeahead: { type: Boolean, default: undefined },\n translations: { type: Object as PropType<ContextMenuProps['translations']>, default: undefined },\n dir: { type: String as PropType<Direction>, default: undefined },\n longPressDelay: { type: Number, default: undefined },\n tone: { type: String as PropType<Tone>, default: undefined },\n size: { type: String as PropType<Size>, default: undefined },\n },\n // open-change 携带 { open }、select 携带 { value },update:open 携带裸布尔\n emits: {\n 'open-change': (_details: PayloadOf<ContextMenuProps, 'onOpenChange'>) => true,\n 'select': (_details: PayloadOf<ContextMenuProps, 'onSelect'>) => true,\n 'update:open': (_open: PayloadOf<ContextMenuProps, 'onOpenChange'>['open']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: ContextMenuRootSlotProps) => VNode[]\n trigger?: () => VNode[]\n item?: (node: ContextMenuNodeMeta) => VNode[]\n }>,\n setup(props, { slots, emit, expose }) {\n const notifyOpen: ContextMenuProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const notifySelect: ContextMenuProps['onSelect'] = details => emit('select', details)\n const ctx = useContextMenu(withXhConfig('context-menu', props) as ContextMenuProps, notifyOpen, notifySelect)\n provideContextMenu(ctx)\n // 菜单钉在坐标上,坐标只能由 openAt 交进来。默认插槽那条路从载荷里拿,\n // 只交 collection 的那条路没有载荷,所以同一组命令也从实例上暴露一份。\n expose({\n openAt: (x: number, y: number) => ctx.api.value.openAt(x, y),\n setOpen: (open: boolean) => ctx.api.value.setOpen(open),\n get open() {\n return ctx.api.value.open\n },\n get point() {\n return ctx.api.value.point\n },\n })\n // 子菜单任意层级的选中都汇到根:先发根的 select 再关根,各级随父关闭级联收起\n provideContextMenuChain({\n notifySelect: (details) => {\n emit('select', details)\n ctx.api.value.setOpen(false)\n },\n })\n return () => h(\n 'div',\n ctx.api.value.getRootProps() as Record<string, unknown>,\n slots.default\n ? slots.default({\n open: ctx.api.value.open,\n point: ctx.api.value.point,\n setOpen: ctx.api.value.setOpen,\n openAt: ctx.api.value.openAt,\n })\n : props.collection\n ? renderDefaultTree(ctx.api.value.collection, slots.trigger?.() ?? null, slots.item)\n : [],\n )\n },\n})\n\nexport const XhContextMenuTrigger = defineComponent({\n name: 'XhContextMenuTrigger',\n props: {\n /** 借用作者的子节点当触发器,不再渲染自己的包裹元素;子节点须恰好一个。 */\n asChild: Boolean,\n },\n setup(props, { slots }) {\n const ctx = useContextMenuContext()\n // 触发区渲染为 div,语义由 connect 打上的 ARIA 属性给出\n return () => {\n const attrs = {\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n }\n const children = slots.default?.()\n // asChild:把触发器属性合到作者的节点上,不再自己渲染包裹元素\n if (props.asChild) {\n const merged = mergeIntoChild(children, attrs, 'context-menu')\n if (merged)\n return merged\n }\n return h('div', attrs, children)\n }\n },\n})\n\nexport const XhContextMenuPositioner = defineComponent({\n name: 'XhContextMenuPositioner',\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 positioner 上\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n const ctx = useContextMenuContext()\n // 条目列表的自绘条:与 content 同级、绝对定位不占布局,壳是这层已经 fixed 的 positioner\n const bars = useScrollbars({ scrollable: () => ctx.contentRef.value })\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => h(Teleport, { to: ctx.portalTarget.value }, [\n h('div', {\n ...mergeVueProps(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 XhContextMenuContent = defineComponent({\n name: 'XhContextMenuContent',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n return () => h('div', {\n ...ctx.api.value.getContentProps() as Record<string, unknown>,\n // 收起跟着退场闸门走:皮肤刻意没给 content 补 [hidden]{display:none}(补了退场\n // 就一帧都播不出来),所以真正的收起落成内联 display——节点始终留在原地\n style: ctx.visible.value ? undefined : { display: 'none' },\n ref: (el: unknown) => { ctx.contentRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhContextMenuGroup = defineComponent({\n name: 'XhContextMenuGroup',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useContextMenuContext()\n const group = computed<ContextMenuGroupProps>(() => ({ value: props.value }))\n provideContextMenuGroup({ group })\n return () => h('div', ctx.api.value.getGroupProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuGroupLabel = defineComponent({\n name: 'XhContextMenuGroupLabel',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { group } = useContextMenuGroupContext()\n return () => h('span', ctx.api.value.getGroupLabelProps(group.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuItem = defineComponent({\n name: 'XhContextMenuItem',\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 = useContextMenuContext()\n const item = computed<ContextMenuItemProps>(() => ({ value: props.value, disabled: props.disabled }))\n provideContextMenuItem({ 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 // 根已停机时不再送事件\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\n/**\n * 右键菜单里的子菜单:子层跑一台 submenu 模式的 menu 机器,触发条目由\n * XhContextMenuSubTrigger 渲染成「父层条目 + 子层触发器」的双重身份。\n * 子层内部用 XhMenu 系部件(再往深嵌套即 menu 套 menu)。本身不渲染节点。\n */\nexport const XhContextMenuSub = defineComponent({\n name: 'XhContextMenuSub',\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 /** 文字方向;缺省继承父层。子层被搬到浮层落点,继承不到父层的方向。 */\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 hoverCloseDelay: { type: Number, default: undefined },\n },\n slots: Object as SlotsType<{\n default?: (props: ContextMenuSubSlotProps) => VNode[]\n }>,\n setup(props, { slots }) {\n const parent = useContextMenuContext()\n const chain = useContextMenuChain()\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 details => chain.notifySelect(details),\n )\n // 子树内的 XhMenu 系部件都归子机器\n provideMenu(sub)\n // 子层里还能再嵌一层 XhMenuSub:那一层要往上找选中汇总的链,\n // 而链只在 XhMenuRoot 里 provide 过,右键菜单这一支得自己接上\n provideMenuChain({ notifySelect: details => chain.notifySelect(details) })\n provideContextMenuSub({ parent, value: props.value, disabled: props.disabled })\n // 父层收起(Escape、外点、选中)时本层跟着收,层层传导\n watch(() => parent.api.value.open, (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 XhContextMenuSubTrigger = defineComponent({\n name: 'XhContextMenuSubTrigger',\n setup(_, { slots }) {\n const handle = useContextMenuSubContext()\n const sub = useMenuContext()\n return () => h('div', {\n // 合并序=子先父后:父层的 data-scope/data-part 胜出,父层的方向键与选中照常认它\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\nexport const XhContextMenuItemText = defineComponent({\n name: 'XhContextMenuItemText',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { item } = useContextMenuItemContext()\n return () => h('span', ctx.api.value.getItemTextProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuItemIndicator = defineComponent({\n name: 'XhContextMenuItemIndicator',\n setup(_, { slots }) {\n const ctx = useContextMenuContext()\n const { item } = useContextMenuItemContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(item.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhContextMenuSeparator = defineComponent({\n name: 'XhContextMenuSeparator',\n setup() {\n const ctx = useContextMenuContext()\n return () => h('div', ctx.api.value.getSeparatorProps() as Record<string, unknown>)\n },\n})\n\nexport const XhContextMenuArrow = defineComponent({\n name: 'XhContextMenuArrow',\n setup() {\n const ctx = useContextMenuContext()\n return () => h('div', ctx.api.value.getArrowProps() as Record<string, unknown>)\n },\n})\n\n/** 一段连续的同组条目;不分组的条目各自单独成段。 */\ntype NodeRun = [ContextMenuNodeMeta, ...ContextMenuNodeMeta[]]\n\n/**\n * 没写默认插槽时按 collection 铺开的整套结构,作者只交数据。\n * 与手写部件产出的 DOM 完全一致,要改结构就写默认插槽,行为不变。\n * 触发区里放什么是作者的事,由 trigger 插槽给出。\n */\nfunction renderDefaultTree(\n collection: readonly ContextMenuNodeMeta[],\n trigger: (VNode | string)[] | null,\n itemSlot?: (node: ContextMenuNodeMeta) => VNode[],\n): VNode[] {\n return [\n h(XhContextMenuTrigger, null, () => trigger ?? []),\n h(XhContextMenuPositioner, null, () => [\n h(XhContextMenuContent, null, () => renderNodes(collection, itemSlot)),\n ]),\n ]\n}\n\n/** 相邻同 group 的条目并成一段,没写 group 的各自成段。 */\nfunction groupRuns(collection: readonly ContextMenuNodeMeta[]): NodeRun[] {\n const runs: NodeRun[] = []\n for (const meta of collection) {\n const last = runs.at(-1)\n if (last && meta.group != null && last[0].group === meta.group)\n last.push(meta)\n else\n runs.push([meta])\n }\n return runs\n}\n\n/** content 的内容:分组段铺成 group,段首的分隔线落在 group 外面。 */\nfunction renderNodes(\n collection: readonly ContextMenuNodeMeta[],\n itemSlot?: (node: ContextMenuNodeMeta) => VNode[],\n): VNode[] {\n return groupRuns(collection).flatMap((run, runIndex) => {\n const head = run[0]\n // 首条上的标记不产出分隔线:菜单开头不留一道空隔\n const lead = runIndex > 0 && head.separatorBefore\n ? [h(XhContextMenuSeparator, { key: `separator:${head.value}` })]\n : []\n if (head.group == null)\n return [...lead, renderItem(head, itemSlot)]\n const groupLabel = run.find(node => node.groupLabel != null)?.groupLabel ?? null\n return [\n ...lead,\n h(XhContextMenuGroup, { key: `group:${head.group}`, value: head.group }, () => [\n ...(groupLabel != null ? [h(XhContextMenuGroupLabel, null, () => groupLabel)] : []),\n ...run.flatMap((node, index) => [\n ...(index > 0 && node.separatorBefore ? [h(XhContextMenuSeparator, { key: `separator:${node.value}` })] : []),\n renderItem(node, itemSlot),\n ]),\n ]),\n ]\n })\n}\n\n/** 单个条目:标记位排在文字前面,没给标记位就不铺那个部件。 */\nfunction renderItem(\n meta: ContextMenuNodeMeta,\n itemSlot?: (node: ContextMenuNodeMeta) => VNode[],\n): VNode {\n return h(XhContextMenuItem, { key: meta.value, value: meta.value }, () => [\n ...(meta.indicator != null ? [h(XhContextMenuItemIndicator, null, () => meta.indicator)] : []),\n h(XhContextMenuItemText, null, () => itemSlot?.(meta) ?? meta.label),\n ])\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { inject, provide } from "vue";
|
|
2
2
|
//#region src/components/context-menu/context.ts
|
|
3
|
-
const KEY = Symbol("xh-context-menu");
|
|
4
|
-
const ITEM_KEY = Symbol("xh-context-menu-item");
|
|
5
|
-
const GROUP_KEY = Symbol("xh-context-menu-group");
|
|
3
|
+
const KEY = Symbol.for("xh-context-menu");
|
|
4
|
+
const ITEM_KEY = Symbol.for("xh-context-menu-item");
|
|
5
|
+
const GROUP_KEY = Symbol.for("xh-context-menu-group");
|
|
6
6
|
function provideContextMenu(ctx) {
|
|
7
7
|
provide(KEY, ctx);
|
|
8
8
|
}
|
|
@@ -27,7 +27,7 @@ function useContextMenuGroupContext() {
|
|
|
27
27
|
if (!ctx) throw new Error("[xh] ContextMenu 分组标题必须用在 XhContextMenuGroup 内");
|
|
28
28
|
return ctx;
|
|
29
29
|
}
|
|
30
|
-
const CHAIN_KEY = Symbol("xh-context-menu-chain");
|
|
30
|
+
const CHAIN_KEY = Symbol.for("xh-context-menu-chain");
|
|
31
31
|
function provideContextMenuChain(chain) {
|
|
32
32
|
provide(CHAIN_KEY, chain);
|
|
33
33
|
}
|
|
@@ -36,7 +36,7 @@ function useContextMenuChain() {
|
|
|
36
36
|
if (!chain) throw new Error("[xh] ContextMenuSub 必须用在 XhContextMenuRoot 内");
|
|
37
37
|
return chain;
|
|
38
38
|
}
|
|
39
|
-
const SUB_KEY = Symbol("xh-context-menu-sub");
|
|
39
|
+
const SUB_KEY = Symbol.for("xh-context-menu-sub");
|
|
40
40
|
function provideContextMenuSub(handle) {
|
|
41
41
|
provide(SUB_KEY, handle);
|
|
42
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/context-menu/context.ts"],"sourcesContent":["import type { ContextMenuGroupProps, ContextMenuItemProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { ContextMenuContext } from './use-context-menu'\nimport { inject, provide } from 'vue'\n\n/** 条目自报的值与禁用,供 item-text / item-indicator 这类子部件复用同一份声明。 */\nexport interface ContextMenuItemContext {\n item: ComputedRef<ContextMenuItemProps>\n}\n\n/** 分组自报的身份,供分组标题取到同一个值(标题的 id 由它派生)。 */\nexport interface ContextMenuGroupContext {\n group: ComputedRef<ContextMenuGroupProps>\n}\n\nconst KEY: InjectionKey<ContextMenuContext> = Symbol('xh-context-menu')\nconst ITEM_KEY: InjectionKey<ContextMenuItemContext> = Symbol('xh-context-menu-item')\nconst GROUP_KEY: InjectionKey<ContextMenuGroupContext> = Symbol('xh-context-menu-group')\n\nexport function provideContextMenu(ctx: ContextMenuContext): void {\n provide(KEY, ctx)\n}\n\nexport function useContextMenuContext(): ContextMenuContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] ContextMenu 部件必须用在 XhContextMenuRoot 内')\n return ctx\n}\n\nexport function provideContextMenuItem(ctx: ContextMenuItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useContextMenuItemContext(): ContextMenuItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] ContextMenu 条目子部件必须用在 XhContextMenuItem 内')\n return ctx\n}\n\nexport function provideContextMenuGroup(ctx: ContextMenuGroupContext): void {\n provide(GROUP_KEY, ctx)\n}\n\nexport function useContextMenuGroupContext(): ContextMenuGroupContext {\n const ctx = inject(GROUP_KEY, null)\n if (!ctx)\n throw new Error('[xh] ContextMenu 分组标题必须用在 XhContextMenuGroup 内')\n return ctx\n}\n\n/** 选中链:子菜单任意层级的选中都汇到根——先发根的 select,再关根,各级随父关闭级联收起。 */\nexport interface ContextMenuChain {\n notifySelect: (details: { value: string }) => void\n}\n\nconst CHAIN_KEY: InjectionKey<ContextMenuChain> = Symbol('xh-context-menu-chain')\n\nexport function provideContextMenuChain(chain: ContextMenuChain): void {\n provide(CHAIN_KEY, chain)\n}\n\nexport function useContextMenuChain(): ContextMenuChain {\n const chain = inject(CHAIN_KEY, null)\n if (!chain)\n throw new Error('[xh] ContextMenuSub 必须用在 XhContextMenuRoot 内')\n return chain\n}\n\n/** 子菜单触发条目要同时够到父右键菜单与本子菜单,这里存父层句柄与它在父层里的身份。 */\nexport interface ContextMenuSubHandle {\n parent: ContextMenuContext\n value: string\n disabled?: boolean\n}\n\nconst SUB_KEY: InjectionKey<ContextMenuSubHandle> = Symbol('xh-context-menu-sub')\n\nexport function provideContextMenuSub(handle: ContextMenuSubHandle): void {\n provide(SUB_KEY, handle)\n}\n\nexport function useContextMenuSubContext(): ContextMenuSubHandle {\n const handle = inject(SUB_KEY, null)\n if (!handle)\n throw new Error('[xh] ContextMenuSubTrigger 必须用在 XhContextMenuSub 内')\n return handle\n}\n"],"mappings":";;AAeA,MAAM,MAAwC,OAAO,iBAAiB;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/context-menu/context.ts"],"sourcesContent":["import type { ContextMenuGroupProps, ContextMenuItemProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { ContextMenuContext } from './use-context-menu'\nimport { inject, provide } from 'vue'\n\n/** 条目自报的值与禁用,供 item-text / item-indicator 这类子部件复用同一份声明。 */\nexport interface ContextMenuItemContext {\n item: ComputedRef<ContextMenuItemProps>\n}\n\n/** 分组自报的身份,供分组标题取到同一个值(标题的 id 由它派生)。 */\nexport interface ContextMenuGroupContext {\n group: ComputedRef<ContextMenuGroupProps>\n}\n\nconst KEY: InjectionKey<ContextMenuContext> = Symbol.for('xh-context-menu')\nconst ITEM_KEY: InjectionKey<ContextMenuItemContext> = Symbol.for('xh-context-menu-item')\nconst GROUP_KEY: InjectionKey<ContextMenuGroupContext> = Symbol.for('xh-context-menu-group')\n\nexport function provideContextMenu(ctx: ContextMenuContext): void {\n provide(KEY, ctx)\n}\n\nexport function useContextMenuContext(): ContextMenuContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] ContextMenu 部件必须用在 XhContextMenuRoot 内')\n return ctx\n}\n\nexport function provideContextMenuItem(ctx: ContextMenuItemContext): void {\n provide(ITEM_KEY, ctx)\n}\n\nexport function useContextMenuItemContext(): ContextMenuItemContext {\n const ctx = inject(ITEM_KEY, null)\n if (!ctx)\n throw new Error('[xh] ContextMenu 条目子部件必须用在 XhContextMenuItem 内')\n return ctx\n}\n\nexport function provideContextMenuGroup(ctx: ContextMenuGroupContext): void {\n provide(GROUP_KEY, ctx)\n}\n\nexport function useContextMenuGroupContext(): ContextMenuGroupContext {\n const ctx = inject(GROUP_KEY, null)\n if (!ctx)\n throw new Error('[xh] ContextMenu 分组标题必须用在 XhContextMenuGroup 内')\n return ctx\n}\n\n/** 选中链:子菜单任意层级的选中都汇到根——先发根的 select,再关根,各级随父关闭级联收起。 */\nexport interface ContextMenuChain {\n notifySelect: (details: { value: string }) => void\n}\n\nconst CHAIN_KEY: InjectionKey<ContextMenuChain> = Symbol.for('xh-context-menu-chain')\n\nexport function provideContextMenuChain(chain: ContextMenuChain): void {\n provide(CHAIN_KEY, chain)\n}\n\nexport function useContextMenuChain(): ContextMenuChain {\n const chain = inject(CHAIN_KEY, null)\n if (!chain)\n throw new Error('[xh] ContextMenuSub 必须用在 XhContextMenuRoot 内')\n return chain\n}\n\n/** 子菜单触发条目要同时够到父右键菜单与本子菜单,这里存父层句柄与它在父层里的身份。 */\nexport interface ContextMenuSubHandle {\n parent: ContextMenuContext\n value: string\n disabled?: boolean\n}\n\nconst SUB_KEY: InjectionKey<ContextMenuSubHandle> = Symbol.for('xh-context-menu-sub')\n\nexport function provideContextMenuSub(handle: ContextMenuSubHandle): void {\n provide(SUB_KEY, handle)\n}\n\nexport function useContextMenuSubContext(): ContextMenuSubHandle {\n const handle = inject(SUB_KEY, null)\n if (!handle)\n throw new Error('[xh] ContextMenuSubTrigger 必须用在 XhContextMenuSub 内')\n return handle\n}\n"],"mappings":";;AAeA,MAAM,MAAwC,OAAO,IAAI,iBAAiB;AAC1E,MAAM,WAAiD,OAAO,IAAI,sBAAsB;AACxF,MAAM,YAAmD,OAAO,IAAI,uBAAuB;AAE3F,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;AAEA,SAAgB,uBAAuB,KAAmC;CACxE,QAAQ,UAAU,GAAG;AACvB;AAEA,SAAgB,4BAAoD;CAClE,MAAM,MAAM,OAAO,UAAU,IAAI;CACjC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,gDAAgD;CAClE,OAAO;AACT;AAEA,SAAgB,wBAAwB,KAAoC;CAC1E,QAAQ,WAAW,GAAG;AACxB;AAEA,SAAgB,6BAAsD;CACpE,MAAM,MAAM,OAAO,WAAW,IAAI;CAClC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,gDAAgD;CAClE,OAAO;AACT;AAOA,MAAM,YAA4C,OAAO,IAAI,uBAAuB;AAEpF,SAAgB,wBAAwB,OAA+B;CACrE,QAAQ,WAAW,KAAK;AAC1B;AAEA,SAAgB,sBAAwC;CACtD,MAAM,QAAQ,OAAO,WAAW,IAAI;CACpC,IAAI,CAAC,OACH,MAAM,IAAI,MAAM,8CAA8C;CAChE,OAAO;AACT;AASA,MAAM,UAA8C,OAAO,IAAI,qBAAqB;AAEpF,SAAgB,sBAAsB,QAAoC;CACxE,QAAQ,SAAS,MAAM;AACzB;AAEA,SAAgB,2BAAiD;CAC/D,MAAM,SAAS,OAAO,SAAS,IAAI;CACnC,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,oDAAoD;CACtE,OAAO;AACT"}
|
|
@@ -29,7 +29,7 @@ function useContextMenu(props, onOpenChange, onSelect) {
|
|
|
29
29
|
const registerLayer = () => config.layerRegistry.register({
|
|
30
30
|
kind: "popover",
|
|
31
31
|
node: () => contentRef.value,
|
|
32
|
-
branches: () => [triggerRef.value].filter(Boolean),
|
|
32
|
+
branches: () => [triggerRef.value, positionerRef.value].filter(Boolean),
|
|
33
33
|
isModal: () => false,
|
|
34
34
|
setModal: () => {},
|
|
35
35
|
surfaces: () => []
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-context-menu.js","names":[],"sources":["../../../src/components/context-menu/use-context-menu.ts"],"sourcesContent":["import type { ContextMenuApi, ContextMenuSchema } 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 { connectContextMenu, contextMenuMachine } 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 ContextMenuContext {\n service: Service<ContextMenuSchema>\n api: ComputedRef<ContextMenuApi>\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 useContextMenu(\n props: ContextMenuSchema['props'],\n onOpenChange?: ContextMenuSchema['props']['onOpenChange'],\n onSelect?: ContextMenuSchema['props']['onSelect'],\n): ContextMenuContext {\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(contextMenuMachine, () => ({ ...props, onOpenChange, onSelect }), 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 // 触发区记为本层分支,展开着再右键可就地换坐标;左键关闭由 connect 在 pointerdown
|
|
1
|
+
{"version":3,"file":"use-context-menu.js","names":[],"sources":["../../../src/components/context-menu/use-context-menu.ts"],"sourcesContent":["import type { ContextMenuApi, ContextMenuSchema } 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 { connectContextMenu, contextMenuMachine } 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 ContextMenuContext {\n service: Service<ContextMenuSchema>\n api: ComputedRef<ContextMenuApi>\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 useContextMenu(\n props: ContextMenuSchema['props'],\n onOpenChange?: ContextMenuSchema['props']['onOpenChange'],\n onSelect?: ContextMenuSchema['props']['onSelect'],\n): ContextMenuContext {\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(contextMenuMachine, () => ({ ...props, onOpenChange, onSelect }), 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 // 触发区记为本层分支,展开着再右键可就地换坐标;左键关闭由 connect 在 pointerdown 上收口。\n // 浮层壳一并记上:条目列表之外还浮着自绘滚动条,按住它拖动不该把菜单消解掉\n branches: () => [triggerRef.value, positionerRef.value].filter(Boolean) as Element[],\n isModal: () => false,\n setModal: () => {},\n surfaces: () => [],\n })\n\n // 定位引擎由适配器注入,机器只经端口驱动;锚点是光标坐标,故无 getAnchorEl\n service.refs.set('config', config!)\n service.refs.set('registerLayer', registerLayer)\n service.refs.set('position', createPositionEngine())\n service.refs.set('getFloatingEl', () => positionerRef.value)\n // 触发区兼作两用:收起时焦点归还它,没有光标坐标时它的起始角就是锚点\n service.refs.set('getTriggerEl', () => triggerRef.value)\n service.refs.set('getContentEl', () => contentRef.value)\n }\n\n const api = computed(() => connectContextMenu(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":";;;;;;;;;;AA0BA,SAAgB,eACd,OACA,cACA,UACoB;CACpB,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,2BAA2B;EAAE,GAAG;EAAO;EAAc;CAAS,IAAI,KAAK;CAGlG,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,uBAAuB,cAAc,KAAK;EAE3D,QAAQ,KAAK,IAAI,sBAAsB,WAAW,KAAK;EACvD,QAAQ,KAAK,IAAI,sBAAsB,WAAW,KAAK;CACzD;CAEA,MAAM,MAAM,eAAe,mBAAmB,SAAS,YAAY,CAAC;CAMpE,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/date-field/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { DateFieldContext } from './use-date-field'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<DateFieldContext> = Symbol('xh-date-field')\n\nexport function provideDateField(ctx: DateFieldContext): void {\n provide(KEY, ctx)\n}\n\nexport function useDateFieldContext(): DateFieldContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] DateField 部件必须用在 XhDateFieldRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAsC,OAAO,eAAe;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/date-field/context.ts"],"sourcesContent":["import type { InjectionKey } from 'vue'\nimport type { DateFieldContext } from './use-date-field'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<DateFieldContext> = Symbol.for('xh-date-field')\n\nexport function provideDateField(ctx: DateFieldContext): void {\n provide(KEY, ctx)\n}\n\nexport function useDateFieldContext(): DateFieldContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] DateField 部件必须用在 XhDateFieldRoot 内')\n return ctx\n}\n"],"mappings":";;AAIA,MAAM,MAAsC,OAAO,IAAI,eAAe;AAEtE,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"}
|
|
@@ -145,14 +145,14 @@ declare const XhDateFieldRoot: import("vue").DefineComponent<import("vue").Extra
|
|
|
145
145
|
required: boolean;
|
|
146
146
|
name: string;
|
|
147
147
|
invalid: boolean;
|
|
148
|
-
size: Size;
|
|
149
148
|
value: string | null;
|
|
150
149
|
defaultValue: string | null;
|
|
151
150
|
tone: Tone;
|
|
151
|
+
size: Size;
|
|
152
152
|
disabled: boolean;
|
|
153
153
|
translations: DateFieldTranslations;
|
|
154
|
-
max: string;
|
|
155
154
|
variant: ControlVariant;
|
|
155
|
+
max: string;
|
|
156
156
|
readOnly: boolean;
|
|
157
157
|
min: string;
|
|
158
158
|
locale: string;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { computed, inject, provide } from "vue";
|
|
2
2
|
//#region src/components/date-picker/context.ts
|
|
3
|
-
const KEY = Symbol("xh-date-picker");
|
|
4
|
-
const CELL_KEY = Symbol("xh-date-picker-cell");
|
|
5
|
-
const SEGMENT_GROUP_KEY = Symbol("xh-date-picker-segment-group");
|
|
3
|
+
const KEY = Symbol.for("xh-date-picker");
|
|
4
|
+
const CELL_KEY = Symbol.for("xh-date-picker-cell");
|
|
5
|
+
const SEGMENT_GROUP_KEY = Symbol.for("xh-date-picker-segment-group");
|
|
6
|
+
const PANEL_KEY = Symbol.for("xh-date-picker-panel");
|
|
6
7
|
/** 没有分段容器时的组号,段位与隐藏输入落到起点那组。 */
|
|
7
8
|
const START_GROUP = { index: computed(() => 0) };
|
|
9
|
+
/** 日历没自报面板号时的落点,与单面板时一致。 */
|
|
10
|
+
const FIRST_PANEL = { index: computed(() => 0) };
|
|
8
11
|
function provideDatePicker(ctx) {
|
|
9
12
|
provide(KEY, ctx);
|
|
10
13
|
}
|
|
@@ -27,7 +30,13 @@ function provideDatePickerSegmentGroup(ctx) {
|
|
|
27
30
|
function useDatePickerSegmentGroupContext() {
|
|
28
31
|
return inject(SEGMENT_GROUP_KEY, START_GROUP);
|
|
29
32
|
}
|
|
33
|
+
function provideDatePickerPanel(ctx) {
|
|
34
|
+
provide(PANEL_KEY, ctx);
|
|
35
|
+
}
|
|
36
|
+
function useDatePickerPanelContext() {
|
|
37
|
+
return inject(PANEL_KEY, FIRST_PANEL);
|
|
38
|
+
}
|
|
30
39
|
//#endregion
|
|
31
|
-
export { provideDatePicker, provideDatePickerCell, provideDatePickerSegmentGroup, useDatePickerCellContext, useDatePickerContext, useDatePickerSegmentGroupContext };
|
|
40
|
+
export { provideDatePicker, provideDatePickerCell, provideDatePickerPanel, provideDatePickerSegmentGroup, useDatePickerCellContext, useDatePickerContext, useDatePickerPanelContext, useDatePickerSegmentGroupContext };
|
|
32
41
|
|
|
33
42
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/date-picker/context.ts"],"sourcesContent":["import type { CalendarCellProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { DatePickerContext } from './use-date-picker'\nimport { computed, inject, provide } from 'vue'\n\n/** 格子自报的那一天,供 cell-trigger 复用同一份声明(作者只写一次 value)。 */\nexport interface DatePickerCellContext {\n cell: ComputedRef<CalendarCellProps>\n}\n\n/** 分段容器自报组号,供组内的段位与隐藏输入认领起止两组之一。 */\nexport interface DatePickerSegmentGroupContext {\n /** 0 是起点那组,1 是区间终点那组。 */\n index: ComputedRef<0 | 1>\n}\n\nconst KEY: InjectionKey<DatePickerContext> = Symbol('xh-date-picker')\nconst CELL_KEY: InjectionKey<DatePickerCellContext> = Symbol('xh-date-picker-cell')\nconst SEGMENT_GROUP_KEY: InjectionKey<DatePickerSegmentGroupContext> = Symbol('xh-date-picker-segment-group')\n\n/** 没有分段容器时的组号,段位与隐藏输入落到起点那组。 */\nconst START_GROUP: DatePickerSegmentGroupContext = { index: computed<0 | 1>(() => 0) }\n\nexport function provideDatePicker(ctx: DatePickerContext): void {\n provide(KEY, ctx)\n}\n\nexport function useDatePickerContext(): DatePickerContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] DatePicker 部件必须用在 XhDatePickerRoot 内')\n return ctx\n}\n\nexport function provideDatePickerCell(ctx: DatePickerCellContext): void {\n provide(CELL_KEY, ctx)\n}\n\nexport function useDatePickerCellContext(): DatePickerCellContext {\n const ctx = inject(CELL_KEY, null)\n if (!ctx)\n throw new Error('[xh] DatePicker 日期触发器必须用在 XhDatePickerCell 内')\n return ctx\n}\n\nexport function provideDatePickerSegmentGroup(ctx: DatePickerSegmentGroupContext): void {\n provide(SEGMENT_GROUP_KEY, ctx)\n}\n\nexport function useDatePickerSegmentGroupContext(): DatePickerSegmentGroupContext {\n return inject(SEGMENT_GROUP_KEY, START_GROUP)\n}\n"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/date-picker/context.ts"],"sourcesContent":["import type { CalendarCellProps } from '@xihan-ui/headless'\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { DatePickerContext } from './use-date-picker'\nimport { computed, inject, provide } from 'vue'\n\n/** 格子自报的那一天,供 cell-trigger 复用同一份声明(作者只写一次 value)。 */\nexport interface DatePickerCellContext {\n cell: ComputedRef<CalendarCellProps>\n}\n\n/** 分段容器自报组号,供组内的段位与隐藏输入认领起止两组之一。 */\nexport interface DatePickerSegmentGroupContext {\n /** 0 是起点那组,1 是区间终点那组。 */\n index: ComputedRef<0 | 1>\n}\n\n/** 日历自报面板号,供面板内的标题、网格与格子认领自己属于并排的第几张。 */\nexport interface DatePickerPanelContext {\n index: ComputedRef<number>\n}\n\nconst KEY: InjectionKey<DatePickerContext> = Symbol.for('xh-date-picker')\nconst CELL_KEY: InjectionKey<DatePickerCellContext> = Symbol.for('xh-date-picker-cell')\nconst SEGMENT_GROUP_KEY: InjectionKey<DatePickerSegmentGroupContext> = Symbol.for('xh-date-picker-segment-group')\nconst PANEL_KEY: InjectionKey<DatePickerPanelContext> = Symbol.for('xh-date-picker-panel')\n\n/** 没有分段容器时的组号,段位与隐藏输入落到起点那组。 */\nconst START_GROUP: DatePickerSegmentGroupContext = { index: computed<0 | 1>(() => 0) }\n\n/** 日历没自报面板号时的落点,与单面板时一致。 */\nconst FIRST_PANEL: DatePickerPanelContext = { index: computed(() => 0) }\n\nexport function provideDatePicker(ctx: DatePickerContext): void {\n provide(KEY, ctx)\n}\n\nexport function useDatePickerContext(): DatePickerContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] DatePicker 部件必须用在 XhDatePickerRoot 内')\n return ctx\n}\n\nexport function provideDatePickerCell(ctx: DatePickerCellContext): void {\n provide(CELL_KEY, ctx)\n}\n\nexport function useDatePickerCellContext(): DatePickerCellContext {\n const ctx = inject(CELL_KEY, null)\n if (!ctx)\n throw new Error('[xh] DatePicker 日期触发器必须用在 XhDatePickerCell 内')\n return ctx\n}\n\nexport function provideDatePickerSegmentGroup(ctx: DatePickerSegmentGroupContext): void {\n provide(SEGMENT_GROUP_KEY, ctx)\n}\n\nexport function useDatePickerSegmentGroupContext(): DatePickerSegmentGroupContext {\n return inject(SEGMENT_GROUP_KEY, START_GROUP)\n}\n\nexport function provideDatePickerPanel(ctx: DatePickerPanelContext): void {\n provide(PANEL_KEY, ctx)\n}\n\nexport function useDatePickerPanelContext(): DatePickerPanelContext {\n return inject(PANEL_KEY, FIRST_PANEL)\n}\n"],"mappings":";;AAqBA,MAAM,MAAuC,OAAO,IAAI,gBAAgB;AACxE,MAAM,WAAgD,OAAO,IAAI,qBAAqB;AACtF,MAAM,oBAAiE,OAAO,IAAI,8BAA8B;AAChH,MAAM,YAAkD,OAAO,IAAI,sBAAsB;;AAGzF,MAAM,cAA6C,EAAE,OAAO,eAAsB,CAAC,EAAE;;AAGrF,MAAM,cAAsC,EAAE,OAAO,eAAe,CAAC,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;AAEA,SAAgB,sBAAsB,KAAkC;CACtE,QAAQ,UAAU,GAAG;AACvB;AAEA,SAAgB,2BAAkD;CAChE,MAAM,MAAM,OAAO,UAAU,IAAI;CACjC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,8CAA8C;CAChE,OAAO;AACT;AAEA,SAAgB,8BAA8B,KAA0C;CACtF,QAAQ,mBAAmB,GAAG;AAChC;AAEA,SAAgB,mCAAkE;CAChF,OAAO,OAAO,mBAAmB,WAAW;AAC9C;AAEA,SAAgB,uBAAuB,KAAmC;CACxE,QAAQ,WAAW,GAAG;AACxB;AAEA,SAAgB,4BAAoD;CAClE,OAAO,OAAO,WAAW,WAAW;AACtC"}
|
|
@@ -72,11 +72,21 @@ declare const XhDatePickerRoot: import("vue").DefineComponent<import("vue").Extr
|
|
|
72
72
|
type: BooleanConstructor;
|
|
73
73
|
default: undefined;
|
|
74
74
|
};
|
|
75
|
-
/** 并排展示几页;缺省单选 1
|
|
75
|
+
/** 并排展示几页;缺省单选 1,区间按两端定:同一页放得下就 1,跨页才 2。 */
|
|
76
76
|
visibleCount: {
|
|
77
77
|
type: NumberConstructor;
|
|
78
78
|
default: undefined;
|
|
79
79
|
};
|
|
80
|
+
/** 日历恒渲染六行,默认开。关掉后翻页时浮层高度会跟着月份变。 */
|
|
81
|
+
fixedWeeks: {
|
|
82
|
+
type: BooleanConstructor;
|
|
83
|
+
default: undefined;
|
|
84
|
+
};
|
|
85
|
+
/** 初始聚焦日,同时决定展开时先落在哪一页;不给就退回首个选中值,再退回今天。 */
|
|
86
|
+
defaultFocusedValue: {
|
|
87
|
+
type: StringConstructor;
|
|
88
|
+
default: undefined;
|
|
89
|
+
};
|
|
80
90
|
/** 快捷选项;给了就在浮层里多出一列,日子要在自己的 computed 里算好再传。 */
|
|
81
91
|
presets: {
|
|
82
92
|
type: PropType<DatePickerPreset[]>;
|
|
@@ -198,11 +208,21 @@ declare const XhDatePickerRoot: import("vue").DefineComponent<import("vue").Extr
|
|
|
198
208
|
type: BooleanConstructor;
|
|
199
209
|
default: undefined;
|
|
200
210
|
};
|
|
201
|
-
/** 并排展示几页;缺省单选 1
|
|
211
|
+
/** 并排展示几页;缺省单选 1,区间按两端定:同一页放得下就 1,跨页才 2。 */
|
|
202
212
|
visibleCount: {
|
|
203
213
|
type: NumberConstructor;
|
|
204
214
|
default: undefined;
|
|
205
215
|
};
|
|
216
|
+
/** 日历恒渲染六行,默认开。关掉后翻页时浮层高度会跟着月份变。 */
|
|
217
|
+
fixedWeeks: {
|
|
218
|
+
type: BooleanConstructor;
|
|
219
|
+
default: undefined;
|
|
220
|
+
};
|
|
221
|
+
/** 初始聚焦日,同时决定展开时先落在哪一页;不给就退回首个选中值,再退回今天。 */
|
|
222
|
+
defaultFocusedValue: {
|
|
223
|
+
type: StringConstructor;
|
|
224
|
+
default: undefined;
|
|
225
|
+
};
|
|
206
226
|
/** 快捷选项;给了就在浮层里多出一列,日子要在自己的 computed 里算好再传。 */
|
|
207
227
|
presets: {
|
|
208
228
|
type: PropType<DatePickerPreset[]>;
|
|
@@ -272,20 +292,22 @@ declare const XhDatePickerRoot: import("vue").DefineComponent<import("vue").Extr
|
|
|
272
292
|
required: boolean;
|
|
273
293
|
name: string;
|
|
274
294
|
invalid: boolean;
|
|
275
|
-
size: Size;
|
|
276
295
|
value: string | string[];
|
|
277
296
|
defaultValue: string | string[];
|
|
278
297
|
tone: Tone;
|
|
298
|
+
size: Size;
|
|
279
299
|
disabled: boolean;
|
|
300
|
+
offset: number;
|
|
301
|
+
translations: Partial<import("@xihan-ui/headless").DatePickerTranslations> | undefined;
|
|
280
302
|
open: boolean;
|
|
281
303
|
defaultOpen: boolean;
|
|
282
|
-
translations: Partial<import("@xihan-ui/headless").DatePickerTranslations> | undefined;
|
|
283
|
-
offset: number;
|
|
284
|
-
max: string;
|
|
285
304
|
variant: ControlVariant;
|
|
305
|
+
max: string;
|
|
286
306
|
activeView: CalendarView;
|
|
287
307
|
readOnly: boolean;
|
|
308
|
+
fixedWeeks: boolean;
|
|
288
309
|
selectionMode: CalendarSelectionMode;
|
|
310
|
+
defaultFocusedValue: string;
|
|
289
311
|
min: string;
|
|
290
312
|
isDateUnavailable: (value: string) => boolean;
|
|
291
313
|
locale: string;
|
|
@@ -294,9 +316,9 @@ declare const XhDatePickerRoot: import("vue").DefineComponent<import("vue").Extr
|
|
|
294
316
|
weekSelection: boolean;
|
|
295
317
|
visibleCount: number;
|
|
296
318
|
placement: Placement;
|
|
297
|
-
segments: DateSegmentSet;
|
|
298
319
|
presets: DatePickerPreset[];
|
|
299
320
|
timeGranularity: import("@xihan-ui/headless").DatePickerTimeGranularity | undefined;
|
|
321
|
+
segments: DateSegmentSet;
|
|
300
322
|
endName: string;
|
|
301
323
|
closeOnSelect: boolean;
|
|
302
324
|
showTime: boolean;
|
|
@@ -364,9 +386,23 @@ declare const XhDatePickerPositioner: import("vue").DefineComponent<{}, () => VN
|
|
|
364
386
|
declare const XhDatePickerContent: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
365
387
|
[key: string]: any;
|
|
366
388
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
367
|
-
declare const XhDatePickerCalendar: import("vue").DefineComponent<
|
|
389
|
+
declare const XhDatePickerCalendar: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
390
|
+
/** 并排的第几张面板,默认 0。写在这里,面板内的标题、网格与格子就不必各写一遍。 */
|
|
391
|
+
index: {
|
|
392
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
393
|
+
default: number;
|
|
394
|
+
};
|
|
395
|
+
}>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
368
396
|
[key: string]: any;
|
|
369
|
-
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<
|
|
397
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
398
|
+
/** 并排的第几张面板,默认 0。写在这里,面板内的标题、网格与格子就不必各写一遍。 */
|
|
399
|
+
index: {
|
|
400
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
401
|
+
default: number;
|
|
402
|
+
};
|
|
403
|
+
}>> & Readonly<{}>, {
|
|
404
|
+
index: string | number;
|
|
405
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
370
406
|
declare const XhDatePickerPresets: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
371
407
|
[key: string]: any;
|
|
372
408
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, SlotsType<{
|
|
@@ -413,72 +449,72 @@ declare const XhDatePickerNextYearTrigger: import("vue").DefineComponent<{}, ()
|
|
|
413
449
|
[key: string]: any;
|
|
414
450
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
415
451
|
declare const XhDatePickerHeading: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
416
|
-
/**
|
|
452
|
+
/** 属于第几个面板;不写就跟着所在的日历走。 */
|
|
417
453
|
index: {
|
|
418
|
-
type: NumberConstructor;
|
|
419
|
-
default:
|
|
454
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
455
|
+
default: undefined;
|
|
420
456
|
};
|
|
421
457
|
}>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
422
458
|
[key: string]: any;
|
|
423
459
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
424
|
-
/**
|
|
460
|
+
/** 属于第几个面板;不写就跟着所在的日历走。 */
|
|
425
461
|
index: {
|
|
426
|
-
type: NumberConstructor;
|
|
427
|
-
default:
|
|
462
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
463
|
+
default: undefined;
|
|
428
464
|
};
|
|
429
465
|
}>> & Readonly<{}>, {
|
|
430
|
-
index: number;
|
|
466
|
+
index: string | number;
|
|
431
467
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
432
468
|
declare const XhDatePickerHeadingYearTrigger: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
433
|
-
/**
|
|
469
|
+
/** 属于第几个面板;不写就跟着所在的日历走。 */
|
|
434
470
|
index: {
|
|
435
|
-
type: NumberConstructor;
|
|
436
|
-
default:
|
|
471
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
472
|
+
default: undefined;
|
|
437
473
|
};
|
|
438
474
|
}>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
439
475
|
[key: string]: any;
|
|
440
476
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
441
|
-
/**
|
|
477
|
+
/** 属于第几个面板;不写就跟着所在的日历走。 */
|
|
442
478
|
index: {
|
|
443
|
-
type: NumberConstructor;
|
|
444
|
-
default:
|
|
479
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
480
|
+
default: undefined;
|
|
445
481
|
};
|
|
446
482
|
}>> & Readonly<{}>, {
|
|
447
|
-
index: number;
|
|
483
|
+
index: string | number;
|
|
448
484
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
449
485
|
declare const XhDatePickerHeadingMonthTrigger: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
450
|
-
/**
|
|
486
|
+
/** 属于第几个面板;不写就跟着所在的日历走。 */
|
|
451
487
|
index: {
|
|
452
|
-
type: NumberConstructor;
|
|
453
|
-
default:
|
|
488
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
489
|
+
default: undefined;
|
|
454
490
|
};
|
|
455
491
|
}>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
456
492
|
[key: string]: any;
|
|
457
493
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
458
|
-
/**
|
|
494
|
+
/** 属于第几个面板;不写就跟着所在的日历走。 */
|
|
459
495
|
index: {
|
|
460
|
-
type: NumberConstructor;
|
|
461
|
-
default:
|
|
496
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
497
|
+
default: undefined;
|
|
462
498
|
};
|
|
463
499
|
}>> & Readonly<{}>, {
|
|
464
|
-
index: number;
|
|
500
|
+
index: string | number;
|
|
465
501
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
466
502
|
declare const XhDatePickerGrid: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
467
|
-
/**
|
|
503
|
+
/** 属于第几个面板;不写就跟着所在的日历走。 */
|
|
468
504
|
index: {
|
|
469
|
-
type: NumberConstructor;
|
|
470
|
-
default:
|
|
505
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
506
|
+
default: undefined;
|
|
471
507
|
};
|
|
472
508
|
}>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
473
509
|
[key: string]: any;
|
|
474
510
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
475
|
-
/**
|
|
511
|
+
/** 属于第几个面板;不写就跟着所在的日历走。 */
|
|
476
512
|
index: {
|
|
477
|
-
type: NumberConstructor;
|
|
478
|
-
default:
|
|
513
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
514
|
+
default: undefined;
|
|
479
515
|
};
|
|
480
516
|
}>> & Readonly<{}>, {
|
|
481
|
-
index: number;
|
|
517
|
+
index: string | number;
|
|
482
518
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
483
519
|
declare const XhDatePickerGridHead: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
484
520
|
[key: string]: any;
|
|
@@ -524,12 +560,12 @@ declare const XhDatePickerCell: import("vue").DefineComponent<import("vue").Extr
|
|
|
524
560
|
required: true;
|
|
525
561
|
};
|
|
526
562
|
/**
|
|
527
|
-
*
|
|
563
|
+
* 属于第几个面板;不写就跟着所在的日历走。同一天会同时出现在两个面板里
|
|
528
564
|
* (8 月末那几天也铺在 9 月的首行),「是不是本月」只有连着面板一起看才判得出来。
|
|
529
565
|
*/
|
|
530
566
|
index: {
|
|
531
|
-
type: NumberConstructor;
|
|
532
|
-
default:
|
|
567
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
568
|
+
default: undefined;
|
|
533
569
|
};
|
|
534
570
|
}>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
535
571
|
[key: string]: any;
|
|
@@ -540,15 +576,15 @@ declare const XhDatePickerCell: import("vue").DefineComponent<import("vue").Extr
|
|
|
540
576
|
required: true;
|
|
541
577
|
};
|
|
542
578
|
/**
|
|
543
|
-
*
|
|
579
|
+
* 属于第几个面板;不写就跟着所在的日历走。同一天会同时出现在两个面板里
|
|
544
580
|
* (8 月末那几天也铺在 9 月的首行),「是不是本月」只有连着面板一起看才判得出来。
|
|
545
581
|
*/
|
|
546
582
|
index: {
|
|
547
|
-
type: NumberConstructor;
|
|
548
|
-
default:
|
|
583
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
584
|
+
default: undefined;
|
|
549
585
|
};
|
|
550
586
|
}>> & Readonly<{}>, {
|
|
551
|
-
index: number;
|
|
587
|
+
index: string | number;
|
|
552
588
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
553
589
|
declare const XhDatePickerCellTrigger: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
554
590
|
[key: string]: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-picker.d.ts","names":[],"sources":["../../../src/components/date-picker/date-picker.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"date-picker.d.ts","names":[],"sources":["../../../src/components/date-picker/date-picker.ts"],"mappings":";;;;;KAkCK,kBAAkB;;KAsBX,0BACN,KACF,sHAUA,KACA;EAUA,UAAU;;EAEV,aAAa;;;UAIA;EACf,SAAS;;;UAIM;EACf,kBAAkB;;cAGP,gCAAgB,8BAAA;;IAIS,MAAA;;;;IACO,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;IAOR,MAAA,SAAS;;;;;IAElB,MAAA,SAAS;;;;;IAEH,MAAA,SAAS;;;;;IAEZ,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;IAUV,MAAA,SAAS;;;;IACI,MAAA,UAAU;;;;;;;;;;;;;;;;IASjB,MAAA,SAAS;;;;IACd,MAAA,SAAS;;;;IACZ,MAAA,SAAS;;;;IACT,MAAA,SAAS;;;;IACJ,MAAA,SAAS;;;;;;;;;;;;;;;;IAIH,MAAA,SAAS;;;;;;EAIjB,iBAAA,UAAA,UAAU;EACX,gBAAA,UAAA,UAAU;EACD,yBAAA,UAAA,UAAU;EACZ,uBAAA,UAAA,UAAU;EAClB,iBAAA,QAAA,UAAU;EACZ,gBAAA,OAAA,UAAU;EACJ,sBAAA,OAAA,UAAU;;;IApDL,MAAA;;;;IACO,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;IAOR,MAAA,SAAS;;;;;IAElB,MAAA,SAAS;;;;;IAEH,MAAA,SAAS;;;;;IAEZ,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;IAUV,MAAA,SAAS;;;;IACI,MAAA,UAAU;;;;;;;;;;;;;;;;IASjB,MAAA,SAAS;;;;IACd,MAAA,SAAS;;;;IACZ,MAAA,SAAS;;;;IACT,MAAA,SAAS;;;;IACJ,MAAA,SAAS;;;;;;;;;;;;;;;;IAIH,MAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAjBY,oBAAA;;;;;;;;;;;;;;EA8B9C,WAAC,OAAO,4BAA4B;kCA8ChD;cAEW,iCAAiB,0BAAA,oBAAA,4BAAA;;8BAO5B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAS9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,wCAAwB,8BAAA;;IAIE,MAAA;;;;;;;IAAA,MAAA;;;;;qCAcrC;cAEW,mCAAmB,8BAAA;;IAIO,MAAA;;;;;IAER,MAAA,SAAS;;;;;;;IAFD,MAAA;;;;;IAER,MAAA,SAAS;;;;;;;EAG1B,WAAC,OAAO,+BAA+B;kCAuBnD;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAMnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAU9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAgBjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAY9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAIW,oCAAoB,8BAAA;;;;;;;;;;;;;;;;qCAY/B;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;;;EAIlB,WAAC,OAAO,+BAA+B;kCAoBnD;cAEW,kCAAkB,8BAAA;;;;;;;;;;;;;;;;EAQjB,gBAAM;kCAclB;cAEW,qCAAqB,0BAAA,oBAAA,4BAAA;;gCAmBhC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,0CAA0B,0BAAA,oBAAA,4BAAA;;8BAMrC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAM7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,2CAA2B,0BAAA,oBAAA,4BAAA;;8BAMtC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAMlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAMlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,2CAA2B,0BAAA,oBAAA,4BAAA;;8BAMtC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,8BAAA;;;;;;;;;;;;;;;;qCAgB9B;cAEW,8CAA8B,8BAAA;;;;;;;;;;;;;;;;qCAgBzC;cAEW,+CAA+B,8BAAA;;;;;;;;;;;;;;;;qCAe1C;cAEW,gCAAgB,8BAAA;;;;;;;;;;;;;;;;qCAmB3B;cAEW,oCAAoB,0BAAA,oBAAA,4BAAA;;8BAM/B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,oCAAoB,0BAAA,oBAAA,4BAAA;;8BAM/B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAGW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAM9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,sCAAsB,8BAAA;;;;;;;;;;;;;;MAejC,oDAAA;cAEW,mCAAmB,8BAAA;;IAIO,MAAA;;;;;;;IAAA,MAAA;;;MAWrC,oDAAA;cAEW,gCAAgB,8BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAmB3B;cAEW,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAWlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,uCAAuB,8BAAA;;IAIG,MAAA;;;;;;;IAAA,MAAA;;;;;qCAcrC"}
|