@veltra/desktop 1.1.19 → 1.1.21

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 (28) hide show
  1. package/dist/components/batch-edit/batch-edit.vue.d.ts +1 -1
  2. package/dist/components/cascade/cascade.vue.d.ts +4 -4
  3. package/dist/components/file-viewer/previewers/pdf-viewport-scroll.js +2 -6
  4. package/dist/components/file-viewer/previewers/pdf-viewport-scroll.js.map +1 -1
  5. package/dist/components/input/input.vue.d.ts +2 -2
  6. package/dist/components/multi-select/multi-select.vue.d.ts +2 -2
  7. package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +5 -5
  8. package/dist/components/notification/notification.vue.d.ts +1 -1
  9. package/dist/components/number/number.vue.d.ts +1 -1
  10. package/dist/components/number-input/number-input.vue.d.ts +2 -2
  11. package/dist/components/pop-confirm/pop-confirm.vue.d.ts +1 -1
  12. package/dist/components/scroll/scroll.js +19 -83
  13. package/dist/components/scroll/scroll.js.map +1 -1
  14. package/dist/components/scroll/style2.css +0 -22
  15. package/dist/components/select/select.vue.d.ts +2 -2
  16. package/dist/components/tabs/tabs-horizontal.vue.d.ts +3 -3
  17. package/dist/components/tabs/tabs-vertical.vue.d.ts +3 -3
  18. package/dist/components/tabs/tabs.vue.d.ts +3 -3
  19. package/dist/components/textarea/textarea.vue.d.ts +2 -2
  20. package/dist/components/tip/tip.vue.d.ts +1 -1
  21. package/dist/components/tree-select/tree-select.vue.d.ts +5 -5
  22. package/dist/components/watermark/watermark.vue.d.ts +1 -1
  23. package/dist/types/scroll.d.ts +1 -6
  24. package/package.json +6 -6
  25. package/src/components/file-viewer/previewers/pdf-viewport-scroll.vue +1 -6
  26. package/src/components/scroll/scroll.vue +32 -106
  27. package/src/components/scroll/style.scss +0 -22
  28. package/src/types/scroll.ts +1 -7
@@ -9,12 +9,12 @@ declare const __VLS_export: <Model extends FormModel>(__VLS_props: NonNullable<A
9
9
  props: _$vue.PublicProps & __VLS_PrettifyLocal<BatchEditProps<Model> & {
10
10
  "onUpdate:selected"?: ((value: Record<string, any> | undefined) => any) | undefined;
11
11
  "onUpdate:checked"?: ((value: Record<string, any>[]) => any) | undefined;
12
- "onUpdate:data"?: ((value: Record<string, any>[]) => any) | undefined;
13
12
  "onUpdate:rows"?: ((rows: TableRow[]) => any) | undefined;
14
13
  "onUpdate:forest"?: ((rows?: _$_cat_kit_core0.Forest<Record<string, unknown>, any> | undefined) => any) | undefined;
15
14
  "onUpdate:current"?: ((row?: TableRow | undefined) => any) | undefined;
16
15
  "onCell-click"?: ((row: TableRow, column: TableColumn, ev: MouseEvent) => any) | undefined;
17
16
  "onRow-click"?: ((row: TableRow, ev: MouseEvent) => any) | undefined;
17
+ "onUpdate:data"?: ((value: Record<string, any>[]) => any) | undefined;
18
18
  }> & (typeof globalThis extends {
19
19
  __VLS_PROPS_FALLBACK: infer P;
20
20
  } ? P : {});
@@ -4,21 +4,21 @@ import * as _$vue from "vue";
4
4
  //#region src/components/cascade/cascade.vue.d.ts
5
5
  declare const __VLS_export: _$vue.DefineComponent<CascadeProps, {}, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {} & {
6
6
  "update:modelValue": (value?: string | string[] | undefined) => any;
7
- clear: () => any;
8
7
  change: (...args: [value?: string | undefined, label?: string | undefined, item?: Record<string, any> | undefined] | [value: string[], label: string[], data: Record<string, any>[]]) => any;
8
+ clear: () => any;
9
9
  }, string, _$vue.PublicProps, Readonly<CascadeProps> & Readonly<{
10
10
  "onUpdate:modelValue"?: ((value?: string | string[] | undefined) => any) | undefined;
11
- onClear?: (() => any) | undefined;
12
11
  onChange?: ((...args: [value?: string | undefined, label?: string | undefined, item?: Record<string, any> | undefined] | [value: string[], label: string[], data: Record<string, any>[]]) => any) | undefined;
12
+ onClear?: (() => any) | undefined;
13
13
  }>, {
14
14
  disabled: boolean;
15
15
  readonly: boolean;
16
+ placeholder: string;
17
+ clearable: boolean;
16
18
  labelKey: string;
17
19
  valueKey: string;
18
20
  childrenKey: string;
19
21
  data: Record<string, any>[];
20
- placeholder: string;
21
- clearable: boolean;
22
22
  filterable: boolean;
23
23
  visibilityLimit: number;
24
24
  separator: string;
@@ -1,5 +1,4 @@
1
- import _sfc_main$1 from "../../scroll/scroll.js";
2
- import { Fragment, computed, createCommentVNode, createElementBlock, createVNode, defineComponent, inject, onBeforeUnmount, openBlock, renderSlot, unref, watch, withCtx } from "vue";
1
+ import { computed, defineComponent, inject, onBeforeUnmount, renderSlot, watch } from "vue";
3
2
  //#region src/components/file-viewer/previewers/pdf-viewport-scroll.vue
4
3
  const VIEWPORT_ELEMENT_KEY = "viewport-element";
5
4
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -70,10 +69,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
70
69
  detachPan = void 0;
71
70
  });
72
71
  return (_ctx, _cache) => {
73
- return openBlock(), createElementBlock(Fragment, null, [createCommentVNode(" EmbedPDF Viewport 自带滚动;u-scroll 仅同步自定义滚动条 "), createVNode(unref(_sfc_main$1), { target: viewportEl.value }, {
74
- default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
75
- _: 3
76
- }, 8, ["target"])], 2112);
72
+ return renderSlot(_ctx.$slots, "default");
77
73
  };
78
74
  }
79
75
  });
