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

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 (51) 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-BTaPYU85.css.map +1 -0
  4. package/dist/C_Timeline-VYsPZq4N.css.map +1 -0
  5. package/dist/C_Timeline.css +184 -150
  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 +3 -3
  12. package/dist/constants4.d.ts +4 -4
  13. package/dist/constants5.d.ts +2 -2
  14. package/dist/index10.vue.d.ts +4 -4
  15. package/dist/index11.vue.d.ts +4 -4
  16. package/dist/index12.vue.d.ts +1 -1
  17. package/dist/index13.vue.d.ts +4 -4
  18. package/dist/index15.vue.d.ts +7 -7
  19. package/dist/index16.vue.d.ts +2 -2
  20. package/dist/index17.vue.d.ts +2 -2
  21. package/dist/index18.vue.d.ts +6 -6
  22. package/dist/index2.vue.d.ts +6 -6
  23. package/dist/index20.vue.d.ts +1 -1
  24. package/dist/index21.vue.d.ts +1 -1
  25. package/dist/index24.vue.d.ts +11 -1
  26. package/dist/index25.vue.d.ts +4 -4
  27. package/dist/index26.vue.d.ts +2 -2
  28. package/dist/index3.vue.d.ts +3 -3
  29. package/dist/index4.vue.d.ts +2 -2
  30. package/dist/index6.vue.d.ts +6 -6
  31. package/dist/index7.vue.d.ts +2 -2
  32. package/dist/index8.vue.d.ts +2 -2
  33. package/dist/index9.vue.d.ts +2 -2
  34. package/dist/style.css +183 -149
  35. package/dist/useCalendarEvents.d.ts +1 -1
  36. package/dist/useCropperCore.d.ts +1 -1
  37. package/dist/useDraggableLayout.d.ts +3 -3
  38. package/dist/useDynamicFormState.d.ts +8 -8
  39. package/dist/useEdgeInteraction.d.ts +2 -2
  40. package/dist/useFullscreen.d.ts +2 -2
  41. package/dist/useInfiniteScroll.d.ts +3 -3
  42. package/dist/useModalEdit.d.ts +2 -2
  43. package/dist/useQRCode.d.ts +5 -5
  44. package/dist/useSignatureHistory.d.ts +5 -2
  45. package/dist/useSplitResize.d.ts +1 -1
  46. package/dist/useTimeSelection.d.ts +2 -2
  47. package/dist/useTreeOperations.d.ts +4 -4
  48. package/dist/useWorkflowValidation.d.ts +5 -5
  49. package/package.json +1 -1
  50. package/dist/C_Timeline-CGTFTMX0.css.map +0 -1
  51. 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 <!-- ====== 水平模式 ====== -->\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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"}
@@ -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;
@@ -196,27 +196,27 @@ 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;
201
200
  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;
208
207
  onChange?: ((fileList: UploadFileItem[]) => any) | undefined;
209
208
  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
- disabled: boolean;
216
215
  data: Record<string, any>;
217
- multiple: boolean;
216
+ disabled: boolean;
218
217
  draggable: boolean;
219
218
  maxSize: number;
219
+ multiple: boolean;
220
220
  action: string;
221
221
  headers: Record<string, string>;
222
222
  directory: 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
+ ended: () => any;
262
263
  ready: () => any;
263
264
  error: (error: Error) => 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;
275
276
  onReady?: (() => any) | undefined;
