@veltra/desktop 1.1.34 → 1.1.36

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.
Files changed (46) hide show
  1. package/dist/components/action/action-group.vue.d.ts +2 -2
  2. package/dist/components/action/action.vue.d.ts +2 -2
  3. package/dist/components/auto-complete/auto-complete.vue.d.ts +2 -2
  4. package/dist/components/cascade/cascade.vue.d.ts +3 -3
  5. package/dist/components/checkbox/checkbox-button.vue.d.ts +1 -1
  6. package/dist/components/checkbox-group/checkbox-group.vue.d.ts +2 -2
  7. package/dist/components/date-panel/date-panel.vue.d.ts +1 -1
  8. package/dist/components/date-picker/date-picker.vue.d.ts +2 -2
  9. package/dist/components/date-range-picker/date-range-picker.vue.d.ts +2 -2
  10. package/dist/components/dialog/dialog.js +5 -12
  11. package/dist/components/dialog/dialog.js.map +1 -1
  12. package/dist/components/dialog/dialog.vue.d.ts +2 -1
  13. package/dist/components/dialog/style.js +1 -2
  14. package/dist/components/dialog/use-maximum.js +7 -1
  15. package/dist/components/dialog/use-maximum.js.map +1 -1
  16. package/dist/components/empty/empty.vue.d.ts +1 -1
  17. package/dist/components/file-picker/file-picker.vue.d.ts +1 -1
  18. package/dist/components/input/input.vue.d.ts +6 -6
  19. package/dist/components/loading/style2.css +90 -159
  20. package/dist/components/multi-select/multi-select.vue.d.ts +3 -3
  21. package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +3 -3
  22. package/dist/components/number-input/number-input.vue.d.ts +2 -2
  23. package/dist/components/number-range-input/number-range-input.vue.d.ts +2 -2
  24. package/dist/components/password-input/password-input.vue.d.ts +1 -1
  25. package/dist/components/radio-group/radio-group.vue.d.ts +2 -2
  26. package/dist/components/rich-text-editor/rich-text-editor.vue.d.ts +1 -1
  27. package/dist/components/select/select.vue.d.ts +2 -2
  28. package/dist/components/table/style2.css +4 -7
  29. package/dist/components/tabs/tabs-horizontal.vue.d.ts +2 -2
  30. package/dist/components/tabs/tabs-vertical.vue.d.ts +2 -2
  31. package/dist/components/tabs/tabs.vue.d.ts +2 -2
  32. package/dist/components/textarea/textarea.vue.d.ts +2 -2
  33. package/dist/components/tip/tip.vue.d.ts +3 -3
  34. package/dist/components/tree-select/tree-select.vue.d.ts +3 -3
  35. package/dist/index.d.ts +3 -3
  36. package/dist/types/dialog.d.ts +5 -1
  37. package/dist/types/index.d.ts +2 -2
  38. package/dist/types/loading.d.ts +1 -1
  39. package/package.json +6 -6
  40. package/src/components/dialog/dialog.vue +4 -11
  41. package/src/components/dialog/style.ts +1 -2
  42. package/src/components/dialog/use-maximum.ts +8 -1
  43. package/src/components/loading/style.scss +126 -355
  44. package/src/components/table/style.scss +4 -14
  45. package/src/types/dialog.ts +5 -0
  46. package/src/types/loading.ts +1 -1
@@ -6,12 +6,12 @@ type __VLS_Slots = {
6
6
  default?: () => VNode[];
7
7
  };