@@ -1 +1 @@
1
- {"version":3,"file":"pdf-viewport-scroll.js","names":[],"sources":["../../../../src/components/file-viewer/previewers/pdf-viewport-scroll.vue"],"sourcesContent":["<template>\n <!-- EmbedPDF Viewport 自带滚动;u-scroll 仅同步自定义滚动条 -->\n <u-scroll :target=\"viewportEl\">\n <slot />\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, onBeforeUnmount, type Ref, watch } from 'vue'\n\nimport { UScroll } from '../../scroll'\n\ndefineOptions({ name: 'FileViewerPdfViewportScroll' })\n\n/** EmbedPDF Viewport 向子树注入的滚动容器 ref */\nconst VIEWPORT_ELEMENT_KEY = 'viewport-element'\n\nconst viewportRef = inject<Ref<HTMLDivElement | null>>(VIEWPORT_ELEMENT_KEY)\nconst viewportEl = computed(() => viewportRef?.value ?? null)\n\nlet panState:\n | {\n pointerId: number\n startX: number\n startY: number\n scrollLeft: number\n scrollTop: number\n }\n | undefined\n\nfunction isInteractiveTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false\n return !!target.closest(\n 'button, a, input, textarea, select, video, [contenteditable=\"true\"], .u-scroll__bar-x, .u-scroll__bar-y'\n )\n}\n\nfunction handlePointerDown(e: PointerEvent) {\n if (e.button !== 0 || isInteractiveTarget(e.target)) return\n\n const el = viewportEl.value\n if (!el) return\n\n panState = {\n pointerId: e.pointerId,\n startX: e.clientX,\n startY: e.clientY,\n scrollLeft: el.scrollLeft,\n scrollTop: el.scrollTop\n }\n el.classList.add('is-panning')\n el.setPointerCapture(e.pointerId)\n e.preventDefault()\n}\n\nfunction handlePointerMove(e: PointerEvent) {\n if (!panState || panState.pointerId !== e.pointerId) return\n\n const el = viewportEl.value\n if (!el) return\n\n el.scrollLeft = panState.scrollLeft - (e.clientX - panState.startX)\n el.scrollTop = panState.scrollTop - (e.clientY - panState.startY)\n}\n\nfunction endPan(e: PointerEvent) {\n if (!panState || panState.pointerId !== e.pointerId) return\n\n const el = viewportEl.value\n if (el?.hasPointerCapture(e.pointerId)) {\n el.releasePointerCapture(e.pointerId)\n }\n el?.classList.remove('is-panning')\n panState = undefined\n}\n\nlet detachPan: (() => void) | undefined\n\nwatch(\n viewportEl,\n (el, _, onCleanup) => {\n detachPan?.()\n detachPan = undefined\n if (!el) return\n\n el.addEventListener('pointerdown', handlePointerDown, { capture: true })\n el.addEventListener('pointermove', handlePointerMove, { capture: true })\n el.addEventListener('pointerup', endPan, { capture: true })\n el.addEventListener('pointercancel', endPan, { capture: true })\n\n detachPan = () => {\n el.removeEventListener('pointerdown', handlePointerDown, { capture: true })\n el.removeEventListener('pointermove', handlePointerMove, { capture: true })\n el.removeEventListener('pointerup', endPan, { capture: true })\n el.removeEventListener('pointercancel', endPan, { capture: true })\n el.classList.remove('is-panning')\n panState = undefined\n }\n\n onCleanup(() => {\n detachPan?.()\n detachPan = undefined\n })\n },\n { immediate: true }\n)\n\nonBeforeUnmount(() => {\n detachPan?.()\n detachPan = undefined\n})\n</script>\n"],"mappings":";;;AAeA,MAAM,uBAAuB;;;;;;EAE7B,MAAM,cAAc,OAAmC,qBAAoB;EAC3E,MAAM,aAAa,eAAe,aAAa,SAAS,KAAI;EAE5D,IAAI;EAUJ,SAAS,oBAAoB,QAAqC;GAChE,IAAI,EAAE,kBAAkB,cAAc,OAAO;GAC7C,OAAO,CAAC,CAAC,OAAO,QACd,4GACF;;EAGF,SAAS,kBAAkB,GAAiB;GAC1C,IAAI,EAAE,WAAW,KAAK,oBAAoB,EAAE,OAAM,EAAG;GAErD,MAAM,KAAK,WAAW;GACtB,IAAI,CAAC,IAAI;GAET,WAAW;IACT,WAAW,EAAE;IACb,QAAQ,EAAE;IACV,QAAQ,EAAE;IACV,YAAY,GAAG;IACf,WAAW,GAAG;IAChB;GACA,GAAG,UAAU,IAAI,aAAY;GAC7B,GAAG,kBAAkB,EAAE,UAAS;GAChC,EAAE,gBAAe;;EAGnB,SAAS,kBAAkB,GAAiB;GAC1C,IAAI,CAAC,YAAY,SAAS,cAAc,EAAE,WAAW;GAErD,MAAM,KAAK,WAAW;GACtB,IAAI,CAAC,IAAI;GAET,GAAG,aAAa,SAAS,cAAc,EAAE,UAAU,SAAS;GAC5D,GAAG,YAAY,SAAS,aAAa,EAAE,UAAU,SAAS;;EAG5D,SAAS,OAAO,GAAiB;GAC/B,IAAI,CAAC,YAAY,SAAS,cAAc,EAAE,WAAW;GAErD,MAAM,KAAK,WAAW;GACtB,IAAI,IAAI,kBAAkB,EAAE,UAAS,EACnC,GAAG,sBAAsB,EAAE,UAAS;GAEtC,IAAI,UAAU,OAAO,aAAY;GACjC,WAAW,KAAA;;EAGb,IAAI;EAEJ,MACE,aACC,IAAI,GAAG,cAAc;GACpB,aAAY;GACZ,YAAY,KAAA;GACZ,IAAI,CAAC,IAAI;GAET,GAAG,iBAAiB,eAAe,mBAAmB,EAAE,SAAS,MAAM,CAAA;GACvE,GAAG,iBAAiB,eAAe,mBAAmB,EAAE,SAAS,MAAM,CAAA;GACvE,GAAG,iBAAiB,aAAa,QAAQ,EAAE,SAAS,MAAM,CAAA;GAC1D,GAAG,iBAAiB,iBAAiB,QAAQ,EAAE,SAAS,MAAM,CAAA;GAE9D,kBAAkB;IAChB,GAAG,oBAAoB,eAAe,mBAAmB,EAAE,SAAS,MAAM,CAAA;IAC1E,GAAG,oBAAoB,eAAe,mBAAmB,EAAE,SAAS,MAAM,CAAA;IAC1E,GAAG,oBAAoB,aAAa,QAAQ,EAAE,SAAS,MAAM,CAAA;IAC7D,GAAG,oBAAoB,iBAAiB,QAAQ,EAAE,SAAS,MAAM,CAAA;IACjE,GAAG,UAAU,OAAO,aAAY;IAChC,WAAW,KAAA;;GAGb,gBAAgB;IACd,aAAY;IACZ,YAAY,KAAA;KACb;KAEH,EAAE,WAAW,MACf,CAAA;EAEA,sBAAsB;GACpB,aAAY;GACZ,YAAY,KAAA;IACb;;2DA7GC,mBAAA,8CAAA,EACA,YAEW,MAAA,YAAA,EAAA,EAFA,QAAQ,WAAA,OAAU,EAAA;2BACnB,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"pdf-viewport-scroll.js","names":[],"sources":["../../../../src/components/file-viewer/previewers/pdf-viewport-scroll.vue"],"sourcesContent":["<template>\n <slot />\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, onBeforeUnmount, type Ref, watch } from 'vue'\n\ndefineOptions({ name: 'FileViewerPdfViewportScroll' })\n\n/** EmbedPDF Viewport 向子树注入的滚动容器 ref */\nconst VIEWPORT_ELEMENT_KEY = 'viewport-element'\n\nconst viewportRef = inject<Ref<HTMLDivElement | null>>(VIEWPORT_ELEMENT_KEY)\nconst viewportEl = computed(() => viewportRef?.value ?? null)\n\nlet panState:\n | {\n pointerId: number\n startX: number\n startY: number\n scrollLeft: number\n scrollTop: number\n }\n | undefined\n\nfunction isInteractiveTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false\n return !!target.closest(\n 'button, a, input, textarea, select, video, [contenteditable=\"true\"], .u-scroll__bar-x, .u-scroll__bar-y'\n )\n}\n\nfunction handlePointerDown(e: PointerEvent) {\n if (e.button !== 0 || isInteractiveTarget(e.target)) return\n\n const el = viewportEl.value\n if (!el) return\n\n panState = {\n pointerId: e.pointerId,\n startX: e.clientX,\n startY: e.clientY,\n scrollLeft: el.scrollLeft,\n scrollTop: el.scrollTop\n }\n el.classList.add('is-panning')\n el.setPointerCapture(e.pointerId)\n e.preventDefault()\n}\n\nfunction handlePointerMove(e: PointerEvent) {\n if (!panState || panState.pointerId !== e.pointerId) return\n\n const el = viewportEl.value\n if (!el) return\n\n el.scrollLeft = panState.scrollLeft - (e.clientX - panState.startX)\n el.scrollTop = panState.scrollTop - (e.clientY - panState.startY)\n}\n\nfunction endPan(e: PointerEvent) {\n if (!panState || panState.pointerId !== e.pointerId) return\n\n const el = viewportEl.value\n if (el?.hasPointerCapture(e.pointerId)) {\n el.releasePointerCapture(e.pointerId)\n }\n el?.classList.remove('is-panning')\n panState = undefined\n}\n\nlet detachPan: (() => void) | undefined\n\nwatch(\n viewportEl,\n (el, _, onCleanup) => {\n detachPan?.()\n detachPan = undefined\n if (!el) return\n\n el.addEventListener('pointerdown', handlePointerDown, { capture: true })\n el.addEventListener('pointermove', handlePointerMove, { capture: true })\n el.addEventListener('pointerup', endPan, { capture: true })\n el.addEventListener('pointercancel', endPan, { capture: true })\n\n detachPan = () => {\n el.removeEventListener('pointerdown', handlePointerDown, { capture: true })\n el.removeEventListener('pointermove', handlePointerMove, { capture: true })\n el.removeEventListener('pointerup', endPan, { capture: true })\n el.removeEventListener('pointercancel', endPan, { capture: true })\n el.classList.remove('is-panning')\n panState = undefined\n }\n\n onCleanup(() => {\n detachPan?.()\n detachPan = undefined\n })\n },\n { immediate: true }\n)\n\nonBeforeUnmount(() => {\n detachPan?.()\n detachPan = undefined\n})\n</script>\n"],"mappings":";;AAUA,MAAM,uBAAuB;;;;;;EAE7B,MAAM,cAAc,OAAmC,qBAAoB;EAC3E,MAAM,aAAa,eAAe,aAAa,SAAS,KAAI;EAE5D,IAAI;EAUJ,SAAS,oBAAoB,QAAqC;GAChE,IAAI,EAAE,kBAAkB,cAAc,OAAO;GAC7C,OAAO,CAAC,CAAC,OAAO,QACd,4GACF;;EAGF,SAAS,kBAAkB,GAAiB;GAC1C,IAAI,EAAE,WAAW,KAAK,oBAAoB,EAAE,OAAM,EAAG;GAErD,MAAM,KAAK,WAAW;GACtB,IAAI,CAAC,IAAI;GAET,WAAW;IACT,WAAW,EAAE;IACb,QAAQ,EAAE;IACV,QAAQ,EAAE;IACV,YAAY,GAAG;IACf,WAAW,GAAG;IAChB;GACA,GAAG,UAAU,IAAI,aAAY;GAC7B,GAAG,kBAAkB,EAAE,UAAS;GAChC,EAAE,gBAAe;;EAGnB,SAAS,kBAAkB,GAAiB;GAC1C,IAAI,CAAC,YAAY,SAAS,cAAc,EAAE,WAAW;GAErD,MAAM,KAAK,WAAW;GACtB,IAAI,CAAC,IAAI;GAET,GAAG,aAAa,SAAS,cAAc,EAAE,UAAU,SAAS;GAC5D,GAAG,YAAY,SAAS,aAAa,EAAE,UAAU,SAAS;;EAG5D,SAAS,OAAO,GAAiB;GAC/B,IAAI,CAAC,YAAY,SAAS,cAAc,EAAE,WAAW;GAErD,MAAM,KAAK,WAAW;GACtB,IAAI,IAAI,kBAAkB,EAAE,UAAS,EACnC,GAAG,sBAAsB,EAAE,UAAS;GAEtC,IAAI,UAAU,OAAO,aAAY;GACjC,WAAW,KAAA;;EAGb,IAAI;EAEJ,MACE,aACC,IAAI,GAAG,cAAc;GACpB,aAAY;GACZ,YAAY,KAAA;GACZ,IAAI,CAAC,IAAI;GAET,GAAG,iBAAiB,eAAe,mBAAmB,EAAE,SAAS,MAAM,CAAA;GACvE,GAAG,iBAAiB,eAAe,mBAAmB,EAAE,SAAS,MAAM,CAAA;GACvE,GAAG,iBAAiB,aAAa,QAAQ,EAAE,SAAS,MAAM,CAAA;GAC1D,GAAG,iBAAiB,iBAAiB,QAAQ,EAAE,SAAS,MAAM,CAAA;GAE9D,kBAAkB;IAChB,GAAG,oBAAoB,eAAe,mBAAmB,EAAE,SAAS,MAAM,CAAA;IAC1E,GAAG,oBAAoB,eAAe,mBAAmB,EAAE,SAAS,MAAM,CAAA;IAC1E,GAAG,oBAAoB,aAAa,QAAQ,EAAE,SAAS,MAAM,CAAA;IAC7D,GAAG,oBAAoB,iBAAiB,QAAQ,EAAE,SAAS,MAAM,CAAA;IACjE,GAAG,UAAU,OAAO,aAAY;IAChC,WAAW,KAAA;;GAGb,gBAAgB;IACd,aAAY;IACZ,YAAY,KAAA;KACb;KAEH,EAAE,WAAW,MACf,CAAA;EAEA,sBAAsB;GACpB,aAAY;GACZ,YAAY,KAAA;IACb;;UAxGC,WAAQ,KAAA,QAAA,UAAA"}
@@ -17,20 +17,20 @@ declare const __VLS_base: _$vue.DefineComponent<__VLS_PublicProps, _InputExposed
17
17
  "update:modelValue": (value: string | undefined) => any;