276
277
  onError?: ((error: Error) => 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;
@@ -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
- trim: boolean;
37
36
  code: string;
38
- wordWrap: boolean;
39
37
  language: string;
40
38
  showHeader: boolean;
41
39
  showLineNumbers: boolean;
40
+ wordWrap: boolean;
41
+ trim: boolean;
42
42
  showFullscreen: boolean;
43
43
  autoLoadLanguage: boolean;
44
44
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -61,15 +61,15 @@ 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;
65
+ close: () => any;
66
66
  open: (position: {
67
67
  x: number;
68
68
  y: number;
69
69
  }) => any;
70
70
  }, string, vue.PublicProps, Readonly<ContextMenuProps> & Readonly<{
71
- onClose?: (() => any) | undefined;
72
71
  onSelect?: ((item: ContextMenuItem) => any) | undefined;
72
+ onClose?: (() => any) | undefined;
73
73
  onOpen?: ((position: {
74
74
  x: number;
75
75
  y: number;
@@ -77,9 +77,9 @@ declare const __VLS_export: vue.DefineComponent<ContextMenuProps, {
77
77
  }>, {
78
78
  disabled: boolean;
79
79
  items: ContextMenuItem[];
80
- zIndex: number;
81
- minWidth: number;
82
80
  maxWidth: number;
81
+ minWidth: number;
82
+ zIndex: 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
- 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
- disabled: boolean;
32
- theme: "light" | "dark";
33
- height: number;
34
- readonly: boolean;
35
31
  modelValue: string;
36
32
  placeholder: string;
33
+ disabled: boolean;
34
+ readonly: boolean;
35
+ height: number;
36
+ theme: "light" | "dark";
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
- error: (type: string, error?: any) => any;
45
44
  click: (event: MouseEvent) => any;
45
+ error: (type: string, error?: any) => any;
46
46
  load: () => any;
47
47
  }, string, vue.PublicProps, Readonly<IconProps> & Readonly<{
48
- onError?: ((type: string, error?: any) => any) | undefined;
49
48
  onClick?: ((event: MouseEvent) => any) | undefined;
49
+ onError?: ((type: string, error?: any) => any) | undefined;
50
50
  onLoad?: (() => any) | undefined;
51
51
  }>, {
52
52
  type: "iconify" | "unocss" | "component" | "svg" | "image";
53
- name: string | any;
54
53
  size: number | string;
55
- color: string;
56
- loading: boolean;
57
- flip: "horizontal" | "vertical" | "both";
58
54
  title: string;
59
- clickable: boolean;
55
+ name: string | any;
56
+ color: string;
60
57
  svgPath: string;
61
58
  viewBox: string;
62
59
  alt: string;
60
+ clickable: boolean;
61
+ loading: boolean;
63
62
  fallbackIcon: string;
64
63
  ariaLabel: string;
65
64
  customClass: string;
66
65
  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,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[];
@@ -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
- loading: boolean;
103
- title: string;
104
102
  storageKey: string;
103
+ title: string;
104
+ loading: boolean;
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
- 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,12 +58,10 @@ 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";
68
66
  tocNavPosition: "left" | "right";
69
67
  defaultFullscreen: boolean;
@@ -73,7 +71,9 @@ declare const __VLS_export: vue.DefineComponent<Props, {
73
71
  rightToolbar: string;
74
72
  maxLength: number;
75
73
  showWordCount: boolean;
74
+ autoSave: boolean;
76
75
  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
- 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;
74
+ mode: "list" | "loop" | "single" | "shuffle";
76
75
  initialIndex: number;
77
76
  showPlaylist: boolean;
78
77
  showCover: boolean;
78
+ autoplay: boolean;
79
79
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
80
80
  declare const _default: typeof __VLS_export;
81
81
  //#endregion
@@ -34,9 +34,9 @@ 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
- status: "default" | "success" | "error" | "warning" | "info";
38
37
  time: number;
39
38
  strokeWidth: number;
39
+ status: "default" | "success" | "error" | "warning" | "info";
40
40
  percentage: number | number[];
41
41
  isAnimation: boolean;
42
42
  indicatorPlacement: "inside" | "outside";
@@ -26,8 +26,8 @@ declare const __VLS_export: vue.DefineComponent<__VLS_Props, {}, {}, {}, {}, vue
26
26
  }>, {
27
27
  clickable: boolean;
28
28
  direction: "horizontal" | "vertical";
29
- connected: 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
@@ -74,11 +74,21 @@ 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;
77
83
  };
78
84
  type __VLS_Slots = {} & {
79
85
  dot?: (props: typeof __VLS_1) => any;
80
86
  } & {
81
87
  title?: (props: typeof __VLS_8) => any;
88
+ } & {
89
+ dot?: (props: typeof __VLS_10) => any;
90
+ } & {
91
+ title?: (props: typeof __VLS_17) => any;
82
92
  };
83
93
  declare const __VLS_base: vue.DefineComponent<TimelineProps, {
84
94
  /** 展开全部 */expandAll: () => void; /** 折叠全部 */
@@ -92,9 +102,9 @@ declare const __VLS_base: vue.DefineComponent<TimelineProps, {
92
102
  }>, {
93
103
  reverse: boolean;
94
104
  size: "small" | "medium" | "large";
105
+ mode: "vertical" | "horizontal";
95
106
  items: TimelineItem[];
96
107
  labelPlacement: "left" | "right" | "alternate";
97
- mode: "vertical" | "horizontal";
98
108
  pending: boolean;
99
109
  pendingText: string;
100
110
  lineType: "solid" | "dashed" | "dotted";
@@ -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;
65
64
  "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;
68
67
  "onUpdate:modelValue"?: ((value: (string | number)[]) => any) | undefined;
68
+ onChange?: ((targetKeys: (string | number)[], direction: "left" | "right", moveKeys: (string | number)[]) => any) | undefined;
69
69
  }>, {
70
- size: "small" | "medium" | "large";
71
- filterable: boolean;
70
+ size: "medium" | "small" | "large";
72
71
  titles: [string, string];
72
+ filterable: boolean;
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
- theme: "light" | "dark";
651
650
  data: GanttTask[];
652
651
  height: string | number;
652
+ theme: "light" | "dark";
653
+ title: string;
653
654
  showToolbar: boolean;
654
655
  options: GanttOptions;
655
- title: string;
656
656
  preset: GanttPreset;
657
657
  showFullscreenButton: boolean;
658
658
  }, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
@@ -73,14 +73,14 @@ 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
+ clickable: boolean;
77
+ direction: "ltr" | "rtl";
77
78
  max: number;
79
+ overlap: number;
78
80
  shape: "circle" | "square";
79
81
  showStatus: boolean;
80
82
  showTooltip: boolean;
81
- 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