@robot-admin/naive-ui-components 0.6.23 → 0.6.25

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 (50) 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-BGdlmVDV.css.map +1 -0
  4. package/dist/C_Timeline-CtxNpyOi.css.map +1 -0
  5. package/dist/C_Timeline.css +114 -121
  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 +4 -4
  11. package/dist/constants3.d.ts +2 -2
  12. package/dist/constants4.d.ts +5 -5
  13. package/dist/constants5.d.ts +4 -4
  14. package/dist/index.vue.d.ts +1 -1
  15. package/dist/index10.vue.d.ts +4 -4
  16. package/dist/index11.vue.d.ts +4 -4
  17. package/dist/index12.vue.d.ts +1 -1
  18. package/dist/index13.vue.d.ts +4 -4
  19. package/dist/index15.vue.d.ts +5 -5
  20. package/dist/index16.vue.d.ts +3 -3
  21. package/dist/index17.vue.d.ts +2 -2
  22. package/dist/index18.vue.d.ts +6 -6
  23. package/dist/index2.vue.d.ts +6 -6
  24. package/dist/index20.vue.d.ts +2 -2
  25. package/dist/index21.vue.d.ts +1 -1
  26. package/dist/index24.vue.d.ts +1 -11
  27. package/dist/index25.vue.d.ts +4 -4
  28. package/dist/index26.vue.d.ts +3 -3
  29. package/dist/index3.vue.d.ts +1 -1
  30. package/dist/index4.vue.d.ts +3 -3
  31. package/dist/index6.vue.d.ts +6 -6
  32. package/dist/index7.vue.d.ts +2 -2
  33. package/dist/index9.vue.d.ts +2 -2
  34. package/dist/style.css +115 -122
  35. package/dist/useCalendarEvents.d.ts +1 -1
  36. package/dist/useCropperCore.d.ts +7 -7
  37. package/dist/useDraggableLayout.d.ts +10 -10
  38. package/dist/useDynamicFormState.d.ts +8 -8
  39. package/dist/useEdgeInteraction.d.ts +2 -2
  40. package/dist/useInfiniteScroll.d.ts +3 -3
  41. package/dist/useModalEdit.d.ts +2 -2
  42. package/dist/useQRCode.d.ts +5 -5
  43. package/dist/useSignatureHistory.d.ts +2 -2
  44. package/dist/useSplitResize.d.ts +3 -3
  45. package/dist/useTimeSelection.d.ts +2 -2
  46. package/dist/useTreeOperations.d.ts +4 -4
  47. package/dist/useWorkflowValidation.d.ts +5 -5
  48. package/package.json +1 -1
  49. package/dist/C_Timeline-BTaPYU85.css.map +0 -1
  50. package/dist/C_Timeline-VYsPZq4N.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 <!-- ====== 水平模式 ====== -->\r\n <template v-if=\"props.mode === 'horizontal'\">\r\n <!-- 轨道行:圆点 + 连接线 -->\r\n <div class=\"c-timeline__rail\">\r\n <div\r\n v-for=\"(item, idx) in displayItems\"\r\n :key=\"item.id\"\r\n class=\"c-timeline__rail-cell\"\r\n >\r\n <!-- 连接线(伪元素方式,新组件内操控) -->\r\n <span\r\n v-if=\"idx < displayItems.length - 1\"\r\n class=\"c-timeline__line\"\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 </div>\r\n </div>\r\n\r\n <!-- 内容行 -->\r\n <div class=\"c-timeline__body\">\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 @click=\"emit('item-click', item, idx)\"\r\n >\r\n <!-- 标题 + 时间 -->\r\n <div class=\"c-timeline__header\">\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 <!-- 标签组 -->\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 <!-- 内容区 -->\r\n <div\r\n v-if=\"item.content\"\r\n class=\"c-timeline__detail is-expanded\"\r\n >\r\n <div\r\n class=\"c-timeline__content\"\r\n v-html=\"item.content\"\r\n />\r\n </div>\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 </template>\r\n\r\n <!-- ====== 垂直模式 ====== -->\r\n <template v-else>\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 <span\r\n v-if=\"idx < displayItems.length - 1\"\r\n class=\"c-timeline__line\"\r\n />\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 class=\"c-timeline__body\">\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 >{{ item.time }}</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 >{{ tag.text }}</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 </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 </template>\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 <!-- ====== 水平模式 ====== -->\r\n <template v-if=\"props.mode === 'horizontal'\">\r\n <!-- 轨道行:圆点 + 连接线 -->\r\n <div class=\"c-timeline__rail\">\r\n <div\r\n v-for=\"(item, idx) in displayItems\"\r\n :key=\"item.id\"\r\n class=\"c-timeline__rail-cell\"\r\n >\r\n <!-- 连接线(伪元素方式,新组件内操控) -->\r\n <span\r\n v-if=\"idx < displayItems.length - 1\"\r\n class=\"c-timeline__line\"\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 </div>\r\n </div>\r\n\r\n <!-- 内容行 -->\r\n <div class=\"c-timeline__body\">\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 @click=\"emit('item-click', item, idx)\"\r\n >\r\n <!-- 标题 + 时间 -->\r\n <div class=\"c-timeline__header\">\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 <!-- 标签组 -->\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 <!-- 内容区 -->\r\n <div\r\n v-if=\"item.content\"\r\n class=\"c-timeline__detail is-expanded\"\r\n >\r\n <div\r\n class=\"c-timeline__content\"\r\n v-html=\"item.content\"\r\n />\r\n </div>\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 </template>\r\n\r\n <!-- ====== 垂直模式 ====== -->\r\n <template v-else>\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 <span\r\n v-if=\"idx < displayItems.length - 1\"\r\n class=\"c-timeline__line\"\r\n />\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 class=\"c-timeline__body\">\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 >{{ item.time }}</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 >{{ tag.text }}</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 </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 </template>\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 <!-- ====== 水平模式 ====== -->\r\n <template v-if=\"props.mode === 'horizontal'\">\r\n <!-- 轨道行:圆点 + 连接线 -->\r\n <div class=\"c-timeline__rail\">\r\n <div\r\n v-for=\"(item, idx) in displayItems\"\r\n :key=\"item.id\"\r\n class=\"c-timeline__rail-cell\"\r\n >\r\n <!-- 连接线(伪元素方式,新组件内操控) -->\r\n <span\r\n v-if=\"idx < displayItems.length - 1\"\r\n class=\"c-timeline__line\"\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 </div>\r\n </div>\r\n\r\n <!-- 内容行 -->\r\n <div class=\"c-timeline__body\">\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 @click=\"emit('item-click', item, idx)\"\r\n >\r\n <!-- 标题 + 时间 -->\r\n <div class=\"c-timeline__header\">\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 <!-- 标签组 -->\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 <!-- 内容区 -->\r\n <div\r\n v-if=\"item.content\"\r\n class=\"c-timeline__detail is-expanded\"\r\n >\r\n <div\r\n class=\"c-timeline__content\"\r\n v-html=\"item.content\"\r\n />\r\n </div>\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 </template>\r\n\r\n <!-- ====== 垂直模式 ====== -->\r\n <template v-else>\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 <span\r\n v-if=\"idx < displayItems.length - 1\"\r\n class=\"c-timeline__line\"\r\n />\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 class=\"c-timeline__body\">\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 >{{ item.time }}</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 >{{ tag.text }}</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 </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 </template>\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 */<!--\n * @Description: 时间线组件 — 支持垂直/水平布局、自定义节点、可折叠详情\n-->\n<template>\n <div\n :class=\"rootClasses\"\n role=\"list\"\n >\n <div\n v-for=\"(item, idx) in displayItems\"\n :key=\"item.id\"\n class=\"c-timeline__item\"\n role=\"listitem\"\n >\n <!-- 轨道区:圆点 + 连接线 -->\n <div class=\"c-timeline__track\">\n <span\n :class=\"['c-timeline__dot', item.icon ? 'is-icon' : 'is-dot']\"\n :style=\"dotStyle(item)\"\n >\n <slot\n name=\"dot\"\n :item=\"item\"\n :index=\"idx\"\n >\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n />\n </slot>\n </span>\n <!-- 连接线:最后一项不渲染 -->\n <span\n v-if=\"idx < displayItems.length - 1\"\n class=\"c-timeline__line\"\n />\n </div>\n\n <!-- 内容区 -->\n <div class=\"c-timeline__body\">\n <div\n class=\"c-timeline__header\"\n @click=\"emit('item-click', item, idx)\"\n >\n <slot\n name=\"title\"\n :item=\"item\"\n :index=\"idx\"\n >\n <span class=\"c-timeline__title\">{{ item.title }}</span>\n </slot>\n <span\n v-if=\"props.showTime && item.time\"\n class=\"c-timeline__time\"\n >{{ item.time }}</span\n >\n </div>\n\n <div\n v-if=\"item.tags?.length\"\n class=\"c-timeline__tags\"\n >\n <span\n v-for=\"tag in item.tags\"\n :key=\"tag.text\"\n class=\"c-timeline__tag\"\n >{{ tag.text }}</span\n >\n </div>\n\n <div\n v-if=\"item.content && (!item.collapsible || expandedMap[item.id])\"\n :class=\"[\n 'c-timeline__detail',\n item.collapsible\n ? expandedMap[item.id]\n ? 'is-expanded'\n : 'is-collapsed'\n : 'is-expanded',\n ]\"\n >\n <div\n class=\"c-timeline__content\"\n v-html=\"item.content\"\n />\n </div>\n\n <span\n v-if=\"item.collapsible\"\n :class=\"[\n 'c-timeline__collapse-trigger',\n { 'is-expanded': expandedMap[item.id] },\n ]\"\n @click=\"toggleExpand(item)\"\n >\n {{ expandedMap[item.id] ? '收起' : '展开详情' }}\n <C_Icon\n name=\"mdi:chevron-down\"\n class=\"collapse-arrow\"\n />\n </span>\n </div>\n </div>\n\n <!-- Pending 加载指示 -->\n <div\n v-if=\"props.pending\"\n class=\"c-timeline__pending\"\n >\n <span class=\"pending-dot\" />\n <span>{{ props.pendingText }}</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, ref, watch } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_TIMELINE_PROPS,\n STATUS_COLOR_MAP,\n type TimelineProps,\n type TimelineItem,\n } from './types'\n\n defineOptions({ name: 'C_Timeline' })\n\n const props = withDefaults(defineProps<TimelineProps>(), {\n items: () => [],\n mode: DEFAULT_TIMELINE_PROPS.mode,\n labelPlacement: DEFAULT_TIMELINE_PROPS.labelPlacement,\n pending: DEFAULT_TIMELINE_PROPS.pending,\n pendingText: DEFAULT_TIMELINE_PROPS.pendingText,\n reverse: DEFAULT_TIMELINE_PROPS.reverse,\n size: DEFAULT_TIMELINE_PROPS.size,\n lineType: DEFAULT_TIMELINE_PROPS.lineType,\n showTime: DEFAULT_TIMELINE_PROPS.showTime,\n })\n\n const emit = defineEmits<{\n (e: 'item-click', item: TimelineItem, index: number): void\n (e: 'expand', item: TimelineItem, expanded: boolean): void\n }>()\n\n // ===== 展开状态 =====\n const expandedMap = ref<Record<string | number, boolean>>({})\n\n // 初始化展开状态\n watch(\n () => props.items,\n items => {\n items.forEach(item => {\n if (item.collapsible && !(item.id in expandedMap.value)) {\n expandedMap.value[item.id] = item.defaultExpanded ?? false\n }\n })\n },\n { immediate: true }\n )\n\n const toggleExpand = (item: TimelineItem) => {\n const next = !expandedMap.value[item.id]\n expandedMap.value[item.id] = next\n emit('expand', item, next)\n }\n\n // ===== 排列顺序 =====\n const displayItems = computed(() =>\n props.reverse ? [...props.items].reverse() : props.items\n )\n\n // ===== 根类 =====\n const rootClasses = computed(() => [\n 'c-timeline',\n `is-${props.mode}`,\n `is-${props.size}`,\n `is-line-${props.lineType}`,\n `is-label-${props.labelPlacement}`,\n ])\n\n // ===== 节点颜色 =====\n const dotStyle = (item: TimelineItem) => {\n const color =\n item.color || STATUS_COLOR_MAP[item.status || 'default'] || undefined\n if (item.icon) {\n return { color, borderColor: color || undefined }\n }\n return {\n background: color || undefined,\n boxShadow: color ? `0 0 0 2px ${color}` : undefined,\n }\n }\n\n // ===== 暴露 =====\n defineExpose({\n /** 展开全部 */\n expandAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = true\n })\n },\n /** 折叠全部 */\n collapseAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = false\n })\n },\n })\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n","/* unplugin-vue-components disabled */<!--\n * @Description: 时间线组件 — 支持垂直/水平布局、自定义节点、可折叠详情\n-->\n<template>\n <div\n :class=\"rootClasses\"\n role=\"list\"\n >\n <div\n v-for=\"(item, idx) in displayItems\"\n :key=\"item.id\"\n class=\"c-timeline__item\"\n role=\"listitem\"\n >\n <!-- 轨道区:圆点 + 连接线 -->\n <div class=\"c-timeline__track\">\n <span\n :class=\"['c-timeline__dot', item.icon ? 'is-icon' : 'is-dot']\"\n :style=\"dotStyle(item)\"\n >\n <slot\n name=\"dot\"\n :item=\"item\"\n :index=\"idx\"\n >\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n />\n </slot>\n </span>\n <!-- 连接线:最后一项不渲染 -->\n <span\n v-if=\"idx < displayItems.length - 1\"\n class=\"c-timeline__line\"\n />\n </div>\n\n <!-- 内容区 -->\n <div class=\"c-timeline__body\">\n <div\n class=\"c-timeline__header\"\n @click=\"emit('item-click', item, idx)\"\n >\n <slot\n name=\"title\"\n :item=\"item\"\n :index=\"idx\"\n >\n <span class=\"c-timeline__title\">{{ item.title }}</span>\n </slot>\n <span\n v-if=\"props.showTime && item.time\"\n class=\"c-timeline__time\"\n >{{ item.time }}</span\n >\n </div>\n\n <div\n v-if=\"item.tags?.length\"\n class=\"c-timeline__tags\"\n >\n <span\n v-for=\"tag in item.tags\"\n :key=\"tag.text\"\n class=\"c-timeline__tag\"\n >{{ tag.text }}</span\n >\n </div>\n\n <div\n v-if=\"item.content && (!item.collapsible || expandedMap[item.id])\"\n :class=\"[\n 'c-timeline__detail',\n item.collapsible\n ? expandedMap[item.id]\n ? 'is-expanded'\n : 'is-collapsed'\n : 'is-expanded',\n ]\"\n >\n <div\n class=\"c-timeline__content\"\n v-html=\"item.content\"\n />\n </div>\n\n <span\n v-if=\"item.collapsible\"\n :class=\"[\n 'c-timeline__collapse-trigger',\n { 'is-expanded': expandedMap[item.id] },\n ]\"\n @click=\"toggleExpand(item)\"\n >\n {{ expandedMap[item.id] ? '收起' : '展开详情' }}\n <C_Icon\n name=\"mdi:chevron-down\"\n class=\"collapse-arrow\"\n />\n </span>\n </div>\n </div>\n\n <!-- Pending 加载指示 -->\n <div\n v-if=\"props.pending\"\n class=\"c-timeline__pending\"\n >\n <span class=\"pending-dot\" />\n <span>{{ props.pendingText }}</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, ref, watch } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_TIMELINE_PROPS,\n STATUS_COLOR_MAP,\n type TimelineProps,\n type TimelineItem,\n } from './types'\n\n defineOptions({ name: 'C_Timeline' })\n\n const props = withDefaults(defineProps<TimelineProps>(), {\n items: () => [],\n mode: DEFAULT_TIMELINE_PROPS.mode,\n labelPlacement: DEFAULT_TIMELINE_PROPS.labelPlacement,\n pending: DEFAULT_TIMELINE_PROPS.pending,\n pendingText: DEFAULT_TIMELINE_PROPS.pendingText,\n reverse: DEFAULT_TIMELINE_PROPS.reverse,\n size: DEFAULT_TIMELINE_PROPS.size,\n lineType: DEFAULT_TIMELINE_PROPS.lineType,\n showTime: DEFAULT_TIMELINE_PROPS.showTime,\n })\n\n const emit = defineEmits<{\n (e: 'item-click', item: TimelineItem, index: number): void\n (e: 'expand', item: TimelineItem, expanded: boolean): void\n }>()\n\n // ===== 展开状态 =====\n const expandedMap = ref<Record<string | number, boolean>>({})\n\n // 初始化展开状态\n watch(\n () => props.items,\n items => {\n items.forEach(item => {\n if (item.collapsible && !(item.id in expandedMap.value)) {\n expandedMap.value[item.id] = item.defaultExpanded ?? false\n }\n })\n },\n { immediate: true }\n )\n\n const toggleExpand = (item: TimelineItem) => {\n const next = !expandedMap.value[item.id]\n expandedMap.value[item.id] = next\n emit('expand', item, next)\n }\n\n // ===== 排列顺序 =====\n const displayItems = computed(() =>\n props.reverse ? [...props.items].reverse() : props.items\n )\n\n // ===== 根类 =====\n const rootClasses = computed(() => [\n 'c-timeline',\n `is-${props.mode}`,\n `is-${props.size}`,\n `is-line-${props.lineType}`,\n `is-label-${props.labelPlacement}`,\n ])\n\n // ===== 节点颜色 =====\n const dotStyle = (item: TimelineItem) => {\n const color =\n item.color || STATUS_COLOR_MAP[item.status || 'default'] || undefined\n if (item.icon) {\n return { color, borderColor: color || undefined }\n }\n return {\n background: color || undefined,\n boxShadow: color ? `0 0 0 2px ${color}` : undefined,\n }\n }\n\n // ===== 暴露 =====\n defineExpose({\n /** 展开全部 */\n expandAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = true\n })\n },\n /** 折叠全部 */\n collapseAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = false\n })\n },\n })\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n","<!--\n * @Description: 时间线组件 — 支持垂直/水平布局、自定义节点、可折叠详情\n-->\n<template>\n <div\n :class=\"rootClasses\"\n role=\"list\"\n >\n <div\n v-for=\"(item, idx) in displayItems\"\n :key=\"item.id\"\n class=\"c-timeline__item\"\n role=\"listitem\"\n >\n <!-- 轨道区:圆点 + 连接线 -->\n <div class=\"c-timeline__track\">\n <span\n :class=\"['c-timeline__dot', item.icon ? 'is-icon' : 'is-dot']\"\n :style=\"dotStyle(item)\"\n >\n <slot\n name=\"dot\"\n :item=\"item\"\n :index=\"idx\"\n >\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n />\n </slot>\n </span>\n <!-- 连接线:最后一项不渲染 -->\n <span\n v-if=\"idx < displayItems.length - 1\"\n class=\"c-timeline__line\"\n />\n </div>\n\n <!-- 内容区 -->\n <div class=\"c-timeline__body\">\n <div\n class=\"c-timeline__header\"\n @click=\"emit('item-click', item, idx)\"\n >\n <slot\n name=\"title\"\n :item=\"item\"\n :index=\"idx\"\n >\n <span class=\"c-timeline__title\">{{ item.title }}</span>\n </slot>\n <span\n v-if=\"props.showTime && item.time\"\n class=\"c-timeline__time\"\n >{{ item.time }}</span\n >\n </div>\n\n <div\n v-if=\"item.tags?.length\"\n class=\"c-timeline__tags\"\n >\n <span\n v-for=\"tag in item.tags\"\n :key=\"tag.text\"\n class=\"c-timeline__tag\"\n >{{ tag.text }}</span\n >\n </div>\n\n <div\n v-if=\"item.content && (!item.collapsible || expandedMap[item.id])\"\n :class=\"[\n 'c-timeline__detail',\n item.collapsible\n ? expandedMap[item.id]\n ? 'is-expanded'\n : 'is-collapsed'\n : 'is-expanded',\n ]\"\n >\n <div\n class=\"c-timeline__content\"\n v-html=\"item.content\"\n />\n </div>\n\n <span\n v-if=\"item.collapsible\"\n :class=\"[\n 'c-timeline__collapse-trigger',\n { 'is-expanded': expandedMap[item.id] },\n ]\"\n @click=\"toggleExpand(item)\"\n >\n {{ expandedMap[item.id] ? '收起' : '展开详情' }}\n <C_Icon\n name=\"mdi:chevron-down\"\n class=\"collapse-arrow\"\n />\n </span>\n </div>\n </div>\n\n <!-- Pending 加载指示 -->\n <div\n v-if=\"props.pending\"\n class=\"c-timeline__pending\"\n >\n <span class=\"pending-dot\" />\n <span>{{ props.pendingText }}</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, ref, watch } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_TIMELINE_PROPS,\n STATUS_COLOR_MAP,\n type TimelineProps,\n type TimelineItem,\n } from './types'\n\n defineOptions({ name: 'C_Timeline' })\n\n const props = withDefaults(defineProps<TimelineProps>(), {\n items: () => [],\n mode: DEFAULT_TIMELINE_PROPS.mode,\n labelPlacement: DEFAULT_TIMELINE_PROPS.labelPlacement,\n pending: DEFAULT_TIMELINE_PROPS.pending,\n pendingText: DEFAULT_TIMELINE_PROPS.pendingText,\n reverse: DEFAULT_TIMELINE_PROPS.reverse,\n size: DEFAULT_TIMELINE_PROPS.size,\n lineType: DEFAULT_TIMELINE_PROPS.lineType,\n showTime: DEFAULT_TIMELINE_PROPS.showTime,\n })\n\n const emit = defineEmits<{\n (e: 'item-click', item: TimelineItem, index: number): void\n (e: 'expand', item: TimelineItem, expanded: boolean): void\n }>()\n\n // ===== 展开状态 =====\n const expandedMap = ref<Record<string | number, boolean>>({})\n\n // 初始化展开状态\n watch(\n () => props.items,\n items => {\n items.forEach(item => {\n if (item.collapsible && !(item.id in expandedMap.value)) {\n expandedMap.value[item.id] = item.defaultExpanded ?? false\n }\n })\n },\n { immediate: true }\n )\n\n const toggleExpand = (item: TimelineItem) => {\n const next = !expandedMap.value[item.id]\n expandedMap.value[item.id] = next\n emit('expand', item, next)\n }\n\n // ===== 排列顺序 =====\n const displayItems = computed(() =>\n props.reverse ? [...props.items].reverse() : props.items\n )\n\n // ===== 根类 =====\n const rootClasses = computed(() => [\n 'c-timeline',\n `is-${props.mode}`,\n `is-${props.size}`,\n `is-line-${props.lineType}`,\n `is-label-${props.labelPlacement}`,\n ])\n\n // ===== 节点颜色 =====\n const dotStyle = (item: TimelineItem) => {\n const color =\n item.color || STATUS_COLOR_MAP[item.status || 'default'] || undefined\n if (item.icon) {\n return { color, borderColor: color || undefined }\n }\n return {\n background: color || undefined,\n boxShadow: color ? `0 0 0 2px ${color}` : undefined,\n }\n }\n\n // ===== 暴露 =====\n defineExpose({\n /** 展开全部 */\n expandAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = true\n })\n },\n /** 折叠全部 */\n collapseAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = false\n })\n },\n })\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\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