18
18
  } & {
19
19
  "update:modelValue": (value: string) => any;
20
- clear: () => any;
21
20
  change: (value: string) => any;
22
21
  "suffix:click": (value?: string | undefined) => any;
23
22
  "prefix:click": (value?: string | undefined) => any;
24
23
  focus: (value?: string | undefined) => any;
24
+ clear: () => any;
25
25
  blur: (value?: string | undefined) => any;
26
26
  "native:input": (ev: Event) => any;
27
27
  }, string, _$vue.PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
28
28
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
29
- onClear?: (() => any) | undefined;
30
29
  onChange?: ((value: string) => any) | undefined;
31
30
  "onSuffix:click"?: ((value?: string | undefined) => any) | undefined;
32
31
  "onPrefix:click"?: ((value?: string | undefined) => any) | undefined;
33
32
  onFocus?: ((value?: string | undefined) => any) | undefined;
33
+ onClear?: (() => any) | undefined;
34
34
  onBlur?: ((value?: string | undefined) => any) | undefined;
35
35
  "onNative:input"?: ((ev: Event) => any) | undefined;
36
36
  }>, {
@@ -30,10 +30,10 @@ declare const __VLS_base: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {}, {
30
30
  }>, {
31
31
  disabled: boolean;
32
32
  readonly: boolean;
33
- labelKey: string;
34
- valueKey: string;
35
33
  placeholder: string;
36
34
  clearable: boolean;
35
+ labelKey: string;
36
+ valueKey: string;
37
37
  minWidth: string;
38
38
  visibilityLimit: number;
39
39
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
@@ -15,22 +15,22 @@ declare const __VLS_base: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {}, {
15
15
  "update:modelValue": (value: (string | number)[]) => any;
16
16
  } & {
17
17
  "update:modelValue": (value: any[]) => any;
18
- clear: () => any;
19
18
  change: (checked: Record<string, any>[]) => any;
19
+ clear: () => any;
20
20
  }, string, _$vue.PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
21
21
  "onUpdate:modelValue"?: ((value: any[]) => any) | undefined;
22
- onClear?: (() => any) | undefined;
23
22
  onChange?: ((checked: Record<string, any>[]) => any) | undefined;
23
+ onClear?: (() => any) | undefined;
24
24
  }>, {
25
25
  disabled: boolean;
26
26
  readonly: boolean;
27
+ placeholder: string;
28
+ clearable: boolean;
27
29
  expandAll: boolean;
28
30
  labelKey: string;
29
31
  valueKey: string;
30
- placeholder: string;
31
- clearable: boolean;
32
- filterable: boolean;
33
32
  minWidth: string;
33
+ filterable: boolean;
34
34
  visibilityLimit: number;
35
35
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
36
36
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -5,10 +5,10 @@ import * as _$_veltra_utils0 from "@veltra/utils";
5
5
  //#region src/components/notification/notification.vue.d.ts
6
6
  declare const __VLS_export: _$vue.DefineComponent<NotificationProps, _$_veltra_utils0.DeconstructValue<_NotificationExposed>, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {}, string, _$vue.PublicProps, Readonly<NotificationProps> & Readonly<{}>, {
7
7
  closable: boolean;
8
- position: "top-left" | "top-right" | "bottom-left" | "bottom-right";
9
8
  duration: number;
10
9
  offset: number;
11
10
  buttonText: string;
11
+ position: "top-left" | "top-right" | "bottom-left" | "bottom-right";
12
12
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
13
13
  declare const _default: typeof __VLS_export;
14
14
  //#endregion
@@ -3,8 +3,8 @@ import * as _$vue from "vue";
3
3
 
4
4
  //#region src/components/number/number.vue.d.ts
5
5
  declare const __VLS_export: _$vue.DefineComponent<NumberProps, {}, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {}, string, _$vue.PublicProps, Readonly<NumberProps> & Readonly<{}>, {
6
- format: "currency" | "percent" | "decimal";
7
6
  duration: number;
7
+ format: "currency" | "percent" | "decimal";
8
8
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
9
9
  declare const _default: typeof __VLS_export;
10
10
  //#endregion
@@ -15,12 +15,12 @@ declare const __VLS_base: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {}, {
15
15
  "update:modelValue": (value: number | undefined) => any;
16
16
  } & {
17
17
  "update:modelValue": (value?: number | undefined) => any;
18
- clear: () => any;
19
18
  change: (value?: number | undefined) => any;
19
+ clear: () => any;
20
20
  }, string, _$vue.PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
21
21
  "onUpdate:modelValue"?: ((value?: number | undefined) => any) | undefined;
22
- onClear?: (() => any) | undefined;
23
22
  onChange?: ((value?: number | undefined) => any) | undefined;
23
+ onClear?: (() => any) | undefined;
24
24
  }>, {
25
25
  disabled: boolean;
26
26
  readonly: boolean;
@@ -15,8 +15,8 @@ declare const __VLS_base: _$vue.DefineComponent<PopConfirmProps, {}, {}, {}, {},
15
15
  onCancel?: (() => any) | undefined;
16
16
  }>, {
17
17
  trigger: "hover" | "click";
18
- direction: TipDirection;
19
18
  icon: _$vue.Component;
19
+ direction: TipDirection;
20
20
  iconColor: string;
21
21
  confirmText: string;
22
22
  cancelText: string;
@@ -1,6 +1,6 @@
1
1
  import { ScrollDIKey } from "./di.js";
2
2
  import _sfc_main$1 from "./scroll-bar.js";
3
- import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, normalizeStyle, onBeforeUnmount, openBlock, provide, renderSlot, resolveDynamicComponent, shallowRef, toValue, unref, watch, withCtx } from "vue";
3
+ import { computed, createBlock, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, provide, renderSlot, resolveDynamicComponent, shallowRef, unref, withCtx } from "vue";
4
4
  import { useResizeObserver } from "@veltra/compositions";
5
5
  import { bem, withUnit } from "@veltra/utils";
6
6
  import { debounce } from "@cat-kit/core";
@@ -17,51 +17,30 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
17
17
  containerStyle: {},
18
18
  contentClass: {},
19
19
  containerClass: {},
20
- dragDebounce: {},
21
- target: {}
20
+ dragDebounce: {}
22
21
  },
23
22
  emits: ["scroll", "resize"],
24
23
  setup(__props, { expose: __expose, emit: __emit }) {
25
24
  const props = __props;
26
25
  const emit = __emit;
27
26
  const cls = bem("scroll");
28
- const isExternal = computed(() => props.target !== void 0);
29
- const externalTarget = computed(() => isExternal.value ? toValue(props.target) : null);
30
27
  const className = computed(() => {
31
- return [
32
- cls.b,
33
- bem.is("always", props.always),
34
- bem.is("external", isExternal.value)
35
- ];
28
+ return [cls.b, bem.is("always", props.always)];
36
29
  });
37
30
  const style = computed(() => {
38
- if (isExternal.value) return {};
39
31
  return { height: withUnit(props.height, "px") };
40
32
  });
41
33
  const contentRef = shallowRef();
42
34
  const scrollRef = shallowRef();
43
35
  const containerRef = shallowRef();
44
- const overlayRef = shallowRef();
45
36
  const barX = shallowRef();
46
37
  const barY = shallowRef();
47
38
  const trackSize = {
48
39
  width: 0,
49
40
  height: 0
50
41
  };
51
- function getScrollContainer() {
52
- if (isExternal.value) return externalTarget.value ?? void 0;
53
- return containerRef.value;
54
- }
55
- function syncTrackSize() {
56
- const container = getScrollContainer();
57
- if (!container) return;
58
- trackSize.width = container.clientWidth;
59
- trackSize.height = container.clientHeight;
60
- barX.value?.setTrackSize(trackSize.width);
61
- barY.value?.setTrackSize(trackSize.height);
62
- }
63
42
  const updateBar = () => {
64
- const container = getScrollContainer();
43
+ const container = containerRef.value;
65
44
  if (!container) return;
66
45
  const { scrollHeight, clientHeight, scrollTop, scrollWidth, clientWidth, scrollLeft } = container;
67
46
  emit("scroll", {
@@ -84,13 +63,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
84
63
  } else barX.value?.update(0, 0);
85
64
  };
86
65
  const handleDragX = debounce((offset, size) => {
87
- const container = getScrollContainer();
66
+ const container = containerRef.value;
88
67
  if (!container) return;
89
68
  const { clientWidth, scrollWidth } = container;
90
69
  container.scrollLeft = offset / (trackSize.width - size) * (scrollWidth - clientWidth);
91
70
  }, props.dragDebounce ?? 0, false);
92
71
  const handleDragY = debounce((offset, size) => {
93
- const container = getScrollContainer();
72
+ const container = containerRef.value;
94
73
  if (!container) return;
95
74
  const { clientHeight, scrollHeight } = container;
96
75
  container.scrollTop = offset / (trackSize.height - size) * (scrollHeight - clientHeight);
@@ -99,42 +78,26 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
99
78
  updateBar();
100
79
  };
101
80
  useResizeObserver({
102
- targets: [
103
- contentRef,
104
- scrollRef,
105
- () => externalTarget.value ?? null
106
- ],
81
+ targets: [contentRef, scrollRef],
107
82
  onResize: (entries) => {
108
- syncTrackSize();
83
+ const trackEl = scrollRef.value;
84
+ if (trackEl) {
85
+ trackSize.width = trackEl.clientWidth;
86
+ trackSize.height = trackEl.clientHeight;
87
+ barX.value?.setTrackSize(trackSize.width);
88
+ barY.value?.setTrackSize(trackSize.height);
89
+ }
109
90
  updateBar();
110
91
  if (entries.length) emit("resize", entries.map((entry) => entry.target));
111
92
  }
112
93
  });
113
- let detachExternalScroll;
114
- watch(externalTarget, (el, _, onCleanup) => {
115
- detachExternalScroll?.();
116
- detachExternalScroll = void 0;
117
- if (!el || !isExternal.value) return;
118
- const onScroll = () => updateBar();
119
- el.addEventListener("scroll", onScroll, { passive: true });
120
- detachExternalScroll = () => el.removeEventListener("scroll", onScroll);
121
- syncTrackSize();
122
- updateBar();
123
- onCleanup(() => {
124
- detachExternalScroll?.();
125
- detachExternalScroll = void 0;
126
- });
127
- }, { immediate: true });
128
- onBeforeUnmount(() => {
129
- detachExternalScroll?.();
130
- });
131
94
  const scrollToLeft = (left) => {
132
- const container = getScrollContainer();
95
+ const container = containerRef.value;
133
96
  if (!container) return;
134
97
  container.scrollTo({ left });
135
98
  };
136
99
  const scrollToTop = (top) => {
137
- const container = getScrollContainer();
100
+ const container = containerRef.value;
138
101
  if (!container) return;
139
102
  container.scrollTo({ top });
140
103
  };
@@ -143,18 +106,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
143
106
  if (position.y !== void 0) scrollToTop(position.y);
144
107
  };
145
108
  provide(ScrollDIKey, { cls });
146
- const activeContainerRef = shallowRef();
147
- watch([
148
- isExternal,
149
- externalTarget,
150
- containerRef
151
- ], () => {
152
- activeContainerRef.value = getScrollContainer();
153
- }, { immediate: true });
154
109
  __expose({
155
110
  el: scrollRef,
156
111
  contentRef,
157
- containerRef: activeContainerRef,
112
+ containerRef,
158
113
  scrollTo,
159
114
  update: updateBar
160
115
  });
@@ -164,7 +119,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
164
119
  style: normalizeStyle(style.value),
165
120
  ref_key: "scrollRef",
166
121
  ref: scrollRef
167
- }, [!isExternal.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
122
+ }, [
168
123
  createElementVNode("div", {
169
124
  ref_key: "containerRef",
170
125
  ref: containerRef,
@@ -194,26 +149,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
194
149
  ref_key: "barX",
195
150
  ref: barX
196
151
  }, null, 8, ["class", "onDrag"])
197
- ], 64)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [renderSlot(_ctx.$slots, "default"), externalTarget.value ? (openBlock(), createBlock(Teleport, {
198
- key: 0,
199
- to: externalTarget.value
200
- }, [createElementVNode("div", {
201
- ref_key: "overlayRef",
202
- ref: overlayRef,
203
- class: normalizeClass(unref(cls).e("overlay"))
204
- }, [createVNode(_sfc_main$1, {
205
- type: "y",
206
- class: normalizeClass(unref(cls).e("bar-y")),
207
- onDrag: unref(handleDragY),
208
- ref_key: "barY",
209
- ref: barY
210
- }, null, 8, ["class", "onDrag"]), createVNode(_sfc_main$1, {
211
- type: "x",
212
- class: normalizeClass(unref(cls).e("bar-x")),
213
- onDrag: unref(handleDragX),
214
- ref_key: "barX",
215
- ref: barX
216
- }, null, 8, ["class", "onDrag"])], 2)], 8, ["to"])) : createCommentVNode("v-if", true)], 64))], 6);
152
+ ], 6);
217
153
  };
