element-plus
Version:
A Component Library for Vue 3
1 lines • 4.01 kB
Source Map (JSON)
{"version":3,"file":"countdown2.mjs","sources":["../../../../../../packages/components/countdown/src/countdown.vue"],"sourcesContent":["<template>\n <el-statistic\n :value=\"rawValue\"\n :title=\"title\"\n :prefix=\"prefix\"\n :suffix=\"suffix\"\n :value-style=\"valueStyle\"\n :formatter=\"formatter\"\n >\n <template v-for=\"(_, name) in $slots\" #[name]>\n <slot :name=\"name\" />\n </template>\n </el-statistic>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { ElStatistic } from '@element-plus/components/statistic'\nimport { cAF, rAF } from '@element-plus/utils'\nimport { CHANGE_EVENT } from '@element-plus/constants'\nimport { countdownEmits, countdownProps } from './countdown'\nimport { formatTime, getTime } from './utils'\n\ndefineOptions({\n name: 'ElCountdown',\n})\n\nconst props = defineProps(countdownProps)\nconst emit = defineEmits(countdownEmits)\n\nlet timer: ReturnType<typeof rAF> | undefined\nconst rawValue = ref<number>(0)\nconst displayValue = computed(() => formatTime(rawValue.value, props.format))\n\nconst formatter = (val: number) => formatTime(val, props.format)\n\nconst stopTimer = () => {\n if (timer) {\n cAF(timer)\n timer = undefined\n }\n}\n\nconst startTimer = () => {\n const timestamp = getTime(props.value)\n const frameFunc = () => {\n let diff = timestamp - Date.now()\n emit(CHANGE_EVENT, diff)\n if (diff <= 0) {\n diff = 0\n stopTimer()\n emit('finish')\n } else {\n timer = rAF(frameFunc)\n }\n rawValue.value = diff\n }\n timer = rAF(frameFunc)\n}\n\nonMounted(() => {\n rawValue.value = getTime(props.value) - Date.now()\n\n watch(\n () => [props.value, props.format],\n () => {\n stopTimer()\n startTimer()\n },\n {\n immediate: true,\n }\n )\n})\n\nonBeforeUnmount(() => {\n stopTimer()\n})\n\ndefineExpose({\n /**\n * @description current display value\n */\n displayValue,\n})\n</script>\n"],"names":["_createBlock","_unref","title","prefix","suffix","valueStyle","_createSlots","$slots","_renderSlot"],"mappings":";;;;;;;;;;;;;;;;AA2BA,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AACd,IAAA,MAAM,IAAO,GAAA,MAAA,CAAA;AAET,IAAA,IAAA,KAAA,CAAA;AACE,IAAA,MAAA,QAAA,GAAW,IAAY,CAAC,CAAA,CAAA;AACxB,IAAA,MAAA,YAAA,GAAe,SAAS,MAAM,UAAA,CAAW,SAAS,KAAO,EAAA,KAAA,CAAM,MAAM,CAAC,CAAA,CAAA;AAE5E,IAAA,MAAM,YAAY,CAAC,GAAA,KAAgB,UAAW,CAAA,GAAA,EAAK,MAAM,MAAM,CAAA,CAAA;AAE/D,IAAA,MAAM,YAAY,MAAM;AACtB,MAAA,IAAI,KAAO,EAAA;AACT,QAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AACD,QAAA,KAAA,GAAA,KAAA,CAAA,CAAA;AAAA,OACV;AAAA,KACF,CAAA;AAEA,IAAA,MAAM,aAAa,MAAM;AACjB,MAAA,MAAA,SAAA,GAAY,OAAQ,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AACrC,MAAA,MAAM,YAAY,MAAM;AAClB,QAAA,IAAA,IAAA,GAAO,SAAY,GAAA,IAAA,CAAK,GAAI,EAAA,CAAA;AAChC,QAAA,IAAA,CAAK,cAAc,IAAI,CAAA,CAAA;AACvB,QAAA,IAAI,QAAQ,CAAG,EAAA;AACN,UAAA,IAAA,GAAA,CAAA,CAAA;AACG,UAAA,SAAA,EAAA,CAAA;AACV,UAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AAAA,SACR,MAAA;AACL,UAAA,KAAA,GAAQ,IAAI,SAAS,CAAA,CAAA;AAAA,SACvB;AACA,QAAA,QAAA,CAAS,KAAQ,GAAA,IAAA,CAAA;AAAA,OACnB,CAAA;AACA,MAAA,KAAA,GAAQ,IAAI,SAAS,CAAA,CAAA;AAAA,KACvB,CAAA;AAEA,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,QAAA,CAAS,QAAQ,OAAQ,CAAA,KAAA,CAAM,KAAK,CAAA,GAAI,KAAK,GAAI,EAAA,CAAA;AAEjD,MAAA,KAAA;AAAA,QACE,MAAM,CAAC,KAAM,CAAA,KAAA,EAAO,MAAM,MAAM,CAAA;AAAA,QAChC,MAAM;AACM,UAAA,SAAA,EAAA,CAAA;AACC,UAAA,UAAA,EAAA,CAAA;AAAA,SACb;AAAA,QACA;AAAA,UACE,SAAW,EAAA,IAAA;AAAA,SACb;AAAA,OACF,CAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAA,eAAA,CAAgB,MAAM;AACV,MAAA,SAAA,EAAA,CAAA;AAAA,KACX,CAAA,CAAA;AAEY,IAAA,QAAA,CAAA;AAAA,MAIX,YAAA;AAAA,KACD,CAAA,CAAA;;0BAnFCA,WAWe,CAAAC,KAAA,CAAA,WAAA,CAAA,EAAA;AAAA,QAVZ,OAAO,QAAA,CAAA,KAAA;AAAA,QACP,OAAOC,IAAAA,CAAAA,KAAAA;AAAAA,QACP,QAAQC,IAAAA,CAAAA,MAAAA;AAAAA,QACR,QAAQC,IAAAA,CAAAA,MAAAA;AAAAA,QACR,eAAaC,IAAAA,CAAAA,UAAAA;AAAAA,QACb,SAAA;AAAA,SAAAC,WAAA,CAAA;AAAA;;kBAE6BC,CAAAA,IAAAA,CAAM,MAAA,EAAA,CAAlB,GAAG,IAAI,KAAA;;;wBACvB,MAAqB;AAAA,cAArBC,UAAA,CAAqB,aAAR,IAAI,CAAA;AAAA,aAAA,CAAA;AAAA;;;;;;;;;;"}