{"version":3,"file":"timeline.vue.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":["_resolveComponent","flex","_normalizeClass","_createElementBlock","_Fragment","_renderList","_openBlock","_normalizeStyle","showTimeOutside","_createCommentVNode","_createVNode","_createElementVNode","showTimeInside","_renderSlot","displayItems"],"mappings":"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"}