vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 4.21 kB
Source Map (JSON)
{"version":3,"file":"time-ago.vue2.cjs","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","__props","props","useProps","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","_createElementBlock","_normalizeClass","_unref","_hoisted_1"],"mappings":"6PAYA,MAAMA,EAASC,EACTC,EAAQC,EAAAA,SAAS,UAAWH,EAAQ,CACxC,OAAQ,KACR,SAAU,CACR,QAAS,IAAM,KAAK,IAAI,EACxB,OAAQ,EACV,EACA,SAAU,CACR,QAAS,GACT,UAAWI,GAAS,OAAOA,GAAU,WAAaA,GAAS,CAC7D,EACA,MAAO,GACP,YAAa,qBAAA,CACd,EAEKC,EAAKC,gBAAc,UAAU,EAC7BC,EAAWC,EAAYN,EAAM,QAAQ,EACrCO,EAASC,EAAAA,UAAU,UAAWC,EAAAA,MAAMT,EAAO,QAAQ,CAAC,EACpDU,EAAYC,EAAAA,aAAa,EACzBC,EAAUC,EAAAA,IAAIC,EAAA,eAAeT,EAAU,KAAK,IAAI,EAAGE,EAAO,MAAOG,EAAU,KAAK,CAAC,EAEjFK,EAAKC,EAAAA,MAAM,EACXC,EAAS,CACb,SAAAZ,EACA,QAAAO,EACA,OAAAL,EACA,UAAAG,EACA,SAAUQ,EAAclB,EAAM,QAAQ,EACtC,QAAS,KAAK,IAAI,CACpB,EAEMmB,EAAeC,EAAAA,SAAS,IAAM,CAC9B,GAACpB,EAAM,MAEX,OAAI,OAAOA,EAAM,OAAU,SAAiBA,EAAM,MAE3CqB,EAAO,OAAArB,EAAM,SAAUA,EAAM,WAAW,CAAA,CAChD,EAEDsB,EAAA,UAAUP,EAAIE,CAAM,EAEpBM,EAAA,MACE,IAAMvB,EAAM,SACHE,GAAA,CACAe,EAAA,SAAWX,EAAYJ,CAAK,EAC3BU,EAAA,MAAQE,iBAAeT,EAAU,KAAK,IAAO,EAAAE,EAAO,MAAOG,EAAU,KAAK,CAAA,CAEtF,EACAa,EAAA,MACE,IAAMvB,EAAM,SACHE,GAAA,CACAe,EAAA,SAAWC,EAAchB,CAAK,CAAA,CAEzC,EAEAsB,EAAAA,gBAAgB,IAAM,CACpBC,EAAAA,YAAYV,CAAE,CAAA,CACf,EAED,SAASG,EAAcQ,EAA4B,CACjD,OAAOA,IAAaA,IAAa,GAAO,IAAMA,EAAW,IAAA,CAG3D,SAASpB,EAAYJ,EAAiB,CAChC,OAAA,OAAOA,GAAU,WACXA,EAAAA,EAAM,QAAQ,KAAM,GAAG,GAG1ByB,EAAAA,OAAOzB,CAAK,CAAA,CAGR,OAAA0B,EAAA,CAAE,QAAAhB,EAAS,wBAItBiB,EAAA,mBAEO,OAAA,CAFA,MAAKC,EAAA,eAAA,CAAGC,EAAAA,MAAE5B,CAAA,EAAC,IAAK4B,EAAA,MAAK/B,CAAA,EAAC,SAAW+B,EAAAA,MAAE5B,CAAA,EAAC,GAAE,SAAA,CAAA,CAAA,EAAe,MAAOgB,EAAY,SAC1E,gBAAAP,EAAO,KAAA,EAAA,GAAAoB,CAAA"}