UNPKG

vue-typical

Version:

Vue Animated typing in ~400 bytes 🐡 of JavaScript.

2 lines (1 loc) 1.48 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vue")):"function"==typeof define&&define.amd?define(["exports","vue"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["vue-typical"]={},e.Vue)}(this,(function(e,t){"use strict";async function n(e,...t){for(const n of t)switch(typeof n){case"string":await o(e,n);break;case"number":await i(n);break;case"function":await n(e,...t);break;default:await n}}async function o(e,t){const n=function(e,[...t]){return[...e,NaN].findIndex(((e,n)=>t[n]!==e))}(e.textContent,t);await async function(e,t,n=60){for(const o of function*(e){for(const t of e)yield e=>requestAnimationFrame((()=>e.textContent=t))}(t))o(e),await i(n+n*(Math.random()-.5))}(e,[...r(e.textContent,n),...a(t,n)])}async function i(e){await new Promise((t=>setTimeout(t,e)))}function*a([...e],t=0,n=e.length){for(;t<n;)yield e.slice(0,++t).join("")}function*r([...e],t=0,n=e.length){for(;n>t;)yield e.slice(0,--n).join("")}const f=n;var u=t.defineComponent({name:"Typical",props:{steps:{type:Array,required:!0},wrapper:{type:String,default:"div"},loop:{type:Number,default:1}},render(){return t.h(this.wrapper,{ref:"myRef"})},setup:({steps:e,loop:o})=>{const i=t.ref(null);return t.onMounted((()=>{const t=i.value;o===1/0?n(t,...e,f):"number"==typeof o&&o>0?n(t,...Array(o).fill(e).flat()):n(t,...e)})),{myRef:i}}});e.VTypical=u,e.default=u,Object.defineProperty(e,"__esModule",{value:!0}),e[Symbol.toStringTag]="Module"}));