{"version":3,"file":"timeline.vue2.mjs","sources":["../../../../../../packages/components/timeline/src/timeline.vue"],"sourcesContent":["<template>\n\t<div class=\"to-timeline\" :flex=\"flex ? flex : null\" :class=\"getClass\">\n\t\t<div v-for=\"(item, index) in displayItems\" :key=\"index\" class=\"to-timeline-item\" :style=\"getItemStyle()\" @click=\"handleItemClick(item, index)\">\n\t\t\t<!-- 外部时间显示 -->\n\t\t\t<div v-if=\"showTimeOutside(item)\" class=\"to-timeline-datetime\">\n\t\t\t\t<div v-if=\"item.date\" class=\"to-timeline-date\">\n\t\t\t\t\t<div class=\"to-timeline-date-text\">{{ item.date }}</div>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"item.time\" class=\"to-timeline-time\">\n\t\t\t\t\t<div class=\"to-timeline-time-text\">{{ item.time }}</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<!-- 图标 -->\n\t\t\t<to-icon class=\"to-timeline-icon\" :value=\"item.icon\" :color=\"item.color\" :mode=\"item.mode\">\n\t\t\t\t{{ item.text }}\n\t\t\t</to-icon>\n\n\t\t\t<!-- 主内容区域 -->\n\t\t\t<div class=\"to-timeline-main\">\n\t\t\t\t<!-- 内部时间显示 -->\n\t\t\t\t<div v-if=\"showTimeInside(item)\" class=\"to-timeline-datetime\">\n\t\t\t\t\t<div v-if=\"item.date\" class=\"to-timeline-date\">\n\t\t\t\t\t\t<div class=\"to-timeline-date-text\">{{ item.date }}</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div v-if=\"item.time\" class=\"to-timeline-time\">\n\t\t\t\t\t\t<div class=\"to-timeline-time-text\">{{ item.time }}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- 内容区域 -->\n\t\t\t\t<div class=\"to-timeline-content\" :style=\"item.style\">\n\t\t\t\t\t<template v-if=\"item.content\">{{ item.content }}</template>\n\t\t\t\t\t<slot name=\"default\" :item=\"item\" :index=\"index\"></slot>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div v-if=\"index < displayItems.length - 1 || tail\" class=\"to-timeline-line\"></div>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType, watch, onMounted, nextTick } from 'vue'\nimport { ToIcon } from '../../icon'\nimport type { TimelineItem, TimelineTimePosition, TimelineDirection, TimelineAlign, TimelineMode } from './timeline'\n\nexport default defineComponent({\n\tname: 'ToTimeline',\n\tcomponents: {\n\t\tToIcon\n\t},\n\tprops: {\n\t\tflex: Boolean,\n\t\tdata: {\n\t\t\ttype: Array as PropType<TimelineItem[]>,\n\t\t\tdefault: () => []\n\t\t},\n\t\ttimePosition: {\n\t\t\ttype: String as PropType<TimelineTimePosition>,\n\t\t\tdefault: 'in',\n\t\t\tvalidator: (val: string) => ['in', 'out'].includes(val)\n\t\t},\n\t\tdir: {\n\t\t\ttype: String as PropType<TimelineDirection>,\n\t\t\tdefault: 'v',\n\t\t\tvalidator: (val: string) => ['v', 'h', ''].includes(val)\n\t\t},\n\t\tmode: {\n\t\t\ttype: String as PropType<TimelineMode>,\n\t\t\tdefault: ''\n\t\t},\n\t\talign: {\n\t\t\ttype: String as PropType<TimelineAlign>,\n\t\t\tdefault: 'left',\n\t\t\tvalidator: (val: string) => ['left', 'center', 'right'].includes(val)\n\t\t},\n\t\titemWidth: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: ''\n\t\t},\n\t\treverse: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\ttail: Boolean\n\t},\n\temits: ['click', 'item-rendered'],\n\tsetup(props, { emit }) {\n\t\t// 处理数据顺序\n\t\tconst displayItems = computed(() => {\n\t\t\tif (props.reverse) {\n\t\t\t\treturn [...props.data].reverse()\n\t\t\t}\n\t\t\treturn props.data\n\t\t})\n\n\t\t// 组件基础类名\n\t\tconst getClass = computed(() => {\n\t\t\tconst classArray = []\n\n\t\t\t// 布局类型\n\t\t\tif (props.dir === 'h') {\n\t\t\t\tclassArray.push('dir-h')\n\t\t\t}\n\n\t\t\t// 时间位置\n\t\t\tif (props.timePosition === 'out') {\n\t\t\t\tclassArray.push('time-position-out')\n\t\t\t}\n\n\t\t\t// 对齐方式\n\t\t\tif (props.align === 'center') {\n\t\t\t\tclassArray.push('align-center')\n\t\t\t} else if (props.align === 'right') {\n\t\t\t\tclassArray.push('align-right')\n\t\t\t}\n\n\t\t\t// 全局模式类\n\t\t\tif (props.mode) {\n\t\t\t\tclassArray.push(`mode-${props.mode}`)\n\t\t\t}\n\n\t\t\t// 是否含有 date\n\t\t\tif (props.data.some(item => item.date)) {\n\t\t\t\tclassArray.push(`has-date`)\n\t\t\t}\n\n\t\t\t// 是否含有 time\n\t\t\tif (props.data.some(item => item.time)) {\n\t\t\t\tclassArray.push(`has-time`)\n\t\t\t}\n\n\t\t\t// 是否设置 item-width\n\t\t\tif (props.itemWidth) {\n\t\t\t\tclassArray.push(`is-item-width`)\n\t\t\t}\n\n\t\t\treturn classArray\n\t\t})\n\n\t\t// 获取图标模式\n\t\tconst getIconMode = (item: TimelineItem) => {\n\t\t\t// 优先使用全局模式，如果未设置则使用项目自身模式\n\t\t\tif (props.mode) {\n\t\t\t\treturn props.mode\n\t\t\t}\n\t\t\treturn item.mode\n\t\t}\n\n\t\t// 获取内容样式\n\t\tconst getItemStyle = () => {\n\t\t\tconst style: Record<string, string> = {}\n\n\t\t\t// 处理宽度设置 - 仅在水平布局时有效\n\t\t\tif (props.dir === 'h' && props.itemWidth) {\n\t\t\t\tif (!isNaN(Number(props.itemWidth))) {\n\t\t\t\t\tstyle.width = props.itemWidth + 'em'\n\t\t\t\t} else {\n\t\t\t\t\tstyle.width = props.itemWidth.toString()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn style\n\t\t}\n\n\t\t// 判断是否显示外部时间\n\t\tconst showTimeOutside = (item: TimelineItem) => {\n\t\t\treturn props.timePosition === 'out' && (item.date || item.time)\n\t\t}\n\n\t\t// 判断是否显示内部时间\n\t\tconst showTimeInside = (item: TimelineItem) => {\n\t\t\treturn props.timePosition === 'in' && (item.date || item.time)\n\t\t}\n\n\t\t// 点击事件处理\n\t\tconst handleItemClick = (item: TimelineItem, index: number) => {\n\t\t\temit('click', item, index)\n\t\t}\n\n\t\t// 监听数据变化\n\t\twatch(\n\t\t\t() => props.data,\n\t\t\t() => {\n\t\t\t\tnextTick(() => {\n\t\t\t\t\tprops.data.forEach((_item, _index) => {\n\t\t\t\t\t\temit('item-rendered', _item, _index)\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t},\n\t\t\t{ immediate: false, deep: true }\n\t\t)\n\n\t\t// 初始化时触发渲染完成事件\n\t\tonMounted(() => {\n\t\t\tnextTick(() => {\n\t\t\t\tprops.data.forEach((_item, _index) => {\n\t\t\t\t\temit('item-rendered', _item, _index)\n\t\t\t\t})\n\t\t\t})\n\t\t})\n\n\t\treturn {\n\t\t\tdisplayItems,\n\t\t\tgetClass,\n\t\t\tgetIconMode,\n\t\t\tgetItemStyle,\n\t\t\tshowTimeOutside,\n\t\t\tshowTimeInside,\n\t\t\thandleItemClick\n\t\t}\n\t}\n})\n</script>\n"],"names":[],"mappings":"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"}