@extclp/vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 4.03 kB
Source Map (JSON)
{"version":3,"file":"time-ago.vue2.mjs","sources":["../../../components/time-ago/time-ago.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, toRef, watch } from 'vue'\n\nimport { useLocale, useNameHelper, useProps, useWordSpace } from '@vexip-ui/config'\nimport { format, toDate } from '@vexip-ui/utils'\nimport { computeTimeAgo, getId, subscribe, unsubscribe } from './helper'\nimport { timeAgoProps } from './props'\n\nimport type { Dateable } from '@vexip-ui/utils'\n\ndefineOptions({ name: 'TimeAgo' })\n\nconst _props = defineProps(timeAgoProps)\nconst props = useProps('timeAgo', _props, {\n locale: null,\n datetime: {\n default: () => Date.now(),\n static: true\n },\n interval: {\n default: false,\n validator: value => typeof value === 'boolean' || value >= 1\n },\n title: false,\n titleFormat: 'yyyy-MM-dd HH:mm:ss'\n})\n\nconst nh = useNameHelper('time-ago')\nconst datetime = toDateValue(props.datetime)\nconst locale = useLocale('timeAgo', toRef(props, 'locale'))\nconst wordSpace = useWordSpace()\nconst timeAgo = ref(computeTimeAgo(datetime, Date.now(), locale.value, wordSpace.value))\n\nconst id = getId()\nconst record = {\n datetime,\n timeAgo,\n locale,\n wordSpace,\n interval: parseInterval(props.interval),\n updated: Date.now()\n}\n\nconst currentTitle = computed(() => {\n if (!props.title) return undefined\n\n if (typeof props.title === 'string') return props.title\n\n return format(props.datetime, props.titleFormat)\n})\n\nsubscribe(id, record)\n\nwatch(\n () => props.datetime,\n value => {\n record.datetime = toDateValue(value)\n timeAgo.value = computeTimeAgo(datetime, Date.now(), locale.value, wordSpace.value)\n }\n)\nwatch(\n () => props.interval,\n value => {\n record.interval = parseInterval(value)\n }\n)\n\nonBeforeUnmount(() => {\n unsubscribe(id)\n})\n\nfunction parseInterval(interval: boolean | number) {\n return interval && (interval === true ? 1e4 : interval * 1000)\n}\n\nfunction toDateValue(value: Dateable) {\n if (typeof value === 'string') {\n value = value.replace(/-/g, '/')\n }\n\n return toDate(value)\n}\n\ndefineExpose({ timeAgo })\n</script>\n\n<template>\n <span :class=\"[nh.b(), props.inherit && nh.bm('inherit')]\" :title=\"currentTitle\">\n {{ timeAgo }}\n </span>\n</template>\n"],"names":["props","useProps","__props","value","nh","useNameHelper","datetime","toDateValue","locale","useLocale","toRef","wordSpace","useWordSpace","timeAgo","ref","computeTimeAgo","id","getId","record","parseInterval","currentTitle","computed","format","subscribe","watch","onBeforeUnmount","unsubscribe","interval","toDate","__expose"],"mappings":";;;;;;;;;;AAaM,UAAAA,IAAQC,EAAS,WADRC,GAC2B;AAAA,MACxC,QAAQ;AAAA,MACR,UAAU;AAAA,QACR,SAAS,MAAM,KAAK,IAAI;AAAA,QACxB,QAAQ;AAAA,MACV;AAAA,MACA,UAAU;AAAA,QACR,SAAS;AAAA,QACT,WAAW,CAAAC,MAAS,OAAOA,KAAU,aAAaA,KAAS;AAAA,MAC7D;AAAA,MACA,OAAO;AAAA,MACP,aAAa;AAAA,IAAA,CACd,GAEKC,IAAKC,EAAc,UAAU,GAC7BC,IAAWC,EAAYP,EAAM,QAAQ,GACrCQ,IAASC,EAAU,WAAWC,EAAMV,GAAO,QAAQ,CAAC,GACpDW,IAAYC,EAAa,GACzBC,IAAUC,EAAIC,EAAeT,GAAU,KAAK,IAAI,GAAGE,EAAO,OAAOG,EAAU,KAAK,CAAC,GAEjFK,IAAKC,EAAM,GACXC,IAAS;AAAA,MACb,UAAAZ;AAAA,MACA,SAAAO;AAAA,MACA,QAAAL;AAAA,MACA,WAAAG;AAAA,MACA,UAAUQ,EAAcnB,EAAM,QAAQ;AAAA,MACtC,SAAS,KAAK,IAAI;AAAA,IACpB,GAEMoB,IAAeC,EAAS,MAAM;AAC9B,UAACrB,EAAM;AAEX,eAAI,OAAOA,EAAM,SAAU,WAAiBA,EAAM,QAE3CsB,EAAOtB,EAAM,UAAUA,EAAM,WAAW;AAAA,IAAA,CAChD;AAED,IAAAuB,EAAUP,GAAIE,CAAM,GAEpBM;AAAA,MACE,MAAMxB,EAAM;AAAA,MACZ,CAASG,MAAA;AACA,QAAAe,EAAA,WAAWX,EAAYJ,CAAK,GAC3BU,EAAA,QAAQE,EAAeT,GAAU,KAAK,IAAO,GAAAE,EAAO,OAAOG,EAAU,KAAK;AAAA,MAAA;AAAA,IAEtF,GACAa;AAAA,MACE,MAAMxB,EAAM;AAAA,MACZ,CAASG,MAAA;AACA,QAAAe,EAAA,WAAWC,EAAchB,CAAK;AAAA,MAAA;AAAA,IAEzC,GAEAsB,EAAgB,MAAM;AACpB,MAAAC,EAAYV,CAAE;AAAA,IAAA,CACf;AAED,aAASG,EAAcQ,GAA4B;AACjD,aAAOA,MAAaA,MAAa,KAAO,MAAMA,IAAW;AAAA,IAAA;AAG3D,aAASpB,EAAYJ,GAAiB;AAChC,aAAA,OAAOA,KAAU,aACXA,IAAAA,EAAM,QAAQ,MAAM,GAAG,IAG1ByB,EAAOzB,CAAK;AAAA,IAAA;AAGR,WAAA0B,EAAA,EAAE,SAAAhB,GAAS;;;;;;"}