yuyeon 0.0.0 → 0.0.2
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/dist/style.css +1 -0
- package/dist/yuyeon.mjs +3607 -0
- package/dist/yuyeon.umd.js +1 -0
- package/lib/components/app/YApp.mjs +30 -0
- package/lib/components/app/YApp.mjs.map +1 -0
- package/lib/components/app/YApp.scss +14 -0
- package/lib/components/app/index.mjs +2 -0
- package/lib/components/app/index.mjs.map +1 -0
- package/lib/components/bench/YBench.mjs +44 -0
- package/lib/components/bench/YBench.mjs.map +1 -0
- package/lib/components/bench/index.mjs +2 -0
- package/lib/components/bench/index.mjs.map +1 -0
- package/lib/components/button/YButton.mjs +138 -0
- package/lib/components/button/YButton.mjs.map +1 -0
- package/{src/components/button/y-btn.scss → lib/components/button/YButton.scss} +67 -29
- package/lib/components/button/index.mjs +2 -0
- package/lib/components/button/index.mjs.map +1 -0
- package/lib/components/card/YCard.mjs +18 -0
- package/lib/components/card/YCard.mjs.map +1 -0
- package/lib/components/card/YCardBody.mjs +10 -0
- package/lib/components/card/YCardBody.mjs.map +1 -0
- package/lib/components/card/YCardFooter.mjs +10 -0
- package/lib/components/card/YCardFooter.mjs.map +1 -0
- package/lib/components/card/YCardHeader.mjs +10 -0
- package/lib/components/card/YCardHeader.mjs.map +1 -0
- package/lib/components/card/index.mjs +6 -0
- package/lib/components/card/index.mjs.map +1 -0
- package/lib/components/checkbox/YCheckbox.mjs +154 -0
- package/lib/components/checkbox/YCheckbox.mjs.map +1 -0
- package/lib/components/checkbox/YInputCheckbox.mjs +113 -0
- package/lib/components/checkbox/YInputCheckbox.mjs.map +1 -0
- package/{src/components/checkbox/y-input-checkbox.scss → lib/components/checkbox/YInputCheckbox.scss} +19 -19
- package/lib/components/checkbox/index.mjs +5 -0
- package/lib/components/checkbox/index.mjs.map +1 -0
- package/{src/components/chip/y-chip.vue → lib/components/chip/YChip.mjs} +26 -27
- package/lib/components/chip/YChip.mjs.map +1 -0
- package/{src/components/chip/y-chip.scss → lib/components/chip/YChip.scss} +0 -4
- package/lib/components/chip/index.mjs +3 -0
- package/lib/components/chip/index.mjs.map +1 -0
- package/lib/components/dialog/YDialog.mjs +97 -0
- package/lib/components/dialog/YDialog.mjs.map +1 -0
- package/lib/components/dialog/index.mjs +2 -0
- package/lib/components/dialog/index.mjs.map +1 -0
- package/lib/components/field-input/YFieldInput.mjs +218 -0
- package/lib/components/field-input/YFieldInput.mjs.map +1 -0
- package/{src/components/field-input/y-field-input.scss → lib/components/field-input/YFieldInput.scss} +2 -4
- package/lib/components/field-input/index.mjs +2 -0
- package/lib/components/field-input/index.mjs.map +1 -0
- package/lib/components/form/YForm.mjs +79 -0
- package/lib/components/form/YForm.mjs.map +1 -0
- package/lib/components/form/index.mjs +4 -0
- package/lib/components/form/index.mjs.map +1 -0
- package/lib/components/icons/YIconCheckbox.mjs +21 -0
- package/lib/components/icons/YIconCheckbox.mjs.map +1 -0
- package/lib/components/icons/YIconClear.mjs +16 -0
- package/lib/components/icons/YIconClear.mjs.map +1 -0
- package/lib/components/icons/YIconExpand.mjs +20 -0
- package/lib/components/icons/YIconExpand.mjs.map +1 -0
- package/lib/components/icons/index.mjs +4 -0
- package/lib/components/icons/index.mjs.map +1 -0
- package/lib/components/index.mjs +24 -0
- package/lib/components/index.mjs.map +1 -0
- package/lib/components/input/YInput.mjs +346 -0
- package/lib/components/input/YInput.mjs.map +1 -0
- package/{src/components/input/y-input.scss → lib/components/input/YInput.scss} +12 -4
- package/lib/components/input/index.mjs +2 -0
- package/lib/components/input/index.mjs.map +1 -0
- package/lib/components/input/index.scss +2 -0
- package/lib/components/layer/YLayer.mjs +193 -0
- package/lib/components/layer/YLayer.mjs.map +1 -0
- package/lib/components/layer/index.mjs +2 -0
- package/lib/components/layer/index.mjs.map +1 -0
- package/lib/components/layer/scroll-strategies.mjs +132 -0
- package/lib/components/layer/scroll-strategies.mjs.map +1 -0
- package/lib/components/list/YList.mjs +16 -0
- package/lib/components/list/YList.mjs.map +1 -0
- package/lib/components/list/YList.scss +3 -0
- package/lib/components/list/YListItem.mjs +37 -0
- package/lib/components/list/YListItem.mjs.map +1 -0
- package/lib/components/list/YListItem.scss +59 -0
- package/lib/components/list/index.mjs +3 -0
- package/lib/components/list/index.mjs.map +1 -0
- package/lib/components/loading/YSpinnerRing.mjs +25 -0
- package/lib/components/loading/YSpinnerRing.mjs.map +1 -0
- package/{src/components/ring-spinner/y-ring-spinner.scss → lib/components/loading/YSpinnerRing.scss} +3 -3
- package/lib/components/loading/index.mjs +2 -0
- package/lib/components/loading/index.mjs.map +1 -0
- package/lib/components/menu/YMenu.mjs +239 -0
- package/lib/components/menu/YMenu.mjs.map +1 -0
- package/lib/components/menu/YMenu.scss +7 -0
- package/lib/components/menu/index.mjs +2 -0
- package/lib/components/menu/index.mjs.map +1 -0
- package/lib/components/navigation/YNavigation.mjs +17 -0
- package/lib/components/navigation/YNavigation.mjs.map +1 -0
- package/lib/components/navigation/index.mjs +2 -0
- package/lib/components/navigation/index.mjs.map +1 -0
- package/lib/components/pagination/YPagination.mjs +61 -0
- package/lib/components/pagination/YPagination.mjs.map +1 -0
- package/lib/components/pagination/YPagination.scss +5 -0
- package/lib/components/pagination/index.mjs +2 -0
- package/lib/components/pagination/index.mjs.map +1 -0
- package/lib/components/panel/YDividePanel.mjs +89 -0
- package/lib/components/panel/YDividePanel.mjs.map +1 -0
- package/lib/components/panel/YDividePanel.scss +43 -0
- package/lib/components/panel/index.mjs +2 -0
- package/lib/components/panel/index.mjs.map +1 -0
- package/lib/components/plate/YPlate.mjs +27 -0
- package/lib/components/plate/YPlate.mjs.map +1 -0
- package/lib/components/plate/YPlate.scss +9 -0
- package/lib/components/plate/index.mjs +2 -0
- package/lib/components/plate/index.mjs.map +1 -0
- package/lib/components/progress-bar/YProgressBar.mjs +110 -0
- package/lib/components/progress-bar/YProgressBar.mjs.map +1 -0
- package/lib/components/progress-bar/YProgressBar.scss +40 -0
- package/lib/components/progress-bar/index.mjs +2 -0
- package/lib/components/progress-bar/index.mjs.map +1 -0
- package/lib/components/snackbar/YSnackbar.mjs +187 -0
- package/lib/components/snackbar/YSnackbar.mjs.map +1 -0
- package/lib/components/snackbar/YSnackbar.scss +38 -0
- package/lib/components/snackbar/index.mjs +2 -0
- package/lib/components/snackbar/index.mjs.map +1 -0
- package/lib/components/switch/YSwitch.mjs +228 -0
- package/lib/components/switch/YSwitch.mjs.map +1 -0
- package/{src/components/switch/y-switch.scss → lib/components/switch/YSwitch.scss} +18 -26
- package/lib/components/switch/index.mjs +2 -0
- package/lib/components/switch/index.mjs.map +1 -0
- package/lib/components/table/YDataTable.mjs +46 -0
- package/lib/components/table/YDataTable.mjs.map +1 -0
- package/lib/components/table/YDataTableBody.mjs +12 -0
- package/lib/components/table/YDataTableBody.mjs.map +1 -0
- package/lib/components/table/YDataTableCell.mjs +55 -0
- package/lib/components/table/YDataTableCell.mjs.map +1 -0
- package/lib/components/table/YDataTableControl.mjs +37 -0
- package/lib/components/table/YDataTableControl.mjs.map +1 -0
- package/lib/components/table/YDataTableControl.scss +6 -0
- package/lib/components/table/YDataTableHead.mjs +12 -0
- package/lib/components/table/YDataTableHead.mjs.map +1 -0
- package/lib/components/table/YDataTableLayer.mjs +14 -0
- package/lib/components/table/YDataTableLayer.mjs.map +1 -0
- package/lib/components/table/YDataTableRow.mjs +12 -0
- package/lib/components/table/YDataTableRow.mjs.map +1 -0
- package/lib/components/table/YDataTableServer.mjs +54 -0
- package/lib/components/table/YDataTableServer.mjs.map +1 -0
- package/lib/components/table/YTable.mjs +53 -0
- package/lib/components/table/YTable.mjs.map +1 -0
- package/lib/components/table/YTable.scss +61 -0
- package/lib/components/table/index.mjs +4 -0
- package/lib/components/table/index.mjs.map +1 -0
- package/lib/components/table/pagination.mjs +21 -0
- package/lib/components/table/pagination.mjs.map +1 -0
- package/lib/components/text-highlighter/YTextHighlighter.mjs +94 -0
- package/lib/components/text-highlighter/YTextHighlighter.mjs.map +1 -0
- package/lib/components/text-highlighter/index.mjs +3 -0
- package/lib/components/text-highlighter/index.mjs.map +1 -0
- package/lib/components/tooltip/YTooltip.mjs +209 -0
- package/lib/components/tooltip/YTooltip.mjs.map +1 -0
- package/lib/components/tooltip/YTooltip.scss +19 -0
- package/lib/components/tooltip/index.mjs +2 -0
- package/lib/components/tooltip/index.mjs.map +1 -0
- package/lib/components/transitions/expand-transition.mjs +88 -0
- package/lib/components/transitions/expand-transition.mjs.map +1 -0
- package/lib/components/transitions/index.mjs +4 -0
- package/lib/components/transitions/index.mjs.map +1 -0
- package/lib/components/tree-view/YTreeView.mjs +92 -0
- package/lib/components/tree-view/YTreeView.mjs.map +1 -0
- package/lib/components/tree-view/YTreeView.scss +46 -0
- package/lib/components/tree-view/YTreeViewNode.mjs +122 -0
- package/lib/components/tree-view/YTreeViewNode.mjs.map +1 -0
- package/lib/components/tree-view/index.mjs +3 -0
- package/lib/components/tree-view/index.mjs.map +1 -0
- package/lib/composables/collections.mjs +2 -0
- package/lib/composables/collections.mjs.map +1 -0
- package/lib/composables/communication.mjs +46 -0
- package/lib/composables/communication.mjs.map +1 -0
- package/lib/composables/component.mjs +8 -0
- package/lib/composables/component.mjs.map +1 -0
- package/{src/composables/layer-group.ts → lib/composables/layer-group.mjs} +8 -10
- package/lib/composables/layer-group.mjs.map +1 -0
- package/lib/composables/layout.mjs +13 -0
- package/lib/composables/layout.mjs.map +1 -0
- package/lib/composables/levitation.mjs +135 -0
- package/lib/composables/levitation.mjs.map +1 -0
- package/{src/composables/progress.ts → lib/composables/progress.mjs} +6 -5
- package/lib/composables/progress.mjs.map +1 -0
- package/lib/composables/resize-observer.mjs +34 -0
- package/lib/composables/resize-observer.mjs.map +1 -0
- package/lib/composables/scope.mjs +27 -0
- package/lib/composables/scope.mjs.map +1 -0
- package/lib/composables/theme/index.mjs +49 -0
- package/lib/composables/theme/index.mjs.map +1 -0
- package/lib/composables/theme/setting.mjs +46 -0
- package/lib/composables/theme/setting.mjs.map +1 -0
- package/lib/composables/timing.mjs +77 -0
- package/lib/composables/timing.mjs.map +1 -0
- package/lib/composables/transition.mjs +50 -0
- package/lib/composables/transition.mjs.map +1 -0
- package/lib/directives/complement-click/index.mjs +78 -0
- package/lib/directives/complement-click/index.mjs.map +1 -0
- package/{src/directives/plate-wave/index.ts → lib/directives/plate-wave/index.mjs} +25 -42
- package/lib/directives/plate-wave/index.mjs.map +1 -0
- package/{src → lib}/directives/plate-wave/plate-wave.scss +1 -1
- package/lib/directives/theme-class.mjs +24 -0
- package/lib/directives/theme-class.mjs.map +1 -0
- package/lib/etc/index.mjs +6 -0
- package/lib/etc/index.mjs.map +1 -0
- package/lib/index.mjs +55 -0
- package/lib/index.mjs.map +1 -0
- package/{src/mixins/di.ts → lib/mixins/di.mjs} +7 -8
- package/lib/mixins/di.mjs.map +1 -0
- package/{src/mixins/rebind-attrs.ts → lib/mixins/rebind-attrs.mjs} +9 -8
- package/lib/mixins/rebind-attrs.mjs.map +1 -0
- package/{src/styles/palette.scss → lib/styles/_palette.scss} +0 -4
- package/lib/styles/base.scss +95 -0
- package/lib/styles/settings/_variables.scss +14 -0
- package/lib/styles/settings/provided.scss +35 -0
- package/lib/styles/theme/dark.scss +21 -0
- package/{src → lib}/styles/theme/index.scss +0 -3
- package/lib/styles/theme/light.scss +21 -0
- package/lib/util/FrameScheduler.mjs +29 -0
- package/lib/util/FrameScheduler.mjs.map +1 -0
- package/lib/util/Rect.mjs +27 -0
- package/lib/util/Rect.mjs.map +1 -0
- package/lib/util/common.mjs +66 -0
- package/lib/util/common.mjs.map +1 -0
- package/lib/util/dom.mjs +8 -0
- package/lib/util/dom.mjs.map +1 -0
- package/lib/util/scroll.mjs +28 -0
- package/lib/util/scroll.mjs.map +1 -0
- package/lib/util/string.mjs +33 -0
- package/lib/util/string.mjs.map +1 -0
- package/lib/util/ui.mjs +83 -0
- package/lib/util/ui.mjs.map +1 -0
- package/lib/util/validation.mjs +5 -0
- package/lib/util/validation.mjs.map +1 -0
- package/lib/util/vue-component.mjs +64 -0
- package/lib/util/vue-component.mjs.map +1 -0
- package/package.json +62 -22
- package/types/components/app/YApp.d.ts +7 -0
- package/types/components/app/index.d.ts +1 -0
- package/types/components/button/YButton.d.ts +122 -0
- package/types/components/button/index.d.ts +1 -0
- package/types/components/card/YCard.d.ts +11 -0
- package/types/components/card/YCardBody.d.ts +2 -0
- package/types/components/card/YCardFooter.d.ts +2 -0
- package/types/components/card/YCardHeader.d.ts +2 -0
- package/types/components/card/index.d.ts +5 -0
- package/types/components/checkbox/YCheckbox.d.ts +46 -0
- package/types/components/checkbox/YInputCheckbox.d.ts +42 -0
- package/types/components/checkbox/index.d.ts +4 -0
- package/types/components/chip/YChip.d.ts +34 -0
- package/types/components/chip/index.d.ts +2 -0
- package/types/components/dialog/YDialog.d.ts +120 -0
- package/types/components/dialog/index.d.ts +1 -0
- package/types/components/field-input/YFieldInput.d.ts +118 -0
- package/types/components/field-input/index.d.ts +1 -0
- package/types/components/form/YForm.d.ts +32 -0
- package/types/components/form/index.d.ts +3 -0
- package/types/components/icons/YIconCheckbox.d.ts +1 -0
- package/types/components/icons/YIconClear.d.ts +1 -0
- package/types/components/icons/YIconExpand.d.ts +1 -0
- package/types/components/icons/index.d.ts +3 -0
- package/types/components/index.d.ts +23 -0
- package/types/components/input/YInput.d.ts +166 -0
- package/types/components/input/index.d.ts +1 -0
- package/types/components/layer/YLayer.d.ts +99 -0
- package/types/components/layer/index.d.ts +1 -0
- package/types/components/list/YList.d.ts +2 -0
- package/types/components/list/YListItem.d.ts +28 -0
- package/types/components/list/index.d.ts +2 -0
- package/types/components/loading/YSpinnerRing.d.ts +1 -0
- package/types/components/loading/index.d.ts +1 -0
- package/types/components/menu/YMenu.d.ts +236 -0
- package/types/components/menu/index.d.ts +1 -0
- package/types/components/pagination/YPagination.d.ts +106 -0
- package/types/components/pagination/index.d.ts +1 -0
- package/types/components/panel/YDividePanel.d.ts +3 -0
- package/types/components/panel/index.d.ts +1 -0
- package/types/components/plate/YPlate.d.ts +10 -0
- package/types/components/plate/index.d.ts +1 -0
- package/types/components/progress-bar/YProgressBar.d.ts +59 -0
- package/types/components/progress-bar/index.d.ts +1 -0
- package/types/components/snackbar/YSnackbar.d.ts +77 -0
- package/types/components/snackbar/index.d.ts +1 -0
- package/types/components/switch/YSwitch.d.ts +106 -0
- package/types/components/switch/index.d.ts +1 -0
- package/types/components/table/YDataTable.d.ts +63 -0
- package/types/components/table/YDataTableBody.d.ts +2 -0
- package/types/components/table/YDataTableControl.d.ts +2 -0
- package/types/components/table/YDataTableHead.d.ts +2 -0
- package/types/components/table/YDataTableLayer.d.ts +2 -0
- package/types/components/table/YDataTableServer.d.ts +82 -0
- package/types/components/table/YTable.d.ts +32 -0
- package/types/components/table/index.d.ts +3 -0
- package/types/components/table/pagination.d.ts +38 -0
- package/types/components/tooltip/YTooltip.d.ts +188 -0
- package/types/components/tooltip/index.d.ts +1 -0
- package/types/components/transitions/expand-transition.d.ts +16 -0
- package/types/components/transitions/index.d.ts +32 -0
- package/types/components/tree-view/YTreeView.d.ts +37 -0
- package/types/components/tree-view/YTreeViewNode.d.ts +51 -0
- package/types/components/tree-view/index.d.ts +2 -0
- package/types/composables/communication.d.ts +1 -0
- package/types/composables/component.d.ts +2 -0
- package/types/composables/layer-group.d.ts +5 -0
- package/types/composables/progress.d.ts +3 -0
- package/types/composables/resize-observer.d.ts +14 -0
- package/types/composables/scope.d.ts +2 -0
- package/types/composables/theme/index.d.ts +15 -0
- package/types/composables/theme/setting.d.ts +12 -0
- package/types/composables/timing.d.ts +15 -0
- package/types/composables/transition.d.ts +21 -0
- package/types/directives/complement-click/index.d.ts +25 -0
- package/types/directives/plate-wave/index.d.ts +13 -0
- package/types/directives/theme-class.d.ts +3 -0
- package/types/etc/index.d.ts +1 -0
- package/types/globals.d.ts +11 -0
- package/types/index.d.ts +9 -0
- package/types/mixins/di.d.ts +2 -0
- package/types/mixins/rebind-attrs.d.ts +5 -0
- package/types/shims.d.ts +71 -0
- package/types/util/common.d.ts +8 -0
- package/types/util/dom.d.ts +1 -0
- package/types/util/string.d.ts +3 -0
- package/types/util/ui.d.ts +9 -0
- package/types/util/vue-component.d.ts +33 -0
- package/types/vite-env.d.ts +1 -0
- package/src/components/button/index.ts +0 -3
- package/src/components/button/y-btn.ts +0 -104
- package/src/components/card/index.ts +0 -6
- package/src/components/card/y-card-body.ts +0 -8
- package/src/components/card/y-card-footer.ts +0 -8
- package/src/components/card/y-card-header.ts +0 -8
- package/src/components/card/y-card.ts +0 -16
- package/src/components/checkbox/IconCheckbox.vue +0 -24
- package/src/components/checkbox/YCheckbox.vue +0 -113
- package/src/components/checkbox/YInputCheckbox.vue +0 -108
- package/src/components/checkbox/index.ts +0 -8
- package/src/components/chip/index.ts +0 -3
- package/src/components/dialog/index.ts +0 -3
- package/src/components/dialog/y-dialog.vue +0 -46
- package/src/components/field-input/index.scss +0 -5
- package/src/components/field-input/index.ts +0 -11
- package/src/components/field-input/y-field-input.ts +0 -214
- package/src/components/form/index.ts +0 -9
- package/src/components/form/y-form.ts +0 -93
- package/src/components/icons/icon-clearable.ts +0 -6
- package/src/components/index.ts +0 -17
- package/src/components/input/index.scss +0 -5
- package/src/components/input/index.ts +0 -9
- package/src/components/input/y-input.ts +0 -368
- package/src/components/layer/index.ts +0 -3
- package/src/components/layer/y-layer.vue +0 -146
- package/src/components/lottie-player.ts +0 -41
- package/src/components/progress-bar/index.ts +0 -3
- package/src/components/progress-bar/y-progress-bar.vue +0 -144
- package/src/components/ring-spinner/y-ring-spinner.vue +0 -31
- package/src/components/switch/YSwitch.vue +0 -217
- package/src/components/switch/index.scss +0 -5
- package/src/components/switch/index.ts +0 -11
- package/src/components/text-highlighter/index.scss +0 -5
- package/src/components/text-highlighter/index.ts +0 -3
- package/src/components/text-highlighter/y-text-highlighter.ts +0 -89
- package/src/composables/lazy.ts +0 -30
- package/src/composables/theme.ts +0 -25
- package/src/directives/complement-click/index.ts +0 -123
- package/src/directives/theme-class.ts +0 -14
- package/src/file-extension.d.ts +0 -14
- package/src/index.ts +0 -21
- package/src/styles/base.scss +0 -28
- package/src/styles/theme/dark.scss +0 -35
- package/src/styles/theme/light.scss +0 -32
- package/src/util/common.ts +0 -59
- package/src/util/date-time.ts +0 -41
- package/src/util/dom.ts +0 -6
- package/src/util/string.ts +0 -9
- package/src/util/ui.ts +0 -39
- package/src/util/validation.ts +0 -9
- package/src/util/vue-component.ts +0 -18
- /package/{src/components/card/y-card.scss → lib/components/card/YCard.scss} +0 -0
- /package/{src/components/checkbox/y-checkbox.scss → lib/components/checkbox/YCheckbox.scss} +0 -0
- /package/{src/components/dialog/y-dialog.scss → lib/components/dialog/YDialog.scss} +0 -0
- /package/{src/components/layer/y-layer.scss → lib/components/layer/YLayer.scss} +0 -0
- /package/{src/components/text-highlighter/y-text-highlighter.scss → lib/components/text-highlighter/YTextHighlighter.scss} +0 -0
- /package/{src/styles/variables.scss → lib/styles/_variables.scss} +0 -0
- /package/{src → lib}/styles/util/helper.scss +0 -0
- /package/{src → lib}/styles/util/theme.scss +0 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { createVNode as _createVNode, Fragment as _Fragment } from "vue";
|
|
2
|
+
import { computed, defineComponent, mergeProps, nextTick, ref, watch, watchEffect } from 'vue';
|
|
3
|
+
import { useModelDuplex } from "../../composables/communication.mjs";
|
|
4
|
+
import { useRender } from "../../composables/component.mjs";
|
|
5
|
+
import { polyTransitionPropOptions } from "../../composables/transition.mjs";
|
|
6
|
+
import { toKebabCase } from "../../util/string.mjs";
|
|
7
|
+
import { bindClasses } from "../../util/vue-component.mjs";
|
|
8
|
+
import { YLayer } from "../layer/index.mjs";
|
|
9
|
+
import { YPlate } from "../plate/index.mjs";
|
|
10
|
+
import "./YTooltip.scss";
|
|
11
|
+
const NAME = 'YTooltip';
|
|
12
|
+
const KEBAB_NAME = toKebabCase(NAME);
|
|
13
|
+
const YTooltipPropOptions = {
|
|
14
|
+
modelValue: {
|
|
15
|
+
type: Boolean,
|
|
16
|
+
default: false
|
|
17
|
+
},
|
|
18
|
+
tooltipClasses: {
|
|
19
|
+
type: [Array, String, Object]
|
|
20
|
+
},
|
|
21
|
+
disabled: {
|
|
22
|
+
type: Boolean,
|
|
23
|
+
default: false
|
|
24
|
+
},
|
|
25
|
+
position: {
|
|
26
|
+
type: String,
|
|
27
|
+
default: 'default'
|
|
28
|
+
},
|
|
29
|
+
align: {
|
|
30
|
+
type: String,
|
|
31
|
+
default: 'center'
|
|
32
|
+
},
|
|
33
|
+
openOnHover: {
|
|
34
|
+
type: Boolean,
|
|
35
|
+
default: true
|
|
36
|
+
},
|
|
37
|
+
preventClip: {
|
|
38
|
+
type: Boolean,
|
|
39
|
+
default: true
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* # Component
|
|
45
|
+
*/
|
|
46
|
+
export const YTooltip = defineComponent({
|
|
47
|
+
name: NAME,
|
|
48
|
+
props: {
|
|
49
|
+
...YTooltipPropOptions,
|
|
50
|
+
transition: {
|
|
51
|
+
...polyTransitionPropOptions.transition,
|
|
52
|
+
default: 'fade'
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
emits: ['update:modelValue'],
|
|
56
|
+
setup(props, _ref) {
|
|
57
|
+
let {
|
|
58
|
+
slots,
|
|
59
|
+
emit,
|
|
60
|
+
expose
|
|
61
|
+
} = _ref;
|
|
62
|
+
const el$ = ref();
|
|
63
|
+
const base$ = ref();
|
|
64
|
+
const baseSlot = ref();
|
|
65
|
+
const baseEl = ref();
|
|
66
|
+
const contentEl = ref();
|
|
67
|
+
const classes = computed(() => {
|
|
68
|
+
const boundClasses = bindClasses(props.tooltipClasses);
|
|
69
|
+
return {
|
|
70
|
+
...boundClasses,
|
|
71
|
+
'y-tooltip': true
|
|
72
|
+
};
|
|
73
|
+
});
|
|
74
|
+
const model = useModelDuplex(props);
|
|
75
|
+
const active = computed({
|
|
76
|
+
get: () => {
|
|
77
|
+
return !!model.value;
|
|
78
|
+
},
|
|
79
|
+
set: v => {
|
|
80
|
+
if (!(v && props.disabled)) model.value = v;
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
const coordinatesStyles = computed(() => {
|
|
84
|
+
const $base = baseEl.value;
|
|
85
|
+
if ($base) {
|
|
86
|
+
const {
|
|
87
|
+
position,
|
|
88
|
+
align
|
|
89
|
+
} = props;
|
|
90
|
+
const $content = contentEl.value;
|
|
91
|
+
const rect = $base.getBoundingClientRect();
|
|
92
|
+
let top = rect.top;
|
|
93
|
+
let left = rect.left + rect.width / 2;
|
|
94
|
+
if ($content) {
|
|
95
|
+
if (position === 'top' || position === 'bottom') {
|
|
96
|
+
if (position === 'top') {
|
|
97
|
+
top -= $content.clientHeight;
|
|
98
|
+
top -= 8; // Offset
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (position === 'bottom') {
|
|
102
|
+
top += rect.height;
|
|
103
|
+
top += 8; // Offset
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (align === 'center') {
|
|
107
|
+
left -= $content.clientWidth / 2;
|
|
108
|
+
} else if (align === 'end') {
|
|
109
|
+
left = rect.right;
|
|
110
|
+
left -= $content.clientWidth;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
top: `${top}px`,
|
|
116
|
+
left: `${left}px`
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
return {};
|
|
120
|
+
});
|
|
121
|
+
const baseFromSlotEl = computed(() => {
|
|
122
|
+
return baseSlot.value?.[0]?.el;
|
|
123
|
+
});
|
|
124
|
+
watchEffect(() => {
|
|
125
|
+
if (!base$.value) {
|
|
126
|
+
if (baseFromSlotEl.value?.nodeType !== 3) {
|
|
127
|
+
baseEl.value = baseFromSlotEl.value;
|
|
128
|
+
}
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const base = base$.value;
|
|
132
|
+
baseEl.value = base$.value?.$el ? base$.value?.$el : base;
|
|
133
|
+
});
|
|
134
|
+
watch(active, neo => {
|
|
135
|
+
if (neo) {
|
|
136
|
+
nextTick(() => {
|
|
137
|
+
const $content = el$.value?.content$;
|
|
138
|
+
contentEl.value = $content;
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
function onMouseenter(e) {
|
|
143
|
+
if (props.openOnHover) {
|
|
144
|
+
active.value = true;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function onMouseleave(e) {
|
|
148
|
+
if (props.openOnHover) {
|
|
149
|
+
active.value = false;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function bindHover(el) {
|
|
153
|
+
el.addEventListener('mouseenter', onMouseenter);
|
|
154
|
+
el.addEventListener('mouseleave', onMouseleave);
|
|
155
|
+
}
|
|
156
|
+
function unbindHover(el) {
|
|
157
|
+
el.removeEventListener('mouseenter', onMouseenter);
|
|
158
|
+
el.removeEventListener('mouseleave', onMouseleave);
|
|
159
|
+
}
|
|
160
|
+
watch(baseEl, (neo, old) => {
|
|
161
|
+
if (neo) {
|
|
162
|
+
bindHover(neo);
|
|
163
|
+
} else if (old) {
|
|
164
|
+
unbindHover(old);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
useRender(() => {
|
|
168
|
+
const slotBase = slots.base?.({
|
|
169
|
+
active: active.value,
|
|
170
|
+
props: mergeProps({
|
|
171
|
+
ref: base$
|
|
172
|
+
})
|
|
173
|
+
});
|
|
174
|
+
baseSlot.value = slotBase;
|
|
175
|
+
return _createVNode(_Fragment, null, [slotBase, _createVNode(YLayer, {
|
|
176
|
+
"modelValue": active.value,
|
|
177
|
+
"onUpdate:modelValue": $event => active.value = $event,
|
|
178
|
+
"ref": el$,
|
|
179
|
+
"classes": classes.value,
|
|
180
|
+
"scrim": false,
|
|
181
|
+
"disabled": props.disabled,
|
|
182
|
+
"content-styles": {
|
|
183
|
+
...coordinatesStyles.value
|
|
184
|
+
},
|
|
185
|
+
"transition": props.transition
|
|
186
|
+
}, {
|
|
187
|
+
default: function () {
|
|
188
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
189
|
+
args[_key] = arguments[_key];
|
|
190
|
+
}
|
|
191
|
+
return _createVNode(_Fragment, null, [_createVNode(YPlate, null, null), _createVNode("div", {
|
|
192
|
+
"class": "y-tooltip__content"
|
|
193
|
+
}, [slots.default?.(...args) ?? ''])]);
|
|
194
|
+
}
|
|
195
|
+
})]);
|
|
196
|
+
});
|
|
197
|
+
if (import.meta.env.DEV) {
|
|
198
|
+
return {
|
|
199
|
+
base$,
|
|
200
|
+
el$,
|
|
201
|
+
baseEl,
|
|
202
|
+
coordinatesStyles,
|
|
203
|
+
baseSlot,
|
|
204
|
+
active
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
//# sourceMappingURL=YTooltip.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YTooltip.mjs","names":["computed","defineComponent","mergeProps","nextTick","ref","watch","watchEffect","useModelDuplex","useRender","polyTransitionPropOptions","toKebabCase","bindClasses","YLayer","YPlate","NAME","KEBAB_NAME","YTooltipPropOptions","modelValue","type","Boolean","default","tooltipClasses","Array","String","Object","disabled","position","align","openOnHover","preventClip","YTooltip","name","props","transition","emits","setup","_ref","slots","emit","expose","el$","base$","baseSlot","baseEl","contentEl","classes","boundClasses","model","active","get","value","set","v","coordinatesStyles","$base","$content","rect","getBoundingClientRect","top","left","width","clientHeight","height","clientWidth","right","baseFromSlotEl","el","nodeType","base","$el","neo","content$","onMouseenter","e","onMouseleave","bindHover","addEventListener","unbindHover","removeEventListener","old","slotBase","_createVNode","_Fragment","$event","_len","arguments","length","args","_key","import","meta","env","DEV"],"sources":["../../../src/components/tooltip/YTooltip.tsx"],"sourcesContent":["import type { CSSProperties, PropType } from 'vue';\nimport {\n computed,\n defineComponent,\n mergeProps,\n nextTick,\n ref,\n watch,\n watchEffect,\n} from 'vue';\n\nimport { useModelDuplex } from '../../composables/communication';\nimport { useRender } from '../../composables/component';\nimport { polyTransitionPropOptions } from '../../composables/transition';\nimport { toKebabCase } from '../../util/string';\nimport { bindClasses } from '../../util/vue-component';\nimport { YLayer } from '../layer';\nimport { YPlate } from '../plate';\n\nimport './YTooltip.scss';\n\nconst NAME = 'YTooltip';\nconst KEBAB_NAME = toKebabCase(NAME);\n\nconst YTooltipPropOptions = {\n modelValue: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n tooltipClasses: {\n type: [Array, String, Object] as PropType<\n string[] | string | Record<string, any>\n >,\n },\n disabled: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n position: {\n type: String as PropType<'default' | 'top' | 'bottom' | 'left' | 'right'>,\n default: 'default',\n },\n align: {\n type: String as PropType<'center' | 'start' | 'end'>,\n default: 'center',\n },\n openOnHover: {\n type: Boolean as PropType<boolean>,\n default: true,\n },\n preventClip: {\n type: Boolean as PropType<boolean>,\n default: true,\n },\n};\n\n/**\n * # Component\n */\nexport const YTooltip = defineComponent({\n name: NAME,\n props: {\n ...YTooltipPropOptions,\n transition: {\n ...polyTransitionPropOptions.transition,\n default: 'fade',\n },\n },\n emits: ['update:modelValue'],\n setup(props, { slots, emit, expose }) {\n const el$ = ref<typeof YLayer>();\n const base$ = ref();\n const baseSlot = ref();\n const baseEl = ref<HTMLElement>();\n const contentEl = ref<HTMLElement>();\n\n const classes = computed(() => {\n const boundClasses = bindClasses(props.tooltipClasses);\n return {\n ...boundClasses,\n 'y-tooltip': true,\n };\n });\n\n const model = useModelDuplex(props);\n\n const active = computed({\n get: (): boolean => {\n return !!model.value;\n },\n set: (v: boolean) => {\n if (!(v && props.disabled)) model.value = v;\n },\n });\n\n const coordinatesStyles = computed<CSSProperties>(() => {\n const $base = baseEl.value;\n if ($base) {\n const { position, align } = props;\n const $content = contentEl.value;\n const rect = $base.getBoundingClientRect();\n\n let top = rect.top;\n let left = rect.left + rect.width / 2;\n\n if ($content) {\n if (position === 'top' || position === 'bottom') {\n if (position === 'top') {\n top -= $content.clientHeight;\n top -= 8; // Offset\n }\n\n if (position === 'bottom') {\n top += rect.height;\n top += 8; // Offset\n }\n\n if (align === 'center') {\n left -= $content.clientWidth / 2;\n } else if (align === 'end') {\n left = rect.right;\n left -= $content.clientWidth;\n }\n }\n }\n\n return {\n top: `${top}px`,\n left: `${left}px`,\n };\n }\n return {};\n });\n\n const baseFromSlotEl = computed(() => {\n return baseSlot.value?.[0]?.el;\n });\n\n watchEffect(() => {\n if (!base$.value) {\n if (baseFromSlotEl.value?.nodeType !== 3) {\n baseEl.value = baseFromSlotEl.value;\n }\n return;\n }\n const base = base$.value;\n baseEl.value = base$.value?.$el ? base$.value?.$el : base;\n });\n\n watch(active, (neo) => {\n if (neo) {\n nextTick(() => {\n const $content = el$.value?.content$;\n contentEl.value = $content;\n });\n }\n });\n\n function onMouseenter(e: MouseEvent) {\n if (props.openOnHover) {\n active.value = true;\n }\n }\n\n function onMouseleave(e: MouseEvent) {\n if (props.openOnHover) {\n active.value = false;\n }\n }\n\n function bindHover(el: HTMLElement) {\n el.addEventListener('mouseenter', onMouseenter);\n el.addEventListener('mouseleave', onMouseleave);\n }\n\n function unbindHover(el: HTMLElement) {\n el.removeEventListener('mouseenter', onMouseenter);\n el.removeEventListener('mouseleave', onMouseleave);\n }\n\n watch(baseEl, (neo, old) => {\n if (neo) {\n bindHover(neo);\n } else if (old) {\n unbindHover(old);\n }\n });\n\n useRender(() => {\n const slotBase = slots.base?.({\n active: active.value,\n props: mergeProps({\n ref: base$,\n }),\n });\n baseSlot.value = slotBase;\n return (\n <>\n {slotBase}\n <YLayer\n v-model={active.value}\n ref={el$}\n classes={classes.value}\n scrim={false}\n disabled={props.disabled}\n content-styles={{ ...coordinatesStyles.value }}\n transition={props.transition}\n >\n {{\n default: (...args: any) => {\n return (\n <>\n <YPlate></YPlate>\n <div class=\"y-tooltip__content\">\n {slots.default?.(...args) ?? ''}\n </div>\n </>\n );\n },\n }}\n </YLayer>\n </>\n );\n });\n\n if (import.meta.env.DEV) {\n return {\n base$,\n el$,\n baseEl,\n coordinatesStyles,\n baseSlot,\n active,\n };\n }\n },\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
.y-tooltip {
|
|
2
|
+
font-size: 0.875rem;
|
|
3
|
+
|
|
4
|
+
.y-layer__content {
|
|
5
|
+
padding: 4px 8px;
|
|
6
|
+
|
|
7
|
+
.y-plate {
|
|
8
|
+
border-radius: 6px;
|
|
9
|
+
background: rgba(0, 0, 0, 0.8);
|
|
10
|
+
position: absolute;
|
|
11
|
+
inset: 0;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
&__content {
|
|
16
|
+
position: relative;
|
|
17
|
+
color: #fff;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/components/tooltip/index.ts"],"sourcesContent":["export * from './YTooltip';\r\n"],"mappings":""}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Transition, defineComponent, h } from 'vue';
|
|
2
|
+
import { kebabToCamel } from "../../util/string.mjs";
|
|
3
|
+
export function createExpandTransition() {
|
|
4
|
+
let isHorizon = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
5
|
+
const direction = isHorizon ? 'h' : 'v';
|
|
6
|
+
const name = `expand-${direction}-transition`;
|
|
7
|
+
const sizeProperty = isHorizon ? 'width' : 'height';
|
|
8
|
+
const offsetProperty = kebabToCamel(`offset-${sizeProperty}`);
|
|
9
|
+
function getExpandTransitionHooks() {
|
|
10
|
+
function resetStyle(el) {
|
|
11
|
+
if (el._originStyle) {
|
|
12
|
+
el.style.overflow = el._originStyle.overflow;
|
|
13
|
+
const size = el._originStyle[sizeProperty];
|
|
14
|
+
if (size != null) {
|
|
15
|
+
el.style[sizeProperty] = size;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
delete el._originStyle;
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
onBeforeEnter(el) {
|
|
22
|
+
el._parent = el.parentNode;
|
|
23
|
+
el._originStyle = {
|
|
24
|
+
transition: el.style.transition,
|
|
25
|
+
overflow: el.style.overflow,
|
|
26
|
+
[sizeProperty]: el.style[sizeProperty]
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
onEnter(el) {
|
|
30
|
+
const originStyle = el._originStyle;
|
|
31
|
+
el.style.setProperty('transition', 'none', 'important');
|
|
32
|
+
el.style.overflow = 'hidden';
|
|
33
|
+
const offsetSize = `${el[offsetProperty]}px`;
|
|
34
|
+
el.style[sizeProperty] = '0';
|
|
35
|
+
el.getBoundingClientRect();
|
|
36
|
+
el.style.transition = originStyle?.transition ?? '';
|
|
37
|
+
requestAnimationFrame(() => {
|
|
38
|
+
el.style[sizeProperty] = offsetSize;
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
onAfterEnter(el) {
|
|
42
|
+
resetStyle(el);
|
|
43
|
+
},
|
|
44
|
+
onEnterCancelled(el) {
|
|
45
|
+
resetStyle(el);
|
|
46
|
+
},
|
|
47
|
+
onLeave(el) {
|
|
48
|
+
el._originStyle = {
|
|
49
|
+
transition: '',
|
|
50
|
+
overflow: el.style.overflow,
|
|
51
|
+
[sizeProperty]: el.style[sizeProperty]
|
|
52
|
+
};
|
|
53
|
+
el.style.overflow = 'hidden';
|
|
54
|
+
el.style[sizeProperty] = `${el[offsetProperty]}px`;
|
|
55
|
+
el.getBoundingClientRect();
|
|
56
|
+
requestAnimationFrame(() => {
|
|
57
|
+
el.style[sizeProperty] = '0';
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
onAfterLeave(el) {
|
|
61
|
+
resetStyle(el);
|
|
62
|
+
},
|
|
63
|
+
onLeaveCancelled(el) {
|
|
64
|
+
resetStyle(el);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return defineComponent({
|
|
69
|
+
name,
|
|
70
|
+
props: {
|
|
71
|
+
disabled: {
|
|
72
|
+
type: Boolean,
|
|
73
|
+
default: false
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
setup(props, _ref) {
|
|
77
|
+
let {
|
|
78
|
+
slots
|
|
79
|
+
} = _ref;
|
|
80
|
+
return () => h(Transition, {
|
|
81
|
+
name: props.disabled ? '' : name,
|
|
82
|
+
css: !props.disabled,
|
|
83
|
+
...(props.disabled ? {} : getExpandTransitionHooks())
|
|
84
|
+
}, slots.default);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=expand-transition.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expand-transition.mjs","names":["Transition","defineComponent","h","kebabToCamel","createExpandTransition","isHorizon","arguments","length","undefined","direction","name","sizeProperty","offsetProperty","getExpandTransitionHooks","resetStyle","el","_originStyle","style","overflow","size","onBeforeEnter","_parent","parentNode","transition","onEnter","originStyle","setProperty","offsetSize","getBoundingClientRect","requestAnimationFrame","onAfterEnter","onEnterCancelled","onLeave","onAfterLeave","onLeaveCancelled","props","disabled","type","Boolean","default","setup","_ref","slots","css"],"sources":["../../../src/components/transitions/expand-transition.ts"],"sourcesContent":["import { PropType, Transition, defineComponent, h } from 'vue';\n\nimport { kebabToCamel } from '../../util/string';\n\ntype HTMLParentElement = (Node & ParentNode & HTMLElement) | null;\ninterface HTMLExpandElement extends HTMLElement {\n _parent?: HTMLParentElement;\n _originStyle?: {\n transition: string;\n overflow: string;\n height?: string | null;\n width?: string | null;\n };\n}\n\nexport function createExpandTransition(isHorizon = false) {\n const direction = isHorizon ? 'h' : 'v';\n const name = `expand-${direction}-transition`;\n const sizeProperty = isHorizon ? 'width' : 'height';\n const offsetProperty = kebabToCamel(`offset-${sizeProperty}`) as\n | 'offsetWidth'\n | 'offsetHeight';\n\n function getExpandTransitionHooks(): Record<string, any> {\n function resetStyle(el: HTMLExpandElement) {\n if (el._originStyle) {\n el.style.overflow = el._originStyle.overflow;\n const size = el._originStyle[sizeProperty];\n if (size != null) {\n el.style[sizeProperty] = size;\n }\n }\n delete el._originStyle;\n }\n\n return {\n onBeforeEnter(el: HTMLExpandElement) {\n el._parent = el.parentNode as HTMLParentElement;\n el._originStyle = {\n transition: el.style.transition,\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n };\n },\n onEnter(el: HTMLExpandElement) {\n const originStyle = el._originStyle;\n el.style.setProperty('transition', 'none', 'important');\n el.style.overflow = 'hidden';\n const offsetSize = `${el[offsetProperty]}px`;\n el.style[sizeProperty] = '0';\n el.getBoundingClientRect();\n el.style.transition = originStyle?.transition ?? '';\n\n requestAnimationFrame(() => {\n el.style[sizeProperty] = offsetSize;\n });\n },\n onAfterEnter(el: HTMLExpandElement) {\n resetStyle(el);\n },\n onEnterCancelled(el: HTMLExpandElement) {\n resetStyle(el);\n },\n onLeave(el: HTMLExpandElement) {\n el._originStyle = {\n transition: '',\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n };\n el.style.overflow = 'hidden';\n el.style[sizeProperty] = `${el[offsetProperty]}px`;\n el.getBoundingClientRect();\n\n requestAnimationFrame(() => {\n el.style[sizeProperty] = '0';\n })\n },\n onAfterLeave(el: HTMLExpandElement) {\n resetStyle(el);\n },\n onLeaveCancelled(el: HTMLExpandElement) {\n resetStyle(el);\n },\n };\n }\n\n return defineComponent({\n name,\n props: {\n disabled: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n },\n setup(props, { slots }) {\n return () =>\n h(\n Transition,\n { name: props.disabled ? '' : name, css: !props.disabled, ...(props.disabled ? {} : getExpandTransitionHooks()) },\n slots.default,\n );\n },\n });\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["createExpandTransition","YExpandVTransition","YExpandHTransition"],"sources":["../../../src/components/transitions/index.ts"],"sourcesContent":["import { createExpandTransition } from './expand-transition';\n\nexport const YExpandVTransition = createExpandTransition(false);\nexport const YExpandHTransition = createExpandTransition(true);\n\nexport type YExpandVTransition = InstanceType<typeof YExpandVTransition>;\nexport type YExpandHTransition = InstanceType<typeof YExpandHTransition>;\n"],"mappings":"SAASA,sBAAsB;AAE/B,OAAO,MAAMC,kBAAkB,GAAGD,sBAAsB,CAAC,KAAK,CAAC;AAC/D,OAAO,MAAME,kBAAkB,GAAGF,sBAAsB,CAAC,IAAI,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { createTextVNode as _createTextVNode, createVNode as _createVNode, resolveDirective as _resolveDirective, Fragment as _Fragment } from "vue";
|
|
2
|
+
import { computed, defineComponent, provide, ref, watch } from 'vue';
|
|
3
|
+
import { useRender } from "../../composables/component.mjs";
|
|
4
|
+
import { getObjectValueByPath, hasOwnProperty } from "../../util/common.mjs";
|
|
5
|
+
import { YTreeViewNode } from "./YTreeViewNode.mjs";
|
|
6
|
+
import "./YTreeView.scss";
|
|
7
|
+
export const YTreeView = defineComponent({
|
|
8
|
+
name: 'YTreeView',
|
|
9
|
+
props: {
|
|
10
|
+
items: {
|
|
11
|
+
type: Array,
|
|
12
|
+
default: () => []
|
|
13
|
+
},
|
|
14
|
+
itemKey: {
|
|
15
|
+
type: String,
|
|
16
|
+
default: 'id'
|
|
17
|
+
},
|
|
18
|
+
childrenKey: {
|
|
19
|
+
type: String,
|
|
20
|
+
default: 'children'
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
setup(props, _ref) {
|
|
24
|
+
let {
|
|
25
|
+
slots
|
|
26
|
+
} = _ref;
|
|
27
|
+
const classes = computed(() => {
|
|
28
|
+
return {
|
|
29
|
+
'y-tree-view': true
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
const nodes = ref({});
|
|
33
|
+
const expanded = ref([]);
|
|
34
|
+
function updateNodes(items) {
|
|
35
|
+
let parentKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
36
|
+
for (const item of items) {
|
|
37
|
+
const key = getObjectValueByPath(item, props.itemKey);
|
|
38
|
+
const children = getObjectValueByPath(item, props.childrenKey) ?? [];
|
|
39
|
+
const exist = hasOwnProperty(nodes.value, key);
|
|
40
|
+
const oldNode = exist ? nodes.value[key] : {
|
|
41
|
+
selected: false,
|
|
42
|
+
indeterminate: false,
|
|
43
|
+
active: false,
|
|
44
|
+
opened: false,
|
|
45
|
+
vnode: null
|
|
46
|
+
};
|
|
47
|
+
const node = {
|
|
48
|
+
vnode: oldNode.vnode,
|
|
49
|
+
item,
|
|
50
|
+
parentKey,
|
|
51
|
+
childKeys: children.map(child => getObjectValueByPath(child, props.itemKey))
|
|
52
|
+
};
|
|
53
|
+
updateNodes(children, key);
|
|
54
|
+
nodes.value[key] = node;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
updateNodes(props.items);
|
|
58
|
+
watch(() => props.items, neo => {
|
|
59
|
+
updateNodes(neo);
|
|
60
|
+
}, {
|
|
61
|
+
deep: true
|
|
62
|
+
});
|
|
63
|
+
function register(key, vnode) {
|
|
64
|
+
if (nodes.value[key]) {
|
|
65
|
+
nodes.value[key].vnode = vnode;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
provide('tree-view', {
|
|
69
|
+
register
|
|
70
|
+
});
|
|
71
|
+
const renderLeaves = computed(() => {
|
|
72
|
+
return props.items;
|
|
73
|
+
});
|
|
74
|
+
useRender(() => {
|
|
75
|
+
return _createVNode(_Fragment, null, [_createVNode("div", {
|
|
76
|
+
"class": classes.value,
|
|
77
|
+
"role": "tree"
|
|
78
|
+
}, [renderLeaves.value.length > 0 ? renderLeaves.value.map(leaf => {
|
|
79
|
+
return _createVNode(YTreeViewNode, {
|
|
80
|
+
"item": leaf,
|
|
81
|
+
"level": 0
|
|
82
|
+
}, slots);
|
|
83
|
+
}) : _createVNode("div", {
|
|
84
|
+
"class": "y-tree-view__no-data"
|
|
85
|
+
}, [slots['no-data'] ? slots['no-data']() : _createVNode("span", null, [_createTextVNode("No Data")])])])]);
|
|
86
|
+
});
|
|
87
|
+
return {
|
|
88
|
+
nodes
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=YTreeView.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YTreeView.mjs","names":["computed","defineComponent","provide","ref","watch","useRender","getObjectValueByPath","hasOwnProperty","YTreeViewNode","YTreeView","name","props","items","type","Array","default","itemKey","String","childrenKey","setup","_ref","slots","classes","nodes","expanded","updateNodes","parentKey","arguments","length","undefined","item","key","children","exist","value","oldNode","selected","indeterminate","active","opened","vnode","node","childKeys","map","child","neo","deep","register","renderLeaves","_createVNode","_Fragment","leaf","_createTextVNode"],"sources":["../../../src/components/tree-view/YTreeView.tsx"],"sourcesContent":["import {\r\n PropType,\r\n VNode,\r\n computed,\r\n defineComponent,\r\n provide,\r\n ref,\r\n watch,\r\n} from 'vue';\r\n\r\nimport { useRender } from '../../composables/component';\r\nimport { getObjectValueByPath, hasOwnProperty } from '../../util/common';\r\nimport { YTreeViewNode } from './YTreeViewNode';\r\n\r\nimport './YTreeView.scss';\r\n\r\ntype NodeKey = string | number;\r\n\r\nexport const YTreeView = defineComponent({\r\n name: 'YTreeView',\r\n props: {\r\n items: {\r\n type: Array as PropType<any[]>,\r\n default: () => [],\r\n },\r\n itemKey: {\r\n type: String as PropType<string>,\r\n default: 'id',\r\n },\r\n childrenKey: {\r\n type: String as PropType<string>,\r\n default: 'children',\r\n },\r\n },\r\n setup(props, { slots }) {\r\n const classes = computed(() => {\r\n return {\r\n 'y-tree-view': true,\r\n };\r\n });\r\n\r\n const nodes = ref<Record<NodeKey, any>>({});\r\n\r\n const expanded = ref<string[]>([]);\r\n\r\n function updateNodes(items: any[], parentKey: NodeKey | null = null) {\r\n for (const item of items) {\r\n const key = getObjectValueByPath(item, props.itemKey);\r\n const children = getObjectValueByPath(item, props.childrenKey) ?? [];\r\n const exist = hasOwnProperty(nodes.value, key);\r\n const oldNode = exist\r\n ? nodes.value[key]\r\n : {\r\n selected: false,\r\n indeterminate: false,\r\n active: false,\r\n opened: false,\r\n vnode: null,\r\n };\r\n const node = {\r\n vnode: oldNode.vnode,\r\n item,\r\n parentKey,\r\n childKeys: children.map((child: any) =>\r\n getObjectValueByPath(child, props.itemKey),\r\n ),\r\n };\r\n\r\n updateNodes(children, key);\r\n\r\n nodes.value[key] = node;\r\n }\r\n }\r\n\r\n updateNodes(props.items);\r\n watch(\r\n () => props.items,\r\n (neo: any[]) => {\r\n updateNodes(neo);\r\n },\r\n { deep: true },\r\n );\r\n\r\n function register(key: string | number, vnode: VNode) {\r\n if (nodes.value[key]) {\r\n nodes.value[key].vnode = vnode;\r\n }\r\n }\r\n\r\n provide('tree-view', { register });\r\n\r\n const renderLeaves = computed(() => {\r\n return props.items;\r\n });\r\n\r\n useRender(() => {\r\n return (\r\n <>\r\n <div class={classes.value} role=\"tree\">\r\n {renderLeaves.value.length > 0 ? (\r\n renderLeaves.value.map((leaf) => {\r\n return (\r\n <YTreeViewNode item={leaf} level={0} v-slots={slots}>\r\n </YTreeViewNode>\r\n );\r\n })\r\n ) : (\r\n <div class=\"y-tree-view__no-data\">\r\n {slots['no-data'] ? slots['no-data']() : <span>No Data</span>}\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n );\r\n });\r\n\r\n return {\r\n nodes,\r\n };\r\n },\r\n});\r\n\r\nexport type YTreeView = InstanceType<typeof YTreeView>;\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
.y-tree-view {
|
|
2
|
+
}
|
|
3
|
+
|
|
4
|
+
.y-tree-view-node {
|
|
5
|
+
&__container {
|
|
6
|
+
display: flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
padding: 0 8px;
|
|
9
|
+
min-height: 2rem;
|
|
10
|
+
border-radius: 8px;
|
|
11
|
+
transition: all 180ms ease-in, border-radius 300ms 100ms ease-in-out;
|
|
12
|
+
|
|
13
|
+
&:hover {
|
|
14
|
+
background: rgba(124, 124, 124, 0.14);
|
|
15
|
+
border-radius: 4px;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
&__expand-icon,
|
|
20
|
+
&__no-expand-icon {
|
|
21
|
+
display: inline-flex;
|
|
22
|
+
align-items: center;
|
|
23
|
+
width: 12px;
|
|
24
|
+
margin-right: 8px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
&__indents {
|
|
28
|
+
display: flex;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
&__indent-spacer {
|
|
32
|
+
width: 1rem;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
&__content {
|
|
36
|
+
font-size: 0.875rem;
|
|
37
|
+
display: flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
&__leading {
|
|
42
|
+
margin-right: 8px;
|
|
43
|
+
display: inline-flex;
|
|
44
|
+
align-items: center;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { computed, defineComponent, h, inject } from 'vue';
|
|
2
|
+
import { useRender } from "../../composables/component.mjs";
|
|
3
|
+
import { getObjectValueByPath } from "../../util/common.mjs";
|
|
4
|
+
import { YIconExpand } from "../icons/index.mjs";
|
|
5
|
+
export const YTreeViewNode = defineComponent({
|
|
6
|
+
name: 'YTreeNode',
|
|
7
|
+
props: {
|
|
8
|
+
item: {
|
|
9
|
+
type: Object
|
|
10
|
+
},
|
|
11
|
+
itemKey: {
|
|
12
|
+
type: String,
|
|
13
|
+
default: 'id'
|
|
14
|
+
},
|
|
15
|
+
textKey: {
|
|
16
|
+
type: String,
|
|
17
|
+
default: 'text'
|
|
18
|
+
},
|
|
19
|
+
childrenKey: {
|
|
20
|
+
type: String,
|
|
21
|
+
default: 'children'
|
|
22
|
+
},
|
|
23
|
+
level: {
|
|
24
|
+
type: Number,
|
|
25
|
+
default: 0
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
setup(props, _ref) {
|
|
29
|
+
let {
|
|
30
|
+
slots
|
|
31
|
+
} = _ref;
|
|
32
|
+
const treeView = inject('tree-view');
|
|
33
|
+
const children = computed(() => {
|
|
34
|
+
return props.item?.[props.childrenKey] ?? [];
|
|
35
|
+
});
|
|
36
|
+
const imLeaf = computed(() => children.value.length < 1);
|
|
37
|
+
const classes = computed(() => {
|
|
38
|
+
return {
|
|
39
|
+
'y-tree-view-node': true,
|
|
40
|
+
'y-tree-view-node--leaf': imLeaf.value
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
const styles = computed(() => {
|
|
44
|
+
return {
|
|
45
|
+
'--tree-view-node--level': props.level
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
const contentText = computed(() => {
|
|
49
|
+
return getObjectValueByPath(props.item, props.textKey) ?? '';
|
|
50
|
+
});
|
|
51
|
+
const slotProps = computed(() => {
|
|
52
|
+
return {
|
|
53
|
+
level: props.level,
|
|
54
|
+
imLeaf: imLeaf.value
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
useRender(() => {
|
|
58
|
+
const leaves = children.value.map(item => {
|
|
59
|
+
return h(YTreeViewNode, {
|
|
60
|
+
...props,
|
|
61
|
+
level: (props.level ?? 0) + 1,
|
|
62
|
+
item
|
|
63
|
+
}, slots);
|
|
64
|
+
});
|
|
65
|
+
const indentSpacer = [];
|
|
66
|
+
for (let i = 0; i < props.level; i += 1) {
|
|
67
|
+
indentSpacer.push(h('div', {
|
|
68
|
+
class: 'y-tree-view-node__indent-spacer'
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
return h('div', {
|
|
72
|
+
class: classes.value,
|
|
73
|
+
style: styles.value,
|
|
74
|
+
'.role': 'treeitem',
|
|
75
|
+
'data-level': props.level
|
|
76
|
+
}, [h('div', {
|
|
77
|
+
class: 'y-tree-view-node__container'
|
|
78
|
+
}, [h('div', {
|
|
79
|
+
class: 'y-tree-view-node__indents'
|
|
80
|
+
}, indentSpacer), /* EXPAND */
|
|
81
|
+
!imLeaf.value ? h('i', {
|
|
82
|
+
class: 'y-tree-view-node__expand-icon'
|
|
83
|
+
}, [slots['expand-icon'] ? slots['expand-icon']() : h(YIconExpand, {
|
|
84
|
+
style: {
|
|
85
|
+
width: '12px',
|
|
86
|
+
height: '12px'
|
|
87
|
+
}
|
|
88
|
+
})]) : h('i', {
|
|
89
|
+
class: 'y-tree-view-node__no-expand-icon'
|
|
90
|
+
}), /* CONTENT */
|
|
91
|
+
h('div', {
|
|
92
|
+
class: 'y-tree-view-node__content'
|
|
93
|
+
}, [slots.leading && h('div', {
|
|
94
|
+
class: 'y-tree-view-node__leading'
|
|
95
|
+
}, slots.leading(slotProps.value)), h('div', {
|
|
96
|
+
class: 'y-tree-view-node__text'
|
|
97
|
+
}, slots.default ? slots.default?.({
|
|
98
|
+
text: contentText.value,
|
|
99
|
+
item: props.item
|
|
100
|
+
}) : contentText.value), slots.trailing && h('div', {
|
|
101
|
+
class: 'y-tree-view-node__trailing'
|
|
102
|
+
}, slots.trailing())])]), /* CHILDREN */
|
|
103
|
+
children.value.length > 0 ? h('div', {
|
|
104
|
+
class: {
|
|
105
|
+
'y-tree-view-node__leaves': true
|
|
106
|
+
},
|
|
107
|
+
role: 'tree'
|
|
108
|
+
}, leaves) : undefined]);
|
|
109
|
+
});
|
|
110
|
+
const myKey = computed(() => {
|
|
111
|
+
return getObjectValueByPath(props.item, props.itemKey);
|
|
112
|
+
});
|
|
113
|
+
return {
|
|
114
|
+
treeView,
|
|
115
|
+
myKey
|
|
116
|
+
};
|
|
117
|
+
},
|
|
118
|
+
created() {
|
|
119
|
+
this.treeView?.register?.(this.myKey, this);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
//# sourceMappingURL=YTreeViewNode.mjs.map
|