218
154
  }
219
155
  });
@@ -1 +1 @@
1
- {"version":3,"file":"scroll.js","names":[],"sources":["../../../src/components/scroll/scroll.vue"],"sourcesContent":["<template>\n <div :class=\"className\" :style=\"style\" ref=\"scrollRef\">\n <template v-if=\"!isExternal\">\n <div\n ref=\"containerRef\"\n :class=\"[cls.e('container'), containerClass]\"\n @scroll.passive=\"handleScroll\"\n :style=\"containerStyle\"\n >\n <component\n ref=\"contentRef\"\n :style=\"contentStyle\"\n :class=\"[cls.e('content'), contentClass]\"\n :is=\"tag\"\n >\n <slot />\n </component>\n </div>\n\n <u-scroll-bar type=\"y\" :class=\"cls.e('bar-y')\" @drag=\"handleDragY\" ref=\"barY\" />\n <u-scroll-bar type=\"x\" :class=\"cls.e('bar-x')\" @drag=\"handleDragX\" ref=\"barX\" />\n </template>\n\n <template v-else>\n <slot />\n <Teleport v-if=\"externalTarget\" :to=\"externalTarget\">\n <div ref=\"overlayRef\" :class=\"cls.e('overlay')\">\n <u-scroll-bar type=\"y\" :class=\"cls.e('bar-y')\" @drag=\"handleDragY\" ref=\"barY\" />\n <u-scroll-bar type=\"x\" :class=\"cls.e('bar-x')\" @drag=\"handleDragX\" ref=\"barX\" />\n </div>\n </Teleport>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { debounce } from '@cat-kit/core'\nimport { useResizeObserver } from '@veltra/compositions'\nimport { bem, withUnit } from '@veltra/utils'\nimport {\n type CSSProperties,\n computed,\n onBeforeUnmount,\n provide,\n shallowRef,\n toValue,\n watch\n} from 'vue'\n\nimport type { ScrollPosition, _ScrollExposed, ScrollProps, ScrollEmits } from '../../types'\nimport { ScrollDIKey } from './di'\nimport UScrollBar from './scroll-bar.vue'\n\ndefineOptions({\n name: 'Scroll'\n})\n\nconst props = withDefaults(defineProps<ScrollProps>(), {\n tag: 'div'\n})\n\nconst emit = defineEmits<ScrollEmits>()\n\ndefineSlots<{\n /** 默认插槽 */\n default(): any\n /** 内容插槽 */\n content(): any\n}>()\n\nconst cls = bem('scroll')\n\nconst isExternal = computed(() => props.target !== undefined)\n\nconst externalTarget = computed(() => (isExternal.value ? toValue(props.target) : null))\n\nconst className = computed(() => {\n return [cls.b, bem.is('always', props.always), bem.is('external', isExternal.value)]\n})\n\nconst style = computed<CSSProperties>(() => {\n if (isExternal.value) return {}\n return {\n height: withUnit(props.height, 'px')\n }\n})\n\nconst contentRef = shallowRef<HTMLElement>()\nconst scrollRef = shallowRef<HTMLElement>()\nconst containerRef = shallowRef<HTMLElement>()\nconst overlayRef = shallowRef<HTMLElement>()\nconst barX = shallowRef<InstanceType<typeof UScrollBar>>()\nconst barY = shallowRef<InstanceType<typeof UScrollBar>>()\nconst minSize = 20\n\nconst trackSize = {\n width: 0,\n height: 0\n}\n\nfunction getScrollContainer(): HTMLElement | undefined {\n if (isExternal.value) {\n return externalTarget.value ?? undefined\n }\n return containerRef.value\n}\n\nfunction syncTrackSize() {\n const container = getScrollContainer()\n if (!container) return\n\n trackSize.width = container.clientWidth\n trackSize.height = container.clientHeight\n barX.value?.setTrackSize(trackSize.width)\n barY.value?.setTrackSize(trackSize.height)\n}\n\nconst updateBar = () => {\n const container = getScrollContainer()\n if (!container) return\n\n const { scrollHeight, clientHeight, scrollTop, scrollWidth, clientWidth, scrollLeft } = container\n\n emit('scroll', {\n x: scrollLeft,\n y: scrollTop,\n sw: scrollWidth,\n sh: scrollHeight,\n cw: clientWidth,\n ch: clientHeight\n })\n\n if (scrollHeight !== clientHeight) {\n const barYHeight = Math.max((clientHeight / scrollHeight) * trackSize.height, minSize)\n const barYTop = (scrollTop / (scrollHeight - clientHeight)) * (trackSize.height - barYHeight)\n barY.value?.update(barYHeight, barYTop)\n } else {\n barY.value?.update(0, 0)\n }\n\n if (scrollWidth !== clientWidth) {\n const barXWidth = Math.max((clientWidth / scrollWidth) * trackSize.width, minSize)\n const barXLeft = (scrollLeft / (scrollWidth - clientWidth)) * (trackSize.width - barXWidth)\n barX.value?.update(barXWidth, barXLeft)\n } else {\n barX.value?.update(0, 0)\n }\n}\n\nconst handleDragX = debounce(\n (offset: number, size: number) => {\n const container = getScrollContainer()\n if (!container) return\n const { clientWidth, scrollWidth } = container\n container.scrollLeft = (offset / (trackSize.width - size)) * (scrollWidth - clientWidth)\n },\n props.dragDebounce ?? 0,\n false\n)\n\nconst handleDragY = debounce(\n (offset: number, size: number) => {\n const container = getScrollContainer()\n if (!container) return\n const { clientHeight, scrollHeight } = container\n container.scrollTop = (offset / (trackSize.height - size)) * (scrollHeight - clientHeight)\n },\n props.dragDebounce ?? 0,\n false\n)\n\nconst handleScroll = () => {\n updateBar()\n}\n\nuseResizeObserver({\n targets: [contentRef, scrollRef, () => externalTarget.value ?? null],\n onResize: (entries) => {\n syncTrackSize()\n updateBar()\n if (entries.length) {\n emit(\n 'resize',\n entries.map((entry) => entry.target as HTMLElement)\n )\n }\n }\n})\n\nlet detachExternalScroll: (() => void) | undefined\n\nwatch(\n externalTarget,\n (el, _, onCleanup) => {\n detachExternalScroll?.()\n detachExternalScroll = undefined\n if (!el || !isExternal.value) return\n\n const onScroll = () => updateBar()\n el.addEventListener('scroll', onScroll, { passive: true })\n detachExternalScroll = () => el.removeEventListener('scroll', onScroll)\n syncTrackSize()\n updateBar()\n\n onCleanup(() => {\n detachExternalScroll?.()\n detachExternalScroll = undefined\n })\n },\n { immediate: true }\n)\n\nonBeforeUnmount(() => {\n detachExternalScroll?.()\n})\n\nconst scrollToLeft = (left: number) => {\n const container = getScrollContainer()\n if (!container) return\n container.scrollTo({ left })\n}\n\nconst scrollToTop = (top: number) => {\n const container = getScrollContainer()\n if (!container) return\n container.scrollTo({ top })\n}\n\nconst scrollTo = (position: ScrollPosition) => {\n if (position.x !== undefined) scrollToLeft(position.x)\n if (position.y !== undefined) scrollToTop(position.y)\n}\n\nprovide(ScrollDIKey, {\n cls\n})\n\nconst activeContainerRef = shallowRef<HTMLElement>()\n\nwatch(\n [isExternal, externalTarget, containerRef],\n () => {\n activeContainerRef.value = getScrollContainer()\n },\n { immediate: true }\n)\n\nconst exposed: _ScrollExposed = {\n el: scrollRef,\n contentRef,\n containerRef: activeContainerRef,\n scrollTo,\n update: updateBar\n}\n\ndefineExpose(exposed)\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"scroll.js","names":[],"sources":["../../../src/components/scroll/scroll.vue"],"sourcesContent":["<template>\n <div :class=\"className\" :style=\"style\" ref=\"scrollRef\">\n <div\n ref=\"containerRef\"\n :class=\"[cls.e('container'), containerClass]\"\n @scroll.passive=\"handleScroll\"\n :style=\"containerStyle\"\n >\n <component\n ref=\"contentRef\"\n :style=\"contentStyle\"\n :class=\"[cls.e('content'), contentClass]\"\n :is=\"tag\"\n >\n <slot />\n </component>\n </div>\n\n <u-scroll-bar type=\"y\" :class=\"cls.e('bar-y')\" @drag=\"handleDragY\" ref=\"barY\" />\n <u-scroll-bar type=\"x\" :class=\"cls.e('bar-x')\" @drag=\"handleDragX\" ref=\"barX\" />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { debounce } from '@cat-kit/core'\nimport { useResizeObserver } from '@veltra/compositions'\nimport { bem, withUnit } from '@veltra/utils'\nimport { type CSSProperties, computed, provide, shallowRef } from 'vue'\n\nimport type { ScrollPosition, _ScrollExposed, ScrollProps, ScrollEmits } from '../../types'\nimport { ScrollDIKey } from './di'\nimport UScrollBar from './scroll-bar.vue'\n\ndefineOptions({\n name: 'Scroll'\n})\n\nconst props = withDefaults(defineProps<ScrollProps>(), {\n tag: 'div'\n})\n\nconst emit = defineEmits<ScrollEmits>()\n\ndefineSlots<{\n /** 默认插槽 */\n default(): any\n /** 内容插槽 */\n content(): any\n}>()\n\nconst cls = bem('scroll')\n\nconst className = computed(() => {\n return [cls.b, bem.is('always', props.always)]\n})\n\nconst style = computed<CSSProperties>(() => {\n return {\n height: withUnit(props.height, 'px')\n }\n})\n\nconst contentRef = shallowRef<HTMLElement>()\nconst scrollRef = shallowRef<HTMLElement>()\nconst containerRef = shallowRef<HTMLElement>()\nconst barX = shallowRef<InstanceType<typeof UScrollBar>>()\nconst barY = shallowRef<InstanceType<typeof UScrollBar>>()\nconst minSize = 20\n\nconst trackSize = {\n width: 0,\n height: 0\n}\n\nconst updateBar = () => {\n const container = containerRef.value\n if (!container) return\n\n const { scrollHeight, clientHeight, scrollTop, scrollWidth, clientWidth, scrollLeft } = container\n\n emit('scroll', {\n x: scrollLeft,\n y: scrollTop,\n sw: scrollWidth,\n sh: scrollHeight,\n cw: clientWidth,\n ch: clientHeight\n })\n\n if (scrollHeight !== clientHeight) {\n const barYHeight = Math.max((clientHeight / scrollHeight) * trackSize.height, minSize)\n const barYTop = (scrollTop / (scrollHeight - clientHeight)) * (trackSize.height - barYHeight)\n barY.value?.update(barYHeight, barYTop)\n } else {\n barY.value?.update(0, 0)\n }\n\n if (scrollWidth !== clientWidth) {\n const barXWidth = Math.max((clientWidth / scrollWidth) * trackSize.width, minSize)\n const barXLeft = (scrollLeft / (scrollWidth - clientWidth)) * (trackSize.width - barXWidth)\n barX.value?.update(barXWidth, barXLeft)\n } else {\n barX.value?.update(0, 0)\n }\n}\n\nconst handleDragX = debounce(\n (offset: number, size: number) => {\n const container = containerRef.value\n if (!container) return\n const { clientWidth, scrollWidth } = container\n container.scrollLeft = (offset / (trackSize.width - size)) * (scrollWidth - clientWidth)\n },\n props.dragDebounce ?? 0,\n false\n)\n\nconst handleDragY = debounce(\n (offset: number, size: number) => {\n const container = containerRef.value\n if (!container) return\n const { clientHeight, scrollHeight } = container\n container.scrollTop = (offset / (trackSize.height - size)) * (scrollHeight - clientHeight)\n },\n props.dragDebounce ?? 0,\n false\n)\n\nconst handleScroll = () => {\n updateBar()\n}\n\nuseResizeObserver({\n targets: [contentRef, scrollRef],\n onResize: (entries) => {\n const trackEl = scrollRef.value\n if (trackEl) {\n trackSize.width = trackEl.clientWidth\n trackSize.height = trackEl.clientHeight\n barX.value?.setTrackSize(trackSize.width)\n barY.value?.setTrackSize(trackSize.height)\n }\n updateBar()\n if (entries.length) {\n emit(\n 'resize',\n entries.map((entry) => entry.target as HTMLElement)\n )\n }\n }\n})\n\nconst scrollToLeft = (left: number) => {\n const container = containerRef.value\n if (!container) return\n container.scrollTo({ left })\n}\n\nconst scrollToTop = (top: number) => {\n const container = containerRef.value\n if (!container) return\n container.scrollTo({ top })\n}\n\nconst scrollTo = (position: ScrollPosition) => {\n if (position.x !== undefined) scrollToLeft(position.x)\n if (position.y !== undefined) scrollToTop(position.y)\n}\n\nprovide(ScrollDIKey, {\n cls\n})\n\nconst exposed: _ScrollExposed = {\n el: scrollRef,\n contentRef,\n containerRef,\n scrollTo,\n update: updateBar\n}\n\ndefineExpose(exposed)\n</script>\n"],"mappings":";;;;;;;AAmEA,MAAM,UAAU;;;;;;;;;;;;;;;;EA9BhB,MAAM,QAAQ;EAId,MAAM,OAAO;EASb,MAAM,MAAM,IAAI,SAAQ;EAExB,MAAM,YAAY,eAAe;GAC/B,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,UAAU,MAAM,OAAO,CAAA;IAC9C;EAED,MAAM,QAAQ,eAA8B;GAC1C,OAAO,EACL,QAAQ,SAAS,MAAM,QAAQ,KAAI,EACrC;IACD;EAED,MAAM,aAAa,YAAwB;EAC3C,MAAM,YAAY,YAAwB;EAC1C,MAAM,eAAe,YAAwB;EAC7C,MAAM,OAAO,YAA4C;EACzD,MAAM,OAAO,YAA4C;EAGzD,MAAM,YAAY;GAChB,OAAO;GACP,QAAQ;GACV;EAEA,MAAM,kBAAkB;GACtB,MAAM,YAAY,aAAa;GAC/B,IAAI,CAAC,WAAW;GAEhB,MAAM,EAAE,cAAc,cAAc,WAAW,aAAa,aAAa,eAAe;GAExF,KAAK,UAAU;IACb,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACL,CAAA;GAED,IAAI,iBAAiB,cAAc;IACjC,MAAM,aAAa,KAAK,IAAK,eAAe,eAAgB,UAAU,QAAQ,QAAO;IACrF,MAAM,UAAW,aAAa,eAAe,iBAAkB,UAAU,SAAS;IAClF,KAAK,OAAO,OAAO,YAAY,QAAO;UAEtC,KAAK,OAAO,OAAO,GAAG,EAAC;GAGzB,IAAI,gBAAgB,aAAa;IAC/B,MAAM,YAAY,KAAK,IAAK,cAAc,cAAe,UAAU,OAAO,QAAO;IACjF,MAAM,WAAY,cAAc,cAAc,gBAAiB,UAAU,QAAQ;IACjF,KAAK,OAAO,OAAO,WAAW,SAAQ;UAEtC,KAAK,OAAO,OAAO,GAAG,EAAC;;EAI3B,MAAM,cAAc,UACjB,QAAgB,SAAiB;GAChC,MAAM,YAAY,aAAa;GAC/B,IAAI,CAAC,WAAW;GAChB,MAAM,EAAE,aAAa,gBAAgB;GACrC,UAAU,aAAc,UAAU,UAAU,QAAQ,SAAU,cAAc;KAE9E,MAAM,gBAAgB,GACtB,MACF;EAEA,MAAM,cAAc,UACjB,QAAgB,SAAiB;GAChC,MAAM,YAAY,aAAa;GAC/B,IAAI,CAAC,WAAW;GAChB,MAAM,EAAE,cAAc,iBAAiB;GACvC,UAAU,YAAa,UAAU,UAAU,SAAS,SAAU,eAAe;KAE/E,MAAM,gBAAgB,GACtB,MACF;EAEA,MAAM,qBAAqB;GACzB,WAAU;;EAGZ,kBAAkB;GAChB,SAAS,CAAC,YAAY,UAAS;GAC/B,WAAW,YAAY;IACrB,MAAM,UAAU,UAAU;IAC1B,IAAI,SAAS;KACX,UAAU,QAAQ,QAAQ;KAC1B,UAAU,SAAS,QAAQ;KAC3B,KAAK,OAAO,aAAa,UAAU,MAAK;KACxC,KAAK,OAAO,aAAa,UAAU,OAAM;;IAE3C,WAAU;IACV,IAAI,QAAQ,QACV,KACE,UACA,QAAQ,KAAK,UAAU,MAAM,OAC/B,CAAA;;GAGL,CAAA;EAED,MAAM,gBAAgB,SAAiB;GACrC,MAAM,YAAY,aAAa;GAC/B,IAAI,CAAC,WAAW;GAChB,UAAU,SAAS,EAAE,MAAM,CAAA;;EAG7B,MAAM,eAAe,QAAgB;GACnC,MAAM,YAAY,aAAa;GAC/B,IAAI,CAAC,WAAW;GAChB,UAAU,SAAS,EAAE,KAAK,CAAA;;EAG5B,MAAM,YAAY,aAA6B;GAC7C,IAAI,SAAS,MAAM,KAAA,GAAW,aAAa,SAAS,EAAC;GACrD,IAAI,SAAS,MAAM,KAAA,GAAW,YAAY,SAAS,EAAC;;EAGtD,QAAQ,aAAa,EACnB,KACD,CAAA;EAUD,SAAa;GAPX,IAAI;GACJ;GACA;GACA;GACA,QAAQ;GAGU,CAAA;;uBApLlB,mBAmBM,OAAA;IAnBA,OAAK,eAAE,UAAA,MAAS;IAAG,OAAK,eAAE,MAAA,MAAK;aAAM;IAAJ,KAAI;;IACzC,mBAcM,OAAA;cAbA;KAAJ,KAAI;KACH,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,EAAC,YAAA,EAAe,QAAA,eAAc,CAAA;sBAC1B;KAChB,OAAK,eAAE,QAAA,eAAc;sBAEtB,YAOY,wBAHL,QAAA,IAAG,EAAA;cAHJ;KAAJ,KAAI;KACH,OAAK,eAAE,QAAA,aAAY;KACnB,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,EAAC,UAAA,EAAa,QAAA,aAAY,CAAA;;4BAG/B,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA;;;IAIZ,YAAgF,aAAA;KAAlE,MAAK;KAAK,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA;KAAY,QAAM,MAAA,YAAA;cAAiB;KAAJ,KAAI;;IACvE,YAAgF,aAAA;KAAlE,MAAK;KAAK,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA;KAAY,QAAM,MAAA,YAAA;cAAiB;KAAJ,KAAI"}
@@ -22,28 +22,6 @@
22
22
  overflow: hidden;