- "update:modelValue": (value: string) => any;
114
113
  change: (value: string) => any;
114
+ "update:modelValue": (value: string) => any;
115
115
  "validation-change": (result: CronValidation) => any;
116
116
  }, string, vue.PublicProps, Readonly<CronProps> & Readonly<{
117
- "onUpdate:modelValue"?: ((value: string) => any) | undefined;
118
117
  onChange?: ((value: string) => any) | undefined;
118
+ "onUpdate:modelValue"?: ((value: string) => any) | undefined;
119
119
  "onValidation-change"?: ((result: CronValidation) => any) | undefined;
120
120
  }>, {
121
- modelValue: string;
122
121
  disabled: boolean;
122
+ modelValue: string;
123
123
  height: string | number;
124
+ showPreview: boolean;
124
125
  previewCount: number;
125
126
  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,17 +112,17 @@ 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
- "update:modelValue": (value: string) => any;
116
115
  change: (value: string) => any;
116
+ "update:modelValue": (value: string) => any;
117
117
  "validation-change": (result: FormulaValidation) => any;
118
118
  }, string, vue.PublicProps, Readonly<FormulaEditorProps> & Readonly<{
119
- "onUpdate:modelValue"?: ((value: string) => any) | undefined;
120
119
  onChange?: ((value: string) => any) | undefined;
120
+ "onUpdate:modelValue"?: ((value: string) => any) | undefined;
121
121
  "onValidation-change"?: ((result: FormulaValidation) => any) | undefined;
122
122
  }>, {
123
- modelValue: string;
124
- placeholder: string;
125
123
  disabled: boolean;
124
+ placeholder: string;
125
+ modelValue: string;
126
126
  height: string | number;
127
127
  showPreview: boolean;
128
128
  variables: FormulaVariable[];
@@ -168,11 +168,11 @@ 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
- pageSize: number;
172
- storageKey: string;
173
171
  desktopNotification: boolean;
174
172
  maxBadgeCount: number;
175
173
  pollingInterval: number;
174
+ pageSize: number;
175
+ storageKey: string;
176
176
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
177
177
  declare const _default: typeof __VLS_export;
178
178
  //#endregion
@@ -196,32 +196,32 @@ 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;
199
200
  change: (fileList: UploadFileItem[]) => any;
200
201
  error: (file: UploadFileItem, error: Error) => any;
201
- success: (file: UploadFileItem, response: any) => 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;
207
208
  onChange?: ((fileList: UploadFileItem[]) => any) | undefined;
208
209
  onError?: ((file: UploadFileItem, error: Error) => any) | undefined;
209
- onSuccess?: ((file: UploadFileItem, response: any) => any) | undefined;
210
210
  onProgress?: ((file: UploadFileItem, percent: number) => any) | undefined;
211
211
  onRemove?: ((file: UploadFileItem) => any) | undefined;
212
212
  onFinish?: ((fileList: UploadFileItem[]) => any) | undefined;
213
213
  onExceed?: ((files: File[], fileList: UploadFileItem[]) => any) | undefined;
214
214
  }>, {
215
- data: Record<string, any>;
216
215
  disabled: boolean;
217
- draggable: boolean;
218
- maxSize: number;
219
216
  multiple: boolean;
217
+ data: Record<string, any>;
218
+ maxSize: number;
220
219
  action: string;
221
220
  headers: Record<string, string>;
222
221
  directory: boolean;
223
222
  accept: string;
224
223
  maxCount: number;
224
+ draggable: boolean;
225
225
  pasteable: boolean;
226
226
  chunked: boolean;
227
227
  chunkSize: number;
@@ -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
- ended: () => any;
263
- ready: () => any;
264
262
  error: (error: Error) => any;
263
+ ready: () => any;
264
+ ended: () => 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
- onEnded?: (() => any) | undefined;
276
- onReady?: (() => any) | undefined;
277
275
  onError?: ((error: Error) => any) | undefined;
276
+ onReady?: (() => any) | undefined;
277
+ onEnded?: (() => 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
- copy: (code: string) => any;
29
28
  click: (event: MouseEvent) => any;
29
+ copy: (code: string) => any;
30
30
  fullscreen: (isFullscreen: boolean) => any;
31
31
  }, string, vue.PublicProps, Readonly<Props> & Readonly<{
32
- onCopy?: ((code: string) => any) | undefined;
33
32
  onClick?: ((event: MouseEvent) => any) | undefined;
33
+ onCopy?: ((code: string) => any) | undefined;
34
34
  onFullscreen?: ((isFullscreen: boolean) => any) | undefined;
35
35
  }>, {
36
+ trim: boolean;
37
+ wordWrap: boolean;
36
38
  code: string;
37
39
  language: string;
38
40
  showHeader: boolean;
39
41
  showLineNumbers: boolean;
40
- wordWrap: boolean;
41
- trim: boolean;
42
42
  showFullscreen: boolean;
43
43
  autoLoadLanguage: boolean;
44
44
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -62,24 +62,24 @@ declare const __VLS_export: vue.DefineComponent<ContextMenuProps, {
62
62
  visible: vue.ComputedRef<boolean>;
63
63
  }, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {} & {
64
64
  select: (item: ContextMenuItem) => any;
65
- close: () => 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
71
  onSelect?: ((item: ContextMenuItem) => any) | undefined;
72
- onClose?: (() => 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[];
80
- maxWidth: number;
81
- minWidth: number;
82
80
  zIndex: number;
81
+ minWidth: number;
82
+ maxWidth: number;
83
83
  subMenuPlacement: "right" | "left";
84
84
  autoClose: boolean;
85
85
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -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
- placeholder: string;
42
41
  disabled: boolean;
42
+ placeholder: string;
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;
33
31
  disabled: boolean;
34
- readonly: boolean;
35
- height: number;
36
32
  theme: "light" | "dark";
33
+ placeholder: string;
34
+ modelValue: string;
35
+ height: number;
36
+ readonly: boolean;
37
37
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
38
38
  declare const _default: typeof __VLS_export;
39
39
  //#endregion
@@ -41,29 +41,29 @@ declare const __VLS_export: vue.DefineComponent<IconProps, {
41
41
  errorMessage: Readonly<vue.Ref<string, string>>; /** DOM引用 */
42
42
  el: vue.Ref<HTMLElement | undefined, HTMLElement | undefined>;
43
43
  }, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
44
- click: (event: MouseEvent) => any;
45
44
  error: (type: string, error?: any) => any;
45
+ click: (event: MouseEvent) => any;
46
46
  load: () => any;
47
47
  }, string, vue.PublicProps, Readonly<IconProps> & Readonly<{
48
- onClick?: ((event: MouseEvent) => any) | undefined;
49
48
  onError?: ((type: string, error?: any) => any) | undefined;
49
+ onClick?: ((event: MouseEvent) => any) | undefined;
50
50
  onLoad?: (() => any) | undefined;
51
51
  }>, {
52
52
  type: "iconify" | "unocss" | "component" | "svg" | "image";
53
53
  size: number | string;
54
- title: string;
55
54
  name: string | any;
56
55
  color: string;
56
+ loading: boolean;
57
+ flip: "horizontal" | "vertical" | "both";
57
58
  svgPath: string;
58
59
  viewBox: string;
59
60
  alt: string;
60
61
  clickable: boolean;
61
- loading: boolean;
62
62
  fallbackIcon: string;
63
+ title: string;
63
64
  ariaLabel: string;
64
65
  customClass: string;
65
66
  rotate: number;
66
- flip: "horizontal" | "vertical" | "both";
67
67
  componentProps: Record<string, any>;
68
68
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
69
69
  declare const _default: typeof __VLS_export;
@@ -12,14 +12,14 @@ type __VLS_Props = {
12
12
  tooltip?: string;
13
13
  };
14
14
  declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
15
- "update:modelValue": (key: string) => any;
16
15
  change: (key: string) => any;
16
+ "update:modelValue": (key: string) => any;
17
17
  }, string, vue.PublicProps, Readonly<__VLS_Props> & Readonly<{
18
- "onUpdate:modelValue"?: ((key: string) => any) | undefined;
19
18
  onChange?: ((key: string) => any) | undefined;
19
+ "onUpdate:modelValue"?: ((key: string) => any) | undefined;
20
20
  }>, {
21
- modelValue: string;
22
21
  options: LanguageOption[];
22
+ modelValue: string;
23
23
  tooltip: string;
24
24
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
25
25
  declare const _default: typeof __VLS_export;
@@ -99,9 +99,9 @@ declare const __VLS_base: vue.DefineComponent<LoginProps, {
99
99
  "onRegister-submit"?: ((data: RegisterFormData) => any) | undefined;
100
100
  "onRegister-send-code"?: ((phone: string) => any) | undefined;
101
101
  }>, {
102
- storageKey: string;
103
- title: string;
104
102
  loading: boolean;
103
+ title: string;
104
+ storageKey: string;
105
105
  defaultUsername: string;
106
106
  defaultPassword: string;
107
107
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -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
- "update:modelValue": (value: string) => any;
42
41
  change: (text: string, html: string) => any;
42
+ "update:modelValue": (value: 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
- "onUpdate:modelValue"?: ((value: string) => any) | undefined;
52
51
  onChange?: ((text: string, html: string) => any) | undefined;
52
+ "onUpdate:modelValue"?: ((value: 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,11 +58,13 @@ 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
- modelValue: string;
62
- placeholder: string;
63
61
  disabled: boolean;
62
+ placeholder: string;
63
+ isDark: boolean;
64
+ modelValue: string;
64
65
  height: string | number;
65
66
  mode: "edit" | "editable" | "preview";
67
+ autoSave: boolean;
66
68
  tocNavPosition: "left" | "right";
67
69
  defaultFullscreen: boolean;
68
70
  autofocus: boolean;
@@ -71,9 +73,7 @@ declare const __VLS_export: vue.DefineComponent<Props, {
71
73
  rightToolbar: string;
72
74
  maxLength: number;
73
75
  showWordCount: boolean;
74
- autoSave: boolean;
75
76
  autoSaveInterval: number;
76
- isDark: boolean;
77
77
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
78
78
  declare const _default: typeof __VLS_export;
79
79
  //#endregion
@@ -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
- play: (index: number) => any;
64
- pause: () => any;
65
63
  ended: (index: number) => any;
64
+ pause: () => any;
65
+ play: (index: number) => any;
66
66
  modeChange: (mode: string) => any;
67
67
  }, string, vue.PublicProps, Readonly<__VLS_Props> & Readonly<{
68
- onPlay?: ((index: number) => any) | undefined;
69
- onPause?: (() => any) | undefined;
70
68
  onEnded?: ((index: number) => any) | undefined;
69
+ onPause?: (() => any) | undefined;
70
+ onPlay?: ((index: number) => any) | undefined;
71
71
  onModeChange?: ((mode: string) => any) | undefined;
72
72
  }>, {
73
73
  theme: "default" | "minimal";
74
- mode: "list" | "loop" | "single" | "shuffle";
74
+ mode: "single" | "list" | "loop" | "shuffle";
75
+ autoplay: boolean;
75
76
  initialIndex: number;
76
77
  showPlaylist: boolean;
77
78
  showCover: boolean;
78
- autoplay: boolean;
79
79
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
80
80
  declare const _default: typeof __VLS_export;
81
81
  //#endregion
@@ -34,13 +34,13 @@ type __VLS_Slots = {} & {
34
34
  indicator?: (props: typeof __VLS_9) => any;
35
35
  };
36
36
  declare const __VLS_base: vue.DefineComponent<Props, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<Props> & Readonly<{}>, {
37
- time: number;
38
- strokeWidth: number;
39
37
  status: "default" | "success" | "error" | "warning" | "info";
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>;
@@ -25,8 +25,8 @@ declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue
25
25
  "onUpdate:current"?: ((args_0: number) => any) | undefined;
26
26
  }>, {
27
27
  clickable: boolean;
28
- direction: "horizontal" | "vertical";
29
28
  current: number;
29
+ direction: "horizontal" | "vertical";
30
30
  connected: boolean;
31
31
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
32
32
  declare const _default: typeof __VLS_export;
@@ -74,21 +74,11 @@ declare var __VLS_1: {
74
74
  }, __VLS_8: {
75
75
  item: TimelineItem;
76
76
  index: number;
77
- }, __VLS_10: {
78
- item: TimelineItem;
79
- index: number;
80
- }, __VLS_17: {
81
- item: TimelineItem;
82
- index: number;
83
77
  };
84
78
  type __VLS_Slots = {} & {
85
79
  dot?: (props: typeof __VLS_1) => any;
86
80
  } & {
87
81
  title?: (props: typeof __VLS_8) => any;
88
- } & {
89
- dot?: (props: typeof __VLS_10) => any;
90
- } & {
91
- title?: (props: typeof __VLS_17) => any;
92
82
  };
93
83
  declare const __VLS_base: vue.DefineComponent<TimelineProps, {
94
84
  /** 展开全部 */expandAll: () => void; /** 折叠全部 */
@@ -102,8 +92,8 @@ declare const __VLS_base: vue.DefineComponent<TimelineProps, {
102
92
  }>, {
103
93
  reverse: boolean;
104
94
  size: "small" | "medium" | "large";
105
- mode: "vertical" | "horizontal";
106
95
  items: TimelineItem[];
96
+ mode: "vertical" | "horizontal";
107
97
  labelPlacement: "left" | "right" | "alternate";
108
98
  pending: boolean;
109
99
  pendingText: string;
@@ -61,15 +61,15 @@ 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;
64
65
  "update:modelValue": (value: (string | number)[]) => any;
65
- change: (targetKeys: (string | number)[], direction: "left" | "right", 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;
67
68
  "onUpdate:modelValue"?: ((value: (string | number)[]) => any) | undefined;
68
- onChange?: ((targetKeys: (string | number)[], direction: "left" | "right", moveKeys: (string | number)[]) => any) | undefined;
69
69
  }>, {
70
- size: "medium" | "small" | "large";
71
- titles: [string, string];
70
+ size: "small" | "medium" | "large";
72
71
  filterable: boolean;
72
+ titles: [string, string];
73
73
  filterPlaceholder: string;
74
74
  showSelectAll: boolean;
75
75
  sourceEmptyText: string;
@@ -647,12 +647,12 @@ declare const __VLS_export: vue.DefineComponent<Props, {
647
647
  onTaskClick?: ((task: GanttTask, event: Event) => any) | undefined;
648
648
  onTaskChange?: ((task: GanttTask, changes: any) => any) | undefined;
649
649
  }>, {
650
- data: GanttTask[];
651
- height: string | number;
652
650
  theme: "light" | "dark";
651
+ options: GanttOptions;
652
+ height: string | number;
653
653
  title: string;
654
+ data: GanttTask[];
654
655
  showToolbar: boolean;
655
- options: GanttOptions;
656
656
  preset: GanttPreset;
657
657
  showFullscreenButton: boolean;
658
658
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -73,10 +73,10 @@ declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue
73
73
  onOverflowClick?: ((hiddenItems: AvatarItem[]) => any) | undefined;
74
74
  }>, {
75
75
  size: number;
76
+ overlap: number;
76
77
  clickable: boolean;
77
78
  direction: "ltr" | "rtl";
78
79
  max: number;
79
- overlap: number;
80
80
  shape: "circle" | "square";
81
81
  showStatus: boolean;
82
82
  showTooltip: boolean;