@xihan-ui/vue 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1593 -0
- package/README.md +1 -1
- package/dist/components/accordion/accordion.d.ts +6 -0
- package/dist/components/accordion/accordion.d.ts.map +1 -1
- package/dist/components/accordion/accordion.js +4 -2
- package/dist/components/accordion/accordion.js.map +1 -1
- package/dist/components/alert/alert.d.ts +9 -0
- package/dist/components/alert/alert.d.ts.map +1 -1
- package/dist/components/alert/alert.js +4 -0
- package/dist/components/alert/alert.js.map +1 -1
- package/dist/components/anchor/anchor.d.ts +2 -2
- package/dist/components/anchor/anchor.d.ts.map +1 -1
- package/dist/components/anchor/anchor.js +2 -2
- package/dist/components/anchor/anchor.js.map +1 -1
- package/dist/components/anchor/use-anchor.d.ts +2 -2
- package/dist/components/anchor/use-anchor.js +3 -3
- package/dist/components/anchor/use-anchor.js.map +1 -1
- package/dist/components/approval/approval.d.ts +8 -1
- package/dist/components/approval/approval.d.ts.map +1 -1
- package/dist/components/approval/approval.js +10 -1
- package/dist/components/approval/approval.js.map +1 -1
- package/dist/components/avatar/avatar.d.ts +8 -0
- package/dist/components/avatar/avatar.d.ts.map +1 -1
- package/dist/components/avatar/avatar.js +3 -1
- package/dist/components/avatar/avatar.js.map +1 -1
- package/dist/components/avatar/use-avatar.d.ts.map +1 -1
- package/dist/components/avatar/use-avatar.js +3 -1
- package/dist/components/avatar/use-avatar.js.map +1 -1
- package/dist/components/avatar-group/avatar-group.d.ts.map +1 -1
- package/dist/components/avatar-group/avatar-group.js +2 -1
- package/dist/components/avatar-group/avatar-group.js.map +1 -1
- package/dist/components/back-top/use-back-top.d.ts.map +1 -1
- package/dist/components/back-top/use-back-top.js +3 -1
- package/dist/components/back-top/use-back-top.js.map +1 -1
- package/dist/components/badge/badge.d.ts +22 -0
- package/dist/components/badge/badge.d.ts.map +1 -1
- package/dist/components/badge/badge.js +11 -2
- package/dist/components/badge/badge.js.map +1 -1
- package/dist/components/breadcrumb/breadcrumb.d.ts +11 -1
- package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -1
- package/dist/components/breadcrumb/breadcrumb.js +28 -9
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/components/calendar-picker/calendar-picker.d.ts +16 -0
- package/dist/components/calendar-picker/calendar-picker.d.ts.map +1 -1
- package/dist/components/calendar-picker/calendar-picker.js +4 -0
- package/dist/components/calendar-picker/calendar-picker.js.map +1 -1
- package/dist/components/calendar-range-picker/calendar-range-picker.d.ts +16 -0
- package/dist/components/calendar-range-picker/calendar-range-picker.d.ts.map +1 -1
- package/dist/components/calendar-range-picker/calendar-range-picker.js +4 -0
- package/dist/components/calendar-range-picker/calendar-range-picker.js.map +1 -1
- package/dist/components/card/card.d.ts +37 -2
- package/dist/components/card/card.d.ts.map +1 -1
- package/dist/components/card/card.js +42 -3
- package/dist/components/card/card.js.map +1 -1
- package/dist/components/carousel/carousel.d.ts +7 -1
- package/dist/components/carousel/carousel.d.ts.map +1 -1
- package/dist/components/carousel/carousel.js +1 -0
- package/dist/components/carousel/carousel.js.map +1 -1
- package/dist/components/carousel/use-carousel.d.ts.map +1 -1
- package/dist/components/carousel/use-carousel.js +3 -1
- package/dist/components/carousel/use-carousel.js.map +1 -1
- package/dist/components/cartesian-chart/cartesian-chart.d.ts +262 -0
- package/dist/components/cartesian-chart/cartesian-chart.d.ts.map +1 -0
- package/dist/components/cartesian-chart/cartesian-chart.js +293 -0
- package/dist/components/cartesian-chart/cartesian-chart.js.map +1 -0
- package/dist/components/cartesian-chart/context.js +15 -0
- package/dist/components/cartesian-chart/context.js.map +1 -0
- package/dist/components/cartesian-chart/use-cartesian-chart.d.ts +21 -0
- package/dist/components/cartesian-chart/use-cartesian-chart.d.ts.map +1 -0
- package/dist/components/cartesian-chart/use-cartesian-chart.js +29 -0
- package/dist/components/cartesian-chart/use-cartesian-chart.js.map +1 -0
- package/dist/components/cascader/cascader.d.ts +72 -3
- package/dist/components/cascader/cascader.d.ts.map +1 -1
- package/dist/components/cascader/cascader.js +125 -7
- package/dist/components/cascader/cascader.js.map +1 -1
- package/dist/components/cascader/context.js +10 -1
- package/dist/components/cascader/context.js.map +1 -1
- package/dist/components/cascader/use-cascader.d.ts +2 -1
- package/dist/components/cascader/use-cascader.d.ts.map +1 -1
- package/dist/components/cascader/use-cascader.js +4 -1
- package/dist/components/cascader/use-cascader.js.map +1 -1
- package/dist/components/checkbox/checkbox.js +1 -1
- package/dist/components/checkbox-group/checkbox-group.d.ts +24 -3
- package/dist/components/checkbox-group/checkbox-group.d.ts.map +1 -1
- package/dist/components/checkbox-group/checkbox-group.js +20 -3
- package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
- package/dist/components/citation/citation.d.ts +211 -0
- package/dist/components/citation/citation.d.ts.map +1 -0
- package/dist/components/citation/citation.js +222 -0
- package/dist/components/citation/citation.js.map +1 -0
- package/dist/components/citation/context.d.ts +11 -0
- package/dist/components/citation/context.d.ts.map +1 -0
- package/dist/components/citation/context.js +24 -0
- package/dist/components/citation/context.js.map +1 -0
- package/dist/components/citation/use-citation.d.ts +19 -0
- package/dist/components/citation/use-citation.d.ts.map +1 -0
- package/dist/components/citation/use-citation.js +51 -0
- package/dist/components/citation/use-citation.js.map +1 -0
- package/dist/components/code-view/code-view.d.ts +21 -0
- package/dist/components/code-view/code-view.d.ts.map +1 -1
- package/dist/components/code-view/code-view.js +23 -4
- package/dist/components/code-view/code-view.js.map +1 -1
- package/dist/components/collapsible/collapsible.d.ts +6 -0
- package/dist/components/collapsible/collapsible.d.ts.map +1 -1
- package/dist/components/collapsible/collapsible.js +4 -2
- package/dist/components/collapsible/collapsible.js.map +1 -1
- package/dist/components/color-field/color-field.d.ts +2 -2
- package/dist/components/color-field/color-field.js +1 -1
- package/dist/components/color-field/color-field.js.map +1 -1
- package/dist/components/color-picker/color-picker.d.ts +41 -3
- package/dist/components/color-picker/color-picker.d.ts.map +1 -1
- package/dist/components/color-picker/color-picker.js +33 -4
- package/dist/components/color-picker/color-picker.js.map +1 -1
- package/dist/components/color-picker/use-color-picker.d.ts +3 -1
- package/dist/components/color-picker/use-color-picker.d.ts.map +1 -1
- package/dist/components/color-picker/use-color-picker.js +8 -2
- package/dist/components/color-picker/use-color-picker.js.map +1 -1
- package/dist/components/color-slider/color-slider.d.ts +2 -2
- package/dist/components/color-slider/color-slider.js +1 -1
- package/dist/components/color-slider/color-slider.js.map +1 -1
- package/dist/components/combobox/combobox.d.ts +66 -4
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/combobox.js +107 -6
- package/dist/components/combobox/combobox.js.map +1 -1
- package/dist/components/combobox/context.js +10 -1
- package/dist/components/combobox/context.js.map +1 -1
- package/dist/components/command/command.d.ts +23 -2
- package/dist/components/command/command.d.ts.map +1 -1
- package/dist/components/command/command.js +48 -6
- package/dist/components/command/command.js.map +1 -1
- package/dist/components/command/use-command.d.ts.map +1 -1
- package/dist/components/command/use-command.js +9 -30
- package/dist/components/command/use-command.js.map +1 -1
- package/dist/components/context-menu/context-menu.d.ts +63 -18
- package/dist/components/context-menu/context-menu.d.ts.map +1 -1
- package/dist/components/context-menu/context-menu.js +141 -57
- package/dist/components/context-menu/context-menu.js.map +1 -1
- package/dist/components/context-menu/context.js +1 -1
- package/dist/components/context-menu/context.js.map +1 -1
- package/dist/components/context-menu/use-context-menu.d.ts +1 -1
- package/dist/components/context-menu/use-context-menu.d.ts.map +1 -1
- package/dist/components/context-menu/use-context-menu.js +4 -2
- package/dist/components/context-menu/use-context-menu.js.map +1 -1
- package/dist/components/date-field/date-field.d.ts +9 -1
- package/dist/components/date-field/date-field.d.ts.map +1 -1
- package/dist/components/date-field/date-field.js +2 -0
- package/dist/components/date-field/date-field.js.map +1 -1
- package/dist/components/date-picker/date-picker.d.ts +41 -1
- package/dist/components/date-picker/date-picker.d.ts.map +1 -1
- package/dist/components/date-picker/date-picker.js +16 -3
- package/dist/components/date-picker/date-picker.js.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.d.ts +77 -2
- package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.js +102 -5
- package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/date-range-picker/use-date-range-picker.d.ts +1 -1
- package/dist/components/date-range-picker/use-date-range-picker.js.map +1 -1
- package/dist/components/descriptions/descriptions.d.ts +38 -7
- package/dist/components/descriptions/descriptions.d.ts.map +1 -1
- package/dist/components/descriptions/descriptions.js +38 -4
- package/dist/components/descriptions/descriptions.js.map +1 -1
- package/dist/components/dialog/dialog.d.ts +16 -1
- package/dist/components/dialog/dialog.d.ts.map +1 -1
- package/dist/components/dialog/dialog.js +15 -2
- package/dist/components/dialog/dialog.js.map +1 -1
- package/dist/components/dialog/use-dialog.d.ts.map +1 -1
- package/dist/components/dialog/use-dialog.js +9 -27
- package/dist/components/dialog/use-dialog.js.map +1 -1
- package/dist/components/diff-view/diff-view.d.ts +22 -2
- package/dist/components/diff-view/diff-view.d.ts.map +1 -1
- package/dist/components/diff-view/diff-view.js +37 -14
- package/dist/components/diff-view/diff-view.js.map +1 -1
- package/dist/components/diff-view/use-diff-view.d.ts +7 -2
- package/dist/components/diff-view/use-diff-view.d.ts.map +1 -1
- package/dist/components/diff-view/use-diff-view.js +12 -5
- package/dist/components/diff-view/use-diff-view.js.map +1 -1
- package/dist/components/drawer/drawer.d.ts +46 -1
- package/dist/components/drawer/drawer.d.ts.map +1 -1
- package/dist/components/drawer/drawer.js +28 -4
- package/dist/components/drawer/drawer.js.map +1 -1
- package/dist/components/drawer/use-drawer.d.ts +1 -1
- package/dist/components/drawer/use-drawer.d.ts.map +1 -1
- package/dist/components/drawer/use-drawer.js +12 -29
- package/dist/components/drawer/use-drawer.js.map +1 -1
- package/dist/components/empty-state/empty-state.js +4 -1
- package/dist/components/empty-state/empty-state.js.map +1 -1
- package/dist/components/empty-state/use-empty-state.js +12 -3
- package/dist/components/empty-state/use-empty-state.js.map +1 -1
- package/dist/components/field/field.js +1 -1
- package/dist/components/field-array/field-array.d.ts +1 -1
- package/dist/components/field-array/field-array.d.ts.map +1 -1
- package/dist/components/field-array/field-array.js +5 -1
- package/dist/components/field-array/field-array.js.map +1 -1
- package/dist/components/field-array/use-field-array.d.ts +3 -1
- package/dist/components/field-array/use-field-array.d.ts.map +1 -1
- package/dist/components/field-array/use-field-array.js +5 -2
- package/dist/components/field-array/use-field-array.js.map +1 -1
- package/dist/components/file-upload/file-upload.d.ts +24 -1
- package/dist/components/file-upload/file-upload.d.ts.map +1 -1
- package/dist/components/file-upload/file-upload.js +12 -2
- package/dist/components/file-upload/file-upload.js.map +1 -1
- package/dist/components/file-upload/use-file-upload.d.ts +1 -1
- package/dist/components/file-upload/use-file-upload.d.ts.map +1 -1
- package/dist/components/file-upload/use-file-upload.js.map +1 -1
- package/dist/components/flex/flex.d.ts +1 -1
- package/dist/components/flex/flex.d.ts.map +1 -1
- package/dist/components/flex/flex.js +4 -4
- package/dist/components/flex/flex.js.map +1 -1
- package/dist/components/form/form.d.ts +18 -4
- package/dist/components/form/form.d.ts.map +1 -1
- package/dist/components/form/form.js +21 -7
- package/dist/components/form/form.js.map +1 -1
- package/dist/components/form/use-form.d.ts +6 -0
- package/dist/components/form/use-form.d.ts.map +1 -1
- package/dist/components/form/use-form.js +4 -0
- package/dist/components/form/use-form.js.map +1 -1
- package/dist/components/funnel-chart/context.js +15 -0
- package/dist/components/funnel-chart/context.js.map +1 -0
- package/dist/components/funnel-chart/funnel-chart.d.ts +175 -0
- package/dist/components/funnel-chart/funnel-chart.d.ts.map +1 -0
- package/dist/components/funnel-chart/funnel-chart.js +188 -0
- package/dist/components/funnel-chart/funnel-chart.js.map +1 -0
- package/dist/components/funnel-chart/use-funnel-chart.d.ts +19 -0
- package/dist/components/funnel-chart/use-funnel-chart.d.ts.map +1 -0
- package/dist/components/funnel-chart/use-funnel-chart.js +26 -0
- package/dist/components/funnel-chart/use-funnel-chart.js.map +1 -0
- package/dist/components/graph-chart/context.js +15 -0
- package/dist/components/graph-chart/context.js.map +1 -0
- package/dist/components/graph-chart/graph-chart.d.ts +194 -0
- package/dist/components/graph-chart/graph-chart.d.ts.map +1 -0
- package/dist/components/graph-chart/graph-chart.js +219 -0
- package/dist/components/graph-chart/graph-chart.js.map +1 -0
- package/dist/components/graph-chart/use-graph-chart.d.ts +19 -0
- package/dist/components/graph-chart/use-graph-chart.d.ts.map +1 -0
- package/dist/components/graph-chart/use-graph-chart.js +26 -0
- package/dist/components/graph-chart/use-graph-chart.js.map +1 -0
- package/dist/components/grid/grid.d.ts +7 -0
- package/dist/components/grid/grid.d.ts.map +1 -1
- package/dist/components/grid/grid.js +7 -1
- package/dist/components/grid/grid.js.map +1 -1
- package/dist/components/grid-list/context.d.ts +9 -0
- package/dist/components/grid-list/context.d.ts.map +1 -0
- package/dist/components/grid-list/context.js +24 -0
- package/dist/components/grid-list/context.js.map +1 -0
- package/dist/components/grid-list/grid-list.d.ts +149 -0
- package/dist/components/grid-list/grid-list.d.ts.map +1 -0
- package/dist/components/grid-list/grid-list.js +118 -0
- package/dist/components/grid-list/grid-list.js.map +1 -0
- package/dist/components/grid-list/use-grid-list.d.ts +12 -0
- package/dist/components/grid-list/use-grid-list.d.ts.map +1 -0
- package/dist/components/grid-list/use-grid-list.js +20 -0
- package/dist/components/grid-list/use-grid-list.js.map +1 -0
- package/dist/components/heatmap/heatmap.d.ts +45 -4
- package/dist/components/heatmap/heatmap.d.ts.map +1 -1
- package/dist/components/heatmap/heatmap.js +40 -14
- package/dist/components/heatmap/heatmap.js.map +1 -1
- package/dist/components/heatmap/use-heatmap.d.ts +4 -2
- package/dist/components/heatmap/use-heatmap.d.ts.map +1 -1
- package/dist/components/heatmap/use-heatmap.js +8 -4
- package/dist/components/heatmap/use-heatmap.js.map +1 -1
- package/dist/components/hierarchy-chart/context.js +15 -0
- package/dist/components/hierarchy-chart/context.js.map +1 -0
- package/dist/components/hierarchy-chart/hierarchy-chart.d.ts +201 -0
- package/dist/components/hierarchy-chart/hierarchy-chart.d.ts.map +1 -0
- package/dist/components/hierarchy-chart/hierarchy-chart.js +228 -0
- package/dist/components/hierarchy-chart/hierarchy-chart.js.map +1 -0
- package/dist/components/hierarchy-chart/use-hierarchy-chart.d.ts +19 -0
- package/dist/components/hierarchy-chart/use-hierarchy-chart.d.ts.map +1 -0
- package/dist/components/hierarchy-chart/use-hierarchy-chart.js +26 -0
- package/dist/components/hierarchy-chart/use-hierarchy-chart.js.map +1 -0
- package/dist/components/hover-card/hover-card.js +2 -2
- package/dist/components/icon/icon.d.ts +7 -1
- package/dist/components/icon/icon.d.ts.map +1 -1
- package/dist/components/icon/icon.js +1 -0
- package/dist/components/icon/icon.js.map +1 -1
- package/dist/components/image/use-image.d.ts.map +1 -1
- package/dist/components/image/use-image.js +3 -1
- package/dist/components/image/use-image.js.map +1 -1
- package/dist/components/image-cropper/image-cropper.d.ts +35 -4
- package/dist/components/image-cropper/image-cropper.d.ts.map +1 -1
- package/dist/components/image-cropper/image-cropper.js +34 -5
- package/dist/components/image-cropper/image-cropper.js.map +1 -1
- package/dist/components/image-cropper/use-image-cropper.d.ts +3 -1
- package/dist/components/image-cropper/use-image-cropper.d.ts.map +1 -1
- package/dist/components/image-cropper/use-image-cropper.js +4 -1
- package/dist/components/image-cropper/use-image-cropper.js.map +1 -1
- package/dist/components/image-viewer/image-viewer.js +1 -1
- package/dist/components/image-viewer/use-image-viewer.d.ts.map +1 -1
- package/dist/components/image-viewer/use-image-viewer.js +9 -27
- package/dist/components/image-viewer/use-image-viewer.js.map +1 -1
- package/dist/components/infinite-scroll/infinite-scroll.d.ts +9 -1
- package/dist/components/infinite-scroll/infinite-scroll.d.ts.map +1 -1
- package/dist/components/infinite-scroll/infinite-scroll.js +2 -0
- package/dist/components/infinite-scroll/infinite-scroll.js.map +1 -1
- package/dist/components/input-group/input-group.d.ts.map +1 -1
- package/dist/components/input-group/input-group.js +2 -1
- package/dist/components/input-group/input-group.js.map +1 -1
- package/dist/components/json-viewer/json-viewer.d.ts +17 -2
- package/dist/components/json-viewer/json-viewer.d.ts.map +1 -1
- package/dist/components/json-viewer/json-viewer.js +26 -8
- package/dist/components/json-viewer/json-viewer.js.map +1 -1
- package/dist/components/kbd/kbd.d.ts.map +1 -1
- package/dist/components/kbd/kbd.js +27 -10
- package/dist/components/kbd/kbd.js.map +1 -1
- package/dist/components/listbox/listbox.d.ts +25 -2
- package/dist/components/listbox/listbox.d.ts.map +1 -1
- package/dist/components/listbox/listbox.js +39 -4
- package/dist/components/listbox/listbox.js.map +1 -1
- package/dist/components/loading-bar/use-loading-bar.d.ts.map +1 -1
- package/dist/components/loading-bar/use-loading-bar.js +3 -1
- package/dist/components/loading-bar/use-loading-bar.js.map +1 -1
- package/dist/components/log/log.d.ts +41 -2
- package/dist/components/log/log.d.ts.map +1 -1
- package/dist/components/log/log.js +25 -3
- package/dist/components/log/log.js.map +1 -1
- package/dist/components/log/use-log.d.ts +1 -1
- package/dist/components/log/use-log.d.ts.map +1 -1
- package/dist/components/log/use-log.js +4 -1
- package/dist/components/log/use-log.js.map +1 -1
- package/dist/components/markdown-stream/markdown-stream.d.ts +22 -2
- package/dist/components/markdown-stream/markdown-stream.d.ts.map +1 -1
- package/dist/components/markdown-stream/markdown-stream.js +43 -4
- package/dist/components/markdown-stream/markdown-stream.js.map +1 -1
- package/dist/components/marquee/marquee.d.ts +68 -12
- package/dist/components/marquee/marquee.d.ts.map +1 -1
- package/dist/components/marquee/marquee.js +52 -7
- package/dist/components/marquee/marquee.js.map +1 -1
- package/dist/components/mention/mention.d.ts +43 -7
- package/dist/components/mention/mention.d.ts.map +1 -1
- package/dist/components/mention/mention.js +50 -8
- package/dist/components/mention/mention.js.map +1 -1
- package/dist/components/menu/context.js +1 -1
- package/dist/components/menu/context.js.map +1 -1
- package/dist/components/menu/menu.d.ts +92 -28
- package/dist/components/menu/menu.d.ts.map +1 -1
- package/dist/components/menu/menu.js +162 -54
- package/dist/components/menu/menu.js.map +1 -1
- package/dist/components/menu/use-menu.d.ts +1 -1
- package/dist/components/menu/use-menu.d.ts.map +1 -1
- package/dist/components/menu/use-menu.js +8 -6
- package/dist/components/menu/use-menu.js.map +1 -1
- package/dist/components/menubar/context.js +1 -1
- package/dist/components/menubar/context.js.map +1 -1
- package/dist/components/menubar/menubar.d.ts +52 -19
- package/dist/components/menubar/menubar.d.ts.map +1 -1
- package/dist/components/menubar/menubar.js +137 -56
- package/dist/components/menubar/menubar.js.map +1 -1
- package/dist/components/menubar/use-menubar.d.ts +1 -1
- package/dist/components/menubar/use-menubar.d.ts.map +1 -1
- package/dist/components/menubar/use-menubar.js +4 -2
- package/dist/components/menubar/use-menubar.js.map +1 -1
- package/dist/components/message-feed/message-feed.d.ts +13 -1
- package/dist/components/message-feed/message-feed.d.ts.map +1 -1
- package/dist/components/message-feed/message-feed.js +25 -1
- package/dist/components/message-feed/message-feed.js.map +1 -1
- package/dist/components/navigation-menu/navigation-menu.d.ts +58 -1
- package/dist/components/navigation-menu/navigation-menu.d.ts.map +1 -1
- package/dist/components/navigation-menu/navigation-menu.js +82 -10
- package/dist/components/navigation-menu/navigation-menu.js.map +1 -1
- package/dist/components/notification/context.d.ts +5 -1
- package/dist/components/notification/context.d.ts.map +1 -1
- package/dist/components/notification/context.js.map +1 -1
- package/dist/components/notification/notification.d.ts +39 -23
- package/dist/components/notification/notification.d.ts.map +1 -1
- package/dist/components/notification/notification.js +27 -9
- package/dist/components/notification/notification.js.map +1 -1
- package/dist/components/notification/use-item-exit.js +22 -0
- package/dist/components/notification/use-item-exit.js.map +1 -0
- package/dist/components/notification/use-notification.d.ts +3 -3
- package/dist/components/notification/use-notification.d.ts.map +1 -1
- package/dist/components/notification/use-notification.js +20 -5
- package/dist/components/notification/use-notification.js.map +1 -1
- package/dist/components/number-animation/number-animation.d.ts +14 -2
- package/dist/components/number-animation/number-animation.d.ts.map +1 -1
- package/dist/components/number-animation/number-animation.js +5 -1
- package/dist/components/number-animation/number-animation.js.map +1 -1
- package/dist/components/number-field/number-field.d.ts +16 -1
- package/dist/components/number-field/number-field.d.ts.map +1 -1
- package/dist/components/number-field/number-field.js +6 -0
- package/dist/components/number-field/number-field.js.map +1 -1
- package/dist/components/page-header/page-header.d.ts.map +1 -1
- package/dist/components/page-header/page-header.js +2 -1
- package/dist/components/page-header/page-header.js.map +1 -1
- package/dist/components/pagination/pagination.d.ts +22 -2
- package/dist/components/pagination/pagination.d.ts.map +1 -1
- package/dist/components/pagination/pagination.js +22 -1
- package/dist/components/pagination/pagination.js.map +1 -1
- package/dist/components/pagination/use-pagination.js +1 -0
- package/dist/components/pagination/use-pagination.js.map +1 -1
- package/dist/components/pie-chart/context.js +15 -0
- package/dist/components/pie-chart/context.js.map +1 -0
- package/dist/components/pie-chart/pie-chart.d.ts +203 -0
- package/dist/components/pie-chart/pie-chart.d.ts.map +1 -0
- package/dist/components/pie-chart/pie-chart.js +236 -0
- package/dist/components/pie-chart/pie-chart.js.map +1 -0
- package/dist/components/pie-chart/use-pie-chart.d.ts +19 -0
- package/dist/components/pie-chart/use-pie-chart.d.ts.map +1 -0
- package/dist/components/pie-chart/use-pie-chart.js +26 -0
- package/dist/components/pie-chart/use-pie-chart.js.map +1 -0
- package/dist/components/popconfirm/popconfirm.js +2 -2
- package/dist/components/popover/popover.d.ts +11 -0
- package/dist/components/popover/popover.d.ts.map +1 -1
- package/dist/components/popover/popover.js +7 -2
- package/dist/components/popover/popover.js.map +1 -1
- package/dist/components/progress/progress.d.ts +63 -3
- package/dist/components/progress/progress.d.ts.map +1 -1
- package/dist/components/progress/progress.js +55 -3
- package/dist/components/progress/progress.js.map +1 -1
- package/dist/components/question-flow/question-flow.d.ts +40 -1
- package/dist/components/question-flow/question-flow.d.ts.map +1 -1
- package/dist/components/question-flow/question-flow.js +37 -1
- package/dist/components/question-flow/question-flow.js.map +1 -1
- package/dist/components/radar-chart/context.js +15 -0
- package/dist/components/radar-chart/context.js.map +1 -0
- package/dist/components/radar-chart/radar-chart.d.ts +189 -0
- package/dist/components/radar-chart/radar-chart.d.ts.map +1 -0
- package/dist/components/radar-chart/radar-chart.js +220 -0
- package/dist/components/radar-chart/radar-chart.js.map +1 -0
- package/dist/components/radar-chart/use-radar-chart.d.ts +19 -0
- package/dist/components/radar-chart/use-radar-chart.d.ts.map +1 -0
- package/dist/components/radar-chart/use-radar-chart.js +26 -0
- package/dist/components/radar-chart/use-radar-chart.js.map +1 -0
- package/dist/components/radio-group/radio-group.d.ts +37 -2
- package/dist/components/radio-group/radio-group.d.ts.map +1 -1
- package/dist/components/radio-group/radio-group.js +54 -8
- package/dist/components/radio-group/radio-group.js.map +1 -1
- package/dist/components/radio-group/use-radio-group.d.ts +3 -1
- package/dist/components/radio-group/use-radio-group.d.ts.map +1 -1
- package/dist/components/radio-group/use-radio-group.js +7 -3
- package/dist/components/radio-group/use-radio-group.js.map +1 -1
- package/dist/components/reasoning/reasoning.d.ts.map +1 -1
- package/dist/components/reasoning/reasoning.js +1 -0
- package/dist/components/reasoning/reasoning.js.map +1 -1
- package/dist/components/sankey-chart/context.js +15 -0
- package/dist/components/sankey-chart/context.js.map +1 -0
- package/dist/components/sankey-chart/sankey-chart.d.ts +161 -0
- package/dist/components/sankey-chart/sankey-chart.d.ts.map +1 -0
- package/dist/components/sankey-chart/sankey-chart.js +208 -0
- package/dist/components/sankey-chart/sankey-chart.js.map +1 -0
- package/dist/components/sankey-chart/use-sankey-chart.d.ts +19 -0
- package/dist/components/sankey-chart/use-sankey-chart.d.ts.map +1 -0
- package/dist/components/sankey-chart/use-sankey-chart.js +26 -0
- package/dist/components/sankey-chart/use-sankey-chart.js.map +1 -0
- package/dist/components/scroll-area/scroll-area.d.ts +13 -5
- package/dist/components/scroll-area/scroll-area.d.ts.map +1 -1
- package/dist/components/scroll-area/scroll-area.js +17 -3
- package/dist/components/scroll-area/scroll-area.js.map +1 -1
- package/dist/components/select/select.d.ts +25 -2
- package/dist/components/select/select.d.ts.map +1 -1
- package/dist/components/select/select.js +48 -6
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/select/use-select.js +2 -1
- package/dist/components/select/use-select.js.map +1 -1
- package/dist/components/side-nav/context.js +17 -1
- package/dist/components/side-nav/context.js.map +1 -1
- package/dist/components/side-nav/side-nav.d.ts +51 -7
- package/dist/components/side-nav/side-nav.d.ts.map +1 -1
- package/dist/components/side-nav/side-nav.js +152 -13
- package/dist/components/side-nav/side-nav.js.map +1 -1
- package/dist/components/side-nav/use-side-nav.d.ts +4 -2
- package/dist/components/side-nav/use-side-nav.d.ts.map +1 -1
- package/dist/components/side-nav/use-side-nav.js +5 -3
- package/dist/components/side-nav/use-side-nav.js.map +1 -1
- package/dist/components/signature-pad/signature-pad.d.ts +26 -4
- package/dist/components/signature-pad/signature-pad.d.ts.map +1 -1
- package/dist/components/signature-pad/signature-pad.js +32 -4
- package/dist/components/signature-pad/signature-pad.js.map +1 -1
- package/dist/components/signature-pad/use-signature-pad.d.ts +1 -1
- package/dist/components/signature-pad/use-signature-pad.d.ts.map +1 -1
- package/dist/components/signature-pad/use-signature-pad.js.map +1 -1
- package/dist/components/skeleton/use-skeleton.js +6 -2
- package/dist/components/skeleton/use-skeleton.js.map +1 -1
- package/dist/components/slider/slider.d.ts +27 -0
- package/dist/components/slider/slider.d.ts.map +1 -1
- package/dist/components/slider/slider.js +12 -0
- package/dist/components/slider/slider.js.map +1 -1
- package/dist/components/sortable/sortable.d.ts +18 -0
- package/dist/components/sortable/sortable.d.ts.map +1 -1
- package/dist/components/sortable/sortable.js +7 -2
- package/dist/components/sortable/sortable.js.map +1 -1
- package/dist/components/sortable/use-sortable.d.ts +1 -1
- package/dist/components/sortable/use-sortable.d.ts.map +1 -1
- package/dist/components/sortable/use-sortable.js +2 -1
- package/dist/components/sortable/use-sortable.js.map +1 -1
- package/dist/components/sparkline/sparkline.d.ts +101 -0
- package/dist/components/sparkline/sparkline.d.ts.map +1 -0
- package/dist/components/sparkline/sparkline.js +54 -0
- package/dist/components/sparkline/sparkline.js.map +1 -0
- package/dist/components/sparkline/use-sparkline.d.ts +15 -0
- package/dist/components/sparkline/use-sparkline.d.ts.map +1 -0
- package/dist/components/sparkline/use-sparkline.js +21 -0
- package/dist/components/sparkline/use-sparkline.js.map +1 -0
- package/dist/components/spinner/spinner.d.ts +8 -0
- package/dist/components/spinner/spinner.d.ts.map +1 -1
- package/dist/components/spinner/spinner.js +2 -0
- package/dist/components/spinner/spinner.js.map +1 -1
- package/dist/components/spinner/use-spinner.js +4 -2
- package/dist/components/spinner/use-spinner.js.map +1 -1
- package/dist/components/statistic/statistic.d.ts.map +1 -1
- package/dist/components/statistic/statistic.js +2 -1
- package/dist/components/statistic/statistic.js.map +1 -1
- package/dist/components/steps/steps.d.ts +28 -1
- package/dist/components/steps/steps.d.ts.map +1 -1
- package/dist/components/steps/steps.js +11 -2
- package/dist/components/steps/steps.js.map +1 -1
- package/dist/components/switch/switch.js +1 -1
- package/dist/components/table/context.js +9 -1
- package/dist/components/table/context.js.map +1 -1
- package/dist/components/table/table.d.ts +52 -3
- package/dist/components/table/table.d.ts.map +1 -1
- package/dist/components/table/table.js +40 -11
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/table/use-table.d.ts +3 -1
- package/dist/components/table/use-table.d.ts.map +1 -1
- package/dist/components/table/use-table.js +5 -2
- package/dist/components/table/use-table.js.map +1 -1
- package/dist/components/tabs/tabs.d.ts +51 -3
- package/dist/components/tabs/tabs.d.ts.map +1 -1
- package/dist/components/tabs/tabs.js +60 -8
- package/dist/components/tabs/tabs.js.map +1 -1
- package/dist/components/tag/use-tag.d.ts.map +1 -1
- package/dist/components/tag/use-tag.js +3 -1
- package/dist/components/tag/use-tag.js.map +1 -1
- package/dist/components/tag-group/tag-group.js +1 -1
- package/dist/components/tag-group/tag-group.js.map +1 -1
- package/dist/components/tags-input/tags-input.d.ts +10 -2
- package/dist/components/tags-input/tags-input.d.ts.map +1 -1
- package/dist/components/tags-input/tags-input.js +11 -4
- package/dist/components/tags-input/tags-input.js.map +1 -1
- package/dist/components/tags-input/use-tags-input.d.ts +4 -2
- package/dist/components/tags-input/use-tags-input.d.ts.map +1 -1
- package/dist/components/tags-input/use-tags-input.js +5 -2
- package/dist/components/tags-input/use-tags-input.js.map +1 -1
- package/dist/components/time-picker/time-picker.d.ts +11 -7
- package/dist/components/time-picker/time-picker.d.ts.map +1 -1
- package/dist/components/time-picker/time-picker.js +4 -2
- package/dist/components/time-picker/time-picker.js.map +1 -1
- package/dist/components/time-range-picker/time-range-picker.d.ts +11 -7
- package/dist/components/time-range-picker/time-range-picker.d.ts.map +1 -1
- package/dist/components/time-range-picker/time-range-picker.js +4 -2
- package/dist/components/time-range-picker/time-range-picker.js.map +1 -1
- package/dist/components/timeline/timeline.d.ts.map +1 -1
- package/dist/components/timeline/timeline.js +2 -1
- package/dist/components/timeline/timeline.js.map +1 -1
- package/dist/components/timestamp/timestamp.d.ts +20 -1
- package/dist/components/timestamp/timestamp.d.ts.map +1 -1
- package/dist/components/timestamp/timestamp.js +16 -5
- package/dist/components/timestamp/timestamp.js.map +1 -1
- package/dist/components/toolbar/toolbar.d.ts +17 -2
- package/dist/components/toolbar/toolbar.d.ts.map +1 -1
- package/dist/components/toolbar/toolbar.js +31 -4
- package/dist/components/toolbar/toolbar.js.map +1 -1
- package/dist/components/toolbar/use-toolbar.d.ts +4 -2
- package/dist/components/toolbar/use-toolbar.d.ts.map +1 -1
- package/dist/components/toolbar/use-toolbar.js +5 -2
- package/dist/components/toolbar/use-toolbar.js.map +1 -1
- package/dist/components/tooltip/context.d.ts +21 -0
- package/dist/components/tooltip/context.d.ts.map +1 -0
- package/dist/components/tooltip/context.js +10 -1
- package/dist/components/tooltip/context.js.map +1 -1
- package/dist/components/tooltip/tooltip.d.ts +53 -1
- package/dist/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/components/tooltip/tooltip.js +34 -3
- package/dist/components/tooltip/tooltip.js.map +1 -1
- package/dist/components/tooltip/use-tooltip.d.ts +3 -18
- package/dist/components/tooltip/use-tooltip.d.ts.map +1 -1
- package/dist/components/tooltip/use-tooltip.js +2 -0
- package/dist/components/tooltip/use-tooltip.js.map +1 -1
- package/dist/components/tour/tour.d.ts +8 -0
- package/dist/components/tour/tour.d.ts.map +1 -1
- package/dist/components/tour/tour.js +2 -0
- package/dist/components/tour/tour.js.map +1 -1
- package/dist/components/transfer/transfer.d.ts +30 -2
- package/dist/components/transfer/transfer.d.ts.map +1 -1
- package/dist/components/transfer/transfer.js +29 -3
- package/dist/components/transfer/transfer.js.map +1 -1
- package/dist/components/tree/tree.d.ts +43 -8
- package/dist/components/tree/tree.d.ts.map +1 -1
- package/dist/components/tree/tree.js +28 -15
- package/dist/components/tree/tree.js.map +1 -1
- package/dist/components/tree-select/context.js +10 -1
- package/dist/components/tree-select/context.js.map +1 -1
- package/dist/components/tree-select/tree-select.d.ts +78 -6
- package/dist/components/tree-select/tree-select.d.ts.map +1 -1
- package/dist/components/tree-select/tree-select.js +127 -12
- package/dist/components/tree-select/tree-select.js.map +1 -1
- package/dist/components/tree-select/use-tree-select.d.ts +3 -0
- package/dist/components/tree-select/use-tree-select.d.ts.map +1 -1
- package/dist/components/tree-select/use-tree-select.js +6 -1
- package/dist/components/tree-select/use-tree-select.js.map +1 -1
- package/dist/components/truncate/truncate.d.ts +25 -4
- package/dist/components/truncate/truncate.d.ts.map +1 -1
- package/dist/components/truncate/truncate.js +29 -14
- package/dist/components/truncate/truncate.js.map +1 -1
- package/dist/components/truncate/use-truncate.d.ts.map +1 -1
- package/dist/components/truncate/use-truncate.js +3 -1
- package/dist/components/truncate/use-truncate.js.map +1 -1
- package/dist/components/typography/typography.d.ts +35 -2
- package/dist/components/typography/typography.d.ts.map +1 -1
- package/dist/components/typography/typography.js +23 -4
- package/dist/components/typography/typography.js.map +1 -1
- package/dist/components/virtualizer/virtualizer.d.ts +26 -2
- package/dist/components/virtualizer/virtualizer.d.ts.map +1 -1
- package/dist/components/virtualizer/virtualizer.js +20 -3
- package/dist/components/virtualizer/virtualizer.js.map +1 -1
- package/dist/components/watermark/watermark.d.ts +14 -1
- package/dist/components/watermark/watermark.d.ts.map +1 -1
- package/dist/components/watermark/watermark.js +20 -5
- package/dist/components/watermark/watermark.js.map +1 -1
- package/dist/config/config.d.ts +1 -1
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +2 -1
- package/dist/config/config.js.map +1 -1
- package/dist/index.d.ts +65 -50
- package/dist/index.js +59 -44
- package/dist/package.js +1 -1
- package/dist/runtime/as-child.js +3 -2
- package/dist/runtime/as-child.js.map +1 -1
- package/dist/runtime/hydration.js +14 -0
- package/dist/runtime/hydration.js.map +1 -0
- package/dist/runtime/use-machine.js +3 -2
- package/dist/runtime/use-machine.js.map +1 -1
- package/dist/runtime/use-overlay-exit.js +0 -1
- package/dist/runtime/use-overlay-exit.js.map +1 -1
- package/dist/runtime/use-scrollbars.js +3 -1
- package/dist/runtime/use-scrollbars.js.map +1 -1
- package/dist/services/notification-service.d.ts +26 -7
- package/dist/services/notification-service.d.ts.map +1 -1
- package/dist/services/notification-service.js +35 -8
- package/dist/services/notification-service.js.map +1 -1
- package/dist/sound.d.ts +6 -7
- package/dist/sound.d.ts.map +1 -1
- package/dist/sound.js +6 -6
- package/dist/sound.js.map +1 -1
- package/package.json +15 -14
- package/dist/components/gradient-text/gradient-text.d.ts +0 -36
- package/dist/components/gradient-text/gradient-text.d.ts.map +0 -1
- package/dist/components/gradient-text/gradient-text.js +0 -20
- package/dist/components/gradient-text/gradient-text.js.map +0 -1
- package/dist/components/icon-wrapper/icon-wrapper.d.ts +0 -29
- package/dist/components/icon-wrapper/icon-wrapper.d.ts.map +0 -1
- package/dist/components/icon-wrapper/icon-wrapper.js +0 -20
- package/dist/components/icon-wrapper/icon-wrapper.js.map +0 -1
- package/dist/components/segmented/context.d.ts +0 -13
- package/dist/components/segmented/context.d.ts.map +0 -1
- package/dist/components/segmented/context.js +0 -24
- package/dist/components/segmented/context.js.map +0 -1
- package/dist/components/segmented/segmented.d.ts +0 -161
- package/dist/components/segmented/segmented.d.ts.map +0 -1
- package/dist/components/segmented/segmented.js +0 -142
- package/dist/components/segmented/segmented.js.map +0 -1
- package/dist/components/segmented/use-segmented.d.ts +0 -15
- package/dist/components/segmented/use-segmented.d.ts.map +0 -1
- package/dist/components/segmented/use-segmented.js +0 -22
- package/dist/components/segmented/use-segmented.js.map +0 -1
- package/dist/components/toast/context.js +0 -15
- package/dist/components/toast/context.js.map +0 -1
- package/dist/components/toast/toast.d.ts +0 -123
- package/dist/components/toast/toast.d.ts.map +0 -1
- package/dist/components/toast/toast.js +0 -112
- package/dist/components/toast/toast.js.map +0 -1
- package/dist/components/toast/use-toast.d.ts +0 -10
- package/dist/components/toast/use-toast.d.ts.map +0 -1
- package/dist/components/toast/use-toast.js +0 -17
- package/dist/components/toast/use-toast.js.map +0 -1
- package/dist/services/toast-service.d.ts +0 -69
- package/dist/services/toast-service.d.ts.map +0 -1
- package/dist/services/toast-service.js +0 -161
- package/dist/services/toast-service.js.map +0 -1
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { useOverlayExit } from "../../runtime/use-overlay-exit.js";
|
|
2
|
+
import { vueNormalize } from "../../runtime/normalize-props.js";
|
|
2
3
|
import { withXhConfig } from "../../config/config.js";
|
|
4
|
+
import { useMachine } from "../../runtime/use-machine.js";
|
|
5
|
+
import { createVueIdGenerator } from "../../runtime/vue-id.js";
|
|
6
|
+
import { mergePartProps } from "../../runtime/merge-props.js";
|
|
7
|
+
import { mergeIntoChild } from "../../runtime/as-child.js";
|
|
3
8
|
import { XhPortal } from "../../runtime/portal.js";
|
|
4
|
-
import { provideSideNav, provideSideNavNode, useSideNavContext, useSideNavNodeContext } from "./context.js";
|
|
9
|
+
import { provideSideNav, provideSideNavGroup, provideSideNavItem, provideSideNavNode, useSideNavContext, useSideNavGroupContext, useSideNavItemContext, useSideNavNodeContext } from "./context.js";
|
|
10
|
+
import { useTooltipGroup } from "../tooltip/context.js";
|
|
5
11
|
import { useSideNav } from "./use-side-nav.js";
|
|
6
|
-
import { defineComponent, h, nextTick, onMounted, ref } from "vue";
|
|
12
|
+
import { computed, defineComponent, h, nextTick, onBeforeUnmount, onMounted, ref, shallowRef, watch } from "vue";
|
|
13
|
+
import { createScope } from "@xihan-ui/core";
|
|
14
|
+
import { connectSideNav, findSideNavRowEl, sideNavTooltipProps, tooltipMachine } from "@xihan-ui/headless";
|
|
15
|
+
import { createPositionEngine } from "@xihan-ui/position";
|
|
7
16
|
//#region src/components/side-nav/side-nav.ts
|
|
8
17
|
const XhSideNavRoot = defineComponent({
|
|
9
18
|
name: "XhSideNavRoot",
|
|
@@ -30,6 +39,8 @@ const XhSideNavRoot = defineComponent({
|
|
|
30
39
|
dir: { type: String },
|
|
31
40
|
tone: { type: String },
|
|
32
41
|
size: { type: String },
|
|
42
|
+
/** 搜索框的匹配规则;缺省为标签(缺省退回 value)大小写不敏感包含。 */
|
|
43
|
+
filter: { type: Function },
|
|
33
44
|
translations: { type: Object }
|
|
34
45
|
},
|
|
35
46
|
emits: {
|
|
@@ -65,7 +76,10 @@ const XhSideNavRoot = defineComponent({
|
|
|
65
76
|
expand: ctx.api.value.expand,
|
|
66
77
|
collapse: ctx.api.value.collapse,
|
|
67
78
|
openPopout: ctx.api.value.openPopout,
|
|
68
|
-
closePopout: ctx.api.value.closePopout
|
|
79
|
+
closePopout: ctx.api.value.closePopout,
|
|
80
|
+
inputValue: ctx.api.value.inputValue,
|
|
81
|
+
setInputValue: ctx.api.value.setInputValue,
|
|
82
|
+
searching: ctx.api.value.searching
|
|
69
83
|
}));
|
|
70
84
|
}
|
|
71
85
|
});
|
|
@@ -76,24 +90,66 @@ const XhSideNavList = defineComponent({
|
|
|
76
90
|
return () => h("ul", ctx.api.value.getListProps(), slots.default?.());
|
|
77
91
|
}
|
|
78
92
|
});
|
|
93
|
+
/** 搜索框:放在 list 之前,输入即按标签过滤导航树。 */
|
|
94
|
+
const XhSideNavInput = defineComponent({
|
|
95
|
+
name: "XhSideNavInput",
|
|
96
|
+
setup() {
|
|
97
|
+
const ctx = useSideNavContext();
|
|
98
|
+
return () => h("input", ctx.api.value.getInputProps());
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
/** 搜索一条都没命中时露面的占位;没写内容时显示 translations.noMatch。 */
|
|
102
|
+
const XhSideNavEmpty = defineComponent({
|
|
103
|
+
name: "XhSideNavEmpty",
|
|
104
|
+
setup(_, { slots }) {
|
|
105
|
+
const ctx = useSideNavContext();
|
|
106
|
+
return () => h("div", ctx.api.value.getEmptyProps(), slots.default?.() ?? ctx.api.value.translations.noMatch);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
/** 把一个值登记进所在分组,值变了换一条,卸下时撤销。登记写的是分组的成员表,回调不追踪它,免得自己触发自己。 */
|
|
110
|
+
function joinGroup(value) {
|
|
111
|
+
const group = useSideNavGroupContext();
|
|
112
|
+
if (!group) return;
|
|
113
|
+
watch(value, (next, _, onCleanup) => onCleanup(group.join(next)), { immediate: true });
|
|
114
|
+
}
|
|
79
115
|
const XhSideNavItem = defineComponent({
|
|
80
116
|
name: "XhSideNavItem",
|
|
81
117
|
setup(_, { slots }) {
|
|
82
118
|
const ctx = useSideNavContext();
|
|
83
|
-
|
|
119
|
+
const linkValue = shallowRef(null);
|
|
120
|
+
provideSideNavItem((value) => {
|
|
121
|
+
linkValue.value = value;
|
|
122
|
+
});
|
|
123
|
+
return () => h("li", ctx.api.value.getItemProps({ value: linkValue.value ?? void 0 }), slots.default?.());
|
|
84
124
|
}
|
|
85
125
|
});
|
|
86
126
|
const XhSideNavGroup = defineComponent({
|
|
87
127
|
name: "XhSideNavGroup",
|
|
88
128
|
props: {
|
|
89
|
-
/**
|
|
129
|
+
/** 分组身份,group-label 与 group-list 依靠它配对。 */
|
|
90
130
|
value: {
|
|
91
131
|
type: String,
|
|
92
132
|
required: true
|
|
93
133
|
} },
|
|
94
134
|
setup(props, { slots }) {
|
|
95
135
|
const ctx = useSideNavContext();
|
|
96
|
-
|
|
136
|
+
const members = shallowRef([]);
|
|
137
|
+
provideSideNavGroup({
|
|
138
|
+
get value() {
|
|
139
|
+
return props.value;
|
|
140
|
+
},
|
|
141
|
+
join: (value) => {
|
|
142
|
+
members.value = [...members.value, value];
|
|
143
|
+
return () => {
|
|
144
|
+
const at = members.value.indexOf(value);
|
|
145
|
+
if (at !== -1) members.value = members.value.filter((_, i) => i !== at);
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
return () => h("li", ctx.api.value.getGroupProps({
|
|
150
|
+
value: props.value,
|
|
151
|
+
members: members.value
|
|
152
|
+
}), slots.default?.());
|
|
97
153
|
}
|
|
98
154
|
});
|
|
99
155
|
const XhSideNavGroupLabel = defineComponent({
|
|
@@ -107,6 +163,16 @@ const XhSideNavGroupLabel = defineComponent({
|
|
|
107
163
|
return () => h("div", ctx.api.value.getGroupLabelProps({ value: props.value }), slots.default?.());
|
|
108
164
|
}
|
|
109
165
|
});
|
|
166
|
+
/** 分组里的列表:组内的 item 与 branch 挂在这里,以组标题命名;分组身份取自所在的 XhSideNavGroup。 */
|
|
167
|
+
const XhSideNavGroupList = defineComponent({
|
|
168
|
+
name: "XhSideNavGroupList",
|
|
169
|
+
setup(_, { slots }) {
|
|
170
|
+
const ctx = useSideNavContext();
|
|
171
|
+
const group = useSideNavGroupContext();
|
|
172
|
+
if (!group) throw new Error("[xh] XhSideNavGroupList 必须用在 XhSideNavGroup 内");
|
|
173
|
+
return () => h("ul", ctx.api.value.getGroupListProps({ value: group.value }), slots.default?.());
|
|
174
|
+
}
|
|
175
|
+
});
|
|
110
176
|
const XhSideNavBranch = defineComponent({
|
|
111
177
|
name: "XhSideNavBranch",
|
|
112
178
|
props: { value: {
|
|
@@ -116,6 +182,7 @@ const XhSideNavBranch = defineComponent({
|
|
|
116
182
|
setup(props, { slots }) {
|
|
117
183
|
const ctx = useSideNavContext();
|
|
118
184
|
provideSideNavNode(props);
|
|
185
|
+
joinGroup(() => props.value);
|
|
119
186
|
return () => h("li", ctx.api.value.getBranchProps({ value: props.value }), slots.default?.());
|
|
120
187
|
}
|
|
121
188
|
});
|
|
@@ -201,6 +268,62 @@ container: { type: Object } },
|
|
|
201
268
|
};
|
|
202
269
|
}
|
|
203
270
|
});
|
|
271
|
+
/**
|
|
272
|
+
* 图标栏的名称提示:落成图标栏后,只剩图标的行悬停或聚焦时在行尾一侧显示行的标签。
|
|
273
|
+
* 本体是一台内嵌的 Tooltip 机器(延时、接替窗口、提示组与定位全随 Tooltip),开合受控于侧栏;
|
|
274
|
+
* 放一个即可,定位层搬到浮层落点,文字取 collection 里的标签,对读屏隐藏。
|
|
275
|
+
*/
|
|
276
|
+
const XhSideNavTooltip = defineComponent({
|
|
277
|
+
name: "XhSideNavTooltip",
|
|
278
|
+
props: {
|
|
279
|
+
/** 名称提示的 Portal 容器;优先于应用级配置。 */
|
|
280
|
+
container: { type: Object } },
|
|
281
|
+
setup(props) {
|
|
282
|
+
const ctx = useSideNavContext();
|
|
283
|
+
const positionerRef = ref(null);
|
|
284
|
+
const contentRef = ref(null);
|
|
285
|
+
const hint = useMachine(tooltipMachine, () => sideNavTooltipProps(ctx.service), createScope(null, createVueIdGenerator()));
|
|
286
|
+
const anchor = () => findSideNavRowEl(ctx.service, ctx.service.context.get("tooltipValue"));
|
|
287
|
+
const config = ctx.config;
|
|
288
|
+
if (config) {
|
|
289
|
+
hint.refs.set("config", config);
|
|
290
|
+
hint.refs.set("registerLayer", () => config.layerRegistry.register({
|
|
291
|
+
kind: "inline",
|
|
292
|
+
node: () => contentRef.value,
|
|
293
|
+
branches: () => [anchor()].filter(Boolean),
|
|
294
|
+
isModal: () => false,
|
|
295
|
+
surfaces: () => []
|
|
296
|
+
}));
|
|
297
|
+
hint.refs.set("position", createPositionEngine());
|
|
298
|
+
}
|
|
299
|
+
hint.refs.set("getAnchorEl", anchor);
|
|
300
|
+
hint.refs.set("getFloatingEl", () => positionerRef.value);
|
|
301
|
+
hint.refs.set("group", useTooltipGroup());
|
|
302
|
+
const visible = useOverlayExit({
|
|
303
|
+
config,
|
|
304
|
+
isOpen: () => hint.state.matches("visible"),
|
|
305
|
+
contentRef,
|
|
306
|
+
onPresence: (presence) => hint.refs.set("presence", presence)
|
|
307
|
+
});
|
|
308
|
+
ctx.tooltip.value = hint;
|
|
309
|
+
onBeforeUnmount(() => {
|
|
310
|
+
if (ctx.tooltip.value === hint) ctx.tooltip.value = null;
|
|
311
|
+
});
|
|
312
|
+
const api = computed(() => connectSideNav(ctx.service, vueNormalize, hint));
|
|
313
|
+
return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value }, () => [h("div", {
|
|
314
|
+
...api.value.getTooltipPositionerProps(),
|
|
315
|
+
ref: (el) => {
|
|
316
|
+
positionerRef.value = el;
|
|
317
|
+
}
|
|
318
|
+
}, [h("div", {
|
|
319
|
+
...api.value.getTooltipContentProps(),
|
|
320
|
+
style: visible.value ? void 0 : { display: "none" },
|
|
321
|
+
ref: (el) => {
|
|
322
|
+
contentRef.value = el;
|
|
323
|
+
}
|
|
324
|
+
}, api.value.tooltipText)])]);
|
|
325
|
+
}
|
|
326
|
+
});
|
|
204
327
|
const XhSideNavLinkText = defineComponent({
|
|
205
328
|
name: "XhSideNavLinkText",
|
|
206
329
|
setup(_, { slots }) {
|
|
@@ -210,16 +333,32 @@ const XhSideNavLinkText = defineComponent({
|
|
|
210
333
|
});
|
|
211
334
|
const XhSideNavLink = defineComponent({
|
|
212
335
|
name: "XhSideNavLink",
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
336
|
+
inheritAttrs: false,
|
|
337
|
+
props: {
|
|
338
|
+
value: {
|
|
339
|
+
type: String,
|
|
340
|
+
required: true
|
|
341
|
+
},
|
|
342
|
+
/** 借用作者的子节点(如路由链接)作为链接,不再渲染自己的 `<a>`;子节点须恰好一个。 */
|
|
343
|
+
asChild: Boolean
|
|
344
|
+
},
|
|
345
|
+
setup(props, { slots, attrs }) {
|
|
218
346
|
const ctx = useSideNavContext();
|
|
219
|
-
|
|
347
|
+
const reportItem = useSideNavItemContext();
|
|
348
|
+
if (reportItem) {
|
|
349
|
+
watch(() => props.value, (next) => reportItem(next), { immediate: true });
|
|
350
|
+
onBeforeUnmount(() => reportItem(null));
|
|
351
|
+
}
|
|
352
|
+
joinGroup(() => props.value);
|
|
353
|
+
return () => {
|
|
354
|
+
const part = mergePartProps(ctx.api.value.getLinkProps({ value: props.value }), attrs);
|
|
355
|
+
const children = slots.default?.();
|
|
356
|
+
if (props.asChild) return mergeIntoChild(children, part, "side-nav", { applyAnatomy: true });
|
|
357
|
+
return h("a", part, children);
|
|
358
|
+
};
|
|
220
359
|
}
|
|
221
360
|
});
|
|
222
361
|
//#endregion
|
|
223
|
-
export { XhSideNavBranch, XhSideNavBranchContent, XhSideNavBranchIndicator, XhSideNavBranchText, XhSideNavBranchTrigger, XhSideNavGroup, XhSideNavGroupLabel, XhSideNavItem, XhSideNavLink, XhSideNavLinkText, XhSideNavList, XhSideNavRoot };
|
|
362
|
+
export { XhSideNavBranch, XhSideNavBranchContent, XhSideNavBranchIndicator, XhSideNavBranchText, XhSideNavBranchTrigger, XhSideNavEmpty, XhSideNavGroup, XhSideNavGroupLabel, XhSideNavGroupList, XhSideNavInput, XhSideNavItem, XhSideNavLink, XhSideNavLinkText, XhSideNavList, XhSideNavRoot, XhSideNavTooltip };
|
|
224
363
|
|
|
225
364
|
//# sourceMappingURL=side-nav.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"side-nav.js","names":[],"sources":["../../../src/components/side-nav/side-nav.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 side nav 相关实现。\n\nimport type { Size, Tone } from '@xihan-ui/core'\nimport type { PresenceHandle } from '@xihan-ui/core/presence'\nimport type { SideNavApi, SideNavNode, SideNavSchema } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, h, nextTick, onMounted, ref } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { XhPortal } from '../../runtime/portal'\nimport { useOverlayExit } from '../../runtime/use-overlay-exit'\nimport { provideSideNav, provideSideNavNode, useSideNavContext, useSideNavNodeContext } from './context'\nimport { useSideNav } from './use-side-nav'\n\ntype SideNavProps = SideNavSchema['props']\n\n/** 默认插槽的载荷:选中项、展开集合、折叠与浮层状态、逐节点的状态判定,以及选中、展开、折叠、弹出等命令。 */\nexport type SideNavRootSlotProps = Pick<\n SideNavApi,\n | 'value'\n | 'expandedValue'\n | 'collapsed'\n | 'popoutValue'\n | 'isSelected'\n | 'isExpanded'\n | 'isActiveBranch'\n | 'select'\n | 'setValue'\n | 'setExpandedValue'\n | 'expand'\n | 'collapse'\n | 'openPopout'\n | 'closePopout'\n>\n\nexport const XhSideNavRoot = defineComponent({\n name: 'XhSideNavRoot',\n // 缺省值由 connect 与机器给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<SideNavNode[]> },\n value: { type: String as PropType<string | null> },\n defaultValue: { type: String as PropType<string | null> },\n expandedValue: { type: Array as PropType<string[]> },\n defaultExpandedValue: { type: Array as PropType<string[]> },\n accordion: Boolean,\n collapsed: { type: Boolean, default: undefined },\n collapsedPopout: { type: Boolean, default: undefined },\n disabled: Boolean,\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<SideNavProps['dir']> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n translations: { type: Object as PropType<SideNavProps['translations']> },\n },\n // *-change 携带 details 对象,update:* 携带裸值,支持 v-model:value 与 v-model:expanded-value\n emits: {\n 'value-change': (_details: PayloadOf<SideNavProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<SideNavProps, 'onValueChange'>['value']) => true,\n 'expanded-value-change': (_details: PayloadOf<SideNavProps, 'onExpandedValueChange'>) => true,\n 'update:expandedValue': (_value: PayloadOf<SideNavProps, 'onExpandedValueChange'>['value']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: SideNavRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const ctx = useSideNav(withXhConfig('side-nav', props) as SideNavProps, {\n onValueChange: (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n },\n onExpandedValueChange: (details) => {\n emit('expanded-value-change', details)\n emit('update:expandedValue', details.value)\n },\n })\n provideSideNav(ctx)\n // 经插槽暴露状态与命令,供折叠开关这类外部控件使用\n return () => h('nav', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n value: ctx.api.value.value,\n expandedValue: ctx.api.value.expandedValue,\n collapsed: ctx.api.value.collapsed,\n popoutValue: ctx.api.value.popoutValue,\n isSelected: ctx.api.value.isSelected,\n isExpanded: ctx.api.value.isExpanded,\n isActiveBranch: ctx.api.value.isActiveBranch,\n select: ctx.api.value.select,\n setValue: ctx.api.value.setValue,\n setExpandedValue: ctx.api.value.setExpandedValue,\n expand: ctx.api.value.expand,\n collapse: ctx.api.value.collapse,\n openPopout: ctx.api.value.openPopout,\n closePopout: ctx.api.value.closePopout,\n }))\n },\n})\n\nexport const XhSideNavList = defineComponent({\n name: 'XhSideNavList',\n setup(_, { slots }) {\n const ctx = useSideNavContext()\n return () => h('ul', ctx.api.value.getListProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n// 叶子行的列表项:列表容器是 ul,链接得裹在 li 里才是它合法的直接子节点\nexport const XhSideNavItem = defineComponent({\n name: 'XhSideNavItem',\n setup(_, { slots }) {\n const ctx = useSideNavContext()\n return () => h('li', ctx.api.value.getItemProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSideNavGroup = defineComponent({\n name: 'XhSideNavGroup',\n props: {\n /** 分组身份,与 group-label 依靠它配对。 */\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useSideNavContext()\n return () => h('li', ctx.api.value.getGroupProps({ value: props.value }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSideNavGroupLabel = defineComponent({\n name: 'XhSideNavGroupLabel',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useSideNavContext()\n return () => h('div', ctx.api.value.getGroupLabelProps({ value: props.value }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSideNavBranch = defineComponent({\n name: 'XhSideNavBranch',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useSideNavContext()\n provideSideNavNode(props)\n return () => h('li', ctx.api.value.getBranchProps({ value: props.value }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSideNavBranchTrigger = defineComponent({\n name: 'XhSideNavBranchTrigger',\n setup(_, { slots }) {\n const ctx = useSideNavContext()\n const node = useSideNavNodeContext()\n return () => h('button', ctx.api.value.getBranchTriggerProps({ value: node.value }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSideNavBranchText = defineComponent({\n name: 'XhSideNavBranchText',\n setup(_, { slots }) {\n const ctx = useSideNavContext()\n return () => h('span', ctx.api.value.getBranchTextProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSideNavBranchIndicator = defineComponent({\n name: 'XhSideNavBranchIndicator',\n setup(_, { slots }) {\n const ctx = useSideNavContext()\n const node = useSideNavNodeContext()\n return () => h('span', ctx.api.value.getBranchIndicatorProps({ value: node.value }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSideNavBranchContent = defineComponent({\n name: 'XhSideNavBranchContent',\n props: {\n /** 本分支弹层的 Portal 容器;优先于应用级配置。 */\n container: { type: Object as PropType<Element> },\n },\n setup(props, { slots }) {\n const ctx = useSideNavContext()\n const node = useSideNavNodeContext()\n // 一个弹出面板一份退场闸门:退场动画挂在面板上,从它身上探测。\n // 开合判据直接取 connect 这一帧的产出,不另起一套\n const panelRef = ref<HTMLElement | null>(null)\n let presence: PresenceHandle | null = null\n const visible = useOverlayExit({\n config: ctx.config,\n isOpen: () => (ctx.api.value.getPopoutPositionerProps({ value: node.value }) as Record<string, unknown>).hidden !== true,\n contentRef: panelRef,\n onPresence: (next) => {\n const previous = presence\n presence = next\n if (ctx.service.getStatus() !== 'Started')\n return\n if (next)\n ctx.service.send({ type: 'PRESENCE.SET', value: node.value, presence: next, connected: true })\n else if (previous)\n ctx.service.send({ type: 'PRESENCE.SET', value: node.value, presence: previous, connected: false })\n },\n })\n onMounted(() => {\n void nextTick(() => {\n if (presence && ctx.service.getStatus() === 'Started')\n ctx.service.send({ type: 'PRESENCE.SET', value: node.value, presence, connected: true })\n })\n })\n return () => {\n if (!ctx.api.value.isPopoutPanel(node.value)) {\n // 平铺分支没有定位层,原地渲染\n return h('ul', ctx.api.value.getBranchContentProps({ value: node.value }) as Record<string, unknown>, slots.default?.())\n }\n // 折叠态的弹出面板:定位层搬到浮层落点,逃开祖先的层叠上下文。\n // 收起跟着退场闸门走:定位层与面板的 hidden 都押后到退场动画播完\n const hidden = !visible.value || undefined\n const content = h('ul', {\n ...ctx.api.value.getBranchContentProps({ value: node.value }) as Record<string, unknown>,\n hidden,\n ref: (el: unknown) => { panelRef.value = el as HTMLElement | null },\n }, slots.default?.())\n return h(XhPortal, { to: props.container ?? ctx.portalTarget.value }, () => [\n h('div', {\n ...ctx.api.value.getPopoutPositionerProps({ value: node.value }) as Record<string, unknown>,\n hidden,\n }, [content]),\n ])\n }\n },\n})\n\nexport const XhSideNavLinkText = defineComponent({\n name: 'XhSideNavLinkText',\n setup(_, { slots }) {\n const ctx = useSideNavContext()\n return () => h('span', ctx.api.value.getLinkTextProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSideNavLink = defineComponent({\n name: 'XhSideNavLink',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useSideNavContext()\n return () => h('a', ctx.api.value.getLinkProps({ value: props.value }) as Record<string, unknown>, slots.default?.())\n },\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"side-nav.js","names":[],"sources":["../../../src/components/side-nav/side-nav.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 side nav 相关实现。\n\nimport type { Cleanup, Layer, Size, Tone } from '@xihan-ui/core'\nimport type { PresenceHandle } from '@xihan-ui/core/presence'\nimport type { SideNavApi, SideNavFilter, SideNavNode, SideNavSchema, TooltipSchema } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { createScope } from '@xihan-ui/core'\nimport { connectSideNav, findSideNavRowEl, sideNavTooltipProps, tooltipMachine } from '@xihan-ui/headless'\nimport { createPositionEngine } from '@xihan-ui/position'\nimport { computed, defineComponent, h, nextTick, onBeforeUnmount, onMounted, ref, shallowRef, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { mergeIntoChild } from '../../runtime/as-child'\nimport { mergePartProps } from '../../runtime/merge-props'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { XhPortal } from '../../runtime/portal'\nimport { useMachine } from '../../runtime/use-machine'\nimport { useOverlayExit } from '../../runtime/use-overlay-exit'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\nimport { useTooltipGroup } from '../tooltip/context'\nimport { provideSideNav, provideSideNavGroup, provideSideNavItem, provideSideNavNode, useSideNavContext, useSideNavGroupContext, useSideNavItemContext, useSideNavNodeContext } from './context'\nimport { useSideNav } from './use-side-nav'\n\ntype SideNavProps = SideNavSchema['props']\n\n/** 默认插槽的载荷:选中项、展开集合、折叠与浮层状态、检索词与搜索状态、逐节点的状态判定,以及选中、展开、折叠、弹出、改写检索词等命令。 */\nexport type SideNavRootSlotProps = Pick<\n SideNavApi,\n | 'value'\n | 'expandedValue'\n | 'collapsed'\n | 'popoutValue'\n | 'isSelected'\n | 'isExpanded'\n | 'isActiveBranch'\n | 'select'\n | 'setValue'\n | 'setExpandedValue'\n | 'expand'\n | 'collapse'\n | 'openPopout'\n | 'closePopout'\n | 'inputValue'\n | 'setInputValue'\n | 'searching'\n>\n\nexport const XhSideNavRoot = defineComponent({\n name: 'XhSideNavRoot',\n // 缺省值由 connect 与机器给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<SideNavNode[]> },\n value: { type: String as PropType<string | null> },\n defaultValue: { type: String as PropType<string | null> },\n expandedValue: { type: Array as PropType<string[]> },\n defaultExpandedValue: { type: Array as PropType<string[]> },\n accordion: Boolean,\n collapsed: { type: Boolean, default: undefined },\n collapsedPopout: { type: Boolean, default: undefined },\n disabled: Boolean,\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<SideNavProps['dir']> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n /** 搜索框的匹配规则;缺省为标签(缺省退回 value)大小写不敏感包含。 */\n filter: { type: Function as PropType<SideNavFilter> },\n translations: { type: Object as PropType<SideNavProps['translations']> },\n },\n // *-change 携带 details 对象,update:* 携带裸值,支持 v-model:value 与 v-model:expanded-value\n emits: {\n 'value-change': (_details: PayloadOf<SideNavProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<SideNavProps, 'onValueChange'>['value']) => true,\n 'expanded-value-change': (_details: PayloadOf<SideNavProps, 'onExpandedValueChange'>) => true,\n 'update:expandedValue': (_value: PayloadOf<SideNavProps, 'onExpandedValueChange'>['value']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: SideNavRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const ctx = useSideNav(withXhConfig('side-nav', props) as SideNavProps, {\n onValueChange: (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n },\n onExpandedValueChange: (details) => {\n emit('expanded-value-change', details)\n emit('update:expandedValue', details.value)\n },\n })\n provideSideNav(ctx)\n // 经插槽暴露状态与命令,供折叠开关这类外部控件使用\n return () => h('nav', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n value: ctx.api.value.value,\n expandedValue: ctx.api.value.expandedValue,\n collapsed: ctx.api.value.collapsed,\n popoutValue: ctx.api.value.popoutValue,\n isSelected: ctx.api.value.isSelected,\n isExpanded: ctx.api.value.isExpanded,\n isActiveBranch: ctx.api.value.isActiveBranch,\n select: ctx.api.value.select,\n setValue: ctx.api.value.setValue,\n setExpandedValue: ctx.api.value.setExpandedValue,\n expand: ctx.api.value.expand,\n collapse: ctx.api.value.collapse,\n openPopout: ctx.api.value.openPopout,\n closePopout: ctx.api.value.closePopout,\n inputValue: ctx.api.value.inputValue,\n setInputValue: ctx.api.value.setInputValue,\n searching: ctx.api.value.searching,\n }))\n },\n})\n\nexport const XhSideNavList = defineComponent({\n name: 'XhSideNavList',\n setup(_, { slots }) {\n const ctx = useSideNavContext()\n return () => h('ul', ctx.api.value.getListProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 搜索框:放在 list 之前,输入即按标签过滤导航树。 */\nexport const XhSideNavInput = defineComponent({\n name: 'XhSideNavInput',\n setup() {\n const ctx = useSideNavContext()\n return () => h('input', ctx.api.value.getInputProps() as Record<string, unknown>)\n },\n})\n\n/** 搜索一条都没命中时露面的占位;没写内容时显示 translations.noMatch。 */\nexport const XhSideNavEmpty = defineComponent({\n name: 'XhSideNavEmpty',\n setup(_, { slots }) {\n const ctx = useSideNavContext()\n return () => h('div', ctx.api.value.getEmptyProps() as Record<string, unknown>, slots.default?.() ?? ctx.api.value.translations.noMatch)\n },\n})\n\n/** 把一个值登记进所在分组,值变了换一条,卸下时撤销。登记写的是分组的成员表,回调不追踪它,免得自己触发自己。 */\nfunction joinGroup(value: () => string): void {\n const group = useSideNavGroupContext()\n if (!group)\n return\n watch(value, (next, _, onCleanup) => onCleanup(group.join(next)), { immediate: true })\n}\n\n// 叶子行的列表项:列表容器是 ul,链接得裹在 li 里才是它合法的直接子节点。\n// 身份取它包着的那条链接报上来的值:搜索时没命中就整行收起\nexport const XhSideNavItem = defineComponent({\n name: 'XhSideNavItem',\n setup(_, { slots }) {\n const ctx = useSideNavContext()\n const linkValue = shallowRef<string | null>(null)\n provideSideNavItem((value) => {\n linkValue.value = value\n })\n return () => h('li', ctx.api.value.getItemProps({ value: linkValue.value ?? undefined }) as Record<string, unknown>, slots.default?.())\n },\n})\n\n// 分组是上一层列表里的一条(li):里面放 group-label 与 group-list,组内的行挂在 group-list 里\nexport const XhSideNavGroup = defineComponent({\n name: 'XhSideNavGroup',\n props: {\n /** 分组身份,group-label 与 group-list 依靠它配对。 */\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useSideNavContext()\n // 成员由组里的链接与分支挂上时登记:搜索时一个成员都没命中就整组收起\n const members = shallowRef<readonly string[]>([])\n provideSideNavGroup({\n get value() {\n return props.value\n },\n join: (value) => {\n members.value = [...members.value, value]\n return () => {\n const at = members.value.indexOf(value)\n if (at !== -1)\n members.value = members.value.filter((_, i) => i !== at)\n }\n },\n })\n return () => h('li', ctx.api.value.getGroupProps({ value: props.value, members: members.value }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSideNavGroupLabel = defineComponent({\n name: 'XhSideNavGroupLabel',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useSideNavContext()\n return () => h('div', ctx.api.value.getGroupLabelProps({ value: props.value }) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 分组里的列表:组内的 item 与 branch 挂在这里,以组标题命名;分组身份取自所在的 XhSideNavGroup。 */\nexport const XhSideNavGroupList = defineComponent({\n name: 'XhSideNavGroupList',\n setup(_, { slots }) {\n const ctx = useSideNavContext()\n const group = useSideNavGroupContext()\n if (!group)\n throw new Error('[xh] XhSideNavGroupList 必须用在 XhSideNavGroup 内')\n return () => h('ul', ctx.api.value.getGroupListProps({ value: group.value }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSideNavBranch = defineComponent({\n name: 'XhSideNavBranch',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useSideNavContext()\n provideSideNavNode(props)\n joinGroup(() => props.value)\n return () => h('li', ctx.api.value.getBranchProps({ value: props.value }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSideNavBranchTrigger = defineComponent({\n name: 'XhSideNavBranchTrigger',\n setup(_, { slots }) {\n const ctx = useSideNavContext()\n const node = useSideNavNodeContext()\n return () => h('button', ctx.api.value.getBranchTriggerProps({ value: node.value }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSideNavBranchText = defineComponent({\n name: 'XhSideNavBranchText',\n setup(_, { slots }) {\n const ctx = useSideNavContext()\n return () => h('span', ctx.api.value.getBranchTextProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSideNavBranchIndicator = defineComponent({\n name: 'XhSideNavBranchIndicator',\n setup(_, { slots }) {\n const ctx = useSideNavContext()\n const node = useSideNavNodeContext()\n return () => h('span', ctx.api.value.getBranchIndicatorProps({ value: node.value }) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSideNavBranchContent = defineComponent({\n name: 'XhSideNavBranchContent',\n props: {\n /** 本分支弹层的 Portal 容器;优先于应用级配置。 */\n container: { type: Object as PropType<Element> },\n },\n setup(props, { slots }) {\n const ctx = useSideNavContext()\n const node = useSideNavNodeContext()\n // 一个弹出面板一份退场闸门:退场动画挂在面板上,从它身上探测。\n // 开合判据直接取 connect 这一帧的产出,不另起一套\n const panelRef = ref<HTMLElement | null>(null)\n let presence: PresenceHandle | null = null\n const visible = useOverlayExit({\n config: ctx.config,\n isOpen: () => (ctx.api.value.getPopoutPositionerProps({ value: node.value }) as Record<string, unknown>).hidden !== true,\n contentRef: panelRef,\n onPresence: (next) => {\n const previous = presence\n presence = next\n if (ctx.service.getStatus() !== 'Started')\n return\n if (next)\n ctx.service.send({ type: 'PRESENCE.SET', value: node.value, presence: next, connected: true })\n else if (previous)\n ctx.service.send({ type: 'PRESENCE.SET', value: node.value, presence: previous, connected: false })\n },\n })\n onMounted(() => {\n void nextTick(() => {\n if (presence && ctx.service.getStatus() === 'Started')\n ctx.service.send({ type: 'PRESENCE.SET', value: node.value, presence, connected: true })\n })\n })\n return () => {\n if (!ctx.api.value.isPopoutPanel(node.value)) {\n // 平铺分支没有定位层,原地渲染\n return h('ul', ctx.api.value.getBranchContentProps({ value: node.value }) as Record<string, unknown>, slots.default?.())\n }\n // 折叠态的弹出面板:定位层搬到浮层落点,逃开祖先的层叠上下文。\n // 收起跟着退场闸门走:定位层与面板的 hidden 都押后到退场动画播完\n const hidden = !visible.value || undefined\n const content = h('ul', {\n ...ctx.api.value.getBranchContentProps({ value: node.value }) as Record<string, unknown>,\n hidden,\n ref: (el: unknown) => { panelRef.value = el as HTMLElement | null },\n }, slots.default?.())\n return h(XhPortal, { to: props.container ?? ctx.portalTarget.value }, () => [\n h('div', {\n ...ctx.api.value.getPopoutPositionerProps({ value: node.value }) as Record<string, unknown>,\n hidden,\n }, [content]),\n ])\n }\n },\n})\n\n/**\n * 图标栏的名称提示:落成图标栏后,只剩图标的行悬停或聚焦时在行尾一侧显示行的标签。\n * 本体是一台内嵌的 Tooltip 机器(延时、接替窗口、提示组与定位全随 Tooltip),开合受控于侧栏;\n * 放一个即可,定位层搬到浮层落点,文字取 collection 里的标签,对读屏隐藏。\n */\nexport const XhSideNavTooltip = defineComponent({\n name: 'XhSideNavTooltip',\n props: {\n /** 名称提示的 Portal 容器;优先于应用级配置。 */\n container: { type: Object as PropType<Element> },\n },\n setup(props) {\n const ctx = useSideNavContext()\n const positionerRef = ref<HTMLElement | null>(null)\n const contentRef = ref<HTMLElement | null>(null)\n const hint = useMachine<TooltipSchema>(tooltipMachine, () => sideNavTooltipProps(ctx.service), createScope(null, createVueIdGenerator()))\n // 锚点是提示此刻对着的那一行,现查\n const anchor = (): HTMLElement | null => findSideNavRowEl(ctx.service, ctx.service.context.get('tooltipValue'))\n const config = ctx.config\n if (config) {\n // 提示只参与 Escape 仲裁与栈顶判定:不陷焦点、不锁滚动、没有遮罩;对着的那一行记为本层分支\n hint.refs.set('config', config)\n hint.refs.set('registerLayer', (): { layer: Layer, dispose: Cleanup } => config.layerRegistry.register({\n kind: 'inline',\n node: () => contentRef.value,\n branches: () => [anchor()].filter(Boolean) as Element[],\n isModal: () => false,\n surfaces: () => [],\n }))\n hint.refs.set('position', createPositionEngine())\n }\n hint.refs.set('getAnchorEl', anchor)\n hint.refs.set('getFloatingEl', () => positionerRef.value)\n // 放在 XhTooltipProvider 里就归它那一组,与页面上其余提示共用接替窗口\n hint.refs.set('group', useTooltipGroup())\n const visible = useOverlayExit({\n config,\n isOpen: () => hint.state.matches('visible'),\n contentRef,\n onPresence: presence => hint.refs.set('presence', presence),\n })\n // 交给根:行上的指针与焦点经根的连接层转给这台机器\n ctx.tooltip.value = hint\n onBeforeUnmount(() => {\n if (ctx.tooltip.value === hint)\n ctx.tooltip.value = null\n })\n const api = computed(() => connectSideNav(ctx.service, vueNormalize, hint))\n return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value }, () => [\n h('div', {\n ...api.value.getTooltipPositionerProps() as Record<string, unknown>,\n ref: (el: unknown) => { positionerRef.value = el as HTMLElement | null },\n }, [\n h('div', {\n ...api.value.getTooltipContentProps() as Record<string, unknown>,\n // 收起跟着退场闸门走:皮肤给 content 声明了 display,真正的收起落成内联 display\n style: visible.value ? undefined : { display: 'none' },\n ref: (el: unknown) => { contentRef.value = el as HTMLElement | null },\n }, api.value.tooltipText),\n ]),\n ])\n },\n})\n\nexport const XhSideNavLinkText = defineComponent({\n name: 'XhSideNavLinkText',\n setup(_, { slots }) {\n const ctx = useSideNavContext()\n return () => h('span', ctx.api.value.getLinkTextProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSideNavLink = defineComponent({\n name: 'XhSideNavLink',\n // 直通属性自己合:作者的处理器排在部件前面,asChild 时连同部件属性一起落到作者的链接上\n inheritAttrs: false,\n props: {\n value: { type: String, required: true },\n /** 借用作者的子节点(如路由链接)作为链接,不再渲染自己的 `<a>`;子节点须恰好一个。 */\n asChild: Boolean,\n },\n setup(props, { slots, attrs }) {\n const ctx = useSideNavContext()\n // 身份报给外面的列表项与分组:搜索时它们据此决定整行、整组收不收\n const reportItem = useSideNavItemContext()\n if (reportItem) {\n watch(() => props.value, next => reportItem(next), { immediate: true })\n onBeforeUnmount(() => reportItem(null))\n }\n joinGroup(() => props.value)\n return () => {\n const part = mergePartProps(ctx.api.value.getLinkProps({ value: props.value }) as Record<string, unknown>, attrs)\n const children = slots.default?.()\n if (props.asChild)\n return mergeIntoChild(children, part, 'side-nav', { applyAnatomy: true })\n return h('a', part, children)\n }\n },\n})\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ComputedRef } from "vue";
|
|
1
|
+
import { ComputedRef, ShallowRef } from "vue";
|
|
2
2
|
import { RuntimeConfig, Service } from "@xihan-ui/core";
|
|
3
|
-
import { SideNavApi, SideNavSchema } from "@xihan-ui/headless";
|
|
3
|
+
import { SideNavApi, SideNavSchema, TooltipSchema } from "@xihan-ui/headless";
|
|
4
4
|
//#region src/components/side-nav/use-side-nav.d.ts
|
|
5
5
|
interface SideNavContext {
|
|
6
6
|
api: ComputedRef<SideNavApi>;
|
|
@@ -10,6 +10,8 @@ interface SideNavContext {
|
|
|
10
10
|
config: RuntimeConfig | null;
|
|
11
11
|
/** 弹出面板的定位层迁移到的位置:全局配置的容器 > 运行时的浮层落点 > body。 */
|
|
12
12
|
portalTarget: ComputedRef<string | Element>;
|
|
13
|
+
/** 图标栏名称提示的内嵌 Tooltip 机器:XhSideNavTooltip 挂上时交进来,卸下时撤回;没有即没有名称提示。 */
|
|
14
|
+
tooltip: ShallowRef<Service<TooltipSchema> | null>;
|
|
13
15
|
}
|
|
14
16
|
declare function useSideNav(props: SideNavSchema['props'], handlers?: Pick<SideNavSchema['props'], 'onValueChange' | 'onExpandedValueChange'>): SideNavContext;
|
|
15
17
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-side-nav.d.ts","names":[],"sources":["../../../src/components/side-nav/use-side-nav.ts"],"mappings":";;;;UAmBiB;EACf,KAAK,YAAY;;EAEjB,SAAS,QAAQ;;EAEjB,QAAQ;;EAER,cAAc,qBAAqB;;
|
|
1
|
+
{"version":3,"file":"use-side-nav.d.ts","names":[],"sources":["../../../src/components/side-nav/use-side-nav.ts"],"mappings":";;;;UAmBiB;EACf,KAAK,YAAY;;EAEjB,SAAS,QAAQ;;EAEjB,QAAQ;;EAER,cAAc,qBAAqB;;EAEnC,SAAS,WAAW,QAAQ;;iBAGd,WACd,OAAO,wBACP,WAAU,KAAK,qEACd"}
|
|
@@ -2,7 +2,7 @@ import { vueNormalize } from "../../runtime/normalize-props.js";
|
|
|
2
2
|
import { useXhConfig } from "../../config/config.js";
|
|
3
3
|
import { useMachine } from "../../runtime/use-machine.js";
|
|
4
4
|
import { createVueIdGenerator } from "../../runtime/vue-id.js";
|
|
5
|
-
import { computed } from "vue";
|
|
5
|
+
import { computed, shallowRef } from "vue";
|
|
6
6
|
import { createRuntimeConfig, createScope } from "@xihan-ui/core";
|
|
7
7
|
import { connectSideNav, sideNavMachine } from "@xihan-ui/headless";
|
|
8
8
|
import { createPositionEngine } from "@xihan-ui/position";
|
|
@@ -37,13 +37,15 @@ function useSideNav(props, handlers = {}) {
|
|
|
37
37
|
service.refs.set("getPopoutPositionerEl", (value) => popoutEl("positioner", value));
|
|
38
38
|
service.refs.set("getPopoutContentEl", (value) => popoutEl("content", value));
|
|
39
39
|
}
|
|
40
|
-
const
|
|
40
|
+
const tooltip = shallowRef(null);
|
|
41
|
+
const api = computed(() => connectSideNav(service, vueNormalize, tooltip.value ?? void 0));
|
|
41
42
|
const portalTarget = computed(() => xhConfig.value.portalContainer?.() ?? runtimeConfig?.portalContainer() ?? "body");
|
|
42
43
|
return {
|
|
43
44
|
api,
|
|
44
45
|
service,
|
|
45
46
|
config: runtimeConfig,
|
|
46
|
-
portalTarget
|
|
47
|
+
portalTarget,
|
|
48
|
+
tooltip
|
|
47
49
|
};
|
|
48
50
|
}
|
|
49
51
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-side-nav.js","names":[],"sources":["../../../src/components/side-nav/use-side-nav.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 use side nav 相关实现。\n\nimport type { Cleanup, Layer, RuntimeConfig, Service } from '@xihan-ui/core'\nimport type { SideNavApi, SideNavSchema } from '@xihan-ui/headless'\nimport type { ComputedRef } from 'vue'\nimport { createRuntimeConfig, createScope } from '@xihan-ui/core'\nimport { connectSideNav, sideNavMachine } from '@xihan-ui/headless'\nimport { createPositionEngine } from '@xihan-ui/position'\nimport { computed } from 'vue'\nimport { useXhConfig } from '../../config/config'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface SideNavContext {\n api: ComputedRef<SideNavApi>\n /** Headless 服务;子面板只用它登记按分支身份配对的 Presence。 */\n service: Service<SideNavSchema>\n /** 运行时配置;服务端没有 DOM 时为 null。 */\n config: RuntimeConfig | null\n /** 弹出面板的定位层迁移到的位置:全局配置的容器 > 运行时的浮层落点 > body。 */\n portalTarget: ComputedRef<string | Element>\n}\n\nexport function useSideNav(\n props: SideNavSchema['props'],\n handlers: Pick<SideNavSchema['props'], 'onValueChange' | 'onExpandedValueChange'> = {},\n): SideNavContext {\n // scope id 走 Vue 的 useId,保证同页多实例的配对 id 不相撞\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n const service = useMachine(sideNavMachine, () => ({ ...props, ...handlers }), scope)\n const xhConfig = useXhConfig()\n\n // 服务端没有 DOM、也就没有落点:config 为 null 时浮层退回 body\n let runtimeConfig: RuntimeConfig | null = null\n\n if (typeof document !== 'undefined') {\n const config: RuntimeConfig = createRuntimeConfig({ scope, idGenerator: idGen })\n runtimeConfig = config\n\n // 弹出面板与触发按钮按当前弹出分支现查:配对 id 由 connect 派生,同一 scope 算得出来\n const popoutEl = (kind: 'trigger' | 'content' | 'positioner', value: string): HTMLElement | null =>\n document.getElementById(scope.partId('side-nav', `${kind}-${value}`))\n\n // 只提供注册函数,入栈出栈由机器的 trackPopoutLayer 效应按弹出态驱动\n const registerLayer = (value: string): { layer: Layer, dispose: Cleanup } => config.layerRegistry.register({\n kind: 'popover',\n node: () => popoutEl('content', value),\n // 触发按钮记为本层分支,点它算层内交互\n branches: () => [popoutEl('trigger', value)].filter(Boolean) as Element[],\n isModal: () => false,\n surfaces: () => [],\n })\n\n // 定位引擎由适配器注入,机器只经端口驱动\n service.refs.set('config', config)\n service.refs.set('registerLayer', registerLayer)\n service.refs.set('position', createPositionEngine())\n service.refs.set('getPopoutAnchorEl', value => popoutEl('trigger', value))\n service.refs.set('getPopoutPositionerEl', value => popoutEl('positioner', value))\n service.refs.set('getPopoutContentEl', value => popoutEl('content', value))\n }\n\n const api = computed(() => connectSideNav(service, vueNormalize))\n // 全局配置写了容器就用它,否则落到运行时那个单一浮层落点;没有 DOM 时才回到 body\n const portalTarget = computed<string | Element>(() => xhConfig.value.portalContainer?.() ?? runtimeConfig?.portalContainer() ?? 'body')\n return { api, service, config: runtimeConfig, portalTarget }\n}\n"],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"use-side-nav.js","names":[],"sources":["../../../src/components/side-nav/use-side-nav.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 use side nav 相关实现。\n\nimport type { Cleanup, Layer, RuntimeConfig, Service } from '@xihan-ui/core'\nimport type { SideNavApi, SideNavSchema, TooltipSchema } from '@xihan-ui/headless'\nimport type { ComputedRef, ShallowRef } from 'vue'\nimport { createRuntimeConfig, createScope } from '@xihan-ui/core'\nimport { connectSideNav, sideNavMachine } from '@xihan-ui/headless'\nimport { createPositionEngine } from '@xihan-ui/position'\nimport { computed, shallowRef } from 'vue'\nimport { useXhConfig } from '../../config/config'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface SideNavContext {\n api: ComputedRef<SideNavApi>\n /** Headless 服务;子面板只用它登记按分支身份配对的 Presence。 */\n service: Service<SideNavSchema>\n /** 运行时配置;服务端没有 DOM 时为 null。 */\n config: RuntimeConfig | null\n /** 弹出面板的定位层迁移到的位置:全局配置的容器 > 运行时的浮层落点 > body。 */\n portalTarget: ComputedRef<string | Element>\n /** 图标栏名称提示的内嵌 Tooltip 机器:XhSideNavTooltip 挂上时交进来,卸下时撤回;没有即没有名称提示。 */\n tooltip: ShallowRef<Service<TooltipSchema> | null>\n}\n\nexport function useSideNav(\n props: SideNavSchema['props'],\n handlers: Pick<SideNavSchema['props'], 'onValueChange' | 'onExpandedValueChange'> = {},\n): SideNavContext {\n // scope id 走 Vue 的 useId,保证同页多实例的配对 id 不相撞\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n const service = useMachine(sideNavMachine, () => ({ ...props, ...handlers }), scope)\n const xhConfig = useXhConfig()\n\n // 服务端没有 DOM、也就没有落点:config 为 null 时浮层退回 body\n let runtimeConfig: RuntimeConfig | null = null\n\n if (typeof document !== 'undefined') {\n const config: RuntimeConfig = createRuntimeConfig({ scope, idGenerator: idGen })\n runtimeConfig = config\n\n // 弹出面板与触发按钮按当前弹出分支现查:配对 id 由 connect 派生,同一 scope 算得出来\n const popoutEl = (kind: 'trigger' | 'content' | 'positioner', value: string): HTMLElement | null =>\n document.getElementById(scope.partId('side-nav', `${kind}-${value}`))\n\n // 只提供注册函数,入栈出栈由机器的 trackPopoutLayer 效应按弹出态驱动\n const registerLayer = (value: string): { layer: Layer, dispose: Cleanup } => config.layerRegistry.register({\n kind: 'popover',\n node: () => popoutEl('content', value),\n // 触发按钮记为本层分支,点它算层内交互\n branches: () => [popoutEl('trigger', value)].filter(Boolean) as Element[],\n isModal: () => false,\n surfaces: () => [],\n })\n\n // 定位引擎由适配器注入,机器只经端口驱动\n service.refs.set('config', config)\n service.refs.set('registerLayer', registerLayer)\n service.refs.set('position', createPositionEngine())\n service.refs.set('getPopoutAnchorEl', value => popoutEl('trigger', value))\n service.refs.set('getPopoutPositionerEl', value => popoutEl('positioner', value))\n service.refs.set('getPopoutContentEl', value => popoutEl('content', value))\n }\n\n const tooltip = shallowRef<Service<TooltipSchema> | null>(null)\n const api = computed(() => connectSideNav(service, vueNormalize, tooltip.value ?? undefined))\n // 全局配置写了容器就用它,否则落到运行时那个单一浮层落点;没有 DOM 时才回到 body\n const portalTarget = computed<string | Element>(() => xhConfig.value.portalContainer?.() ?? runtimeConfig?.portalContainer() ?? 'body')\n return { api, service, config: runtimeConfig, portalTarget, tooltip }\n}\n"],"mappings":";;;;;;;;;AA+BA,SAAgB,WACd,OACA,WAAoF,CAAC,GACrE;CAEhB,MAAM,QAAQ,qBAAqB;CACnC,MAAM,QAAQ,YAAY,MAAM,KAAK;CACrC,MAAM,UAAU,WAAW,uBAAuB;EAAE,GAAG;EAAO,GAAG;CAAS,IAAI,KAAK;CACnF,MAAM,WAAW,YAAY;CAG7B,IAAI,gBAAsC;CAE1C,IAAI,OAAO,aAAa,aAAa;EACnC,MAAM,SAAwB,oBAAoB;GAAE;GAAO,aAAa;EAAM,CAAC;EAC/E,gBAAgB;EAGhB,MAAM,YAAY,MAA4C,UAC5D,SAAS,eAAe,MAAM,OAAO,YAAY,GAAG,KAAK,GAAG,OAAO,CAAC;EAGtE,MAAM,iBAAiB,UAAsD,OAAO,cAAc,SAAS;GACzG,MAAM;GACN,YAAY,SAAS,WAAW,KAAK;GAErC,gBAAgB,CAAC,SAAS,WAAW,KAAK,CAAC,CAAC,CAAC,OAAO,OAAO;GAC3D,eAAe;GACf,gBAAgB,CAAC;EACnB,CAAC;EAGD,QAAQ,KAAK,IAAI,UAAU,MAAM;EACjC,QAAQ,KAAK,IAAI,iBAAiB,aAAa;EAC/C,QAAQ,KAAK,IAAI,YAAY,qBAAqB,CAAC;EACnD,QAAQ,KAAK,IAAI,sBAAqB,UAAS,SAAS,WAAW,KAAK,CAAC;EACzE,QAAQ,KAAK,IAAI,0BAAyB,UAAS,SAAS,cAAc,KAAK,CAAC;EAChF,QAAQ,KAAK,IAAI,uBAAsB,UAAS,SAAS,WAAW,KAAK,CAAC;CAC5E;CAEA,MAAM,UAAU,WAA0C,IAAI;CAC9D,MAAM,MAAM,eAAe,eAAe,SAAS,cAAc,QAAQ,SAAS,KAAA,CAAS,CAAC;CAE5F,MAAM,eAAe,eAAiC,SAAS,MAAM,kBAAkB,KAAK,eAAe,gBAAgB,KAAK,MAAM;CACtI,OAAO;EAAE;EAAK;EAAS,QAAQ;EAAe;EAAc;CAAQ;AACtE"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { PayloadOf } from "../../runtime/payload.js";
|
|
2
2
|
import { PropType, SlotsType, VNode } from "vue";
|
|
3
|
-
import { SignaturePadApi, SignaturePadDrawingOptions, SignaturePadSchema, SignaturePadTranslations } from "@xihan-ui/headless";
|
|
3
|
+
import { SignaturePadApi, SignaturePadDrawingOptions, SignaturePadSchema, SignaturePadTranslations, SignaturePadValue } from "@xihan-ui/headless";
|
|
4
4
|
//#region src/components/signature-pad/signature-pad.d.ts
|
|
5
5
|
type SignaturePadProps = SignaturePadSchema['props'];
|
|
6
|
-
/**
|
|
7
|
-
type SignaturePadRootSlotProps = Pick<SignaturePadApi, 'paths' | 'empty' | 'drawing' | 'disabled' | 'readOnly' | 'statusText' | 'toSvg' | 'clear'>;
|
|
6
|
+
/** 默认插槽的载荷:签名数据、笔迹路径与空态、落笔中标记,以及导出、清空、撤销与重做的动作。 */
|
|
7
|
+
type SignaturePadRootSlotProps = Pick<SignaturePadApi, 'value' | 'paths' | 'empty' | 'drawing' | 'disabled' | 'readOnly' | 'canUndo' | 'canRedo' | 'statusText' | 'toSvg' | 'clear' | 'undo' | 'redo'>;
|
|
8
8
|
declare const XhSignaturePadRoot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
9
9
|
disabled: {
|
|
10
10
|
type: BooleanConstructor;
|
|
@@ -25,6 +25,12 @@ declare const XhSignaturePadRoot: import("vue").DefineComponent<import("vue").Ex
|
|
|
25
25
|
name: {
|
|
26
26
|
type: StringConstructor;
|
|
27
27
|
};
|
|
28
|
+
value: {
|
|
29
|
+
type: PropType<SignaturePadValue>;
|
|
30
|
+
};
|
|
31
|
+
defaultValue: {
|
|
32
|
+
type: PropType<SignaturePadValue>;
|
|
33
|
+
};
|
|
28
34
|
drawing: {
|
|
29
35
|
type: PropType<SignaturePadDrawingOptions>;
|
|
30
36
|
};
|
|
@@ -36,6 +42,8 @@ declare const XhSignaturePadRoot: import("vue").DefineComponent<import("vue").Ex
|
|
|
36
42
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
37
43
|
draw: (_details: PayloadOf<SignaturePadProps, "onDraw">) => true;
|
|
38
44
|
'draw-end': (_details: PayloadOf<SignaturePadProps, "onDrawEnd">) => true;
|
|
45
|
+
'value-change': (_details: PayloadOf<SignaturePadProps, "onValueChange">) => true;
|
|
46
|
+
'update:value': (_value: PayloadOf<SignaturePadProps, "onValueChange">["value"]) => true;
|
|
39
47
|
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
40
48
|
disabled: {
|
|
41
49
|
type: BooleanConstructor;
|
|
@@ -56,6 +64,12 @@ declare const XhSignaturePadRoot: import("vue").DefineComponent<import("vue").Ex
|
|
|
56
64
|
name: {
|
|
57
65
|
type: StringConstructor;
|
|
58
66
|
};
|
|
67
|
+
value: {
|
|
68
|
+
type: PropType<SignaturePadValue>;
|
|
69
|
+
};
|
|
70
|
+
defaultValue: {
|
|
71
|
+
type: PropType<SignaturePadValue>;
|
|
72
|
+
};
|
|
59
73
|
drawing: {
|
|
60
74
|
type: PropType<SignaturePadDrawingOptions>;
|
|
61
75
|
};
|
|
@@ -63,6 +77,8 @@ declare const XhSignaturePadRoot: import("vue").DefineComponent<import("vue").Ex
|
|
|
63
77
|
type: PropType<Partial<SignaturePadTranslations>>;
|
|
64
78
|
};
|
|
65
79
|
}>> & Readonly<{
|
|
80
|
+
"onValue-change"?: ((_details: import("@xihan-ui/headless").SignaturePadValueChangeDetails) => any) | undefined;
|
|
81
|
+
"onUpdate:value"?: ((_value: SignaturePadValue) => any) | undefined;
|
|
66
82
|
onDraw?: ((_details: import("@xihan-ui/headless").SignaturePadDrawDetails) => any) | undefined;
|
|
67
83
|
"onDraw-end"?: ((_details: import("@xihan-ui/headless").SignaturePadDrawEndDetails) => any) | undefined;
|
|
68
84
|
}>, {
|
|
@@ -88,6 +104,12 @@ declare const XhSignaturePadPath: import("vue").DefineComponent<{}, () => VNode<
|
|
|
88
104
|
declare const XhSignaturePadClearTrigger: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
89
105
|
[key: string]: any;
|
|
90
106
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
107
|
+
declare const XhSignaturePadUndoTrigger: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
108
|
+
[key: string]: any;
|
|
109
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
110
|
+
declare const XhSignaturePadRedoTrigger: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
111
|
+
[key: string]: any;
|
|
112
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
91
113
|
declare const XhSignaturePadStatus: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
92
114
|
[key: string]: any;
|
|
93
115
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -95,5 +117,5 @@ declare const XhSignaturePadHiddenInput: import("vue").DefineComponent<{}, () =>
|
|
|
95
117
|
[key: string]: any;
|
|
96
118
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
97
119
|
//#endregion
|
|
98
|
-
export { SignaturePadRootSlotProps, XhSignaturePadClearTrigger, XhSignaturePadControl, XhSignaturePadGuide, XhSignaturePadHiddenInput, XhSignaturePadLabel, XhSignaturePadPath, XhSignaturePadRoot, XhSignaturePadStatus };
|
|
120
|
+
export { SignaturePadRootSlotProps, XhSignaturePadClearTrigger, XhSignaturePadControl, XhSignaturePadGuide, XhSignaturePadHiddenInput, XhSignaturePadLabel, XhSignaturePadPath, XhSignaturePadRedoTrigger, XhSignaturePadRoot, XhSignaturePadStatus, XhSignaturePadUndoTrigger };
|
|
99
121
|
//# sourceMappingURL=signature-pad.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature-pad.d.ts","names":[],"sources":["../../../src/components/signature-pad/signature-pad.ts"],"mappings":";;;;KAgBK,oBAAoB;;KAGb,4BAA4B,KACtC;
|
|
1
|
+
{"version":3,"file":"signature-pad.d.ts","names":[],"sources":["../../../src/components/signature-pad/signature-pad.ts"],"mappings":";;;;KAgBK,oBAAoB;;KAGb,4BAA4B,KACtC;cAgBW,kCAAkB,8BAAA;;;;;;;;;;;;;;;;;;;;;IAUF,MAAA,SAAS;;;IACF,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACJ,MAAA,SAAS,QAAQ;;;;;EAI9B,OAAA,UAAA,UAAU;EACN,aAAA,UAAA,UAAU;EACN,iBAAA,UAAA,UAAU;EACZ,iBAAA,QAAA,UAAU;;;;;;;;;;;;;;;;;;;;;;IAVV,MAAA,SAAS;;;IACF,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACJ,MAAA,SAAS,QAAQ;;;;;;;;;;;;;EAUvC,WAAC,OAAO,8BAA8B;kCA2BlD;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAO9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,qCAAqB,0BAAA,oBAAA,4BAAA;;8BAWhC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,0BAAA,oBAAA,4BAAA;;8BAM9B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAO7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,0CAA0B,0BAAA,oBAAA,4BAAA;;8BAMrC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,yCAAyB,0BAAA,oBAAA,4BAAA;;8BAMpC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,yCAAyB,0BAAA,oBAAA,4BAAA;;8BAMpC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,oCAAoB,0BAAA,oBAAA,4BAAA;;8BAW/B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,yCAAyB,0BAAA,oBAAA,4BAAA;;8BAMpC,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
|
|
@@ -24,31 +24,45 @@ const XhSignaturePadRoot = defineComponent({
|
|
|
24
24
|
default: void 0
|
|
25
25
|
},
|
|
26
26
|
name: { type: String },
|
|
27
|
+
value: { type: Object },
|
|
28
|
+
defaultValue: { type: Object },
|
|
27
29
|
drawing: { type: Object },
|
|
28
30
|
translations: { type: Object }
|
|
29
31
|
},
|
|
30
32
|
emits: {
|
|
31
33
|
"draw": (_details) => true,
|
|
32
|
-
"draw-end": (_details) => true
|
|
34
|
+
"draw-end": (_details) => true,
|
|
35
|
+
"value-change": (_details) => true,
|
|
36
|
+
"update:value": (_value) => true
|
|
33
37
|
},
|
|
34
38
|
slots: Object,
|
|
35
39
|
setup(props, { slots, emit }) {
|
|
36
40
|
const onDraw = (details) => emit("draw", details);
|
|
37
41
|
const onDrawEnd = (details) => emit("draw-end", details);
|
|
42
|
+
const onValueChange = (details) => {
|
|
43
|
+
emit("value-change", details);
|
|
44
|
+
emit("update:value", details.value);
|
|
45
|
+
};
|
|
38
46
|
const ctx = useSignaturePad(withXhConfig("signature-pad", useFormControlProps(props)), {
|
|
39
47
|
onDraw,
|
|
40
|
-
onDrawEnd
|
|
48
|
+
onDrawEnd,
|
|
49
|
+
onValueChange
|
|
41
50
|
});
|
|
42
51
|
provideSignaturePad(ctx);
|
|
43
52
|
return () => h("div", ctx.api.value.getRootProps(), slots.default?.({
|
|
53
|
+
value: ctx.api.value.value,
|
|
44
54
|
paths: ctx.api.value.paths,
|
|
45
55
|
empty: ctx.api.value.empty,
|
|
46
56
|
drawing: ctx.api.value.drawing,
|
|
47
57
|
disabled: ctx.api.value.disabled,
|
|
48
58
|
readOnly: ctx.api.value.readOnly,
|
|
59
|
+
canUndo: ctx.api.value.canUndo,
|
|
60
|
+
canRedo: ctx.api.value.canRedo,
|
|
49
61
|
statusText: ctx.api.value.statusText,
|
|
50
62
|
toSvg: ctx.api.value.toSvg,
|
|
51
|
-
clear: ctx.api.value.clear
|
|
63
|
+
clear: ctx.api.value.clear,
|
|
64
|
+
undo: ctx.api.value.undo,
|
|
65
|
+
redo: ctx.api.value.redo
|
|
52
66
|
}));
|
|
53
67
|
}
|
|
54
68
|
});
|
|
@@ -90,6 +104,20 @@ const XhSignaturePadClearTrigger = defineComponent({
|
|
|
90
104
|
return () => h("button", ctx.api.value.getClearTriggerProps(), slots.default?.());
|
|
91
105
|
}
|
|
92
106
|
});
|
|
107
|
+
const XhSignaturePadUndoTrigger = defineComponent({
|
|
108
|
+
name: "XhSignaturePadUndoTrigger",
|
|
109
|
+
setup(_, { slots }) {
|
|
110
|
+
const ctx = useSignaturePadContext();
|
|
111
|
+
return () => h("button", ctx.api.value.getUndoTriggerProps(), slots.default?.());
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
const XhSignaturePadRedoTrigger = defineComponent({
|
|
115
|
+
name: "XhSignaturePadRedoTrigger",
|
|
116
|
+
setup(_, { slots }) {
|
|
117
|
+
const ctx = useSignaturePadContext();
|
|
118
|
+
return () => h("button", ctx.api.value.getRedoTriggerProps(), slots.default?.());
|
|
119
|
+
}
|
|
120
|
+
});
|
|
93
121
|
const XhSignaturePadStatus = defineComponent({
|
|
94
122
|
name: "XhSignaturePadStatus",
|
|
95
123
|
setup(_, { slots }) {
|
|
@@ -105,6 +133,6 @@ const XhSignaturePadHiddenInput = defineComponent({
|
|
|
105
133
|
}
|
|
106
134
|
});
|
|
107
135
|
//#endregion
|
|
108
|
-
export { XhSignaturePadClearTrigger, XhSignaturePadControl, XhSignaturePadGuide, XhSignaturePadHiddenInput, XhSignaturePadLabel, XhSignaturePadPath, XhSignaturePadRoot, XhSignaturePadStatus };
|
|
136
|
+
export { XhSignaturePadClearTrigger, XhSignaturePadControl, XhSignaturePadGuide, XhSignaturePadHiddenInput, XhSignaturePadLabel, XhSignaturePadPath, XhSignaturePadRedoTrigger, XhSignaturePadRoot, XhSignaturePadStatus, XhSignaturePadUndoTrigger };
|
|
109
137
|
|
|
110
138
|
//# sourceMappingURL=signature-pad.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature-pad.js","names":[],"sources":["../../../src/components/signature-pad/signature-pad.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 signature pad 相关实现。\n\nimport type { SignaturePadApi, SignaturePadDrawingOptions, SignaturePadSchema, SignaturePadTranslations } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, h } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideSignaturePad, useSignaturePadContext } from './context'\nimport { useSignaturePad } from './use-signature-pad'\n\ntype SignaturePadProps = SignaturePadSchema['props']\n\n/**
|
|
1
|
+
{"version":3,"file":"signature-pad.js","names":[],"sources":["../../../src/components/signature-pad/signature-pad.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 signature pad 相关实现。\n\nimport type { SignaturePadApi, SignaturePadDrawingOptions, SignaturePadSchema, SignaturePadTranslations, SignaturePadValue } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, h } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideSignaturePad, useSignaturePadContext } from './context'\nimport { useSignaturePad } from './use-signature-pad'\n\ntype SignaturePadProps = SignaturePadSchema['props']\n\n/** 默认插槽的载荷:签名数据、笔迹路径与空态、落笔中标记,以及导出、清空、撤销与重做的动作。 */\nexport type SignaturePadRootSlotProps = Pick<\n SignaturePadApi,\n | 'value'\n | 'paths'\n | 'empty'\n | 'drawing'\n | 'disabled'\n | 'readOnly'\n | 'canUndo'\n | 'canRedo'\n | 'statusText'\n | 'toSvg'\n | 'clear'\n | 'undo'\n | 'redo'\n>\n\nexport const XhSignaturePadRoot = defineComponent({\n name: 'XhSignaturePadRoot',\n // 缺省值由 connect 决定;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n invalid: { type: Boolean, default: undefined },\n name: { type: String },\n // 缺席值 undefined 表示非受控\n value: { type: Object as PropType<SignaturePadValue> },\n defaultValue: { type: Object as PropType<SignaturePadValue> },\n drawing: { type: Object as PropType<SignaturePadDrawingOptions> },\n translations: { type: Object as PropType<Partial<SignaturePadTranslations>> },\n },\n // draw / draw-end 是笔迹通知;value-change 携带 { value },update:value 携带裸值\n emits: {\n 'draw': (_details: PayloadOf<SignaturePadProps, 'onDraw'>) => true,\n 'draw-end': (_details: PayloadOf<SignaturePadProps, 'onDrawEnd'>) => true,\n 'value-change': (_details: PayloadOf<SignaturePadProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<SignaturePadProps, 'onValueChange'>['value']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: SignaturePadRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const onDraw: SignaturePadProps['onDraw'] = details => emit('draw', details)\n const onDrawEnd: SignaturePadProps['onDrawEnd'] = details => emit('draw-end', details)\n const onValueChange: SignaturePadProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const ctx = useSignaturePad(withXhConfig('signature-pad', useFormControlProps(props)) as SignaturePadProps, { onDraw, onDrawEnd, onValueChange })\n provideSignaturePad(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n value: ctx.api.value.value,\n paths: ctx.api.value.paths,\n empty: ctx.api.value.empty,\n drawing: ctx.api.value.drawing,\n disabled: ctx.api.value.disabled,\n readOnly: ctx.api.value.readOnly,\n canUndo: ctx.api.value.canUndo,\n canRedo: ctx.api.value.canRedo,\n statusText: ctx.api.value.statusText,\n toSvg: ctx.api.value.toSvg,\n clear: ctx.api.value.clear,\n undo: ctx.api.value.undo,\n redo: ctx.api.value.redo,\n }))\n },\n})\n\nexport const XhSignaturePadLabel = defineComponent({\n name: 'XhSignaturePadLabel',\n setup(_, { slots }) {\n const ctx = useSignaturePadContext()\n // 不用原生 label:画布是 svg、不是可被 label 关联的表单控件,名字经 aria-labelledby 挂过去\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSignaturePadControl = defineComponent({\n name: 'XhSignaturePadControl',\n setup(_, { slots }) {\n const ctx = useSignaturePadContext()\n // 画布是 svg:笔迹与基准线都是图元。viewBox 由连接层按钉住的尺寸给,\n // 基准线与笔迹都建在这棵 svg 子树里,命名空间由它带下去\n return () => h('svg', {\n ...ctx.api.value.getControlProps() as Record<string, unknown>,\n ref: ctx.controlRef,\n }, slots.default?.())\n },\n})\n\nexport const XhSignaturePadGuide = defineComponent({\n name: 'XhSignaturePadGuide',\n setup() {\n const ctx = useSignaturePadContext()\n return () => h('line', ctx.api.value.getGuideProps() as Record<string, unknown>)\n },\n})\n\nexport const XhSignaturePadPath = defineComponent({\n name: 'XhSignaturePadPath',\n setup() {\n const ctx = useSignaturePadContext()\n // 全部笔迹落在这一条路径上,每一笔是它的一条子路径\n return () => h('path', ctx.api.value.getPathProps() as Record<string, unknown>)\n },\n})\n\nexport const XhSignaturePadClearTrigger = defineComponent({\n name: 'XhSignaturePadClearTrigger',\n setup(_, { slots }) {\n const ctx = useSignaturePadContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSignaturePadUndoTrigger = defineComponent({\n name: 'XhSignaturePadUndoTrigger',\n setup(_, { slots }) {\n const ctx = useSignaturePadContext()\n return () => h('button', ctx.api.value.getUndoTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSignaturePadRedoTrigger = defineComponent({\n name: 'XhSignaturePadRedoTrigger',\n setup(_, { slots }) {\n const ctx = useSignaturePadContext()\n return () => h('button', ctx.api.value.getRedoTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhSignaturePadStatus = defineComponent({\n name: 'XhSignaturePadStatus',\n setup(_, { slots }) {\n const ctx = useSignaturePadContext()\n // 作者不写内容就用内建那句话,读屏才有东西可念\n return () => h(\n 'span',\n ctx.api.value.getStatusProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.statusText,\n )\n },\n})\n\nexport const XhSignaturePadHiddenInput = defineComponent({\n name: 'XhSignaturePadHiddenInput',\n setup() {\n const ctx = useSignaturePadContext()\n return () => h('input', ctx.api.value.getHiddenInputProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"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"}
|