UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 5.88 kB
{"version":3,"file":"timeline-item.vue2.cjs","sources":["../../../components/timeline/timeline-item.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, inject, onBeforeUnmount, onMounted, onUpdated, reactive, ref, watch } from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { timelineItemProps } from './props'\nimport { TIMELINE_STATE, timelineItemTypes } from './symbol'\n\nimport type { ItemState } from './symbol'\n\ndefineOptions({ name: 'TimelineItem' })\n\nconst _props = defineProps(timelineItemProps)\nconst props = useProps('timelineItem', _props, {\n type: {\n default: 'primary',\n validator: value => timelineItemTypes.includes(value),\n },\n color: '',\n label: {\n default: null,\n static: true,\n },\n dashed: null,\n lineColor: null,\n spacing: null,\n})\n\ndefineSlots<{\n default: () => any,\n signal: () => any,\n line: () => any\n}>()\n\nconst timelineState = inject(TIMELINE_STATE, null)\n\nconst nh = useNameHelper('timeline')\nconst currentLabel = ref(props.label)\nconst content = ref<HTMLElement>()\n\nconst className = computed(() => {\n return {\n [nh.be('item')]: true,\n [nh.bem('item', props.type)]: timelineItemTypes.includes(props.type),\n }\n})\nconst itemStyle = computed(() => {\n const spacing = props.spacing || props.spacing === 0 ? props.spacing : timelineState?.spacing\n const style: Record<string, any> = {\n [nh.cv('item-span')]: typeof spacing === 'number' ? `${spacing}px` : spacing,\n }\n\n if (props.color) {\n style[nh.cv('pointer-color')] = props.color\n style[nh.cv('pointer-b-color')] = props.color\n }\n\n return style\n})\nconst lineStyle = computed(() => {\n const isDashed = props.dashed ?? timelineState?.dashed ?? false\n const color = props.lineColor ?? timelineState?.lineColor\n\n return {\n borderInlineStartStyle: isDashed ? ('dashed' as const) : undefined,\n borderInlineStartColor: color,\n }\n})\n\ndefineExpose({ currentLabel, content })\n\nif (timelineState) {\n const state: ItemState = reactive({\n label: currentLabel,\n index: 0,\n total: 0,\n height: 0,\n })\n\n timelineState.increaseItem(state)\n\n watch(() => timelineState.alternate, updateHeight)\n watch(() => timelineState.horizontal, updateHeight)\n\n onMounted(updateHeight)\n onUpdated(updateHeight)\n\n onBeforeUnmount(() => {\n timelineState.decreaseItem(state)\n })\n\n function updateHeight() {\n requestAnimationFrame(() => {\n if (timelineState?.horizontal && content.value) {\n state.height = content.value.scrollHeight\n }\n })\n }\n}\n\nfunction handleSignalClick() {\n emitEvent(props.onSignalClick, currentLabel.value)\n timelineState?.handleSignalClick(currentLabel.value)\n}\n</script>\n\n<template>\n <div :class=\"className\" :style=\"itemStyle\">\n <div :class=\"nh.be('signal')\" @click=\"handleSignalClick\">\n <slot name=\"signal\">\n <div :class=\"nh.be('pointer')\"></div>\n </slot>\n </div>\n <div :class=\"nh.be('line')\" :style=\"lineStyle\">\n <slot name=\"line\"></slot>\n </div>\n <div ref=\"content\" :class=\"nh.be('content')\">\n <slot></slot>\n </div>\n </div>\n</template>\n"],"names":["_props","__props","props","useProps","value","timelineItemTypes","timelineState","inject","TIMELINE_STATE","nh","useNameHelper","currentLabel","ref","content","className","computed","itemStyle","spacing","style","lineStyle","isDashed","color","__expose","updateHeight","state","reactive","watch","onMounted","onUpdated","onBeforeUnmount","handleSignalClick","emitEvent","_createElementBlock","_createElementVNode","_normalizeClass","_unref","_renderSlot","_ctx"],"mappings":"mOAWA,MAAMA,EAASC,EACTC,EAAQC,EAAAA,SAAS,eAAgBH,EAAQ,CAC7C,KAAM,CACJ,QAAS,UACT,UAAWI,GAASC,EAAkB,kBAAA,SAASD,CAAK,CACtD,EACA,MAAO,GACP,MAAO,CACL,QAAS,KACT,OAAQ,EACV,EACA,OAAQ,KACR,UAAW,KACX,QAAS,IAAA,CACV,EAQKE,EAAgBC,EAAAA,OAAOC,EAAA,eAAgB,IAAI,EAE3CC,EAAKC,gBAAc,UAAU,EAC7BC,EAAeC,EAAAA,IAAIV,EAAM,KAAK,EAC9BW,EAAUD,EAAAA,IAAiB,EAE3BE,EAAYC,EAAAA,SAAS,KAClB,CACL,CAACN,EAAG,GAAG,MAAM,CAAC,EAAG,GACjB,CAACA,EAAG,IAAI,OAAQP,EAAM,IAAI,CAAC,EAAGG,EAAA,kBAAkB,SAASH,EAAM,IAAI,CACrE,EACD,EACKc,EAAYD,EAAAA,SAAS,IAAM,CACzB,MAAAE,EAAUf,EAAM,SAAWA,EAAM,UAAY,EAAIA,EAAM,QAAUI,GAAA,YAAAA,EAAe,QAChFY,EAA6B,CACjC,CAACT,EAAG,GAAG,WAAW,CAAC,EAAG,OAAOQ,GAAY,SAAW,GAAGA,CAAO,KAAOA,CACvE,EAEA,OAAIf,EAAM,QACRgB,EAAMT,EAAG,GAAG,eAAe,CAAC,EAAIP,EAAM,MACtCgB,EAAMT,EAAG,GAAG,iBAAiB,CAAC,EAAIP,EAAM,OAGnCgB,CAAA,CACR,EACKC,EAAYJ,EAAAA,SAAS,IAAM,CAC/B,MAAMK,EAAWlB,EAAM,SAAUI,GAAA,YAAAA,EAAe,SAAU,GACpDe,EAAQnB,EAAM,YAAaI,GAAA,YAAAA,EAAe,WAEzC,MAAA,CACL,uBAAwBc,EAAY,SAAqB,OACzD,uBAAwBC,CAC1B,CAAA,CACD,EAID,GAFaC,EAAA,CAAE,aAAAX,EAAc,QAAAE,EAAS,EAElCP,EAAe,CAoBjB,IAASiB,EAAT,UAAwB,CACtB,sBAAsB,IAAM,CACtBjB,GAAA,MAAAA,EAAe,YAAcO,EAAQ,QACjCW,EAAA,OAASX,EAAQ,MAAM,aAC/B,CACD,CACH,EAzBA,MAAMW,EAAmBC,EAAAA,SAAS,CAChC,MAAOd,EACP,MAAO,EACP,MAAO,EACP,OAAQ,CAAA,CACT,EAEDL,EAAc,aAAakB,CAAK,EAE1BE,EAAAA,MAAA,IAAMpB,EAAc,UAAWiB,CAAY,EAC3CG,EAAAA,MAAA,IAAMpB,EAAc,WAAYiB,CAAY,EAElDI,EAAAA,UAAUJ,CAAY,EACtBK,EAAAA,UAAUL,CAAY,EAEtBM,EAAAA,gBAAgB,IAAM,CACpBvB,EAAc,aAAakB,CAAK,CAAA,CACjC,CAAA,CAWH,SAASM,GAAoB,CACjBC,EAAAA,UAAA7B,EAAM,cAAeS,EAAa,KAAK,EAClCL,GAAA,MAAAA,EAAA,kBAAkBK,EAAa,MAAK,6BAKnDqB,EAAA,mBAYM,MAAA,CAZA,uBAAOlB,EAAS,KAAA,EAAG,uBAAOE,EAAS,KAAA,CAAA,GACvCiB,EAAAA,mBAIM,MAAA,CAJA,MAAKC,EAAE,eAAAC,EAAA,MAAE1B,CAAA,EAAC,GAAE,QAAA,CAAA,EAAa,QAAOqB,CAAA,GACpCM,EAAAA,WAEOC,qBAFP,IAEO,CADLJ,EAAAA,mBAAqC,MAAA,CAA/B,MAAKC,EAAE,eAAAC,EAAA,MAAE1B,CAAA,EAAC,GAAE,SAAA,CAAA,iBAGtBwB,EAAAA,mBAEM,MAAA,CAFA,MAAKC,EAAE,eAAAC,EAAA,MAAE1B,CAAA,EAAC,GAAE,MAAA,CAAA,EAAW,uBAAOU,EAAS,KAAA,CAAA,GAC3CiB,aAAyBC,EAAA,OAAA,MAAA,MAE3BJ,EAAAA,mBAEM,MAAA,SAFG,UAAJ,IAAIpB,EAAW,MAAKqB,EAAE,eAAAC,EAAA,MAAE1B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,GAC9B2B,aAAaC,EAAA,OAAA,SAAA,CAAA"}