comic-plus
Version:
<p align="center"> <img width="200px" src="./logo.png"/> </p>
54 lines (53 loc) • 1.74 kB
JavaScript
;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
const vue = require("vue");
const core = require("@vueuse/core");
require("../style/countdown.css");
require("../../../utils/config.js");
const typescript = require("../../../utils/typescript.js");
const utils = require("./utils.js");
const main_props = require("./main.props.js");
const Countdown = vue.defineComponent({
name: "CuCountdown",
props: main_props.countdownProps,
emits: main_props.countdownEmits,
setup(props, { slots, emit }) {
const temptime = vue.ref(getTime(props.value) - Date.now());
const displayValue = vue.computed(() => utils.formatTime(temptime.value, props.format));
const { pause, resume } = core.useIntervalFn(() => {
const timestamp = getTime(props.value);
let diff = timestamp - Date.now();
if (diff <= 0) {
emit("finish");
pause();
}
temptime.value = diff <= 0 ? 0 : diff;
}, 30);
function getTime(time) {
if (typescript.isString(time)) {
if (isNaN(new Date(time).getTime())) {
throw "times is not legitimate";
}
}
return new Date(time).getTime();
}
vue.watch(
() => props.value,
() => {
resume();
},
{
immediate: true
}
);
return () => {
var _a, _b;
return vue.h("span", { class: "cu-countdown" }, [
((_a = slots.prefix) == null ? void 0 : _a.call(slots)) ?? props.prefix,
vue.h("span", { class: "cu-countdown_time" }, displayValue.value),
((_b = slots.suffix) == null ? void 0 : _b.call(slots)) ?? props.suffix
]);
};
}
});
exports.default = Countdown;