8
8
  declare const __VLS_base: import("vue").DefineComponent<ActionGroupProps, _ActionGroupExposed, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ActionGroupProps> & Readonly<{}>, {
9
- size: "small" | "default" | "large";
10
9
  type: import("@veltra/utils").ColorType;
11
10
  text: boolean;
11
+ size: "small" | "default" | "large";
12
12
  max: number;
13
- loading: boolean;
14
13
  circle: boolean;
14
+ loading: boolean;
15
15
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
16
16
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
17
17
  declare const _default: typeof __VLS_export;
@@ -12,11 +12,11 @@ declare const __VLS_base: import("vue").DefineComponent<ActionProps, {}, {}, {},
12
12
  }, string, import("vue").PublicProps, Readonly<ActionProps> & Readonly<{
13
13
  onRun?: (() => any) | undefined;
14
14
  }>, {
15
- size: import("@veltra/utils").ComponentSize;
16
15
  type: ButtonType;
17
16
  text: boolean;
18
- loading: boolean;
17
+ size: import("@veltra/utils").ComponentSize;
19
18
  circle: boolean;
19
+ loading: boolean;
20
20
  inDropdown: boolean;
21
21
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
22
22
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -22,10 +22,10 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
22
22
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
23
23
  onSelect?: ((value: string) => any) | undefined;
24
24
  }>, {
25
- disabled: boolean;
26
- readonly: boolean;
27
25
  placeholder: string;
28
26
  clearable: boolean;
27
+ disabled: boolean;
28
+ readonly: boolean;
29
29
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
30
30
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
31
31
  declare const _default: typeof __VLS_export;
@@ -9,8 +9,6 @@ declare const __VLS_export: import("vue").DefineComponent<CascadeProps, {}, {},
9
9
  onClear?: (() => any) | undefined;
10
10
  onChange?: ((...args: [value?: string | undefined, label?: string | undefined, item?: Record<string, any> | undefined] | [value: string[], label: string[], data: Record<string, any>[]]) => any) | undefined;
11
11
  }>, {
12
- disabled: boolean;
13
- readonly: boolean;
14
12
  labelKey: string;
15
13
  valueKey: string;
16
14
  childrenKey: string;
@@ -18,8 +16,10 @@ declare const __VLS_export: import("vue").DefineComponent<CascadeProps, {}, {},
18
16
  placeholder: string;
19
17
  clearable: boolean;
20
18
  filterable: boolean;
21
- visibilityLimit: number;
19
+ disabled: boolean;
20
+ readonly: boolean;
22
21
  separator: string;
22
+ visibilityLimit: number;
23
23
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
24
24
  declare const _default: typeof __VLS_export;
25
25
  //#endregion
@@ -17,9 +17,9 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
17
17
  "onUpdate:modelValue"?: ((checked: boolean) => any) | undefined;
18
18
  onChange?: ((checked: boolean) => any) | undefined;
19
19
  }>, {
20
+ type: import("@veltra/utils").ColorType;
20
21
  disabled: boolean;
21
22
  readonly: boolean;
22
- type: import("@veltra/utils").ColorType;
23
23
  round: boolean;
24
24
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
25
25
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -12,10 +12,10 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
12
12
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
13
13
  "onUpdate:modelValue"?: ((value: any[]) => any) | undefined;
14
14
  }>, {
15
- disabled: boolean;
16
- readonly: boolean;
17
15
  labelKey: string;
18
16
  valueKey: string;
17
+ disabled: boolean;
18
+ readonly: boolean;
19
19
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
20
20
  declare const _default: typeof __VLS_export;
21
21
  //#endregion
@@ -7,8 +7,8 @@ declare const __VLS_export: import("vue").DefineComponent<DatePanelProps, {}, {}
7
7
  "onSelect:range-date"?: ((rangeDate?: [import("@cat-kit/core").Dater, import("@cat-kit/core").Dater] | undefined) => any) | undefined;
8
8
  "onSelect:date"?: ((date: import("@cat-kit/core").Dater) => any) | undefined;
9
9
  }>, {
10
- size: import("@veltra/utils").ComponentSize;
11
10
  type: "date" | "month" | "year";
11
+ size: import("@veltra/utils").ComponentSize;
12
12
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
13
13
  declare const _default: typeof __VLS_export;
14
14
  //#endregion
@@ -5,11 +5,11 @@ declare const __VLS_export: import("vue").DefineComponent<DatePickerProps, {}, {
5
5
  }, string, import("vue").PublicProps, Readonly<DatePickerProps> & Readonly<{
6
6
  "onUpdate:modelValue"?: ((value?: string | number | Date | undefined) => any) | undefined;
7
7
  }>, {
8
- disabled: boolean;
9
- readonly: boolean;
10
8
  type: "date" | "month" | "year";
11
9
  placeholder: string;
12
10
  clearable: boolean;
11
+ disabled: boolean;
12
+ readonly: boolean;
13
13
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
14
  declare const _default: typeof __VLS_export;
15
15
  //#endregion
@@ -5,11 +5,11 @@ declare const __VLS_export: import("vue").DefineComponent<DateRangePickerProps,
5
5
  }, string, import("vue").PublicProps, Readonly<DateRangePickerProps> & Readonly<{
6
6
  "onUpdate:modelValue"?: ((value?: [string, string] | undefined) => any) | undefined;
7
7
  }>, {
8
- disabled: boolean;
9
- readonly: boolean;
10
8
  type: "date" | "month" | "year";
11
9
  placeholder: [string, string];
12
10
  clearable: boolean;
11
+ disabled: boolean;
12
+ readonly: boolean;
13
13
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
14
  declare const _default: typeof __VLS_export;
15
15
  //#endregion
@@ -24,7 +24,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
24
24
  type: Boolean,
25
25
  default: true
26
26
  },
27
- fullscreen: { type: Boolean }
27
+ fullscreen: { type: Boolean },
28
+ transition: { default: "fade-scale" }
28
29
  }, {
29
30
  "modelValue": {
30
31
  type: Boolean,
@@ -46,10 +47,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
46
47
  const dialogRef = shallowRef();
47
48
  /** 弹框头部模板引用 */
48
49
  const headerRef = shallowRef();
49
- /** 弹框body模板引用 */
50
- const bodyRef = shallowRef();
51
- /** 弹框footer模板引用 */
52
- const footerRef = shallowRef();
53
50
  const visible = useModel(__props, "modelValue");
54
51
  const overlayVisible = shallowRef(false);
55
52
  const dialogVisible = shallowRef(false);
@@ -147,7 +144,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
147
144
  onKeyup: withKeys(close, ["esc"]),
148
145
  tabindex: "0"
149
146
  }, [createVNode(Transition, {
150
- name: "spring",
147
+ name: __props.transition,
151
148
  onAfterLeave: onAfterDialogLeave
152
149
  }, {
153
150
  default: withCtx(() => [dialogVisible.value ? (openBlock(), createElementBlock("div", mergeProps({ key: 0 }, _ctx.$attrs, {
@@ -195,8 +192,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
195
192
  createVNode(unref(_sfc_main$2), {
196
193
  tag: "section",
197
194
  class: normalizeClass(unref(cls).e("body")),
198
- ref_key: "bodyRef",
199
- ref: bodyRef,
200
195
  "content-style": { height: unref(maximized) ? "100%" : void 0 },
201
196
  onTransitionend: _cache[6] || (_cache[6] = withModifiers(() => {}, ["stop"])),
202
197
  onTransitioncancel: _cache[7] || (_cache[7] = withModifiers(() => {}, ["stop"]))
@@ -206,13 +201,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
206
201
  }, 8, ["class", "content-style"]),
207
202
  _ctx.$slots.footer ? (openBlock(), createElementBlock("section", {
208
203
  key: 0,
209
- ref_key: "footerRef",
210
- ref: footerRef,
211
204
  class: normalizeClass(footerCls)
212
- }, [renderSlot(_ctx.$slots, "footer", normalizeProps(guardReactiveProps({ close })))], 512)) : createCommentVNode("v-if", true)
205
+ }, [renderSlot(_ctx.$slots, "footer", normalizeProps(guardReactiveProps({ close })))])) : createCommentVNode("v-if", true)
213
206
  ], 16)) : createCommentVNode("v-if", true)]),
214
207
  _: 3
215
- })], 34)), [[vShow, overlayVisible.value]]) : createCommentVNode("v-if", true)]),
208
+ }, 8, ["name"])], 34)), [[vShow, overlayVisible.value]]) : createCommentVNode("v-if", true)]),
216
209
  _: 3
