light-odometer 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.d.ts +29 -0
- package/dist/main.js +1 -1
- package/package.json +1 -1
package/dist/main.d.ts
CHANGED
|
@@ -21,6 +21,8 @@ interface LightOdometerGlobalOptions {
|
|
|
21
21
|
*/
|
|
22
22
|
interface LightOdometerOptions {
|
|
23
23
|
el: HTMLElement;
|
|
24
|
+
/** Optional identifier for this instance; propagated in event details */
|
|
25
|
+
id?: string | number;
|
|
24
26
|
value?: string | number | null;
|
|
25
27
|
format?: string;
|
|
26
28
|
duration?: number;
|
|
@@ -29,6 +31,7 @@ interface LightOdometerOptions {
|
|
|
29
31
|
animation?: "count" | "slide";
|
|
30
32
|
formatFunction?: (value: number) => string;
|
|
31
33
|
}
|
|
34
|
+
type LightOdometerEventName = "odometerstart" | "odometerdone";
|
|
32
35
|
/**
|
|
33
36
|
* FormatObject interface
|
|
34
37
|
* @property {string} repeating - The repeating part of the format. (i.e. '(,ddd)')
|
|
@@ -52,6 +55,7 @@ declare global {
|
|
|
52
55
|
//#region src/core/odometer.d.ts
|
|
53
56
|
declare class LightOdometer {
|
|
54
57
|
static options: LightOdometerGlobalOptions;
|
|
58
|
+
private _isAnimating;
|
|
55
59
|
options: LightOdometerOptions;
|
|
56
60
|
el: HTMLElement;
|
|
57
61
|
value: number;
|
|
@@ -61,6 +65,8 @@ declare class LightOdometer {
|
|
|
61
65
|
transitionEndBound: boolean;
|
|
62
66
|
destroyed: boolean;
|
|
63
67
|
format: FormatObject;
|
|
68
|
+
/** Readonly flag indicating whether this instance is currently animating */
|
|
69
|
+
get isAnimating(): Readonly<boolean>;
|
|
64
70
|
MAX_VALUES: number;
|
|
65
71
|
digits: HTMLElement[];
|
|
66
72
|
ribbons: Record<number, HTMLElement>;
|
|
@@ -238,6 +244,29 @@ declare class LightOdometer {
|
|
|
238
244
|
*/
|
|
239
245
|
static init(): LightOdometer[];
|
|
240
246
|
/**
|
|
247
|
+
* Mutate this instance's options on-the-fly.
|
|
248
|
+
* Recomputes timing fields and applies changes immediately.
|
|
249
|
+
* If a new value is provided, it triggers update() with the new configuration.
|
|
250
|
+
*/
|
|
251
|
+
setOptions(newOptions: Partial<LightOdometerOptions>): void;
|
|
252
|
+
/**
|
|
253
|
+
* Update global default options at runtime. Does not retroactively affect existing instances.
|
|
254
|
+
*/
|
|
255
|
+
static setGlobalOptions(newOptions: Partial<LightOdometerGlobalOptions>): void;
|
|
256
|
+
/** Subscribe to odometer events ("odometerstart" | "odometerdone") for this instance */
|
|
257
|
+
on(event: LightOdometerEventName, handler: EventListener): void;
|
|
258
|
+
/** Unsubscribe from odometer events for this instance */
|
|
259
|
+
off(event: LightOdometerEventName, handler: EventListener): void;
|
|
260
|
+
/**
|
|
261
|
+
* Get a shallow copy snapshot of this instance's current options.
|
|
262
|
+
* Mutating the returned object will not affect the instance.
|
|
263
|
+
*/
|
|
264
|
+
getOptions(): Readonly<LightOdometerOptions>;
|
|
265
|
+
/**
|
|
266
|
+
* Get a shallow copy snapshot of global default options.
|
|
267
|
+
*/
|
|
268
|
+
static getGlobalOptions(): Readonly<LightOdometerGlobalOptions>;
|
|
269
|
+
/**
|
|
241
270
|
* Animate to a value exactly once and then disconnect listeners/observers.
|
|
242
271
|
* Useful for static numbers that only animate on first reveal.
|
|
243
272
|
*/
|
package/dist/main.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=/^\(?([^)]*)\)?(?:(.)(d+))?$/,t=2e3;function n(e){"@babel/helpers - typeof";return n=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},n(e)}function r(e,t){if(n(e)!=`object`||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var i=r.call(e,t||`default`);if(n(i)!=`object`)return i;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function i(e){var t=r(e,`string`);return n(t)==`symbol`?t:t+``}function a(e,t,n){return(t=i(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?o(Object(n),!0).forEach(function(t){a(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function c(e){let t=document.createElement(`div`);if(t.innerHTML=e,!(t.firstElementChild instanceof HTMLElement))throw Error(`Invalid HTML: No valid root element found.`);return t.firstElementChild}function l(e,t){let n=t.split(` `);for(let t of n)e.classList.remove(t);return e.className}function u(e,t){let n=t.split(` `);for(let t of n)t&&e.classList.add(t);return e.className}function d(e,t){let n=new CustomEvent(t,{bubbles:!0,cancelable:!0});e.dispatchEvent(n)}function f(){return typeof performance<`u`&&typeof performance.now==`function`?performance.now():Date.now()}function p(e,t){return t!=null||(t=0),t?(e*=10**t,e+=.5,e=Math.floor(e),e/=10**t):Math.round(e)}function m(e){return e<0?Math.ceil(e):Math.floor(e)}function h(){return typeof window<`u`&&typeof document<`u`}function g(e){return h()&&typeof requestAnimationFrame==`function`?requestAnimationFrame(e):setTimeout(()=>e(f()),16)}function _(e){e!=null&&(h()&&typeof cancelAnimationFrame==`function`&&typeof e==`number`?cancelAnimationFrame(e):clearTimeout(e))}function v(e){h()&&(document.readyState===`complete`||document.readyState===`interactive`?setTimeout(e,0):document.addEventListener(`DOMContentLoaded`,e,{once:!0}))}function y(e){h()&&setTimeout(()=>{window.odometerOptions&&(e.options=s(s({},e.options),window.odometerOptions))},0)}function b(e){v(()=>{e.options.auto!==!1&&e.init()})}var x,S=class n{constructor(e){var r,i,o,c;if(a(this,`options`,void 0),a(this,`el`,void 0),a(this,`value`,0),a(this,`inside`,void 0),a(this,`observer`,void 0),a(this,`watchMutations`,!1),a(this,`transitionEndBound`,!1),a(this,`destroyed`,!1),a(this,`format`,{repeating:``,precision:0}),a(this,`MAX_VALUES`,void 0),a(this,`digits`,[]),a(this,`ribbons`,{}),a(this,`_rafId`,void 0),a(this,`_countRafId`,void 0),a(this,`_msPerFrame`,void 0),a(this,`_countMsPerFrame`,void 0),a(this,`_onTransitionEnd`,void 0),this.options=e,this.el=this.options.el,this.el.odometer){var l,u,d;let e=this.el.odometer;e.options=s(s({},e.options),this.options),(l=e.options).duration!=null||(l.duration=t);let n=(u=e.options.framerate)==null?30:u,r=(d=e.options.countFramerate)==null?20:d;return e._msPerFrame=1e3/n,e._countMsPerFrame=1e3/r,e.MAX_VALUES=e.options.duration/e._msPerFrame/2|0,e.resetFormat(),this.options.value==null?h()&&e.render():e.update(this.options.value),e}this.el.odometer=this,this.options=s(s({},n.options),this.options),(r=this.options).duration!=null||(r.duration=t);let f=(i=this.options.framerate)==null?30:i,p=(o=this.options.countFramerate)==null?20:o;this._msPerFrame=1e3/f,this._countMsPerFrame=1e3/p,this.MAX_VALUES=this.options.duration/this._msPerFrame/2|0,this.resetFormat(),this.value=this.cleanValue((c=this.options.value)==null?``:c),h()&&(this.renderInside(),this.render());try{for(let e of[`innerHTML`,`innerText`,`textContent`])Object.defineProperty(this.el,e,{get:()=>{if(e===`innerHTML`){var t,n;return(t=(n=this.inside)==null?void 0:n.outerHTML)==null?``:t}else{var r,i,a,o;return(r=(i=(a=this.inside)==null?void 0:a.innerText)==null?(o=this.inside)==null?void 0:o.textContent:i)==null?``:r}},set:e=>this.update(e)})}catch(e){h()&&this.watchForMutations()}}renderInside(){h()&&(this.inside=document.createElement(`div`),this.inside.className=`odometer-inside`,this.el.textContent=``,this.el.appendChild(this.inside))}watchForMutations(){try{this.observer!=null||(this.observer=new MutationObserver(e=>{let t=this.el.innerText||``;this.renderInside(),this.render(this.value),this.update(t)})),this.watchMutations=!0,this.startWatchingMutations()}catch(e){}}startWatchingMutations(){if(this.watchMutations&&h()){var e;(e=this.observer)==null||e.observe(this.el,{childList:!0})}}stopWatchingMutations(){var e;(e=this.observer)==null||e.disconnect()}cleanValue(e){if(typeof e==`string`){var t;e=e.replace((t=this.format.radix)==null?`.`:t,`<radix>`),e=e.replace(/[.,\s\u00A0\u202F]/g,``),e=e.replace(`<radix>`,`.`),e=parseFloat(e)||0}return p(e,this.format.precision)}bindTransitionEnd(){if(this.transitionEndBound)return;this.transitionEndBound=!0;let e=!1;this._onTransitionEnd=()=>e?!0:(e=!0,setTimeout(()=>{this.render(),e=!1,d(this.el,`odometerdone`)},0),!0),this.el.addEventListener(`transitionend`,this._onTransitionEnd,!1)}resetFormat(){var t;let n=(t=this.options.format)==null?`(,ddd).dd`:t;n=n||`d`;let r=e.exec(n);if(!r)throw Error(`LightOdometer: Unparsable digit format`);let[i,a,o,s]=r,c=(s==null?void 0:s.length)||0;this.format={repeating:a,radix:o,precision:c}}render(e){var n;if(h()){e!=null||(e=this.value),this.stopWatchingMutations(),this.resetFormat(),this.inside.textContent=``;for(let e of Array.from(this.el.classList))/^odometer(-|$)/.test(e)&&this.el.classList.remove(e);this.el.classList.add(`odometer`,`odometer-auto-theme`),this.el.style.setProperty(`--odometer-duration`,`${(n=this.options.duration)==null?t:n}ms`),this.ribbons={},this.formatDigits(e),this.startWatchingMutations()}}formatDigits(e){if(this.digits=[],this.options.formatFunction){let t=this.options.formatFunction(e);for(let e of t.split(``).toReversed())if(/\d/.test(e)){let t=this.renderDigit();t.querySelector(`.odometer-value`).textContent=e,this.digits.push(t),this.insertDigit(t)}else this.addSpacer(e)}else{let t=this.preservePrecision(e),n=!this.format.precision;for(let e of t.split(``).toReversed())e===`.`&&(n=!0),this.addDigit(e,n)}}preservePrecision(e){let t=e.toString();if(this.format.precision){let e=t.split(`.`);e.length===1&&(t+=`.`,e[1]=``);for(let n=0;n<this.format.precision;n++)e[1][n]||(t+=`0`)}return t}update(e){if(!h())return this.value=this.cleanValue(e),this.value;e=this.cleanValue(e);let t=e-this.value;return t?(l(this.el,`odometer-animating-up odometer-animating-down odometer-animating`),t>0?u(this.el,`odometer-animating-up`):u(this.el,`odometer-animating-down`),this.stopWatchingMutations(),this.animate(e),this.startWatchingMutations(),setTimeout(()=>{this.el.offsetHeight,u(this.el,`odometer-animating`)},0),this.value=e,this.value):this.value}renderDigit(){return c(`<span class="odometer-digit"><span class="odometer-digit-spacer">8</span><span class="odometer-digit-inner"><span class="odometer-ribbon"><span class="odometer-ribbon-inner"><span class="odometer-value"></span></span></span></span></span>`)}insertDigit(e,t){return t?this.inside.insertBefore(e,t):this.inside.children.length?this.inside.insertBefore(e,this.inside.children[0]):this.inside.appendChild(e)}addSpacer(e,t,n){let r=c(`<span class="odometer-formatting-mark"></span>`);return r.textContent=e,n&&u(r,n),this.insertDigit(r,t)}addDigit(e,t){if(t!=null||(t=!0),e===`-`)return this.addSpacer(e,null,`odometer-negation-mark`);if(e===`.`){var n;return this.addSpacer((n=this.format.radix)==null?`.`:n,null,`odometer-radix-mark`)}if(t){let e=!1;for(;;){if(!this.format.repeating.length){if(e)throw Error(`Bad odometer format without digits`);this.resetFormat(),e=!0}let t=this.format.repeating[this.format.repeating.length-1];if(this.format.repeating=this.format.repeating.substring(0,this.format.repeating.length-1),t===`d`)break;this.addSpacer(t)}}let r=this.renderDigit(),i=r.querySelector(`.odometer-value`);return i.textContent=e,this.digits.push(r),this.insertDigit(r)}animate(e){this.options.animation===`count`?this.animateCount(e):this.animateSlide(e)}animateCount(e){if(!h())return;let t=e-this.value;if(!t)return;let n=f(),r=n,i=this.value,a=()=>{if(f()-n>(this.options.duration||0)){this.value=e,this.render(),d(this.el,`odometerdone`);return}let o=f()-r;if(o>this._countMsPerFrame){r=f();let e=o/(this.options.duration||0),n=t*e;i+=n,this.render(Math.round(i))}this._countRafId=g(a)};this._countRafId=g(a)}getDigitCount(...e){for(let t=0;t<e.length;t++)e[t]=Math.abs(e[t]);let t=Math.max(...e);return Math.ceil(Math.log(t+1)/Math.log(10))}getFractionalDigitCount(...e){let t=/^-?\d*\.(\d*?)0*$/;for(let n=0;n<e.length;n++){let r=e[n].toString(),i=t.exec(r);e[n]=i?i[1].length:0}return Math.max(...e)}resetDigits(){this.digits=[],this.ribbons={},this.inside.textContent=``,this.resetFormat()}createRange(e,t,n){let r=e<t,i=Math.abs(t-e)+(n?1:0);return Array.from({length:i},(t,n)=>r?e+n:e-n)}animateSlide(e){if(!h())return;let t=this.value,n=this.format.precision;n&&(e*=10**n,t*=10**n);let r=e-t;if(!r)return;this.bindTransitionEnd();let i=[],a=this.getDigitCount(t,e),o=0,s=t;for(let n=0;n<a;n++){s=m(t/10**(a-n-1));let r=m(e/10**(a-n-1)),c=r-s,l;if(Math.abs(c)>this.MAX_VALUES){l=[];let e=this.MAX_VALUES*(1+o*.5),t=c/e,n=s;for(;c>0&&n<r||c<0&&n>r;)l.push(Math.round(n)),n+=t;l[l.length-1]!==r&&l.push(r),o++}else l=this.createRange(s,r,!0);for(let e=0;e<l.length;e++)l[e]=Math.abs(l[e]%10);i.push(l)}this.resetDigits();let c=i.toReversed();for(let e=0;e<c.length;e++){let t=c[e];if(this.digits[e]||this.addDigit(` `,e>=n),this.ribbons[e]===void 0){let t=this.digits[e].querySelector(`.odometer-ribbon-inner`);t&&(this.ribbons[e]=t)}this.ribbons[e].textContent=``,r<0&&(t=t.toReversed());for(let n=0;n<t.length;n++){let r=t[n],i=document.createElement(`div`);i.className=`odometer-value`,i.textContent=r.toString(),this.ribbons[e].appendChild(i),n===t.length-1&&u(i,`odometer-last-value`),n===0&&u(i,`odometer-first-value`)}}s<0&&this.addDigit(`-`);let l=this.inside.querySelector(`.odometer-radix-mark`);if(l&&l.parentNode.removeChild(l),n){var d;this.addSpacer((d=this.format.radix)==null?`.`:d,this.digits[n-1],`odometer-radix-mark`)}}static init(){if(!h())return[];let e=document.querySelectorAll(n.options.selector||`.odometer`);return Array.from(e,e=>{var t;return e.odometer=new n({el:e,value:(t=e.innerText)==null?e.textContent:t})})}animateOnceAndDisconnect(e){var n;e!=null&&this.update(e);let r=()=>this.disconnect(),i=e=>{this.el.removeEventListener(`odometerdone`,i),r()};this.el.addEventListener(`odometerdone`,i,{once:!0}),setTimeout(r,((n=this.options.duration)==null?t:n)+100)}disconnect(){this.destroyed||(this.stopWatchingMutations(),_(this._rafId),_(this._countRafId),this._onTransitionEnd&&(this.el.removeEventListener(`transitionend`,this._onTransitionEnd),this._onTransitionEnd=void 0),this.transitionEndBound=!1,this.destroyed=!0)}};a(S,`options`,typeof window<`u`?(x=window.odometerOptions)==null?{}:x:{}),y(S),b(S);var C=S;export{C as default};
|
|
1
|
+
const e=/^\(?([^)]*)\)?(?:(.)(d+))?$/,t=2e3;function n(e){"@babel/helpers - typeof";return n=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},n(e)}function r(e,t){if(n(e)!=`object`||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var i=r.call(e,t||`default`);if(n(i)!=`object`)return i;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function i(e){var t=r(e,`string`);return n(t)==`symbol`?t:t+``}function a(e,t,n){return(t=i(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?o(Object(n),!0).forEach(function(t){a(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function c(e){let t=document.createElement(`div`);if(t.innerHTML=e,!(t.firstElementChild instanceof HTMLElement))throw Error(`Invalid HTML: No valid root element found.`);return t.firstElementChild}function l(e,t){let n=t.split(` `);for(let t of n)e.classList.remove(t);return e.className}function u(e,t){let n=t.split(` `);for(let t of n)t&&e.classList.add(t);return e.className}function d(e,t,n){let r=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(r)}function f(){return typeof performance<`u`&&typeof performance.now==`function`?performance.now():Date.now()}function p(e,t){return t!=null||(t=0),t?(e*=10**t,e+=.5,e=Math.floor(e),e/=10**t):Math.round(e)}function m(e){return e<0?Math.ceil(e):Math.floor(e)}function h(){return typeof window<`u`&&typeof document<`u`}function g(e){return h()&&typeof requestAnimationFrame==`function`?requestAnimationFrame(e):setTimeout(()=>e(f()),16)}function _(e){e!=null&&(h()&&typeof cancelAnimationFrame==`function`&&typeof e==`number`?cancelAnimationFrame(e):clearTimeout(e))}function v(e){h()&&(document.readyState===`complete`||document.readyState===`interactive`?setTimeout(e,0):document.addEventListener(`DOMContentLoaded`,e,{once:!0}))}function y(e){h()&&setTimeout(()=>{window.odometerOptions&&(e.options=s(s({},e.options),window.odometerOptions))},0)}function b(e){v(()=>{e.options.auto!==!1&&e.init()})}var x,S=class n{get isAnimating(){return this._isAnimating}constructor(e){var r,i,o,c;if(a(this,`_isAnimating`,!1),a(this,`options`,void 0),a(this,`el`,void 0),a(this,`value`,0),a(this,`inside`,void 0),a(this,`observer`,void 0),a(this,`watchMutations`,!1),a(this,`transitionEndBound`,!1),a(this,`destroyed`,!1),a(this,`format`,{repeating:``,precision:0}),a(this,`MAX_VALUES`,void 0),a(this,`digits`,[]),a(this,`ribbons`,{}),a(this,`_rafId`,void 0),a(this,`_countRafId`,void 0),a(this,`_msPerFrame`,void 0),a(this,`_countMsPerFrame`,void 0),a(this,`_onTransitionEnd`,void 0),this.options=e,this.el=this.options.el,this.el.odometer){var l,u,d;let e=this.el.odometer;e.options=s(s({},e.options),this.options),(l=e.options).duration!=null||(l.duration=t);let n=(u=e.options.framerate)==null?30:u,r=(d=e.options.countFramerate)==null?20:d;return e._msPerFrame=1e3/n,e._countMsPerFrame=1e3/r,e.MAX_VALUES=e.options.duration/e._msPerFrame/2|0,e.resetFormat(),this.options.value==null?h()&&e.render():e.update(this.options.value),e}this.el.odometer=this,this.options=s(s({},n.options),this.options),(r=this.options).duration!=null||(r.duration=t);let f=(i=this.options.framerate)==null?30:i,p=(o=this.options.countFramerate)==null?20:o;this._msPerFrame=1e3/f,this._countMsPerFrame=1e3/p,this.MAX_VALUES=this.options.duration/this._msPerFrame/2|0,this.resetFormat(),this.value=this.cleanValue((c=this.options.value)==null?``:c),h()&&(this.renderInside(),this.render());try{for(let e of[`innerHTML`,`innerText`,`textContent`])Object.defineProperty(this.el,e,{get:()=>{if(e===`innerHTML`){var t,n;return(t=(n=this.inside)==null?void 0:n.outerHTML)==null?``:t}else{var r,i,a,o;return(r=(i=(a=this.inside)==null?void 0:a.innerText)==null?(o=this.inside)==null?void 0:o.textContent:i)==null?``:r}},set:e=>this.update(e)})}catch(e){h()&&this.watchForMutations()}}renderInside(){h()&&(this.inside=document.createElement(`div`),this.inside.className=`odometer-inside`,this.el.textContent=``,this.el.appendChild(this.inside))}watchForMutations(){try{this.observer!=null||(this.observer=new MutationObserver(e=>{let t=this.el.innerText||``;this.renderInside(),this.render(this.value),this.update(t)})),this.watchMutations=!0,this.startWatchingMutations()}catch(e){}}startWatchingMutations(){if(this.watchMutations&&h()){var e;(e=this.observer)==null||e.observe(this.el,{childList:!0})}}stopWatchingMutations(){var e;(e=this.observer)==null||e.disconnect()}cleanValue(e){if(typeof e==`string`){var t;e=e.replace((t=this.format.radix)==null?`.`:t,`<radix>`),e=e.replace(/[.,\s\u00A0\u202F]/g,``),e=e.replace(`<radix>`,`.`),e=parseFloat(e)||0}return p(e,this.format.precision)}bindTransitionEnd(){if(this.transitionEndBound)return;this.transitionEndBound=!0;let e=!1;this._onTransitionEnd=()=>e?!0:(e=!0,setTimeout(()=>{this.render(),e=!1,this._isAnimating=!1,d(this.el,`odometerdone`,{id:this.options.id,el:this.el,instance:this,value:this.value,options:this.getOptions()})},0),!0),this.el.addEventListener(`transitionend`,this._onTransitionEnd,!1)}resetFormat(){var t;let n=(t=this.options.format)==null?`(,ddd).dd`:t;n=n||`d`;let r=e.exec(n);if(!r)throw Error(`LightOdometer: Unparsable digit format`);let[i,a,o,s]=r,c=(s==null?void 0:s.length)||0;this.format={repeating:a,radix:o,precision:c}}render(e){var n;if(h()){e!=null||(e=this.value),this.stopWatchingMutations(),this.resetFormat(),this.inside.textContent=``;for(let e of Array.from(this.el.classList))/^odometer(-|$)/.test(e)&&this.el.classList.remove(e);this.el.classList.add(`odometer`,`odometer-auto-theme`),this.el.style.setProperty(`--odometer-duration`,`${(n=this.options.duration)==null?t:n}ms`),this.ribbons={},this.formatDigits(e),this.startWatchingMutations()}}formatDigits(e){if(this.digits=[],this.options.formatFunction){let t=this.options.formatFunction(e);for(let e of t.split(``).toReversed())if(/\d/.test(e)){let t=this.renderDigit();t.querySelector(`.odometer-value`).textContent=e,this.digits.push(t),this.insertDigit(t)}else this.addSpacer(e)}else{let t=this.preservePrecision(e),n=!this.format.precision;for(let e of t.split(``).toReversed())e===`.`&&(n=!0),this.addDigit(e,n)}}preservePrecision(e){let t=e.toString();if(this.format.precision){let e=t.split(`.`);e.length===1&&(t+=`.`,e[1]=``);for(let n=0;n<this.format.precision;n++)e[1][n]||(t+=`0`)}return t}update(e){if(!h())return this.value=this.cleanValue(e),this.value;e=this.cleanValue(e);let t=e-this.value;return t?(l(this.el,`odometer-animating-up odometer-animating-down odometer-animating`),t>0?u(this.el,`odometer-animating-up`):u(this.el,`odometer-animating-down`),this._isAnimating=!0,d(this.el,`odometerstart`,{id:this.options.id,el:this.el,instance:this,value:e,oldValue:this.value,options:this.getOptions()}),this.stopWatchingMutations(),this.animate(e),this.startWatchingMutations(),setTimeout(()=>{this.el.offsetHeight,u(this.el,`odometer-animating`)},0),this.value=e,this.value):this.value}renderDigit(){return c(`<span class="odometer-digit"><span class="odometer-digit-spacer">8</span><span class="odometer-digit-inner"><span class="odometer-ribbon"><span class="odometer-ribbon-inner"><span class="odometer-value"></span></span></span></span></span>`)}insertDigit(e,t){return t?this.inside.insertBefore(e,t):this.inside.children.length?this.inside.insertBefore(e,this.inside.children[0]):this.inside.appendChild(e)}addSpacer(e,t,n){let r=c(`<span class="odometer-formatting-mark"></span>`);return r.textContent=e,n&&u(r,n),this.insertDigit(r,t)}addDigit(e,t){if(t!=null||(t=!0),e===`-`)return this.addSpacer(e,null,`odometer-negation-mark`);if(e===`.`){var n;return this.addSpacer((n=this.format.radix)==null?`.`:n,null,`odometer-radix-mark`)}if(t){let e=!1;for(;;){if(!this.format.repeating.length){if(e)throw Error(`Bad odometer format without digits`);this.resetFormat(),e=!0}let t=this.format.repeating[this.format.repeating.length-1];if(this.format.repeating=this.format.repeating.substring(0,this.format.repeating.length-1),t===`d`)break;this.addSpacer(t)}}let r=this.renderDigit(),i=r.querySelector(`.odometer-value`);return i.textContent=e,this.digits.push(r),this.insertDigit(r)}animate(e){this.options.animation===`count`?this.animateCount(e):this.animateSlide(e)}animateCount(e){if(!h())return;let t=e-this.value;if(!t)return;let n=f(),r=n,i=this.value,a=()=>{if(f()-n>(this.options.duration||0)){this.value=e,this.render(),this._isAnimating=!1,d(this.el,`odometerdone`,{id:this.options.id,el:this.el,instance:this,value:this.value,options:this.getOptions()});return}let o=f()-r;if(o>this._countMsPerFrame){r=f();let e=o/(this.options.duration||0),n=t*e;i+=n,this.render(Math.round(i))}this._countRafId=g(a)};this._countRafId=g(a)}getDigitCount(...e){for(let t=0;t<e.length;t++)e[t]=Math.abs(e[t]);let t=Math.max(...e);return Math.ceil(Math.log(t+1)/Math.log(10))}getFractionalDigitCount(...e){let t=/^-?\d*\.(\d*?)0*$/;for(let n=0;n<e.length;n++){let r=e[n].toString(),i=t.exec(r);e[n]=i?i[1].length:0}return Math.max(...e)}resetDigits(){this.digits=[],this.ribbons={},this.inside.textContent=``,this.resetFormat()}createRange(e,t,n){let r=e<t,i=Math.abs(t-e)+(n?1:0);return Array.from({length:i},(t,n)=>r?e+n:e-n)}animateSlide(e){if(!h())return;let t=this.value,n=this.format.precision;n&&(e*=10**n,t*=10**n);let r=e-t;if(!r)return;this.bindTransitionEnd();let i=[],a=this.getDigitCount(t,e),o=0,s=t;for(let n=0;n<a;n++){s=m(t/10**(a-n-1));let r=m(e/10**(a-n-1)),c=r-s,l;if(Math.abs(c)>this.MAX_VALUES){l=[];let e=this.MAX_VALUES*(1+o*.5),t=c/e,n=s;for(;c>0&&n<r||c<0&&n>r;)l.push(Math.round(n)),n+=t;l[l.length-1]!==r&&l.push(r),o++}else l=this.createRange(s,r,!0);for(let e=0;e<l.length;e++)l[e]=Math.abs(l[e]%10);i.push(l)}this.resetDigits();let c=i.toReversed();for(let e=0;e<c.length;e++){let t=c[e];if(this.digits[e]||this.addDigit(` `,e>=n),this.ribbons[e]===void 0){let t=this.digits[e].querySelector(`.odometer-ribbon-inner`);t&&(this.ribbons[e]=t)}this.ribbons[e].textContent=``,r<0&&(t=t.toReversed());for(let n=0;n<t.length;n++){let r=t[n],i=document.createElement(`div`);i.className=`odometer-value`,i.textContent=r.toString(),this.ribbons[e].appendChild(i),n===t.length-1&&u(i,`odometer-last-value`),n===0&&u(i,`odometer-first-value`)}}s<0&&this.addDigit(`-`);let l=this.inside.querySelector(`.odometer-radix-mark`);if(l&&l.parentNode.removeChild(l),n){var d;this.addSpacer((d=this.format.radix)==null?`.`:d,this.digits[n-1],`odometer-radix-mark`)}}static init(){if(!h())return[];let e=document.querySelectorAll(n.options.selector||`.odometer`);return Array.from(e,e=>{var t;return e.odometer=new n({el:e,value:(t=e.innerText)==null?e.textContent:t})})}setOptions(e){var n,r,i;if(!e||typeof e!=`object`)return;`el`in e&&delete e.el;let a=Object.prototype.hasOwnProperty.call(e,`value`),o=Object.prototype.hasOwnProperty.call(e,`format`)||Object.prototype.hasOwnProperty.call(e,`formatFunction`),c=Object.prototype.hasOwnProperty.call(e,`duration`)||Object.prototype.hasOwnProperty.call(e,`framerate`)||Object.prototype.hasOwnProperty.call(e,`countFramerate`);this.options=s(s({},this.options),e),(n=this.options).duration!=null||(n.duration=t);let l=(r=this.options.framerate)==null?30:r,u=(i=this.options.countFramerate)==null?20:i;if(this._msPerFrame=1e3/l,this._countMsPerFrame=1e3/u,this.MAX_VALUES=this.options.duration/this._msPerFrame/2|0,h()&&this.el.style.setProperty(`--odometer-duration`,`${this.options.duration}ms`),o&&this.resetFormat(),a){var d;this.update((d=this.options.value)==null?0:d);return}(o||c)&&h()&&(this.stopWatchingMutations(),this.render(),this.startWatchingMutations())}static setGlobalOptions(e){n.options=s(s({},n.options),e)}on(e,t){this.el.addEventListener(e,t)}off(e,t){this.el.removeEventListener(e,t)}getOptions(){return s({},this.options)}static getGlobalOptions(){return s({},n.options)}animateOnceAndDisconnect(e){var n;e!=null&&this.update(e);let r=()=>this.disconnect(),i=e=>{this.el.removeEventListener(`odometerdone`,i),r()};this.el.addEventListener(`odometerdone`,i,{once:!0}),setTimeout(r,((n=this.options.duration)==null?t:n)+100)}disconnect(){this.destroyed||(this.stopWatchingMutations(),_(this._rafId),_(this._countRafId),this._onTransitionEnd&&(this.el.removeEventListener(`transitionend`,this._onTransitionEnd),this._onTransitionEnd=void 0),this.transitionEndBound=!1,this.destroyed=!0)}};a(S,`options`,typeof window<`u`?(x=window.odometerOptions)==null?{}:x:{}),y(S),b(S);var C=S;export{C as default};
|