@veltra/desktop 1.1.20 → 1.1.22

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.
@@ -28,8 +28,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
28
28
  const classList = computed(() => [
29
29
  cls.e("item"),
30
30
  bem.is("active", isActive.value),
31
- bem.is("disabled", props.disabled),
32
- bem.is("bordered", context?.bordered.value)
31
+ bem.is("disabled", props.disabled)
33
32
  ]);
34
33
  const headerClassList = computed(() => [
35
34
  cls.e("header"),
@@ -1 +1 @@
1
- {"version":3,"file":"collapse-item.js","names":[],"sources":["../../../src/components/collapse/collapse-item.vue"],"sourcesContent":["<template>\n <div :class=\"classList\">\n <div\n :class=\"headerClassList\"\n role=\"button\"\n :aria-expanded=\"isActive\"\n :aria-disabled=\"disabled\"\n :tabindex=\"disabled ? -1 : 0\"\n @click=\"handleClick\"\n @keydown.enter.prevent=\"handleClick\"\n @keydown.space.prevent=\"handleClick\"\n >\n <span :class=\"cls.e('title')\">\n <slot name=\"title\">{{ title }}</slot>\n </span>\n\n <span :class=\"cls.e('icon')\">\n <slot name=\"icon\" :is-active=\"isActive\">\n <UIcon><component :is=\"iconComponent\" /></UIcon>\n </slot>\n </span>\n </div>\n <div ref=\"wrapperEl\" :class=\"cls.e('content-wrapper')\" :aria-hidden=\"!isActive\">\n <div :class=\"cls.e('content')\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, inject, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nimport type { CollapseItemProps } from '../../types'\nimport { UIcon } from '../icon'\nimport { CollapseDIKey } from './di'\n\ndefineOptions({\n name: 'CollapseItem'\n})\n\nconst props = defineProps<CollapseItemProps>()\n\nconst context = inject(CollapseDIKey)!\n\nconst cls = context?.cls ?? bem('collapse')\n\nconst isActive = computed(() => !!context?.activeValues.value.includes(props.value))\n\nconst iconComponent = computed(() => context?.expandIcon.value ?? ArrowRight)\n\nconst classList = computed(() => [\n cls.e('item'),\n bem.is('active', isActive.value),\n bem.is('disabled', props.disabled),\n bem.is('bordered', context?.bordered.value)\n])\n\nconst headerClassList = computed(() => [\n cls.e('header'),\n bem.is('disabled', props.disabled),\n bem.is('active', isActive.value)\n])\n\nconst handleClick = () => {\n if (props.disabled) return\n context?.toggle(props.value)\n}\n\nconst wrapperEl = ref<HTMLElement>()\n\nconst { expandTransition } = context\n\nonMounted(() => {\n context?.register(props.value)\n if (!wrapperEl.value) return\n expandTransition.setExpanded(wrapperEl.value, isActive.value)\n})\n\nwatch(isActive, (active) => {\n if (!wrapperEl.value) return\n active ? expandTransition.expand(wrapperEl.value) : expandTransition.collapse(wrapperEl.value)\n})\n\nonBeforeUnmount(() => {\n context?.unregister(props.value)\n if (!wrapperEl.value) return\n expandTransition.cancel(wrapperEl.value)\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EA2CA,MAAM,QAAQ;EAEd,MAAM,UAAU,OAAO,cAAa;EAEpC,MAAM,MAAM,SAAS,OAAO,IAAI,WAAU;EAE1C,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,aAAa,MAAM,SAAS,MAAM,MAAM,CAAA;EAEnF,MAAM,gBAAgB,eAAe,SAAS,WAAW,SAAS,WAAU;EAE5E,MAAM,YAAY,eAAe;GAC/B,IAAI,EAAE,OAAM;GACZ,IAAI,GAAG,UAAU,SAAS,MAAK;GAC/B,IAAI,GAAG,YAAY,MAAM,SAAQ;GACjC,IAAI,GAAG,YAAY,SAAS,SAAS,MAAK;GAC3C,CAAA;EAED,MAAM,kBAAkB,eAAe;GACrC,IAAI,EAAE,SAAQ;GACd,IAAI,GAAG,YAAY,MAAM,SAAQ;GACjC,IAAI,GAAG,UAAU,SAAS,MAAK;GAChC,CAAA;EAED,MAAM,oBAAoB;GACxB,IAAI,MAAM,UAAU;GACpB,SAAS,OAAO,MAAM,MAAK;;EAG7B,MAAM,YAAY,KAAiB;EAEnC,MAAM,EAAE,qBAAqB;EAE7B,gBAAgB;GACd,SAAS,SAAS,MAAM,MAAK;GAC7B,IAAI,CAAC,UAAU,OAAO;GACtB,iBAAiB,YAAY,UAAU,OAAO,SAAS,MAAK;IAC7D;EAED,MAAM,WAAW,WAAW;GAC1B,IAAI,CAAC,UAAU,OAAO;GACtB,SAAS,iBAAiB,OAAO,UAAU,MAAK,GAAI,iBAAiB,SAAS,UAAU,MAAK;IAC9F;EAED,sBAAsB;GACpB,SAAS,WAAW,MAAM,MAAK;GAC/B,IAAI,CAAC,UAAU,OAAO;GACtB,iBAAiB,OAAO,UAAU,MAAK;IACxC;;uBAzFC,mBA0BM,OAAA,EA1BA,OAAK,eAAE,UAAA,MAAS,EAAA,EAAA,CACpB,mBAmBM,OAAA;IAlBH,OAAK,eAAE,gBAAA,MAAe;IACvB,MAAK;IACJ,iBAAe,SAAA;IACf,iBAAe,QAAA;IACf,UAAU,QAAA,WAAQ,KAAA;IAClB,SAAO;IACP,WAAO,CAAA,SAAA,cAAgB,aAAW,CAAA,UAAA,CAAA,EAAA,CAAA,QAAA,CAAA,EAAA,SAAA,cACX,aAAW,CAAA,UAAA,CAAA,EAAA,CAAA,QAAA,CAAA,CAAA;OAEnC,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA,EAAA,EAAA,CACjB,WAAqC,KAAA,QAAA,SAAA,EAAA,QAAA,CAAA,gBAAA,gBAAf,QAAA,MAAK,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,EAG7B,mBAIO,QAAA,EAJA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA,EAAA,EAAA,CACjB,WAEO,KAAA,QAAA,QAAA,EAFY,UAAW,SAAA,OAAQ,QAE/B,CADL,YAAgD,MAAA,YAAA,EAAA,MAAA;2BAAR,EAAA,WAAA,EAAjC,YAAiC,wBAAjB,cAAA,MAAa,CAAA,EAAA,CAAA;;gCAI1C,mBAIM,OAAA;aAJG;IAAJ,KAAI;IAAa,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,kBAAA,CAAA;IAAsB,eAAW,CAAG,SAAA;OACpE,mBAEM,OAAA,EAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,UAAA,CAAA,EAAA,EAAA,CAChB,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA,CAAA,EAAA,IAAA,WAAA,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"collapse-item.js","names":[],"sources":["../../../src/components/collapse/collapse-item.vue"],"sourcesContent":["<template>\n <div :class=\"classList\">\n <div\n :class=\"headerClassList\"\n role=\"button\"\n :aria-expanded=\"isActive\"\n :aria-disabled=\"disabled\"\n :tabindex=\"disabled ? -1 : 0\"\n @click=\"handleClick\"\n @keydown.enter.prevent=\"handleClick\"\n @keydown.space.prevent=\"handleClick\"\n >\n <span :class=\"cls.e('title')\">\n <slot name=\"title\">{{ title }}</slot>\n </span>\n\n <span :class=\"cls.e('icon')\">\n <slot name=\"icon\" :is-active=\"isActive\">\n <UIcon><component :is=\"iconComponent\" /></UIcon>\n </slot>\n </span>\n </div>\n <div ref=\"wrapperEl\" :class=\"cls.e('content-wrapper')\" :aria-hidden=\"!isActive\">\n <div :class=\"cls.e('content')\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, inject, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nimport type { CollapseItemProps } from '../../types'\nimport { UIcon } from '../icon'\nimport { CollapseDIKey } from './di'\n\ndefineOptions({\n name: 'CollapseItem'\n})\n\nconst props = defineProps<CollapseItemProps>()\n\nconst context = inject(CollapseDIKey)!\n\nconst cls = context?.cls ?? bem('collapse')\n\nconst isActive = computed(() => !!context?.activeValues.value.includes(props.value))\n\nconst iconComponent = computed(() => context?.expandIcon.value ?? ArrowRight)\n\nconst classList = computed(() => [\n cls.e('item'),\n bem.is('active', isActive.value),\n bem.is('disabled', props.disabled)\n])\n\nconst headerClassList = computed(() => [\n cls.e('header'),\n bem.is('disabled', props.disabled),\n bem.is('active', isActive.value)\n])\n\nconst handleClick = () => {\n if (props.disabled) return\n context?.toggle(props.value)\n}\n\nconst wrapperEl = ref<HTMLElement>()\n\nconst { expandTransition } = context\n\nonMounted(() => {\n context?.register(props.value)\n if (!wrapperEl.value) return\n expandTransition.setExpanded(wrapperEl.value, isActive.value)\n})\n\nwatch(isActive, (active) => {\n if (!wrapperEl.value) return\n active ? expandTransition.expand(wrapperEl.value) : expandTransition.collapse(wrapperEl.value)\n})\n\nonBeforeUnmount(() => {\n context?.unregister(props.value)\n if (!wrapperEl.value) return\n expandTransition.cancel(wrapperEl.value)\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EA2CA,MAAM,QAAQ;EAEd,MAAM,UAAU,OAAO,cAAa;EAEpC,MAAM,MAAM,SAAS,OAAO,IAAI,WAAU;EAE1C,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,aAAa,MAAM,SAAS,MAAM,MAAM,CAAA;EAEnF,MAAM,gBAAgB,eAAe,SAAS,WAAW,SAAS,WAAU;EAE5E,MAAM,YAAY,eAAe;GAC/B,IAAI,EAAE,OAAM;GACZ,IAAI,GAAG,UAAU,SAAS,MAAK;GAC/B,IAAI,GAAG,YAAY,MAAM,SAAQ;GAClC,CAAA;EAED,MAAM,kBAAkB,eAAe;GACrC,IAAI,EAAE,SAAQ;GACd,IAAI,GAAG,YAAY,MAAM,SAAQ;GACjC,IAAI,GAAG,UAAU,SAAS,MAAK;GAChC,CAAA;EAED,MAAM,oBAAoB;GACxB,IAAI,MAAM,UAAU;GACpB,SAAS,OAAO,MAAM,MAAK;;EAG7B,MAAM,YAAY,KAAiB;EAEnC,MAAM,EAAE,qBAAqB;EAE7B,gBAAgB;GACd,SAAS,SAAS,MAAM,MAAK;GAC7B,IAAI,CAAC,UAAU,OAAO;GACtB,iBAAiB,YAAY,UAAU,OAAO,SAAS,MAAK;IAC7D;EAED,MAAM,WAAW,WAAW;GAC1B,IAAI,CAAC,UAAU,OAAO;GACtB,SAAS,iBAAiB,OAAO,UAAU,MAAK,GAAI,iBAAiB,SAAS,UAAU,MAAK;IAC9F;EAED,sBAAsB;GACpB,SAAS,WAAW,MAAM,MAAK;GAC/B,IAAI,CAAC,UAAU,OAAO;GACtB,iBAAiB,OAAO,UAAU,MAAK;IACxC;;uBAxFC,mBA0BM,OAAA,EA1BA,OAAK,eAAE,UAAA,MAAS,EAAA,EAAA,CACpB,mBAmBM,OAAA;IAlBH,OAAK,eAAE,gBAAA,MAAe;IACvB,MAAK;IACJ,iBAAe,SAAA;IACf,iBAAe,QAAA;IACf,UAAU,QAAA,WAAQ,KAAA;IAClB,SAAO;IACP,WAAO,CAAA,SAAA,cAAgB,aAAW,CAAA,UAAA,CAAA,EAAA,CAAA,QAAA,CAAA,EAAA,SAAA,cACX,aAAW,CAAA,UAAA,CAAA,EAAA,CAAA,QAAA,CAAA,CAAA;OAEnC,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA,EAAA,EAAA,CACjB,WAAqC,KAAA,QAAA,SAAA,EAAA,QAAA,CAAA,gBAAA,gBAAf,QAAA,MAAK,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,EAG7B,mBAIO,QAAA,EAJA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA,EAAA,EAAA,CACjB,WAEO,KAAA,QAAA,QAAA,EAFY,UAAW,SAAA,OAAQ,QAE/B,CADL,YAAgD,MAAA,YAAA,EAAA,MAAA;2BAAR,EAAA,WAAA,EAAjC,YAAiC,wBAAjB,cAAA,MAAa,CAAA,EAAA,CAAA;;gCAI1C,mBAIM,OAAA;aAJG;IAAJ,KAAI;IAAa,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,kBAAA,CAAA;IAAsB,eAAW,CAAG,SAAA;OACpE,mBAEM,OAAA,EAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,UAAA,CAAA,EAAA,EAAA,CAChB,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA,CAAA,EAAA,IAAA,WAAA,CAAA,EAAA,EAAA"}
@@ -16,10 +16,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
16
16
  type: Boolean,
17
17
  default: false
18
18
  },
19
- bordered: {
20
- type: Boolean,
21
- default: false
22
- },
23
19
  expandIcon: {},
24
20
  size: {}
25
21
  },
@@ -31,12 +27,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
31
27
  const expandTransition = new ExpandTransition({ transition: "height 0.24s cubic-bezier(0.4, 0, 0.2, 1)" });
32
28
  const { size } = useFormFallbackProps([props], { size: "default" });
33
29
  const expandIcon = computed(() => props.expandIcon);
34
- const bordered = computed(() => props.bordered);
35
- const classList = computed(() => [
36
- cls.b,
37
- cls.m(size.value),
38
- bem.is("bordered", bordered.value)
39
- ]);
30
+ const classList = computed(() => [cls.b, cls.m(size.value)]);
40
31
  const modelValue = useModel$1({
41
32
  props,
42
33
  emit,
@@ -82,7 +73,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
82
73
  provide(CollapseDIKey, {
83
74
  cls,
84
75
  size,
85
- bordered,
86
76
  expandIcon,
87
77
  activeValues,
88
78
  toggle,
@@ -1 +1 @@
1
- {"version":3,"file":"collapse.js","names":[],"sources":["../../../src/components/collapse/collapse.vue"],"sourcesContent":["<template>\n <div :class=\"classList\" role=\"region\">\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps, useModel } from '@veltra/compositions'\nimport { bem, ExpandTransition } from '@veltra/utils'\nimport { computed, provide, ref } from 'vue'\n\nimport type { CollapseEmits, CollapseModelValue, CollapseProps, CollapseValue } from '../../types'\nimport { CollapseDIKey } from './di'\n\ndefineOptions({\n name: 'Collapse'\n})\n\nconst props = withDefaults(defineProps<CollapseProps>(), {\n accordion: false,\n defaultCollapseAll: false,\n bordered: false\n})\nconst emit = defineEmits<CollapseEmits>()\n\nconst cls = bem('collapse')\n\nconst expandTransition = new ExpandTransition({\n transition: 'height 0.24s cubic-bezier(0.4, 0, 0.2, 1)'\n})\n\nconst { size } = useFormFallbackProps([props], { size: 'default' })\n\nconst expandIcon = computed(() => props.expandIcon)\n\nconst bordered = computed(() => props.bordered)\n\nconst classList = computed(() => [cls.b, cls.m(size.value), bem.is('bordered', bordered.value)])\n\nconst modelValue = useModel<CollapseProps, 'modelValue'>({\n props,\n emit,\n propName: 'modelValue'\n})\n\nconst activeValues = computed<CollapseValue[]>(() => {\n const v = modelValue.value\n if (v === undefined || v === null) return []\n return Array.isArray(v) ? v : [v]\n})\n\nconst update = (next: CollapseModelValue) => {\n modelValue.value = next\n emit('change', next)\n}\n\nconst toggle = (value: CollapseValue) => {\n if (props.accordion) {\n update(activeValues.value[0] === value ? [] : value)\n return\n }\n\n const values = activeValues.value.slice()\n const index = values.indexOf(value)\n if (index > -1) values.splice(index, 1)\n else values.push(value)\n update(values)\n}\n\n// 收集子组件已注册的 values\nconst registeredValues = ref<CollapseValue[]>([])\n\n// 初始捕获 modelValue 是否具有有效初值\nconst hasInitialValue =\n modelValue.value !== undefined &&\n modelValue.value !== null &&\n (!Array.isArray(modelValue.value) || modelValue.value.length > 0)\n\nconst register = (value: CollapseValue) => {\n if (!registeredValues.value.includes(value)) {\n registeredValues.value.push(value)\n\n // 若默认展开全部(defaultCollapseAll 为 false)且外部未指定初始值,则自动展开该子项\n if (!props.defaultCollapseAll && !hasInitialValue) {\n if (props.accordion) {\n if (registeredValues.value.length === 1) {\n update(value)\n }\n } else {\n const current = Array.isArray(modelValue.value)\n ? modelValue.value\n : modelValue.value !== undefined && modelValue.value !== null\n ? [modelValue.value]\n : []\n if (!current.includes(value)) {\n update([...current, value])\n }\n }\n }\n }\n}\n\nconst unregister = (value: CollapseValue) => {\n const idx = registeredValues.value.indexOf(value)\n if (idx > -1) {\n registeredValues.value.splice(idx, 1)\n }\n}\n\nprovide(CollapseDIKey, {\n cls,\n size,\n bordered,\n expandIcon,\n activeValues,\n toggle,\n expandTransition,\n register,\n unregister\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBA,MAAM,QAAQ;EAKd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,WAAU;EAE1B,MAAM,mBAAmB,IAAI,iBAAiB,EAC5C,YAAY,6CACb,CAAA;EAED,MAAM,EAAE,SAAS,qBAAqB,CAAC,MAAK,EAAG,EAAE,MAAM,WAAW,CAAA;EAElE,MAAM,aAAa,eAAe,MAAM,WAAU;EAElD,MAAM,WAAW,eAAe,MAAM,SAAQ;EAE9C,MAAM,YAAY,eAAe;GAAC,IAAI;GAAG,IAAI,EAAE,KAAK,MAAK;GAAG,IAAI,GAAG,YAAY,SAAS,MAAK;GAAE,CAAA;EAE/F,MAAM,aAAa,WAAsC;GACvD;GACA;GACA,UAAU;GACX,CAAA;EAED,MAAM,eAAe,eAAgC;GACnD,MAAM,IAAI,WAAW;GACrB,IAAI,MAAM,KAAA,KAAa,MAAM,MAAM,OAAO,EAAC;GAC3C,OAAO,MAAM,QAAQ,EAAC,GAAI,IAAI,CAAC,EAAC;IACjC;EAED,MAAM,UAAU,SAA6B;GAC3C,WAAW,QAAQ;GACnB,KAAK,UAAU,KAAI;;EAGrB,MAAM,UAAU,UAAyB;GACvC,IAAI,MAAM,WAAW;IACnB,OAAO,aAAa,MAAM,OAAO,QAAQ,EAAC,GAAI,MAAK;IACnD;;GAGF,MAAM,SAAS,aAAa,MAAM,OAAM;GACxC,MAAM,QAAQ,OAAO,QAAQ,MAAK;GAClC,IAAI,QAAQ,IAAI,OAAO,OAAO,OAAO,EAAC;QACjC,OAAO,KAAK,MAAK;GACtB,OAAO,OAAM;;EAIf,MAAM,mBAAmB,IAAqB,EAAE,CAAA;EAGhD,MAAM,kBACJ,WAAW,UAAU,KAAA,KACrB,WAAW,UAAU,SACpB,CAAC,MAAM,QAAQ,WAAW,MAAK,IAAK,WAAW,MAAM,SAAS;EAEjE,MAAM,YAAY,UAAyB;GACzC,IAAI,CAAC,iBAAiB,MAAM,SAAS,MAAK,EAAG;IAC3C,iBAAiB,MAAM,KAAK,MAAK;IAGjC,IAAI,CAAC,MAAM,sBAAsB,CAAC,iBAChC,IAAI,MAAM;SACJ,iBAAiB,MAAM,WAAW,GACpC,OAAO,MAAK;WAET;KACL,MAAM,UAAU,MAAM,QAAQ,WAAW,MAAK,GAC1C,WAAW,QACX,WAAW,UAAU,KAAA,KAAa,WAAW,UAAU,OACrD,CAAC,WAAW,MAAK,GACjB,EAAC;KACP,IAAI,CAAC,QAAQ,SAAS,MAAK,EACzB,OAAO,CAAC,GAAG,SAAS,MAAM,CAAA;;;;EAOpC,MAAM,cAAc,UAAyB;GAC3C,MAAM,MAAM,iBAAiB,MAAM,QAAQ,MAAK;GAChD,IAAI,MAAM,IACR,iBAAiB,MAAM,OAAO,KAAK,EAAC;;EAIxC,QAAQ,eAAe;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAA;;uBAtHC,mBAEM,OAAA;IAFA,OAAK,eAAE,UAAA,MAAS;IAAE,MAAK;OAC3B,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"collapse.js","names":[],"sources":["../../../src/components/collapse/collapse.vue"],"sourcesContent":["<template>\n <div :class=\"classList\" role=\"region\">\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps, useModel } from '@veltra/compositions'\nimport { bem, ExpandTransition } from '@veltra/utils'\nimport { computed, provide, ref } from 'vue'\n\nimport type { CollapseEmits, CollapseModelValue, CollapseProps, CollapseValue } from '../../types'\nimport { CollapseDIKey } from './di'\n\ndefineOptions({\n name: 'Collapse'\n})\n\nconst props = withDefaults(defineProps<CollapseProps>(), {\n accordion: false,\n defaultCollapseAll: false\n})\nconst emit = defineEmits<CollapseEmits>()\n\nconst cls = bem('collapse')\n\nconst expandTransition = new ExpandTransition({\n transition: 'height 0.24s cubic-bezier(0.4, 0, 0.2, 1)'\n})\n\nconst { size } = useFormFallbackProps([props], { size: 'default' })\n\nconst expandIcon = computed(() => props.expandIcon)\n\nconst classList = computed(() => [cls.b, cls.m(size.value)])\n\nconst modelValue = useModel<CollapseProps, 'modelValue'>({\n props,\n emit,\n propName: 'modelValue'\n})\n\nconst activeValues = computed<CollapseValue[]>(() => {\n const v = modelValue.value\n if (v === undefined || v === null) return []\n return Array.isArray(v) ? v : [v]\n})\n\nconst update = (next: CollapseModelValue) => {\n modelValue.value = next\n emit('change', next)\n}\n\nconst toggle = (value: CollapseValue) => {\n if (props.accordion) {\n update(activeValues.value[0] === value ? [] : value)\n return\n }\n\n const values = activeValues.value.slice()\n const index = values.indexOf(value)\n if (index > -1) values.splice(index, 1)\n else values.push(value)\n update(values)\n}\n\n// 收集子组件已注册的 values\nconst registeredValues = ref<CollapseValue[]>([])\n\n// 初始捕获 modelValue 是否具有有效初值\nconst hasInitialValue =\n modelValue.value !== undefined &&\n modelValue.value !== null &&\n (!Array.isArray(modelValue.value) || modelValue.value.length > 0)\n\nconst register = (value: CollapseValue) => {\n if (!registeredValues.value.includes(value)) {\n registeredValues.value.push(value)\n\n // 若默认展开全部(defaultCollapseAll 为 false)且外部未指定初始值,则自动展开该子项\n if (!props.defaultCollapseAll && !hasInitialValue) {\n if (props.accordion) {\n if (registeredValues.value.length === 1) {\n update(value)\n }\n } else {\n const current = Array.isArray(modelValue.value)\n ? modelValue.value\n : modelValue.value !== undefined && modelValue.value !== null\n ? [modelValue.value]\n : []\n if (!current.includes(value)) {\n update([...current, value])\n }\n }\n }\n }\n}\n\nconst unregister = (value: CollapseValue) => {\n const idx = registeredValues.value.indexOf(value)\n if (idx > -1) {\n registeredValues.value.splice(idx, 1)\n }\n}\n\nprovide(CollapseDIKey, {\n cls,\n size,\n expandIcon,\n activeValues,\n toggle,\n expandTransition,\n register,\n unregister\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAkBA,MAAM,QAAQ;EAId,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,WAAU;EAE1B,MAAM,mBAAmB,IAAI,iBAAiB,EAC5C,YAAY,6CACb,CAAA;EAED,MAAM,EAAE,SAAS,qBAAqB,CAAC,MAAK,EAAG,EAAE,MAAM,WAAW,CAAA;EAElE,MAAM,aAAa,eAAe,MAAM,WAAU;EAElD,MAAM,YAAY,eAAe,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,MAAM,CAAC,CAAA;EAE3D,MAAM,aAAa,WAAsC;GACvD;GACA;GACA,UAAU;GACX,CAAA;EAED,MAAM,eAAe,eAAgC;GACnD,MAAM,IAAI,WAAW;GACrB,IAAI,MAAM,KAAA,KAAa,MAAM,MAAM,OAAO,EAAC;GAC3C,OAAO,MAAM,QAAQ,EAAC,GAAI,IAAI,CAAC,EAAC;IACjC;EAED,MAAM,UAAU,SAA6B;GAC3C,WAAW,QAAQ;GACnB,KAAK,UAAU,KAAI;;EAGrB,MAAM,UAAU,UAAyB;GACvC,IAAI,MAAM,WAAW;IACnB,OAAO,aAAa,MAAM,OAAO,QAAQ,EAAC,GAAI,MAAK;IACnD;;GAGF,MAAM,SAAS,aAAa,MAAM,OAAM;GACxC,MAAM,QAAQ,OAAO,QAAQ,MAAK;GAClC,IAAI,QAAQ,IAAI,OAAO,OAAO,OAAO,EAAC;QACjC,OAAO,KAAK,MAAK;GACtB,OAAO,OAAM;;EAIf,MAAM,mBAAmB,IAAqB,EAAE,CAAA;EAGhD,MAAM,kBACJ,WAAW,UAAU,KAAA,KACrB,WAAW,UAAU,SACpB,CAAC,MAAM,QAAQ,WAAW,MAAK,IAAK,WAAW,MAAM,SAAS;EAEjE,MAAM,YAAY,UAAyB;GACzC,IAAI,CAAC,iBAAiB,MAAM,SAAS,MAAK,EAAG;IAC3C,iBAAiB,MAAM,KAAK,MAAK;IAGjC,IAAI,CAAC,MAAM,sBAAsB,CAAC,iBAChC,IAAI,MAAM;SACJ,iBAAiB,MAAM,WAAW,GACpC,OAAO,MAAK;WAET;KACL,MAAM,UAAU,MAAM,QAAQ,WAAW,MAAK,GAC1C,WAAW,QACX,WAAW,UAAU,KAAA,KAAa,WAAW,UAAU,OACrD,CAAC,WAAW,MAAK,GACjB,EAAC;KACP,IAAI,CAAC,QAAQ,SAAS,MAAK,EACzB,OAAO,CAAC,GAAG,SAAS,MAAM,CAAA;;;;EAOpC,MAAM,cAAc,UAAyB;GAC3C,MAAM,MAAM,iBAAiB,MAAM,QAAQ,MAAK;GAChD,IAAI,MAAM,IACR,iBAAiB,MAAM,OAAO,KAAK,EAAC;;EAIxC,QAAQ,eAAe;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAA;;uBAlHC,mBAEM,OAAA;IAFA,OAAK,eAAE,UAAA,MAAS;IAAE,MAAK;OAC3B,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
@@ -15,7 +15,6 @@ declare const __VLS_base: _$vue.DefineComponent<CollapseProps, {}, {}, {}, {}, _
15
15
  }>, {
16
16
  accordion: boolean;
17
17
  defaultCollapseAll: boolean;
18
- bordered: boolean;
19
18
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
20
19
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
21
20
  declare const _default: typeof __VLS_export;
@@ -1 +1 @@
1
- {"version":3,"file":"di.js","names":[],"sources":["../../../src/components/collapse/di.ts"],"sourcesContent":["import { type BEM, type ComponentSize, ExpandTransition } from '@veltra/utils'\nimport type { Component, ComputedRef, InjectionKey } from 'vue'\n\nimport type { CollapseValue } from '../../types'\n\nexport interface CollapseContext {\n cls: BEM<'collapse'>\n size: ComputedRef<ComponentSize>\n bordered: ComputedRef<boolean>\n expandIcon: ComputedRef<Component | undefined>\n activeValues: ComputedRef<CollapseValue[]>\n toggle: (value: CollapseValue) => void\n expandTransition: ExpandTransition\n register: (value: CollapseValue) => void\n unregister: (value: CollapseValue) => void\n}\n\nexport const CollapseDIKey: InjectionKey<CollapseContext> = Symbol('Collapse')\n"],"mappings":";;AAiBA,MAAa,gBAA+C,OAAO,WAAW"}
1
+ {"version":3,"file":"di.js","names":[],"sources":["../../../src/components/collapse/di.ts"],"sourcesContent":["import { type BEM, type ComponentSize, ExpandTransition } from '@veltra/utils'\nimport type { Component, ComputedRef, InjectionKey } from 'vue'\n\nimport type { CollapseValue } from '../../types'\n\nexport interface CollapseContext {\n cls: BEM<'collapse'>\n size: ComputedRef<ComponentSize>\n expandIcon: ComputedRef<Component | undefined>\n activeValues: ComputedRef<CollapseValue[]>\n toggle: (value: CollapseValue) => void\n expandTransition: ExpandTransition\n register: (value: CollapseValue) => void\n unregister: (value: CollapseValue) => void\n}\n\nexport const CollapseDIKey: InjectionKey<CollapseContext> = Symbol('Collapse')\n"],"mappings":";;AAgBA,MAAa,gBAA+C,OAAO,WAAW"}
@@ -22,18 +22,36 @@
22
22
  background-color: transparent;
23
23
  }
24
24
  .u-collapse__item {
25
+ position: relative;
25
26
  border-radius: calc(var(--u-radius-default) + 2px);
26
- background-color: var(--u-bg-color-hover);
27
+ overflow: hidden;
28
+ background-color: var(--u-collapse-item-bg, color-mix(in srgb, var(--u-bg-color-hover) 72%, var(--u-bg-color-top)));
27
29
  transition: background-color 0.18s cubic-bezier(0.4, 0, 0.2, 1);
28
30
  }
31
+ .u-collapse__item::before {
32
+ content: "";
33
+ position: absolute;
34
+ top: 0;
35
+ bottom: 0;
36
+ left: 0;
37
+ width: 3px;
38
+ background-color: var(--u-color-primary);
39
+ opacity: 0;
40
+ pointer-events: none;
41
+ transition: opacity 0.18s cubic-bezier(0.4, 0, 0.2, 1);
42
+ z-index: 1;
43
+ }
29
44
  .u-collapse__item + .u-collapse__item {
30
45
  margin-top: var(--u-gap-default);
31
46
  }
32
47
  .u-collapse__item:not(.is-disabled):hover {
33
- background-color: color-mix(in srgb, var(--u-text-color-main) 6%, var(--u-bg-color-hover));
48
+ background-color: var(--u-collapse-item-hover-bg, color-mix(in srgb, var(--u-color-primary) 4%, var(--u-collapse-item-bg, color-mix(in srgb, var(--u-bg-color-hover) 72%, var(--u-bg-color-top)))));
34
49
  }
35
50
  .u-collapse__item.is-active {
36
- background-color: color-mix(in srgb, var(--u-text-color-main) 6%, var(--u-bg-color-hover));
51
+ background-color: var(--u-collapse-item-active-bg, color-mix(in srgb, var(--u-color-primary) 5%, var(--u-collapse-item-bg, color-mix(in srgb, var(--u-bg-color-hover) 72%, var(--u-bg-color-top)))));
52
+ }
53
+ .u-collapse__item.is-active::before {
54
+ opacity: 1;
37
55
  }
38
56
  .u-collapse__item.is-disabled {
39
57
  opacity: 0.55;
@@ -61,10 +79,14 @@
61
79
  }
62
80
  .u-collapse__header.is-active {
63
81
  font-weight: 600;
82
+ color: var(--u-collapse-active-title-color, var(--u-color-primary));
83
+ background-color: var(--u-collapse-header-active-bg, color-mix(in srgb, var(--u-color-primary) 8%, var(--u-collapse-item-bg, color-mix(in srgb, var(--u-bg-color-hover) 72%, var(--u-bg-color-top)))));
84
+ border-bottom-right-radius: 0;
85
+ border-bottom-left-radius: 0;
64
86
  }
65
87
  .u-collapse__header.is-active .u-collapse__icon {
66
88
  transform: rotate(90deg);
67
- color: var(--u-text-color-second);
89
+ color: var(--u-collapse-active-title-color, var(--u-color-primary));
68
90
  }
69
91
  .u-collapse__title {
70
92
  flex: 1 1 auto;
@@ -83,6 +105,9 @@
83
105
  .u-collapse__content-wrapper {
84
106
  overflow: hidden;
85
107
  height: 0;
108
+ border-bottom-right-radius: inherit;
109
+ border-bottom-left-radius: inherit;
110
+ background-color: var(--u-collapse-content-bg, color-mix(in srgb, var(--u-collapse-item-active-bg, color-mix(in srgb, var(--u-color-primary) 5%, var(--u-collapse-item-bg, color-mix(in srgb, var(--u-bg-color-hover) 72%, var(--u-bg-color-top))))) 42%, var(--u-bg-color-top)));
86
111
  transition: height 0.24s cubic-bezier(0.4, 0, 0.2, 1);
87
112
  }
88
113
  .u-collapse__content {
@@ -140,16 +165,3 @@
140
165
  .u-collapse--large .u-collapse__item + .u-collapse__item {
141
166
  margin-top: var(--u-gap-large);
142
167
  }
143
- .u-collapse.is-bordered .u-collapse__item {
144
- background-color: transparent;
145
- border: 1px solid var(--u-border-color);
146
- }
147
- .u-collapse.is-bordered .u-collapse__item:hover, .u-collapse.is-bordered .u-collapse__item.is-active {
148
- background-color: transparent;
149
- }
150
- .u-collapse.is-bordered .u-collapse__header {
151
- border-radius: 0;
152
- }
153
- .u-collapse.is-bordered .u-collapse__header.is-active {
154
- border-bottom: 1px solid var(--u-border-color);
155
- }
@@ -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), null, {
74
- default: withCtx(() => [renderSlot(_ctx.$slots, "default")]),
75
- _: 3
76
- })], 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>\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,MAAA;2BADD,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"}
@@ -27,9 +27,9 @@ declare const __VLS_export: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {},
27
27
  disabled: boolean;
28
28
  readonly: boolean;
29
29
  clearable: boolean;
30
+ separator: string;
30
31
  startPlaceholder: string;
31
32
  endPlaceholder: string;
32
- separator: string;
33
33
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
34
34
  declare const _default: typeof __VLS_export;
35
35
  //#endregion
@@ -14,8 +14,8 @@ declare const __VLS_base: _$vue.DefineComponent<PopConfirmProps, {}, {}, {}, {},
14
14
  onConfirm?: (() => any) | undefined;
15
15
  onCancel?: (() => any) | undefined;
16
16
  }>, {
17
- trigger: "hover" | "click";
18
17
  direction: TipDirection;
18
+ trigger: "hover" | "click";
19
19
  icon: _$vue.Component;
20
20
  iconColor: string;
21
21
  confirmText: string;
@@ -1,4 +1,4 @@
1
- import { reactive, shallowReactive } from "vue";
1
+ import { isReactive, reactive, shallowReactive } from "vue";
2
2
  import { TreeNode } from "@cat-kit/core";
3
3
  //#region src/components/table/node/col.ts
4
4
  var ColumnNode = class extends TreeNode {
@@ -76,7 +76,7 @@ var ColumnNode = class extends TreeNode {
76
76
  }
77
77
  style = reactive({});
78
78
  constructor(val, index, depth, parent) {
79
- super(val ? shallowReactive(val) : val, index, depth, parent);
79
+ super(isReactive(val) ? val : shallowReactive(val), index, depth, parent);
80
80
  }
81
81
  };
82
82
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"col.js","names":[],"sources":["../../../../src/components/table/node/col.ts"],"sourcesContent":["import { TreeNode } from '@cat-kit/core'\nimport { reactive, shallowReactive } from 'vue'\n\nimport type { TableColumn, TableColumnAlign } from '../../../types'\n\nexport class ColumnNode extends TreeNode<TableColumn, ColumnNode> {\n declare children?: ColumnNode[] | undefined\n declare parent?: ColumnNode\n /** 叶子节点数量 */\n leafs?: number\n\n nextNode: ColumnNode | null = null\n\n /** 列key */\n get key(): string {\n return this.data.key\n }\n set key(val) {\n this.data.key = val\n }\n /** 列名 */\n get name(): string {\n return this.data.name\n }\n set name(val) {\n this.data.name = val\n }\n\n /**\n * 列对齐方式\n * @default 'left'\n */\n get align(): TableColumnAlign {\n return this.data.align ?? 'left'\n }\n set align(val) {\n this.data.align = val\n }\n\n get headerAlign(): TableColumnAlign {\n return this.data.headerAlign ?? this.align\n }\n set headerAlign(val) {\n this.data.headerAlign = val\n }\n\n /** 宽度 */\n get width(): number | undefined {\n const { width } = this.data\n if (!width || (this.minWidth && width && width < this.minWidth)) {\n return this.minWidth\n }\n return width\n }\n set width(val) {\n if (this.minWidth && val && val < this.minWidth) {\n val = this.minWidth\n }\n this.data.width = val\n }\n /** 最小宽度 */\n get minWidth(): number | undefined {\n const minWidth = this.data.minWidth\n if (!minWidth && this.isLeaf) {\n return 100\n }\n return minWidth\n }\n set minWidth(val) {\n this.data.minWidth = val\n }\n\n /** 列固定方向 */\n get fixed(): 'left' | 'right' | undefined {\n if (this.depth > 0) return\n return this.data.fixed\n }\n set fixed(val) {\n this.data.fixed = val\n }\n\n /** 是否是左侧的最后一个固定列 */\n get isLastFixed(): boolean {\n return this.data.isLastFixed ?? false\n }\n\n /** 是否是右侧的第一个固定列 */\n get isFirstFixed(): boolean {\n return this.data.isFirstFixed ?? false\n }\n\n /** 是否是可调整宽度的列 */\n get resizable(): boolean {\n return this.data.resizable ?? true\n }\n\n style: Record<string, number> = reactive({})\n\n constructor(val: TableColumn, index: number, depth: number, parent?: ColumnNode) {\n super(val ? shallowReactive(val) : val, index, depth, parent)\n }\n}\n"],"mappings":";;;AAKA,IAAa,aAAb,cAAgC,SAAkC;;CAIhE;CAEA,WAA8B;;CAG9B,IAAI,MAAc;EAChB,OAAO,KAAK,KAAK;;CAEnB,IAAI,IAAI,KAAK;EACX,KAAK,KAAK,MAAM;;;CAGlB,IAAI,OAAe;EACjB,OAAO,KAAK,KAAK;;CAEnB,IAAI,KAAK,KAAK;EACZ,KAAK,KAAK,OAAO;;;;;;CAOnB,IAAI,QAA0B;EAC5B,OAAO,KAAK,KAAK,SAAS;;CAE5B,IAAI,MAAM,KAAK;EACb,KAAK,KAAK,QAAQ;;CAGpB,IAAI,cAAgC;EAClC,OAAO,KAAK,KAAK,eAAe,KAAK;;CAEvC,IAAI,YAAY,KAAK;EACnB,KAAK,KAAK,cAAc;;;CAI1B,IAAI,QAA4B;EAC9B,MAAM,EAAE,UAAU,KAAK;EACvB,IAAI,CAAC,SAAU,KAAK,YAAY,SAAS,QAAQ,KAAK,UACpD,OAAO,KAAK;EAEd,OAAO;;CAET,IAAI,MAAM,KAAK;EACb,IAAI,KAAK,YAAY,OAAO,MAAM,KAAK,UACrC,MAAM,KAAK;EAEb,KAAK,KAAK,QAAQ;;;CAGpB,IAAI,WAA+B;EACjC,MAAM,WAAW,KAAK,KAAK;EAC3B,IAAI,CAAC,YAAY,KAAK,QACpB,OAAO;EAET,OAAO;;CAET,IAAI,SAAS,KAAK;EAChB,KAAK,KAAK,WAAW;;;CAIvB,IAAI,QAAsC;EACxC,IAAI,KAAK,QAAQ,GAAG;EACpB,OAAO,KAAK,KAAK;;CAEnB,IAAI,MAAM,KAAK;EACb,KAAK,KAAK,QAAQ;;;CAIpB,IAAI,cAAuB;EACzB,OAAO,KAAK,KAAK,eAAe;;;CAIlC,IAAI,eAAwB;EAC1B,OAAO,KAAK,KAAK,gBAAgB;;;CAInC,IAAI,YAAqB;EACvB,OAAO,KAAK,KAAK,aAAa;;CAGhC,QAAgC,SAAS,EAAE,CAAC;CAE5C,YAAY,KAAkB,OAAe,OAAe,QAAqB;EAC/E,MAAM,MAAM,gBAAgB,IAAI,GAAG,KAAK,OAAO,OAAO,OAAO"}
1
+ {"version":3,"file":"col.js","names":[],"sources":["../../../../src/components/table/node/col.ts"],"sourcesContent":["import { TreeNode } from '@cat-kit/core'\nimport { isReactive, reactive, shallowReactive } from 'vue'\n\nimport type { TableColumn, TableColumnAlign } from '../../../types'\n\nexport class ColumnNode extends TreeNode<TableColumn, ColumnNode> {\n declare children?: ColumnNode[] | undefined\n declare parent?: ColumnNode\n /** 叶子节点数量 */\n leafs?: number\n\n nextNode: ColumnNode | null = null\n\n /** 列key */\n get key(): string {\n return this.data.key\n }\n set key(val) {\n this.data.key = val\n }\n /** 列名 */\n get name(): string {\n return this.data.name\n }\n set name(val) {\n this.data.name = val\n }\n\n /**\n * 列对齐方式\n * @default 'left'\n */\n get align(): TableColumnAlign {\n return this.data.align ?? 'left'\n }\n set align(val) {\n this.data.align = val\n }\n\n get headerAlign(): TableColumnAlign {\n return this.data.headerAlign ?? this.align\n }\n set headerAlign(val) {\n this.data.headerAlign = val\n }\n\n /** 宽度 */\n get width(): number | undefined {\n const { width } = this.data\n if (!width || (this.minWidth && width && width < this.minWidth)) {\n return this.minWidth\n }\n return width\n }\n set width(val) {\n if (this.minWidth && val && val < this.minWidth) {\n val = this.minWidth\n }\n this.data.width = val\n }\n /** 最小宽度 */\n get minWidth(): number | undefined {\n const minWidth = this.data.minWidth\n if (!minWidth && this.isLeaf) {\n return 100\n }\n return minWidth\n }\n set minWidth(val) {\n this.data.minWidth = val\n }\n\n /** 列固定方向 */\n get fixed(): 'left' | 'right' | undefined {\n if (this.depth > 0) return\n return this.data.fixed\n }\n set fixed(val) {\n this.data.fixed = val\n }\n\n /** 是否是左侧的最后一个固定列 */\n get isLastFixed(): boolean {\n return this.data.isLastFixed ?? false\n }\n\n /** 是否是右侧的第一个固定列 */\n get isFirstFixed(): boolean {\n return this.data.isFirstFixed ?? false\n }\n\n /** 是否是可调整宽度的列 */\n get resizable(): boolean {\n return this.data.resizable ?? true\n }\n\n style: Record<string, number> = reactive({})\n\n constructor(val: TableColumn, index: number, depth: number, parent?: ColumnNode) {\n super(isReactive(val) ? val : shallowReactive(val), index, depth, parent)\n }\n}\n"],"mappings":";;;AAKA,IAAa,aAAb,cAAgC,SAAkC;;CAIhE;CAEA,WAA8B;;CAG9B,IAAI,MAAc;EAChB,OAAO,KAAK,KAAK;;CAEnB,IAAI,IAAI,KAAK;EACX,KAAK,KAAK,MAAM;;;CAGlB,IAAI,OAAe;EACjB,OAAO,KAAK,KAAK;;CAEnB,IAAI,KAAK,KAAK;EACZ,KAAK,KAAK,OAAO;;;;;;CAOnB,IAAI,QAA0B;EAC5B,OAAO,KAAK,KAAK,SAAS;;CAE5B,IAAI,MAAM,KAAK;EACb,KAAK,KAAK,QAAQ;;CAGpB,IAAI,cAAgC;EAClC,OAAO,KAAK,KAAK,eAAe,KAAK;;CAEvC,IAAI,YAAY,KAAK;EACnB,KAAK,KAAK,cAAc;;;CAI1B,IAAI,QAA4B;EAC9B,MAAM,EAAE,UAAU,KAAK;EACvB,IAAI,CAAC,SAAU,KAAK,YAAY,SAAS,QAAQ,KAAK,UACpD,OAAO,KAAK;EAEd,OAAO;;CAET,IAAI,MAAM,KAAK;EACb,IAAI,KAAK,YAAY,OAAO,MAAM,KAAK,UACrC,MAAM,KAAK;EAEb,KAAK,KAAK,QAAQ;;;CAGpB,IAAI,WAA+B;EACjC,MAAM,WAAW,KAAK,KAAK;EAC3B,IAAI,CAAC,YAAY,KAAK,QACpB,OAAO;EAET,OAAO;;CAET,IAAI,SAAS,KAAK;EAChB,KAAK,KAAK,WAAW;;;CAIvB,IAAI,QAAsC;EACxC,IAAI,KAAK,QAAQ,GAAG;EACpB,OAAO,KAAK,KAAK;;CAEnB,IAAI,MAAM,KAAK;EACb,KAAK,KAAK,QAAQ;;;CAIpB,IAAI,cAAuB;EACzB,OAAO,KAAK,KAAK,eAAe;;;CAIlC,IAAI,eAAwB;EAC1B,OAAO,KAAK,KAAK,gBAAgB;;;CAInC,IAAI,YAAqB;EACvB,OAAO,KAAK,KAAK,aAAa;;CAGhC,QAAgC,SAAS,EAAE,CAAC;CAE5C,YAAY,KAAkB,OAAe,OAAe,QAAqB;EAC/E,MAAM,WAAW,IAAI,GAAG,MAAM,gBAAgB,IAAI,EAAE,OAAO,OAAO,OAAO"}
@@ -16,12 +16,12 @@ 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
- close: (item: TabItem, index: number) => any;
20
19
  click: (item: TabItem, index: number) => any;
20
+ close: (item: TabItem, index: number) => any;
21
21
  }, string, _$vue.PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
22
22
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
23
- onClose?: ((item: TabItem, index: number) => any) | undefined;
24
23
  onClick?: ((item: TabItem, index: number) => any) | undefined;
24
+ onClose?: ((item: TabItem, index: number) => any) | undefined;
25
25
  }>, {
26
26
  closable: boolean;
27
27
  rounded: boolean;
@@ -15,12 +15,12 @@ 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
- close: (item: TabItem, index: number) => any;
19
18
  click: (item: TabItem, index: number) => any;
19
+ close: (item: TabItem, index: number) => any;
20
20
  }, string, _$vue.PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
21
21
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
22
- onClose?: ((item: TabItem, index: number) => any) | undefined;
23
22
  onClick?: ((item: TabItem, index: number) => any) | undefined;
23
+ onClose?: ((item: TabItem, index: number) => any) | undefined;
24
24
  }>, {
25
25
  closable: boolean;
26
26
  rounded: boolean;
@@ -11,12 +11,12 @@ 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
- close: (item: TabItem, index: number) => any;
15
14
  click: (item: TabItem, index: number) => any;
15
+ close: (item: TabItem, index: number) => any;
16
16
  }, string, _$vue.PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
17
17
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
18
- onClose?: ((item: TabItem, index: number) => any) | undefined;
19
18
  onClick?: ((item: TabItem, index: number) => any) | undefined;
19
+ onClose?: ((item: TabItem, index: number) => any) | undefined;
20
20
  }>, {
21
21
  closable: boolean;
22
22
  rounded: boolean;
@@ -11,10 +11,10 @@ declare const __VLS_base: _$vue.DefineComponent<TipProps, {}, {}, {}, {}, _$vue.
11
11
  }, string, _$vue.PublicProps, Readonly<TipProps> & Readonly<{
12
12
  "onUpdate:visible"?: ((value: boolean) => any) | undefined;
13
13
  }>, {
14
+ direction: TipDirection;
14
15
  trigger: "hover" | "click";
15
16
  contentTag: string;
16
17
  visible: boolean;
17
- direction: TipDirection;
18
18
  content: string;
19
19
  alignment: TipAlign;
20
20
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
@@ -20,11 +20,6 @@ interface CollapseProps extends ComponentProps {
20
20
  * @default false
21
21
  */
22
22
  defaultCollapseAll?: boolean;
23
- /**
24
- * 是否使用边框模式
25
- * @default false
26
- */
27
- bordered?: boolean;
28
23
  /**
29
24
  * 自定义展开图标组件,活动态会自动旋转 90°。
30
25
  * 接受任意 Vue 组件(SFC、Functional Component 等)。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veltra/desktop",
3
- "version": "1.1.20",
3
+ "version": "1.1.22",
4
4
  "files": [
5
5
  "dist",
6
6
  "src"
@@ -37,9 +37,6 @@
37
37
  "scripts": {
38
38
  "build": "vp pack"
39
39
  },
40
- "devDependencies": {
41
- "@cat-kit/fe": "^1.1.3"
42
- },
43
40
  "dependencies": {
44
41
  "@codemirror/lang-java": "^6.0.2",
45
42
  "@codemirror/lang-javascript": "^6.2.5",
@@ -48,33 +45,34 @@
48
45
  "@codemirror/state": "^6.6.0",
49
46
  "@codemirror/theme-one-dark": "^6.1.3",
50
47
  "@codemirror/view": "^6.41.1",
51
- "@embedpdf/core": "^2.14.1",
52
- "@embedpdf/engines": "^2.14.1",
53
- "@embedpdf/plugin-document-manager": "^2.14.1",
54
- "@embedpdf/plugin-render": "^2.14.1",
55
- "@embedpdf/plugin-scroll": "^2.14.1",
56
- "@embedpdf/plugin-viewport": "^2.14.1",
48
+ "@embedpdf/core": "^2.14.3",
49
+ "@embedpdf/engines": "^2.14.3",
50
+ "@embedpdf/plugin-document-manager": "^2.14.3",
51
+ "@embedpdf/plugin-render": "^2.14.3",
52
+ "@embedpdf/plugin-scroll": "^2.14.3",
53
+ "@embedpdf/plugin-viewport": "^2.14.3",
57
54
  "@embedpdf/plugin-zoom": "^2.14.1",
58
- "@lexical/history": "^0.43.0",
59
- "@lexical/html": "^0.43.0",
60
- "@lexical/link": "^0.43.0",
61
- "@lexical/list": "^0.43.0",
62
- "@lexical/rich-text": "^0.43.0",
63
- "@lexical/selection": "^0.43.0",
64
- "@lexical/utils": "^0.43.0",
65
- "@visactor/vtable": "^1.26.0",
55
+ "@lexical/history": "^0.45.0",
56
+ "@lexical/html": "^0.45.0",
57
+ "@lexical/link": "^0.45.0",
58
+ "@lexical/list": "^0.45.0",
59
+ "@lexical/rich-text": "^0.45.0",
60
+ "@lexical/selection": "^0.45.0",
61
+ "@lexical/utils": "^0.45.0",
62
+ "@visactor/vtable": "^1.26.1",
66
63
  "codemirror": "^6.0.2",
67
64
  "docx-preview": "^0.3.7",
68
- "lexical": "^0.43.0"
65
+ "lexical": "^0.45.0"
69
66
  },
70
67
  "peerDependencies": {
71
- "@cat-kit/core": ">=1.1.0",
68
+ "@cat-kit/core": ">=1.1.5",
72
69
  "@cat-kit/excel": ">=1.0.0",
73
- "@veltra/compositions": "1.1.20",
74
- "@veltra/directives": "1.1.20",
75
- "@veltra/icons": "1.1.20",
76
- "@veltra/styles": "1.1.20",
77
- "@veltra/utils": "1.1.20",
70
+ "@cat-kit/fe": "^1.1.5",
71
+ "@veltra/compositions": "1.1.22",
72
+ "@veltra/directives": "1.1.22",
73
+ "@veltra/icons": "1.1.22",
74
+ "@veltra/styles": "1.1.22",
75
+ "@veltra/utils": "1.1.22",
78
76
  "vue": ">=3.5.0"
79
77
  }
80
78
  }
@@ -54,8 +54,7 @@ const iconComponent = computed(() => context?.expandIcon.value ?? ArrowRight)
54
54
  const classList = computed(() => [
55
55
  cls.e('item'),
56
56
  bem.is('active', isActive.value),
57
- bem.is('disabled', props.disabled),
58
- bem.is('bordered', context?.bordered.value)
57
+ bem.is('disabled', props.disabled)
59
58
  ])
60
59
 
61
60
  const headerClassList = computed(() => [
@@ -18,8 +18,7 @@ defineOptions({
18
18
 
19
19
  const props = withDefaults(defineProps<CollapseProps>(), {
20
20
  accordion: false,
21
- defaultCollapseAll: false,
22
- bordered: false
21
+ defaultCollapseAll: false
23
22
  })
24
23
  const emit = defineEmits<CollapseEmits>()
25
24
 
@@ -33,9 +32,7 @@ const { size } = useFormFallbackProps([props], { size: 'default' })
33
32
 
34
33
  const expandIcon = computed(() => props.expandIcon)
35
34
 
36
- const bordered = computed(() => props.bordered)
37
-
38
- const classList = computed(() => [cls.b, cls.m(size.value), bem.is('bordered', bordered.value)])
35
+ const classList = computed(() => [cls.b, cls.m(size.value)])
39
36
 
40
37
  const modelValue = useModel<CollapseProps, 'modelValue'>({
41
38
  props,
@@ -110,7 +107,6 @@ const unregister = (value: CollapseValue) => {
110
107
  provide(CollapseDIKey, {
111
108
  cls,
112
109
  size,
113
- bordered,
114
110
  expandIcon,
115
111
  activeValues,
116
112
  toggle,
@@ -6,7 +6,6 @@ import type { CollapseValue } from '../../types'
6
6
  export interface CollapseContext {
7
7
  cls: BEM<'collapse'>
8
8
  size: ComputedRef<ComponentSize>
9
- bordered: ComputedRef<boolean>
10
9
  expandIcon: ComputedRef<Component | undefined>
11
10
  activeValues: ComputedRef<CollapseValue[]>
12
11
  toggle: (value: CollapseValue) => void
@@ -1,6 +1,4 @@
1
- @use 'sass:map';
2
1
  @use 'pkg:@veltra/styles/mixins' as m;
3
- @use 'pkg:@veltra/styles/vars';
4
2
  @use 'pkg:@veltra/styles/functions' as fn;
5
3
 
6
4
  $root-name: collapse;
@@ -9,6 +7,32 @@ $root-name: collapse;
9
7
  $ease: cubic-bezier(0.4, 0, 0.2, 1);
10
8
  $transition-fast: 0.18s $ease;
11
9
  $transition-normal: 0.24s $ease;
10
+ $item-bg: fn.component-var(
11
+ collapse,
12
+ item-bg,
13
+ color-mix(in srgb, #{fn.use-var(bg-color, hover)} 72%, #{fn.use-var(bg-color, top)})
14
+ );
15
+ $item-hover-bg: fn.component-var(
16
+ collapse,
17
+ item-hover-bg,
18
+ color-mix(in srgb, #{fn.use-var(color, primary)} 4%, #{$item-bg})
19
+ );
20
+ $item-active-bg: fn.component-var(
21
+ collapse,
22
+ item-active-bg,
23
+ color-mix(in srgb, #{fn.use-var(color, primary)} 5%, #{$item-bg})
24
+ );
25
+ $header-active-bg: fn.component-var(
26
+ collapse,
27
+ header-active-bg,
28
+ color-mix(in srgb, #{fn.use-var(color, primary)} 8%, #{$item-bg})
29
+ );
30
+ $content-bg: fn.component-var(
31
+ collapse,
32
+ content-bg,
33
+ color-mix(in srgb, #{$item-active-bg} 42%, #{fn.use-var(bg-color, top)})
34
+ );
35
+ $active-title-color: fn.component-var(collapse, active-title-color, fn.use-var(color, primary));
12
36
 
13
37
  @include m.b($root-name) {
14
38
  width: 100%;
@@ -18,32 +42,42 @@ $transition-normal: 0.24s $ease;
18
42
 
19
43
  // ===== Item =====
20
44
  @include m.e(item) {
45
+ position: relative;
21
46
  border-radius: calc(fn.use-var(radius, default) + 2px);
22
- background-color: fn.use-var(bg-color, hover);
47
+ overflow: hidden;
48
+ background-color: $item-bg;
23
49
  transition: background-color $transition-fast;
24
50
 
51
+ &::before {
52
+ content: '';
53
+ position: absolute;
54
+ top: 0;
55
+ bottom: 0;
56
+ left: 0;
57
+ width: 3px;
58
+ background-color: fn.use-var(color, primary);
59
+ opacity: 0;
60
+ pointer-events: none;
61
+ transition: opacity $transition-fast;
62
+ z-index: 1;
63
+ }
64
+
25
65
  & + #{fn.bem($root-name, item)} {
26
66
  margin-top: fn.use-var(gap, default);
27
67
  }
28
68
 
29
69
  @include m.is-not(disabled) {
30
70
  &:hover {
31
- // hover 状态与展开状态保持一致的微加深背景(混入 6% 的正文文字色)
32
- background-color: color-mix(
33
- in srgb,
34
- #{fn.use-var(text-color, main)} 6%,
35
- #{fn.use-var(bg-color, hover)}
36
- );
71
+ background-color: $item-hover-bg;
37
72
  }
38
73
  }
39
74
 
40
75
  @include m.is(active) {
41
- // 展开/活动状态背景(混入 6% 的正文文字色)
42
- background-color: color-mix(
43
- in srgb,
44
- #{fn.use-var(text-color, main)} 6%,
45
- #{fn.use-var(bg-color, hover)}
46
- );
76
+ background-color: $item-active-bg;
77
+
78
+ &::before {
79
+ opacity: 1;
80
+ }
47
81
  }
48
82
 
49
83
  @include m.is(disabled) {
@@ -79,10 +113,14 @@ $transition-normal: 0.24s $ease;
79
113
 
80
114
  @include m.is(active) {
81
115
  font-weight: 600;
116
+ color: $active-title-color;
117
+ background-color: $header-active-bg;
118
+ border-bottom-right-radius: 0;
119
+ border-bottom-left-radius: 0;
82
120
 
83
121
  #{fn.bem($root-name, icon)} {
84
122
  transform: rotate(90deg);
85
- color: fn.use-var(text-color, second);
123
+ color: $active-title-color;
86
124
  }
87
125
  }
88
126
  }
@@ -111,6 +149,9 @@ $transition-normal: 0.24s $ease;
111
149
  @include m.e(content-wrapper) {
112
150
  overflow: hidden;
113
151
  height: 0;
152
+ border-bottom-right-radius: inherit;
153
+ border-bottom-left-radius: inherit;
154
+ background-color: $content-bg;
114
155
  transition: height $transition-normal;
115
156
  }
116
157
 
@@ -141,25 +182,4 @@ $transition-normal: 0.24s $ease;
141
182
  }
142
183
  }
143
184
  }
144
-
145
- // ===== Bordered =====
146
- @include m.is(bordered) {
147
- #{fn.bem($root-name, item)} {
148
- background-color: transparent;
149
- border: 1px solid vars.$border-color;
150
-
151
- &:hover,
152
- &.is-active {
153
- background-color: transparent;
154
- }
155
- }
156
-
157
- #{fn.bem($root-name, header)} {
158
- border-radius: 0;
159
-
160
- @include m.is(active) {
161
- border-bottom: 1px solid vars.$border-color;
162
- }
163
- }
164
- }
165
185
  }
@@ -1,15 +1,10 @@
1
1
  <template>
2
- <!-- EmbedPDF Viewport 自带滚动;u-scroll 仅同步自定义滚动条 -->
3
- <u-scroll>
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,5 +1,5 @@
1
1
  import { TreeNode } from '@cat-kit/core'
2
- import { reactive, shallowReactive } from 'vue'
2
+ import { isReactive, reactive, shallowReactive } from 'vue'
3
3
 
4
4
  import type { TableColumn, TableColumnAlign } from '../../../types'
5
5
 
@@ -97,6 +97,6 @@ export class ColumnNode extends TreeNode<TableColumn, ColumnNode> {
97
97
  style: Record<string, number> = reactive({})
98
98
 
99
99
  constructor(val: TableColumn, index: number, depth: number, parent?: ColumnNode) {
100
- super(val ? shallowReactive(val) : val, index, depth, parent)
100
+ super(isReactive(val) ? val : shallowReactive(val), index, depth, parent)
101
101
  }
102
102
  }
@@ -24,12 +24,6 @@ export interface CollapseProps extends ComponentProps {
24
24
  */
25
25
  defaultCollapseAll?: boolean
26
26
 
27
- /**
28
- * 是否使用边框模式
29
- * @default false
30
- */
31
- bordered?: boolean
32
-
33
27
  /**
34
28
  * 自定义展开图标组件,活动态会自动旋转 90°。
35
29
  * 接受任意 Vue 组件(SFC、Functional Component 等)。