23
23
  scroll-behavior: auto;
24
24
  }
25
- .u-scroll.is-external {
26
- display: contents;
27
- }
28
- .u-scroll__overlay {
29
- position: absolute;
30
- inset: 0;
31
- overflow: hidden;
32
- pointer-events: none;
33
- z-index: 2;
34
- }
35
- .u-scroll__overlay .u-scroll__bar-x {
36
- pointer-events: auto;
37
- }
38
- .u-scroll__overlay .u-scroll__bar-y {
39
- pointer-events: auto;
40
- }
41
- .u-scroll__overlay:hover > .u-scroll__bar-x {
42
- opacity: 1;
43
- }
44
- .u-scroll__overlay:hover > .u-scroll__bar-y {
45
- opacity: 1;
46
- }
47
25
  .u-scroll__container {
48
26
  overflow: auto;
49
27
  height: 100%;
@@ -28,10 +28,10 @@ declare const __VLS_base: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {}, {
28
28
  }>, {
29
29
  disabled: boolean;
30
30
  readonly: boolean;
31
- labelKey: string;
32
- valueKey: string;
33
31
  placeholder: string;
34
32
  clearable: boolean;
33
+ labelKey: string;
34
+ valueKey: string;
35
35
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
36
36
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
37
37
  declare const _default: typeof __VLS_export;
@@ -16,17 +16,17 @@ declare const __VLS_base: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {}, {
16
16
  "update:modelValue": (value: string | undefined) => any;
17
17
  } & {
18
18
  "update:modelValue": (value: string) => any;
19
- click: (item: TabItem, index: number) => any;
20
19
  close: (item: TabItem, index: number) => any;
20
+ click: (item: TabItem, index: number) => any;
21
21
  }, string, _$vue.PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
22
22
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
23
- onClick?: ((item: TabItem, index: number) => any) | undefined;
24
23
  onClose?: ((item: TabItem, index: number) => any) | undefined;
24
+ onClick?: ((item: TabItem, index: number) => any) | undefined;
25
25
  }>, {
26
26
  closable: boolean;
27
- rounded: boolean;
28
27
  position: "top" | "bottom";
29
28
  block: boolean;
29
+ rounded: boolean;
30
30
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
31
31
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
32
32
  declare const _default: typeof __VLS_export;
@@ -15,16 +15,16 @@ declare const __VLS_base: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {}, {
15
15
  "update:modelValue": (value: string | undefined) => any;
16
16
  } & {
17
17
  "update:modelValue": (value: string) => any;
18
- click: (item: TabItem, index: number) => any;
19
18
  close: (item: TabItem, index: number) => any;
19
+ click: (item: TabItem, index: number) => any;
20
20
  }, string, _$vue.PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
21
21
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
22
- onClick?: ((item: TabItem, index: number) => any) | undefined;
23
22
  onClose?: ((item: TabItem, index: number) => any) | undefined;
23
+ onClick?: ((item: TabItem, index: number) => any) | undefined;
24
24
  }>, {
25
25
  closable: boolean;
26
- rounded: boolean;
27
26
  position: "left" | "right";
27
+ rounded: boolean;
28
28
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
29
29
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
30
30
  declare const _default: typeof __VLS_export;
@@ -11,17 +11,17 @@ declare const __VLS_export: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {},
11
11
  "update:modelValue": (value: string | undefined) => any;
12
12
  } & {
13
13
  "update:modelValue": (value: string) => any;
14
- click: (item: TabItem, index: number) => any;
15
14
  close: (item: TabItem, index: number) => any;
15
+ click: (item: TabItem, index: number) => any;
16
16
  }, string, _$vue.PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
17
17
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
18
- onClick?: ((item: TabItem, index: number) => any) | undefined;
19
18
  onClose?: ((item: TabItem, index: number) => any) | undefined;
19
+ onClick?: ((item: TabItem, index: number) => any) | undefined;
20
20
  }>, {
21
21
  closable: boolean;
22
- rounded: boolean;
23
22
  position: "left" | "right" | "top" | "bottom";
24
23
  block: boolean;
24
+ rounded: boolean;
25
25
  keepAlive: boolean;
26
26
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
27
27
  declare const _default: typeof __VLS_export;
@@ -11,15 +11,15 @@ declare const __VLS_export: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {},
11
11
  "update:modelValue": (value: string | undefined) => any;
12
12
  } & {
13
13
  "update:modelValue": (value: string) => any;
14
- clear: () => any;
15
14
  change: (value: string) => any;
16
15
  focus: () => any;
16
+ clear: () => any;
17
17
  blur: () => any;
18
18
  }, string, _$vue.PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
