light-odometer 0.1.0 → 0.1.1
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/LICENSE +1 -1
- package/dist/{main.d.ts → light-odometer.d.ts} +1 -1
- package/dist/light-odometer.js +1 -0
- package/package.json +16 -14
- package/dist/main.js +0 -1
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Copyright (c) 2013 HubSpot, Inc.
|
|
2
2
|
Copyright (c) 2020-2025 Marco Trinastich
|
|
3
|
-
Copyright (c) 2025 EDM115
|
|
3
|
+
Copyright (c) 2025-2026 EDM115
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
6
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=/^\(?([^)]*)\)?(?:(.)(d+))?$/,t=2e3;function n(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 r(e,t){let n=t.split(` `);for(let t of n)e.classList.remove(t);return e.className}function i(e,t){let n=t.split(` `);for(let t of n)t&&e.classList.add(t);return e.className}function a(e,t,n){let r=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(r)}function o(){return typeof performance<`u`&&typeof performance.now==`function`?performance.now():Date.now()}function s(e,t){return t??=0,t?(e*=10**t,e+=.5,e=Math.floor(e),e/=10**t):Math.round(e)}function c(e){return e<0?Math.ceil(e):Math.floor(e)}function l(){return typeof window<`u`&&typeof document<`u`}function u(e){return l()&&typeof requestAnimationFrame==`function`?requestAnimationFrame(e):setTimeout(()=>e(o()),16)}function d(e){e!=null&&(l()&&typeof cancelAnimationFrame==`function`&&typeof e==`number`?cancelAnimationFrame(e):clearTimeout(e))}function f(e){l()&&(document.readyState===`complete`||document.readyState===`interactive`?setTimeout(e,0):document.addEventListener(`DOMContentLoaded`,e,{once:!0}))}function p(e){l()&&setTimeout(()=>{window.odometerOptions&&(e.options={...e.options,...window.odometerOptions})},0)}function m(e){f(()=>{e.options.auto!==!1&&e.init()})}var h=class f{static options=typeof window<`u`?window.odometerOptions??{}:{};_isAnimating=!1;options;el;value=0;inside;observer;watchMutations=!1;transitionEndBound=!1;destroyed=!1;format={repeating:``,precision:0};get isAnimating(){return this._isAnimating}MAX_VALUES;digits=[];ribbons={};_rafId;_countRafId;_msPerFrame;_countMsPerFrame;_onTransitionEnd;constructor(e){if(this.options=e,this.el=this.options.el,this.el.odometer){let e=this.el.odometer;e.options={...e.options,...this.options},e.options.duration??=t;let n=e.options.framerate??30,r=e.options.countFramerate??20;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?l()&&e.render():e.update(this.options.value),e}this.el.odometer=this,this.options={...f.options,...this.options},this.options.duration??=t;let n=this.options.framerate??30,r=this.options.countFramerate??20;this._msPerFrame=1e3/n,this._countMsPerFrame=1e3/r,this.MAX_VALUES=this.options.duration/this._msPerFrame/2|0,this.resetFormat(),this.value=this.cleanValue(this.options.value??``),l()&&(this.renderInside(),this.render());try{for(let e of[`innerHTML`,`innerText`,`textContent`])Object.defineProperty(this.el,e,{get:()=>e===`innerHTML`?this.inside?.outerHTML??``:this.inside?.innerText??this.inside?.textContent??``,set:e=>this.update(e)})}catch{l()&&this.watchForMutations()}}renderInside(){l()&&(this.inside=document.createElement(`div`),this.inside.className=`odometer-inside`,this.el.textContent=``,this.el.appendChild(this.inside))}watchForMutations(){try{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{}}startWatchingMutations(){this.watchMutations&&l()&&this.observer?.observe(this.el,{childList:!0})}stopWatchingMutations(){this.observer?.disconnect()}cleanValue(e){return typeof e==`string`&&(e=e.replace(this.format.radix??`.`,`<radix>`),e=e.replace(/[.,\s\u00A0\u202F]/g,``),e=e.replace(`<radix>`,`.`),e=parseFloat(e)||0),s(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,a(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(){let t=this.options.format??`(,ddd).dd`;t||=`d`;let n=e.exec(t);if(!n)throw Error(`LightOdometer: Unparsable digit format`);let[r,i,a,o]=n;this.format={repeating:i,radix:a,precision:o?.length||0}}render(e){if(l()){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`,`${this.options.duration??t}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(),n=t.querySelector(`.odometer-value`);n.textContent=e,i(n,`odometer-first-value odometer-last-value`),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(!l())return this.value=this.cleanValue(e),this.value;e=this.cleanValue(e);let t=e-this.value;return t?(r(this.el,`odometer-animating-up odometer-animating-down odometer-animating`),t>0?i(this.el,`odometer-animating-up`):i(this.el,`odometer-animating-down`),this._isAnimating=!0,a(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,i(this.el,`odometer-animating`)},0),this.value=e,this.value):this.value}renderDigit(){return n(`<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,r){let a=n(`<span class="odometer-formatting-mark"></span>`);return a.textContent=e,r&&i(a,r),this.insertDigit(a,t)}addDigit(e,t){if(t??=!0,e===`-`)return this.addSpacer(e,null,`odometer-negation-mark`);if(e===`.`)return this.addSpacer(this.format.radix??`.`,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 n=this.renderDigit(),r=n.querySelector(`.odometer-value`);return r.textContent=e,i(r,`odometer-first-value odometer-last-value`),this.digits.push(n),this.insertDigit(n)}animate(e){this.options.animation===`count`?this.animateCount(e):this.animateSlide(e)}animateCount(e){if(!l())return;let t=e-this.value;if(!t)return;let n=o(),r=n,i=this.value,s=()=>{if(o()-n>(this.options.duration||0)){this.value=e,this.render(),this._isAnimating=!1,a(this.el,`odometerdone`,{id:this.options.id,el:this.el,instance:this,value:this.value,options:this.getOptions()});return}let c=o()-r;if(c>this._countMsPerFrame){r=o();let e=t*(c/(this.options.duration||0));i+=e,this.render(Math.round(i))}this._countRafId=u(s)};this._countRafId=u(s)}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(!l())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 a=[],o=this.getDigitCount(t,e),s=0,u=t;for(let n=0;n<o;n++){u=c(t/10**(o-n-1));let r=c(e/10**(o-n-1)),i=r-u,l;if(Math.abs(i)>this.MAX_VALUES){l=[];let e=i/(this.MAX_VALUES*(1+s*.5)),t=u;for(;i>0&&t<r||i<0&&t>r;)l.push(Math.round(t)),t+=e;l[l.length-1]!==r&&l.push(r),s++}else l=this.createRange(u,r,!0);for(let e=0;e<l.length;e++)l[e]=Math.abs(l[e]%10);a.push(l)}this.resetDigits();let d=a.toReversed();for(let e=0;e<d.length;e++){let t=d[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],a=document.createElement(`div`);a.className=`odometer-value`,a.textContent=r.toString(),this.ribbons[e].appendChild(a),n===t.length-1&&i(a,`odometer-last-value`),n===0&&i(a,`odometer-first-value`)}}u<0&&this.addDigit(`-`);let f=this.inside.querySelector(`.odometer-radix-mark`);f&&f.parentNode.removeChild(f),n&&this.addSpacer(this.format.radix??`.`,this.digits[n-1],`odometer-radix-mark`)}static init(){if(!l())return[];let e=document.querySelectorAll(f.options.selector||`.odometer`);return Array.from(e,e=>e.odometer=new f({el:e,value:e.innerText??e.textContent}))}setOptions(e){if(!e||typeof e!=`object`)return;`el`in e&&delete e.el;let n=Object.prototype.hasOwnProperty.call(e,`value`),r=Object.prototype.hasOwnProperty.call(e,`format`)||Object.prototype.hasOwnProperty.call(e,`formatFunction`),i=Object.prototype.hasOwnProperty.call(e,`duration`)||Object.prototype.hasOwnProperty.call(e,`framerate`)||Object.prototype.hasOwnProperty.call(e,`countFramerate`);this.options={...this.options,...e},this.options.duration??=t;let a=this.options.framerate??30,o=this.options.countFramerate??20;if(this._msPerFrame=1e3/a,this._countMsPerFrame=1e3/o,this.MAX_VALUES=this.options.duration/this._msPerFrame/2|0,l()&&this.el.style.setProperty(`--odometer-duration`,`${this.options.duration}ms`),r&&this.resetFormat(),n){this.update(this.options.value??0);return}(r||i)&&l()&&(this.stopWatchingMutations(),this.render(),this.startWatchingMutations())}static setGlobalOptions(e){f.options={...f.options,...e}}on(e,t){this.el.addEventListener(e,t)}off(e,t){this.el.removeEventListener(e,t)}getOptions(){return{...this.options}}static getGlobalOptions(){return{...f.options}}animateOnceAndDisconnect(e){e!=null&&this.update(e);let n=()=>this.disconnect(),r=e=>{this.el.removeEventListener(`odometerdone`,r),n()};this.el.addEventListener(`odometerdone`,r,{once:!0}),setTimeout(n,(this.options.duration??t)+100)}disconnect(){this.destroyed||=(this.stopWatchingMutations(),d(this._rafId),d(this._countRafId),this._onTransitionEnd&&=(this.el.removeEventListener(`transitionend`,this._onTransitionEnd),void 0),this.transitionEndBound=!1,!0)}toString(){let{el:e,...t}={...this.getOptions()},n={id:this.options.id,value:this.value,options:t,globalOptions:f.getGlobalOptions(),watchMutations:this.watchMutations,transitionEndBound:this.transitionEndBound,destroyed:this.destroyed,format:this.format,isAnimating:this.isAnimating};return JSON.stringify(n)}};p(h),m(h);export{h as LightOdometer,h as default};
|
package/package.json
CHANGED
|
@@ -11,18 +11,23 @@
|
|
|
11
11
|
],
|
|
12
12
|
"description": "for personal use only, see EDM115/website",
|
|
13
13
|
"devDependencies": {
|
|
14
|
-
"@stylistic/eslint-plugin": "~5.
|
|
14
|
+
"@stylistic/eslint-plugin": "~5.8.0",
|
|
15
15
|
"@types/node": "latest",
|
|
16
|
-
"@typescript-eslint/parser": "~8.
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
16
|
+
"@typescript-eslint/parser": "~8.56.0",
|
|
17
|
+
"@typescript/native-preview": "latest",
|
|
18
|
+
"edm115-lint": "~0.1.6",
|
|
19
|
+
"eslint": "~10.0.0",
|
|
20
|
+
"jiti": "~2.6.1",
|
|
21
|
+
"oxlint": "~1.48.0",
|
|
22
|
+
"oxlint-tsgolint": "~0.14.0",
|
|
23
|
+
"tsdown": "~0.20.3",
|
|
24
|
+
"unplugin-unused": "~0.5.7"
|
|
23
25
|
},
|
|
24
26
|
"exports": {
|
|
25
|
-
".":
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./dist/light-odometer.d.ts",
|
|
29
|
+
"import": "./dist/light-odometer.js"
|
|
30
|
+
},
|
|
26
31
|
"./package.json": "./package.json"
|
|
27
32
|
},
|
|
28
33
|
"files": [
|
|
@@ -48,8 +53,6 @@
|
|
|
48
53
|
],
|
|
49
54
|
"homepage": "https://github.com/EDM115/light-odometer#readme",
|
|
50
55
|
"license": "MIT",
|
|
51
|
-
"main": "./dist/main.js",
|
|
52
|
-
"module": "./dist/main.js",
|
|
53
56
|
"name": "light-odometer",
|
|
54
57
|
"publishConfig": {
|
|
55
58
|
"access": "public"
|
|
@@ -59,14 +62,13 @@
|
|
|
59
62
|
"url": "git+https://github.com/EDM115/light-odometer.git"
|
|
60
63
|
},
|
|
61
64
|
"type": "module",
|
|
62
|
-
"
|
|
63
|
-
"version": "0.1.0",
|
|
65
|
+
"version": "0.1.1",
|
|
64
66
|
"scripts": {
|
|
65
67
|
"build": "tsdown",
|
|
66
68
|
"format": "eslint -c eslint.stylistic.config.ts --concurrency=auto --fix .",
|
|
67
69
|
"lint": "oxlint --type-aware .",
|
|
68
70
|
"lint:fix": "oxlint --fix --type-aware .",
|
|
69
71
|
"release": "pnpm publish",
|
|
70
|
-
"typecheck": "
|
|
72
|
+
"typecheck": "tsgo --noEmit"
|
|
71
73
|
}
|
|
72
74
|
}
|
package/dist/main.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
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()})}function x(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.includes(r))continue;n[r]=e[r]}return n}function S(e,t){if(e==null)return{};var n,r,i=x(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.includes(n)||{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}const C=[`el`];var w,T=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(),n=t.querySelector(`.odometer-value`);n.textContent=e,u(n,`odometer-first-value odometer-last-value`),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,u(i,`odometer-first-value odometer-last-value`),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)}toString(){let e=s({},this.getOptions()),{el:t}=e,r=S(e,C),i={id:this.options.id,value:this.value,options:r,globalOptions:n.getGlobalOptions(),watchMutations:this.watchMutations,transitionEndBound:this.transitionEndBound,destroyed:this.destroyed,format:this.format,isAnimating:this.isAnimating};return JSON.stringify(i)}};a(T,`options`,typeof window<`u`?(w=window.odometerOptions)==null?{}:w:{}),y(T),b(T);var E=T;export{E as default};
|