@robot-admin/naive-ui-components 0.6.22 → 0.6.24

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 (49) hide show
  1. package/dist/C_Signature.js.map +1 -1
  2. package/dist/C_Signature2.js.map +1 -1
  3. package/dist/C_Timeline-Cmn2NxVG.css.map +1 -0
  4. package/dist/C_Timeline-WYLx0DmS.css.map +1 -0
  5. package/dist/C_Timeline.css +207 -154
  6. package/dist/C_Timeline.js.map +1 -1
  7. package/dist/C_Timeline2.js +1 -1
  8. package/dist/C_Timeline2.js.map +1 -1
  9. package/dist/constants.d.ts +4 -4
  10. package/dist/constants2.d.ts +5 -5
  11. package/dist/constants3.d.ts +4 -4
  12. package/dist/constants4.d.ts +4 -4
  13. package/dist/constants5.d.ts +2 -2
  14. package/dist/index.vue.d.ts +1 -1
  15. package/dist/index10.vue.d.ts +3 -3
  16. package/dist/index11.vue.d.ts +2 -2
  17. package/dist/index12.vue.d.ts +1 -1
  18. package/dist/index13.vue.d.ts +2 -2
  19. package/dist/index16.vue.d.ts +2 -2
  20. package/dist/index18.vue.d.ts +6 -6
  21. package/dist/index2.vue.d.ts +6 -6
  22. package/dist/index20.vue.d.ts +2 -2
  23. package/dist/index21.vue.d.ts +2 -2
  24. package/dist/index24.vue.d.ts +1 -1
  25. package/dist/index25.vue.d.ts +2 -2
  26. package/dist/index26.vue.d.ts +3 -3
  27. package/dist/index3.vue.d.ts +1 -1
  28. package/dist/index4.vue.d.ts +4 -4
  29. package/dist/index6.vue.d.ts +6 -6
  30. package/dist/index7.vue.d.ts +2 -2
  31. package/dist/index8.vue.d.ts +1 -1
  32. package/dist/index9.vue.d.ts +2 -2
  33. package/dist/style.css +206 -153
  34. package/dist/useCalendarEvents.d.ts +1 -1
  35. package/dist/useCropperCore.d.ts +2 -2
  36. package/dist/useDraggableLayout.d.ts +2 -2
  37. package/dist/useDynamicFormState.d.ts +4 -4
  38. package/dist/useInfiniteScroll.d.ts +1 -1
  39. package/dist/useModalEdit.d.ts +2 -2
  40. package/dist/useQRCode.d.ts +1 -1
  41. package/dist/useSearchState.d.ts +2 -2
  42. package/dist/useSignatureHistory.d.ts +3 -0
  43. package/dist/useSplitResize.d.ts +5 -5
  44. package/dist/useTimeSelection.d.ts +1 -1
  45. package/dist/useTreeOperations.d.ts +2 -2
  46. package/dist/useWorkflowValidation.d.ts +4 -4
  47. package/package.json +1 -1
  48. package/dist/C_Timeline-CGTFTMX0.css.map +0 -1
  49. package/dist/C_Timeline-DxKyvKer.css.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"C_Timeline2.js","names":[],"sources":["../src/components/C_Timeline/types.ts","../src/components/C_Timeline/index.vue","../src/components/C_Timeline/index.vue","../src/components/C_Timeline/index.vue"],"sourcesContent":["/**\r\n * @Description: 时间线组件类型定义\r\n */\r\n\r\n/** 单条时间线节点 */\r\nexport interface TimelineItem {\r\n /** 唯一标识 */\r\n id: string | number\r\n /** 标题 */\r\n title: string\r\n /** 描述内容(支持 HTML 字符串) */\r\n content?: string\r\n /** 时间标签 */\r\n time?: string\r\n /** 节点颜色(CSS 颜色值) */\r\n color?: string\r\n /** 节点图标(Iconify 图标名) */\r\n icon?: string\r\n /** 节点状态 */\r\n status?: 'default' | 'success' | 'warning' | 'error' | 'info'\r\n /** 是否可展开/折叠详情 */\r\n collapsible?: boolean\r\n /** 初始是否展开 */\r\n defaultExpanded?: boolean\r\n /** 附加标签组 */\r\n tags?: Array<{ text: string; type?: string }>\r\n /** 自定义额外数据 */\r\n extra?: Record<string, unknown>\r\n}\r\n\r\n/** 组件 Props */\r\nexport interface TimelineProps {\r\n /** 时间线数据 */\r\n items: TimelineItem[]\r\n /** 布局方向 */\r\n mode?: 'vertical' | 'horizontal'\r\n /** 垂直模式下时间标签位置 */\r\n labelPlacement?: 'left' | 'right' | 'alternate'\r\n /** 是否显示尾部加载更多指示 */\r\n pending?: boolean\r\n /** 加载更多文案 */\r\n pendingText?: string\r\n /** 是否反转排列(最新在前) */\r\n reverse?: boolean\r\n /** 节点大小 */\r\n size?: 'small' | 'medium' | 'large'\r\n /** 连接线样式 */\r\n lineType?: 'solid' | 'dashed' | 'dotted'\r\n /** 是否显示时间标签 */\r\n showTime?: boolean\r\n}\r\n\r\n/** 默认 Props */\r\nexport const DEFAULT_TIMELINE_PROPS = {\r\n mode: 'vertical' as const,\r\n labelPlacement: 'right' as const,\r\n pending: false,\r\n pendingText: '加载中...',\r\n reverse: false,\r\n size: 'medium' as const,\r\n lineType: 'solid' as const,\r\n showTime: true,\r\n}\r\n\r\n/** 状态 → 颜色映射 */\r\nexport const STATUS_COLOR_MAP: Record<string, string> = {\r\n default: '',\r\n success: '#18a058',\r\n warning: '#f0a020',\r\n error: '#d03050',\r\n info: '#2080f0',\r\n}\r\n","/* unplugin-vue-components disabled */<!--\r\n * @Description: 时间线组件 — 支持垂直/水平布局、自定义节点、可折叠详情\r\n-->\r\n<template>\r\n <div\r\n :class=\"rootClasses\"\r\n role=\"list\"\r\n >\r\n <template\r\n v-for=\"(item, idx) in displayItems\"\r\n :key=\"item.id\"\r\n >\r\n <div\r\n class=\"c-timeline__item\"\r\n role=\"listitem\"\r\n >\r\n <!-- 节点圆点 / 图标 -->\r\n <span\r\n :class=\"['c-timeline__dot', item.icon ? 'is-icon' : 'is-dot']\"\r\n :style=\"dotStyle(item)\"\r\n >\r\n <slot\r\n name=\"dot\"\r\n :item=\"item\"\r\n :index=\"idx\"\r\n >\r\n <C_Icon\r\n v-if=\"item.icon\"\r\n :name=\"item.icon\"\r\n />\r\n </slot>\r\n </span>\r\n\r\n <!-- 标题行 -->\r\n <div\r\n class=\"c-timeline__header\"\r\n @click=\"emit('item-click', item, idx)\"\r\n >\r\n <slot\r\n name=\"title\"\r\n :item=\"item\"\r\n :index=\"idx\"\r\n >\r\n <span class=\"c-timeline__title\">{{ item.title }}</span>\r\n </slot>\r\n <span\r\n v-if=\"props.showTime && item.time\"\r\n class=\"c-timeline__time\"\r\n >\r\n {{ item.time }}\r\n </span>\r\n </div>\r\n\r\n <!-- 标签组 -->\r\n <div\r\n v-if=\"item.tags?.length\"\r\n class=\"c-timeline__tags\"\r\n >\r\n <span\r\n v-for=\"tag in item.tags\"\r\n :key=\"tag.text\"\r\n class=\"c-timeline__tag\"\r\n >\r\n {{ tag.text }}\r\n </span>\r\n </div>\r\n\r\n <!-- 内容区 -->\r\n <div\r\n v-if=\"item.content && (!item.collapsible || expandedMap[item.id])\"\r\n :class=\"[\r\n 'c-timeline__detail',\r\n item.collapsible\r\n ? expandedMap[item.id]\r\n ? 'is-expanded'\r\n : 'is-collapsed'\r\n : 'is-expanded',\r\n ]\"\r\n >\r\n <div\r\n class=\"c-timeline__content\"\r\n v-html=\"item.content\"\r\n />\r\n </div>\r\n\r\n <!-- 折叠触发器 -->\r\n <span\r\n v-if=\"item.collapsible\"\r\n :class=\"[\r\n 'c-timeline__collapse-trigger',\r\n { 'is-expanded': expandedMap[item.id] },\r\n ]\"\r\n @click=\"toggleExpand(item)\"\r\n >\r\n {{ expandedMap[item.id] ? '收起' : '展开详情' }}\r\n <C_Icon\r\n name=\"mdi:chevron-down\"\r\n class=\"collapse-arrow\"\r\n />\r\n </span>\r\n </div>\r\n </template>\r\n\r\n <!-- Pending 加载提示 -->\r\n <div\r\n v-if=\"props.pending\"\r\n class=\"c-timeline__pending\"\r\n >\r\n <span class=\"pending-dot\" />\r\n <span>{{ props.pendingText }}</span>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n import { computed, ref, watch } from 'vue'\r\n import C_Icon from '../C_Icon/index.vue'\r\n import {\r\n DEFAULT_TIMELINE_PROPS,\r\n STATUS_COLOR_MAP,\r\n type TimelineProps,\r\n type TimelineItem,\r\n } from './types'\r\n\r\n defineOptions({ name: 'C_Timeline' })\r\n\r\n const props = withDefaults(defineProps<TimelineProps>(), {\r\n items: () => [],\r\n mode: DEFAULT_TIMELINE_PROPS.mode,\r\n labelPlacement: DEFAULT_TIMELINE_PROPS.labelPlacement,\r\n pending: DEFAULT_TIMELINE_PROPS.pending,\r\n pendingText: DEFAULT_TIMELINE_PROPS.pendingText,\r\n reverse: DEFAULT_TIMELINE_PROPS.reverse,\r\n size: DEFAULT_TIMELINE_PROPS.size,\r\n lineType: DEFAULT_TIMELINE_PROPS.lineType,\r\n showTime: DEFAULT_TIMELINE_PROPS.showTime,\r\n })\r\n\r\n const emit = defineEmits<{\r\n (e: 'item-click', item: TimelineItem, index: number): void\r\n (e: 'expand', item: TimelineItem, expanded: boolean): void\r\n }>()\r\n\r\n // ===== 展开状态 =====\r\n const expandedMap = ref<Record<string | number, boolean>>({})\r\n\r\n // 初始化展开状态\r\n watch(\r\n () => props.items,\r\n items => {\r\n items.forEach(item => {\r\n if (item.collapsible && !(item.id in expandedMap.value)) {\r\n expandedMap.value[item.id] = item.defaultExpanded ?? false\r\n }\r\n })\r\n },\r\n { immediate: true }\r\n )\r\n\r\n const toggleExpand = (item: TimelineItem) => {\r\n const next = !expandedMap.value[item.id]\r\n expandedMap.value[item.id] = next\r\n emit('expand', item, next)\r\n }\r\n\r\n // ===== 排列顺序 =====\r\n const displayItems = computed(() =>\r\n props.reverse ? [...props.items].reverse() : props.items\r\n )\r\n\r\n // ===== 根类 =====\r\n const rootClasses = computed(() => [\r\n 'c-timeline',\r\n `is-${props.mode}`,\r\n `is-${props.size}`,\r\n `is-line-${props.lineType}`,\r\n `is-label-${props.labelPlacement}`,\r\n ])\r\n\r\n // ===== 节点颜色 =====\r\n const dotStyle = (item: TimelineItem) => {\r\n const color =\r\n item.color || STATUS_COLOR_MAP[item.status || 'default'] || undefined\r\n if (item.icon) {\r\n return { color, borderColor: color || undefined }\r\n }\r\n return {\r\n background: color || undefined,\r\n boxShadow: color ? `0 0 0 2px ${color}` : undefined,\r\n }\r\n }\r\n\r\n // ===== 暴露 =====\r\n defineExpose({\r\n /** 展开全部 */\r\n expandAll: () => {\r\n props.items.forEach(item => {\r\n if (item.collapsible) expandedMap.value[item.id] = true\r\n })\r\n },\r\n /** 折叠全部 */\r\n collapseAll: () => {\r\n props.items.forEach(item => {\r\n if (item.collapsible) expandedMap.value[item.id] = false\r\n })\r\n },\r\n })\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n @use './index.scss';\r\n</style>\r\n","/* unplugin-vue-components disabled */<!--\r\n * @Description: 时间线组件 — 支持垂直/水平布局、自定义节点、可折叠详情\r\n-->\r\n<template>\r\n <div\r\n :class=\"rootClasses\"\r\n role=\"list\"\r\n >\r\n <template\r\n v-for=\"(item, idx) in displayItems\"\r\n :key=\"item.id\"\r\n >\r\n <div\r\n class=\"c-timeline__item\"\r\n role=\"listitem\"\r\n >\r\n <!-- 节点圆点 / 图标 -->\r\n <span\r\n :class=\"['c-timeline__dot', item.icon ? 'is-icon' : 'is-dot']\"\r\n :style=\"dotStyle(item)\"\r\n >\r\n <slot\r\n name=\"dot\"\r\n :item=\"item\"\r\n :index=\"idx\"\r\n >\r\n <C_Icon\r\n v-if=\"item.icon\"\r\n :name=\"item.icon\"\r\n />\r\n </slot>\r\n </span>\r\n\r\n <!-- 标题行 -->\r\n <div\r\n class=\"c-timeline__header\"\r\n @click=\"emit('item-click', item, idx)\"\r\n >\r\n <slot\r\n name=\"title\"\r\n :item=\"item\"\r\n :index=\"idx\"\r\n >\r\n <span class=\"c-timeline__title\">{{ item.title }}</span>\r\n </slot>\r\n <span\r\n v-if=\"props.showTime && item.time\"\r\n class=\"c-timeline__time\"\r\n >\r\n {{ item.time }}\r\n </span>\r\n </div>\r\n\r\n <!-- 标签组 -->\r\n <div\r\n v-if=\"item.tags?.length\"\r\n class=\"c-timeline__tags\"\r\n >\r\n <span\r\n v-for=\"tag in item.tags\"\r\n :key=\"tag.text\"\r\n class=\"c-timeline__tag\"\r\n >\r\n {{ tag.text }}\r\n </span>\r\n </div>\r\n\r\n <!-- 内容区 -->\r\n <div\r\n v-if=\"item.content && (!item.collapsible || expandedMap[item.id])\"\r\n :class=\"[\r\n 'c-timeline__detail',\r\n item.collapsible\r\n ? expandedMap[item.id]\r\n ? 'is-expanded'\r\n : 'is-collapsed'\r\n : 'is-expanded',\r\n ]\"\r\n >\r\n <div\r\n class=\"c-timeline__content\"\r\n v-html=\"item.content\"\r\n />\r\n </div>\r\n\r\n <!-- 折叠触发器 -->\r\n <span\r\n v-if=\"item.collapsible\"\r\n :class=\"[\r\n 'c-timeline__collapse-trigger',\r\n { 'is-expanded': expandedMap[item.id] },\r\n ]\"\r\n @click=\"toggleExpand(item)\"\r\n >\r\n {{ expandedMap[item.id] ? '收起' : '展开详情' }}\r\n <C_Icon\r\n name=\"mdi:chevron-down\"\r\n class=\"collapse-arrow\"\r\n />\r\n </span>\r\n </div>\r\n </template>\r\n\r\n <!-- Pending 加载提示 -->\r\n <div\r\n v-if=\"props.pending\"\r\n class=\"c-timeline__pending\"\r\n >\r\n <span class=\"pending-dot\" />\r\n <span>{{ props.pendingText }}</span>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n import { computed, ref, watch } from 'vue'\r\n import C_Icon from '../C_Icon/index.vue'\r\n import {\r\n DEFAULT_TIMELINE_PROPS,\r\n STATUS_COLOR_MAP,\r\n type TimelineProps,\r\n type TimelineItem,\r\n } from './types'\r\n\r\n defineOptions({ name: 'C_Timeline' })\r\n\r\n const props = withDefaults(defineProps<TimelineProps>(), {\r\n items: () => [],\r\n mode: DEFAULT_TIMELINE_PROPS.mode,\r\n labelPlacement: DEFAULT_TIMELINE_PROPS.labelPlacement,\r\n pending: DEFAULT_TIMELINE_PROPS.pending,\r\n pendingText: DEFAULT_TIMELINE_PROPS.pendingText,\r\n reverse: DEFAULT_TIMELINE_PROPS.reverse,\r\n size: DEFAULT_TIMELINE_PROPS.size,\r\n lineType: DEFAULT_TIMELINE_PROPS.lineType,\r\n showTime: DEFAULT_TIMELINE_PROPS.showTime,\r\n })\r\n\r\n const emit = defineEmits<{\r\n (e: 'item-click', item: TimelineItem, index: number): void\r\n (e: 'expand', item: TimelineItem, expanded: boolean): void\r\n }>()\r\n\r\n // ===== 展开状态 =====\r\n const expandedMap = ref<Record<string | number, boolean>>({})\r\n\r\n // 初始化展开状态\r\n watch(\r\n () => props.items,\r\n items => {\r\n items.forEach(item => {\r\n if (item.collapsible && !(item.id in expandedMap.value)) {\r\n expandedMap.value[item.id] = item.defaultExpanded ?? false\r\n }\r\n })\r\n },\r\n { immediate: true }\r\n )\r\n\r\n const toggleExpand = (item: TimelineItem) => {\r\n const next = !expandedMap.value[item.id]\r\n expandedMap.value[item.id] = next\r\n emit('expand', item, next)\r\n }\r\n\r\n // ===== 排列顺序 =====\r\n const displayItems = computed(() =>\r\n props.reverse ? [...props.items].reverse() : props.items\r\n )\r\n\r\n // ===== 根类 =====\r\n const rootClasses = computed(() => [\r\n 'c-timeline',\r\n `is-${props.mode}`,\r\n `is-${props.size}`,\r\n `is-line-${props.lineType}`,\r\n `is-label-${props.labelPlacement}`,\r\n ])\r\n\r\n // ===== 节点颜色 =====\r\n const dotStyle = (item: TimelineItem) => {\r\n const color =\r\n item.color || STATUS_COLOR_MAP[item.status || 'default'] || undefined\r\n if (item.icon) {\r\n return { color, borderColor: color || undefined }\r\n }\r\n return {\r\n background: color || undefined,\r\n boxShadow: color ? `0 0 0 2px ${color}` : undefined,\r\n }\r\n }\r\n\r\n // ===== 暴露 =====\r\n defineExpose({\r\n /** 展开全部 */\r\n expandAll: () => {\r\n props.items.forEach(item => {\r\n if (item.collapsible) expandedMap.value[item.id] = true\r\n })\r\n },\r\n /** 折叠全部 */\r\n collapseAll: () => {\r\n props.items.forEach(item => {\r\n if (item.collapsible) expandedMap.value[item.id] = false\r\n })\r\n },\r\n })\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n @use './index.scss';\r\n</style>\r\n","<!--\r\n * @Description: 时间线组件 — 支持垂直/水平布局、自定义节点、可折叠详情\r\n-->\r\n<template>\r\n <div\r\n :class=\"rootClasses\"\r\n role=\"list\"\r\n >\r\n <template\r\n v-for=\"(item, idx) in displayItems\"\r\n :key=\"item.id\"\r\n >\r\n <div\r\n class=\"c-timeline__item\"\r\n role=\"listitem\"\r\n >\r\n <!-- 节点圆点 / 图标 -->\r\n <span\r\n :class=\"['c-timeline__dot', item.icon ? 'is-icon' : 'is-dot']\"\r\n :style=\"dotStyle(item)\"\r\n >\r\n <slot\r\n name=\"dot\"\r\n :item=\"item\"\r\n :index=\"idx\"\r\n >\r\n <C_Icon\r\n v-if=\"item.icon\"\r\n :name=\"item.icon\"\r\n />\r\n </slot>\r\n </span>\r\n\r\n <!-- 标题行 -->\r\n <div\r\n class=\"c-timeline__header\"\r\n @click=\"emit('item-click', item, idx)\"\r\n >\r\n <slot\r\n name=\"title\"\r\n :item=\"item\"\r\n :index=\"idx\"\r\n >\r\n <span class=\"c-timeline__title\">{{ item.title }}</span>\r\n </slot>\r\n <span\r\n v-if=\"props.showTime && item.time\"\r\n class=\"c-timeline__time\"\r\n >\r\n {{ item.time }}\r\n </span>\r\n </div>\r\n\r\n <!-- 标签组 -->\r\n <div\r\n v-if=\"item.tags?.length\"\r\n class=\"c-timeline__tags\"\r\n >\r\n <span\r\n v-for=\"tag in item.tags\"\r\n :key=\"tag.text\"\r\n class=\"c-timeline__tag\"\r\n >\r\n {{ tag.text }}\r\n </span>\r\n </div>\r\n\r\n <!-- 内容区 -->\r\n <div\r\n v-if=\"item.content && (!item.collapsible || expandedMap[item.id])\"\r\n :class=\"[\r\n 'c-timeline__detail',\r\n item.collapsible\r\n ? expandedMap[item.id]\r\n ? 'is-expanded'\r\n : 'is-collapsed'\r\n : 'is-expanded',\r\n ]\"\r\n >\r\n <div\r\n class=\"c-timeline__content\"\r\n v-html=\"item.content\"\r\n />\r\n </div>\r\n\r\n <!-- 折叠触发器 -->\r\n <span\r\n v-if=\"item.collapsible\"\r\n :class=\"[\r\n 'c-timeline__collapse-trigger',\r\n { 'is-expanded': expandedMap[item.id] },\r\n ]\"\r\n @click=\"toggleExpand(item)\"\r\n >\r\n {{ expandedMap[item.id] ? '收起' : '展开详情' }}\r\n <C_Icon\r\n name=\"mdi:chevron-down\"\r\n class=\"collapse-arrow\"\r\n />\r\n </span>\r\n </div>\r\n </template>\r\n\r\n <!-- Pending 加载提示 -->\r\n <div\r\n v-if=\"props.pending\"\r\n class=\"c-timeline__pending\"\r\n >\r\n <span class=\"pending-dot\" />\r\n <span>{{ props.pendingText }}</span>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n import { computed, ref, watch } from 'vue'\r\n import C_Icon from '../C_Icon/index.vue'\r\n import {\r\n DEFAULT_TIMELINE_PROPS,\r\n STATUS_COLOR_MAP,\r\n type TimelineProps,\r\n type TimelineItem,\r\n } from './types'\r\n\r\n defineOptions({ name: 'C_Timeline' })\r\n\r\n const props = withDefaults(defineProps<TimelineProps>(), {\r\n items: () => [],\r\n mode: DEFAULT_TIMELINE_PROPS.mode,\r\n labelPlacement: DEFAULT_TIMELINE_PROPS.labelPlacement,\r\n pending: DEFAULT_TIMELINE_PROPS.pending,\r\n pendingText: DEFAULT_TIMELINE_PROPS.pendingText,\r\n reverse: DEFAULT_TIMELINE_PROPS.reverse,\r\n size: DEFAULT_TIMELINE_PROPS.size,\r\n lineType: DEFAULT_TIMELINE_PROPS.lineType,\r\n showTime: DEFAULT_TIMELINE_PROPS.showTime,\r\n })\r\n\r\n const emit = defineEmits<{\r\n (e: 'item-click', item: TimelineItem, index: number): void\r\n (e: 'expand', item: TimelineItem, expanded: boolean): void\r\n }>()\r\n\r\n // ===== 展开状态 =====\r\n const expandedMap = ref<Record<string | number, boolean>>({})\r\n\r\n // 初始化展开状态\r\n watch(\r\n () => props.items,\r\n items => {\r\n items.forEach(item => {\r\n if (item.collapsible && !(item.id in expandedMap.value)) {\r\n expandedMap.value[item.id] = item.defaultExpanded ?? false\r\n }\r\n })\r\n },\r\n { immediate: true }\r\n )\r\n\r\n const toggleExpand = (item: TimelineItem) => {\r\n const next = !expandedMap.value[item.id]\r\n expandedMap.value[item.id] = next\r\n emit('expand', item, next)\r\n }\r\n\r\n // ===== 排列顺序 =====\r\n const displayItems = computed(() =>\r\n props.reverse ? [...props.items].reverse() : props.items\r\n )\r\n\r\n // ===== 根类 =====\r\n const rootClasses = computed(() => [\r\n 'c-timeline',\r\n `is-${props.mode}`,\r\n `is-${props.size}`,\r\n `is-line-${props.lineType}`,\r\n `is-label-${props.labelPlacement}`,\r\n ])\r\n\r\n // ===== 节点颜色 =====\r\n const dotStyle = (item: TimelineItem) => {\r\n const color =\r\n item.color || STATUS_COLOR_MAP[item.status || 'default'] || undefined\r\n if (item.icon) {\r\n return { color, borderColor: color || undefined }\r\n }\r\n return {\r\n background: color || undefined,\r\n boxShadow: color ? `0 0 0 2px ${color}` : undefined,\r\n }\r\n }\r\n\r\n // ===== 暴露 =====\r\n defineExpose({\r\n /** 展开全部 */\r\n expandAll: () => {\r\n props.items.forEach(item => {\r\n if (item.collapsible) expandedMap.value[item.id] = true\r\n })\r\n },\r\n /** 折叠全部 */\r\n collapseAll: () => {\r\n props.items.forEach(item => {\r\n if (item.collapsible) expandedMap.value[item.id] = false\r\n })\r\n },\r\n })\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n @use './index.scss';\r\n</style>\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"C_Timeline2.js","names":[],"sources":["../src/components/C_Timeline/types.ts","../src/components/C_Timeline/index.vue","../src/components/C_Timeline/index.vue","../src/components/C_Timeline/index.vue"],"sourcesContent":["/**\r\n * @Description: 时间线组件类型定义\r\n */\r\n\r\n/** 单条时间线节点 */\r\nexport interface TimelineItem {\r\n /** 唯一标识 */\r\n id: string | number\r\n /** 标题 */\r\n title: string\r\n /** 描述内容(支持 HTML 字符串) */\r\n content?: string\r\n /** 时间标签 */\r\n time?: string\r\n /** 节点颜色(CSS 颜色值) */\r\n color?: string\r\n /** 节点图标(Iconify 图标名) */\r\n icon?: string\r\n /** 节点状态 */\r\n status?: 'default' | 'success' | 'warning' | 'error' | 'info'\r\n /** 是否可展开/折叠详情 */\r\n collapsible?: boolean\r\n /** 初始是否展开 */\r\n defaultExpanded?: boolean\r\n /** 附加标签组 */\r\n tags?: Array<{ text: string; type?: string }>\r\n /** 自定义额外数据 */\r\n extra?: Record<string, unknown>\r\n}\r\n\r\n/** 组件 Props */\r\nexport interface TimelineProps {\r\n /** 时间线数据 */\r\n items: TimelineItem[]\r\n /** 布局方向 */\r\n mode?: 'vertical' | 'horizontal'\r\n /** 垂直模式下时间标签位置 */\r\n labelPlacement?: 'left' | 'right' | 'alternate'\r\n /** 是否显示尾部加载更多指示 */\r\n pending?: boolean\r\n /** 加载更多文案 */\r\n pendingText?: string\r\n /** 是否反转排列(最新在前) */\r\n reverse?: boolean\r\n /** 节点大小 */\r\n size?: 'small' | 'medium' | 'large'\r\n /** 连接线样式 */\r\n lineType?: 'solid' | 'dashed' | 'dotted'\r\n /** 是否显示时间标签 */\r\n showTime?: boolean\r\n}\r\n\r\n/** 默认 Props */\r\nexport const DEFAULT_TIMELINE_PROPS = {\r\n mode: 'vertical' as const,\r\n labelPlacement: 'right' as const,\r\n pending: false,\r\n pendingText: '加载中...',\r\n reverse: false,\r\n size: 'medium' as const,\r\n lineType: 'solid' as const,\r\n showTime: true,\r\n}\r\n\r\n/** 状态 → 颜色映射 */\r\nexport const STATUS_COLOR_MAP: Record<string, string> = {\r\n default: '',\r\n success: '#18a058',\r\n warning: '#f0a020',\r\n error: '#d03050',\r\n info: '#2080f0',\r\n}\r\n","/* unplugin-vue-components disabled */<!--\r\n * @Description: 时间线组件 — 支持垂直/水平布局、自定义节点、可折叠详情\r\n-->\r\n<template>\r\n <div\r\n :class=\"rootClasses\"\r\n role=\"list\"\r\n >\r\n <div\r\n v-for=\"(item, idx) in displayItems\"\r\n :key=\"item.id\"\r\n class=\"c-timeline__item\"\r\n role=\"listitem\"\r\n >\r\n <!-- 轨道区:圆点 + 连接线 -->\r\n <div class=\"c-timeline__track\">\r\n <span\r\n :class=\"['c-timeline__dot', item.icon ? 'is-icon' : 'is-dot']\"\r\n :style=\"dotStyle(item)\"\r\n >\r\n <slot\r\n name=\"dot\"\r\n :item=\"item\"\r\n :index=\"idx\"\r\n >\r\n <C_Icon\r\n v-if=\"item.icon\"\r\n :name=\"item.icon\"\r\n />\r\n </slot>\r\n </span>\r\n <!-- 连接线:最后一项不渲染 -->\r\n <span\r\n v-if=\"idx < displayItems.length - 1\"\r\n class=\"c-timeline__line\"\r\n />\r\n </div>\r\n\r\n <!-- 内容区 -->\r\n <div class=\"c-timeline__body\">\r\n <div\r\n class=\"c-timeline__header\"\r\n @click=\"emit('item-click', item, idx)\"\r\n >\r\n <slot\r\n name=\"title\"\r\n :item=\"item\"\r\n :index=\"idx\"\r\n >\r\n <span class=\"c-timeline__title\">{{ item.title }}</span>\r\n </slot>\r\n <span\r\n v-if=\"props.showTime && item.time\"\r\n class=\"c-timeline__time\"\r\n >{{ item.time }}</span>\r\n </div>\r\n\r\n <div\r\n v-if=\"item.tags?.length\"\r\n class=\"c-timeline__tags\"\r\n >\r\n <span\r\n v-for=\"tag in item.tags\"\r\n :key=\"tag.text\"\r\n class=\"c-timeline__tag\"\r\n >{{ tag.text }}</span>\r\n </div>\r\n\r\n <div\r\n v-if=\"item.content && (!item.collapsible || expandedMap[item.id])\"\r\n :class=\"[\r\n 'c-timeline__detail',\r\n item.collapsible\r\n ? expandedMap[item.id]\r\n ? 'is-expanded'\r\n : 'is-collapsed'\r\n : 'is-expanded',\r\n ]\"\r\n >\r\n <div\r\n class=\"c-timeline__content\"\r\n v-html=\"item.content\"\r\n />\r\n </div>\r\n\r\n <span\r\n v-if=\"item.collapsible\"\r\n :class=\"[\r\n 'c-timeline__collapse-trigger',\r\n { 'is-expanded': expandedMap[item.id] },\r\n ]\"\r\n @click=\"toggleExpand(item)\"\r\n >\r\n {{ expandedMap[item.id] ? '收起' : '展开详情' }}\r\n <C_Icon\r\n name=\"mdi:chevron-down\"\r\n class=\"collapse-arrow\"\r\n />\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Pending 加载指示 -->\r\n <div\r\n v-if=\"props.pending\"\r\n class=\"c-timeline__pending\"\r\n >\r\n <span class=\"pending-dot\" />\r\n <span>{{ props.pendingText }}</span>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n import { computed, ref, watch } from 'vue'\r\n import C_Icon from '../C_Icon/index.vue'\r\n import {\r\n DEFAULT_TIMELINE_PROPS,\r\n STATUS_COLOR_MAP,\r\n type TimelineProps,\r\n type TimelineItem,\r\n } from './types'\r\n\r\n defineOptions({ name: 'C_Timeline' })\r\n\r\n const props = withDefaults(defineProps<TimelineProps>(), {\r\n items: () => [],\r\n mode: DEFAULT_TIMELINE_PROPS.mode,\r\n labelPlacement: DEFAULT_TIMELINE_PROPS.labelPlacement,\r\n pending: DEFAULT_TIMELINE_PROPS.pending,\r\n pendingText: DEFAULT_TIMELINE_PROPS.pendingText,\r\n reverse: DEFAULT_TIMELINE_PROPS.reverse,\r\n size: DEFAULT_TIMELINE_PROPS.size,\r\n lineType: DEFAULT_TIMELINE_PROPS.lineType,\r\n showTime: DEFAULT_TIMELINE_PROPS.showTime,\r\n })\r\n\r\n const emit = defineEmits<{\r\n (e: 'item-click', item: TimelineItem, index: number): void\r\n (e: 'expand', item: TimelineItem, expanded: boolean): void\r\n }>()\r\n\r\n // ===== 展开状态 =====\r\n const expandedMap = ref<Record<string | number, boolean>>({})\r\n\r\n // 初始化展开状态\r\n watch(\r\n () => props.items,\r\n items => {\r\n items.forEach(item => {\r\n if (item.collapsible && !(item.id in expandedMap.value)) {\r\n expandedMap.value[item.id] = item.defaultExpanded ?? false\r\n }\r\n })\r\n },\r\n { immediate: true }\r\n )\r\n\r\n const toggleExpand = (item: TimelineItem) => {\r\n const next = !expandedMap.value[item.id]\r\n expandedMap.value[item.id] = next\r\n emit('expand', item, next)\r\n }\r\n\r\n // ===== 排列顺序 =====\r\n const displayItems = computed(() =>\r\n props.reverse ? [...props.items].reverse() : props.items\r\n )\r\n\r\n // ===== 根类 =====\r\n const rootClasses = computed(() => [\r\n 'c-timeline',\r\n `is-${props.mode}`,\r\n `is-${props.size}`,\r\n `is-line-${props.lineType}`,\r\n `is-label-${props.labelPlacement}`,\r\n ])\r\n\r\n // ===== 节点颜色 =====\r\n const dotStyle = (item: TimelineItem) => {\r\n const color =\r\n item.color || STATUS_COLOR_MAP[item.status || 'default'] || undefined\r\n if (item.icon) {\r\n return { color, borderColor: color || undefined }\r\n }\r\n return {\r\n background: color || undefined,\r\n boxShadow: color ? `0 0 0 2px ${color}` : undefined,\r\n }\r\n }\r\n\r\n // ===== 暴露 =====\r\n defineExpose({\r\n /** 展开全部 */\r\n expandAll: () => {\r\n props.items.forEach(item => {\r\n if (item.collapsible) expandedMap.value[item.id] = true\r\n })\r\n },\r\n /** 折叠全部 */\r\n collapseAll: () => {\r\n props.items.forEach(item => {\r\n if (item.collapsible) expandedMap.value[item.id] = false\r\n })\r\n },\r\n })\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n @use './index.scss';\r\n</style>\r\n","/* unplugin-vue-components disabled */<!--\r\n * @Description: 时间线组件 — 支持垂直/水平布局、自定义节点、可折叠详情\r\n-->\r\n<template>\r\n <div\r\n :class=\"rootClasses\"\r\n role=\"list\"\r\n >\r\n <div\r\n v-for=\"(item, idx) in displayItems\"\r\n :key=\"item.id\"\r\n class=\"c-timeline__item\"\r\n role=\"listitem\"\r\n >\r\n <!-- 轨道区:圆点 + 连接线 -->\r\n <div class=\"c-timeline__track\">\r\n <span\r\n :class=\"['c-timeline__dot', item.icon ? 'is-icon' : 'is-dot']\"\r\n :style=\"dotStyle(item)\"\r\n >\r\n <slot\r\n name=\"dot\"\r\n :item=\"item\"\r\n :index=\"idx\"\r\n >\r\n <C_Icon\r\n v-if=\"item.icon\"\r\n :name=\"item.icon\"\r\n />\r\n </slot>\r\n </span>\r\n <!-- 连接线:最后一项不渲染 -->\r\n <span\r\n v-if=\"idx < displayItems.length - 1\"\r\n class=\"c-timeline__line\"\r\n />\r\n </div>\r\n\r\n <!-- 内容区 -->\r\n <div class=\"c-timeline__body\">\r\n <div\r\n class=\"c-timeline__header\"\r\n @click=\"emit('item-click', item, idx)\"\r\n >\r\n <slot\r\n name=\"title\"\r\n :item=\"item\"\r\n :index=\"idx\"\r\n >\r\n <span class=\"c-timeline__title\">{{ item.title }}</span>\r\n </slot>\r\n <span\r\n v-if=\"props.showTime && item.time\"\r\n class=\"c-timeline__time\"\r\n >{{ item.time }}</span>\r\n </div>\r\n\r\n <div\r\n v-if=\"item.tags?.length\"\r\n class=\"c-timeline__tags\"\r\n >\r\n <span\r\n v-for=\"tag in item.tags\"\r\n :key=\"tag.text\"\r\n class=\"c-timeline__tag\"\r\n >{{ tag.text }}</span>\r\n </div>\r\n\r\n <div\r\n v-if=\"item.content && (!item.collapsible || expandedMap[item.id])\"\r\n :class=\"[\r\n 'c-timeline__detail',\r\n item.collapsible\r\n ? expandedMap[item.id]\r\n ? 'is-expanded'\r\n : 'is-collapsed'\r\n : 'is-expanded',\r\n ]\"\r\n >\r\n <div\r\n class=\"c-timeline__content\"\r\n v-html=\"item.content\"\r\n />\r\n </div>\r\n\r\n <span\r\n v-if=\"item.collapsible\"\r\n :class=\"[\r\n 'c-timeline__collapse-trigger',\r\n { 'is-expanded': expandedMap[item.id] },\r\n ]\"\r\n @click=\"toggleExpand(item)\"\r\n >\r\n {{ expandedMap[item.id] ? '收起' : '展开详情' }}\r\n <C_Icon\r\n name=\"mdi:chevron-down\"\r\n class=\"collapse-arrow\"\r\n />\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Pending 加载指示 -->\r\n <div\r\n v-if=\"props.pending\"\r\n class=\"c-timeline__pending\"\r\n >\r\n <span class=\"pending-dot\" />\r\n <span>{{ props.pendingText }}</span>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n import { computed, ref, watch } from 'vue'\r\n import C_Icon from '../C_Icon/index.vue'\r\n import {\r\n DEFAULT_TIMELINE_PROPS,\r\n STATUS_COLOR_MAP,\r\n type TimelineProps,\r\n type TimelineItem,\r\n } from './types'\r\n\r\n defineOptions({ name: 'C_Timeline' })\r\n\r\n const props = withDefaults(defineProps<TimelineProps>(), {\r\n items: () => [],\r\n mode: DEFAULT_TIMELINE_PROPS.mode,\r\n labelPlacement: DEFAULT_TIMELINE_PROPS.labelPlacement,\r\n pending: DEFAULT_TIMELINE_PROPS.pending,\r\n pendingText: DEFAULT_TIMELINE_PROPS.pendingText,\r\n reverse: DEFAULT_TIMELINE_PROPS.reverse,\r\n size: DEFAULT_TIMELINE_PROPS.size,\r\n lineType: DEFAULT_TIMELINE_PROPS.lineType,\r\n showTime: DEFAULT_TIMELINE_PROPS.showTime,\r\n })\r\n\r\n const emit = defineEmits<{\r\n (e: 'item-click', item: TimelineItem, index: number): void\r\n (e: 'expand', item: TimelineItem, expanded: boolean): void\r\n }>()\r\n\r\n // ===== 展开状态 =====\r\n const expandedMap = ref<Record<string | number, boolean>>({})\r\n\r\n // 初始化展开状态\r\n watch(\r\n () => props.items,\r\n items => {\r\n items.forEach(item => {\r\n if (item.collapsible && !(item.id in expandedMap.value)) {\r\n expandedMap.value[item.id] = item.defaultExpanded ?? false\r\n }\r\n })\r\n },\r\n { immediate: true }\r\n )\r\n\r\n const toggleExpand = (item: TimelineItem) => {\r\n const next = !expandedMap.value[item.id]\r\n expandedMap.value[item.id] = next\r\n emit('expand', item, next)\r\n }\r\n\r\n // ===== 排列顺序 =====\r\n const displayItems = computed(() =>\r\n props.reverse ? [...props.items].reverse() : props.items\r\n )\r\n\r\n // ===== 根类 =====\r\n const rootClasses = computed(() => [\r\n 'c-timeline',\r\n `is-${props.mode}`,\r\n `is-${props.size}`,\r\n `is-line-${props.lineType}`,\r\n `is-label-${props.labelPlacement}`,\r\n ])\r\n\r\n // ===== 节点颜色 =====\r\n const dotStyle = (item: TimelineItem) => {\r\n const color =\r\n item.color || STATUS_COLOR_MAP[item.status || 'default'] || undefined\r\n if (item.icon) {\r\n return { color, borderColor: color || undefined }\r\n }\r\n return {\r\n background: color || undefined,\r\n boxShadow: color ? `0 0 0 2px ${color}` : undefined,\r\n }\r\n }\r\n\r\n // ===== 暴露 =====\r\n defineExpose({\r\n /** 展开全部 */\r\n expandAll: () => {\r\n props.items.forEach(item => {\r\n if (item.collapsible) expandedMap.value[item.id] = true\r\n })\r\n },\r\n /** 折叠全部 */\r\n collapseAll: () => {\r\n props.items.forEach(item => {\r\n if (item.collapsible) expandedMap.value[item.id] = false\r\n })\r\n },\r\n })\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n @use './index.scss';\r\n</style>\r\n","<!--\r\n * @Description: 时间线组件 — 支持垂直/水平布局、自定义节点、可折叠详情\r\n-->\r\n<template>\r\n <div\r\n :class=\"rootClasses\"\r\n role=\"list\"\r\n >\r\n <div\r\n v-for=\"(item, idx) in displayItems\"\r\n :key=\"item.id\"\r\n class=\"c-timeline__item\"\r\n role=\"listitem\"\r\n >\r\n <!-- 轨道区:圆点 + 连接线 -->\r\n <div class=\"c-timeline__track\">\r\n <span\r\n :class=\"['c-timeline__dot', item.icon ? 'is-icon' : 'is-dot']\"\r\n :style=\"dotStyle(item)\"\r\n >\r\n <slot\r\n name=\"dot\"\r\n :item=\"item\"\r\n :index=\"idx\"\r\n >\r\n <C_Icon\r\n v-if=\"item.icon\"\r\n :name=\"item.icon\"\r\n />\r\n </slot>\r\n </span>\r\n <!-- 连接线:最后一项不渲染 -->\r\n <span\r\n v-if=\"idx < displayItems.length - 1\"\r\n class=\"c-timeline__line\"\r\n />\r\n </div>\r\n\r\n <!-- 内容区 -->\r\n <div class=\"c-timeline__body\">\r\n <div\r\n class=\"c-timeline__header\"\r\n @click=\"emit('item-click', item, idx)\"\r\n >\r\n <slot\r\n name=\"title\"\r\n :item=\"item\"\r\n :index=\"idx\"\r\n >\r\n <span class=\"c-timeline__title\">{{ item.title }}</span>\r\n </slot>\r\n <span\r\n v-if=\"props.showTime && item.time\"\r\n class=\"c-timeline__time\"\r\n >{{ item.time }}</span>\r\n </div>\r\n\r\n <div\r\n v-if=\"item.tags?.length\"\r\n class=\"c-timeline__tags\"\r\n >\r\n <span\r\n v-for=\"tag in item.tags\"\r\n :key=\"tag.text\"\r\n class=\"c-timeline__tag\"\r\n >{{ tag.text }}</span>\r\n </div>\r\n\r\n <div\r\n v-if=\"item.content && (!item.collapsible || expandedMap[item.id])\"\r\n :class=\"[\r\n 'c-timeline__detail',\r\n item.collapsible\r\n ? expandedMap[item.id]\r\n ? 'is-expanded'\r\n : 'is-collapsed'\r\n : 'is-expanded',\r\n ]\"\r\n >\r\n <div\r\n class=\"c-timeline__content\"\r\n v-html=\"item.content\"\r\n />\r\n </div>\r\n\r\n <span\r\n v-if=\"item.collapsible\"\r\n :class=\"[\r\n 'c-timeline__collapse-trigger',\r\n { 'is-expanded': expandedMap[item.id] },\r\n ]\"\r\n @click=\"toggleExpand(item)\"\r\n >\r\n {{ expandedMap[item.id] ? '收起' : '展开详情' }}\r\n <C_Icon\r\n name=\"mdi:chevron-down\"\r\n class=\"collapse-arrow\"\r\n />\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Pending 加载指示 -->\r\n <div\r\n v-if=\"props.pending\"\r\n class=\"c-timeline__pending\"\r\n >\r\n <span class=\"pending-dot\" />\r\n <span>{{ props.pendingText }}</span>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n import { computed, ref, watch } from 'vue'\r\n import C_Icon from '../C_Icon/index.vue'\r\n import {\r\n DEFAULT_TIMELINE_PROPS,\r\n STATUS_COLOR_MAP,\r\n type TimelineProps,\r\n type TimelineItem,\r\n } from './types'\r\n\r\n defineOptions({ name: 'C_Timeline' })\r\n\r\n const props = withDefaults(defineProps<TimelineProps>(), {\r\n items: () => [],\r\n mode: DEFAULT_TIMELINE_PROPS.mode,\r\n labelPlacement: DEFAULT_TIMELINE_PROPS.labelPlacement,\r\n pending: DEFAULT_TIMELINE_PROPS.pending,\r\n pendingText: DEFAULT_TIMELINE_PROPS.pendingText,\r\n reverse: DEFAULT_TIMELINE_PROPS.reverse,\r\n size: DEFAULT_TIMELINE_PROPS.size,\r\n lineType: DEFAULT_TIMELINE_PROPS.lineType,\r\n showTime: DEFAULT_TIMELINE_PROPS.showTime,\r\n })\r\n\r\n const emit = defineEmits<{\r\n (e: 'item-click', item: TimelineItem, index: number): void\r\n (e: 'expand', item: TimelineItem, expanded: boolean): void\r\n }>()\r\n\r\n // ===== 展开状态 =====\r\n const expandedMap = ref<Record<string | number, boolean>>({})\r\n\r\n // 初始化展开状态\r\n watch(\r\n () => props.items,\r\n items => {\r\n items.forEach(item => {\r\n if (item.collapsible && !(item.id in expandedMap.value)) {\r\n expandedMap.value[item.id] = item.defaultExpanded ?? false\r\n }\r\n })\r\n },\r\n { immediate: true }\r\n )\r\n\r\n const toggleExpand = (item: TimelineItem) => {\r\n const next = !expandedMap.value[item.id]\r\n expandedMap.value[item.id] = next\r\n emit('expand', item, next)\r\n }\r\n\r\n // ===== 排列顺序 =====\r\n const displayItems = computed(() =>\r\n props.reverse ? [...props.items].reverse() : props.items\r\n )\r\n\r\n // ===== 根类 =====\r\n const rootClasses = computed(() => [\r\n 'c-timeline',\r\n `is-${props.mode}`,\r\n `is-${props.size}`,\r\n `is-line-${props.lineType}`,\r\n `is-label-${props.labelPlacement}`,\r\n ])\r\n\r\n // ===== 节点颜色 =====\r\n const dotStyle = (item: TimelineItem) => {\r\n const color =\r\n item.color || STATUS_COLOR_MAP[item.status || 'default'] || undefined\r\n if (item.icon) {\r\n return { color, borderColor: color || undefined }\r\n }\r\n return {\r\n background: color || undefined,\r\n boxShadow: color ? `0 0 0 2px ${color}` : undefined,\r\n }\r\n }\r\n\r\n // ===== 暴露 =====\r\n defineExpose({\r\n /** 展开全部 */\r\n expandAll: () => {\r\n props.items.forEach(item => {\r\n if (item.collapsible) expandedMap.value[item.id] = true\r\n })\r\n },\r\n /** 折叠全部 */\r\n collapseAll: () => {\r\n props.items.forEach(item => {\r\n if (item.collapsible) expandedMap.value[item.id] = false\r\n })\r\n },\r\n })\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n @use './index.scss';\r\n</style>\r\n"],"mappings":"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"}
