@veltra/desktop 1.1.14 → 1.1.18
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.vue.d.ts +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/action/action.vue.d.ts +1 -1
- package/dist/components/action/style2.css +0 -4
- package/dist/components/auto-complete/auto-complete.js.map +1 -1
- package/dist/components/auto-complete/style.js +1 -1
- package/dist/components/auto-complete/use-keyboard.js.map +1 -1
- package/dist/components/auto-complete/use-suggestions.js.map +1 -1
- package/dist/components/badge/badge.js +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/batch-edit/helper.js.map +1 -1
- package/dist/components/batch-edit/style.js +1 -1
- package/dist/components/batch-edit/use-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/calendar/utils.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.map +1 -1
- package/dist/components/cascade/cascade.vue.d.ts +3 -3
- package/dist/components/cascade/node.js.map +1 -1
- package/dist/components/cascade/use-check.js.map +1 -1
- package/dist/components/cascade/use-data-map.js.map +1 -1
- package/dist/components/cascade/use-select.js +1 -1
- 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/style.js +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 +138 -103
- package/dist/components/condition-editor/components/condition-group.js.map +1 -1
- package/dist/components/condition-editor/components/condition-row.js +146 -95
- package/dist/components/condition-editor/components/condition-row.js.map +1 -1
- package/dist/components/condition-editor/condition-editor.js +18 -40
- package/dist/components/condition-editor/condition-editor.js.map +1 -1
- package/dist/components/condition-editor/condition-editor.vue.d.ts +0 -2
- package/dist/components/condition-editor/core/evaluator.d.ts +22 -0
- package/dist/components/condition-editor/core/evaluator.js +111 -50
- package/dist/components/condition-editor/core/evaluator.js.map +1 -1
- package/dist/components/condition-editor/core/operators.js.map +1 -1
- package/dist/components/condition-editor/index.d.ts +2 -1
- package/dist/components/condition-editor/style2.css +159 -82
- package/dist/components/context-menu/api.js.map +1 -1
- package/dist/components/context-menu/context-menu-item.js.map +1 -1
- package/dist/components/context-menu/context-menu.js.map +1 -1
- package/dist/components/context-menu/style.js +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-panel/use-date-select.js.map +1 -1
- package/dist/components/date-panel/use-panel-date.js.map +1 -1
- package/dist/components/date-panel/use-panel.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/dialog/style.js +2 -2
- package/dist/components/dialog/use-maximum.js.map +1 -1
- package/dist/components/drawer/drawer.js.map +1 -1
- package/dist/components/drawer/style.js +1 -1
- package/dist/components/dropdown/dropdown.js +1 -0
- package/dist/components/dropdown/dropdown.js.map +1 -1
- package/dist/components/dropdown/style.js +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/core/chip.js.map +1 -1
- package/dist/components/expression-editor/core/editor.js.map +1 -1
- package/dist/components/expression-editor/core/mention.js.map +1 -1
- package/dist/components/expression-editor/core/model.js.map +1 -1
- package/dist/components/expression-editor/di.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-picker/helper.js.map +1 -1
- package/dist/components/file-viewer/file-viewer.js.map +1 -1
- package/dist/components/file-viewer/helper.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/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/dynamic-form-model.js.map +1 -1
- package/dist/components/form/form-model.js.map +1 -1
- package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/form/helper.js.map +1 -1
- package/dist/components/form/use-node-interceptor.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 +2 -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/breakpoint.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/use-responsive.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-input/use-group-items.js.map +1 -1
- package/dist/components/icon/icon.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +4 -0
- package/dist/components/input/input.vue.d.ts +2 -2
- package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/input/style.js +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/directive.js.map +1 -1
- package/dist/components/loading/loading.js.map +1 -1
- package/dist/components/loading/style.js +1 -1
- package/dist/components/menu/helper.js.map +1 -1
- package/dist/components/menu/menu-item-collapsed.js.map +1 -1
- package/dist/components/menu/menu-item.js.map +1 -1
- package/dist/components/menu/menu-sub-collapsed.js.map +1 -1
- package/dist/components/menu/menu-sub.js.map +1 -1
- package/dist/components/menu/menu.js.map +1 -1
- package/dist/components/menu/use-menu-item.js.map +1 -1
- package/dist/components/menu/walk-menu-path.js.map +1 -1
- package/dist/components/message/helper.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/message2.js.map +1 -1
- package/dist/components/message-confirm/message-confirm.js.map +1 -1
- package/dist/components/message-confirm/message-confirm2.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-select/multi-select.vue.d.ts +1 -1
- package/dist/components/multi-select/style.js +1 -1
- package/dist/components/multi-tree-select/multi-tree-select.js.map +1 -1
- package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +3 -3
- package/dist/components/multi-tree-select/style.js +1 -1
- package/dist/components/node-render/node-render.js.map +1 -1
- package/dist/components/notification/index.js.map +1 -1
- package/dist/components/notification/notification.js.map +1 -1
- package/dist/components/notification/notification.vue.d.ts +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-input/number-input.vue.d.ts +2 -2
- 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/color-transform.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/palette/use-hsv.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/style.js +1 -1
- package/dist/components/radio-group/radio-group.js.map +1 -1
- package/dist/components/rich-text-editor/rich-text-editor.js.map +1 -1
- package/dist/components/rich-text-editor/toolbar.js.map +1 -1
- package/dist/components/scroll/scroll-bar.js +2 -0
- package/dist/components/scroll/scroll-bar.js.map +1 -1
- package/dist/components/scroll/scroll.js.map +1 -1
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/select/use-keyboard.js.map +1 -1
- package/dist/components/select/use-options.js.map +1 -1
- package/dist/components/slider/slider-thumb.js.map +1 -1
- package/dist/components/slider/slider.js +1 -1
- package/dist/components/slider/slider.js.map +1 -1
- package/dist/components/slider/use-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/di.js.map +1 -1
- package/dist/components/table/node/col.js.map +1 -1
- package/dist/components/table/node/row.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/use-check.js.map +1 -1
- package/dist/components/table/use-col-resize.js.map +1 -1
- package/dist/components/table/use-columns.js.map +1 -1
- package/dist/components/table/use-fixed-columns.js.map +1 -1
- package/dist/components/table/use-rows.js.map +1 -1
- package/dist/components/table/use-table.js.map +1 -1
- package/dist/components/table-editor/table-editor.js.map +1 -1
- package/dist/components/tabs/style.js +1 -1
- package/dist/components/tabs/tabs-horizontal.js.map +1 -1
- package/dist/components/tabs/tabs-horizontal.vue.d.ts +3 -3
- package/dist/components/tabs/tabs-vertical.js.map +1 -1
- package/dist/components/tabs/tabs-vertical.vue.d.ts +2 -2
- package/dist/components/tabs/tabs.js.map +1 -1
- package/dist/components/tabs/tabs.vue.d.ts +3 -3
- package/dist/components/tabs/use-tabs-bar.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/style.js +1 -1
- package/dist/components/textarea/textarea.js.map +1 -1
- package/dist/components/textarea/textarea.vue.d.ts +3 -3
- package/dist/components/textarea/utils.js.map +1 -1
- package/dist/components/theme/schema.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/tip/tip.vue.d.ts +1 -1
- package/dist/components/tip/use-nest.js.map +1 -1
- package/dist/components/tree/tree-node.js.map +1 -1
- package/dist/components/tree/tree-node2.js.map +1 -1
- package/dist/components/tree/tree.js.map +1 -1
- package/dist/components/tree/use-check.js.map +1 -1
- package/dist/components/tree/use-filter.js.map +1 -1
- package/dist/components/tree/use-select.js.map +1 -1
- package/dist/components/tree/use-tree-nodes.js.map +1 -1
- package/dist/components/tree-select/tree-select.js.map +1 -1
- package/dist/components/tree-select/tree-select.vue.d.ts +3 -3
- package/dist/components/watermark/watermark.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.js +2 -1
- package/dist/install.js.map +1 -1
- package/dist/types/batch-edit.d.ts +2 -2
- package/dist/types/condition-editor.d.ts +21 -9
- package/dist/types/index.d.ts +2 -2
- package/package.json +13 -16
- package/src/components/action/style.scss +0 -6
- package/src/components/auto-complete/style.scss +0 -1
- package/src/components/auto-complete/style.ts +1 -1
- package/src/components/badge/badge.vue +1 -1
- package/src/components/batch-edit/style.ts +1 -1
- package/src/components/button/style.scss +1 -1
- package/src/components/cascade/use-select.ts +8 -6
- package/src/components/checkbox/style.ts +1 -1
- package/src/components/collapse/__test__/collapse.test.ts +3 -3
- package/src/components/condition-editor/components/condition-group.vue +118 -87
- package/src/components/condition-editor/components/condition-row.vue +137 -89
- package/src/components/condition-editor/condition-editor.vue +19 -48
- package/src/components/condition-editor/core/evaluator.ts +143 -57
- package/src/components/condition-editor/index.ts +6 -0
- package/src/components/condition-editor/style.scss +189 -102
- package/src/components/context-menu/style.ts +1 -1
- package/src/components/dialog/style.ts +2 -2
- package/src/components/drawer/style.ts +1 -1
- package/src/components/dropdown/style.ts +1 -1
- package/src/components/expression-editor/style.scss +1 -1
- package/src/components/form-item/form-item.vue +4 -9
- package/src/components/input/style.ts +1 -1
- package/src/components/loading/style.ts +1 -1
- package/src/components/menu/style.scss +1 -1
- package/src/components/message/style.scss +1 -1
- package/src/components/multi-select/style.ts +1 -1
- package/src/components/multi-tree-select/style.ts +1 -1
- package/src/components/number-input/__test__/number-input.test.ts +1 -1
- package/src/components/radio/style.ts +1 -1
- package/src/components/slider/slider.vue +1 -1
- package/src/components/table/di.ts +1 -1
- package/src/components/tabs/style.ts +1 -1
- package/src/components/textarea/style.ts +1 -1
- package/src/types/batch-edit.ts +2 -2
- package/src/types/condition-editor.ts +22 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-menu.js","names":[],"sources":["../../../src/components/context-menu/context-menu.vue"],"sourcesContent":["<template>\n <transition name=\"zoom-in\" appear @after-leave=\"emit('destroy')\">\n <ul\n :class=\"[cls.b, cls.m(size)]\"\n :style=\"style\"\n ref=\"contextMenuRef\"\n v-if=\"visible\"\n v-click-outside=\"handleClickOutside\"\n >\n <UContextMenuItem\n v-for=\"menu of menus\"\n :menu=\"menu\"\n :disabled=\"getMenuDisabled(menu)\"\n @click-start=\"handleClickStart\"\n @click-end=\"handleClickEnd\"\n />\n </ul>\n </transition>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { vClickOutside } from '@veltra/directives'\nimport { bem, withUnit, zIndex } from '@veltra/utils'\nimport { computed, provide, shallowRef, type CSSProperties } from 'vue'\n\nimport type {\n ContextMenuEmits,\n ContextMenuItem,\n ContextMenuProps,\n ComponentSize\n} from '../../types'\nimport UContextMenuItem from './context-menu-item.vue'\nimport { ContextMenuDIKey } from './di'\n\ndefineOptions({\n name: 'ContextMenu'\n})\n\nconst props = withDefaults(defineProps<ContextMenuProps>(), {\n width: 150\n})\n\nconst emit = defineEmits<ContextMenuEmits>()\n\nconst { size } = useFallbackProps([props], {\n size: 'default' as ComponentSize\n})\n\nconst cls = bem('context-menu')\n\nconst contextMenuRef = shallowRef<HTMLElement>()\n\nconst visible = shallowRef(true)\n\nconst computePosition = () => {\n const position: {\n top?: number\n left?: number\n right?: number\n bottom?: number\n transformOrigin?: string\n } = {}\n\n const { mousePosition } = props\n const { x, y } = mousePosition\n if (x > window.innerWidth / 2) {\n position.right = window.innerWidth - x - 1\n } else {\n position.left = x + 1\n }\n if (y > window.innerHeight / 2) {\n position.bottom = window.innerHeight - y - 1\n } else {\n position.top = y + 1\n }\n\n const positionY = position.top ? 'top' : 'bottom'\n const positionX = position.left ? 'left' : 'right'\n position.transformOrigin = `${positionY} ${positionX}`\n\n return Object.fromEntries(\n Object.entries(position).map(([k, v]) => [k, withUnit(v as number | string | undefined, 'px')])\n ) as CSSProperties\n}\n\nconst style = computed<CSSProperties>(() => {\n return {\n width: withUnit(props.width, 'px'),\n ...computePosition(),\n zIndex: zIndex()\n }\n})\n\nconst menus = computed(() => {\n const { menus } = props\n if (typeof menus === 'function') {\n return menus()\n }\n return menus\n})\n\nconst getMenuDisabled = (menu: ContextMenuItem) => {\n return typeof menu.disabled === 'function' ? menu.disabled() : menu.disabled\n}\n\nfunction close() {\n visible.value = false\n}\n\nlet loading = false\nfunction handleClickStart() {\n loading = true\n}\n\nfunction handleClickEnd() {\n loading = false\n close()\n}\n\nfunction handleClickOutside() {\n if (loading) return\n close()\n}\n\nprovide(ContextMenuDIKey, {\n cls\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAuCA,MAAM,QAAQ;EAId,MAAM,OAAO;EAEb,MAAM,EAAE,SAAS,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"context-menu.js","names":[],"sources":["../../../src/components/context-menu/context-menu.vue"],"sourcesContent":["<template>\n <transition name=\"zoom-in\" appear @after-leave=\"emit('destroy')\">\n <ul\n :class=\"[cls.b, cls.m(size)]\"\n :style=\"style\"\n ref=\"contextMenuRef\"\n v-if=\"visible\"\n v-click-outside=\"handleClickOutside\"\n >\n <UContextMenuItem\n v-for=\"menu of menus\"\n :menu=\"menu\"\n :disabled=\"getMenuDisabled(menu)\"\n @click-start=\"handleClickStart\"\n @click-end=\"handleClickEnd\"\n />\n </ul>\n </transition>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { vClickOutside } from '@veltra/directives'\nimport { bem, withUnit, zIndex } from '@veltra/utils'\nimport { computed, provide, shallowRef, type CSSProperties } from 'vue'\n\nimport type {\n ContextMenuEmits,\n ContextMenuItem,\n ContextMenuProps,\n ComponentSize\n} from '../../types'\nimport UContextMenuItem from './context-menu-item.vue'\nimport { ContextMenuDIKey } from './di'\n\ndefineOptions({\n name: 'ContextMenu'\n})\n\nconst props = withDefaults(defineProps<ContextMenuProps>(), {\n width: 150\n})\n\nconst emit = defineEmits<ContextMenuEmits>()\n\nconst { size } = useFallbackProps([props], {\n size: 'default' as ComponentSize\n})\n\nconst cls = bem('context-menu')\n\nconst contextMenuRef = shallowRef<HTMLElement>()\n\nconst visible = shallowRef(true)\n\nconst computePosition = () => {\n const position: {\n top?: number\n left?: number\n right?: number\n bottom?: number\n transformOrigin?: string\n } = {}\n\n const { mousePosition } = props\n const { x, y } = mousePosition\n if (x > window.innerWidth / 2) {\n position.right = window.innerWidth - x - 1\n } else {\n position.left = x + 1\n }\n if (y > window.innerHeight / 2) {\n position.bottom = window.innerHeight - y - 1\n } else {\n position.top = y + 1\n }\n\n const positionY = position.top ? 'top' : 'bottom'\n const positionX = position.left ? 'left' : 'right'\n position.transformOrigin = `${positionY} ${positionX}`\n\n return Object.fromEntries(\n Object.entries(position).map(([k, v]) => [k, withUnit(v as number | string | undefined, 'px')])\n ) as CSSProperties\n}\n\nconst style = computed<CSSProperties>(() => {\n return {\n width: withUnit(props.width, 'px'),\n ...computePosition(),\n zIndex: zIndex()\n }\n})\n\nconst menus = computed(() => {\n const { menus } = props\n if (typeof menus === 'function') {\n return menus()\n }\n return menus\n})\n\nconst getMenuDisabled = (menu: ContextMenuItem) => {\n return typeof menu.disabled === 'function' ? menu.disabled() : menu.disabled\n}\n\nfunction close() {\n visible.value = false\n}\n\nlet loading = false\nfunction handleClickStart() {\n loading = true\n}\n\nfunction handleClickEnd() {\n loading = false\n close()\n}\n\nfunction handleClickOutside() {\n if (loading) return\n close()\n}\n\nprovide(ContextMenuDIKey, {\n cls\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAuCA,MAAM,QAAQ;EAId,MAAM,OAAO;EAEb,MAAM,EAAE,SAAS,iBAAiB,CAAC,MAAK,EAAG,EACzC,MAAM,WACP,CAAA;EAED,MAAM,MAAM,IAAI,eAAc;EAE9B,MAAM,iBAAiB,YAAwB;EAE/C,MAAM,UAAU,WAAW,KAAI;EAE/B,MAAM,wBAAwB;GAC5B,MAAM,WAMF,EAAC;GAEL,MAAM,EAAE,kBAAkB;GAC1B,MAAM,EAAE,GAAG,MAAM;GACjB,IAAI,IAAI,OAAO,aAAa,GAC1B,SAAS,QAAQ,OAAO,aAAa,IAAI;QAEzC,SAAS,OAAO,IAAI;GAEtB,IAAI,IAAI,OAAO,cAAc,GAC3B,SAAS,SAAS,OAAO,cAAc,IAAI;QAE3C,SAAS,MAAM,IAAI;GAKrB,SAAS,kBAAkB,GAFT,SAAS,MAAM,QAAQ,SAED,GADtB,SAAS,OAAO,SAAS;GAG3C,OAAO,OAAO,YACZ,OAAO,QAAQ,SAAQ,CAAE,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,SAAS,GAAkC,KAAK,CAAC,CAChG,CAAA;;EAGF,MAAM,QAAQ,eAA8B;GAC1C,OAAO;IACL,OAAO,SAAS,MAAM,OAAO,KAAI;IACjC,GAAG,iBAAgB;IACnB,QAAQ,QAAO;IACjB;IACD;EAED,MAAM,QAAQ,eAAe;GAC3B,MAAM,EAAE,UAAU;GAClB,IAAI,OAAO,UAAU,YACnB,OAAO,OAAM;GAEf,OAAO;IACR;EAED,MAAM,mBAAmB,SAA0B;GACjD,OAAO,OAAO,KAAK,aAAa,aAAa,KAAK,UAAS,GAAI,KAAK;;EAGtE,SAAS,QAAQ;GACf,QAAQ,QAAQ;;EAGlB,IAAI,UAAU;EACd,SAAS,mBAAmB;GAC1B,UAAU;;EAGZ,SAAS,iBAAiB;GACxB,UAAU;GACV,OAAM;;EAGR,SAAS,qBAAqB;GAC5B,IAAI,SAAS;GACb,OAAM;;EAGR,QAAQ,kBAAkB,EACxB,KACD,CAAA;;uBA9HC,YAgBa,YAAA;IAhBD,MAAK;IAAU,QAAA;IAAQ,cAAW,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,UAAA;;2BAe7C,CAVG,QAAA,QAAA,gBAAA,WAAA,EAJR,mBAcK,MAAA;;KAbF,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,GAAG,MAAA,IAAA,CAAI,EAAE,MAAA,KAAI,CAAA,CAAA,CAAA;KACzB,OAAK,eAAE,MAAA,MAAK;cACT;KAAJ,KAAI;0BAIJ,mBAME,UAAA,MAAA,WALe,MAAA,QAAR,SAAI;yBADb,YAME,aAAA;MAJO;MACN,UAAU,gBAAgB,KAAI;MAC9B,cAAa;MACb,YAAW;;6CAPG,mBAAkB,CAAA,CAAA,GAAA,mBAAA,QAAA,KAAA,CAAA,CAAA"}
|
|
@@ -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({\n name: 'DatePanel'\n})\n\nconst props = withDefaults(defineProps<DatePanelProps>(), {\n size: 'default',\n type: 'date'\n})\n\nconst emit = defineEmits<DatePanelEmits>()\n\nconst { cls, panelType } = usePanel({\n props,\n emit\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EAiCA,MAAM,QAAQ;EAOd,MAAM,EAAE,KAAK,cAAc,SAAS;GAClC;GACA,MAAA;GACD,CAAA;;uBA1CC,mBAeM,OAAA,EAfA,OAAK,eAAA,CAAG,MAAA,
|
|
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({\n name: 'DatePanel'\n})\n\nconst props = withDefaults(defineProps<DatePanelProps>(), {\n size: 'default',\n type: 'date'\n})\n\nconst emit = defineEmits<DatePanelEmits>()\n\nconst { cls, panelType } = usePanel({\n props,\n emit\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EAiCA,MAAM,QAAQ;EAOd,MAAM,EAAE,KAAK,cAAc,SAAS;GAClC;GACA,MAAA;GACD,CAAA;;uBA1CC,mBAeM,OAAA,EAfA,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,GAAG,MAAA,IAAA,CAAI,EAAE,MAAM,KAAI,CAAA,CAAA,EAAA,EAAA,CACnB,MAAA,UAAA,KAAS,SAAA,WAAA,EAAzB,mBAGW,UAAA,EAAA,KAAA,GAAA,EAAA,CAFT,YAAa,YAAA,EACb,YAAY,YAAA,CAAA,EAAA,GAAA,IAGO,MAAA,UAAA,KAAS,UAAA,WAAA,EAA9B,mBAGW,UAAA,EAAA,KAAA,GAAA,EAAA,CAFT,YAAc,YAAA,EACd,YAAa,YAAA,CAAA,EAAA,GAAA,IAGM,MAAA,UAAA,KAAS,WAAA,WAAA,EAA9B,mBAGW,UAAA,EAAA,KAAA,GAAA,EAAA,CAFT,YAAe,YAAA,EACf,YAAc,YAAA,CAAA,EAAA,GAAA,IAAA,mBAAA,QAAA,KAAA,CAAA,EAAA,EAAA"}
|
|
@@ -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({\n name: 'DatePanelDayHeader'\n})\n\nconst { panelDate, panelType, cls, toPrevMonth, toNextMonth, toPrevYear, toNextYear } =\n inject(DatePanelDIKey)!\n</script>\n"],"mappings":";;;;;;;;;EA0CA,MAAM,EAAE,WAAW,WAAW,KAAK,aAAa,aAAa,YAAY,eACvE,OAAO,
|
|
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({\n name: 'DatePanelDayHeader'\n})\n\nconst { panelDate, panelType, cls, toPrevMonth, toNextMonth, toPrevYear, toNextYear } =\n inject(DatePanelDIKey)!\n</script>\n"],"mappings":";;;;;;;;;EA0CA,MAAM,EAAE,WAAW,WAAW,KAAK,aAAa,aAAa,YAAY,eACvE,OAAO,eAAc;;uBA1CrB,mBA2BM,OAAA,EA3BA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA,EAAA,EAAA;IAChB,mBAOM,OAAA,MAAA,CANJ,YAES,MAAA,YAAA,EAAA;KAFA,SAAO,MAAA,WAAA;KAAY,OAAM;;4BAClB,CAAd,YAAc,MAAA,WAAA,CAAA,CAAA,CAAA;;wBAEhB,YAES,MAAA,YAAA,EAAA;KAFA,SAAO,MAAA,YAAA;KAAa,OAAM;;4BACpB,CAAb,YAAa,MAAA,UAAA,CAAA,CAAA,CAAA;;;IAIjB,mBAOM,OAAA,MAAA,CANJ,mBAEO,QAAA;KAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,cAAA,CAAA;KAAkB,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,UAAA,QAAS;uBAChD,MAAA,UAAA,CAAU,KAAI,EAAA,EAAA,EAEnB,mBAEO,QAAA;KAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,eAAA,CAAA;KAAmB,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,UAAA,QAAS;uBACjD,MAAA,UAAA,CAAU,MAAK,GAAG,MACvB,EAAA,CAAA,CAAA;IAGF,mBAOM,OAAA,MAAA,CANJ,YAES,MAAA,YAAA,EAAA;KAFA,SAAO,MAAA,YAAA;KAAa,OAAM;;4BACnB,CAAd,YAAc,MAAA,WAAA,CAAA,CAAA,CAAA;;wBAEhB,YAES,MAAA,YAAA,EAAA;KAFA,SAAO,MAAA,WAAA;KAAY,OAAM;;4BACjB,CAAf,YAAe,MAAA,YAAA,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({\n name: 'DatePanelMonthHeader'\n})\n\nconst { panelDate, panelType, toPrevYear, toNextYear, cls } = inject(DatePanelDIKey)!\n</script>\n"],"mappings":";;;;;;;;;EA2BA,MAAM,EAAE,WAAW,WAAW,YAAY,YAAY,QAAQ,OAAO,
|
|
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({\n name: 'DatePanelMonthHeader'\n})\n\nconst { panelDate, panelType, toPrevYear, toNextYear, cls } = inject(DatePanelDIKey)!\n</script>\n"],"mappings":";;;;;;;;;EA2BA,MAAM,EAAE,WAAW,WAAW,YAAY,YAAY,QAAQ,OAAO,eAAc;;uBA1BjF,mBAYM,OAAA,EAZA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA,EAAA,EAAA;IAChB,YAES,MAAA,YAAA,EAAA;KAFA,SAAO,MAAA,WAAA;KAAY,OAAM;;4BAClB,CAAd,YAAc,MAAA,WAAA,CAAA,CAAA,CAAA;;;IAGhB,mBAEO,QAAA;KAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,cAAA,CAAA;KAAkB,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,UAAA,QAAS;uBAChD,MAAA,UAAA,CAAU,KAAI,EAAA,EAAA;IAGnB,YAES,MAAA,YAAA,EAAA;KAFA,SAAO,MAAA,WAAA;KAAY,OAAM;;4BACjB,CAAf,YAAe,MAAA,YAAA,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({\n name: 'DatePanelYearHeader'\n})\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":";;;;;;;;;EA0BA,MAAM,EAAE,WAAW,gBAAgB,gBAAgB,QAAQ,OAAO,
|
|
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({\n name: 'DatePanelYearHeader'\n})\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":";;;;;;;;;EA0BA,MAAM,EAAE,WAAW,gBAAgB,gBAAgB,QAAQ,OAAO,eAAc;EAEhF,MAAM,YAAY,eAAe;GAC/B,OAAO,UAAU,MAAM,OAAQ,UAAU,MAAM,OAAO,KAAM;IAC7D;EAED,MAAM,UAAU,eAAe;GAC7B,OAAO,UAAU,QAAQ;IAC1B;;uBAjCC,mBAUM,OAAA,EAVA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA,EAAA,EAAA;IAChB,YAES,MAAA,YAAA,EAAA;KAFA,SAAO,MAAA,eAAA;KAAgB,OAAM;;4BACtB,CAAd,YAAc,MAAA,WAAA,CAAA,CAAA,CAAA;;;IAGhB,mBAA8C,QAAA,MAAA,gBAApC,UAAA,MAAS,GAAG,QAAG,gBAAG,QAAA,MAAO,EAAA,EAAA;IAEnC,YAES,MAAA,YAAA,EAAA;KAFA,SAAO,MAAA,eAAA;KAAgB,OAAM;;4BACrB,CAAf,YAAe,MAAA,YAAA,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({\n name: 'DatePanelDay',\n inheritAttrs: false\n})\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":";;;;;;;;;;AAqEA,MAAM,SAAS;;;;;;EA/Bf,MAAM,EAAE,WAAW,WAAW,YAAY,KAAK,kBAAkB,yBAC/D,OAAO,
|
|
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({\n name: 'DatePanelDay',\n inheritAttrs: false\n})\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":";;;;;;;;;;AAqEA,MAAM,SAAS;;;;;;EA/Bf,MAAM,EAAE,WAAW,WAAW,YAAY,KAAK,kBAAkB,yBAC/D,OAAO,eAAc;EAEvB,MAAM,OAAO,eAA8B;GACzC,OAAO,aAAa,UAAU,MAAM,WAAW,WAAW,aAAY;IACvE;EAED,SAAS,YAAY,KAAkB;GACrC,OAAO;IACL,IAAI,GAAG,YAAY,WAAW,IAAI,KAAK,CAAA;IACvC,IAAI,GAAG,eAAe,aAAa,IAAI,KAAK,CAAA;IAC5C,IAAI,GAAG,aAAa,WAAW,IAAI,KAAK,CAAA;IAC1C;;EAGF,SAAS,aAAa,KAAkB;GACtC,OAAO,CAAC,IAAI,GAAG,YAAY,YAAY,IAAI,KAAK,CAAC,CAAA;;EAEnD,SAAS,UAAU,KAAkB;GACnC,MAAM,MAAM;IACV,IAAI,EAAE,OAAM;IACZ,IAAI,GAAG,IAAI,KAAI;IACf,IAAI,GAAG,SAAS,IAAI,YAAY,KAAI;IACpC,IAAI,GAAG,YAAY,IAAI,aAAa,KAAI;IAC1C;GACA,IAAI,WAAW,OACb,OAAO,CAAC,GAAG,KAAK,GAAG,YAAY,IAAI,CAAA;GAErC,OAAO,CAAC,GAAG,KAAK,GAAG,aAAa,IAAI,CAAA;;EAKtC,SAAS,YAAY,MAAa;GAChC,IAAI,CAAC,WAAW,MAAM,OAAO;GAC7B,OAAO,KAAK,OAAO,OAAM,KAAM,WAAW,KAAK,OAAO,OAAM;;EAG9D,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;;EAGpE,SAAS,aAAa,MAAa;GACjC,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,CAAC,SAAS,UAAU;GAC1B,OAAO,KAAK,OAAO,OAAM,KAAM,MAAM,OAAO,OAAM;;EAGpD,SAAS,WAAW,MAAa;GAC/B,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,GAAG,OAAO,UAAU;GAC1B,OAAO,KAAK,OAAO,OAAM,KAAM,IAAI,OAAO,OAAM;;;2DA1FhD,mBAIK,MAAA,EAJA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA,EAAA,EAAA,EAAA,UAAA,KAAA,EACf,mBAEK,UAAA,MAAA,WAF4C,MAAA,SAAA,GAAX,YAAO;wBAA7C,mBAEK,MAAA,EAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,WAAA,CAAA,EAAA,EAAA,gBACZ,QAAO,EAAA,EAAA;mBAId,mBAaK,MAAA,EAbA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA,EAAA,EAAA,EAAA,UAAA,KAAA,EACf,mBAWK,UAAA,MAAA,WAVW,KAAA,QAAP,QAAG;wBADZ,mBAWK,MAAA;KATF,OAAO,IAAI,UAAO,OAAA;KAClB,OAAK,eAAE,UAAU,IAAG,CAAA;KACpB,KAAK,IAAI,KAAK;KACd,UAAK,WAAA,CAAG,IAAI,YAAY,MAAA,iBAAA,CAAiB,IAAI,KAAI;KACjD,eAAU,WAAA,CAAG,IAAI,YAAY,MAAA,qBAAA,CAAqB,IAAI,KAAI;QAE3D,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,aAAA,CAAA,EAAA,EAAA,gBACd,IAAI,KAAK,IAAG,EAAA,EAAA,CAAA,EAAA,IAAA,WAAA"}
|
|
@@ -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({\n name: 'DatePanelMonth'\n})\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":";;;;;;AAuDA,MAAM,SAAS;;;;;EA3Bf,MAAM,EAAE,KAAK,WAAW,WAAW,YAAY,kBAAkB,yBAC/D,OAAO,
|
|
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({\n name: 'DatePanelMonth'\n})\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":";;;;;;AAuDA,MAAM,SAAS;;;;;EA3Bf,MAAM,EAAE,KAAK,WAAW,WAAW,YAAY,kBAAkB,yBAC/D,OAAO,eAAc;EAEvB,MAAM,SAAS,eAAe;GAC5B,OAAO,cAAc,UAAU,MAAM,WAAW,WAAW,aAAY;IACxE;EAED,SAAS,YAAY,OAAsB;GACzC,OAAO;IACL,IAAI,GAAG,YAAY,WAAW,MAAM,KAAK,CAAA;IACzC,IAAI,GAAG,eAAe,aAAa,MAAM,KAAK,CAAA;IAC9C,IAAI,GAAG,aAAa,WAAW,MAAM,KAAK,CAAA;IAC5C;;EAGF,SAAS,aAAa,OAAsB;GAC1C,OAAO,CAAC,IAAI,GAAG,YAAY,YAAY,MAAM,KAAK,CAAC,CAAA;;EAGrD,SAAS,YAAY,OAAsB;GACzC,MAAM,MAAM,CAAC,IAAI,EAAE,OAAM,EAAG,IAAI,GAAG,YAAY,MAAM,aAAa,KAAK,CAAA;GACvE,IAAI,WAAW,OACb,OAAO,CAAC,GAAG,KAAK,GAAG,YAAY,MAAM,CAAA;GAEvC,OAAO,CAAC,GAAG,KAAK,GAAG,aAAa,MAAM,CAAA;;EAKxC,SAAS,YAAY,MAAa;GAChC,IAAI,CAAC,WAAW,MAAM,OAAO;GAC7B,OAAO,KAAK,OAAO,OAAM,KAAM,WAAW,KAAK,OAAO,OAAM;;EAG9D,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;;EAGpE,SAAS,aAAa,MAAa;GACjC,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,CAAC,SAAS,UAAU;GAC1B,OAAO,KAAK,OAAO,OAAM,KAAM,MAAM,OAAO,OAAM;;EAGpD,SAAS,WAAW,MAAa;GAC/B,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,GAAG,OAAO,UAAU;GAC1B,OAAO,KAAK,OAAO,OAAM,KAAM,IAAI,OAAO,OAAM;;;uBA5EhD,mBAUK,MAAA,EAVA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA,EAAA,EAAA,EAAA,UAAA,KAAA,EACf,mBAQK,UAAA,MAAA,WAPa,OAAA,QAAT,UAAK;wBADd,mBAQK,MAAA;KANF,KAAK,MAAM;KACX,OAAK,eAAE,YAAY,MAAK,CAAA;KACxB,UAAK,WAAA,CAAG,MAAM,YAAY,MAAA,iBAAA,CAAiB,MAAM,KAAI;KACrD,eAAU,WAAA,CAAG,MAAM,YAAY,MAAA,qBAAA,CAAqB,MAAM,KAAI;QAE/D,mBAA4D,QAAA,EAArD,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,aAAA,CAAA,EAAA,EAAA,gBAAmB,MAAM,MAAK,GAAG,KAAC,EAAA,CAAA,EAAA,IAAA,WAAA"}
|
|
@@ -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({\n name: 'DatePanelYear'\n})\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":";;;;;;;;;;EA4BA,MAAM,EAAE,WAAW,WAAW,YAAY,KAAK,kBAAkB,yBAC/D,OAAO,
|
|
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({\n name: 'DatePanelYear'\n})\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":";;;;;;;;;;EA4BA,MAAM,EAAE,WAAW,WAAW,YAAY,KAAK,kBAAkB,yBAC/D,OAAO,eAAc;EAEvB,MAAM,QAAQ,eAAe;GAC3B,OAAO,YAAY,UAAU,MAAM,WAAW,WAAW,aAAY;IACtE;EAED,SAAS,YAAY,MAAoB;GACvC,OAAO;IACL,IAAI,GAAG,SAAS,WAAW,KAAK,KAAK,CAAA;IACrC,IAAI,GAAG,eAAe,aAAa,KAAK,KAAK,CAAA;IAC7C,IAAI,GAAG,aAAa,WAAW,KAAK,KAAK,CAAA;IAC3C;;EAGF,SAAS,aAAa,MAAoB;GACxC,OAAO,CAAC,IAAI,GAAG,YAAY,YAAY,KAAK,KAAK,CAAC,CAAA;;EAGpD,SAAS,WAAW,MAAoB;GACtC,MAAM,MAAM,CAAC,IAAI,EAAE,OAAM,EAAG,IAAI,GAAG,YAAY,KAAK,aAAa,KAAK,CAAA;GACtE,IAAI,WAAW,OACb,OAAO,CAAC,GAAG,KAAK,GAAG,YAAY,KAAK,CAAA;GAEtC,OAAO,CAAC,GAAG,KAAK,GAAG,aAAa,KAAK,CAAA;;EAGvC,SAAS,YAAY,MAAa;GAChC,IAAI,CAAC,WAAW,MAAM,OAAO;GAC7B,OAAO,KAAK,SAAS,WAAW,KAAK;;EAGvC,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;;EAGpE,SAAS,aAAa,MAAa;GACjC,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,CAAC,SAAS,UAAU;GAC1B,OAAO,KAAK,SAAS,MAAM;;EAG7B,SAAS,WAAW,MAAa;GAC/B,IAAI,CAAC,UAAU,OAAO,OAAO;GAC7B,MAAM,GAAG,OAAO,UAAU;GAC1B,OAAO,KAAK,SAAS,IAAI;;;uBA1EzB,mBAUK,MAAA,EAVA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA,EAAA,EAAA,EAAA,UAAA,KAAA,EACf,mBAQK,UAAA,MAAA,WAPY,MAAA,QAAR,SAAI;wBADb,mBAQK,MAAA;KANF,KAAK,KAAK;KACV,OAAK,eAAE,WAAW,KAAI,CAAA;KACtB,UAAK,WAAA,CAAG,KAAK,YAAY,MAAA,iBAAA,CAAiB,KAAK,KAAI;KACnD,eAAU,WAAA,CAAG,KAAK,YAAY,MAAA,qBAAA,CAAqB,KAAK,KAAI;QAE7D,mBAAyD,QAAA,EAAlD,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,aAAA,CAAA,EAAA,EAAA,gBAAmB,KAAK,KAAI,EAAA,EAAA,CAAA,EAAA,IAAA,WAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-date-select.js","names":[],"sources":["../../../src/components/date-panel/use-date-select.ts"],"sourcesContent":["import type { Dater } from '@cat-kit/core'\nimport { type Ref, computed, type ComputedRef, shallowRef } from 'vue'\n\nimport type { DatePanelProps, PanelType, DatePanelEmits } from '../../types'\n\ninterface DateSelectOptions {\n props: DatePanelProps\n emit: DatePanelEmits\n panelType: Ref<PanelType>\n updatePanelDate: (date: Dater) => void\n}\n\ninterface UseDateSelectReturned {\n handleDateSelect: (date: Dater) => void\n handleDateRangeHover: (date: Dater) => void\n resetRangeDateTemp: () => void\n rangeDate: ComputedRef<[Dater, Dater] | undefined>\n}\n\nexport function useDateSelect(options: DateSelectOptions): UseDateSelectReturned {\n const { props, panelType, emit, updatePanelDate } = options\n\n /** 面板顺序 */\n const panelSequence: PanelType[] = ['year', 'month', 'day']\n\n const typeMapToPanelType = { year: 'year', month: 'month', date: 'day' }\n\n /**\n * 临时日期范围, 在点击第一次范围日期时使用\n */\n const rangeDateTemp = shallowRef<[Dater, Dater]>()\n let firstSelectedRangeDate: Dater | undefined = undefined\n\n const rangeDate = computed(() => {\n return rangeDateTemp.value || props.rangeDate\n })\n\n function resetRangeDateTemp() {\n rangeDateTemp.value = undefined\n firstSelectedRangeDate = undefined\n }\n\n /** 面板类型是否匹配日期类型 */\n const panelTypeMatchDateType = computed(() => {\n const { type } = props\n return typeMapToPanelType[type!] === panelType.value\n })\n\n /** 切换到下一个面板 */\n function switchNextPanel() {\n const index = panelSequence.indexOf(panelType.value)\n if (index === -1) return\n panelType.value = panelSequence[index + 1]!\n }\n\n /** 选择日期范围 */\n function handleDateRangeSelect(date: Dater) {\n if (panelTypeMatchDateType.value) {\n // 第一次选择\n if (!firstSelectedRangeDate) {\n firstSelectedRangeDate = date\n rangeDateTemp.value = [date, date]\n }\n // 第二次选择范围日期\n else {\n if (date.timestamp < firstSelectedRangeDate.timestamp) {\n rangeDateTemp.value = [date, firstSelectedRangeDate]\n } else {\n rangeDateTemp.value = [firstSelectedRangeDate, date]\n }\n emit('select:range-date', rangeDateTemp.value)\n\n // 选择完成, 清空临时日期范围\n resetRangeDateTemp()\n }\n } else {\n updatePanelDate(date)\n switchNextPanel()\n }\n }\n\n /** 范围日期悬停 */\n function handleDateRangeHover(date: Dater) {\n if (!panelTypeMatchDateType.value || !firstSelectedRangeDate) {\n return\n }\n if (date.timestamp < firstSelectedRangeDate.timestamp) {\n rangeDateTemp.value = [date, firstSelectedRangeDate]\n } else {\n rangeDateTemp.value = [firstSelectedRangeDate, date]\n }\n }\n\n function handleDateSingleSelect(date: Dater) {\n // 类型匹配则触发数据更新\n\n if (panelTypeMatchDateType.value) {\n emit('select:date', date)\n } else {\n updatePanelDate(date)\n switchNextPanel()\n }\n }\n\n /** 选择日期 */\n function handleDateSelect(date: Dater) {\n const { range } = props\n if (range) {\n handleDateRangeSelect(date)\n } else {\n handleDateSingleSelect(date)\n }\n }\n\n return { handleDateSelect, handleDateRangeHover, resetRangeDateTemp, rangeDate }\n}\n"],"mappings":";;AAmBA,SAAgB,cAAc,SAAmD;CAC/E,MAAM,EAAE,OAAO,WAAW,MAAM,oBAAoB;;CAGpD,MAAM,gBAA6B;EAAC;EAAQ;EAAS;EAAM;CAE3D,MAAM,qBAAqB;EAAE,MAAM;EAAQ,OAAO;EAAS,MAAM;EAAO;;;;CAKxE,MAAM,gBAAgB,YAA4B;CAClD,IAAI,yBAA4C,KAAA;CAEhD,MAAM,YAAY,eAAe;
|
|
1
|
+
{"version":3,"file":"use-date-select.js","names":[],"sources":["../../../src/components/date-panel/use-date-select.ts"],"sourcesContent":["import type { Dater } from '@cat-kit/core'\nimport { type Ref, computed, type ComputedRef, shallowRef } from 'vue'\n\nimport type { DatePanelProps, PanelType, DatePanelEmits } from '../../types'\n\ninterface DateSelectOptions {\n props: DatePanelProps\n emit: DatePanelEmits\n panelType: Ref<PanelType>\n updatePanelDate: (date: Dater) => void\n}\n\ninterface UseDateSelectReturned {\n handleDateSelect: (date: Dater) => void\n handleDateRangeHover: (date: Dater) => void\n resetRangeDateTemp: () => void\n rangeDate: ComputedRef<[Dater, Dater] | undefined>\n}\n\nexport function useDateSelect(options: DateSelectOptions): UseDateSelectReturned {\n const { props, panelType, emit, updatePanelDate } = options\n\n /** 面板顺序 */\n const panelSequence: PanelType[] = ['year', 'month', 'day']\n\n const typeMapToPanelType = { year: 'year', month: 'month', date: 'day' }\n\n /**\n * 临时日期范围, 在点击第一次范围日期时使用\n */\n const rangeDateTemp = shallowRef<[Dater, Dater]>()\n let firstSelectedRangeDate: Dater | undefined = undefined\n\n const rangeDate = computed(() => {\n return rangeDateTemp.value || props.rangeDate\n })\n\n function resetRangeDateTemp() {\n rangeDateTemp.value = undefined\n firstSelectedRangeDate = undefined\n }\n\n /** 面板类型是否匹配日期类型 */\n const panelTypeMatchDateType = computed(() => {\n const { type } = props\n return typeMapToPanelType[type!] === panelType.value\n })\n\n /** 切换到下一个面板 */\n function switchNextPanel() {\n const index = panelSequence.indexOf(panelType.value)\n if (index === -1) return\n panelType.value = panelSequence[index + 1]!\n }\n\n /** 选择日期范围 */\n function handleDateRangeSelect(date: Dater) {\n if (panelTypeMatchDateType.value) {\n // 第一次选择\n if (!firstSelectedRangeDate) {\n firstSelectedRangeDate = date\n rangeDateTemp.value = [date, date]\n }\n // 第二次选择范围日期\n else {\n if (date.timestamp < firstSelectedRangeDate.timestamp) {\n rangeDateTemp.value = [date, firstSelectedRangeDate]\n } else {\n rangeDateTemp.value = [firstSelectedRangeDate, date]\n }\n emit('select:range-date', rangeDateTemp.value)\n\n // 选择完成, 清空临时日期范围\n resetRangeDateTemp()\n }\n } else {\n updatePanelDate(date)\n switchNextPanel()\n }\n }\n\n /** 范围日期悬停 */\n function handleDateRangeHover(date: Dater) {\n if (!panelTypeMatchDateType.value || !firstSelectedRangeDate) {\n return\n }\n if (date.timestamp < firstSelectedRangeDate.timestamp) {\n rangeDateTemp.value = [date, firstSelectedRangeDate]\n } else {\n rangeDateTemp.value = [firstSelectedRangeDate, date]\n }\n }\n\n function handleDateSingleSelect(date: Dater) {\n // 类型匹配则触发数据更新\n\n if (panelTypeMatchDateType.value) {\n emit('select:date', date)\n } else {\n updatePanelDate(date)\n switchNextPanel()\n }\n }\n\n /** 选择日期 */\n function handleDateSelect(date: Dater) {\n const { range } = props\n if (range) {\n handleDateRangeSelect(date)\n } else {\n handleDateSingleSelect(date)\n }\n }\n\n return { handleDateSelect, handleDateRangeHover, resetRangeDateTemp, rangeDate }\n}\n"],"mappings":";;AAmBA,SAAgB,cAAc,SAAmD;CAC/E,MAAM,EAAE,OAAO,WAAW,MAAM,oBAAoB;;CAGpD,MAAM,gBAA6B;EAAC;EAAQ;EAAS;EAAM;CAE3D,MAAM,qBAAqB;EAAE,MAAM;EAAQ,OAAO;EAAS,MAAM;EAAO;;;;CAKxE,MAAM,gBAAgB,YAA4B;CAClD,IAAI,yBAA4C,KAAA;CAEhD,MAAM,YAAY,eAAe;EAC/B,OAAO,cAAc,SAAS,MAAM;GACpC;CAEF,SAAS,qBAAqB;EAC5B,cAAc,QAAQ,KAAA;EACtB,yBAAyB,KAAA;;;CAI3B,MAAM,yBAAyB,eAAe;EAC5C,MAAM,EAAE,SAAS;EACjB,OAAO,mBAAmB,UAAW,UAAU;GAC/C;;CAGF,SAAS,kBAAkB;EACzB,MAAM,QAAQ,cAAc,QAAQ,UAAU,MAAM;EACpD,IAAI,UAAU,IAAI;EAClB,UAAU,QAAQ,cAAc,QAAQ;;;CAI1C,SAAS,sBAAsB,MAAa;EAC1C,IAAI,uBAAuB,OAEzB,IAAI,CAAC,wBAAwB;GAC3B,yBAAyB;GACzB,cAAc,QAAQ,CAAC,MAAM,KAAK;SAG/B;GACH,IAAI,KAAK,YAAY,uBAAuB,WAC1C,cAAc,QAAQ,CAAC,MAAM,uBAAuB;QAEpD,cAAc,QAAQ,CAAC,wBAAwB,KAAK;GAEtD,KAAK,qBAAqB,cAAc,MAAM;GAG9C,oBAAoB;;OAEjB;GACL,gBAAgB,KAAK;GACrB,iBAAiB;;;;CAKrB,SAAS,qBAAqB,MAAa;EACzC,IAAI,CAAC,uBAAuB,SAAS,CAAC,wBACpC;EAEF,IAAI,KAAK,YAAY,uBAAuB,WAC1C,cAAc,QAAQ,CAAC,MAAM,uBAAuB;OAEpD,cAAc,QAAQ,CAAC,wBAAwB,KAAK;;CAIxD,SAAS,uBAAuB,MAAa;EAG3C,IAAI,uBAAuB,OACzB,KAAK,eAAe,KAAK;OACpB;GACL,gBAAgB,KAAK;GACrB,iBAAiB;;;;CAKrB,SAAS,iBAAiB,MAAa;EACrC,MAAM,EAAE,UAAU;EAClB,IAAI,OACF,sBAAsB,KAAK;OAE3B,uBAAuB,KAAK;;CAIhC,OAAO;EAAE;EAAkB;EAAsB;EAAoB;EAAW"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-panel-date.js","names":[],"sources":["../../../src/components/date-panel/use-panel-date.ts"],"sourcesContent":["import { date, type Dater } from '@cat-kit/core'\nimport { computed, type ComputedRef, shallowRef } from 'vue'\n\nimport type { DatePanelProps } from '../../types'\n\ninterface PanelDateOptions {\n props: DatePanelProps\n}\n\ninterface UsePanelDateReturned {\n panelDate: ComputedRef<Dater>\n updatePanelDate: (date: Dater) => void\n toPrevYear: () => void\n toNextYear: () => void\n toPrevMonth: () => void\n toNextMonth: () => void\n toPrevTenYears: () => void\n toNextTenYears: () => void\n}\n\nexport function usePanelDate(options: PanelDateOptions): UsePanelDateReturned {\n const { props } = options\n\n /** 当前面板日期 */\n const panelDate = shallowRef<Dater>(\n date((props.date || props.rangeDate?.[0])?.timestamp ?? new Date())\n )\n\n function updatePanelDate(date: Dater) {\n panelDate.value = date\n }\n\n function toPrevYear() {\n updatePanelDate(panelDate.value.calc(-1, 'years'))\n }\n\n function toNextYear() {\n updatePanelDate(panelDate.value.calc(1, 'years'))\n }\n\n function toPrevMonth() {\n updatePanelDate(panelDate.value.calc(-1, 'months'))\n }\n\n function toNextMonth() {\n updatePanelDate(panelDate.value.calc(1, 'months'))\n }\n\n function toPrevTenYears() {\n updatePanelDate(panelDate.value.calc(-10, 'years'))\n }\n\n function toNextTenYears() {\n updatePanelDate(panelDate.value.calc(10, 'years'))\n }\n\n return {\n panelDate: computed(() => panelDate.value),\n updatePanelDate,\n\n toPrevYear,\n toNextYear,\n toPrevMonth,\n toNextMonth,\n toPrevTenYears,\n toNextTenYears\n }\n}\n"],"mappings":";;;AAoBA,SAAgB,aAAa,SAAiD;CAC5E,MAAM,EAAE,UAAU;;CAGlB,MAAM,YAAY,WAChB,MAAM,MAAM,QAAQ,MAAM,YAAY,KAAK,6BAAa,IAAI,MAAM,CAAC,CACpE;CAED,SAAS,gBAAgB,MAAa;
|
|
1
|
+
{"version":3,"file":"use-panel-date.js","names":[],"sources":["../../../src/components/date-panel/use-panel-date.ts"],"sourcesContent":["import { date, type Dater } from '@cat-kit/core'\nimport { computed, type ComputedRef, shallowRef } from 'vue'\n\nimport type { DatePanelProps } from '../../types'\n\ninterface PanelDateOptions {\n props: DatePanelProps\n}\n\ninterface UsePanelDateReturned {\n panelDate: ComputedRef<Dater>\n updatePanelDate: (date: Dater) => void\n toPrevYear: () => void\n toNextYear: () => void\n toPrevMonth: () => void\n toNextMonth: () => void\n toPrevTenYears: () => void\n toNextTenYears: () => void\n}\n\nexport function usePanelDate(options: PanelDateOptions): UsePanelDateReturned {\n const { props } = options\n\n /** 当前面板日期 */\n const panelDate = shallowRef<Dater>(\n date((props.date || props.rangeDate?.[0])?.timestamp ?? new Date())\n )\n\n function updatePanelDate(date: Dater) {\n panelDate.value = date\n }\n\n function toPrevYear() {\n updatePanelDate(panelDate.value.calc(-1, 'years'))\n }\n\n function toNextYear() {\n updatePanelDate(panelDate.value.calc(1, 'years'))\n }\n\n function toPrevMonth() {\n updatePanelDate(panelDate.value.calc(-1, 'months'))\n }\n\n function toNextMonth() {\n updatePanelDate(panelDate.value.calc(1, 'months'))\n }\n\n function toPrevTenYears() {\n updatePanelDate(panelDate.value.calc(-10, 'years'))\n }\n\n function toNextTenYears() {\n updatePanelDate(panelDate.value.calc(10, 'years'))\n }\n\n return {\n panelDate: computed(() => panelDate.value),\n updatePanelDate,\n\n toPrevYear,\n toNextYear,\n toPrevMonth,\n toNextMonth,\n toPrevTenYears,\n toNextTenYears\n }\n}\n"],"mappings":";;;AAoBA,SAAgB,aAAa,SAAiD;CAC5E,MAAM,EAAE,UAAU;;CAGlB,MAAM,YAAY,WAChB,MAAM,MAAM,QAAQ,MAAM,YAAY,KAAK,6BAAa,IAAI,MAAM,CAAC,CACpE;CAED,SAAS,gBAAgB,MAAa;EACpC,UAAU,QAAQ;;CAGpB,SAAS,aAAa;EACpB,gBAAgB,UAAU,MAAM,KAAK,IAAI,QAAQ,CAAC;;CAGpD,SAAS,aAAa;EACpB,gBAAgB,UAAU,MAAM,KAAK,GAAG,QAAQ,CAAC;;CAGnD,SAAS,cAAc;EACrB,gBAAgB,UAAU,MAAM,KAAK,IAAI,SAAS,CAAC;;CAGrD,SAAS,cAAc;EACrB,gBAAgB,UAAU,MAAM,KAAK,GAAG,SAAS,CAAC;;CAGpD,SAAS,iBAAiB;EACxB,gBAAgB,UAAU,MAAM,KAAK,KAAK,QAAQ,CAAC;;CAGrD,SAAS,iBAAiB;EACxB,gBAAgB,UAAU,MAAM,KAAK,IAAI,QAAQ,CAAC;;CAGpD,OAAO;EACL,WAAW,eAAe,UAAU,MAAM;EAC1C;EAEA;EACA;EACA;EACA;EACA;EACA;EACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-panel.js","names":[],"sources":["../../../src/components/date-panel/use-panel.ts"],"sourcesContent":["import type { Dater } from '@cat-kit/core'\nimport { bem, type BEM } from '@veltra/utils'\nimport { provide, shallowRef, watch, type ShallowRef, type ComputedRef } from 'vue'\n\nimport type { DatePanelEmits, DatePanelProps, PanelType } from '../../types'\nimport { DatePanelDIKey } from './di'\nimport { useDateSelect } from './use-date-select'\nimport { usePanelDate } from './use-panel-date'\n\ninterface PanelOptions {\n props: DatePanelProps\n emit: DatePanelEmits\n}\n\ninterface UsePanelReturned {\n cls: BEM<'date-panel', 'u-'>\n panelType: ShallowRef<PanelType>\n panelDate: ComputedRef<Dater>\n}\n\nexport function usePanel(options: PanelOptions): UsePanelReturned {\n const { props, emit } = options\n\n /** 组件类 */\n const cls = bem('date-panel')\n\n /** 当前面板类型 */\n const panelType = shallowRef<PanelType>('day')\n\n watch(\n () => props.type,\n (type) => {\n if (type === 'date') {\n panelType.value = 'day'\n } else if (type === 'month') {\n panelType.value = 'month'\n } else if (type === 'year') {\n panelType.value = 'year'\n }\n },\n { immediate: true }\n )\n\n const { panelDate, updatePanelDate, ...panelDateRest } = usePanelDate({ props })\n\n const { handleDateSelect, handleDateRangeHover, rangeDate } = useDateSelect({\n props,\n emit,\n panelType,\n updatePanelDate\n })\n\n provide(DatePanelDIKey, {\n cls,\n\n panelProps: props,\n panelEmit: emit,\n\n panelType,\n panelDate,\n\n rangeDate,\n\n ...panelDateRest,\n\n handleDateSelect,\n handleDateRangeHover\n })\n\n return { cls, panelType, panelDate }\n}\n"],"mappings":";;;;;;AAoBA,SAAgB,SAAS,SAAyC;CAChE,MAAM,EAAE,OAAO,SAAS;;CAGxB,MAAM,MAAM,IAAI,aAAa;;CAG7B,MAAM,YAAY,WAAsB,MAAM;
|
|
1
|
+
{"version":3,"file":"use-panel.js","names":[],"sources":["../../../src/components/date-panel/use-panel.ts"],"sourcesContent":["import type { Dater } from '@cat-kit/core'\nimport { bem, type BEM } from '@veltra/utils'\nimport { provide, shallowRef, watch, type ShallowRef, type ComputedRef } from 'vue'\n\nimport type { DatePanelEmits, DatePanelProps, PanelType } from '../../types'\nimport { DatePanelDIKey } from './di'\nimport { useDateSelect } from './use-date-select'\nimport { usePanelDate } from './use-panel-date'\n\ninterface PanelOptions {\n props: DatePanelProps\n emit: DatePanelEmits\n}\n\ninterface UsePanelReturned {\n cls: BEM<'date-panel', 'u-'>\n panelType: ShallowRef<PanelType>\n panelDate: ComputedRef<Dater>\n}\n\nexport function usePanel(options: PanelOptions): UsePanelReturned {\n const { props, emit } = options\n\n /** 组件类 */\n const cls = bem('date-panel')\n\n /** 当前面板类型 */\n const panelType = shallowRef<PanelType>('day')\n\n watch(\n () => props.type,\n (type) => {\n if (type === 'date') {\n panelType.value = 'day'\n } else if (type === 'month') {\n panelType.value = 'month'\n } else if (type === 'year') {\n panelType.value = 'year'\n }\n },\n { immediate: true }\n )\n\n const { panelDate, updatePanelDate, ...panelDateRest } = usePanelDate({ props })\n\n const { handleDateSelect, handleDateRangeHover, rangeDate } = useDateSelect({\n props,\n emit,\n panelType,\n updatePanelDate\n })\n\n provide(DatePanelDIKey, {\n cls,\n\n panelProps: props,\n panelEmit: emit,\n\n panelType,\n panelDate,\n\n rangeDate,\n\n ...panelDateRest,\n\n handleDateSelect,\n handleDateRangeHover\n })\n\n return { cls, panelType, panelDate }\n}\n"],"mappings":";;;;;;AAoBA,SAAgB,SAAS,SAAyC;CAChE,MAAM,EAAE,OAAO,SAAS;;CAGxB,MAAM,MAAM,IAAI,aAAa;;CAG7B,MAAM,YAAY,WAAsB,MAAM;CAE9C,YACQ,MAAM,OACX,SAAS;EACR,IAAI,SAAS,QACX,UAAU,QAAQ;OACb,IAAI,SAAS,SAClB,UAAU,QAAQ;OACb,IAAI,SAAS,QAClB,UAAU,QAAQ;IAGtB,EAAE,WAAW,MAAM,CACpB;CAED,MAAM,EAAE,WAAW,iBAAiB,GAAG,kBAAkB,aAAa,EAAE,OAAO,CAAC;CAEhF,MAAM,EAAE,kBAAkB,sBAAsB,cAAc,cAAc;EAC1E;EACA;EACA;EACA;EACD,CAAC;CAEF,QAAQ,gBAAgB;EACtB;EAEA,YAAY;EACZ,WAAW;EAEX;EACA;EAEA;EAEA,GAAG;EAEH;EACA;EACD,CAAC;CAEF,OAAO;EAAE;EAAK;EAAW;EAAW"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-picker.js","names":[],"sources":["../../../src/components/date-picker/date-picker.vue"],"sourcesContent":["<template>\n <u-dropdown\n :class=\"className\"\n trigger=\"click\"\n width=\"auto\"\n ref=\"dropdownRef\"\n @update:visible=\"\"\n :disabled=\"disabled\"\n v-if=\"!readonly\"\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, type 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({\n name: 'DatePicker'\n})\n\nconst props = withDefaults(defineProps<DatePickerProps>(), {\n placeholder: '选择日期',\n type: 'date',\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\nwatch(\n () => props.modelValue,\n (modelValue) => {\n if (isUserActive()) return\n currentDate.value = modelValue ? date(modelValue) : undefined\n },\n { immediate: true }\n)\n\nconst displayedValue = computed(() => {\n return currentDate.value?.format(formatStr.value) ?? ''\n})\n\nconst commitSelectedDate = userAction((date: Dater) => {\n currentDate.value = date\n emit('update:modelValue', date.format(formatStr.value))\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}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuDA,MAAM,QAAQ;EAQd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,cAAa;EAE7B,MAAM,EAAE,cAAc,mBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"date-picker.js","names":[],"sources":["../../../src/components/date-picker/date-picker.vue"],"sourcesContent":["<template>\n <u-dropdown\n :class=\"className\"\n trigger=\"click\"\n width=\"auto\"\n ref=\"dropdownRef\"\n @update:visible=\"\"\n :disabled=\"disabled\"\n v-if=\"!readonly\"\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, type 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({\n name: 'DatePicker'\n})\n\nconst props = withDefaults(defineProps<DatePickerProps>(), {\n placeholder: '选择日期',\n type: 'date',\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\nwatch(\n () => props.modelValue,\n (modelValue) => {\n if (isUserActive()) return\n currentDate.value = modelValue ? date(modelValue) : undefined\n },\n { immediate: true }\n)\n\nconst displayedValue = computed(() => {\n return currentDate.value?.format(formatStr.value) ?? ''\n})\n\nconst commitSelectedDate = userAction((date: Dater) => {\n currentDate.value = date\n emit('update:modelValue', date.format(formatStr.value))\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}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuDA,MAAM,QAAQ;EAQd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,cAAa;EAE7B,MAAM,EAAE,cAAc,mBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,EAAC,EAAG,MAAK,EAAG;GAClF,MAAM;GACN,UAAU;GACV,UAAU;GACX,CAAA;EAED,MAAM,YAAY,eAAe;GAC/B,OAAO,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,MAAM,CAAA;IACjC;EAED,MAAM,cAAc,YAA4B;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;IACR;EAED,MAAM,cAAc,YAAkB;EAEtC,MAAM,EAAE,YAAY,iBAAiB,eAAc;EAEnD,YACQ,MAAM,aACX,eAAe;GACd,IAAI,cAAa,EAAG;GACpB,YAAY,QAAQ,aAAa,KAAK,WAAU,GAAI,KAAA;KAEtD,EAAE,WAAW,MACf,CAAA;EAEA,MAAM,iBAAiB,eAAe;GACpC,OAAO,YAAY,OAAO,OAAO,UAAU,MAAK,IAAK;IACtD;EAED,MAAM,qBAAqB,YAAY,SAAgB;GACrD,YAAY,QAAQ;GACpB,KAAK,qBAAqB,KAAK,OAAO,UAAU,MAAM,CAAA;IACvD;EAED,eAAe,iBAAiB,MAAa;GAC3C,MAAM,mBAAmB,KAAI;GAC7B,YAAY,OAAO,OAAM;;EAG3B,SAAS,cAAc;GACrB,YAAY,QAAQ,KAAA;GACpB,KAAK,qBAAqB,KAAA,EAAS;;;WA/G1B,MAAA,SAAA,IAAA,WAAA,EAPT,YA4Ba,MAAA,YAAA,EAAA;;IA3BV,OAAK,eAAE,UAAA,MAAS;IACjB,SAAQ;IACR,OAAM;aACF;IAAJ,KAAI;IACH,oBAAc,OAAA,OAAA,OAAA,WAAf;IACC,UAAU,MAAA,SAAA;;IAGA,SAAO,cAaN,CAZV,YAYU,MAAA,cAAA,EAAA;KAXP,MAAM,MAAA,KAAA;KACP,mBAAA;KACC,WAAW,QAAA;KACX,aAAa,QAAA;KACb,eAAa,eAAA;KACb,UAAU,MAAA,SAAA;KACV,SAAO;;KAEG,QAAM,cACqC,CAApD,YAAoD,MAAA,YAAA,EAAA,EAA3C,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA,EAAA,EAAA;6BAAsB,CAAZ,YAAY,MAAA,SAAA,CAAA,CAAA,CAAA;;;;;;;;;;;IAKtC,SAAO,cAC6E,CAA7F,YAA6F,MAAA,YAAA,EAAA;KAAhF,MAAA,MAAA,KAAA;KAAM,MAAA,QAAA;KAAM,iBAAA,QAAA;KAAe,MAAM,YAAA;KAAc,iBAAa;;;;;;;;iDAI7E,mBAEW,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAAA,gBADN,eAAA,SAAkB,MAAA,mBAAkB,CAAA,EAAA,EAAA,CAAA,EAAA,GAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-range-picker.js","names":[],"sources":["../../../src/components/date-range-picker/date-range-picker.vue"],"sourcesContent":["<template>\n <u-dropdown\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 v-if=\"!readonly\"\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 && 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, type 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 { DateRangePickerEmits, DateRangePickerProps, DropdownExposed } from '../../types'\nimport { UDatePanel } from '../date-panel'\nimport { UDropdown } from '../dropdown'\nimport { UIcon } from '../icon'\n\ndefineOptions({\n name: 'DateRangePicker'\n})\n\nconst props = withDefaults(defineProps<DateRangePickerProps>(), {\n placeholder: () => ['起始日期', '结束日期'],\n type: 'date',\n disabled: undefined,\n readonly: undefined,\n clearable: true\n})\n\nconst emit = defineEmits<DateRangePickerEmits>()\n\nconst cls = bem('date-range-picker')\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value), bem.is('disabled', disabled.value)]\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 displayedOfStart = computed(() => {\n return props.modelValue?.[0]\n})\n\nconst displayedOfEnd = computed(() => {\n return props.modelValue?.[1]\n})\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\nwatch(\n () => props.modelValue,\n (val) => {\n if (isUserActive()) return\n if (val?.length === 2) {\n currentRangeDate.value = [date(val[0]), date(val[1])]\n }\n },\n { immediate: true }\n)\n\nconst commitSelectedRange = userAction((rangeDate: [Dater, Dater] | undefined) => {\n currentRangeDate.value = rangeDate\n emit('update:modelValue', rangeDate?.map((d) => d.format(formatStr.value)) as [string, string])\n})\n\nasync function handleSelect(rangeDate: [Dater, Dater] | undefined) {\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}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8EA,MAAM,QAAQ;EAQd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,oBAAmB;EAEnC,MAAM,YAAY,eAAe;
|
|
1
|
+
{"version":3,"file":"date-range-picker.js","names":[],"sources":["../../../src/components/date-range-picker/date-range-picker.vue"],"sourcesContent":["<template>\n <u-dropdown\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 v-if=\"!readonly\"\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 && 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, type 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 { DateRangePickerEmits, DateRangePickerProps, DropdownExposed } from '../../types'\nimport { UDatePanel } from '../date-panel'\nimport { UDropdown } from '../dropdown'\nimport { UIcon } from '../icon'\n\ndefineOptions({\n name: 'DateRangePicker'\n})\n\nconst props = withDefaults(defineProps<DateRangePickerProps>(), {\n placeholder: () => ['起始日期', '结束日期'],\n type: 'date',\n disabled: undefined,\n readonly: undefined,\n clearable: true\n})\n\nconst emit = defineEmits<DateRangePickerEmits>()\n\nconst cls = bem('date-range-picker')\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value), bem.is('disabled', disabled.value)]\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 displayedOfStart = computed(() => {\n return props.modelValue?.[0]\n})\n\nconst displayedOfEnd = computed(() => {\n return props.modelValue?.[1]\n})\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\nwatch(\n () => props.modelValue,\n (val) => {\n if (isUserActive()) return\n if (val?.length === 2) {\n currentRangeDate.value = [date(val[0]), date(val[1])]\n }\n },\n { immediate: true }\n)\n\nconst commitSelectedRange = userAction((rangeDate: [Dater, Dater] | undefined) => {\n currentRangeDate.value = rangeDate\n emit('update:modelValue', rangeDate?.map((d) => d.format(formatStr.value)) as [string, string])\n})\n\nasync function handleSelect(rangeDate: [Dater, Dater] | undefined) {\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}\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=\"spring\" @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 ref=\"bodyRef\"\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 ref=\"footerRef\" :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 type { ScrollExposed } 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({\n name: 'Dialog',\n inheritAttrs: false\n})\n\nconst props = withDefaults(defineProps<DialogProps>(), {\n modal: true,\n modelValue: true,\n autoScroll: true\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\n/** 弹框body模板引用 */\nconst bodyRef = shallowRef<ScrollExposed>()\n\n/** 弹框footer模板引用 */\nconst footerRef = shallowRef<HTMLDivElement>()\n\nconst visible = defineModel<boolean>({\n default: false\n})\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({\n dialogRef,\n cls\n})\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 = {\n x: 0,\n y: 0\n}\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, {\n translate: `${x}px ${y}px`\n })\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, {\n visible\n})\n\ndefineExpose<DialogExposed>({\n close\n})\n</script>\n"],"mappings":"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"}
|
|
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=\"spring\" @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 ref=\"bodyRef\"\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 ref=\"footerRef\" :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 type { ScrollExposed } 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({\n name: 'Dialog',\n inheritAttrs: false\n})\n\nconst props = withDefaults(defineProps<DialogProps>(), {\n modal: true,\n modelValue: true,\n autoScroll: true\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\n/** 弹框body模板引用 */\nconst bodyRef = shallowRef<ScrollExposed>()\n\n/** 弹框footer模板引用 */\nconst footerRef = shallowRef<HTMLDivElement>()\n\nconst visible = defineModel<boolean>({\n default: false\n})\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({\n dialogRef,\n cls\n})\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 = {\n x: 0,\n y: 0\n}\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, {\n translate: `${x}px ${y}px`\n })\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, {\n visible\n})\n\ndefineExpose<DialogExposed>({\n close\n})\n</script>\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "../icon/style.js";
|
|
2
2
|
import "../scroll/style.js";
|
|
3
3
|
import "./style2.css";
|
|
4
|
-
import "@veltra/styles/
|
|
5
|
-
import "@veltra/styles/
|
|
4
|
+
import "@veltra/styles/transitions/fade.scss";
|
|
5
|
+
import "@veltra/styles/transitions/spring.scss";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-maximum.js","names":[],"sources":["../../../src/components/dialog/use-maximum.ts"],"sourcesContent":["import { useTransition } from '@veltra/compositions'\nimport { type BEM, removeStyles, setStyles } from '@veltra/utils'\nimport { shallowRef, type ShallowRef } from 'vue'\n\ninterface Options {\n cls: BEM<'dialog'>\n dialogRef: ShallowRef<HTMLDivElement | undefined>\n}\n\ninterface Returned {\n /** 是否为最大状态 */\n maximized: ShallowRef<boolean>\n /** 切换最大状态 */\n toggleMaximize: (maxim: boolean) => void\n}\n\n// 最大化过程\n// 1. 先设置一个高度才会有过渡动画\n// 2. 在下一个帧应用最大化时的类名\n// 3. 在进入动画结束时移除高度\n\nexport function useMaximum(options: Options): Returned {\n const { dialogRef } = options\n\n const maximized = shallowRef(false)\n\n const maximizeTransition = useTransition('css', {\n target: dialogRef,\n name: 'dialog-maximize',\n keepEnterTo: true,\n afterLeave() {\n dialogRef.value && removeStyles(dialogRef.value, ['height'])\n }\n })\n\n /** 切换最大化 */\n const toggleMaximize = (maxim: boolean): void => {\n maximized.value = maxim\n const dom = dialogRef.value\n if (!dom) return\n if (maxim) {\n // 先设置一个高度才会有过渡动画\n setStyles(dom, { height: `${dom.offsetHeight}px` })\n maximizeTransition.enter()\n } else {\n maximizeTransition.leave()\n }\n }\n\n return { maximized, toggleMaximize }\n}\n"],"mappings":";;;;AAqBA,SAAgB,WAAW,SAA4B;CACrD,MAAM,EAAE,cAAc;CAEtB,MAAM,YAAY,WAAW,MAAM;CAEnC,MAAM,qBAAqB,cAAc,OAAO;EAC9C,QAAQ;EACR,MAAM;EACN,aAAa;EACb,aAAa;
|
|
1
|
+
{"version":3,"file":"use-maximum.js","names":[],"sources":["../../../src/components/dialog/use-maximum.ts"],"sourcesContent":["import { useTransition } from '@veltra/compositions'\nimport { type BEM, removeStyles, setStyles } from '@veltra/utils'\nimport { shallowRef, type ShallowRef } from 'vue'\n\ninterface Options {\n cls: BEM<'dialog'>\n dialogRef: ShallowRef<HTMLDivElement | undefined>\n}\n\ninterface Returned {\n /** 是否为最大状态 */\n maximized: ShallowRef<boolean>\n /** 切换最大状态 */\n toggleMaximize: (maxim: boolean) => void\n}\n\n// 最大化过程\n// 1. 先设置一个高度才会有过渡动画\n// 2. 在下一个帧应用最大化时的类名\n// 3. 在进入动画结束时移除高度\n\nexport function useMaximum(options: Options): Returned {\n const { dialogRef } = options\n\n const maximized = shallowRef(false)\n\n const maximizeTransition = useTransition('css', {\n target: dialogRef,\n name: 'dialog-maximize',\n keepEnterTo: true,\n afterLeave() {\n dialogRef.value && removeStyles(dialogRef.value, ['height'])\n }\n })\n\n /** 切换最大化 */\n const toggleMaximize = (maxim: boolean): void => {\n maximized.value = maxim\n const dom = dialogRef.value\n if (!dom) return\n if (maxim) {\n // 先设置一个高度才会有过渡动画\n setStyles(dom, { height: `${dom.offsetHeight}px` })\n maximizeTransition.enter()\n } else {\n maximizeTransition.leave()\n }\n }\n\n return { maximized, toggleMaximize }\n}\n"],"mappings":";;;;AAqBA,SAAgB,WAAW,SAA4B;CACrD,MAAM,EAAE,cAAc;CAEtB,MAAM,YAAY,WAAW,MAAM;CAEnC,MAAM,qBAAqB,cAAc,OAAO;EAC9C,QAAQ;EACR,MAAM;EACN,aAAa;EACb,aAAa;GACX,UAAU,SAAS,aAAa,UAAU,OAAO,CAAC,SAAS,CAAC;;EAE/D,CAAC;;CAGF,MAAM,kBAAkB,UAAyB;EAC/C,UAAU,QAAQ;EAClB,MAAM,MAAM,UAAU;EACtB,IAAI,CAAC,KAAK;EACV,IAAI,OAAO;GAET,UAAU,KAAK,EAAE,QAAQ,GAAG,IAAI,aAAa,KAAK,CAAC;GACnD,mBAAmB,OAAO;SAE1B,mBAAmB,OAAO;;CAI9B,OAAO;EAAE;EAAW;EAAgB"}
|
|
@@ -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\">\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 <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({\n name: 'Drawer',\n inheritAttrs: false\n})\n\nconst props = withDefaults(defineProps<DrawerProps>(), {\n direction: 'right',\n closable: true\n})\n\nconst emit = defineEmits<DrawerEmits>()\n\nconst cls = bem('drawer')\nconst overlayCls = bem('drawer-overlay')\n\nconst overlayVisible = defineModel<boolean>({\n default: false\n})\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;EAKd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,SAAQ;EACxB,MAAM,aAAa,IAAI,iBAAgB;EAEvC,MAAM,iBAAiB,SAAoB,SAAA,aAE1C;EAED,MAAM,gBAAgB,WAAW,MAAK;EAGtC,MAAM,iBAAiB,eAAe;
|
|
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\">\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 <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({\n name: 'Drawer',\n inheritAttrs: false\n})\n\nconst props = withDefaults(defineProps<DrawerProps>(), {\n direction: 'right',\n closable: true\n})\n\nconst emit = defineEmits<DrawerEmits>()\n\nconst cls = bem('drawer')\nconst overlayCls = bem('drawer-overlay')\n\nconst overlayVisible = defineModel<boolean>({\n default: false\n})\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;EAKd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,SAAQ;EACxB,MAAM,aAAa,IAAI,iBAAgB;EAEvC,MAAM,iBAAiB,SAAoB,SAAA,aAE1C;EAED,MAAM,gBAAgB,WAAW,MAAK;EAGtC,MAAM,iBAAiB,eAAe;GACpC,OAAO,gBAAgB,MAAM;IAC9B;EAGD,MAAM,cAAc,eAAe;GACjC,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,MAAM,UAAU,CAAA;IACvC;EAGD,MAAM,cAAc,eAAe;GAGjC,OAAO,EAAA;IACR;EAED,MAAM,gBAAgB;GACpB,cAAc,QAAQ;;EAGxB,MAAM,2BAA2B;GAC/B,eAAe,QAAQ;;EAIzB,MAAM,cAAc;GAClB,cAAc,QAAQ;GACtB,KAAK,QAAO;;;uBA/EZ,YAmBW,UAAA,EAnBD,IAAG,QAAM,EAAA,CACjB,YAiBa,YAAA;IAjBD,MAAK;IAAO,MAAK;IAAiB;;2BAgBtC,CAfK,eAAA,SAAA,WAAA,EAAX,mBAeM,OAAA;;KAfsB,OAAK,eAAE,MAAA,WAAA,CAAW,EAAC;KAAG,OAAK,eAAA,EAAA,QAAY,MAAA,OAAA,EAAM,EAAA,CAAA;KAAO,SAAO;QACrF,YAaa,YAAA;KAbA,MAAM,eAAA;KAAgB,QAAA;KAAQ,cAAa;;4BAYhD,CATE,cAAA,SAAA,WAAA,EAFR,mBAWM,OAXN,WAWM,EAAA,KAAA,GAAA,EAVIA,KAAAA,QAAM;MAEb,OAAO,YAAA;MACP,OAAO,YAAA;MACP,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;UAEwC,QAAA,aAAA,WAAA,EAAnD,mBAEO,QAAA;;MAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA;MAAY,SAAO;SACpC,YAA0B,MAAA,YAAA,EAAA,MAAA;6BAAT,CAAT,YAAS,MAAA,MAAA,CAAA,CAAA,CAAA;;kDAEnB,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,GAAA,IAAA,mBAAA,QAAA,KAAA,CAAA,CAAA"}
|
|
@@ -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 } from 'vue'\n\nimport type { DropdownProps, DropdownExposed, DropdownEmits } from '../../types'\nimport { UNodeRender } from '../node-render'\nimport { useNest } from '../tip/use-nest'\n\ndefineOptions({ name: 'Dropdown', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<DropdownProps>(), { trigger: 'hover', contentTag: 'div' })\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: 'bottom',\n alignment: 'start',\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;EAEd,MAAM,OAAO;EAEb,MAAM,QAAQ,UAAA;EAOd,MAAM,MAAM,IAAI,WAAU;EAE1B,MAAM,uBAAuB,eAAe;GAC1C,IAAI,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;GAC7B,MAAM,YAAY,MAAM;
|
|
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 } from 'vue'\n\nimport type { DropdownProps, DropdownExposed, DropdownEmits } from '../../types'\nimport { UNodeRender } from '../node-render'\nimport { useNest } from '../tip/use-nest'\n\ndefineOptions({ name: 'Dropdown', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<DropdownProps>(), { trigger: 'hover', contentTag: 'div' })\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: 'bottom',\n alignment: 'start',\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,2 +1,2 @@
|
|
|
1
1
|
import "./style2.css";
|
|
2
|
-
import "@veltra/styles/
|
|
2
|
+
import "@veltra/styles/transitions/slide.scss";
|
|
@@ -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({\n name: 'Empty'\n})\n\nwithDefaults(defineProps<EmptyProps>(), {\n size: 48,\n text: '暂无数据'\n})\n\nconst cls = bem('empty')\n</script>\n"],"mappings":";;;;;;;;;;;;;EAuBA,MAAM,MAAM,IAAI,QAAO;;uBAtBrB,mBAGO,QAAA,EAHA,OAAK,eAAE,MAAA,
|
|
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({\n name: 'Empty'\n})\n\nwithDefaults(defineProps<EmptyProps>(), {\n size: 48,\n text: '暂无数据'\n})\n\nconst cls = bem('empty')\n</script>\n"],"mappings":";;;;;;;;;;;;;EAuBA,MAAM,MAAM,IAAI,QAAO;;uBAtBrB,mBAGO,QAAA,EAHA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,EAAA,EAAA,CACjB,YAAyC,MAAA,YAAA,EAAA,EAAhC,MAAM,QAAA,MAAI,EAAA;2BAAY,CAAT,YAAS,MAAA,MAAA,CAAA,CAAA,CAAA;;oBAC/B,mBAAqB,OAAA,MAAA,gBAAb,QAAA,KAAI,EAAA,EAAA,CAAA,EAAA,EAAA"}
|
|
@@ -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=\"{ paddingLeft: `${i * 14}px` }\"\n >\n <span v-if=\"i > 0\" :class=\"cls.e('path-tree-branch')\">└</span>\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({\n name: 'ExpressionPathPreview'\n})\n\ndefineProps<{\n path: VariableItem[]\n}>()\n\nconst cls = bem('expression-editor')\n</script>\n"],"mappings":";;;;;;;;EA8BA,MAAM,MAAM,IAAI,oBAAmB;;uBA7BjC,mBAaM,OAAA,EAbA,OAAK,eAAE,MAAA,
|
|
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=\"{ paddingLeft: `${i * 14}px` }\"\n >\n <span v-if=\"i > 0\" :class=\"cls.e('path-tree-branch')\">└</span>\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({\n name: 'ExpressionPathPreview'\n})\n\ndefineProps<{\n path: VariableItem[]\n}>()\n\nconst cls = bem('expression-editor')\n</script>\n"],"mappings":";;;;;;;;EA8BA,MAAM,MAAM,IAAI,oBAAmB;;uBA7BjC,mBAaM,OAAA,EAbA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,eAAA,CAAA,EAAA,EAAA,CAChB,mBAAoD,OAAA,EAA9C,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,qBAAA,CAAA,EAAA,EAAwB,QAAI,EAAA,EAC9C,mBAUK,MAAA,EAVA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,YAAA,CAAA,EAAA,EAAA,EAAA,UAAA,KAAA,EACf,mBAQK,UAAA,MAAA,WAPiB,QAAA,OAAZ,MAAM,MAAC;wBADjB,mBAQK,MAAA;KANF,KAAG,GAAK,EAAC,GAAI,KAAK,SAAS,KAAK;KAChC,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,EAAC,iBAAA,EAAoB,MAAA,IAAA,CAAI,GAAE,UAAW,MAAM,QAAA,KAAK,SAAM,EAAA,CAAA,CAAA;KACnE,OAAK,eAAA,EAAA,aAAA,GAAoB,IAAC,GAAA,KAAA,CAAA;QAEf,IAAC,KAAA,WAAA,EAAb,mBAA8D,QAAA;;KAA1C,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,mBAAA,CAAA;OAAsB,KAAC,EAAA,IAAA,mBAAA,QAAA,KAAA,EACvD,mBAA+D,QAAA,EAAxD,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,kBAAA,CAAA,EAAA,EAAA,gBAAwB,KAAK,MAAK,EAAA,EAAA,CAAA,EAAA,EAAA"}
|