@veltra/desktop 1.8.2 → 1.8.4
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/components/action/action-group.js.map +1 -1
- package/dist/components/action/action-group.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/action/action.js.map +1 -1
- package/dist/components/auto-complete/auto-complete.js.map +1 -1
- package/dist/components/badge/badge.js.map +1 -1
- package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
- package/dist/components/batch-edit/batch-edit-list.js.map +1 -1
- package/dist/components/batch-edit/batch-edit.js.map +1 -1
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/components/button/button-group.js.map +1 -1
- package/dist/components/button/button.js.map +1 -1
- package/dist/components/calendar/calendar.js.map +1 -1
- package/dist/components/card/card-action.js.map +1 -1
- package/dist/components/card/card-content.js.map +1 -1
- package/dist/components/card/card-cover.js.map +1 -1
- package/dist/components/card/card-header.js.map +1 -1
- package/dist/components/card/card.js.map +1 -1
- package/dist/components/cascade/cascade-panel-item.js.map +1 -1
- package/dist/components/cascade/cascade.js +1 -0
- package/dist/components/cascade/cascade.js.map +1 -1
- package/dist/components/cascade/use-select.js +6 -2
- package/dist/components/cascade/use-select.js.map +1 -1
- package/dist/components/check-tag/check-tag.js.map +1 -1
- package/dist/components/checkbox/checkbox-button.js.map +1 -1
- package/dist/components/checkbox/checkbox.js.map +1 -1
- package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
- package/dist/components/code-editor/code-editor.js.map +1 -1
- package/dist/components/collapse/collapse-item.js.map +1 -1
- package/dist/components/collapse/collapse.js.map +1 -1
- package/dist/components/condition-editor/components/condition-group.js.map +1 -1
- package/dist/components/condition-editor/components/condition-row.js.map +1 -1
- package/dist/components/condition-editor/condition-editor.js.map +1 -1
- package/dist/components/contextmenu/contextmenu-item.js.map +1 -1
- package/dist/components/contextmenu/contextmenu-panel.js.map +1 -1
- package/dist/components/contextmenu/contextmenu-sub.js.map +1 -1
- package/dist/components/contextmenu/contextmenu.js.map +1 -1
- package/dist/components/date-panel/date-panel.js.map +1 -1
- package/dist/components/date-panel/headers/day.js.map +1 -1
- package/dist/components/date-panel/headers/month.js.map +1 -1
- package/dist/components/date-panel/headers/year.js.map +1 -1
- package/dist/components/date-panel/panels/day.js.map +1 -1
- package/dist/components/date-panel/panels/month.js.map +1 -1
- package/dist/components/date-panel/panels/year.js.map +1 -1
- package/dist/components/date-picker/date-picker.js.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/dialog/dialog.js.map +1 -1
- package/dist/components/drawer/drawer.js.map +1 -1
- package/dist/components/dropdown/dropdown.js.map +1 -1
- package/dist/components/dual-nav/dual-nav-app.js.map +1 -1
- package/dist/components/dual-nav/dual-nav.js.map +1 -1
- package/dist/components/empty/empty.js.map +1 -1
- package/dist/components/expression-editor/components/path-preview.js.map +1 -1
- package/dist/components/expression-editor/components/variable-picker.js.map +1 -1
- package/dist/components/expression-editor/expression-editor.js.map +1 -1
- package/dist/components/file-picker/file-picker.js.map +1 -1
- package/dist/components/file-viewer/file-viewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/docx-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/image-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/ofd-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/pdf-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/pdf-viewport-scroll.js.map +1 -1
- package/dist/components/file-viewer/previewers/pdf-zoom-bridge.js.map +1 -1
- package/dist/components/file-viewer/previewers/sheet-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/text-previewer.js.map +1 -1
- package/dist/components/file-viewer/previewers/video-previewer.js.map +1 -1
- package/dist/components/float-button/float-button.js.map +1 -1
- package/dist/components/form/form.js.map +1 -1
- package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/form-item/form-item.js.map +1 -1
- package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/gantt-chart/gantt-chart.js.map +1 -1
- package/dist/components/grid/grid-item.js.map +1 -1
- package/dist/components/grid/grid.js.map +1 -1
- package/dist/components/grid-input/grid-input.js.map +1 -1
- package/dist/components/group-input/group-input.js.map +1 -1
- package/dist/components/group-nav/group-nav-item.js.map +1 -1
- package/dist/components/group-nav/group-nav.js.map +1 -1
- package/dist/components/icon/icon.js.map +1 -1
- package/dist/components/image-cropper/image-cropper.js.map +1 -1
- package/dist/components/input/input.js.map +1 -1
- package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/kanban/kanban-column.js.map +1 -1
- package/dist/components/kanban/kanban.js.map +1 -1
- package/dist/components/kbd/kbd.js.map +1 -1
- package/dist/components/layout/layout-resizer.js.map +1 -1
- package/dist/components/layout/layout.js.map +1 -1
- package/dist/components/list/list-item.js.map +1 -1
- package/dist/components/list/list.js.map +1 -1
- package/dist/components/loading/loading.js.map +1 -1
- package/dist/components/message/message-box.js.map +1 -1
- package/dist/components/message/message.js.map +1 -1
- package/dist/components/message-confirm/message-confirm-box.js.map +1 -1
- package/dist/components/message-confirm/message-confirm.js.map +1 -1
- package/dist/components/multi-select/multi-select-option.js.map +1 -1
- package/dist/components/multi-select/multi-select.js.map +1 -1
- package/dist/components/multi-tree-select/multi-tree-select.js.map +1 -1
- package/dist/components/nav/nav-icon.js.map +1 -1
- package/dist/components/nav/nav-item-collapsed.js.map +1 -1
- package/dist/components/nav/nav-item.js.map +1 -1
- package/dist/components/nav/nav-sub-collapsed.js.map +1 -1
- package/dist/components/nav/nav-sub.js.map +1 -1
- package/dist/components/nav/nav.js.map +1 -1
- package/dist/components/notification/notification-box.js.map +1 -1
- package/dist/components/notification/notification.js.map +1 -1
- package/dist/components/number/number.js.map +1 -1
- package/dist/components/number-input/number-input.js.map +1 -1
- package/dist/components/number-range-input/number-range-input.js.map +1 -1
- package/dist/components/paginator/paginator.js.map +1 -1
- package/dist/components/palette/palette-alpha.js.map +1 -1
- package/dist/components/palette/palette-color-switch.js.map +1 -1
- package/dist/components/palette/palette-hue.js.map +1 -1
- package/dist/components/palette/palette-sv.js.map +1 -1
- package/dist/components/palette/palette.js.map +1 -1
- package/dist/components/password-input/password-input.js.map +1 -1
- package/dist/components/pop-confirm/pop-confirm.js.map +1 -1
- package/dist/components/progress/progress.js.map +1 -1
- package/dist/components/progress-nodes/progress-nodes.js.map +1 -1
- package/dist/components/radio/radio.js.map +1 -1
- package/dist/components/radio-group/radio-group.js.map +1 -1
- package/dist/components/rich-text-editor/image-node.js +53 -14
- package/dist/components/rich-text-editor/image-node.js.map +1 -1
- package/dist/components/rich-text-editor/rich-text-editor.js +9 -3
- package/dist/components/rich-text-editor/rich-text-editor.js.map +1 -1
- package/dist/components/rich-text-editor/style2.css +31 -0
- package/dist/components/rich-text-editor/toolbar.js.map +1 -1
- package/dist/components/rich-text-editor/use-image-resize.js +118 -0
- package/dist/components/rich-text-editor/use-image-resize.js.map +1 -0
- package/dist/components/scroll/scroll-bar.js.map +1 -1
- package/dist/components/scroll/scroll.js.map +1 -1
- package/dist/components/segment/segment.js.map +1 -1
- package/dist/components/select/select.js +9 -5
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/slider/slider-thumb.js.map +1 -1
- package/dist/components/slider/slider.js.map +1 -1
- package/dist/components/steps/steps.js.map +1 -1
- package/dist/components/switch/switch.js.map +1 -1
- package/dist/components/table/table-body.js.map +1 -1
- package/dist/components/table/table-cell.js.map +1 -1
- package/dist/components/table/table-foot.js.map +1 -1
- package/dist/components/table/table-head.js.map +1 -1
- package/dist/components/table/table-row.js.map +1 -1
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/table-editor/table-editor.js.map +1 -1
- package/dist/components/tabs/tabs-horizontal.js.map +1 -1
- package/dist/components/tabs/tabs-vertical.js.map +1 -1
- package/dist/components/tabs/tabs.js.map +1 -1
- package/dist/components/tag/tag.js.map +1 -1
- package/dist/components/text/text.js.map +1 -1
- package/dist/components/textarea/textarea.js.map +1 -1
- package/dist/components/theme/theme.js.map +1 -1
- package/dist/components/tip/tip.js.map +1 -1
- package/dist/components/tree/tree-node.js.map +1 -1
- package/dist/components/tree/tree.js.map +1 -1
- package/dist/components/tree-select/tree-select.js +19 -10
- package/dist/components/tree-select/tree-select.js.map +1 -1
- package/dist/components/watermark/watermark.js.map +1 -1
- package/dist/types/cascade.d.ts +5 -0
- package/dist/types/select.d.ts +8 -2
- package/dist/types/tree-select.d.ts +8 -2
- package/package.json +18 -18
- package/src/components/batch-edit/__test__/batch-edit.test.ts +1 -1
- package/src/components/button/__test__/button.test.ts +1 -1
- package/src/components/cascade/__test__/cascade.test.ts +26 -1
- package/src/components/cascade/use-select.ts +5 -5
- package/src/components/collapse/__test__/collapse.test.ts +1 -1
- package/src/components/condition-editor/__test__/condition-editor.test.ts +1 -1
- package/src/components/contextmenu/__test__/contextmenu.test.ts +1 -1
- package/src/components/date-picker/__test__/date-picker.test.ts +1 -1
- package/src/components/date-range-picker/__test__/date-range-picker.test.ts +1 -1
- package/src/components/drawer/__test__/drawer.test.ts +1 -1
- package/src/components/expression-editor/__test__/chip.test.ts +1 -1
- package/src/components/expression-editor/__test__/editor.test.ts +1 -1
- package/src/components/expression-editor/__test__/expression-editor.test.ts +1 -1
- package/src/components/expression-editor/__test__/mention.test.ts +1 -1
- package/src/components/expression-editor/__test__/model.test.ts +1 -1
- package/src/components/file-viewer/__test__/helper.test.ts +1 -1
- package/src/components/form/__test__/form.test.ts +1 -1
- package/src/components/form/__test__/is-field-modified.test.ts +1 -1
- package/src/components/form-item/__test__/form-item.test.ts +1 -1
- package/src/components/image-cropper/__test__/draw-crop.test.ts +1 -1
- package/src/components/image-cropper/__test__/image-cropper.test.ts +1 -1
- package/src/components/image-cropper/__test__/use-transform.test.ts +1 -1
- package/src/components/kanban/__test__/kanban.test.ts +1 -1
- package/src/components/message-confirm/__test__/message-confirm.test.ts +1 -1
- package/src/components/multi-tree-select/__test__/multi-tree-select.test.ts +1 -1
- package/src/components/number-input/__test__/number-input.test.ts +1 -1
- package/src/components/number-range-input/__test__/number-range-input.test.ts +1 -1
- package/src/components/palette/__test__/color-transform.test.ts +1 -1
- package/src/components/palette/__test__/palette.test.ts +1 -1
- package/src/components/password-input/__test__/password-input.test.ts +1 -1
- package/src/components/radio-group/__test__/radio-group.test.ts +1 -1
- package/src/components/rich-text-editor/__test__/image-node.test.ts +140 -0
- package/src/components/rich-text-editor/image-node.ts +84 -15
- package/src/components/rich-text-editor/rich-text-editor.vue +15 -4
- package/src/components/rich-text-editor/style.scss +35 -0
- package/src/components/rich-text-editor/use-image-resize.ts +168 -0
- package/src/components/segment/__test__/segment.test.ts +1 -1
- package/src/components/select/__test__/select.test.ts +68 -1
- package/src/components/select/select.vue +15 -5
- package/src/components/table/__test__/col-width.test.ts +1 -1
- package/src/components/table/__test__/column-style.test.ts +1 -1
- package/src/components/table-editor/__test__/table-editor.test.ts +1 -1
- package/src/components/tree-select/__test__/tree-select.test.ts +50 -1
- package/src/components/tree-select/tree-select.vue +28 -11
- package/src/types/cascade.ts +5 -0
- package/src/types/select.ts +8 -2
- package/src/types/tree-select.ts +9 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-panel.js","names":[],"sources":["../../../src/components/date-panel/date-panel.vue"],"sourcesContent":["<template>\n <div :class=\"[cls.b, cls.m(props.size)]\">\n <template v-if=\"panelType === 'day'\">\n <DayHeader />\n <DayPanel />\n </template>\n\n <template v-else-if=\"panelType === 'year'\">\n <YearHeader />\n <YearPanel />\n </template>\n\n <template v-else-if=\"panelType === 'month'\">\n <MonthHeader />\n <MonthPanel />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { DatePanelEmits, DatePanelProps } from '../../types'\nimport DayHeader from './headers/day.vue'\nimport MonthHeader from './headers/month.vue'\nimport YearHeader from './headers/year.vue'\nimport DayPanel from './panels/day.vue'\nimport MonthPanel from './panels/month.vue'\nimport YearPanel from './panels/year.vue'\nimport { usePanel } from './use-panel'\n\ndefineOptions({ name: 'UDatePanel' })\n\nconst props = withDefaults(defineProps<DatePanelProps>(), { size: 'default', type: 'date' })\n\nconst emit = defineEmits<DatePanelEmits>()\n\nconst { cls, panelType } = usePanel({ props, emit })\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EA+BA,MAAM,QAAQ;EAId,MAAM,EAAE,KAAK,cAAc,SAAS;GAAE;GAAO,MAAA;EAAK,CAAC;;GAlCjD,
|
|
1
|
+
{"version":3,"file":"date-panel.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_Fragment","_createVNode","DayHeader","DayPanel","YearHeader","YearPanel","MonthHeader","MonthPanel","_createCommentVNode"],"sources":["../../../src/components/date-panel/date-panel.vue"],"sourcesContent":["<template>\n <div :class=\"[cls.b, cls.m(props.size)]\">\n <template v-if=\"panelType === 'day'\">\n <DayHeader />\n <DayPanel />\n </template>\n\n <template v-else-if=\"panelType === 'year'\">\n <YearHeader />\n <YearPanel />\n </template>\n\n <template v-else-if=\"panelType === 'month'\">\n <MonthHeader />\n <MonthPanel />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { DatePanelEmits, DatePanelProps } from '../../types'\nimport DayHeader from './headers/day.vue'\nimport MonthHeader from './headers/month.vue'\nimport YearHeader from './headers/year.vue'\nimport DayPanel from './panels/day.vue'\nimport MonthPanel from './panels/month.vue'\nimport YearPanel from './panels/year.vue'\nimport { usePanel } from './use-panel'\n\ndefineOptions({ name: 'UDatePanel' })\n\nconst props = withDefaults(defineProps<DatePanelProps>(), { size: 'default', type: 'date' })\n\nconst emit = defineEmits<DatePanelEmits>()\n\nconst { cls, panelType } = usePanel({ props, emit })\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EA+BA,MAAM,QAAQ;EAId,MAAM,EAAE,KAAK,cAAc,SAAS;GAAE;GAAO,MAAA;EAAK,CAAC;;GAlCjD,OAAAA,UAAA,GAAAC,mBAeM,OAAA,EAfA,OAAKC,eAAA,CAAGC,MAAA,GAAA,CAAG,CAAC,GAAGA,MAAA,GAAA,CAAG,CAAC,EAAE,MAAM,IAAI,CAAA,CAAA,EAAA,GACnB,CAAAA,MAAA,SAAA,MAAS,SAAzBH,UAAA,GAAAC,mBAGWG,UAAA,EAAA,KAAA,EAAA,GAAA,CAFTC,YAAaC,WAAA,GACbD,YAAYE,WAAA,CAAA,GAAA,EAGO,KAAAJ,MAAA,SAAA,MAAS,UAA9BH,UAAA,GAAAC,mBAGWG,UAAA,EAAA,KAAA,EAAA,GAAA,CAFTC,YAAcG,WAAA,GACdH,YAAaI,WAAA,CAAA,GAAA,EAGM,KAAAN,MAAA,SAAA,MAAS,WAA9BH,UAAA,GAAAC,mBAGWG,UAAA,EAAA,KAAA,EAAA,GAAA,CAFTC,YAAeK,WAAA,GACfL,YAAcM,WAAA,CAAA,GAAA,EAAA,KAAA,mBAAA,QAAA,IAAA,CAAA,GAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"day.js","names":[],"sources":["../../../../src/components/date-panel/headers/day.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('header')\">\n <div>\n <u-icon @click=\"toPrevYear\" title=\"上一年\">\n <DArrowLeft />\n </u-icon>\n <u-icon @click=\"toPrevMonth\" title=\"上个月\">\n <ArrowLeft />\n </u-icon>\n </div>\n\n <div>\n <span :class=\"cls.e('header-year')\" @click=\"panelType = 'year'\">\n {{ panelDate.year }}\n </span>\n <span :class=\"cls.e('header-month')\" @click=\"panelType = 'month'\">\n {{ panelDate.month }}月\n </span>\n </div>\n\n <div>\n <u-icon @click=\"toNextMonth\" title=\"下个月\">\n <ArrowRight />\n </u-icon>\n <u-icon @click=\"toNextYear\" title=\"下一年\">\n <DArrowRight />\n </u-icon>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ArrowLeft, ArrowRight, DArrowLeft, DArrowRight } from '@veltra/icons/normal'\nimport { inject } from 'vue'\n\nimport { UIcon } from '../../icon'\nimport { DatePanelDIKey } from '../di'\n\ndefineOptions({ name: 'UDatePanelDayHeader' })\n\nconst { panelDate, panelType, cls, toPrevMonth, toNextMonth, toPrevYear, toNextYear } =\n inject(DatePanelDIKey)!\n</script>\n"],"mappings":";;;;;;;;;EAwCA,MAAM,EAAE,WAAW,WAAW,KAAK,aAAa,aAAa,YAAY,eACvE,OAAO,cAAc;;GAxCrB,
|
|
1
|
+
{"version":3,"file":"day.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_createVNode","UIcon","_withCtx","_toDisplayString"],"sources":["../../../../src/components/date-panel/headers/day.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('header')\">\n <div>\n <u-icon @click=\"toPrevYear\" title=\"上一年\">\n <DArrowLeft />\n </u-icon>\n <u-icon @click=\"toPrevMonth\" title=\"上个月\">\n <ArrowLeft />\n </u-icon>\n </div>\n\n <div>\n <span :class=\"cls.e('header-year')\" @click=\"panelType = 'year'\">\n {{ panelDate.year }}\n </span>\n <span :class=\"cls.e('header-month')\" @click=\"panelType = 'month'\">\n {{ panelDate.month }}月\n </span>\n </div>\n\n <div>\n <u-icon @click=\"toNextMonth\" title=\"下个月\">\n <ArrowRight />\n </u-icon>\n <u-icon @click=\"toNextYear\" title=\"下一年\">\n <DArrowRight />\n </u-icon>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ArrowLeft, ArrowRight, DArrowLeft, DArrowRight } from '@veltra/icons/normal'\nimport { inject } from 'vue'\n\nimport { UIcon } from '../../icon'\nimport { DatePanelDIKey } from '../di'\n\ndefineOptions({ name: 'UDatePanelDayHeader' })\n\nconst { panelDate, panelType, cls, toPrevMonth, toNextMonth, toPrevYear, toNextYear } =\n inject(DatePanelDIKey)!\n</script>\n"],"mappings":";;;;;;;;;EAwCA,MAAM,EAAE,WAAW,WAAW,KAAK,aAAa,aAAa,YAAY,eACvE,OAAO,cAAc;;GAxCrB,OAAAA,UAAA,GAAAC,mBA2BM,OAAA,EA3BA,OAAKC,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,QAAA,CAAA,EAAA,GAAA;IAChBC,mBAOM,OAAA,MAAA,CANJC,YAESF,MAAAG,WAAA,GAAA;KAFA,SAAOH,MAAA,UAAA;KAAY,OAAM;;KAChC,SAAAI,cAAc,CAAdF,YAAcF,MAAA,UAAA,CAAA,CAAA,CAAA;;IAEhB,GAAA,GAAA,CAAA,SAAA,CAAA,GAAAE,YAESF,MAAAG,WAAA,GAAA;KAFA,SAAOH,MAAA,WAAA;KAAa,OAAM;;KACjC,SAAAI,cAAa,CAAbF,YAAaF,MAAA,SAAA,CAAA,CAAA,CAAA;;;IAIjBC,mBAOM,OAAA,MAAA,CANJA,mBAEO,QAAA;KAFA,OAAKF,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,aAAA,CAAA;KAAkB,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,UAAA,QAAS;IAChD,GAAAK,gBAAAL,MAAA,SAAA,CAAS,CAAC,IAAI,GAAA,CAAA,GAEnBC,mBAEO,QAAA;KAFA,OAAKF,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,cAAA,CAAA;KAAmB,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,UAAA,QAAS;IACjD,GAAAK,gBAAAL,MAAA,SAAA,CAAS,CAAC,KAAK,IAAG,MACvB,CAAA,CAAA,CAAA;IAGFC,mBAOM,OAAA,MAAA,CANJC,YAESF,MAAAG,WAAA,GAAA;KAFA,SAAOH,MAAA,WAAA;KAAa,OAAM;;KACjC,SAAAI,cAAc,CAAdF,YAAcF,MAAA,UAAA,CAAA,CAAA,CAAA;;IAEhB,GAAA,GAAA,CAAA,SAAA,CAAA,GAAAE,YAESF,MAAAG,WAAA,GAAA;KAFA,SAAOH,MAAA,UAAA;KAAY,OAAM;;KAChC,SAAAI,cAAe,CAAfF,YAAeF,MAAA,WAAA,CAAA,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"month.js","names":[],"sources":["../../../../src/components/date-panel/headers/month.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('header')\">\n <u-icon @click=\"toPrevYear\" title=\"上一年\">\n <DArrowLeft />\n </u-icon>\n\n <span :class=\"cls.e('header-year')\" @click=\"panelType = 'year'\">\n {{ panelDate.year }}\n </span>\n\n <u-icon @click=\"toNextYear\" title=\"下一年\">\n <DArrowRight />\n </u-icon>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { DArrowLeft, DArrowRight } from '@veltra/icons'\nimport { inject } from 'vue'\n\nimport { UIcon } from '../../icon'\nimport { DatePanelDIKey } from '../di'\n\ndefineOptions({ name: 'UDatePanelMonthHeader' })\n\nconst { panelDate, panelType, toPrevYear, toNextYear, cls } = inject(DatePanelDIKey)!\n</script>\n"],"mappings":";;;;;;;;;EAyBA,MAAM,EAAE,WAAW,WAAW,YAAY,YAAY,QAAQ,OAAO,cAAc;;GAxBjF,
|
|
1
|
+
{"version":3,"file":"month.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createVNode","UIcon","_withCtx","_createElementVNode","_toDisplayString"],"sources":["../../../../src/components/date-panel/headers/month.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('header')\">\n <u-icon @click=\"toPrevYear\" title=\"上一年\">\n <DArrowLeft />\n </u-icon>\n\n <span :class=\"cls.e('header-year')\" @click=\"panelType = 'year'\">\n {{ panelDate.year }}\n </span>\n\n <u-icon @click=\"toNextYear\" title=\"下一年\">\n <DArrowRight />\n </u-icon>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { DArrowLeft, DArrowRight } from '@veltra/icons'\nimport { inject } from 'vue'\n\nimport { UIcon } from '../../icon'\nimport { DatePanelDIKey } from '../di'\n\ndefineOptions({ name: 'UDatePanelMonthHeader' })\n\nconst { panelDate, panelType, toPrevYear, toNextYear, cls } = inject(DatePanelDIKey)!\n</script>\n"],"mappings":";;;;;;;;;EAyBA,MAAM,EAAE,WAAW,WAAW,YAAY,YAAY,QAAQ,OAAO,cAAc;;GAxBjF,OAAAA,UAAA,GAAAC,mBAYM,OAAA,EAZA,OAAKC,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,QAAA,CAAA,EAAA,GAAA;IAChBC,YAESD,MAAAE,WAAA,GAAA;KAFA,SAAOF,MAAA,UAAA;KAAY,OAAM;;KAChC,SAAAG,cAAc,CAAdF,YAAcD,MAAA,UAAA,CAAA,CAAA,CAAA;;;IAGhBI,mBAEO,QAAA;KAFA,OAAKL,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,aAAA,CAAA;KAAkB,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,UAAA,QAAS;IAChD,GAAAK,gBAAAL,MAAA,SAAA,CAAS,CAAC,IAAI,GAAA,CAAA;IAGnBC,YAESD,MAAAE,WAAA,GAAA;KAFA,SAAOF,MAAA,UAAA;KAAY,OAAM;;KAChC,SAAAG,cAAe,CAAfF,YAAeD,MAAA,WAAA,CAAA,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"year.js","names":[],"sources":["../../../../src/components/date-panel/headers/year.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('header')\">\n <u-icon @click=\"toPrevTenYears\" title=\"上个十年\">\n <DArrowLeft />\n </u-icon>\n\n <span> {{ startYear }} ~ {{ endYear }} </span>\n\n <u-icon @click=\"toNextTenYears\" title=\"下个十年\">\n <DArrowRight />\n </u-icon>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { DArrowLeft, DArrowRight } from '@veltra/icons/normal'\nimport { computed } from 'vue'\nimport { inject } from 'vue'\n\nimport { UIcon } from '../../icon'\nimport { DatePanelDIKey } from '../di'\n\ndefineOptions({ name: 'UDatePanelYearHeader' })\n\nconst { panelDate, toPrevTenYears, toNextTenYears, cls } = inject(DatePanelDIKey)!\n\nconst startYear = computed(() => {\n return panelDate.value.year - (panelDate.value.year % 10) + 1\n})\n\nconst endYear = computed(() => {\n return startYear.value + 9\n})\n</script>\n"],"mappings":";;;;;;;;;EAwBA,MAAM,EAAE,WAAW,gBAAgB,gBAAgB,QAAQ,OAAO,cAAc;EAEhF,MAAM,YAAY,eAAe;GAC/B,OAAO,UAAU,MAAM,OAAQ,UAAU,MAAM,OAAO,KAAM;EAC9D,CAAC;EAED,MAAM,UAAU,eAAe;GAC7B,OAAO,UAAU,QAAQ;EAC3B,CAAC;;GA/BC,
|
|
1
|
+
{"version":3,"file":"year.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createVNode","UIcon","_withCtx","_createElementVNode","_toDisplayString"],"sources":["../../../../src/components/date-panel/headers/year.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('header')\">\n <u-icon @click=\"toPrevTenYears\" title=\"上个十年\">\n <DArrowLeft />\n </u-icon>\n\n <span> {{ startYear }} ~ {{ endYear }} </span>\n\n <u-icon @click=\"toNextTenYears\" title=\"下个十年\">\n <DArrowRight />\n </u-icon>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { DArrowLeft, DArrowRight } from '@veltra/icons/normal'\nimport { computed } from 'vue'\nimport { inject } from 'vue'\n\nimport { UIcon } from '../../icon'\nimport { DatePanelDIKey } from '../di'\n\ndefineOptions({ name: 'UDatePanelYearHeader' })\n\nconst { panelDate, toPrevTenYears, toNextTenYears, cls } = inject(DatePanelDIKey)!\n\nconst startYear = computed(() => {\n return panelDate.value.year - (panelDate.value.year % 10) + 1\n})\n\nconst endYear = computed(() => {\n return startYear.value + 9\n})\n</script>\n"],"mappings":";;;;;;;;;EAwBA,MAAM,EAAE,WAAW,gBAAgB,gBAAgB,QAAQ,OAAO,cAAc;EAEhF,MAAM,YAAY,eAAe;GAC/B,OAAO,UAAU,MAAM,OAAQ,UAAU,MAAM,OAAO,KAAM;EAC9D,CAAC;EAED,MAAM,UAAU,eAAe;GAC7B,OAAO,UAAU,QAAQ;EAC3B,CAAC;;GA/BC,OAAAA,UAAA,GAAAC,mBAUM,OAAA,EAVA,OAAKC,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,QAAA,CAAA,EAAA,GAAA;IAChBC,YAESD,MAAAE,WAAA,GAAA;KAFA,SAAOF,MAAA,cAAA;KAAgB,OAAM;;KACpC,SAAAG,cAAc,CAAdF,YAAcD,MAAA,UAAA,CAAA,CAAA,CAAA;;;IAGhBI,mBAA8C,QAAA,MAAAC,gBAApC,UAAA,KAAS,IAAG,QAAGA,gBAAG,QAAA,KAAO,GAAA,CAAA;IAEnCJ,YAESD,MAAAE,WAAA,GAAA;KAFA,SAAOF,MAAA,cAAA;KAAgB,OAAM;;KACpC,SAAAG,cAAe,CAAfF,YAAeD,MAAA,WAAA,CAAA,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"day.js","names":[],"sources":["../../../../src/components/date-panel/panels/day.vue"],"sourcesContent":["<template>\n <ul :class=\"cls.e('week')\">\n <li :class=\"cls.e('week-day')\" v-for=\"weekDay of weekDays\">\n {{ weekDay }}\n </li>\n </ul>\n\n <ul :class=\"cls.e('days')\">\n <li\n v-for=\"day of days\"\n :title=\"day.isToday ? '今天' : ''\"\n :class=\"getDayCls(day)\"\n :key=\"day.date.timestamp\"\n @click=\"!day.disabled && handleDateSelect(day.date)\"\n @mouseenter=\"!day.disabled && handleDateRangeHover(day.date)\"\n >\n <span :class=\"cls.e('cell-value')\">\n {{ day.date.day }}\n </span>\n </li>\n </ul>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { Dater } from '@cat-kit/core'\nimport { bem } from '@veltra/utils'\nimport { computed } from 'vue'\nimport { inject } from 'vue'\n\nimport type { CalendarDay } from '../../../types'\nimport { getMonthDays, weekDays } from '../../calendar/utils'\nimport { DatePanelDIKey } from '../di'\n\ndefineOptions({ name: 'UDatePanelDay', inheritAttrs: false })\n\nconst { panelDate, rangeDate, panelProps, cls, handleDateSelect, handleDateRangeHover } =\n inject(DatePanelDIKey)!\n\nconst days = computed<CalendarDay[]>(() => {\n return getMonthDays(panelDate.value.timestamp, panelProps.disabledDate)\n})\n\nfunction getRangeCls(day: CalendarDay) {\n return [\n bem.is('in-range', didInRange(day.date)),\n bem.is('range-start', isRangeStart(day.date)),\n bem.is('range-end', isRangeEnd(day.date))\n ]\n}\n\nfunction getSingleCls(day: CalendarDay) {\n return [bem.is('selected', didSelected(day.date))]\n}\nfunction getDayCls(day: CalendarDay) {\n const ret = [\n cls.e('cell'),\n bem.is(day.type),\n bem.is('today', day.isToday === true),\n bem.is('disabled', day.disabled === true)\n ]\n if (panelProps.range) {\n return [...ret, ...getRangeCls(day)]\n }\n return [...ret, ...getSingleCls(day)]\n}\n\nconst fmtStr = 'yyyyMMdd'\n\nfunction didSelected(date: Dater) {\n if (!panelProps.date) return false\n return date.format(fmtStr) === panelProps.date.format(fmtStr)\n}\n\nfunction didInRange(date: Dater) {\n if (!rangeDate.value) return false\n const [start, end] = rangeDate.value\n return date.timestamp >= start.timestamp && date.timestamp <= end.timestamp\n}\n\nfunction isRangeStart(date: Dater) {\n if (!rangeDate.value) return false\n const [start] = rangeDate.value\n return date.format(fmtStr) === start.format(fmtStr)\n}\n\nfunction isRangeEnd(date: Dater) {\n if (!rangeDate.value) return false\n const [, end] = rangeDate.value\n return date.format(fmtStr) === end.format(fmtStr)\n}\n</script>\n"],"mappings":";;;;;;;;;;AAkEA,MAAM,SAAS;;;;;;EA/Bf,MAAM,EAAE,WAAW,WAAW,YAAY,KAAK,kBAAkB,yBAC/D,OAAO,cAAc;EAEvB,MAAM,OAAO,eAA8B;GACzC,OAAO,aAAa,UAAU,MAAM,WAAW,WAAW,YAAY;EACxE,CAAC;EAED,SAAS,YAAY,KAAkB;GACrC,OAAO;IACL,IAAI,GAAG,YAAY,WAAW,IAAI,IAAI,CAAC;IACvC,IAAI,GAAG,eAAe,aAAa,IAAI,IAAI,CAAC;IAC5C,IAAI,GAAG,aAAa,WAAW,IAAI,IAAI,CAAC;GAC1C;EACF;EAEA,SAAS,aAAa,KAAkB;GACtC,OAAO,CAAC,IAAI,GAAG,YAAY,YAAY,IAAI,IAAI,CAAC,CAAC;EACnD;EACA,SAAS,UAAU,KAAkB;GACnC,MAAM,MAAM;IACV,IAAI,EAAE,MAAM;IACZ,IAAI,GAAG,IAAI,IAAI;IACf,IAAI,GAAG,SAAS,IAAI,YAAY,IAAI;IACpC,IAAI,GAAG,YAAY,IAAI,aAAa,IAAI;GAC1C;GACA,IAAI,WAAW,OACb,OAAO,CAAC,GAAG,KAAK,GAAG,YAAY,GAAG,CAAC;GAErC,OAAO,CAAC,GAAG,KAAK,GAAG,aAAa,GAAG,CAAC;EACtC;EAIA,SAAS,YAAY,MAAa;GAChC,IAAI,CAAC,WAAW,MAAM,OAAO;GAC7B,OAAO,KAAK,OAAO,MAAM,MAAM,WAAW,KAAK,OAAO,MAAM;EAC9D;EAEA,SAAS,WAAW,MAAa;GAC/B,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,CAAC,OAAO,OAAO,UAAU;GAC/B,OAAO,KAAK,aAAa,MAAM,aAAa,KAAK,aAAa,IAAI;EACpE;EAEA,SAAS,aAAa,MAAa;GACjC,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,CAAC,SAAS,UAAU;GAC1B,OAAO,KAAK,OAAO,MAAM,MAAM,MAAM,OAAO,MAAM;EACpD;EAEA,SAAS,WAAW,MAAa;GAC/B,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,GAAG,OAAO,UAAU;GAC1B,OAAO,KAAK,OAAO,MAAM,MAAM,IAAI,OAAO,MAAM;EAClD;;GAxFE,OAAA,UAAA,GAAA,mBAAA,UAAA,MAAA,
|
|
1
|
+
{"version":3,"file":"day.js","names":["_openBlock","_createElementBlock","_Fragment","_createElementVNode","_normalizeClass","_unref","_renderList","_toDisplayString"],"sources":["../../../../src/components/date-panel/panels/day.vue"],"sourcesContent":["<template>\n <ul :class=\"cls.e('week')\">\n <li :class=\"cls.e('week-day')\" v-for=\"weekDay of weekDays\">\n {{ weekDay }}\n </li>\n </ul>\n\n <ul :class=\"cls.e('days')\">\n <li\n v-for=\"day of days\"\n :title=\"day.isToday ? '今天' : ''\"\n :class=\"getDayCls(day)\"\n :key=\"day.date.timestamp\"\n @click=\"!day.disabled && handleDateSelect(day.date)\"\n @mouseenter=\"!day.disabled && handleDateRangeHover(day.date)\"\n >\n <span :class=\"cls.e('cell-value')\">\n {{ day.date.day }}\n </span>\n </li>\n </ul>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { Dater } from '@cat-kit/core'\nimport { bem } from '@veltra/utils'\nimport { computed } from 'vue'\nimport { inject } from 'vue'\n\nimport type { CalendarDay } from '../../../types'\nimport { getMonthDays, weekDays } from '../../calendar/utils'\nimport { DatePanelDIKey } from '../di'\n\ndefineOptions({ name: 'UDatePanelDay', inheritAttrs: false })\n\nconst { panelDate, rangeDate, panelProps, cls, handleDateSelect, handleDateRangeHover } =\n inject(DatePanelDIKey)!\n\nconst days = computed<CalendarDay[]>(() => {\n return getMonthDays(panelDate.value.timestamp, panelProps.disabledDate)\n})\n\nfunction getRangeCls(day: CalendarDay) {\n return [\n bem.is('in-range', didInRange(day.date)),\n bem.is('range-start', isRangeStart(day.date)),\n bem.is('range-end', isRangeEnd(day.date))\n ]\n}\n\nfunction getSingleCls(day: CalendarDay) {\n return [bem.is('selected', didSelected(day.date))]\n}\nfunction getDayCls(day: CalendarDay) {\n const ret = [\n cls.e('cell'),\n bem.is(day.type),\n bem.is('today', day.isToday === true),\n bem.is('disabled', day.disabled === true)\n ]\n if (panelProps.range) {\n return [...ret, ...getRangeCls(day)]\n }\n return [...ret, ...getSingleCls(day)]\n}\n\nconst fmtStr = 'yyyyMMdd'\n\nfunction didSelected(date: Dater) {\n if (!panelProps.date) return false\n return date.format(fmtStr) === panelProps.date.format(fmtStr)\n}\n\nfunction didInRange(date: Dater) {\n if (!rangeDate.value) return false\n const [start, end] = rangeDate.value\n return date.timestamp >= start.timestamp && date.timestamp <= end.timestamp\n}\n\nfunction isRangeStart(date: Dater) {\n if (!rangeDate.value) return false\n const [start] = rangeDate.value\n return date.format(fmtStr) === start.format(fmtStr)\n}\n\nfunction isRangeEnd(date: Dater) {\n if (!rangeDate.value) return false\n const [, end] = rangeDate.value\n return date.format(fmtStr) === end.format(fmtStr)\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"month.js","names":[],"sources":["../../../../src/components/date-panel/panels/month.vue"],"sourcesContent":["<template>\n <ul :class=\"cls.e('months')\">\n <li\n v-for=\"month of months\"\n :key=\"month.key\"\n :class=\"getMonthCls(month)\"\n @click=\"!month.disabled && handleDateSelect(month.date)\"\n @mouseenter=\"!month.disabled && handleDateRangeHover(month.date)\"\n >\n <span :class=\"cls.e('cell-value')\">{{ month.month }}月</span>\n </li>\n </ul>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { Dater } from '@cat-kit/core'\nimport { bem } from '@veltra/utils'\nimport { computed } from 'vue'\nimport { inject } from 'vue'\n\nimport type { CalendarMonth } from '../../../types'\nimport { getYearMonths } from '../../calendar/utils'\nimport { DatePanelDIKey } from '../di'\n\ndefineOptions({ name: 'UDatePanelMonth' })\n\nconst { cls, panelDate, rangeDate, panelProps, handleDateSelect, handleDateRangeHover } =\n inject(DatePanelDIKey)!\n\nconst months = computed(() => {\n return getYearMonths(panelDate.value.timestamp, panelProps.disabledDate)\n})\n\nfunction getRangeCls(month: CalendarMonth) {\n return [\n bem.is('in-range', didInRange(month.date)),\n bem.is('range-start', isRangeStart(month.date)),\n bem.is('range-end', isRangeEnd(month.date))\n ]\n}\n\nfunction getSingleCls(month: CalendarMonth) {\n return [bem.is('selected', didSelected(month.date))]\n}\n\nfunction getMonthCls(month: CalendarMonth) {\n const ret = [cls.e('cell'), bem.is('disabled', month.disabled === true)]\n if (panelProps.range) {\n return [...ret, ...getRangeCls(month)]\n }\n return [...ret, ...getSingleCls(month)]\n}\n\nconst fmtStr = 'yyyyMM'\n\nfunction didSelected(date: Dater) {\n if (!panelProps.date) return false\n return date.format(fmtStr) === panelProps.date.format(fmtStr)\n}\n\nfunction didInRange(date: Dater) {\n if (!rangeDate.value) return false\n const [start, end] = rangeDate.value\n return date.timestamp >= start.timestamp && date.timestamp <= end.timestamp\n}\n\nfunction isRangeStart(date: Dater) {\n if (!rangeDate.value) return false\n const [start] = rangeDate.value\n return date.format(fmtStr) === start.format(fmtStr)\n}\n\nfunction isRangeEnd(date: Dater) {\n if (!rangeDate.value) return false\n const [, end] = rangeDate.value\n return date.format(fmtStr) === end.format(fmtStr)\n}\n</script>\n"],"mappings":";;;;;;AAqDA,MAAM,SAAS;;;;;EA3Bf,MAAM,EAAE,KAAK,WAAW,WAAW,YAAY,kBAAkB,yBAC/D,OAAO,cAAc;EAEvB,MAAM,SAAS,eAAe;GAC5B,OAAO,cAAc,UAAU,MAAM,WAAW,WAAW,YAAY;EACzE,CAAC;EAED,SAAS,YAAY,OAAsB;GACzC,OAAO;IACL,IAAI,GAAG,YAAY,WAAW,MAAM,IAAI,CAAC;IACzC,IAAI,GAAG,eAAe,aAAa,MAAM,IAAI,CAAC;IAC9C,IAAI,GAAG,aAAa,WAAW,MAAM,IAAI,CAAC;GAC5C;EACF;EAEA,SAAS,aAAa,OAAsB;GAC1C,OAAO,CAAC,IAAI,GAAG,YAAY,YAAY,MAAM,IAAI,CAAC,CAAC;EACrD;EAEA,SAAS,YAAY,OAAsB;GACzC,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,MAAM,aAAa,IAAI,CAAC;GACvE,IAAI,WAAW,OACb,OAAO,CAAC,GAAG,KAAK,GAAG,YAAY,KAAK,CAAC;GAEvC,OAAO,CAAC,GAAG,KAAK,GAAG,aAAa,KAAK,CAAC;EACxC;EAIA,SAAS,YAAY,MAAa;GAChC,IAAI,CAAC,WAAW,MAAM,OAAO;GAC7B,OAAO,KAAK,OAAO,MAAM,MAAM,WAAW,KAAK,OAAO,MAAM;EAC9D;EAEA,SAAS,WAAW,MAAa;GAC/B,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,CAAC,OAAO,OAAO,UAAU;GAC/B,OAAO,KAAK,aAAa,MAAM,aAAa,KAAK,aAAa,IAAI;EACpE;EAEA,SAAS,aAAa,MAAa;GACjC,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,CAAC,SAAS,UAAU;GAC1B,OAAO,KAAK,OAAO,MAAM,MAAM,MAAM,OAAO,MAAM;EACpD;EAEA,SAAS,WAAW,MAAa;GAC/B,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,GAAG,OAAO,UAAU;GAC1B,OAAO,KAAK,OAAO,MAAM,MAAM,IAAI,OAAO,MAAM;EAClD;;GA3EE,
|
|
1
|
+
{"version":3,"file":"month.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_Fragment","_renderList","_createElementVNode","_toDisplayString"],"sources":["../../../../src/components/date-panel/panels/month.vue"],"sourcesContent":["<template>\n <ul :class=\"cls.e('months')\">\n <li\n v-for=\"month of months\"\n :key=\"month.key\"\n :class=\"getMonthCls(month)\"\n @click=\"!month.disabled && handleDateSelect(month.date)\"\n @mouseenter=\"!month.disabled && handleDateRangeHover(month.date)\"\n >\n <span :class=\"cls.e('cell-value')\">{{ month.month }}月</span>\n </li>\n </ul>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { Dater } from '@cat-kit/core'\nimport { bem } from '@veltra/utils'\nimport { computed } from 'vue'\nimport { inject } from 'vue'\n\nimport type { CalendarMonth } from '../../../types'\nimport { getYearMonths } from '../../calendar/utils'\nimport { DatePanelDIKey } from '../di'\n\ndefineOptions({ name: 'UDatePanelMonth' })\n\nconst { cls, panelDate, rangeDate, panelProps, handleDateSelect, handleDateRangeHover } =\n inject(DatePanelDIKey)!\n\nconst months = computed(() => {\n return getYearMonths(panelDate.value.timestamp, panelProps.disabledDate)\n})\n\nfunction getRangeCls(month: CalendarMonth) {\n return [\n bem.is('in-range', didInRange(month.date)),\n bem.is('range-start', isRangeStart(month.date)),\n bem.is('range-end', isRangeEnd(month.date))\n ]\n}\n\nfunction getSingleCls(month: CalendarMonth) {\n return [bem.is('selected', didSelected(month.date))]\n}\n\nfunction getMonthCls(month: CalendarMonth) {\n const ret = [cls.e('cell'), bem.is('disabled', month.disabled === true)]\n if (panelProps.range) {\n return [...ret, ...getRangeCls(month)]\n }\n return [...ret, ...getSingleCls(month)]\n}\n\nconst fmtStr = 'yyyyMM'\n\nfunction didSelected(date: Dater) {\n if (!panelProps.date) return false\n return date.format(fmtStr) === panelProps.date.format(fmtStr)\n}\n\nfunction didInRange(date: Dater) {\n if (!rangeDate.value) return false\n const [start, end] = rangeDate.value\n return date.timestamp >= start.timestamp && date.timestamp <= end.timestamp\n}\n\nfunction isRangeStart(date: Dater) {\n if (!rangeDate.value) return false\n const [start] = rangeDate.value\n return date.format(fmtStr) === start.format(fmtStr)\n}\n\nfunction isRangeEnd(date: Dater) {\n if (!rangeDate.value) return false\n const [, end] = rangeDate.value\n return date.format(fmtStr) === end.format(fmtStr)\n}\n</script>\n"],"mappings":";;;;;;AAqDA,MAAM,SAAS;;;;;EA3Bf,MAAM,EAAE,KAAK,WAAW,WAAW,YAAY,kBAAkB,yBAC/D,OAAO,cAAc;EAEvB,MAAM,SAAS,eAAe;GAC5B,OAAO,cAAc,UAAU,MAAM,WAAW,WAAW,YAAY;EACzE,CAAC;EAED,SAAS,YAAY,OAAsB;GACzC,OAAO;IACL,IAAI,GAAG,YAAY,WAAW,MAAM,IAAI,CAAC;IACzC,IAAI,GAAG,eAAe,aAAa,MAAM,IAAI,CAAC;IAC9C,IAAI,GAAG,aAAa,WAAW,MAAM,IAAI,CAAC;GAC5C;EACF;EAEA,SAAS,aAAa,OAAsB;GAC1C,OAAO,CAAC,IAAI,GAAG,YAAY,YAAY,MAAM,IAAI,CAAC,CAAC;EACrD;EAEA,SAAS,YAAY,OAAsB;GACzC,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,MAAM,aAAa,IAAI,CAAC;GACvE,IAAI,WAAW,OACb,OAAO,CAAC,GAAG,KAAK,GAAG,YAAY,KAAK,CAAC;GAEvC,OAAO,CAAC,GAAG,KAAK,GAAG,aAAa,KAAK,CAAC;EACxC;EAIA,SAAS,YAAY,MAAa;GAChC,IAAI,CAAC,WAAW,MAAM,OAAO;GAC7B,OAAO,KAAK,OAAO,MAAM,MAAM,WAAW,KAAK,OAAO,MAAM;EAC9D;EAEA,SAAS,WAAW,MAAa;GAC/B,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,CAAC,OAAO,OAAO,UAAU;GAC/B,OAAO,KAAK,aAAa,MAAM,aAAa,KAAK,aAAa,IAAI;EACpE;EAEA,SAAS,aAAa,MAAa;GACjC,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,CAAC,SAAS,UAAU;GAC1B,OAAO,KAAK,OAAO,MAAM,MAAM,MAAM,OAAO,MAAM;EACpD;EAEA,SAAS,WAAW,MAAa;GAC/B,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,GAAG,OAAO,UAAU;GAC1B,OAAO,KAAK,OAAO,MAAM,MAAM,IAAI,OAAO,MAAM;EAClD;;GA3EE,OAAAA,UAAA,GAAAC,mBAUK,MAAA,EAVA,OAAKC,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,QAAA,CAAA,EAAA,GACf,EAAAH,UAAA,IAAA,GAAAC,mBAQKG,UAAA,MAAAC,WAPa,OAAA,QAAT,UAAK;IADd,OAAAL,UAAA,GAAAC,mBAQK,MAAA;KANF,KAAK,MAAM;KACX,OAAKC,eAAE,YAAY,KAAK,CAAA;KACxB,UAAK,WAAA,CAAG,MAAM,YAAYC,MAAA,gBAAA,CAAgB,CAAC,MAAM,IAAI;KACrD,eAAU,WAAA,CAAG,MAAM,YAAYA,MAAA,oBAAA,CAAoB,CAAC,MAAM,IAAI;IAE/D,GAAA,CAAAG,mBAA4D,QAAA,EAArD,OAAKJ,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,YAAA,CAAA,EAAmB,GAAAI,gBAAA,MAAM,KAAK,IAAG,KAAC,CAAA,CAAA,GAAA,IAAA,UAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"year.js","names":[],"sources":["../../../../src/components/date-panel/panels/year.vue"],"sourcesContent":["<template>\n <ul :class=\"cls.e('years')\">\n <li\n v-for=\"year of years\"\n :key=\"year.year\"\n :class=\"getYearCls(year)\"\n @click=\"!year.disabled && handleDateSelect(year.date)\"\n @mouseenter=\"!year.disabled && handleDateRangeHover(year.date)\"\n >\n <span :class=\"cls.e('cell-value')\">{{ year.year }}</span>\n </li>\n </ul>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { Dater } from '@cat-kit/core'\nimport { bem } from '@veltra/utils'\nimport { computed } from 'vue'\nimport { inject } from 'vue'\n\nimport type { CalendarYear } from '../../../types'\nimport { getTenYears } from '../../calendar/utils'\nimport { DatePanelDIKey } from '../di'\n\ndefineOptions({ name: 'UDatePanelYear' })\n\nconst { panelDate, rangeDate, panelProps, cls, handleDateSelect, handleDateRangeHover } =\n inject(DatePanelDIKey)!\n\nconst years = computed(() => {\n return getTenYears(panelDate.value.timestamp, panelProps.disabledDate)\n})\n\nfunction getRangeCls(year: CalendarYear) {\n return [\n bem.is('range', didInRange(year.date)),\n bem.is('range-start', isRangeStart(year.date)),\n bem.is('range-end', isRangeEnd(year.date))\n ]\n}\n\nfunction getSingleCls(year: CalendarYear) {\n return [bem.is('selected', didSelected(year.date))]\n}\n\nfunction getYearCls(year: CalendarYear) {\n const ret = [cls.e('cell'), bem.is('disabled', year.disabled === true)]\n if (panelProps.range) {\n return [...ret, ...getRangeCls(year)]\n }\n return [...ret, ...getSingleCls(year)]\n}\n\nfunction didSelected(date: Dater) {\n if (!panelProps.date) return false\n return date.year === panelProps.date.year\n}\n\nfunction didInRange(date: Dater) {\n if (!rangeDate.value) return false\n const [start, end] = rangeDate.value\n return date.timestamp >= start.timestamp && date.timestamp <= end.timestamp\n}\n\nfunction isRangeStart(date: Dater) {\n if (!rangeDate.value) return false\n const [start] = rangeDate.value\n return date.year === start.year\n}\n\nfunction isRangeEnd(date: Dater) {\n if (!rangeDate.value) return false\n const [, end] = rangeDate.value\n return date.year === end.year\n}\n</script>\n"],"mappings":";;;;;;;;;;EA0BA,MAAM,EAAE,WAAW,WAAW,YAAY,KAAK,kBAAkB,yBAC/D,OAAO,cAAc;EAEvB,MAAM,QAAQ,eAAe;GAC3B,OAAO,YAAY,UAAU,MAAM,WAAW,WAAW,YAAY;EACvE,CAAC;EAED,SAAS,YAAY,MAAoB;GACvC,OAAO;IACL,IAAI,GAAG,SAAS,WAAW,KAAK,IAAI,CAAC;IACrC,IAAI,GAAG,eAAe,aAAa,KAAK,IAAI,CAAC;IAC7C,IAAI,GAAG,aAAa,WAAW,KAAK,IAAI,CAAC;GAC3C;EACF;EAEA,SAAS,aAAa,MAAoB;GACxC,OAAO,CAAC,IAAI,GAAG,YAAY,YAAY,KAAK,IAAI,CAAC,CAAC;EACpD;EAEA,SAAS,WAAW,MAAoB;GACtC,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,KAAK,aAAa,IAAI,CAAC;GACtE,IAAI,WAAW,OACb,OAAO,CAAC,GAAG,KAAK,GAAG,YAAY,IAAI,CAAC;GAEtC,OAAO,CAAC,GAAG,KAAK,GAAG,aAAa,IAAI,CAAC;EACvC;EAEA,SAAS,YAAY,MAAa;GAChC,IAAI,CAAC,WAAW,MAAM,OAAO;GAC7B,OAAO,KAAK,SAAS,WAAW,KAAK;EACvC;EAEA,SAAS,WAAW,MAAa;GAC/B,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,CAAC,OAAO,OAAO,UAAU;GAC/B,OAAO,KAAK,aAAa,MAAM,aAAa,KAAK,aAAa,IAAI;EACpE;EAEA,SAAS,aAAa,MAAa;GACjC,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,CAAC,SAAS,UAAU;GAC1B,OAAO,KAAK,SAAS,MAAM;EAC7B;EAEA,SAAS,WAAW,MAAa;GAC/B,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,GAAG,OAAO,UAAU;GAC1B,OAAO,KAAK,SAAS,IAAI;EAC3B;;GAzEE,
|
|
1
|
+
{"version":3,"file":"year.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_Fragment","_renderList","_createElementVNode","_toDisplayString"],"sources":["../../../../src/components/date-panel/panels/year.vue"],"sourcesContent":["<template>\n <ul :class=\"cls.e('years')\">\n <li\n v-for=\"year of years\"\n :key=\"year.year\"\n :class=\"getYearCls(year)\"\n @click=\"!year.disabled && handleDateSelect(year.date)\"\n @mouseenter=\"!year.disabled && handleDateRangeHover(year.date)\"\n >\n <span :class=\"cls.e('cell-value')\">{{ year.year }}</span>\n </li>\n </ul>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { Dater } from '@cat-kit/core'\nimport { bem } from '@veltra/utils'\nimport { computed } from 'vue'\nimport { inject } from 'vue'\n\nimport type { CalendarYear } from '../../../types'\nimport { getTenYears } from '../../calendar/utils'\nimport { DatePanelDIKey } from '../di'\n\ndefineOptions({ name: 'UDatePanelYear' })\n\nconst { panelDate, rangeDate, panelProps, cls, handleDateSelect, handleDateRangeHover } =\n inject(DatePanelDIKey)!\n\nconst years = computed(() => {\n return getTenYears(panelDate.value.timestamp, panelProps.disabledDate)\n})\n\nfunction getRangeCls(year: CalendarYear) {\n return [\n bem.is('range', didInRange(year.date)),\n bem.is('range-start', isRangeStart(year.date)),\n bem.is('range-end', isRangeEnd(year.date))\n ]\n}\n\nfunction getSingleCls(year: CalendarYear) {\n return [bem.is('selected', didSelected(year.date))]\n}\n\nfunction getYearCls(year: CalendarYear) {\n const ret = [cls.e('cell'), bem.is('disabled', year.disabled === true)]\n if (panelProps.range) {\n return [...ret, ...getRangeCls(year)]\n }\n return [...ret, ...getSingleCls(year)]\n}\n\nfunction didSelected(date: Dater) {\n if (!panelProps.date) return false\n return date.year === panelProps.date.year\n}\n\nfunction didInRange(date: Dater) {\n if (!rangeDate.value) return false\n const [start, end] = rangeDate.value\n return date.timestamp >= start.timestamp && date.timestamp <= end.timestamp\n}\n\nfunction isRangeStart(date: Dater) {\n if (!rangeDate.value) return false\n const [start] = rangeDate.value\n return date.year === start.year\n}\n\nfunction isRangeEnd(date: Dater) {\n if (!rangeDate.value) return false\n const [, end] = rangeDate.value\n return date.year === end.year\n}\n</script>\n"],"mappings":";;;;;;;;;;EA0BA,MAAM,EAAE,WAAW,WAAW,YAAY,KAAK,kBAAkB,yBAC/D,OAAO,cAAc;EAEvB,MAAM,QAAQ,eAAe;GAC3B,OAAO,YAAY,UAAU,MAAM,WAAW,WAAW,YAAY;EACvE,CAAC;EAED,SAAS,YAAY,MAAoB;GACvC,OAAO;IACL,IAAI,GAAG,SAAS,WAAW,KAAK,IAAI,CAAC;IACrC,IAAI,GAAG,eAAe,aAAa,KAAK,IAAI,CAAC;IAC7C,IAAI,GAAG,aAAa,WAAW,KAAK,IAAI,CAAC;GAC3C;EACF;EAEA,SAAS,aAAa,MAAoB;GACxC,OAAO,CAAC,IAAI,GAAG,YAAY,YAAY,KAAK,IAAI,CAAC,CAAC;EACpD;EAEA,SAAS,WAAW,MAAoB;GACtC,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,KAAK,aAAa,IAAI,CAAC;GACtE,IAAI,WAAW,OACb,OAAO,CAAC,GAAG,KAAK,GAAG,YAAY,IAAI,CAAC;GAEtC,OAAO,CAAC,GAAG,KAAK,GAAG,aAAa,IAAI,CAAC;EACvC;EAEA,SAAS,YAAY,MAAa;GAChC,IAAI,CAAC,WAAW,MAAM,OAAO;GAC7B,OAAO,KAAK,SAAS,WAAW,KAAK;EACvC;EAEA,SAAS,WAAW,MAAa;GAC/B,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,CAAC,OAAO,OAAO,UAAU;GAC/B,OAAO,KAAK,aAAa,MAAM,aAAa,KAAK,aAAa,IAAI;EACpE;EAEA,SAAS,aAAa,MAAa;GACjC,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,CAAC,SAAS,UAAU;GAC1B,OAAO,KAAK,SAAS,MAAM;EAC7B;EAEA,SAAS,WAAW,MAAa;GAC/B,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,GAAG,OAAO,UAAU;GAC1B,OAAO,KAAK,SAAS,IAAI;EAC3B;;GAzEE,OAAAA,UAAA,GAAAC,mBAUK,MAAA,EAVA,OAAKC,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA,EAAA,GACf,EAAAH,UAAA,IAAA,GAAAC,mBAQKG,UAAA,MAAAC,WAPY,MAAA,QAAR,SAAI;IADb,OAAAL,UAAA,GAAAC,mBAQK,MAAA;KANF,KAAK,KAAK;KACV,OAAKC,eAAE,WAAW,IAAI,CAAA;KACtB,UAAK,WAAA,CAAG,KAAK,YAAYC,MAAA,gBAAA,CAAgB,CAAC,KAAK,IAAI;KACnD,eAAU,WAAA,CAAG,KAAK,YAAYA,MAAA,oBAAA,CAAoB,CAAC,KAAK,IAAI;IAE7D,GAAA,CAAAG,mBAAyD,QAAA,EAAlD,OAAKJ,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,YAAA,CAAA,EAAmB,GAAAI,gBAAA,KAAK,IAAI,GAAA,CAAA,CAAA,GAAA,IAAA,UAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-picker.js","names":["$attrs"],"sources":["../../../src/components/date-picker/date-picker.vue"],"sourcesContent":["<template>\n <u-dropdown\n v-if=\"!readonly\"\n v-bind=\"$attrs\"\n :class=\"className\"\n trigger=\"click\"\n width=\"auto\"\n ref=\"dropdownRef\"\n @update:visible=\"\"\n :disabled=\"disabled\"\n >\n <template #trigger>\n <u-input\n :size=\"size\"\n native-readonly\n :clearable=\"clearable\"\n :placeholder=\"placeholder\"\n :model-value=\"displayedValue\"\n :disabled=\"disabled\"\n @clear=\"handleClear\"\n >\n <template #suffix>\n <u-icon :class=\"cls.e('icon')\"><Calendar /></u-icon>\n </template>\n </u-input>\n </template>\n\n <template #content>\n <UDatePanel :size :type :disabled-date :date=\"currentDate\" @select:date=\"handleSelectDate\" />\n </template>\n </u-dropdown>\n\n <template v-else>\n {{ displayedValue || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { date, Dater } from '@cat-kit/core'\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { Calendar } from '@veltra/icons/normal'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, shallowRef, watch } from 'vue'\n\nimport type { DatePickerEmits, DatePickerProps } from '../../types'\nimport type { DropdownExposed } from '../../types'\nimport { UDatePanel } from '../date-panel'\nimport { UDropdown } from '../dropdown'\nimport { UIcon } from '../icon'\nimport { UInput } from '../input'\n\ndefineOptions({ name: 'UDatePicker', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<DatePickerProps>(), {\n placeholder: '选择日期',\n type: 'date',\n dataType: 'string',\n disabled: undefined,\n readonly: undefined,\n clearable: true\n})\n\nconst emit = defineEmits<DatePickerEmits>()\n\nconst cls = bem('date-picker')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value)]\n})\n\nconst dropdownRef = shallowRef<DropdownExposed>()\n\nconst formatStr = computed(() => {\n const { format, type } = props\n if (format) return format\n if (type === 'date') return 'yyyy-MM-dd'\n if (type === 'month') return 'yyyy-MM'\n if (type === 'year') return 'yyyy'\n return 'yyyy-MM-dd'\n})\n\nconst currentDate = shallowRef<Dater>()\n\nconst { userAction, isUserActive } = useUserAction()\n\nfunction parseModelValue(val?: string | number | Date): Dater | undefined {\n if (val == null || val === '') return undefined\n if (val instanceof Date || typeof val === 'number') {\n const d = date(val)\n return isNaN(d.timestamp) ? undefined : d\n }\n if (typeof val === 'string') {\n if (props.dataType === 'string' && props.valueFormat) {\n const parsed = Dater.parse(val, props.valueFormat)\n if (!isNaN(parsed.timestamp)) return parsed\n }\n const fallback = date(val)\n return isNaN(fallback.timestamp) ? undefined : fallback\n }\n return undefined\n}\n\nwatch(\n () => props.modelValue,\n (modelValue) => {\n if (isUserActive()) return\n currentDate.value = parseModelValue(modelValue)\n },\n { immediate: true }\n)\n\nconst displayedValue = computed(() => {\n return currentDate.value?.format(formatStr.value) ?? ''\n})\n\nfunction formatModelValue(d: Dater) {\n if (props.dataType === 'date') {\n return d.raw\n }\n if (props.dataType === 'timestamp') {\n return d.timestamp\n }\n return d.format(props.valueFormat ?? formatStr.value)\n}\n\nconst commitSelectedDate = userAction((date: Dater) => {\n currentDate.value = date\n emit('update:modelValue', formatModelValue(date))\n emit('change', date.raw)\n})\n\nasync function handleSelectDate(date: Dater) {\n await commitSelectedDate(date)\n dropdownRef.value?.close()\n}\n\nfunction handleClear() {\n currentDate.value = undefined\n emit('update:modelValue', undefined)\n emit('change', undefined)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsDA,MAAM,QAAQ;EASd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,aAAa;EAE7B,MAAM,EAAE,cAAc,kBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,CAAC,GAAG,KAAK,GAAG;GAClF,MAAM;GACN,UAAU;GACV,UAAU;EACZ,CAAC;EAED,MAAM,YAAY,eAAe;GAC/B,OAAO,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC;EAClC,CAAC;EAED,MAAM,cAAc,WAA4B;EAEhD,MAAM,YAAY,eAAe;GAC/B,MAAM,EAAE,QAAQ,SAAS;GACzB,IAAI,QAAQ,OAAO;GACnB,IAAI,SAAS,QAAQ,OAAO;GAC5B,IAAI,SAAS,SAAS,OAAO;GAC7B,IAAI,SAAS,QAAQ,OAAO;GAC5B,OAAO;EACT,CAAC;EAED,MAAM,cAAc,WAAkB;EAEtC,MAAM,EAAE,YAAY,iBAAiB,cAAc;EAEnD,SAAS,gBAAgB,KAAiD;GACxE,IAAI,OAAO,QAAQ,QAAQ,IAAI,OAAO,KAAA;GACtC,IAAI,eAAe,QAAQ,OAAO,QAAQ,UAAU;IAClD,MAAM,IAAI,KAAK,GAAG;IAClB,OAAO,MAAM,EAAE,SAAS,IAAI,KAAA,IAAY;GAC1C;GACA,IAAI,OAAO,QAAQ,UAAU;IAC3B,IAAI,MAAM,aAAa,YAAY,MAAM,aAAa;KACpD,MAAM,SAAS,MAAM,MAAM,KAAK,MAAM,WAAW;KACjD,IAAI,CAAC,MAAM,OAAO,SAAS,GAAG,OAAO;IACvC;IACA,MAAM,WAAW,KAAK,GAAG;IACzB,OAAO,MAAM,SAAS,SAAS,IAAI,KAAA,IAAY;GACjD;EAEF;EAEA,YACQ,MAAM,aACX,eAAe;GACd,IAAI,aAAa,GAAG;GACpB,YAAY,QAAQ,gBAAgB,UAAU;EAChD,GACA,EAAE,WAAW,KAAK,CACpB;EAEA,MAAM,iBAAiB,eAAe;GACpC,OAAO,YAAY,OAAO,OAAO,UAAU,KAAK,KAAK;EACvD,CAAC;EAED,SAAS,iBAAiB,GAAU;GAClC,IAAI,MAAM,aAAa,QACrB,OAAO,EAAE;GAEX,IAAI,MAAM,aAAa,aACrB,OAAO,EAAE;GAEX,OAAO,EAAE,OAAO,MAAM,eAAe,UAAU,KAAK;EACtD;EAEA,MAAM,qBAAqB,YAAY,SAAgB;GACrD,YAAY,QAAQ;GACpB,KAAK,qBAAqB,iBAAiB,IAAI,CAAC;GAChD,KAAK,UAAU,KAAK,GAAG;EACzB,CAAC;EAED,eAAe,iBAAiB,MAAa;GAC3C,MAAM,mBAAmB,IAAI;GAC7B,YAAY,OAAO,MAAM;EAC3B;EAEA,SAAS,cAAc;GACrB,YAAY,QAAQ,KAAA;GACpB,KAAK,qBAAqB,KAAA,CAAS;GACnC,KAAK,UAAU,KAAA,CAAS;EAC1B;;GAnJW,OAAA,
|
|
1
|
+
{"version":3,"file":"date-picker.js","names":["$attrs","_unref","_openBlock","_createBlock","UDropdown","_mergeProps","_withCtx","_createVNode","UInput","UIcon","_normalizeClass","UDatePanel","_createElementBlock","_Fragment","_createTextVNode","_toDisplayString"],"sources":["../../../src/components/date-picker/date-picker.vue"],"sourcesContent":["<template>\n <u-dropdown\n v-if=\"!readonly\"\n v-bind=\"$attrs\"\n :class=\"className\"\n trigger=\"click\"\n width=\"auto\"\n ref=\"dropdownRef\"\n @update:visible=\"\"\n :disabled=\"disabled\"\n >\n <template #trigger>\n <u-input\n :size=\"size\"\n native-readonly\n :clearable=\"clearable\"\n :placeholder=\"placeholder\"\n :model-value=\"displayedValue\"\n :disabled=\"disabled\"\n @clear=\"handleClear\"\n >\n <template #suffix>\n <u-icon :class=\"cls.e('icon')\"><Calendar /></u-icon>\n </template>\n </u-input>\n </template>\n\n <template #content>\n <UDatePanel :size :type :disabled-date :date=\"currentDate\" @select:date=\"handleSelectDate\" />\n </template>\n </u-dropdown>\n\n <template v-else>\n {{ displayedValue || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { date, Dater } from '@cat-kit/core'\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { Calendar } from '@veltra/icons/normal'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, shallowRef, watch } from 'vue'\n\nimport type { DatePickerEmits, DatePickerProps } from '../../types'\nimport type { DropdownExposed } from '../../types'\nimport { UDatePanel } from '../date-panel'\nimport { UDropdown } from '../dropdown'\nimport { UIcon } from '../icon'\nimport { UInput } from '../input'\n\ndefineOptions({ name: 'UDatePicker', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<DatePickerProps>(), {\n placeholder: '选择日期',\n type: 'date',\n dataType: 'string',\n disabled: undefined,\n readonly: undefined,\n clearable: true\n})\n\nconst emit = defineEmits<DatePickerEmits>()\n\nconst cls = bem('date-picker')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value)]\n})\n\nconst dropdownRef = shallowRef<DropdownExposed>()\n\nconst formatStr = computed(() => {\n const { format, type } = props\n if (format) return format\n if (type === 'date') return 'yyyy-MM-dd'\n if (type === 'month') return 'yyyy-MM'\n if (type === 'year') return 'yyyy'\n return 'yyyy-MM-dd'\n})\n\nconst currentDate = shallowRef<Dater>()\n\nconst { userAction, isUserActive } = useUserAction()\n\nfunction parseModelValue(val?: string | number | Date): Dater | undefined {\n if (val == null || val === '') return undefined\n if (val instanceof Date || typeof val === 'number') {\n const d = date(val)\n return isNaN(d.timestamp) ? undefined : d\n }\n if (typeof val === 'string') {\n if (props.dataType === 'string' && props.valueFormat) {\n const parsed = Dater.parse(val, props.valueFormat)\n if (!isNaN(parsed.timestamp)) return parsed\n }\n const fallback = date(val)\n return isNaN(fallback.timestamp) ? undefined : fallback\n }\n return undefined\n}\n\nwatch(\n () => props.modelValue,\n (modelValue) => {\n if (isUserActive()) return\n currentDate.value = parseModelValue(modelValue)\n },\n { immediate: true }\n)\n\nconst displayedValue = computed(() => {\n return currentDate.value?.format(formatStr.value) ?? ''\n})\n\nfunction formatModelValue(d: Dater) {\n if (props.dataType === 'date') {\n return d.raw\n }\n if (props.dataType === 'timestamp') {\n return d.timestamp\n }\n return d.format(props.valueFormat ?? formatStr.value)\n}\n\nconst commitSelectedDate = userAction((date: Dater) => {\n currentDate.value = date\n emit('update:modelValue', formatModelValue(date))\n emit('change', date.raw)\n})\n\nasync function handleSelectDate(date: Dater) {\n await commitSelectedDate(date)\n dropdownRef.value?.close()\n}\n\nfunction handleClear() {\n currentDate.value = undefined\n emit('update:modelValue', undefined)\n emit('change', undefined)\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-range-picker.js","names":["$attrs"],"sources":["../../../src/components/date-range-picker/date-range-picker.vue"],"sourcesContent":["<template>\n <u-dropdown\n v-if=\"!readonly\"\n v-bind=\"$attrs\"\n :class=\"className\"\n trigger=\"click\"\n :content-class=\"[cls.e('panel'), cls.em('panel', size)]\"\n width=\"auto\"\n ref=\"dropdownRef\"\n :disabled=\"disabled\"\n @mouseenter.native=\"hovered = true\"\n @mouseleave.native=\"hovered = false\"\n @update:visible=\"dropdownVisible = $event\"\n >\n <template #trigger>\n <input\n type=\"text\"\n :class=\"cls.e('input')\"\n :value=\"displayedOfStart\"\n :placeholder=\"placeholder[0]\"\n readonly\n />\n <span :class=\"cls.e('separator')\">至</span>\n <input\n type=\"text\"\n :class=\"cls.e('input')\"\n :value=\"displayedOfEnd\"\n :placeholder=\"placeholder[1]\"\n readonly\n />\n\n <Transition name=\"zoom-in\" mode=\"out-in\">\n <UIcon\n v-if=\"clearable && (modelValue?.length || currentRangeDate) && hovered && !disabled\"\n :class=\"[cls.e('icon'), cls.e('clear')]\"\n title=\"清除\"\n @click.stop=\"handleClear\"\n >\n <Close />\n </UIcon>\n\n <u-icon :class=\"cls.e('icon')\" v-else><Calendar /></u-icon>\n </Transition>\n </template>\n\n <template #content>\n <UDatePanel\n range\n :type\n :disabled-date\n :size\n :range-date=\"currentRangeDate\"\n @select:range-date=\"handleSelect\"\n />\n </template>\n </u-dropdown>\n\n <template v-else>\n {{ displayedOfStart || FORM_EMPTY_CONTENT }} 至\n {{ displayedOfEnd || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { date, Dater } from '@cat-kit/core'\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { Calendar, Close } from '@veltra/icons/normal'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, shallowRef, watch } from 'vue'\n\nimport type {\n DateRangePickerEmits,\n DateRangePickerProps,\n DateRangeValue,\n DropdownExposed\n} from '../../types'\nimport { UDatePanel } from '../date-panel'\nimport { UDropdown } from '../dropdown'\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'UDateRangePicker', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<DateRangePickerProps>(), {\n placeholder: () => ['起始日期', '结束日期'],\n type: 'date',\n dataType: 'string',\n disabled: undefined,\n readonly: undefined,\n clearable: true\n})\n\nconst emit = defineEmits<DateRangePickerEmits>()\n\nconst cls = bem('date-range-picker')\n\nconst dropdownVisible = shallowRef(false)\n\nconst className = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is('disabled', disabled.value),\n bem.is('focus', dropdownVisible.value)\n ]\n})\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst dropdownRef = shallowRef<DropdownExposed>()\n\nconst { userAction, isUserActive } = useUserAction()\n\nconst currentRangeDate = shallowRef<[Dater, Dater]>()\n\nconst formatStr = computed(() => {\n const { format, type } = props\n if (format) return format\n if (type === 'date') return 'yyyy-MM-dd'\n if (type === 'month') return 'yyyy-MM'\n if (type === 'year') return 'yyyy'\n return 'yyyy-MM-dd'\n})\n\nconst displayedOfStart = computed(() => {\n return currentRangeDate.value?.[0]?.format(formatStr.value) ?? ''\n})\n\nconst displayedOfEnd = computed(() => {\n return currentRangeDate.value?.[1]?.format(formatStr.value) ?? ''\n})\n\nfunction parseDateValue(val?: string | number | Date): Dater | undefined {\n if (val == null || val === '') return undefined\n if (val instanceof Date || typeof val === 'number') {\n const d = date(val)\n return isNaN(d.timestamp) ? undefined : d\n }\n if (typeof val === 'string') {\n if (props.dataType === 'string' && props.valueFormat) {\n const parsed = Dater.parse(val, props.valueFormat)\n if (!isNaN(parsed.timestamp)) return parsed\n }\n const fallback = date(val)\n return isNaN(fallback.timestamp) ? undefined : fallback\n }\n return undefined\n}\n\nwatch(\n () => props.modelValue,\n (val) => {\n if (isUserActive()) return\n if (val && val.length === 2) {\n const d1 = parseDateValue(val[0])\n const d2 = parseDateValue(val[1])\n if (d1 && d2) {\n currentRangeDate.value = [d1, d2]\n return\n }\n }\n currentRangeDate.value = undefined\n },\n { immediate: true }\n)\n\nfunction formatDateValue(d: Dater) {\n if (props.dataType === 'date') {\n return d.raw\n }\n if (props.dataType === 'timestamp') {\n return d.timestamp\n }\n return d.format(props.valueFormat ?? formatStr.value)\n}\n\nfunction formatModelValue(range: [Dater, Dater]): DateRangeValue {\n return [formatDateValue(range[0]), formatDateValue(range[1])] as DateRangeValue\n}\n\nconst commitSelectedRange = userAction((rangeDate: [Dater, Dater]) => {\n currentRangeDate.value = rangeDate\n emit('update:modelValue', formatModelValue(rangeDate))\n emit('change', [rangeDate[0].raw, rangeDate[1].raw])\n})\n\nasync function handleSelect(rangeDate: [Dater, Dater] | undefined) {\n if (!rangeDate) return\n await commitSelectedRange(rangeDate)\n dropdownRef.value?.close()\n}\n\nconst hovered = shallowRef(false)\n\nfunction handleClear() {\n currentRangeDate.value = undefined\n emit('update:modelValue', undefined)\n emit('change', undefined)\n}\n</script>\n"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"date-range-picker.js","names":["$attrs","_unref","_openBlock","_createBlock","UDropdown","_mergeProps","_withCtx","_createElementVNode","_normalizeClass","_createVNode","_Transition","UIcon","_withModifiers","UDatePanel","_createElementBlock","_Fragment","_createTextVNode","_toDisplayString"],"sources":["../../../src/components/date-range-picker/date-range-picker.vue"],"sourcesContent":["<template>\n <u-dropdown\n v-if=\"!readonly\"\n v-bind=\"$attrs\"\n :class=\"className\"\n trigger=\"click\"\n :content-class=\"[cls.e('panel'), cls.em('panel', size)]\"\n width=\"auto\"\n ref=\"dropdownRef\"\n :disabled=\"disabled\"\n @mouseenter.native=\"hovered = true\"\n @mouseleave.native=\"hovered = false\"\n @update:visible=\"dropdownVisible = $event\"\n >\n <template #trigger>\n <input\n type=\"text\"\n :class=\"cls.e('input')\"\n :value=\"displayedOfStart\"\n :placeholder=\"placeholder[0]\"\n readonly\n />\n <span :class=\"cls.e('separator')\">至</span>\n <input\n type=\"text\"\n :class=\"cls.e('input')\"\n :value=\"displayedOfEnd\"\n :placeholder=\"placeholder[1]\"\n readonly\n />\n\n <Transition name=\"zoom-in\" mode=\"out-in\">\n <UIcon\n v-if=\"clearable && (modelValue?.length || currentRangeDate) && hovered && !disabled\"\n :class=\"[cls.e('icon'), cls.e('clear')]\"\n title=\"清除\"\n @click.stop=\"handleClear\"\n >\n <Close />\n </UIcon>\n\n <u-icon :class=\"cls.e('icon')\" v-else><Calendar /></u-icon>\n </Transition>\n </template>\n\n <template #content>\n <UDatePanel\n range\n :type\n :disabled-date\n :size\n :range-date=\"currentRangeDate\"\n @select:range-date=\"handleSelect\"\n />\n </template>\n </u-dropdown>\n\n <template v-else>\n {{ displayedOfStart || FORM_EMPTY_CONTENT }} 至\n {{ displayedOfEnd || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { date, Dater } from '@cat-kit/core'\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { Calendar, Close } from '@veltra/icons/normal'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, shallowRef, watch } from 'vue'\n\nimport type {\n DateRangePickerEmits,\n DateRangePickerProps,\n DateRangeValue,\n DropdownExposed\n} from '../../types'\nimport { UDatePanel } from '../date-panel'\nimport { UDropdown } from '../dropdown'\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'UDateRangePicker', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<DateRangePickerProps>(), {\n placeholder: () => ['起始日期', '结束日期'],\n type: 'date',\n dataType: 'string',\n disabled: undefined,\n readonly: undefined,\n clearable: true\n})\n\nconst emit = defineEmits<DateRangePickerEmits>()\n\nconst cls = bem('date-range-picker')\n\nconst dropdownVisible = shallowRef(false)\n\nconst className = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is('disabled', disabled.value),\n bem.is('focus', dropdownVisible.value)\n ]\n})\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst dropdownRef = shallowRef<DropdownExposed>()\n\nconst { userAction, isUserActive } = useUserAction()\n\nconst currentRangeDate = shallowRef<[Dater, Dater]>()\n\nconst formatStr = computed(() => {\n const { format, type } = props\n if (format) return format\n if (type === 'date') return 'yyyy-MM-dd'\n if (type === 'month') return 'yyyy-MM'\n if (type === 'year') return 'yyyy'\n return 'yyyy-MM-dd'\n})\n\nconst displayedOfStart = computed(() => {\n return currentRangeDate.value?.[0]?.format(formatStr.value) ?? ''\n})\n\nconst displayedOfEnd = computed(() => {\n return currentRangeDate.value?.[1]?.format(formatStr.value) ?? ''\n})\n\nfunction parseDateValue(val?: string | number | Date): Dater | undefined {\n if (val == null || val === '') return undefined\n if (val instanceof Date || typeof val === 'number') {\n const d = date(val)\n return isNaN(d.timestamp) ? undefined : d\n }\n if (typeof val === 'string') {\n if (props.dataType === 'string' && props.valueFormat) {\n const parsed = Dater.parse(val, props.valueFormat)\n if (!isNaN(parsed.timestamp)) return parsed\n }\n const fallback = date(val)\n return isNaN(fallback.timestamp) ? undefined : fallback\n }\n return undefined\n}\n\nwatch(\n () => props.modelValue,\n (val) => {\n if (isUserActive()) return\n if (val && val.length === 2) {\n const d1 = parseDateValue(val[0])\n const d2 = parseDateValue(val[1])\n if (d1 && d2) {\n currentRangeDate.value = [d1, d2]\n return\n }\n }\n currentRangeDate.value = undefined\n },\n { immediate: true }\n)\n\nfunction formatDateValue(d: Dater) {\n if (props.dataType === 'date') {\n return d.raw\n }\n if (props.dataType === 'timestamp') {\n return d.timestamp\n }\n return d.format(props.valueFormat ?? formatStr.value)\n}\n\nfunction formatModelValue(range: [Dater, Dater]): DateRangeValue {\n return [formatDateValue(range[0]), formatDateValue(range[1])] as DateRangeValue\n}\n\nconst commitSelectedRange = userAction((rangeDate: [Dater, Dater]) => {\n currentRangeDate.value = rangeDate\n emit('update:modelValue', formatModelValue(rangeDate))\n emit('change', [rangeDate[0].raw, rangeDate[1].raw])\n})\n\nasync function handleSelect(rangeDate: [Dater, Dater] | undefined) {\n if (!rangeDate) return\n await commitSelectedRange(rangeDate)\n dropdownRef.value?.close()\n}\n\nconst hovered = shallowRef(false)\n\nfunction handleClear() {\n currentRangeDate.value = undefined\n emit('update:modelValue', undefined)\n emit('change', undefined)\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.js","names":["$attrs","$slots"],"sources":["../../../src/components/dialog/dialog.vue"],"sourcesContent":["<template>\n <Teleport to=\"body\">\n <transition name=\"fade\" @after-leave=\"emit('closed')\" @enter=\"onOverlayEnter\">\n <div\n v-if=\"overlayVisible || opened\"\n v-show=\"overlayVisible\"\n :class=\"[cls.e('overlay'), bem.is('modal', modal)]\"\n ref=\"overlayRef\"\n @mousedown=\"modal && close()\"\n @keyup.esc=\"close\"\n tabindex=\"0\"\n >\n <transition :name=\"transition\" @after-leave=\"onAfterDialogLeave\">\n <div\n v-if=\"dialogVisible\"\n v-bind=\"$attrs\"\n :class=\"className\"\n ref=\"dialogRef\"\n @mousedown.stop=\"handleIncreaseZIndex\"\n >\n <section :class=\"headerCls\" ref=\"headerRef\" @transitionend.stop @transitioncancel.stop>\n <div :class=\"cls.e('title')\" @mousedown.stop>\n <slot name=\"header\">\n {{ header || title }}\n </slot>\n </div>\n\n <div :class=\"cls.e('buttons')\" @mousedown.stop>\n <u-icon\n v-if=\"maximized\"\n :class=\"cls.e('btn-recover')\"\n @click=\"toggleMaximize(false)\"\n title=\"还原\"\n >\n <Recover />\n </u-icon>\n <u-icon\n v-else\n :class=\"cls.e('btn-maximize')\"\n @click=\"toggleMaximize(true)\"\n title=\"最大化\"\n >\n <Maximum />\n </u-icon>\n <u-icon :class=\"cls.e('btn-close')\" @click=\"close\" title=\"关闭\">\n <Close />\n </u-icon>\n </div>\n </section>\n\n <u-scroll\n tag=\"section\"\n :class=\"cls.e('body')\"\n :content-style=\"{ height: maximized ? '100%' : undefined }\"\n @transitionend.stop\n @transitioncancel.stop\n >\n <slot v-bind=\"{ maximized }\" />\n </u-scroll>\n\n <section :class=\"footerCls\" v-if=\"$slots.footer\">\n <slot name=\"footer\" v-bind=\"{ close }\" />\n </section>\n </div>\n </transition>\n </div>\n </transition>\n </Teleport>\n\n <!-- 触发 -->\n <UNodeRender @click=\"visible = !visible\" :content=\"getTriggerNode()\" ref=\"triggerRef\" />\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag, useFallbackProps } from '@veltra/compositions'\nimport { Close, Maximum, Recover } from '@veltra/icons/normal'\nimport { bem, extractNormalVNodes, setStyles, zIndex } from '@veltra/utils'\nimport { shallowRef, watch, computed, provide, nextTick } from 'vue'\n\nimport type { DialogProps, DialogEmits, DialogExposed, ComponentSize } from '../../types'\nimport { UIcon } from '../icon'\nimport { UNodeRender } from '../node-render'\nimport { UScroll } from '../scroll'\nimport { DialogDIKey } from './di'\nimport { useMaximum } from './use-maximum'\n\ndefineOptions({ name: 'UDialog', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<DialogProps>(), {\n modal: true,\n modelValue: true,\n autoScroll: true,\n transition: 'fade-scale'\n})\nconst emit = defineEmits<DialogEmits>()\n\nconst slots = defineSlots<{\n footer?: (props: { close: () => void }) => any\n trigger?: () => any\n header?: () => any\n default?: (props: {\n /** 弹框是否最大化了 */\n maximized: boolean\n }) => any\n}>()\n\nconst cls = bem('dialog')\nconst headerCls = [cls.e('header')]\nconst footerCls = [cls.e('footer')]\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst overlayRef = shallowRef<HTMLDivElement>()\n\n/** 弹框模板引用 */\nconst dialogRef = shallowRef<HTMLDivElement>()\n\n/** 弹框头部模板引用 */\nconst headerRef = shallowRef<HTMLDivElement>()\n\nconst visible = defineModel<boolean>({ default: false })\n\nconst overlayVisible = shallowRef(false)\nconst dialogVisible = shallowRef(false)\n\nwatch(visible, (v) => {\n if (v) {\n overlayVisible.value = true\n } else {\n dialogVisible.value = false\n }\n})\n\nfunction getTriggerNode() {\n const nodes = slots.trigger?.()\n if (!nodes?.length) return null\n\n const node = extractNormalVNodes(nodes)[0]\n return node\n}\n\nfunction onOverlayEnter() {\n dialogVisible.value = true\n}\n\nfunction onAfterDialogLeave() {\n overlayVisible.value = false\n}\n\nconst { toggleMaximize, maximized } = useMaximum({ dialogRef, cls })\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value)]\n})\n\n/**\n * 是否弹出过, 用于控制下一次弹出时是否采用v-show的方式\n */\nlet opened = false\n\nwatch(visible, (v) => {\n if (!v) return\n\n if (!opened) opened = true\n\n // 初始化位置偏移量\n translated.x = 0\n translated.y = 0\n\n nextTick(() => {\n setStyles(overlayRef.value!, { zIndex: zIndex() })\n })\n})\n\n/** dialog位移的位置 */\nconst translated = { x: 0, y: 0 }\n\n/**\n * 更新弹框位置\n * 使用独立 `translate` 而非整体 `transform`, 与 spring 动画的 `scale` 解耦,\n * 避免动画期间整体 transform 被关键帧覆盖、动画结束后又\"啪\"地跳回内联位置\n */\nconst updateDialogTransform = (x: number, y: number) => {\n const dom = dialogRef.value\n if (!dom) return\n setStyles(dom, { translate: `${x}px ${y}px` })\n}\n\n// 运用拖拽\nuseDrag({\n target: headerRef,\n\n onDragStart() {\n handleIncreaseZIndex()\n },\n\n onDrag({ x, y }) {\n if (maximized.value) return\n updateDialogTransform(translated.x + x, translated.y + y)\n },\n\n onDragEnd({ x, y }) {\n if (maximized.value) return\n translated.x += x\n translated.y += y\n\n // 字体模糊的bug修正\n if (translated.x % 2 !== 0) {\n translated.x += x < 0 ? 1 : -1\n }\n if (translated.y % 2 !== 0) {\n translated.y += y < 0 ? 1 : -1\n }\n updateDialogTransform(translated.x, translated.y)\n }\n})\n\nfunction handleIncreaseZIndex() {\n if (props.modal) return\n setStyles(overlayRef.value!, { zIndex: zIndex() })\n}\n\n/** 关闭 */\nconst close = () => {\n visible.value = false\n}\n\nprovide(DialogDIKey, { visible })\n\ndefineExpose<DialogExposed>({ close })\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dialog.js","names":["$attrs","$slots","_useSlots","_useModel","_openBlock","_createElementBlock","_Fragment","_createBlock","_Teleport","_createVNode","_Transition","_withCtx","_unref","_withDirectives","_normalizeClass","_withKeys","_mergeProps","_withModifiers","_createElementVNode","_renderSlot","_createTextVNode","_toDisplayString","UIcon","UScroll","_normalizeProps","_guardReactiveProps","_createCommentVNode","_vShow","UNodeRender"],"sources":["../../../src/components/dialog/dialog.vue"],"sourcesContent":["<template>\n <Teleport to=\"body\">\n <transition name=\"fade\" @after-leave=\"emit('closed')\" @enter=\"onOverlayEnter\">\n <div\n v-if=\"overlayVisible || opened\"\n v-show=\"overlayVisible\"\n :class=\"[cls.e('overlay'), bem.is('modal', modal)]\"\n ref=\"overlayRef\"\n @mousedown=\"modal && close()\"\n @keyup.esc=\"close\"\n tabindex=\"0\"\n >\n <transition :name=\"transition\" @after-leave=\"onAfterDialogLeave\">\n <div\n v-if=\"dialogVisible\"\n v-bind=\"$attrs\"\n :class=\"className\"\n ref=\"dialogRef\"\n @mousedown.stop=\"handleIncreaseZIndex\"\n >\n <section :class=\"headerCls\" ref=\"headerRef\" @transitionend.stop @transitioncancel.stop>\n <div :class=\"cls.e('title')\" @mousedown.stop>\n <slot name=\"header\">\n {{ header || title }}\n </slot>\n </div>\n\n <div :class=\"cls.e('buttons')\" @mousedown.stop>\n <u-icon\n v-if=\"maximized\"\n :class=\"cls.e('btn-recover')\"\n @click=\"toggleMaximize(false)\"\n title=\"还原\"\n >\n <Recover />\n </u-icon>\n <u-icon\n v-else\n :class=\"cls.e('btn-maximize')\"\n @click=\"toggleMaximize(true)\"\n title=\"最大化\"\n >\n <Maximum />\n </u-icon>\n <u-icon :class=\"cls.e('btn-close')\" @click=\"close\" title=\"关闭\">\n <Close />\n </u-icon>\n </div>\n </section>\n\n <u-scroll\n tag=\"section\"\n :class=\"cls.e('body')\"\n :content-style=\"{ height: maximized ? '100%' : undefined }\"\n @transitionend.stop\n @transitioncancel.stop\n >\n <slot v-bind=\"{ maximized }\" />\n </u-scroll>\n\n <section :class=\"footerCls\" v-if=\"$slots.footer\">\n <slot name=\"footer\" v-bind=\"{ close }\" />\n </section>\n </div>\n </transition>\n </div>\n </transition>\n </Teleport>\n\n <!-- 触发 -->\n <UNodeRender @click=\"visible = !visible\" :content=\"getTriggerNode()\" ref=\"triggerRef\" />\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag, useFallbackProps } from '@veltra/compositions'\nimport { Close, Maximum, Recover } from '@veltra/icons/normal'\nimport { bem, extractNormalVNodes, setStyles, zIndex } from '@veltra/utils'\nimport { shallowRef, watch, computed, provide, nextTick } from 'vue'\n\nimport type { DialogProps, DialogEmits, DialogExposed, ComponentSize } from '../../types'\nimport { UIcon } from '../icon'\nimport { UNodeRender } from '../node-render'\nimport { UScroll } from '../scroll'\nimport { DialogDIKey } from './di'\nimport { useMaximum } from './use-maximum'\n\ndefineOptions({ name: 'UDialog', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<DialogProps>(), {\n modal: true,\n modelValue: true,\n autoScroll: true,\n transition: 'fade-scale'\n})\nconst emit = defineEmits<DialogEmits>()\n\nconst slots = defineSlots<{\n footer?: (props: { close: () => void }) => any\n trigger?: () => any\n header?: () => any\n default?: (props: {\n /** 弹框是否最大化了 */\n maximized: boolean\n }) => any\n}>()\n\nconst cls = bem('dialog')\nconst headerCls = [cls.e('header')]\nconst footerCls = [cls.e('footer')]\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst overlayRef = shallowRef<HTMLDivElement>()\n\n/** 弹框模板引用 */\nconst dialogRef = shallowRef<HTMLDivElement>()\n\n/** 弹框头部模板引用 */\nconst headerRef = shallowRef<HTMLDivElement>()\n\nconst visible = defineModel<boolean>({ default: false })\n\nconst overlayVisible = shallowRef(false)\nconst dialogVisible = shallowRef(false)\n\nwatch(visible, (v) => {\n if (v) {\n overlayVisible.value = true\n } else {\n dialogVisible.value = false\n }\n})\n\nfunction getTriggerNode() {\n const nodes = slots.trigger?.()\n if (!nodes?.length) return null\n\n const node = extractNormalVNodes(nodes)[0]\n return node\n}\n\nfunction onOverlayEnter() {\n dialogVisible.value = true\n}\n\nfunction onAfterDialogLeave() {\n overlayVisible.value = false\n}\n\nconst { toggleMaximize, maximized } = useMaximum({ dialogRef, cls })\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value)]\n})\n\n/**\n * 是否弹出过, 用于控制下一次弹出时是否采用v-show的方式\n */\nlet opened = false\n\nwatch(visible, (v) => {\n if (!v) return\n\n if (!opened) opened = true\n\n // 初始化位置偏移量\n translated.x = 0\n translated.y = 0\n\n nextTick(() => {\n setStyles(overlayRef.value!, { zIndex: zIndex() })\n })\n})\n\n/** dialog位移的位置 */\nconst translated = { x: 0, y: 0 }\n\n/**\n * 更新弹框位置\n * 使用独立 `translate` 而非整体 `transform`, 与 spring 动画的 `scale` 解耦,\n * 避免动画期间整体 transform 被关键帧覆盖、动画结束后又\"啪\"地跳回内联位置\n */\nconst updateDialogTransform = (x: number, y: number) => {\n const dom = dialogRef.value\n if (!dom) return\n setStyles(dom, { translate: `${x}px ${y}px` })\n}\n\n// 运用拖拽\nuseDrag({\n target: headerRef,\n\n onDragStart() {\n handleIncreaseZIndex()\n },\n\n onDrag({ x, y }) {\n if (maximized.value) return\n updateDialogTransform(translated.x + x, translated.y + y)\n },\n\n onDragEnd({ x, y }) {\n if (maximized.value) return\n translated.x += x\n translated.y += y\n\n // 字体模糊的bug修正\n if (translated.x % 2 !== 0) {\n translated.x += x < 0 ? 1 : -1\n }\n if (translated.y % 2 !== 0) {\n translated.y += y < 0 ? 1 : -1\n }\n updateDialogTransform(translated.x, translated.y)\n }\n})\n\nfunction handleIncreaseZIndex() {\n if (props.modal) return\n setStyles(overlayRef.value!, { zIndex: zIndex() })\n}\n\n/** 关闭 */\nconst close = () => {\n visible.value = false\n}\n\nprovide(DialogDIKey, { visible })\n\ndefineExpose<DialogExposed>({ close })\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawer.js","names":["$attrs"],"sources":["../../../src/components/drawer/drawer.vue"],"sourcesContent":["<template>\n <Teleport to=\"body\">\n <transition name=\"fade\" mode=\"out-in\" @enter=\"onEnter\" @after-leave=\"emit('closed')\">\n <div v-if=\"overlayVisible\" :class=\"overlayCls.b\" :style=\"{ zIndex: zIndex() }\" @click=\"close\">\n <transition :name=\"transitionName\" appear @after-leave=\"onAfterDrawerLeave\">\n <div\n v-bind=\"$attrs\"\n v-if=\"drawerVisible\"\n :class=\"drawerClass\"\n :style=\"drawerStyle\"\n @click.stop\n >\n <div v-if=\"title\" :class=\"cls.e('header')\">\n <span :class=\"cls.e('title')\">{{ title }}</span>\n </div>\n <span :class=\"cls.e('close')\" @click=\"close\" v-if=\"showClose\">\n <u-icon><Close /></u-icon>\n </span>\n <slot />\n </div>\n </transition>\n </div>\n </transition>\n </Teleport>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Close } from '@veltra/icons/normal'\nimport { bem, zIndex } from '@veltra/utils'\nimport { computed, shallowRef } from 'vue'\n\nimport type { DrawerProps, DrawerEmits } from '../../types'\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'UDrawer', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<DrawerProps>(), { direction: 'right' })\n\nconst emit = defineEmits<DrawerEmits>()\n\nconst cls = bem('drawer')\nconst overlayCls = bem('drawer-overlay')\n\nconst overlayVisible = defineModel<boolean>({ default: false })\n\nconst drawerVisible = shallowRef(false)\n\n// 根据方向计算过渡动画名称\nconst transitionName = computed(() => {\n return `drawer-slide-${props.direction}`\n})\n\n// 计算抽屉样式类\nconst drawerClass = computed(() => {\n return [cls.b, bem.is(props.direction)]\n})\n\n// 计算抽屉样式\nconst drawerStyle = computed(() => {\n const style: Record<string, string> = {}\n\n return style\n})\n\nconst onEnter = () => {\n drawerVisible.value = true\n}\n\nconst onAfterDrawerLeave = () => {\n overlayVisible.value = false\n}\n\n// 关闭抽屉\nconst close = () => {\n drawerVisible.value = false\n emit('close')\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCA,MAAM,QAAQ;EAEd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,QAAQ;EACxB,MAAM,aAAa,IAAI,gBAAgB;EAEvC,MAAM,
|
|
1
|
+
{"version":3,"file":"drawer.js","names":["$attrs","_useModel","_openBlock","_createBlock","_Teleport","_createVNode","_Transition","_withCtx","_createElementBlock","_normalizeClass","_unref","_normalizeStyle","_mergeProps","_withModifiers","_createElementVNode","_toDisplayString","_createCommentVNode","UIcon","_renderSlot"],"sources":["../../../src/components/drawer/drawer.vue"],"sourcesContent":["<template>\n <Teleport to=\"body\">\n <transition name=\"fade\" mode=\"out-in\" @enter=\"onEnter\" @after-leave=\"emit('closed')\">\n <div v-if=\"overlayVisible\" :class=\"overlayCls.b\" :style=\"{ zIndex: zIndex() }\" @click=\"close\">\n <transition :name=\"transitionName\" appear @after-leave=\"onAfterDrawerLeave\">\n <div\n v-bind=\"$attrs\"\n v-if=\"drawerVisible\"\n :class=\"drawerClass\"\n :style=\"drawerStyle\"\n @click.stop\n >\n <div v-if=\"title\" :class=\"cls.e('header')\">\n <span :class=\"cls.e('title')\">{{ title }}</span>\n </div>\n <span :class=\"cls.e('close')\" @click=\"close\" v-if=\"showClose\">\n <u-icon><Close /></u-icon>\n </span>\n <slot />\n </div>\n </transition>\n </div>\n </transition>\n </Teleport>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Close } from '@veltra/icons/normal'\nimport { bem, zIndex } from '@veltra/utils'\nimport { computed, shallowRef } from 'vue'\n\nimport type { DrawerProps, DrawerEmits } from '../../types'\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'UDrawer', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<DrawerProps>(), { direction: 'right' })\n\nconst emit = defineEmits<DrawerEmits>()\n\nconst cls = bem('drawer')\nconst overlayCls = bem('drawer-overlay')\n\nconst overlayVisible = defineModel<boolean>({ default: false })\n\nconst drawerVisible = shallowRef(false)\n\n// 根据方向计算过渡动画名称\nconst transitionName = computed(() => {\n return `drawer-slide-${props.direction}`\n})\n\n// 计算抽屉样式类\nconst drawerClass = computed(() => {\n return [cls.b, bem.is(props.direction)]\n})\n\n// 计算抽屉样式\nconst drawerStyle = computed(() => {\n const style: Record<string, string> = {}\n\n return style\n})\n\nconst onEnter = () => {\n drawerVisible.value = true\n}\n\nconst onAfterDrawerLeave = () => {\n overlayVisible.value = false\n}\n\n// 关闭抽屉\nconst close = () => {\n drawerVisible.value = false\n emit('close')\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCA,MAAM,QAAQ;EAEd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,QAAQ;EACxB,MAAM,aAAa,IAAI,gBAAgB;EAEvC,MAAM,iBAAiBC,SAAoB,SAAA,YAAmB;EAE9D,MAAM,gBAAgB,WAAW,KAAK;EAGtC,MAAM,iBAAiB,eAAe;GACpC,OAAO,gBAAgB,MAAM;EAC/B,CAAC;EAGD,MAAM,cAAc,eAAe;GACjC,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,MAAM,SAAS,CAAC;EACxC,CAAC;EAGD,MAAM,cAAc,eAAe;GAGjC,OAAO,CAAA;EACT,CAAC;EAED,MAAM,gBAAgB;GACpB,cAAc,QAAQ;EACxB;EAEA,MAAM,2BAA2B;GAC/B,eAAe,QAAQ;EACzB;EAGA,MAAM,cAAc;GAClB,cAAc,QAAQ;GACtB,KAAK,OAAO;EACd;;GA3EE,OAAAC,UAAA,GAAAC,YAsBWC,UAAA,EAtBD,IAAG,OAAM,GAAA,CACjBC,YAoBaC,YAAA;IApBD,MAAK;IAAO,MAAK;IAAiB;IAAU,cAAW,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,QAAA;;IACvE,SAAAC,cAkBM,CAlBK,eAAA,SAAXL,UAAA,GAAAM,mBAkBM,OAAA;;KAlBsB,OAAKC,eAAEC,MAAA,UAAA,CAAU,CAAC,CAAC;KAAG,OAAKC,eAAA,EAAA,QAAYD,MAAA,MAAA,CAAM,CAAA,EAAA,CAAA;KAAO,SAAO;IACrF,GAAA,CAAAL,YAgBaC,YAAA;KAhBA,MAAM,eAAA;KAAgB,QAAA;KAAQ,cAAa;;KACtD,SAAAC,cAcM,CAZE,cAAA,SAFRL,UAAA,GAAAM,mBAcM,OAdNI,WAcM,EAAA,KAAA,EAAA,GAbIZ,KAAAA,QAAM;MAEb,OAAO,YAAA;MACP,OAAO,YAAA;MACP,SAAK,OAAA,OAAA,OAAA,KAAAa,oBAAN,CAAA,GAAW,CAAA,MAAA,CAAA;;MAEA,QAAA,SAAXX,UAAA,GAAAM,mBAEM,OAAA;;OAFa,OAAKC,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,QAAA,CAAA;MAC7B,GAAA,CAAAI,mBAAgD,QAAA,EAAzC,OAAKL,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA,EAAc,GAAAK,gBAAA,QAAA,KAAK,GAAA,CAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA;MAEW,QAAA,aAAnDb,UAAA,GAAAM,mBAEO,QAAA;;OAFA,OAAKC,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA;OAAY,SAAO;MACpC,GAAA,CAAAL,YAA0BK,MAAAO,WAAA,GAAA,MAAA;OAAlB,SAAAV,cAAS,CAATF,YAASK,MAAA,KAAA,CAAA,CAAA,CAAA;;;MAEnBQ,WAAQ,KAAA,QAAA,SAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.js","names":[],"sources":["../../../src/components/dropdown/dropdown.vue"],"sourcesContent":["<template>\n <UNodeRender :content=\"renderTriggerNode()\" ref=\"trigger\" />\n\n <Teleport :to=\"`#${popperContainerId}`\">\n <component\n v-if=\"dropdownVisible\"\n ref=\"contentRef\"\n :is=\"contentTag\"\n :class=\"dropdownContentClass\"\n :style=\"[{ zIndex: zIndex() }, contentStyle]\"\n @mouseenter=\"eventsHandlers.onMouseenter\"\n @mouseleave=\"eventsHandlers.onMouseleave\"\n @keydown=\"emit('keydown', $event)\"\n v-click-outside=\"trigger === 'click' ? handleClickOutside : undefined\"\n >\n <slot name=\"content\" />\n </component>\n </Teleport>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useModel, usePop, useTransition } from '@veltra/compositions'\nimport { vClickOutside } from '@veltra/directives'\nimport { bem, extractNormalVNodes, setStyles, zIndex } from '@veltra/utils'\nimport { shallowRef, computed, createVNode, cloneVNode, useTemplateRef, useAttrs, toRef } from 'vue'\n\nimport type { DropdownProps, DropdownExposed, DropdownEmits } from '../../types'\nimport { UNodeRender } from '../node-render'\nimport { useNest } from '../tip/use-nest'\n\ndefineOptions({ name: 'UDropdown', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<DropdownProps>(), {\n trigger: 'hover',\n direction: 'bottom',\n alignment: 'start',\n contentTag: 'div'\n})\n\nconst emit = defineEmits<DropdownEmits>()\n\nconst slots = defineSlots<{\n /** 内容 */\n content?: () => any\n /** 触发器 */\n trigger?: () => any\n}>()\n\nconst cls = bem('dropdown')\n\nconst dropdownContentClass = computed(() => {\n let fixed = [cls.e('content')]\n const className = props.contentClass\n if (!className) return fixed\n if (!Array.isArray(className)) {\n return [...fixed, className]\n }\n return [...fixed, ...className]\n})\n\nconst triggerRef = useTemplateRef('trigger')\nconst customTriggerRef = shallowRef<HTMLElement>()\nconst contentRef = shallowRef<HTMLElement>()\n\nconst triggerDom = computed(() => {\n return customTriggerRef.value || triggerRef.value?.$el\n})\n\n/**显示隐藏 */\nconst visible = useModel({ defaultValue: false, propName: 'visible', props, emit })\n\nconst dropdownVisible = useNest(visible)\n\nlet closeTimer: number | undefined\n\nconst attrs = useAttrs()\nfunction renderTriggerNode() {\n const slotsNode = slots.trigger?.()\n if (!slotsNode) return null\n const nodes = extractNormalVNodes(slotsNode)\n const props = { class: cls.b, ...attrs, ...eventsHandlers.value }\n if (nodes.length === 1) return cloneVNode(nodes[0]!, props)\n\n return createVNode('div', props, nodes)\n}\n\nfunction stopClose() {\n closeTimer !== undefined && clearTimeout(closeTimer)\n}\n\n/** 打开下拉框 */\nfunction open(config?: { trigger?: HTMLElement }) {\n stopClose()\n const { trigger } = config || {}\n if (trigger && trigger instanceof HTMLElement) {\n customTriggerRef.value = trigger\n }\n\n visible.value = true\n}\n\nfunction close() {\n if (props.trigger === 'hover') {\n // 给200毫秒重新浮动的缓冲时间\n closeTimer = setTimeout(() => {\n transition.leave()\n }, 200)\n } else {\n transition.leave()\n }\n}\n\n/** 点击外部 */\nfunction handleClickOutside(e: MouseEvent) {\n const { trigger } = props\n // 当下拉框为点击时触发时,点击触发元素时不关闭\n // 其他任何时候点击外部都关闭下拉器\n if (trigger === 'click' && triggerDom.value.contains(e.target as Node)) {\n return\n }\n close()\n}\n\nconst transitionName = shallowRef('slide-down')\n\nconst { update, popperContainerId } = usePop({\n triggerRef: triggerDom,\n contentRef,\n direction: toRef(() => props.direction),\n alignment: toRef(() => props.alignment),\n onPop(position) {\n transitionName.value = position.placement.includes('top') ? 'slide-up' : 'slide-down'\n\n transition.enter()\n },\n\n onTriggerPositionChange() {\n close()\n },\n\n onBeforeUpdate(triggerEl, contentEl) {\n setStyles(contentEl, {\n width: props.width ?? `${triggerEl.offsetWidth}px`,\n minWidth: props.minWidth\n })\n }\n})\n\nconst transition = useTransition('css', {\n name: transitionName,\n target: contentRef,\n afterLeave() {\n visible.value = false\n },\n\n leaveCanceled() {\n visible.value = false\n }\n})\n\nfunction triggerClick() {\n if (visible.value) {\n close()\n } else {\n open()\n }\n}\n\nconst eventsHandlers = computed(() => {\n const { trigger, disabled } = props\n\n const handlers: Record<string, Function> = {}\n if (disabled || trigger === 'custom') return handlers\n\n if (trigger === 'click') {\n handlers.onClick = triggerClick\n } else if (trigger === 'hover') {\n handlers.onMouseenter = open\n handlers.onMouseleave = close\n }\n\n return handlers\n})\n\ndefineExpose<DropdownExposed>({\n open,\n close,\n /**暴露出更新dropdown内容位置方法 适用与级联选择器组件 */\n updateDropdown: update\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EAgCA,MAAM,QAAQ;EAOd,MAAM,OAAO;EAEb,MAAM,
|
|
1
|
+
{"version":3,"file":"dropdown.js","names":["_useSlots","useModel","_openBlock","_createElementBlock","_Fragment","_createVNode","_unref","UNodeRender","_createBlock","_Teleport","_withDirectives","_resolveDynamicComponent","_normalizeClass","_normalizeStyle","_withCtx","_renderSlot","_createCommentVNode"],"sources":["../../../src/components/dropdown/dropdown.vue"],"sourcesContent":["<template>\n <UNodeRender :content=\"renderTriggerNode()\" ref=\"trigger\" />\n\n <Teleport :to=\"`#${popperContainerId}`\">\n <component\n v-if=\"dropdownVisible\"\n ref=\"contentRef\"\n :is=\"contentTag\"\n :class=\"dropdownContentClass\"\n :style=\"[{ zIndex: zIndex() }, contentStyle]\"\n @mouseenter=\"eventsHandlers.onMouseenter\"\n @mouseleave=\"eventsHandlers.onMouseleave\"\n @keydown=\"emit('keydown', $event)\"\n v-click-outside=\"trigger === 'click' ? handleClickOutside : undefined\"\n >\n <slot name=\"content\" />\n </component>\n </Teleport>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useModel, usePop, useTransition } from '@veltra/compositions'\nimport { vClickOutside } from '@veltra/directives'\nimport { bem, extractNormalVNodes, setStyles, zIndex } from '@veltra/utils'\nimport { shallowRef, computed, createVNode, cloneVNode, useTemplateRef, useAttrs, toRef } from 'vue'\n\nimport type { DropdownProps, DropdownExposed, DropdownEmits } from '../../types'\nimport { UNodeRender } from '../node-render'\nimport { useNest } from '../tip/use-nest'\n\ndefineOptions({ name: 'UDropdown', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<DropdownProps>(), {\n trigger: 'hover',\n direction: 'bottom',\n alignment: 'start',\n contentTag: 'div'\n})\n\nconst emit = defineEmits<DropdownEmits>()\n\nconst slots = defineSlots<{\n /** 内容 */\n content?: () => any\n /** 触发器 */\n trigger?: () => any\n}>()\n\nconst cls = bem('dropdown')\n\nconst dropdownContentClass = computed(() => {\n let fixed = [cls.e('content')]\n const className = props.contentClass\n if (!className) return fixed\n if (!Array.isArray(className)) {\n return [...fixed, className]\n }\n return [...fixed, ...className]\n})\n\nconst triggerRef = useTemplateRef('trigger')\nconst customTriggerRef = shallowRef<HTMLElement>()\nconst contentRef = shallowRef<HTMLElement>()\n\nconst triggerDom = computed(() => {\n return customTriggerRef.value || triggerRef.value?.$el\n})\n\n/**显示隐藏 */\nconst visible = useModel({ defaultValue: false, propName: 'visible', props, emit })\n\nconst dropdownVisible = useNest(visible)\n\nlet closeTimer: number | undefined\n\nconst attrs = useAttrs()\nfunction renderTriggerNode() {\n const slotsNode = slots.trigger?.()\n if (!slotsNode) return null\n const nodes = extractNormalVNodes(slotsNode)\n const props = { class: cls.b, ...attrs, ...eventsHandlers.value }\n if (nodes.length === 1) return cloneVNode(nodes[0]!, props)\n\n return createVNode('div', props, nodes)\n}\n\nfunction stopClose() {\n closeTimer !== undefined && clearTimeout(closeTimer)\n}\n\n/** 打开下拉框 */\nfunction open(config?: { trigger?: HTMLElement }) {\n stopClose()\n const { trigger } = config || {}\n if (trigger && trigger instanceof HTMLElement) {\n customTriggerRef.value = trigger\n }\n\n visible.value = true\n}\n\nfunction close() {\n if (props.trigger === 'hover') {\n // 给200毫秒重新浮动的缓冲时间\n closeTimer = setTimeout(() => {\n transition.leave()\n }, 200)\n } else {\n transition.leave()\n }\n}\n\n/** 点击外部 */\nfunction handleClickOutside(e: MouseEvent) {\n const { trigger } = props\n // 当下拉框为点击时触发时,点击触发元素时不关闭\n // 其他任何时候点击外部都关闭下拉器\n if (trigger === 'click' && triggerDom.value.contains(e.target as Node)) {\n return\n }\n close()\n}\n\nconst transitionName = shallowRef('slide-down')\n\nconst { update, popperContainerId } = usePop({\n triggerRef: triggerDom,\n contentRef,\n direction: toRef(() => props.direction),\n alignment: toRef(() => props.alignment),\n onPop(position) {\n transitionName.value = position.placement.includes('top') ? 'slide-up' : 'slide-down'\n\n transition.enter()\n },\n\n onTriggerPositionChange() {\n close()\n },\n\n onBeforeUpdate(triggerEl, contentEl) {\n setStyles(contentEl, {\n width: props.width ?? `${triggerEl.offsetWidth}px`,\n minWidth: props.minWidth\n })\n }\n})\n\nconst transition = useTransition('css', {\n name: transitionName,\n target: contentRef,\n afterLeave() {\n visible.value = false\n },\n\n leaveCanceled() {\n visible.value = false\n }\n})\n\nfunction triggerClick() {\n if (visible.value) {\n close()\n } else {\n open()\n }\n}\n\nconst eventsHandlers = computed(() => {\n const { trigger, disabled } = props\n\n const handlers: Record<string, Function> = {}\n if (disabled || trigger === 'custom') return handlers\n\n if (trigger === 'click') {\n handlers.onClick = triggerClick\n } else if (trigger === 'hover') {\n handlers.onMouseenter = open\n handlers.onMouseleave = close\n }\n\n return handlers\n})\n\ndefineExpose<DropdownExposed>({\n open,\n close,\n /**暴露出更新dropdown内容位置方法 适用与级联选择器组件 */\n updateDropdown: update\n})\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dual-nav-app.js","names":[],"sources":["../../../src/components/dual-nav/dual-nav-app.vue"],"sourcesContent":["<template>\n <u-tip v-model:visible=\"tipVisible\" direction=\"right\" hide-arrow :disabled=\"tipDisabled\">\n <button\n type=\"button\"\n v-ripple=\"!app.disabled\"\n :class=\"[\n cls.e('app'),\n bem.is('active', active),\n bem.is('selected', selected),\n bem.is('disabled', app.disabled ?? false)\n ]\"\n :disabled=\"app.disabled\"\n @click=\"handleClick\"\n @mouseleave=\"handleMouseleave\"\n >\n <UNavIcon v-if=\"app.icon\" :icon=\"app.icon\" :class=\"cls.e('app-icon')\" />\n <span v-else :class=\"cls.e('app-fallback')\">{{ app.title[0] }}</span>\n <span v-if=\"labeled\" :class=\"cls.e('app-label')\">{{ displayTitle }}</span>\n </button>\n\n <template #content>\n <div :class=\"cls.e('app-tip')\">\n <div :class=\"cls.e('app-tip-title')\">{{ app.title }}</div>\n <p v-if=\"app.description\" :class=\"cls.e('app-tip-description')\">\n {{ app.description }}\n </p>\n </div>\n </template>\n </u-tip>\n</template>\n\n<script setup lang=\"ts\">\nimport { vRipple } from '@veltra/directives'\nimport { bem } from '@veltra/utils'\nimport { computed, shallowRef } from 'vue'\n\nimport type { DualNavRootItem } from '../../types'\nimport UNavIcon from '../nav/nav-icon.vue'\nimport { UTip } from '../tip'\n\ndefineOptions({ name: 'UDualNavApp' })\n\nconst cls = bem('dual-nav')\n\n/** 左轨菜单名称最多展示字数 */\nconst LABEL_MAX_LENGTH = 4\n\nconst props = defineProps<{\n app: DualNavRootItem\n active: boolean\n selected: boolean\n /** 是否在图标下方显示菜单名称 */\n labeled?: boolean\n}>()\n\nconst emit = defineEmits<{ click: [] }>()\n\nconst tipVisible = shallowRef(false)\n/** 点击后暂时禁用 hover 弹出,移出触发区后恢复 */\nconst tipSuppressed = shallowRef(false)\n\nconst displayTitle = computed(() => props.app.title.slice(0, LABEL_MAX_LENGTH))\n\n/** labeled 且标题未截断、无描述时,tooltip 无额外信息 */\nconst tipUnnecessary = computed(() => {\n return !!props.labeled && props.app.title.length <= LABEL_MAX_LENGTH && !props.app.description\n})\n\nconst tipDisabled = computed(() => tipSuppressed.value || tipUnnecessary.value)\n\nfunction handleClick() {\n tipSuppressed.value = true\n tipVisible.value = false\n emit('click')\n}\n\nfunction handleMouseleave() {\n tipSuppressed.value = false\n}\n</script>\n"],"mappings":";;;;;;;AA6CA,MAAM,mBAAmB;;;;;;;;;;;;EAHzB,MAAM,MAAM,IAAI,UAAU;;EAK1B,MAAM,QAAQ;EAQd,MAAM,OAAO;EAEb,MAAM,aAAa,WAAW,KAAK;;EAEnC,MAAM,gBAAgB,WAAW,KAAK;EAEtC,MAAM,eAAe,eAAe,MAAM,IAAI,MAAM,MAAM,GAAG,gBAAgB,CAAC;;EAG9E,MAAM,iBAAiB,eAAe;GACpC,OAAO,CAAC,CAAC,MAAM,WAAW,MAAM,IAAI,MAAM,UAAU,oBAAoB,CAAC,MAAM,IAAI;EACrF,CAAC;EAED,MAAM,cAAc,eAAe,cAAc,SAAS,eAAe,KAAK;EAE9E,SAAS,cAAc;GACrB,cAAc,QAAQ;GACtB,WAAW,QAAQ;GACnB,KAAK,OAAO;EACd;EAEA,SAAS,mBAAmB;GAC1B,cAAc,QAAQ;EACxB;;GA7EE,
|
|
1
|
+
{"version":3,"file":"dual-nav-app.js","names":["_openBlock","_createBlock","_unref","UTip","_withCtx","_createElementVNode","_normalizeClass","_toDisplayString","_createElementBlock","_createCommentVNode","_withDirectives","UNavIcon"],"sources":["../../../src/components/dual-nav/dual-nav-app.vue"],"sourcesContent":["<template>\n <u-tip v-model:visible=\"tipVisible\" direction=\"right\" hide-arrow :disabled=\"tipDisabled\">\n <button\n type=\"button\"\n v-ripple=\"!app.disabled\"\n :class=\"[\n cls.e('app'),\n bem.is('active', active),\n bem.is('selected', selected),\n bem.is('disabled', app.disabled ?? false)\n ]\"\n :disabled=\"app.disabled\"\n @click=\"handleClick\"\n @mouseleave=\"handleMouseleave\"\n >\n <UNavIcon v-if=\"app.icon\" :icon=\"app.icon\" :class=\"cls.e('app-icon')\" />\n <span v-else :class=\"cls.e('app-fallback')\">{{ app.title[0] }}</span>\n <span v-if=\"labeled\" :class=\"cls.e('app-label')\">{{ displayTitle }}</span>\n </button>\n\n <template #content>\n <div :class=\"cls.e('app-tip')\">\n <div :class=\"cls.e('app-tip-title')\">{{ app.title }}</div>\n <p v-if=\"app.description\" :class=\"cls.e('app-tip-description')\">\n {{ app.description }}\n </p>\n </div>\n </template>\n </u-tip>\n</template>\n\n<script setup lang=\"ts\">\nimport { vRipple } from '@veltra/directives'\nimport { bem } from '@veltra/utils'\nimport { computed, shallowRef } from 'vue'\n\nimport type { DualNavRootItem } from '../../types'\nimport UNavIcon from '../nav/nav-icon.vue'\nimport { UTip } from '../tip'\n\ndefineOptions({ name: 'UDualNavApp' })\n\nconst cls = bem('dual-nav')\n\n/** 左轨菜单名称最多展示字数 */\nconst LABEL_MAX_LENGTH = 4\n\nconst props = defineProps<{\n app: DualNavRootItem\n active: boolean\n selected: boolean\n /** 是否在图标下方显示菜单名称 */\n labeled?: boolean\n}>()\n\nconst emit = defineEmits<{ click: [] }>()\n\nconst tipVisible = shallowRef(false)\n/** 点击后暂时禁用 hover 弹出,移出触发区后恢复 */\nconst tipSuppressed = shallowRef(false)\n\nconst displayTitle = computed(() => props.app.title.slice(0, LABEL_MAX_LENGTH))\n\n/** labeled 且标题未截断、无描述时,tooltip 无额外信息 */\nconst tipUnnecessary = computed(() => {\n return !!props.labeled && props.app.title.length <= LABEL_MAX_LENGTH && !props.app.description\n})\n\nconst tipDisabled = computed(() => tipSuppressed.value || tipUnnecessary.value)\n\nfunction handleClick() {\n tipSuppressed.value = true\n tipVisible.value = false\n emit('click')\n}\n\nfunction handleMouseleave() {\n tipSuppressed.value = false\n}\n</script>\n"],"mappings":";;;;;;;AA6CA,MAAM,mBAAmB;;;;;;;;;;;;EAHzB,MAAM,MAAM,IAAI,UAAU;;EAK1B,MAAM,QAAQ;EAQd,MAAM,OAAO;EAEb,MAAM,aAAa,WAAW,KAAK;;EAEnC,MAAM,gBAAgB,WAAW,KAAK;EAEtC,MAAM,eAAe,eAAe,MAAM,IAAI,MAAM,MAAM,GAAG,gBAAgB,CAAC;;EAG9E,MAAM,iBAAiB,eAAe;GACpC,OAAO,CAAC,CAAC,MAAM,WAAW,MAAM,IAAI,MAAM,UAAU,oBAAoB,CAAC,MAAM,IAAI;EACrF,CAAC;EAED,MAAM,cAAc,eAAe,cAAc,SAAS,eAAe,KAAK;EAE9E,SAAS,cAAc;GACrB,cAAc,QAAQ;GACtB,WAAW,QAAQ;GACnB,KAAK,OAAO;EACd;EAEA,SAAS,mBAAmB;GAC1B,cAAc,QAAQ;EACxB;;GA7EE,OAAAA,UAAA,GAAAC,YA2BQC,MAAAC,WAAA,GAAA;IA3BO,SAAS,WAAA;IAAA,oBAAA,OAAA,OAAA,OAAA,MAAA,WAAA,WAAU,QAAA;IAAE,WAAU;IAAQ,cAAA;IAAY,UAAU,YAAA;;IAmB/D,SAAOC,cAMV,CALNC,mBAKM,OAAA,EALA,OAAKC,eAAEJ,MAAA,GAAA,CAAG,CAAC,EAAC,SAAA,CAAA,EAAA,GAChB,CAAAG,mBAA0D,OAAA,EAApD,OAAKC,eAAEJ,MAAA,GAAA,CAAG,CAAC,EAAC,eAAA,CAAA,EAAsB,GAAAK,gBAAA,QAAA,IAAI,KAAK,GAAA,CAAA,GACxC,QAAA,IAAI,eAAbP,UAAA,GAAAQ,mBAEI,KAAA;;KAFuB,OAAKF,eAAEJ,MAAA,GAAA,CAAG,CAAC,EAAC,qBAAA,CAAA;IAClC,GAAAK,gBAAA,QAAA,IAAI,WAAW,GAAA,CAAA,KAAAE,mBAAA,QAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA;IAtBxB,SAAAL,cAgBS,CAhBTM,gBAAAV,UAAA,GAAAQ,mBAgBS,UAAA;KAfP,MAAK;KAEJ,OAAKF,eAAA;MAAYJ,MAAA,GAAA,CAAG,CAAC,EAAC,KAAA;MAAiBA,MAAA,GAAA,CAAG,CAAC,GAAE,UAAW,QAAA,MAAM;MAAWA,MAAA,GAAA,CAAG,CAAC,GAAE,YAAa,QAAA,QAAQ;MAAWA,MAAA,GAAA,CAAG,CAAC,GAAE,YAAa,QAAA,IAAI,YAAQ,KAAA;;KAM9I,UAAU,QAAA,IAAI;KACd,SAAO;KACP,cAAY;IAEG,GAAA,CAAA,QAAA,IAAI,QAApBF,UAAA,GAAAC,YAAwEU,aAAA;;KAA7C,MAAM,QAAA,IAAI;KAAO,OAAKL,eAAEJ,MAAA,GAAA,CAAG,CAAC,EAAC,UAAA,CAAA;IACxD,GAAA,MAAA,GAAA,CAAA,QAAA,OAAA,CAAA,MAAAF,UAAA,GAAAQ,mBAAqE,QAAA;;KAAvD,OAAKF,eAAEJ,MAAA,GAAA,CAAG,CAAC,EAAC,cAAA,CAAA;IAAqB,GAAAK,gBAAA,QAAA,IAAI,MAAK,EAAA,GAAA,CAAA,IAC5C,QAAA,WAAZP,UAAA,GAAAQ,mBAA0E,QAAA;;KAApD,OAAKF,eAAEJ,MAAA,GAAA,CAAG,CAAC,EAAC,WAAA,CAAA;IAAkB,GAAAK,gBAAA,aAAA,KAAY,GAAA,CAAA,KAAAE,mBAAA,QAAA,IAAA,CAAA,GAAA,IAAA,UAAA,IAAA,CAbrD,CAAAP,MAAA,OAAA,GAAA,CAAA,QAAA,IAAI,QAAQ,CAAA,CAAA,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dual-nav.js","names":[],"sources":["../../../src/components/dual-nav/dual-nav.vue"],"sourcesContent":["<template>\n <div :class=\"[cls.b, railVariant === 'labeled' && cls.m('labeled')]\">\n <div :class=\"cls.e('rail')\">\n <DualNavApp\n v-for=\"app in menus\"\n :key=\"app.path\"\n :app=\"app\"\n :active=\"isAppActive(app)\"\n :selected=\"isAppSelected(app)\"\n :labeled=\"railVariant === 'labeled'\"\n @click=\"handleAppClick(app)\"\n />\n </div>\n\n <!-- <div :class=\"cls.e('divider')\" aria-hidden=\"true\" /> -->\n\n <div :class=\"cls.e('panel')\">\n <template v-if=\"panelApp\">\n <div :class=\"cls.e('panel-header')\">\n <div :class=\"cls.e('panel-header-main')\">\n <h3 :class=\"cls.e('panel-title')\">{{ panelApp.title }}</h3>\n <p v-if=\"panelApp.description\" :class=\"cls.e('description')\">\n {{ panelApp.description }}\n </p>\n </div>\n\n <u-tip\n v-if=\"hasExpandableMenus\"\n :content=\"allExpanded ? '折叠全部' : '展开全部'\"\n hide-arrow\n >\n <button\n type=\"button\"\n :class=\"cls.e('toggle-expand')\"\n :aria-label=\"allExpanded ? '折叠全部' : '展开全部'\"\n @click=\"handleToggleExpandAll\"\n >\n <u-icon>\n <FolderOpened v-if=\"!allExpanded\" />\n <Folder v-else />\n </u-icon>\n </button>\n </u-tip>\n </div>\n\n <div :class=\"cls.e('panel-body')\">\n <UNav\n ref=\"navRef\"\n :menus=\"panelMenus\"\n :current-path=\"currentPath\"\n :collapsed=\"false\"\n @item-click=\"emit('item-click', $event)\"\n />\n </div>\n </template>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Folder, FolderOpened } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, ref, useTemplateRef, watch } from 'vue'\n\nimport type { DualNavEmits, DualNavProps, DualNavRootItem } from '../../types/dual-nav'\nimport type { NavExposed, NavItem } from '../../types/nav'\nimport { UIcon } from '../icon'\nimport { UNav } from '../nav'\nimport { collectNavBranchPaths } from '../nav/helper'\nimport { UTip } from '../tip'\nimport DualNavApp from './dual-nav-app.vue'\nimport { findFirstLeaf, findRootApp } from './helper'\n\ndefineOptions({ name: 'UDualNav' })\n\nconst props = withDefaults(defineProps<DualNavProps>(), { railVariant: 'icon' })\nconst emit = defineEmits<DualNavEmits>()\n\nconst cls = bem('dual-nav')\nconst navRef = useTemplateRef<NavExposed>('navRef')\n\n/** 右栏当前展示的应用(点击左轨或 currentPath 同步) */\nconst panelAppPath = ref<string>()\nconst allExpanded = ref(false)\n\nfunction syncPanelAppFromCurrentPath(currentPath?: string) {\n const rootApp = findRootApp(props.menus, currentPath)\n if (rootApp) {\n panelAppPath.value = rootApp.path\n return\n }\n\n if (!panelAppPath.value && props.menus?.length) {\n panelAppPath.value = props.menus[0]!.path\n }\n}\n\nwatch(\n () => [props.currentPath, props.menus] as const,\n ([currentPath]) => {\n syncPanelAppFromCurrentPath(currentPath)\n },\n { immediate: true }\n)\n\nconst panelApp = computed<DualNavRootItem | undefined>(() => {\n if (!panelAppPath.value || !props.menus?.length) return undefined\n return props.menus.find((app) => app.path === panelAppPath.value)\n})\n\n/** 右栏菜单:有子级时展示子级,单层时展示根项自身 */\nconst panelMenus = computed<NavItem[] | undefined>(() => {\n const app = panelApp.value\n if (!app) return undefined\n if (app.children?.length) return app.children\n return [app]\n})\n\nconst hasExpandableMenus = computed(() => {\n return collectNavBranchPaths(panelMenus.value).length > 0\n})\n\nwatch(panelAppPath, () => {\n allExpanded.value = false\n})\n\n/** 左轨高亮:currentPath 落在该应用下时为激活态 */\nfunction isAppActive(app: NavItem): boolean {\n return findRootApp(props.menus, props.currentPath)?.path === app.path\n}\n\n/** 左轨选中:已切换右栏但尚未导航到该应用下任一菜单时,使用 hover 风格 */\nfunction isAppSelected(app: NavItem): boolean {\n return panelAppPath.value === app.path && !isAppActive(app)\n}\n\nfunction handleAppClick(app: NavItem) {\n if (app.disabled) return\n\n panelAppPath.value = app.path\n\n emit('item-click', findFirstLeaf(app))\n}\n\nfunction handleToggleExpandAll() {\n if (allExpanded.value) {\n navRef.value?.collapseAll()\n allExpanded.value = false\n return\n }\n\n navRef.value?.expandAll()\n allExpanded.value = true\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EA2EA,MAAM,QAAQ;EACd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,UAAU;EAC1B,MAAM,SAAS,eAA2B,QAAQ;;EAGlD,MAAM,eAAe,IAAY;EACjC,MAAM,cAAc,IAAI,KAAK;EAE7B,SAAS,4BAA4B,aAAsB;GACzD,MAAM,UAAU,YAAY,MAAM,OAAO,WAAW;GACpD,IAAI,SAAS;IACX,aAAa,QAAQ,QAAQ;IAC7B;GACF;GAEA,IAAI,CAAC,aAAa,SAAS,MAAM,OAAO,QACtC,aAAa,QAAQ,MAAM,MAAM,EAAE,CAAE;EAEzC;EAEA,YACQ,CAAC,MAAM,aAAa,MAAM,KAAK,IACpC,CAAC,iBAAiB;GACjB,4BAA4B,WAAW;EACzC,GACA,EAAE,WAAW,KAAK,CACpB;EAEA,MAAM,WAAW,eAA4C;GAC3D,IAAI,CAAC,aAAa,SAAS,CAAC,MAAM,OAAO,QAAQ,OAAO,KAAA;GACxD,OAAO,MAAM,MAAM,MAAM,QAAQ,IAAI,SAAS,aAAa,KAAK;EAClE,CAAC;;EAGD,MAAM,aAAa,eAAsC;GACvD,MAAM,MAAM,SAAS;GACrB,IAAI,CAAC,KAAK,OAAO,KAAA;GACjB,IAAI,IAAI,UAAU,QAAQ,OAAO,IAAI;GACrC,OAAO,CAAC,GAAG;EACb,CAAC;EAED,MAAM,qBAAqB,eAAe;GACxC,OAAO,sBAAsB,WAAW,KAAK,CAAC,CAAC,SAAS;EAC1D,CAAC;EAED,MAAM,oBAAoB;GACxB,YAAY,QAAQ;EACtB,CAAC;;EAGD,SAAS,YAAY,KAAuB;GAC1C,OAAO,YAAY,MAAM,OAAO,MAAM,WAAW,CAAC,EAAE,SAAS,IAAI;EACnE;;EAGA,SAAS,cAAc,KAAuB;GAC5C,OAAO,aAAa,UAAU,IAAI,QAAQ,CAAC,YAAY,GAAG;EAC5D;EAEA,SAAS,eAAe,KAAc;GACpC,IAAI,IAAI,UAAU;GAElB,aAAa,QAAQ,IAAI;GAEzB,KAAK,cAAc,cAAc,GAAG,CAAC;EACvC;EAEA,SAAS,wBAAwB;GAC/B,IAAI,YAAY,OAAO;IACrB,OAAO,OAAO,YAAY;IAC1B,YAAY,QAAQ;IACpB;GACF;GAEA,OAAO,OAAO,UAAU;GACxB,YAAY,QAAQ;EACtB;;GAxJE,
|
|
1
|
+
{"version":3,"file":"dual-nav.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_Fragment","_renderList","_createBlock","DualNavApp","_createCommentVNode","_toDisplayString","UTip","_withCtx","_createVNode","UIcon","UNav"],"sources":["../../../src/components/dual-nav/dual-nav.vue"],"sourcesContent":["<template>\n <div :class=\"[cls.b, railVariant === 'labeled' && cls.m('labeled')]\">\n <div :class=\"cls.e('rail')\">\n <DualNavApp\n v-for=\"app in menus\"\n :key=\"app.path\"\n :app=\"app\"\n :active=\"isAppActive(app)\"\n :selected=\"isAppSelected(app)\"\n :labeled=\"railVariant === 'labeled'\"\n @click=\"handleAppClick(app)\"\n />\n </div>\n\n <!-- <div :class=\"cls.e('divider')\" aria-hidden=\"true\" /> -->\n\n <div :class=\"cls.e('panel')\">\n <template v-if=\"panelApp\">\n <div :class=\"cls.e('panel-header')\">\n <div :class=\"cls.e('panel-header-main')\">\n <h3 :class=\"cls.e('panel-title')\">{{ panelApp.title }}</h3>\n <p v-if=\"panelApp.description\" :class=\"cls.e('description')\">\n {{ panelApp.description }}\n </p>\n </div>\n\n <u-tip\n v-if=\"hasExpandableMenus\"\n :content=\"allExpanded ? '折叠全部' : '展开全部'\"\n hide-arrow\n >\n <button\n type=\"button\"\n :class=\"cls.e('toggle-expand')\"\n :aria-label=\"allExpanded ? '折叠全部' : '展开全部'\"\n @click=\"handleToggleExpandAll\"\n >\n <u-icon>\n <FolderOpened v-if=\"!allExpanded\" />\n <Folder v-else />\n </u-icon>\n </button>\n </u-tip>\n </div>\n\n <div :class=\"cls.e('panel-body')\">\n <UNav\n ref=\"navRef\"\n :menus=\"panelMenus\"\n :current-path=\"currentPath\"\n :collapsed=\"false\"\n @item-click=\"emit('item-click', $event)\"\n />\n </div>\n </template>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Folder, FolderOpened } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, ref, useTemplateRef, watch } from 'vue'\n\nimport type { DualNavEmits, DualNavProps, DualNavRootItem } from '../../types/dual-nav'\nimport type { NavExposed, NavItem } from '../../types/nav'\nimport { UIcon } from '../icon'\nimport { UNav } from '../nav'\nimport { collectNavBranchPaths } from '../nav/helper'\nimport { UTip } from '../tip'\nimport DualNavApp from './dual-nav-app.vue'\nimport { findFirstLeaf, findRootApp } from './helper'\n\ndefineOptions({ name: 'UDualNav' })\n\nconst props = withDefaults(defineProps<DualNavProps>(), { railVariant: 'icon' })\nconst emit = defineEmits<DualNavEmits>()\n\nconst cls = bem('dual-nav')\nconst navRef = useTemplateRef<NavExposed>('navRef')\n\n/** 右栏当前展示的应用(点击左轨或 currentPath 同步) */\nconst panelAppPath = ref<string>()\nconst allExpanded = ref(false)\n\nfunction syncPanelAppFromCurrentPath(currentPath?: string) {\n const rootApp = findRootApp(props.menus, currentPath)\n if (rootApp) {\n panelAppPath.value = rootApp.path\n return\n }\n\n if (!panelAppPath.value && props.menus?.length) {\n panelAppPath.value = props.menus[0]!.path\n }\n}\n\nwatch(\n () => [props.currentPath, props.menus] as const,\n ([currentPath]) => {\n syncPanelAppFromCurrentPath(currentPath)\n },\n { immediate: true }\n)\n\nconst panelApp = computed<DualNavRootItem | undefined>(() => {\n if (!panelAppPath.value || !props.menus?.length) return undefined\n return props.menus.find((app) => app.path === panelAppPath.value)\n})\n\n/** 右栏菜单:有子级时展示子级,单层时展示根项自身 */\nconst panelMenus = computed<NavItem[] | undefined>(() => {\n const app = panelApp.value\n if (!app) return undefined\n if (app.children?.length) return app.children\n return [app]\n})\n\nconst hasExpandableMenus = computed(() => {\n return collectNavBranchPaths(panelMenus.value).length > 0\n})\n\nwatch(panelAppPath, () => {\n allExpanded.value = false\n})\n\n/** 左轨高亮:currentPath 落在该应用下时为激活态 */\nfunction isAppActive(app: NavItem): boolean {\n return findRootApp(props.menus, props.currentPath)?.path === app.path\n}\n\n/** 左轨选中:已切换右栏但尚未导航到该应用下任一菜单时,使用 hover 风格 */\nfunction isAppSelected(app: NavItem): boolean {\n return panelAppPath.value === app.path && !isAppActive(app)\n}\n\nfunction handleAppClick(app: NavItem) {\n if (app.disabled) return\n\n panelAppPath.value = app.path\n\n emit('item-click', findFirstLeaf(app))\n}\n\nfunction handleToggleExpandAll() {\n if (allExpanded.value) {\n navRef.value?.collapseAll()\n allExpanded.value = false\n return\n }\n\n navRef.value?.expandAll()\n allExpanded.value = true\n}\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"empty.js","names":[],"sources":["../../../src/components/empty/empty.vue"],"sourcesContent":["<template>\n <span :class=\"cls.b\">\n <u-icon :size=\"size\"> <Empty /> </u-icon>\n <div>{{ text }}</div>\n </span>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Empty } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\n\nimport type { EmptyProps } from '../../types'\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'UEmpty' })\n\nwithDefaults(defineProps<EmptyProps>(), { size: 48, text: '暂无数据' })\n\nconst cls = bem('empty')\n</script>\n"],"mappings":";;;;;;;;;;;;;EAkBA,MAAM,MAAM,IAAI,OAAO;;GAjBrB,
|
|
1
|
+
{"version":3,"file":"empty.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createVNode","UIcon","_withCtx","_createElementVNode","_toDisplayString"],"sources":["../../../src/components/empty/empty.vue"],"sourcesContent":["<template>\n <span :class=\"cls.b\">\n <u-icon :size=\"size\"> <Empty /> </u-icon>\n <div>{{ text }}</div>\n </span>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Empty } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\n\nimport type { EmptyProps } from '../../types'\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'UEmpty' })\n\nwithDefaults(defineProps<EmptyProps>(), { size: 48, text: '暂无数据' })\n\nconst cls = bem('empty')\n</script>\n"],"mappings":";;;;;;;;;;;;;EAkBA,MAAM,MAAM,IAAI,OAAO;;GAjBrB,OAAAA,UAAA,GAAAC,mBAGO,QAAA,EAHA,OAAKC,eAAEC,MAAA,GAAA,CAAG,CAAC,CAAC,EAAA,GACjB,CAAAC,YAAyCD,MAAAE,WAAA,GAAA,EAAhC,MAAM,QAAA,KAAI,GAAA;IAAG,SAAAC,cAAS,CAATF,YAASD,MAAA,KAAA,CAAA,CAAA,CAAA;;GAC/B,GAAA,GAAA,CAAA,MAAA,CAAA,GAAAI,mBAAqB,OAAA,MAAAC,gBAAb,QAAA,IAAI,GAAA,CAAA,CAAA,GAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-preview.js","names":[],"sources":["../../../../src/components/expression-editor/components/path-preview.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('path-preview')\">\n <div :class=\"cls.e('path-preview-title')\">变量路径</div>\n <ul :class=\"cls.e('path-tree')\">\n <li\n v-for=\"(node, i) in path\"\n :key=\"`${i}-${node.value || node.label}`\"\n :class=\"[cls.e('path-tree-item'), bem.is('active', i === path.length - 1)]\"\n :style=\"{ '--depth': i }\"\n >\n <span :class=\"cls.e('path-tree-label')\">{{ node.label }}</span>\n </li>\n </ul>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\n\nimport type { VariableItem } from '../../../types'\n\ndefineOptions({ name: 'UExpressionPathPreview' })\n\ndefineProps<{ path: VariableItem[] }>()\n\nconst cls = bem('expression-editor')\n</script>\n"],"mappings":";;;;;;;;EAyBA,MAAM,MAAM,IAAI,mBAAmB;;GAxBjC,
|
|
1
|
+
{"version":3,"file":"path-preview.js","names":["_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_Fragment","_renderList","_normalizeStyle","_toDisplayString"],"sources":["../../../../src/components/expression-editor/components/path-preview.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('path-preview')\">\n <div :class=\"cls.e('path-preview-title')\">变量路径</div>\n <ul :class=\"cls.e('path-tree')\">\n <li\n v-for=\"(node, i) in path\"\n :key=\"`${i}-${node.value || node.label}`\"\n :class=\"[cls.e('path-tree-item'), bem.is('active', i === path.length - 1)]\"\n :style=\"{ '--depth': i }\"\n >\n <span :class=\"cls.e('path-tree-label')\">{{ node.label }}</span>\n </li>\n </ul>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\n\nimport type { VariableItem } from '../../../types'\n\ndefineOptions({ name: 'UExpressionPathPreview' })\n\ndefineProps<{ path: VariableItem[] }>()\n\nconst cls = bem('expression-editor')\n</script>\n"],"mappings":";;;;;;;;EAyBA,MAAM,MAAM,IAAI,mBAAmB;;GAxBjC,OAAAA,UAAA,GAAAC,mBAYM,OAAA,EAZA,OAAKC,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,cAAA,CAAA,EAAA,GAChB,CAAAC,mBAAoD,OAAA,EAA9C,OAAKF,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,oBAAA,CAAA,EAAwB,GAAA,QAAI,CAAA,GAC9CC,mBASK,MAAA,EATA,OAAKF,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,WAAA,CAAA,EAAA,GACf,EAAAH,UAAA,IAAA,GAAAC,mBAOKI,UAAA,MAAAC,WANiB,QAAA,OAAZ,MAAM,MAAC;IADjB,OAAAN,UAAA,GAAAC,mBAOK,MAAA;KALF,KAAG,GAAK,EAAC,GAAI,KAAK,SAAS,KAAK;KAChC,OAAKC,eAAA,CAAGC,MAAA,GAAA,CAAG,CAAC,EAAC,gBAAA,GAAoBA,MAAA,GAAA,CAAG,CAAC,GAAE,UAAW,MAAM,QAAA,KAAK,SAAM,CAAA,CAAA,CAAA;KACnE,OAAKI,eAAA,EAAA,WAAe,EAAC,CAAA;IAEtB,GAAA,CAAAH,mBAA+D,QAAA,EAAxD,OAAKF,eAAEC,MAAA,GAAA,CAAG,CAAC,EAAC,iBAAA,CAAA,EAAwB,GAAAK,gBAAA,KAAK,KAAK,GAAA,CAAA,CAAA,GAAA,CAAA"}
|