217
210
  })])),
218
211
  createCommentVNode(" 触发 "),
@@ -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({ name: 'Dialog', inheritAttrs: false })\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>({ default: false })\n\nconst overlayVisible = shallowRef(false)\nconst dialogVisible = shallowRef(false)\n\nwatch(visible, (v) => {\n if (v) {\n overlayVisible.value = true\n } else {\n dialogVisible.value = false\n }\n})\n\nfunction getTriggerNode() {\n const nodes = slots.trigger?.()\n if (!nodes?.length) return null\n\n const node = extractNormalVNodes(nodes)[0]\n return node\n}\n\nfunction onOverlayEnter() {\n dialogVisible.value = true\n}\n\nfunction onAfterDialogLeave() {\n overlayVisible.value = false\n}\n\nconst { toggleMaximize, maximized } = useMaximum({ dialogRef, cls })\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value)]\n})\n\n/**\n * 是否弹出过, 用于控制下一次弹出时是否采用v-show的方式\n */\nlet opened = false\n\nwatch(visible, (v) => {\n if (!v) return\n\n if (!opened) opened = true\n\n // 初始化位置偏移量\n translated.x = 0\n translated.y = 0\n\n nextTick(() => {\n setStyles(overlayRef.value!, { zIndex: zIndex() })\n })\n})\n\n/** dialog位移的位置 */\nconst translated = { x: 0, y: 0 }\n\n/**\n * 更新弹框位置\n * 使用独立 `translate` 而非整体 `transform`, 与 spring 动画的 `scale` 解耦,\n * 避免动画期间整体 transform 被关键帧覆盖、动画结束后又\"啪\"地跳回内联位置\n */\nconst updateDialogTransform = (x: number, y: number) => {\n const dom = dialogRef.value\n if (!dom) return\n setStyles(dom, { translate: `${x}px ${y}px` })\n}\n\n// 运用拖拽\nuseDrag({\n target: headerRef,\n\n onDragStart() {\n handleIncreaseZIndex()\n },\n\n onDrag({ x, y }) {\n if (maximized.value) return\n updateDialogTransform(translated.x + x, translated.y + y)\n },\n\n onDragEnd({ x, y }) {\n if (maximized.value) return\n translated.x += x\n translated.y += y\n\n // 字体模糊的bug修正\n if (translated.x % 2 !== 0) {\n translated.x += x < 0 ? 1 : -1\n }\n if (translated.y % 2 !== 0) {\n translated.y += y < 0 ? 1 : -1\n }\n updateDialogTransform(translated.x, translated.y)\n }\n})\n\nfunction handleIncreaseZIndex() {\n if (props.modal) return\n setStyles(overlayRef.value!, { zIndex: zIndex() })\n}\n\n/** 关闭 */\nconst close = () => {\n visible.value = false\n}\n\nprovide(DialogDIKey, { visible })\n\ndefineExpose<DialogExposed>({ close })\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"dialog.js","names":["$attrs","$slots"],"sources":["../../../src/components/dialog/dialog.vue"],"sourcesContent":["<template>\n <Teleport to=\"body\">\n <transition name=\"fade\" @after-leave=\"emit('closed')\" @enter=\"onOverlayEnter\">\n <div\n v-if=\"overlayVisible || opened\"\n v-show=\"overlayVisible\"\n :class=\"[cls.e('overlay'), bem.is('modal', modal)]\"\n ref=\"overlayRef\"\n @mousedown=\"modal && close()\"\n @keyup.esc=\"close\"\n tabindex=\"0\"\n >\n <transition :name=\"transition\" @after-leave=\"onAfterDialogLeave\">\n <div\n v-if=\"dialogVisible\"\n v-bind=\"$attrs\"\n :class=\"className\"\n ref=\"dialogRef\"\n @mousedown.stop=\"handleIncreaseZIndex\"\n >\n <section :class=\"headerCls\" ref=\"headerRef\" @transitionend.stop @transitioncancel.stop>\n <div :class=\"cls.e('title')\" @mousedown.stop>\n <slot name=\"header\">\n {{ header || title }}\n </slot>\n </div>\n\n <div :class=\"cls.e('buttons')\" @mousedown.stop>\n <u-icon\n v-if=\"maximized\"\n :class=\"cls.e('btn-recover')\"\n @click=\"toggleMaximize(false)\"\n title=\"还原\"\n >\n <Recover />\n </u-icon>\n <u-icon\n v-else\n :class=\"cls.e('btn-maximize')\"\n @click=\"toggleMaximize(true)\"\n title=\"最大化\"\n >\n <Maximum />\n </u-icon>\n <u-icon :class=\"cls.e('btn-close')\" @click=\"close\" title=\"关闭\">\n <Close />\n </u-icon>\n </div>\n </section>\n\n <u-scroll\n tag=\"section\"\n :class=\"cls.e('body')\"\n :content-style=\"{ height: maximized ? '100%' : undefined }\"\n @transitionend.stop\n @transitioncancel.stop\n >\n <slot v-bind=\"{ maximized }\" />\n </u-scroll>\n\n <section :class=\"footerCls\" v-if=\"$slots.footer\">\n <slot name=\"footer\" v-bind=\"{ close }\" />\n </section>\n </div>\n </transition>\n </div>\n </transition>\n </Teleport>\n\n <!-- 触发 -->\n <UNodeRender @click=\"visible = !visible\" :content=\"getTriggerNode()\" ref=\"triggerRef\" />\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag, useFallbackProps } from '@veltra/compositions'\nimport { Close, Maximum, Recover } from '@veltra/icons/normal'\nimport { bem, extractNormalVNodes, setStyles, zIndex } from '@veltra/utils'\nimport { shallowRef, watch, computed, provide, nextTick } from 'vue'\n\nimport type { DialogProps, DialogEmits, DialogExposed, ComponentSize } from '../../types'\nimport { UIcon } from '../icon'\nimport { UNodeRender } from '../node-render'\nimport { UScroll } from '../scroll'\nimport { DialogDIKey } from './di'\nimport { useMaximum } from './use-maximum'\n\ndefineOptions({ name: 'Dialog', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<DialogProps>(), {\n modal: true,\n modelValue: true,\n autoScroll: true,\n transition: 'fade-scale'\n})\nconst emit = defineEmits<DialogEmits>()\n\nconst slots = defineSlots<{\n footer?: (props: { close: () => void }) => any\n trigger?: () => any\n header?: () => any\n default?: (props: {\n /** 弹框是否最大化了 */\n maximized: boolean\n }) => any\n}>()\n\nconst cls = bem('dialog')\nconst headerCls = [cls.e('header')]\nconst footerCls = [cls.e('footer')]\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst overlayRef = shallowRef<HTMLDivElement>()\n\n/** 弹框模板引用 */\nconst dialogRef = shallowRef<HTMLDivElement>()\n\n/** 弹框头部模板引用 */\nconst headerRef = shallowRef<HTMLDivElement>()\n\nconst visible = defineModel<boolean>({ default: false })\n\nconst overlayVisible = shallowRef(false)\nconst dialogVisible = shallowRef(false)\n\nwatch(visible, (v) => {\n if (v) {\n overlayVisible.value = true\n } else {\n dialogVisible.value = false\n }\n})\n\nfunction getTriggerNode() {\n const nodes = slots.trigger?.()\n if (!nodes?.length) return null\n\n const node = extractNormalVNodes(nodes)[0]\n return node\n}\n\nfunction onOverlayEnter() {\n dialogVisible.value = true\n}\n\nfunction onAfterDialogLeave() {\n overlayVisible.value = false\n}\n\nconst { toggleMaximize, maximized } = useMaximum({ dialogRef, cls })\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value)]\n})\n\n/**\n * 是否弹出过, 用于控制下一次弹出时是否采用v-show的方式\n */\nlet opened = false\n\nwatch(visible, (v) => {\n if (!v) return\n\n if (!opened) opened = true\n\n // 初始化位置偏移量\n translated.x = 0\n translated.y = 0\n\n nextTick(() => {\n setStyles(overlayRef.value!, { zIndex: zIndex() })\n })\n})\n\n/** dialog位移的位置 */\nconst translated = { x: 0, y: 0 }\n\n/**\n * 更新弹框位置\n * 使用独立 `translate` 而非整体 `transform`, 与 spring 动画的 `scale` 解耦,\n * 避免动画期间整体 transform 被关键帧覆盖、动画结束后又\"啪\"地跳回内联位置\n */\nconst updateDialogTransform = (x: number, y: number) => {\n const dom = dialogRef.value\n if (!dom) return\n setStyles(dom, { translate: `${x}px ${y}px` })\n}\n\n// 运用拖拽\nuseDrag({\n target: headerRef,\n\n onDragStart() {\n handleIncreaseZIndex()\n },\n\n onDrag({ x, y }) {\n if (maximized.value) return\n updateDialogTransform(translated.x + x, translated.y + y)\n },\n\n onDragEnd({ x, y }) {\n if (maximized.value) return\n translated.x += x\n translated.y += y\n\n // 字体模糊的bug修正\n if (translated.x % 2 !== 0) {\n translated.x += x < 0 ? 1 : -1\n }\n if (translated.y % 2 !== 0) {\n translated.y += y < 0 ? 1 : -1\n }\n updateDialogTransform(translated.x, translated.y)\n }\n})\n\nfunction handleIncreaseZIndex() {\n if (props.modal) return\n setStyles(overlayRef.value!, { zIndex: zIndex() })\n}\n\n/** 关闭 */\nconst close = () => {\n visible.value = false\n}\n\nprovide(DialogDIKey, { visible })\n\ndefineExpose<DialogExposed>({ close })\n</script>\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { DialogProps, _DialogExposed } from "../../types/dialog.js";
1
+ import { DialogProps, DialogTransition, _DialogExposed } from "../../types/dialog.js";
2
2
  //#region src/components/dialog/dialog.vue.d.ts
3
3
  type __VLS_Props = DialogProps;
4
4
  type __VLS_Slots = {
@@ -26,6 +26,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, impor
26
26
  }>, {
27
27
  modelValue: boolean;
28
28
  modal: boolean;
29
+ transition: DialogTransition;
29
30
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
30
31
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
31
32
  declare const _default: typeof __VLS_export;
@@ -1,5 +1,4 @@
1
1
  import "../icon/style.js";
2
2
  import "../scroll/style.js";
3
3
  import "./style2.css";
4
- import "@veltra/styles/transitions/fade.scss";
5
- import "@veltra/styles/transitions/spring.scss";
4
+ import "@veltra/styles/transitions/fade-scale.scss";
@@ -5,11 +5,14 @@ import { removeStyles, setStyles } from "@veltra/utils";
5
5
  function useMaximum(options) {
6
6
  const { dialogRef } = options;
7
7
  const maximized = shallowRef(false);
8
+ let needRmoveHeight = false;
8
9
  const maximizeTransition = useTransition("css", {
9
10
  target: dialogRef,
10
11
  name: "dialog-maximize",
11
12
  keepEnterTo: true,
12
13
  afterLeave() {
14
+ if (!maximized.value || !needRmoveHeight) return;
15
+ needRmoveHeight = false;
13
16
  dialogRef.value && removeStyles(dialogRef.value, ["height"]);
14
17
  }
15
18
  });
@@ -19,7 +22,10 @@ function useMaximum(options) {
19
22
  const dom = dialogRef.value;
20
23
  if (!dom) return;
21
24
  if (maxim) {
22
- setStyles(dom, { height: `${dom.offsetHeight}px` });
25
+ if (!dom.style.height) {
26
+ needRmoveHeight = true;
27
+ setStyles(dom, { height: `${dom.offsetHeight}px` });
28
+ }
23
29
  maximizeTransition.enter();
24
30
  } else maximizeTransition.leave();
25
31
  };
@@ -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,KAAK;CAElC,MAAM,qBAAqB,cAAc,OAAO;EAC9C,QAAQ;EACR,MAAM;EACN,aAAa;EACb,aAAa;GACX,UAAU,SAAS,aAAa,UAAU,OAAO,CAAC,QAAQ,CAAC;EAC7D;CACF,CAAC;;CAGD,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,IAAI,CAAC;GAClD,mBAAmB,MAAM;EAC3B,OACE,mBAAmB,MAAM;CAE7B;CAEA,OAAO;EAAE;EAAW;CAAe;AACrC"}
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 let needRmoveHeight = false\n\n const maximizeTransition = useTransition('css', {\n target: dialogRef,\n name: 'dialog-maximize',\n keepEnterTo: true,\n afterLeave() {\n if (!maximized.value || !needRmoveHeight) return\n needRmoveHeight = false\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 if (!dom.style.height) {\n needRmoveHeight = true\n setStyles(dom, { height: `${dom.offsetHeight}px` })\n }\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,KAAK;CAElC,IAAI,kBAAkB;CAEtB,MAAM,qBAAqB,cAAc,OAAO;EAC9C,QAAQ;EACR,MAAM;EACN,aAAa;EACb,aAAa;GACX,IAAI,CAAC,UAAU,SAAS,CAAC,iBAAiB;GAC1C,kBAAkB;GAClB,UAAU,SAAS,aAAa,UAAU,OAAO,CAAC,QAAQ,CAAC;EAC7D;CACF,CAAC;;CAGD,MAAM,kBAAkB,UAAyB;EAC/C,UAAU,QAAQ;EAClB,MAAM,MAAM,UAAU;EACtB,IAAI,CAAC,KAAK;EACV,IAAI,OAAO;GAET,IAAI,CAAC,IAAI,MAAM,QAAQ;IACrB,kBAAkB;IAClB,UAAU,KAAK,EAAE,QAAQ,GAAG,IAAI,aAAa,IAAI,CAAC;GACpD;GACA,mBAAmB,MAAM;EAC3B,OACE,mBAAmB,MAAM;CAE7B;CAEA,OAAO;EAAE;EAAW;CAAe;AACrC"}
@@ -1,8 +1,8 @@
1
1
  import { EmptyProps } from "../../types/empty.js";
2
2
  //#region src/components/empty/empty.vue.d.ts
3
3
  declare const __VLS_export: import("vue").DefineComponent<EmptyProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<EmptyProps> & Readonly<{}>, {
4
- size: number;
5
4
  text: string;
5
+ size: number;
6
6
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
7
  declare const _default: typeof __VLS_export;
8
8
  //#endregion
@@ -11,8 +11,8 @@ declare const __VLS_base: import("vue").DefineComponent<UploaderProps, {}, {}, {
11
11
  }, string, import("vue").PublicProps, Readonly<UploaderProps> & Readonly<{
12
12
  onPick?: ((files: File[]) => any) | undefined;
13
13
  }>, {
14
- multiple: boolean;
15
14
  tag: string;
15
+ multiple: boolean;
16
16
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
17
17
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
18
18
  declare const _default: typeof __VLS_export;
@@ -17,25 +17,25 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, _Inpu
17
17
  "update:modelValue": (value: string) => any;
18
18
  clear: () => any;
19
19
  change: (value: string) => any;
20
- "suffix:click": (value?: string | undefined) => any;
21
- "prefix:click": (value?: string | undefined) => any;
22
20
  focus: (value?: string | undefined) => any;
23
21
  blur: (value?: string | undefined) => any;
22
+ "suffix:click": (value?: string | undefined) => any;
23
+ "prefix:click": (value?: string | undefined) => any;
24
24
  "native:input": (ev: Event) => any;
25
25
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
26
26
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
27
27
  onClear?: (() => any) | undefined;
28
28
  onChange?: ((value: string) => any) | undefined;
29
- "onSuffix:click"?: ((value?: string | undefined) => any) | undefined;
30
- "onPrefix:click"?: ((value?: string | undefined) => any) | undefined;
31
29
  onFocus?: ((value?: string | undefined) => any) | undefined;
32
30
  onBlur?: ((value?: string | undefined) => any) | undefined;
31
+ "onSuffix:click"?: ((value?: string | undefined) => any) | undefined;
32
+ "onPrefix:click"?: ((value?: string | undefined) => any) | undefined;
33
33
  "onNative:input"?: ((ev: Event) => any) | undefined;
34
34
  }>, {
35
- disabled: boolean;
36
- readonly: boolean;
37
35
  placeholder: string;
38
36
  clearable: boolean;
37
+ disabled: boolean;
38
+ readonly: boolean;
39
39
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
40
40
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
41
41
  declare const _default: typeof __VLS_export;