@@ -110,20 +110,20 @@ declare const __VLS_export: vue.DefineComponent<CronProps, {
110
110
  reset: typeof handleReset;
111
111
  validate: () => CronValidation;
112
112
  }, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
113
- change: (value: string) => any;
114
113
  "update:modelValue": (value: string) => any;
114
+ change: (value: string) => any;
115
115
  "validation-change": (result: CronValidation) => any;
116
116
  }, string, vue.PublicProps, Readonly<CronProps> & Readonly<{
117
- onChange?: ((value: string) => any) | undefined;
118
117
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
118
+ onChange?: ((value: string) => any) | undefined;
119
119
  "onValidation-change"?: ((result: CronValidation) => any) | undefined;
120
120
  }>, {
121
+ modelValue: string;
121
122
  disabled: boolean;
122
123
  height: string | number;
123
- modelValue: string;
124
- showPreview: boolean;
125
124
  previewCount: number;
126
125
  showTemplates: boolean;
126
+ showPreview: boolean;
127
127
  showSecond: boolean;
128
128
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
129
129
  declare const _default: typeof __VLS_export;
@@ -112,22 +112,22 @@ interface FormulaEditorExpose {
112
112
  //#endregion
113
113
  //#region src/components/C_FormulaEditor/index.vue.d.ts
114
114
  declare const __VLS_export: vue.DefineComponent<FormulaEditorProps, FormulaEditorExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
115
- change: (value: string) => any;
116
115
  "update:modelValue": (value: string) => any;
116
+ change: (value: string) => any;
117
117
  "validation-change": (result: FormulaValidation) => any;
118
118
  }, string, vue.PublicProps, Readonly<FormulaEditorProps> & Readonly<{
119
- onChange?: ((value: string) => any) | undefined;
120
119
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
120
+ onChange?: ((value: string) => any) | undefined;
121
121
  "onValidation-change"?: ((result: FormulaValidation) => any) | undefined;
122
122
  }>, {
123
- disabled: boolean;
124
- height: string | number;
125
123
  modelValue: string;
126
124
  placeholder: string;
125
+ disabled: boolean;
126
+ height: string | number;
127
+ showPreview: boolean;
127
128
  variables: FormulaVariable[];
128
129
  functions: FormulaFunction[];
129
130
  sampleData: Record<string, number | string | boolean>;
130
- showPreview: boolean;
131
131
  showKeyboard: boolean;
132
132
  showVariablePanel: boolean;
133
133
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -150,8 +150,8 @@ interface NotificationCenterExpose {
150
150
  //#endregion
151
151
  //#region src/components/C_NotificationCenter/index.vue.d.ts
152
152
  declare const __VLS_export: vue.DefineComponent<NotificationCenterProps, NotificationCenterExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
153
- itemClick: (message: NotificationMessage) => any;
154
153
  delete: (ids: string[]) => any;
154
+ itemClick: (message: NotificationMessage) => any;
155
155
  read: (ids: string[]) => any;
156
156
  allRead: (category?: NotificationCategory | undefined) => any;
157
157
  unreadChange: (count: number) => any;
@@ -159,8 +159,8 @@ declare const __VLS_export: vue.DefineComponent<NotificationCenterProps, Notific
159
159
  newMessage: (message: NotificationMessage) => any;
160
160
  navigate: (url: string) => any;
161
161
  }, string, vue.PublicProps, Readonly<NotificationCenterProps> & Readonly<{
162
- onItemClick?: ((message: NotificationMessage) => any) | undefined;
163
162
  onDelete?: ((ids: string[]) => any) | undefined;
163
+ onItemClick?: ((message: NotificationMessage) => any) | undefined;
164
164
  onRead?: ((ids: string[]) => any) | undefined;
165
165
  onAllRead?: ((category?: NotificationCategory | undefined) => any) | undefined;
166
166
  onUnreadChange?: ((count: number) => any) | undefined;
@@ -168,8 +168,8 @@ declare const __VLS_export: vue.DefineComponent<NotificationCenterProps, Notific
168
168
  onNewMessage?: ((message: NotificationMessage) => any) | undefined;
169
169
  onNavigate?: ((url: string) => any) | undefined;
170
170
  }>, {
171
- storageKey: string;
172
171
  pageSize: number;
172
+ storageKey: string;
173
173
  desktopNotification: boolean;
174
174
  maxBadgeCount: number;
175
175
  pollingInterval: number;
@@ -217,7 +217,7 @@ declare function useNotificationCore(props: NotificationCenterProps): {
217
217
  actionText?: string | undefined;
218
218
  extra?: Record<string, unknown> | undefined;
219
219
  }[]>;
220
- activeCategory: vue.Ref<"all" | NotificationCategory, "all" | NotificationCategory>;
220
+ activeCategory: vue.Ref<NotificationCategory | "all", NotificationCategory | "all">;
221
221
  loading: vue.Ref<boolean, boolean>;
222
222
  total: vue.Ref<number, number>;
223
223
  page: vue.Ref<number, number>;
@@ -196,16 +196,16 @@ type __VLS_Slots = {} & {
196
196
  area?: (props: typeof __VLS_11) => any;
197
197
  };
198
198
  declare const __VLS_base: vue.DefineComponent<UploadProps, UploadExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
199
- success: (file: UploadFileItem, response: any) => any;
200
199
  change: (fileList: UploadFileItem[]) => any;
200
+ success: (file: UploadFileItem, response: any) => any;
201
201
  error: (file: UploadFileItem, error: Error) => any;
202
202
  progress: (file: UploadFileItem, percent: number) => any;
203
203
  remove: (file: UploadFileItem) => any;
204
204
  finish: (fileList: UploadFileItem[]) => any;
205
205
  exceed: (files: File[], fileList: UploadFileItem[]) => any;
206
206
  }, string, vue.PublicProps, Readonly<UploadProps> & Readonly<{
207
- onSuccess?: ((file: UploadFileItem, response: any) => any) | undefined;
208
207
  onChange?: ((fileList: UploadFileItem[]) => any) | undefined;
208
+ onSuccess?: ((file: UploadFileItem, response: any) => any) | undefined;
209
209
  onError?: ((file: UploadFileItem, error: Error) => any) | undefined;
210
210
  onProgress?: ((file: UploadFileItem, percent: number) => any) | undefined;
211
211
  onRemove?: ((file: UploadFileItem) => any) | undefined;
@@ -213,14 +213,14 @@ declare const __VLS_base: vue.DefineComponent<UploadProps, UploadExpose, {}, {},
213
213
  onExceed?: ((files: File[], fileList: UploadFileItem[]) => any) | undefined;
214
214
  }>, {
215
215
  disabled: boolean;
216
- data: Record<string, any>;
217
216
  multiple: boolean;
218
217
  draggable: boolean;
219
- maxSize: number;
218
+ data: Record<string, any>;
220
219
  action: string;
221
220
  headers: Record<string, string>;
222
221
  directory: boolean;
223
222
  accept: string;
223
+ maxSize: number;
224
224
  maxCount: number;
225
225
  pasteable: boolean;
226
226
  chunked: boolean;
@@ -259,9 +259,9 @@ type PlayerInstance = InstanceType<typeof xgplayer.default>;
259
259
  //#endregion
260
260
  //#region src/components/C_VideoPlayer/index.vue.d.ts
261
261
  declare const __VLS_export: vue.DefineComponent<VideoPlayerProps, VideoPlayerExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
262
- ready: () => any;
263
262
  error: (error: Error) => any;
264
263
  ended: () => any;
264
+ ready: () => any;
265
265
  stateChange: (state: PlayerState) => any;
266
266
  timeUpdate: (currentTime: number, duration: number) => any;
267
267
  qualityChange: (quality: QualityLevel) => any;
@@ -272,9 +272,9 @@ declare const __VLS_export: vue.DefineComponent<VideoPlayerProps, VideoPlayerExp
272
272
  chapterChange: (chapter: Chapter) => any;
273
273
  progressUpdate: (data: ProgressData) => any;
274
274
  }, string, vue.PublicProps, Readonly<VideoPlayerProps> & Readonly<{
275
- onReady?: (() => any) | undefined;
276
275
  onError?: ((error: Error) => any) | undefined;
277
276
  onEnded?: (() => any) | undefined;
277
+ onReady?: (() => any) | undefined;
278
278
  onStateChange?: ((state: PlayerState) => any) | undefined;
279
279
  onTimeUpdate?: ((currentTime: number, duration: number) => any) | undefined;
280
280
  onQualityChange?: ((quality: QualityLevel) => any) | undefined;
@@ -63,10 +63,10 @@ declare const __VLS_base: vue.DefineComponent<TableActionsProps, {}, {}, {}, {},
63
63
  "onDropdown-click"?: ((item: ActionDropdownItem, action: ActionItem) => any) | undefined;
64
64
  "onAction-click"?: ((action: ActionItem) => any) | undefined;
65
65
  }>, {
66
- config: ActionBarConfig;
67
66
  actions: ActionItem[];
68
67
  leftActions: ActionItem[];
69
68
  rightActions: ActionItem[];
69
+ config: ActionBarConfig;
70
70
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
71
71
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
72
72
  declare const _default: typeof __VLS_export;
@@ -25,20 +25,20 @@ declare const __VLS_export: vue.DefineComponent<Props, {
25
25
  copyCode: typeof copyCode;
26
26
  toggleFullscreen: typeof toggleFullscreen;
27
27
  }, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
28
- click: (event: MouseEvent) => any;
29
28
  copy: (code: string) => any;
29
+ click: (event: MouseEvent) => any;
30
30
  fullscreen: (isFullscreen: boolean) => any;
31
31
  }, string, vue.PublicProps, Readonly<Props> & Readonly<{
32
- onClick?: ((event: MouseEvent) => any) | undefined;
33
32
  onCopy?: ((code: string) => any) | undefined;
33
+ onClick?: ((event: MouseEvent) => any) | undefined;
34
34
  onFullscreen?: ((isFullscreen: boolean) => any) | undefined;
35
35
  }>, {
36
36
  trim: boolean;
37
37
  code: string;
38
- wordWrap: boolean;
39
38
  language: string;
40
39
  showHeader: boolean;
41
40
  showLineNumbers: boolean;
41
+ wordWrap: boolean;
42
42
  showFullscreen: boolean;
43
43
  autoLoadLanguage: boolean;
44
44
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -61,19 +61,19 @@ declare const __VLS_export: vue.DefineComponent<ContextMenuProps, {
61
61
  close: () => void; /** 当前是否可见 */
62
62
  visible: vue.ComputedRef<boolean>;
63
63
  }, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {} & {
64
- close: () => any;
65
64
  select: (item: ContextMenuItem) => any;
66
65
  open: (position: {
67
66
  x: number;
68
67
  y: number;
69
68
  }) => any;
69
+ close: () => any;
70
70
  }, string, vue.PublicProps, Readonly<ContextMenuProps> & Readonly<{
71
- onClose?: (() => any) | undefined;
72
71
  onSelect?: ((item: ContextMenuItem) => any) | undefined;
73
72
  onOpen?: ((position: {
74
73
  x: number;
75
74
  y: number;
76
75
  }) => any) | undefined;
76
+ onClose?: (() => any) | undefined;
77
77
  }>, {
78
78
  disabled: boolean;
79
79
  items: ContextMenuItem[];
@@ -38,8 +38,8 @@ declare const __VLS_export: vue.DefineComponent<Props, {
38
38
  "onUpdate:dateTimeRange"?: ((value: DateRangeValue) => any) | undefined;
39
39
  "onUpdate:smartRange"?: ((value: DateRangeValue) => any) | undefined;
40
40
  }>, {
41
- disabled: boolean;
42
41
  placeholder: string;
42
+ disabled: boolean;
43
43
  mode: DatePickerMode;
44
44
  startPlaceholder: string;
45
45
  endPlaceholder: string;
@@ -28,12 +28,12 @@ declare const __VLS_export: vue.DefineComponent<Props, {
28
28
  "onEditor-mounted"?: ((editor: any) => any) | undefined;
29
29
  "onEditor-change"?: ((html: string) => any) | undefined;
30
30
  }>, {
31
+ modelValue: string;
32
+ placeholder: string;
31
33
  disabled: boolean;
32
34
  theme: "light" | "dark";
33
35
  height: number;
34
36
  readonly: boolean;
35
- modelValue: string;
36
- placeholder: string;
37
37
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
38
38
  declare const _default: typeof __VLS_export;
39
39
  //#endregion
@@ -12,11 +12,11 @@ type __VLS_Props = {
12
12
  tooltip?: string;
13
13
  };
14
14
  declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
15
- change: (key: string) => any;
16
15
  "update:modelValue": (key: string) => any;
16
+ change: (key: string) => any;
17
17
  }, string, vue.PublicProps, Readonly<__VLS_Props> & Readonly<{
18
- onChange?: ((key: string) => any) | undefined;
19
18
  "onUpdate:modelValue"?: ((key: string) => any) | undefined;
19
+ onChange?: ((key: string) => any) | undefined;
20
20
  }>, {
21
21
  modelValue: string;
22
22
  options: LanguageOption[];
@@ -38,8 +38,8 @@ declare const __VLS_export: vue.DefineComponent<Props, {
38
38
  insertText: (text: string) => void;
39
39
  wordCount: vue.ComputedRef<number>;
40
40
  }, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
41
- change: (text: string, html: string) => any;
42
41
  "update:modelValue": (value: string) => any;
42
+ change: (text: string, html: string) => any;
43
43
  save: (text: string, html: string) => any;
44
44
  "upload-image": (event: Event, insertImage: InsertImageFunction, files: FileList) => any;
45
45
  "fullscreen-change": (isFullscreen: boolean) => any;
@@ -48,8 +48,8 @@ declare const __VLS_export: vue.DefineComponent<Props, {
48
48
  "auto-save": (text: string) => any;
49
49
  "max-length-exceeded": (currentLength: number, maxLength: number) => any;
50
50
  }, string, vue.PublicProps, Readonly<Props> & Readonly<{
51
- onChange?: ((text: string, html: string) => any) | undefined;
52
51
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
52
+ onChange?: ((text: string, html: string) => any) | undefined;
53
53
  onSave?: ((text: string, html: string) => any) | undefined;
54
54
  "onUpload-image"?: ((event: Event, insertImage: InsertImageFunction, files: FileList) => any) | undefined;
55
55
  "onFullscreen-change"?: ((isFullscreen: boolean) => any) | undefined;
@@ -58,13 +58,12 @@ declare const __VLS_export: vue.DefineComponent<Props, {
58
58
  "onAuto-save"?: ((text: string) => any) | undefined;
59
59
  "onMax-length-exceeded"?: ((currentLength: number, maxLength: number) => any) | undefined;
60
60
  }>, {
61
- disabled: boolean;
62
- height: string | number;
63
61
  modelValue: string;
64
62
  placeholder: string;
65
- isDark: boolean;
66
- autoSave: boolean;
63
+ disabled: boolean;
64
+ height: string | number;
67
65
  mode: "edit" | "editable" | "preview";
66
+ isDark: boolean;
68
67
  tocNavPosition: "left" | "right";
69
68
  defaultFullscreen: boolean;
70
69
  autofocus: boolean;
@@ -73,6 +72,7 @@ declare const __VLS_export: vue.DefineComponent<Props, {
73
72
  rightToolbar: string;
74
73
  maxLength: number;
75
74
  showWordCount: boolean;
75
+ autoSave: boolean;
76
76
  autoSaveInterval: number;
77
77
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
78
78
  declare const _default: typeof __VLS_export;
@@ -60,22 +60,22 @@ type __VLS_Props = {
60
60
  theme?: AudioPlayerProps['theme'];
61
61
  };
62
62
  declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
63
- ended: (index: number) => any;
64
- pause: () => any;
65
63
  play: (index: number) => any;
64
+ pause: () => any;
65
+ ended: (index: number) => any;
66
66
  modeChange: (mode: string) => any;
67
67
  }, string, vue.PublicProps, Readonly<__VLS_Props> & Readonly<{
68
- onEnded?: ((index: number) => any) | undefined;
69
- onPause?: (() => any) | undefined;
70
68
  onPlay?: ((index: number) => any) | undefined;
69
+ onPause?: (() => any) | undefined;
70
+ onEnded?: ((index: number) => any) | undefined;
71
71
  onModeChange?: ((mode: string) => any) | undefined;
72
72
  }>, {
73
73
  theme: "default" | "minimal";
74
- mode: "list" | "single" | "loop" | "shuffle";
75
- autoplay: boolean;
76
74
  initialIndex: number;
77
75
  showPlaylist: boolean;
78
76
  showCover: boolean;
77
+ autoplay: boolean;
78
+ mode: "list" | "loop" | "single" | "shuffle";
79
79
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
80
80
  declare const _default: typeof __VLS_export;
81
81
  //#endregion
@@ -35,12 +35,12 @@ type __VLS_Slots = {} & {
35
35
  };
36
36
  declare const __VLS_base: vue.DefineComponent<Props, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<Props> & Readonly<{}>, {
37
37
  status: "default" | "success" | "error" | "warning" | "info";
38
- time: number;
39
- strokeWidth: number;
40
38
  percentage: number | number[];
41
39
  isAnimation: boolean;
40
+ time: number;
42
41
  indicatorPlacement: "inside" | "outside";
43
42
  showIndicator: boolean;
43
+ strokeWidth: number;
44
44
  unit: string;
45
45
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
46
46
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -24,10 +24,10 @@ declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue
24
24
  onChange?: ((args_0: number) => any) | undefined;
25
25
  "onUpdate:current"?: ((args_0: number) => any) | undefined;
26
26
  }>, {
27
- clickable: boolean;
28
27
  direction: "horizontal" | "vertical";
29
- connected: boolean;
28
+ clickable: boolean;
30
29
  current: number;
30
+ connected: boolean;
31
31
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
32
32
  declare const _default: typeof __VLS_export;
33
33
  //#endregion
@@ -93,9 +93,9 @@ declare const __VLS_base: vue.DefineComponent<TimelineProps, {
93
93
  reverse: boolean;
94
94
  size: "small" | "medium" | "large";
95
95
  items: TimelineItem[];
96
- labelPlacement: "left" | "right" | "alternate";
97
96
  mode: "vertical" | "horizontal";
98
97
  pending: boolean;
98
+ labelPlacement: "left" | "right" | "alternate";
99
99
  pendingText: string;
100
100
  lineType: "solid" | "dashed" | "dotted";
101
101
  showTime: boolean;
@@ -61,11 +61,11 @@ type __VLS_Props = {
61
61
  size?: TransferProps['size'];
62
62
  };
63
63
  declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
64
- change: (targetKeys: (string | number)[], direction: "right" | "left", moveKeys: (string | number)[]) => any;
65
64
  "update:modelValue": (value: (string | number)[]) => any;
65
+ change: (targetKeys: (string | number)[], direction: "right" | "left", moveKeys: (string | number)[]) => any;
66
66
  }, string, vue.PublicProps, Readonly<__VLS_Props> & Readonly<{
67
- onChange?: ((targetKeys: (string | number)[], direction: "right" | "left", moveKeys: (string | number)[]) => any) | undefined;
68
67
  "onUpdate:modelValue"?: ((value: (string | number)[]) => any) | undefined;
68
+ onChange?: ((targetKeys: (string | number)[], direction: "right" | "left", moveKeys: (string | number)[]) => any) | undefined;
69
69
  }>, {
70
70
  size: "small" | "medium" | "large";
71
71
  filterable: boolean;
@@ -648,11 +648,11 @@ declare const __VLS_export: vue.DefineComponent<Props, {
648
648
  onTaskChange?: ((task: GanttTask, changes: any) => any) | undefined;
649
649
  }>, {
650
650
  theme: "light" | "dark";
651
- data: GanttTask[];
652
- height: string | number;
653
- showToolbar: boolean;
654
651
  options: GanttOptions;
652
+ height: string | number;
655
653
  title: string;
654
+ data: GanttTask[];
655
+ showToolbar: boolean;
656
656
  preset: GanttPreset;
657
657
  showFullscreenButton: boolean;
658
658
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -74,13 +74,13 @@ declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue
74
74
  }>, {
75
75
  size: number;
76
76
  overlap: number;
77
+ direction: "ltr" | "rtl";
77
78
  max: number;
78
79
  shape: "circle" | "square";
79
80
  showStatus: boolean;
80
81
  showTooltip: boolean;
81
82
  clickable: boolean;
82
83
  overflowClickable: boolean;
83
- direction: "ltr" | "rtl";
84
84
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
85
85
  declare const _default: typeof __VLS_export;
86
86
  //#endregion
@@ -20,17 +20,17 @@ declare const __VLS_export: vue.DefineComponent<Props, {}, {}, {}, {}, vue.Compo
20
20
  }, string, vue.PublicProps, Readonly<Props> & Readonly<{
21
21
  onError?: ((error: Error) => any) | undefined;
22
22
  }>, {
23
+ label: string;
23
24
  width: number;
24
25
  height: number;
25
- label: string;
26
26
  fontSize: number;
27
- showBorder: boolean;
28
- showLabel: boolean;
29
27
  format: "CODE128" | "CODE39" | "EAN13" | "EAN8" | "UPC" | "ITF14" | "MSI" | "pharmacode";
30
- background: string;
31
28
  showText: boolean;
32
29
  textPosition: "bottom" | "top";
33
30
  lineColor: string;
31
+ background: string;
32
+ showBorder: boolean;
33
+ showLabel: boolean;
34
34
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
35
35
  declare const _default: typeof __VLS_export;
36
36
  //#endregion
@@ -18,26 +18,26 @@ declare const __VLS_export: vue.DefineComponent<CaptchaProps, {
18
18
  reset: () => void;
19
19
  show: () => void;
20
20
  }, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {} & {
21
+ change: (valid: boolean) => any;
21
22
  success: (data: {
22
23
  token: string;
23
24
  timestamp: number;
24
25
  }) => any;
25
- fail: (error: string) => any;
26
- change: (valid: boolean) => any;
27
26
  reset: () => any;
27
+ fail: (error: string) => any;
28
28
  }, string, vue.PublicProps, Readonly<CaptchaProps> & Readonly<{
29
+ onChange?: ((valid: boolean) => any) | undefined;
29
30
  onSuccess?: ((data: {
30
31
  token: string;
31
32
  timestamp: number;
32
33
  }) => any) | undefined;
33
- onFail?: ((error: string) => any) | undefined;
34
- onChange?: ((valid: boolean) => any) | undefined;
35
34
  onReset?: (() => any) | undefined;
35
+ onFail?: ((error: string) => any) | undefined;
36
36
  }>, {
37
- triggerText: string;
38
- images: string[];
39
37
  disabled: boolean;
40
38
  theme: "light" | "dark";
39
+ triggerText: string;
40
+ images: string[];
41
41
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
42
42
  declare const _default: typeof __VLS_export;
43
43
  //#endregion
@@ -17,11 +17,11 @@ type __VLS_Props = {
17
17
  modelValue?: CascadeValue;
18
18
  };
19
19
  declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
20
- change: (value: CascadeValue) => any;
21
20
  "update:modelValue": (value: CascadeValue) => any;
21
+ change: (value: CascadeValue) => any;
22
22
  }, string, vue.PublicProps, Readonly<__VLS_Props> & Readonly<{
23
- onChange?: ((value: CascadeValue) => any) | undefined;
24
23
  "onUpdate:modelValue"?: ((value: CascadeValue) => any) | undefined;
24
+ onChange?: ((value: CascadeValue) => any) | undefined;
25
25
  }>, {
26
26
  placeholders: string[];
27
27
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -105,11 +105,11 @@ declare const __VLS_base: vue.DefineComponent<ChatProps, {
105
105
  onResend?: ((msg: ChatMessage) => any) | undefined;
106
106
  }>, {
107
107
  placeholder: string;
108
+ title: string;
108
109
  showContacts: boolean;
109
110
  showTimestamp: boolean;
110
111
  showSendBtn: boolean;
111
112
  loadingHistory: boolean;
112
- title: string;
113
113
  contacts: ChatContact[];
114
114
  messages: ChatMessage[];
115
115
  currentContactId: string;