19
19
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
20
- onClear?: (() => any) | undefined;
21
20
  onChange?: ((value: string) => any) | undefined;
22
21
  onFocus?: (() => any) | undefined;
22
+ onClear?: (() => any) | undefined;
23
23
  onBlur?: (() => any) | undefined;
24
24
  }>, {
25
25
  disabled: boolean;
@@ -14,8 +14,8 @@ declare const __VLS_base: _$vue.DefineComponent<TipProps, {}, {}, {}, {}, _$vue.
14
14
  trigger: "hover" | "click";
15
15
  contentTag: string;
16
16
  visible: boolean;
17
- direction: TipDirection;
18
17
  content: string;
18
+ direction: TipDirection;
19
19
  alignment: TipAlign;
20
20
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
21
21
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -15,24 +15,24 @@ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
15
15
  declare const __VLS_base: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {
16
16
  "update:modelValue": (value: string | number | undefined) => any;
17
17
  } & {
18
- clear: () => any;
19
18
  change: (value?: string | number | undefined, selectedData?: Record<string, any> | undefined) => any;
19
+ clear: () => any;
20
20
  "update:text": (text?: string | undefined) => any;
21
21
  }, string, _$vue.PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
22
22
  "onUpdate:modelValue"?: ((value: string | number | undefined) => any) | undefined;
23
- onClear?: (() => any) | undefined;
24
23
  onChange?: ((value?: string | number | undefined, selectedData?: Record<string, any> | undefined) => any) | undefined;
24
+ onClear?: (() => any) | undefined;
25
25
  "onUpdate:text"?: ((text?: string | undefined) => any) | undefined;
26
26
  }>, {
27
27
  disabled: boolean;
28
28
  readonly: boolean;
29
+ placeholder: string;
30
+ clearable: boolean;
29
31
  expandAll: boolean;
30
32
  labelKey: string;
31
33
  valueKey: string;
32
- placeholder: string;
33
- clearable: boolean;
34
- filterable: boolean;
35
34
  minWidth: string;
35
+ filterable: boolean;
36
36
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
37
37
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
38
38
  declare const _default: typeof __VLS_export;
@@ -7,8 +7,8 @@ type __VLS_Slots = {} & {
7
7
  default?: (props: typeof __VLS_7) => any;
8
8
  };
9
9
  declare const __VLS_base: _$vue.DefineComponent<WatermarkProps, {}, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {}, string, _$vue.PublicProps, Readonly<WatermarkProps> & Readonly<{}>, {
10
- route: number;
11
10
  fontSize: number;
11
+ route: number;
12
12
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
13
13
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
14
14
  declare const _default: typeof __VLS_export;
@@ -1,4 +1,4 @@
1
- import { CSSProperties, MaybeRefOrGetter, ShallowRef } from "vue";
1
+ import { CSSProperties, ShallowRef } from "vue";
2
2
  import { DeconstructValue } from "@veltra/utils";
3
3
 
4
4
  //#region src/types/scroll.d.ts
@@ -41,11 +41,6 @@ interface ScrollProps {
41
41
  containerClass?: string | string[];
42
42
  /** 拖拽防抖时间 */
43
43
  dragDebounce?: number;
44
- /**
45
- * 外部滚动容器(如 EmbedPDF Viewport)。
46
- * 提供时仅渲染自定义滚动条并同步该元素的滚动,不创建内部滚动容器。
47
- */
48
- target?: MaybeRefOrGetter<HTMLElement | null | undefined>;
49
44
  }
50
45
  interface ScrollEmits {
51
46
  /** 滚动事件 */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veltra/desktop",
3
- "version": "1.1.19",
3
+ "version": "1.1.21",
4
4
  "files": [
5
5
  "dist",
6
6
  "src"
@@ -70,11 +70,11 @@
70
70
  "peerDependencies": {
71
71
  "@cat-kit/core": ">=1.1.0",
72
72
  "@cat-kit/excel": ">=1.0.0",
73
- "@veltra/compositions": "1.1.19",
74
- "@veltra/directives": "1.1.19",
75
- "@veltra/icons": "1.1.19",
76
- "@veltra/styles": "1.1.19",
77
- "@veltra/utils": "1.1.19",
73
+ "@veltra/compositions": "1.1.21",
74
+ "@veltra/directives": "1.1.21",
75
+ "@veltra/icons": "1.1.21",
76
+ "@veltra/styles": "1.1.21",
77
+ "@veltra/utils": "1.1.21",
78
78
  "vue": ">=3.5.0"
79
79
  }
80
80
  }
@@ -1,15 +1,10 @@
1
1
  <template>
2
- <!-- EmbedPDF Viewport 自带滚动;u-scroll 仅同步自定义滚动条 -->
3
- <u-scroll :target="viewportEl">
4
- <slot />
5
- </u-scroll>
2
+ <slot />
6
3
  </template>
7
4
 
8
5
  <script lang="ts" setup>
9
6
  import { computed, inject, onBeforeUnmount, type Ref, watch } from 'vue'
10
7
 
11
- import { UScroll } from '../../scroll'
12
-
13
8
  defineOptions({ name: 'FileViewerPdfViewportScroll' })
14
9
 
15
10
  /** EmbedPDF Viewport 向子树注入的滚动容器 ref */
@@ -1,35 +1,23 @@
1
1
  <template>
2
2
  <div :class="className" :style="style" ref="scrollRef">
3
- <template v-if="!isExternal">
4
- <div
5
- ref="containerRef"
6
- :class="[cls.e('container'), containerClass]"
7
- @scroll.passive="handleScroll"
8
- :style="containerStyle"
3
+ <div
4
+ ref="containerRef"
5
+ :class="[cls.e('container'), containerClass]"
6
+ @scroll.passive="handleScroll"
7
+ :style="containerStyle"
8
+ >
9
+ <component
10
+ ref="contentRef"
11
+ :style="contentStyle"
12
+ :class="[cls.e('content'), contentClass]"
13
+ :is="tag"
9
14
  >
10
- <component
11
- ref="contentRef"
12
- :style="contentStyle"
13
- :class="[cls.e('content'), contentClass]"
14
- :is="tag"
15
- >
16
- <slot />
17
- </component>
18
- </div>
15
+ <slot />
16
+ </component>
17
+ </div>
19
18
 
20
- <u-scroll-bar type="y" :class="cls.e('bar-y')" @drag="handleDragY" ref="barY" />
21
- <u-scroll-bar type="x" :class="cls.e('bar-x')" @drag="handleDragX" ref="barX" />
22
- </template>
23
-
24
- <template v-else>
25
- <slot />
26
- <Teleport v-if="externalTarget" :to="externalTarget">
27
- <div ref="overlayRef" :class="cls.e('overlay')">
28
- <u-scroll-bar type="y" :class="cls.e('bar-y')" @drag="handleDragY" ref="barY" />
29
- <u-scroll-bar type="x" :class="cls.e('bar-x')" @drag="handleDragX" ref="barX" />
30
- </div>
31
- </Teleport>
32
- </template>
19
+ <u-scroll-bar type="y" :class="cls.e('bar-y')" @drag="handleDragY" ref="barY" />
20
+ <u-scroll-bar type="x" :class="cls.e('bar-x')" @drag="handleDragX" ref="barX" />
33
21
  </div>
34
22
  </template>
35
23
 
@@ -37,15 +25,7 @@
37
25
  import { debounce } from '@cat-kit/core'
38
26
  import { useResizeObserver } from '@veltra/compositions'
39
27
  import { bem, withUnit } from '@veltra/utils'
40
- import {
41
- type CSSProperties,
42
- computed,
43
- onBeforeUnmount,
44
- provide,
45
- shallowRef,
46
- toValue,
47
- watch
48
- } from 'vue'
28
+ import { type CSSProperties, computed, provide, shallowRef } from 'vue'
49
29
 
50
30
  import type { ScrollPosition, _ScrollExposed, ScrollProps, ScrollEmits } from '../../types'
51
31
  import { ScrollDIKey } from './di'
@@ -70,16 +50,11 @@ defineSlots<{
70
50
 
71
51
  const cls = bem('scroll')
72
52
 
73
- const isExternal = computed(() => props.target !== undefined)
74
-
75
- const externalTarget = computed(() => (isExternal.value ? toValue(props.target) : null))
76
-
77
53
  const className = computed(() => {
78
- return [cls.b, bem.is('always', props.always), bem.is('external', isExternal.value)]
54
+ return [cls.b, bem.is('always', props.always)]
79
55
  })
80
56
 
81
57
  const style = computed<CSSProperties>(() => {
82
- if (isExternal.value) return {}
83
58
  return {
84
59
  height: withUnit(props.height, 'px')
85
60
  }
@@ -88,7 +63,6 @@ const style = computed<CSSProperties>(() => {
88
63
  const contentRef = shallowRef<HTMLElement>()
89
64
  const scrollRef = shallowRef<HTMLElement>()
90
65
  const containerRef = shallowRef<HTMLElement>()
91
- const overlayRef = shallowRef<HTMLElement>()
92
66
  const barX = shallowRef<InstanceType<typeof UScrollBar>>()
93
67
  const barY = shallowRef<InstanceType<typeof UScrollBar>>()
94
68
  const minSize = 20
@@ -98,25 +72,8 @@ const trackSize = {
98
72
  height: 0
99
73
  }
100
74
 
101
- function getScrollContainer(): HTMLElement | undefined {
102
- if (isExternal.value) {
103
- return externalTarget.value ?? undefined
104
- }
105
- return containerRef.value
106
- }
107
-
108
- function syncTrackSize() {
109
- const container = getScrollContainer()
110
- if (!container) return
111
-
112
- trackSize.width = container.clientWidth
113
- trackSize.height = container.clientHeight
114
- barX.value?.setTrackSize(trackSize.width)
115
- barY.value?.setTrackSize(trackSize.height)
116
- }
117
-
118
75
  const updateBar = () => {
119
- const container = getScrollContainer()
76
+ const container = containerRef.value
120
77
  if (!container) return
121
78
 
122
79
  const { scrollHeight, clientHeight, scrollTop, scrollWidth, clientWidth, scrollLeft } = container
@@ -149,7 +106,7 @@ const updateBar = () => {
149
106
 
150
107
  const handleDragX = debounce(
151
108
  (offset: number, size: number) => {
152
- const container = getScrollContainer()
109
+ const container = containerRef.value
153
110
  if (!container) return
154
111
  const { clientWidth, scrollWidth } = container
155
112
  container.scrollLeft = (offset / (trackSize.width - size)) * (scrollWidth - clientWidth)
@@ -160,7 +117,7 @@ const handleDragX = debounce(
160
117
 
161
118
  const handleDragY = debounce(
162
119
  (offset: number, size: number) => {
163
- const container = getScrollContainer()
120
+ const container = containerRef.value
164
121
  if (!container) return
165
122
  const { clientHeight, scrollHeight } = container
166
123
  container.scrollTop = (offset / (trackSize.height - size)) * (scrollHeight - clientHeight)
@@ -174,9 +131,15 @@ const handleScroll = () => {
174
131
  }
175
132
 
176
133
  useResizeObserver({
177
- targets: [contentRef, scrollRef, () => externalTarget.value ?? null],
134
+ targets: [contentRef, scrollRef],
178
135
  onResize: (entries) => {
179
- syncTrackSize()
136
+ const trackEl = scrollRef.value
137
+ if (trackEl) {
138
+ trackSize.width = trackEl.clientWidth
139
+ trackSize.height = trackEl.clientHeight
140
+ barX.value?.setTrackSize(trackSize.width)
141
+ barY.value?.setTrackSize(trackSize.height)
142
+ }
180
143
  updateBar()
181
144
  if (entries.length) {
182
145
  emit(
@@ -187,41 +150,14 @@ useResizeObserver({
187
150
  }
188
151
  })
189
152
 
190
- let detachExternalScroll: (() => void) | undefined
191
-
192
- watch(
193
- externalTarget,
194
- (el, _, onCleanup) => {
195
- detachExternalScroll?.()
196
- detachExternalScroll = undefined
197
- if (!el || !isExternal.value) return
198
-
199
- const onScroll = () => updateBar()
200
- el.addEventListener('scroll', onScroll, { passive: true })
201
- detachExternalScroll = () => el.removeEventListener('scroll', onScroll)
202
- syncTrackSize()
203
- updateBar()
204
-
205
- onCleanup(() => {
206
- detachExternalScroll?.()
207
- detachExternalScroll = undefined
208
- })
209
- },
210
- { immediate: true }
211
- )
212
-
213
- onBeforeUnmount(() => {
214
- detachExternalScroll?.()
215
- })
216
-
217
153
  const scrollToLeft = (left: number) => {
218
- const container = getScrollContainer()
154
+ const container = containerRef.value
219
155
  if (!container) return
220
156
  container.scrollTo({ left })
221
157
  }
222
158
 
223
159
  const scrollToTop = (top: number) => {
224
- const container = getScrollContainer()
160
+ const container = containerRef.value
225
161
  if (!container) return
226
162
  container.scrollTo({ top })
227
163
  }
@@ -235,20 +171,10 @@ provide(ScrollDIKey, {
235
171
  cls
236
172
  })
237
173
 
238
- const activeContainerRef = shallowRef<HTMLElement>()
239
-
240
- watch(
241
- [isExternal, externalTarget, containerRef],
242
- () => {
243
- activeContainerRef.value = getScrollContainer()
244
- },
245
- { immediate: true }
246
- )
247
-
248
174
  const exposed: _ScrollExposed = {
249
175
  el: scrollRef,
250
176
  contentRef,
251
- containerRef: activeContainerRef,
177
+ containerRef,
252
178
  scrollTo,
253
179
  update: updateBar
254
180
  }
@@ -12,28 +12,6 @@ $root-name: scroll;
12
12
  overflow: hidden;
13
13
  scroll-behavior: auto;
14
14
 
15
- @include m.is(external) {
16
- display: contents;
17
- }
18
-
19
- @include m.e(overlay) {
20
- position: absolute;
21
- inset: 0;
22
- overflow: hidden;
23
- pointer-events: none;
24
- z-index: 2;
25
-
26
- @include m.bem($root-name, (bar-x, bar-y)) {
27
- pointer-events: auto;
28
- }
29
-
30
- &:hover > {
31
- @include m.bem($root-name, (bar-x, bar-y)) {
32
- opacity: 1;
33
- }
34
- }
35
- }
36
-
37
15
  // 滚动容器
38
16
  @include m.e(container) {
39
17
  overflow: auto;
@@ -1,5 +1,5 @@
1
1
  import type { DeconstructValue } from '@veltra/utils'
2
- import type { CSSProperties, MaybeRefOrGetter, ShallowRef } from 'vue'
2
+ import type { CSSProperties, ShallowRef } from 'vue'
3
3
 
4
4
  export type ScrollPosition = {
5
5
  /** 横向位置 */
@@ -53,12 +53,6 @@ export interface ScrollProps {
53
53
 
54
54
  /** 拖拽防抖时间 */
55
55
  dragDebounce?: number
56
-
57
- /**
58
- * 外部滚动容器(如 EmbedPDF Viewport)。
59
- * 提供时仅渲染自定义滚动条并同步该元素的滚动,不创建内部滚动容器。
60
- */
61
- target?: MaybeRefOrGetter<HTMLElement | null | undefined>
62
56
  }
63
57
 
64
58
  export interface ScrollEmits {