number-flow 0.3.3 → 0.3.5

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/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import { type PartitionedParts } from './formatter';
2
2
  import { ServerSafeHTMLElement } from './ssr';
3
- export { SlottedTag, slottedStyles, prefersReducedMotion } from './styles';
3
+ export { define } from './util/dom';
4
+ export { prefersReducedMotion } from './styles';
5
+ export { render, type RenderProps } from './ssr';
4
6
  export * from './formatter';
5
7
  export declare const canAnimate: boolean;
6
8
  type RawTrend = boolean | 'increasing' | 'decreasing';
@@ -10,23 +12,31 @@ declare enum Trend {
10
12
  DOWN = -1,
11
13
  NONE = 0
12
14
  }
13
- export declare const defaultOpacityTiming: EffectTiming;
14
- export declare const defaultTransformTiming: EffectTiming;
15
- export declare class NumberFlowLite extends ServerSafeHTMLElement {
15
+ export interface Props {
16
+ transformTiming: EffectTiming;
17
+ spinTiming: EffectTiming | undefined;
18
+ opacityTiming: EffectTiming;
19
+ animated: boolean;
20
+ respectMotionPreference: boolean;
21
+ trend: RawTrend;
22
+ continuous: boolean;
23
+ }
24
+ export declare class NumberFlowLite extends ServerSafeHTMLElement implements Props {
16
25
  #private;
17
- static define(): void;
26
+ static defaultProps: Props;
18
27
  transformTiming: EffectTiming;
19
- spinTiming?: EffectTiming;
28
+ spinTiming: EffectTiming | undefined;
20
29
  opacityTiming: EffectTiming;
21
- manual: boolean;
22
30
  respectMotionPreference: boolean;
23
31
  trend: RawTrend;
24
32
  continuous: boolean;
25
- get startingPlace(): number | null | undefined;
33
+ get animated(): boolean;
34
+ set animated(val: boolean);
26
35
  get computedTrend(): Trend | undefined;
36
+ get startingPlace(): number | null | undefined;
37
+ get computedAnimated(): boolean;
38
+ manual: boolean;
27
39
  set parts(parts: PartitionedParts | undefined);
28
40
  willUpdate(): void;
29
41
  didUpdate(): void;
30
- get animated(): boolean;
31
- set animated(val: boolean);
32
42
  }
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function n(a,t,e,i){if(e==="a"&&!i)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?a!==t||!i:!t.has(a))throw new TypeError("Cannot read private member from an object whose class did not declare it");return e==="m"?i:e==="a"?i.call(a):i?i.value:t.get(a)}function h(a,t,e,i,s){if(i==="m")throw new TypeError("Private method is not writable");if(i==="a"&&!s)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?a!==t||!s:!t.has(a))throw new TypeError("Cannot write private member to an object whose class did not declare it");return i==="a"?s.call(a,e):s?s.value=e:t.set(a,e),e}const w=(a,t,e)=>{const i=document.createElement(a),[s,r]=Array.isArray(t)?[void 0,t]:[t,e];return s&&Object.assign(i,s),r==null||r.forEach(l=>i.appendChild(l)),i},mt=(a,t)=>{var e;return t==="left"?a.offsetLeft:(((e=a.offsetParent instanceof HTMLElement?a.offsetParent:null)==null?void 0:e.offsetWidth)??0)-a.offsetWidth-a.offsetLeft};function gt(a,t,{reverse:e=!1}={}){const i=a.length;for(let s=e?i-1:0;e?s>=0:s<i;e?s--:s++)t(a[s],s)}function wt(a,t){const e=t.formatToParts(a),i=[],s=[],r=[],l=[],o={},p=c=>{const f=o[c]==null?o[c]=0:++o[c];return`${c}:${f}`};let u="",m=!1,N=!1;for(const c of e){u+=c.value;const f=c.type==="minusSign"||c.type==="plusSign"?"sign":c.type;f==="integer"?(m=!0,s.push(...c.value.split("").map(J=>({type:f,value:parseInt(J)})))):f==="group"?s.push({type:f,value:c.value}):f==="decimal"?(N=!0,r.push({type:f,value:c.value,key:p(f)})):f==="fraction"?r.push(...c.value.split("").map(J=>({type:f,value:parseInt(J),key:p(f),place:-1-o[f]}))):(m||N?l:i).push({type:f,value:c.value,key:p(f)})}const d=[];for(let c=s.length-1;c>=0;c--){const f=s[c];d.unshift(f.type==="integer"?{...f,key:p(f.type),place:o[f.type]}:{...f,key:p(f.type)})}return{pre:i,integer:d,fraction:r,post:l,formatted:u,value:typeof a=="string"?parseFloat(a):a}}const T=typeof window<"u",yt=T?HTMLElement:class{},vt=String.raw,_t=T&&typeof CSS<"u"&&CSS.supports("animation-timing-function","linear(1,2)"),bt=T&&typeof CSS<"u"&&CSS.supports("line-height","mod(1,1)"),O=T?matchMedia("(prefers-reduced-motion: reduce)"):null,Z="--_number-flow-d-opacity",it="--_number-flow-d-width",q="--_number-flow-dx",st="--_number-flow-d",St=(()=>{try{return CSS.registerProperty({name:Z,syntax:"<number>",inherits:!1,initialValue:"0"}),CSS.registerProperty({name:q,syntax:"<length>",inherits:!0,initialValue:"0px"}),CSS.registerProperty({name:it,syntax:"<number>",inherits:!1,initialValue:"0"}),CSS.registerProperty({name:st,syntax:"<number>",inherits:!0,initialValue:"0"}),!0}catch{return!1}})(),rt="var(--number-flow-char-height, 1em)",g="var(--number-flow-mask-height, 0.25em)",C=`calc(${g} / 2)`,Q="var(--number-flow-mask-width, 0.5em)",S=`calc(${Q} / var(--scale-x))`,A="#000 0, transparent 71%",lt="span",kt=({willChange:a})=>({fontKerning:"none",display:"inline-block",lineHeight:rt,padding:`${g} 0`,willChange:a?"transform":void 0}),nt=vt`:host{display:inline-flex;align-items:baseline;direction:ltr;white-space:nowrap;position:relative;line-height:${rt} !important;isolation:isolate;}::slotted(${lt}){position:absolute;left:0;top:0;color:transparent !important;z-index:-5;}:host > .number,:host > .section{pointer-events:none;user-select:none;}.number,.number__inner{display:inline-flex;align-items:baseline;transform-origin:left top;}:host([data-will-change]) .number,:host([data-will-change]) .number__inner{will-change:transform;}.number{--scale-x:calc(1 + var(${it}) / var(--width));transform:translateX(var(${q})) scaleX(var(--scale-x));margin:0 calc(-1 * ${Q});position:relative;z-index:-1;overflow:clip;-webkit-mask-image:linear-gradient( to right,transparent 0,#000 ${S},#000 calc(100% - ${S}),transparent ),linear-gradient( to bottom,transparent 0,#000 ${g},#000 calc(100% - ${g}),transparent 100% ),radial-gradient(at bottom right,${A}),radial-gradient(at bottom left,${A}),radial-gradient(at top left,${A}),radial-gradient(at top right,${A});-webkit-mask-size:100% calc(100% - ${g} * 2),calc(100% - ${S} * 2) 100%,${S} ${g},${S} ${g},${S} ${g},${S} ${g};-webkit-mask-position:center,center,top left,top right,bottom right,bottom left;-webkit-mask-repeat:no-repeat;}.number__inner{padding:0 ${Q};transform:scaleX(calc(1 / var(--scale-x))) translateX(calc(-1 * var(${q})));}.section{display:inline-flex;align-items:baseline;padding-bottom:${C};padding-top:${C};position:relative;isolation:isolate;}.section::after{content:'\200b';display:block;padding:${C} 0;}:host([data-will-change]) .section{will-change:transform;}.section--justify-left{transform-origin:center left;}.section--justify-right{transform-origin:center right;}.section__exiting{position:absolute !important;z-index:-1;}.digit{display:block;position:relative;--c:var(--current) + var(${st});}:host([data-will-change]) .digit,:host([data-will-change]) .digit__num{will-change:transform;}.digit__num{display:block;padding:${C} 0;--offset-raw:mod(10 + var(--n) - mod(var(--c),10),10);--offset:calc(var(--offset-raw) - 10 * round(down,var(--offset-raw) / 5,1));--y:clamp(-100%,var(--offset) * 100%,100%);transform:translateY(var(--y));}.digit__num:not(.is-current){position:absolute;top:0;left:50%;transform:translateX(-50%) translateY(var(--y));}.digit:not(.is-spinning) .digit__num:not(.is-current){display:none;}.symbol{display:inline-flex;align-items:baseline;position:relative;isolation:isolate;padding:${C} 0;}:host([data-will-change]) .symbol{will-change:transform;}.symbol__value{display:block;white-space:pre;}.symbol__exiting{position:absolute;z-index:-1;}.section--justify-left .symbol__exiting{left:0;}.section--justify-right .symbol__exiting{right:0;}.animate-presence{opacity:calc(1 + var(${Z}));}`,xt=(a,t)=>a!=null&&t==null?a:a==null&&t!=null?t:a!=null&&t!=null?Math.max(a,t):null;var D,B,k,x,$,y,P,U,W,H,E,M,V,X,z,L,I,j,R,v,G,tt,_,K,Y;const ht=bt&&_t&&St;var b;(function(a){a[a.UP=1]="UP",a[a.DOWN=-1]="DOWN",a[a.NONE=0]="NONE"})(b||(b={}));const ct={duration:450,easing:"ease-out"},ft={duration:900,easing:"linear(0,.005,.019,.039,.066,.096,.129,.165,.202,.24,.278,.316,.354,.39,.426,.461,.494,.526,.557,.586,.614,.64,.665,.689,.711,.731,.751,.769,.786,.802,.817,.831,.844,.856,.867,.877,.887,.896,.904,.912,.919,.925,.931,.937,.942,.947,.951,.955,.959,.962,.965,.968,.971,.973,.976,.978,.98,.981,.983,.984,.986,.987,.988,.989,.99,.991,.992,.992,.993,.994,.994,.995,.995,.996,.996,.9963,.9967,.9969,.9972,.9975,.9977,.9979,.9981,.9982,.9984,.9985,.9987,.9988,.9989,1)"};let F;class $t extends yt{constructor(){super(...arguments),this.transformTiming=ft,this.opacityTiming=ct,D.set(this,!0),this.manual=!1,this.respectMotionPreference=!0,B.set(this,!1),k.set(this,void 0),x.set(this,void 0),$.set(this,void 0),this.trend=!0,y.set(this,void 0),this.continuous=!1,P.set(this,void 0),U.set(this,void 0),W.set(this,void 0)}static define(){T&&customElements.define("number-flow",this)}get startingPlace(){return n(this,P,"f")}get computedTrend(){return n(this,y,"f")}set parts(t){if(t==null)return;const{pre:e,integer:i,fraction:s,post:r,value:l}=t;if(n(this,B,"f")){const o=n(this,U,"f");if(h(this,U,t,"f"),this.trend===!0?h(this,y,Math.sign(l-o.value),"f"):this.trend==="increasing"?h(this,y,b.UP,"f"):this.trend==="decreasing"?h(this,y,b.DOWN,"f"):h(this,y,b.NONE,"f"),h(this,P,void 0,"f"),n(this,y,"f")!==b.NONE&&this.continuous){const p=o.integer.concat(o.fraction).filter(d=>d.type==="integer"||d.type==="fraction"),u=t.integer.concat(t.fraction).filter(d=>d.type==="integer"||d.type==="fraction"),m=p.find(d=>!u.find(c=>c.place===d.place&&c.value===d.value)),N=u.find(d=>!p.find(c=>d.place===c.place&&d.value===c.value));h(this,P,xt(m==null?void 0:m.place,N==null?void 0:N.place),"f")}this.manual||this.willUpdate(),n(this,k,"f").update(e),n(this,x,"f").update({integer:i,fraction:s}),n(this,$,"f").update(r),this.manual||this.didUpdate()}else{if(h(this,U,t,"f"),this.attachShadow({mode:"open"}),typeof CSSStyleSheet<"u"&&this.shadowRoot.adoptedStyleSheets)F||(F=new CSSStyleSheet,F.replaceSync(nt)),this.shadowRoot.adoptedStyleSheets=[F];else{const o=document.createElement("style");o.textContent=nt,this.shadowRoot.appendChild(o)}this.shadowRoot.appendChild(w("slot")),h(this,k,new ot(this,e,{inert:!0,ariaHidden:"true",justify:"right"}),"f"),this.shadowRoot.appendChild(n(this,k,"f").el),h(this,x,new Et(this,i,s,{inert:!0,ariaHidden:"true"}),"f"),this.shadowRoot.appendChild(n(this,x,"f").el),h(this,$,new ot(this,r,{inert:!0,ariaHidden:"true",justify:"left"}),"f"),this.shadowRoot.appendChild(n(this,$,"f").el)}h(this,B,!0,"f")}willUpdate(){this.animated&&(n(this,k,"f").willUpdate(),n(this,x,"f").willUpdate(),n(this,$,"f").willUpdate())}didUpdate(){if(!this.animated)return;n(this,W,"f")?n(this,W,"f").abort():this.dispatchEvent(new Event("animationsstart")),n(this,k,"f").didUpdate(),n(this,x,"f").didUpdate(),n(this,$,"f").didUpdate();const t=new AbortController;Promise.all(this.shadowRoot.getAnimations().map(e=>e.finished)).then(()=>{t.signal.aborted||(this.dispatchEvent(new Event("animationsfinish")),h(this,W,void 0,"f"))}),h(this,W,t,"f")}get animated(){return ht&&n(this,D,"f")&&(!this.respectMotionPreference||!(O!=null&&O.matches))}set animated(t){var e;this.animated!==t&&(h(this,D,t,"f"),(e=this.shadowRoot)==null||e.getAnimations().forEach(i=>i.finish()))}}D=new WeakMap,B=new WeakMap,k=new WeakMap,x=new WeakMap,$=new WeakMap,y=new WeakMap,P=new WeakMap,U=new WeakMap,W=new WeakMap;class Et{constructor(t,e,i,{className:s,...r}={}){this.flow=t,H.set(this,void 0),E.set(this,void 0),M.set(this,void 0),V.set(this,void 0),X.set(this,void 0),h(this,E,new at(t,e,{justify:"right"}),"f"),h(this,M,new at(t,i,{justify:"left"}),"f"),h(this,H,w("span",{className:"number__inner"},[n(this,E,"f").el,n(this,M,"f").el]),"f"),this.el=w("span",{...r,className:`number ${s??""}`},[n(this,H,"f")])}willUpdate(){h(this,V,this.el.offsetWidth,"f"),h(this,X,this.el.getBoundingClientRect().left,"f"),n(this,E,"f").willUpdate(),n(this,M,"f").willUpdate()}update({integer:t,fraction:e}){n(this,E,"f").update(t),n(this,M,"f").update(e)}didUpdate(){const t=this.el.getBoundingClientRect();n(this,E,"f").didUpdate(),n(this,M,"f").didUpdate();const e=n(this,X,"f")-t.left,i=this.el.offsetWidth,s=n(this,V,"f")-i;this.el.style.setProperty("--width",String(i)),this.el.animate({[q]:[`${e}px`,"0px"],[it]:[s,0]},{...this.flow.transformTiming,composite:"accumulate"})}}H=new WeakMap,E=new WeakMap,M=new WeakMap,V=new WeakMap,X=new WeakMap;class dt{constructor(t,e,{justify:i,className:s,...r},l){this.flow=t,this.children=new Map,this.onCharRemove=p=>()=>{this.children.delete(p)},z.set(this,void 0),this.justify=i;const o=e.map(p=>this.addChar(p).el);this.el=w("span",{...r,className:`section section--justify-${i} ${s??""}`},l?l(o):o)}addChar(t,{startDigitsAtZero:e=!1,...i}={}){const s=t.type==="integer"||t.type==="fraction"?new ut(this,t.type,e?0:t.value,t.place,{...i,onRemove:this.onCharRemove(t.key)}):new Mt(this,t.type,t.value,{...i,onRemove:this.onCharRemove(t.key)});return this.children.set(t.key,s),s}unpop(t){t.el.classList.remove("section__exiting"),t.el.style[this.justify]=""}pop(t){t.forEach(e=>{e.el.style[this.justify]=`${mt(e.el,this.justify)}px`}),t.forEach(e=>{e.el.classList.add("section__exiting"),e.present=!1})}addNewAndUpdateExisting(t){const e=new Map,i=new Map,s=this.justify==="left",r=s?"prepend":"append";if(gt(t,l=>{let o;this.children.has(l.key)?(o=this.children.get(l.key),i.set(l,o),this.unpop(o),o.present=!0):(o=this.addChar(l,{startDigitsAtZero:!0,animateIn:!0}),e.set(l,o)),this.el[r](o.el)},{reverse:s}),this.flow.animated){const l=this.el.getBoundingClientRect();e.forEach(o=>{o.willUpdate(l)})}e.forEach((l,o)=>{l.update(o.value)}),i.forEach((l,o)=>{l.update(o.value)})}willUpdate(){const t=this.el.getBoundingClientRect();h(this,z,t[this.justify],"f"),this.children.forEach(e=>e.willUpdate(t))}didUpdate(){const t=this.el.getBoundingClientRect();this.children.forEach(s=>s.didUpdate(t));const e=t[this.justify],i=n(this,z,"f")-e;this.el.animate({transform:[`translateX(${i}px)`,"none"]},{...this.flow.transformTiming,composite:"accumulate"})}}z=new WeakMap;class at extends dt{update(t){const e=new Map;this.children.forEach((i,s)=>{t.find(r=>r.key===s)||e.set(s,i),this.unpop(i)}),this.addNewAndUpdateExisting(t),e.forEach(i=>{i instanceof ut&&i.update(0)}),this.pop(e)}}class ot extends dt{update(t){const e=new Map;this.children.forEach((i,s)=>{t.find(r=>r.key===s)||e.set(s,i)}),this.pop(e),this.addNewAndUpdateExisting(t)}}class et{constructor(t,e,{onRemove:i,animateIn:s=!1}={}){this.flow=t,this.el=e,L.set(this,!0),I.set(this,void 0),j.set(this,()=>{var r;this.el.remove(),(r=n(this,I,"f"))==null||r.call(this)}),this.el.classList.add("animate-presence"),this.flow.animated&&s&&this.el.animate({[Z]:[-.9999,0]},{...this.flow.opacityTiming,composite:"accumulate"}),h(this,I,i,"f")}get present(){return n(this,L,"f")}set present(t){if(n(this,L,"f")!==t){if(h(this,L,t,"f"),!this.flow.animated){t||n(this,j,"f").call(this);return}this.el.style.setProperty("--_number-flow-d-opacity",t?"0":"-.999"),this.el.animate({[Z]:t?[-.9999,0]:[.999,0]},{...this.flow.opacityTiming,composite:"accumulate"}),t?this.flow.removeEventListener("animationsfinish",n(this,j,"f")):this.flow.addEventListener("animationsfinish",n(this,j,"f"),{once:!0})}}}L=new WeakMap,I=new WeakMap,j=new WeakMap;class pt extends et{constructor(t,e,i,s){super(t.flow,i,s),this.section=t,this.value=e,this.el=i}}class ut extends pt{constructor(t,e,i,s,r){const l=Array.from({length:10}).map((p,u)=>{const m=w("span",{className:`digit__num${u===i?" is-current":""}`},[document.createTextNode(String(u))]);return m.style.setProperty("--n",String(u)),m}),o=w("span",{className:"digit"},l);o.style.setProperty("--current",String(i)),super(t,i,o,r),this.place=s,R.set(this,void 0),v.set(this,void 0),G.set(this,void 0),tt.set(this,()=>{this.el.classList.remove("is-spinning")}),h(this,R,l,"f")}willUpdate(t){const e=this.el.getBoundingClientRect();h(this,v,this.value,"f");const i=e[this.section.justify]-t[this.section.justify],s=e.width/2;h(this,G,this.section.justify==="left"?i+s:i-s,"f")}update(t){var e,i;(e=n(this,R,"f")[this.value])==null||e.classList.remove("is-current"),this.el.style.setProperty("--current",String(t)),(i=n(this,R,"f")[t])==null||i.classList.add("is-current"),this.value=t}didUpdate(t){const e=this.el.getBoundingClientRect(),i=e[this.section.justify]-t[this.section.justify],s=e.width/2,r=this.section.justify==="left"?i+s:i-s;this.el.animate({transform:[`translateX(${n(this,G,"f")-r}px)`,"none"]},{...this.flow.transformTiming,composite:"accumulate"});const l=this.diff;l&&(this.el.classList.add("is-spinning"),this.el.animate({[st]:[-l,0]},{...this.flow.spinTiming??this.flow.transformTiming,composite:"accumulate"}),this.flow.addEventListener("animationsfinish",n(this,tt,"f"),{once:!0}))}get diff(){let t=this.flow.computedTrend;const e=this.value-n(this,v,"f");return!e&&this.flow.startingPlace!=null&&this.flow.startingPlace>=this.place?10*t:(t||(t=Math.sign(e)),t===b.DOWN&&this.value>n(this,v,"f")?this.value-10-n(this,v,"f"):t===b.UP&&this.value<n(this,v,"f")?10-n(this,v,"f")+this.value:e)}}R=new WeakMap,v=new WeakMap,G=new WeakMap,tt=new WeakMap;class Mt extends pt{constructor(t,e,i,s){const r=w("span",{className:"symbol__value",textContent:i});super(t,i,w("span",{className:"symbol"},[r]),s),this.type=e,_.set(this,new Map),K.set(this,void 0),Y.set(this,l=>()=>{n(this,_,"f").delete(l)}),n(this,_,"f").set(i,new et(this.flow,r,{onRemove:n(this,Y,"f").call(this,i)}))}willUpdate(t){if(this.type==="decimal")return;const e=this.el.getBoundingClientRect();h(this,K,e[this.section.justify]-t[this.section.justify],"f")}update(t){if(this.value!==t){const e=n(this,_,"f").get(this.value);if(e.present=!1,e.el.classList.add("symbol__exiting"),n(this,_,"f").has(t)){const i=n(this,_,"f").get(t);i.present=!0,i.el.classList.remove("symbol__exiting")}else{const i=w("span",{className:"symbol__value",textContent:t});this.el.appendChild(i),n(this,_,"f").set(t,new et(this.flow,i,{animateIn:!0,onRemove:n(this,Y,"f").call(this,t)}))}}this.value=t}didUpdate(t){if(this.type==="decimal")return;const i=this.el.getBoundingClientRect()[this.section.justify]-t[this.section.justify];this.el.animate({transform:[`translateX(${n(this,K,"f")-i}px)`,"none"]},{...this.flow.transformTiming,composite:"accumulate"})}}_=new WeakMap,K=new WeakMap,Y=new WeakMap;exports.NumberFlowLite=$t;exports.SlottedTag=lt;exports.canAnimate=ht;exports.defaultOpacityTiming=ct;exports.defaultTransformTiming=ft;exports.partitionParts=wt;exports.prefersReducedMotion=O;exports.slottedStyles=kt;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function s(a,t,e,i){if(e==="a"&&!i)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?a!==t||!i:!t.has(a))throw new TypeError("Cannot read private member from an object whose class did not declare it");return e==="m"?i:e==="a"?i.call(a):i?i.value:t.get(a)}function h(a,t,e,i,n){if(i==="m")throw new TypeError("Private method is not writable");if(i==="a"&&!n)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?a!==t||!n:!t.has(a))throw new TypeError("Cannot write private member to an object whose class did not declare it");return i==="a"?n.call(a,e):n?n.value=e:t.set(a,e),e}const F=typeof window<"u",w=(a,t,e)=>{const i=document.createElement(a),[n,r]=Array.isArray(t)?[void 0,t]:[t,e];return n&&Object.assign(i,n),r==null||r.forEach(l=>i.appendChild(l)),i},mt=(a,t)=>{var e;return t==="left"?a.offsetLeft:(((e=a.offsetParent instanceof HTMLElement?a.offsetParent:null)==null?void 0:e.offsetWidth)??0)-a.offsetWidth-a.offsetLeft},gt=a=>a.offsetWidth>0&&a.offsetHeight>0,wt=(a,t)=>{if(!(!F||customElements.get(a)===t))return customElements.define(a,t)};function yt(a,t,{reverse:e=!1}={}){const i=a.length;for(let n=e?i-1:0;e?n>=0:n<i;e?n--:n++)t(a[n],n)}function vt(a,t){const e=t.formatToParts(a),i=[],n=[],r=[],l=[],o={},u=c=>{const f=o[c]==null?o[c]=0:++o[c];return`${c}:${f}`};let p="",m=!1,P=!1;for(const c of e){p+=c.value;const f=c.type==="minusSign"||c.type==="plusSign"?"sign":c.type;f==="integer"?(m=!0,n.push(...c.value.split("").map(Q=>({type:f,value:parseInt(Q)})))):f==="group"?n.push({type:f,value:c.value}):f==="decimal"?(P=!0,r.push({type:f,value:c.value,key:u(f)})):f==="fraction"?r.push(...c.value.split("").map(Q=>({type:f,value:parseInt(Q),key:u(f),place:-1-o[f]}))):(m||P?l:i).push({type:f,value:c.value,key:u(f)})}const d=[];for(let c=n.length-1;c>=0;c--){const f=n[c];d.unshift(f.type==="integer"?{...f,key:u(f.type),place:o[f.type]}:{...f,key:u(f.type)})}return{pre:i,integer:d,fraction:r,post:l,formatted:p,value:typeof a=="string"?parseFloat(a):a}}const _t=String.raw,bt=F&&typeof CSS<"u"&&CSS.supports("animation-timing-function","linear(1,2)"),St=F&&typeof CSS<"u"&&CSS.supports("line-height","mod(1,1)"),B=F?matchMedia("(prefers-reduced-motion: reduce)"):null,q="--_number-flow-d-opacity",nt="--_number-flow-d-width",J="--_number-flow-dx",at="--_number-flow-d",kt=(()=>{try{return CSS.registerProperty({name:q,syntax:"<number>",inherits:!1,initialValue:"0"}),CSS.registerProperty({name:J,syntax:"<length>",inherits:!0,initialValue:"0px"}),CSS.registerProperty({name:nt,syntax:"<number>",inherits:!1,initialValue:"0"}),CSS.registerProperty({name:at,syntax:"<number>",inherits:!0,initialValue:"0"}),!0}catch{return!1}})(),ht="var(--number-flow-char-height, 1em)",g="var(--number-flow-mask-height, 0.25em)",C=`calc(${g} / 2)`,tt="var(--number-flow-mask-width, 0.5em)",S=`calc(${tt} / var(--scale-x))`,D="#000 0, transparent 71%",et="span",ot=_t`:host{display:inline-flex;align-items:baseline;direction:ltr;white-space:nowrap;position:relative;line-height:${ht} !important;isolation:isolate;}::slotted(${et}){position:absolute;left:0;top:0;color:transparent !important;will-change:unset !important;z-index:-5;}:host > .number,:host > .section{pointer-events:none;user-select:none;}.number,.number__inner{display:inline-flex;align-items:baseline;transform-origin:left top;}:host([data-will-change]) .number,:host([data-will-change]) .number__inner{will-change:transform;}.number{--scale-x:calc(1 + var(${nt}) / var(--width));transform:translateX(var(${J})) scaleX(var(--scale-x));margin:0 calc(-1 * ${tt});position:relative;z-index:-1;overflow:clip;-webkit-mask-image:linear-gradient( to right,transparent 0,#000 ${S},#000 calc(100% - ${S}),transparent ),linear-gradient( to bottom,transparent 0,#000 ${g},#000 calc(100% - ${g}),transparent 100% ),radial-gradient(at bottom right,${D}),radial-gradient(at bottom left,${D}),radial-gradient(at top left,${D}),radial-gradient(at top right,${D});-webkit-mask-size:100% calc(100% - ${g} * 2),calc(100% - ${S} * 2) 100%,${S} ${g},${S} ${g},${S} ${g},${S} ${g};-webkit-mask-position:center,center,top left,top right,bottom right,bottom left;-webkit-mask-repeat:no-repeat;}.number__inner{padding:0 ${tt};transform:scaleX(calc(1 / var(--scale-x))) translateX(calc(-1 * var(${J})));}.section{display:inline-flex;align-items:baseline;padding-bottom:${C};padding-top:${C};position:relative;isolation:isolate;}.section::after{content:'\200b';display:block;padding:${C} 0;}:host([data-will-change]) .section{will-change:transform;}.section--justify-left{transform-origin:center left;}.section--justify-right{transform-origin:center right;}.section__exiting{position:absolute !important;z-index:-1;}.digit{display:block;position:relative;--c:var(--current) + var(${at});}:host([data-will-change]) .digit,:host([data-will-change]) .digit__num{will-change:transform;}.digit__num{display:block;padding:${C} 0;--offset-raw:mod(10 + var(--n) - mod(var(--c),10),10);--offset:calc(var(--offset-raw) - 10 * round(down,var(--offset-raw) / 5,1));--y:clamp(-100%,var(--offset) * 100%,100%);transform:translateY(var(--y));}.digit__num:not(.is-current){position:absolute;top:0;left:50%;transform:translateX(-50%) translateY(var(--y));}.digit:not(.is-spinning) .digit__num:not(.is-current){display:none;}.symbol{display:inline-flex;align-items:baseline;position:relative;isolation:isolate;padding:${C} 0;}:host([data-will-change]) .symbol{will-change:transform;}.symbol__value{display:block;white-space:pre;}.symbol__exiting{position:absolute;z-index:-1;}.section--justify-left .symbol__exiting{left:0;}.section--justify-right .symbol__exiting{right:0;}.animate-presence{opacity:calc(1 + var(${q}));}`,$t=F?HTMLElement:class{},xt=({formatted:a,willChange:t})=>`<${et} style="font-kerning: none; display: inline-block; line-height: ${ht}; padding: ${g} 0;${t?"will-change: transform":""}">${a}</${et}>`,Et=(a,t)=>a!=null&&t==null?a:a==null&&t!=null?t:a!=null&&t!=null?Math.max(a,t):null;var N,H,k,$,x,y,U,L,R,W,V,E,M,X,z,I,j,G,T,A,v,Y,it,_,K,Z;const ct=St&&bt&&kt;var b;(function(a){a[a.UP=1]="UP",a[a.DOWN=-1]="DOWN",a[a.NONE=0]="NONE"})(b||(b={}));let O;class ft extends $t{constructor(){super(...arguments),this.transformTiming=this.constructor.defaultProps.transformTiming,this.spinTiming=this.constructor.defaultProps.spinTiming,this.opacityTiming=this.constructor.defaultProps.opacityTiming,this.respectMotionPreference=this.constructor.defaultProps.respectMotionPreference,this.trend=this.constructor.defaultProps.trend,this.continuous=this.constructor.defaultProps.continuous,N.set(this,this.constructor.defaultProps.animated),H.set(this,!1),k.set(this,void 0),$.set(this,void 0),x.set(this,void 0),y.set(this,void 0),U.set(this,void 0),L.set(this,s(this,N,"f")),R.set(this,void 0),this.manual=!1,W.set(this,void 0)}get animated(){return s(this,N,"f")}set animated(t){var e;this.animated!==t&&(h(this,N,t,"f"),(e=this.shadowRoot)==null||e.getAnimations().forEach(i=>i.finish()))}get computedTrend(){return s(this,y,"f")}get startingPlace(){return s(this,U,"f")}get computedAnimated(){return s(this,L,"f")}set parts(t){if(t==null)return;const{pre:e,integer:i,fraction:n,post:r,value:l}=t;if(s(this,H,"f")){const o=s(this,R,"f");if(h(this,R,t,"f"),this.trend===!0?h(this,y,Math.sign(l-o.value),"f"):this.trend==="increasing"?h(this,y,b.UP,"f"):this.trend==="decreasing"?h(this,y,b.DOWN,"f"):h(this,y,b.NONE,"f"),h(this,U,void 0,"f"),s(this,y,"f")!==b.NONE&&this.continuous){const u=o.integer.concat(o.fraction).filter(d=>d.type==="integer"||d.type==="fraction"),p=t.integer.concat(t.fraction).filter(d=>d.type==="integer"||d.type==="fraction"),m=u.find(d=>!p.find(c=>c.place===d.place&&c.value===d.value)),P=p.find(d=>!u.find(c=>d.place===c.place&&d.value===c.value));h(this,U,Et(m==null?void 0:m.place,P==null?void 0:P.place),"f")}h(this,L,ct&&s(this,N,"f")&&(!this.respectMotionPreference||!(B!=null&&B.matches))&&gt(this),"f"),this.manual||this.willUpdate(),s(this,k,"f").update(e),s(this,$,"f").update({integer:i,fraction:n}),s(this,x,"f").update(r),this.manual||this.didUpdate()}else{if(h(this,R,t,"f"),this.attachShadow({mode:"open"}),typeof CSSStyleSheet<"u"&&this.shadowRoot.adoptedStyleSheets)O||(O=new CSSStyleSheet,O.replaceSync(ot)),this.shadowRoot.adoptedStyleSheets=[O];else{const o=document.createElement("style");o.textContent=ot,this.shadowRoot.appendChild(o)}this.shadowRoot.appendChild(w("slot")),h(this,k,new lt(this,e,{inert:!0,ariaHidden:"true",justify:"right"}),"f"),this.shadowRoot.appendChild(s(this,k,"f").el),h(this,$,new Mt(this,i,n,{inert:!0,ariaHidden:"true"}),"f"),this.shadowRoot.appendChild(s(this,$,"f").el),h(this,x,new lt(this,r,{inert:!0,ariaHidden:"true",justify:"left"}),"f"),this.shadowRoot.appendChild(s(this,x,"f").el)}h(this,H,!0,"f")}willUpdate(){s(this,k,"f").willUpdate(),s(this,$,"f").willUpdate(),s(this,x,"f").willUpdate()}didUpdate(){if(!s(this,L,"f"))return;s(this,W,"f")?s(this,W,"f").abort():this.dispatchEvent(new Event("animationsstart")),s(this,k,"f").didUpdate(),s(this,$,"f").didUpdate(),s(this,x,"f").didUpdate();const t=new AbortController;Promise.all(this.shadowRoot.getAnimations().map(e=>e.finished)).then(()=>{t.signal.aborted||(this.dispatchEvent(new Event("animationsfinish")),h(this,W,void 0,"f"))}),h(this,W,t,"f")}}N=new WeakMap,H=new WeakMap,k=new WeakMap,$=new WeakMap,x=new WeakMap,y=new WeakMap,U=new WeakMap,L=new WeakMap,R=new WeakMap,W=new WeakMap;ft.defaultProps={transformTiming:{duration:900,easing:"linear(0,.005,.019,.039,.066,.096,.129,.165,.202,.24,.278,.316,.354,.39,.426,.461,.494,.526,.557,.586,.614,.64,.665,.689,.711,.731,.751,.769,.786,.802,.817,.831,.844,.856,.867,.877,.887,.896,.904,.912,.919,.925,.931,.937,.942,.947,.951,.955,.959,.962,.965,.968,.971,.973,.976,.978,.98,.981,.983,.984,.986,.987,.988,.989,.99,.991,.992,.992,.993,.994,.994,.995,.995,.996,.996,.9963,.9967,.9969,.9972,.9975,.9977,.9979,.9981,.9982,.9984,.9985,.9987,.9988,.9989,1)"},spinTiming:void 0,opacityTiming:{duration:450,easing:"ease-out"},animated:!0,trend:!0,continuous:!1,respectMotionPreference:!0};class Mt{constructor(t,e,i,{className:n,...r}={}){this.flow=t,V.set(this,void 0),E.set(this,void 0),M.set(this,void 0),X.set(this,void 0),z.set(this,void 0),h(this,E,new rt(t,e,{justify:"right"}),"f"),h(this,M,new rt(t,i,{justify:"left"}),"f"),h(this,V,w("span",{className:"number__inner"},[s(this,E,"f").el,s(this,M,"f").el]),"f"),this.el=w("span",{...r,className:`number ${n??""}`},[s(this,V,"f")])}willUpdate(){h(this,X,this.el.offsetWidth,"f"),h(this,z,this.el.getBoundingClientRect().left,"f"),s(this,E,"f").willUpdate(),s(this,M,"f").willUpdate()}update({integer:t,fraction:e}){s(this,E,"f").update(t),s(this,M,"f").update(e)}didUpdate(){const t=this.el.getBoundingClientRect();s(this,E,"f").didUpdate(),s(this,M,"f").didUpdate();const e=s(this,z,"f")-t.left,i=this.el.offsetWidth,n=s(this,X,"f")-i;this.el.style.setProperty("--width",String(i)),this.el.animate({[J]:[`${e}px`,"0px"],[nt]:[n,0]},{...this.flow.transformTiming,composite:"accumulate"})}}V=new WeakMap,E=new WeakMap,M=new WeakMap,X=new WeakMap,z=new WeakMap;class dt{constructor(t,e,{justify:i,className:n,...r},l){this.flow=t,this.children=new Map,this.onCharRemove=u=>()=>{this.children.delete(u)},I.set(this,void 0),this.justify=i;const o=e.map(u=>this.addChar(u).el);this.el=w("span",{...r,className:`section section--justify-${i} ${n??""}`},l?l(o):o)}addChar(t,{startDigitsAtZero:e=!1,...i}={}){const n=t.type==="integer"||t.type==="fraction"?new pt(this,t.type,e?0:t.value,t.place,{...i,onRemove:this.onCharRemove(t.key)}):new Pt(this,t.type,t.value,{...i,onRemove:this.onCharRemove(t.key)});return this.children.set(t.key,n),n}unpop(t){t.el.classList.remove("section__exiting"),t.el.style[this.justify]=""}pop(t){t.forEach(e=>{e.el.style[this.justify]=`${mt(e.el,this.justify)}px`}),t.forEach(e=>{e.el.classList.add("section__exiting"),e.present=!1})}addNewAndUpdateExisting(t){const e=new Map,i=new Map,n=this.justify==="left",r=n?"prepend":"append";if(yt(t,l=>{let o;this.children.has(l.key)?(o=this.children.get(l.key),i.set(l,o),this.unpop(o),o.present=!0):(o=this.addChar(l,{startDigitsAtZero:!0,animateIn:!0}),e.set(l,o)),this.el[r](o.el)},{reverse:n}),this.flow.computedAnimated){const l=this.el.getBoundingClientRect();e.forEach(o=>{o.willUpdate(l)})}e.forEach((l,o)=>{l.update(o.value)}),i.forEach((l,o)=>{l.update(o.value)})}willUpdate(){const t=this.el.getBoundingClientRect();h(this,I,t[this.justify],"f"),this.children.forEach(e=>e.willUpdate(t))}didUpdate(){const t=this.el.getBoundingClientRect();this.children.forEach(n=>n.didUpdate(t));const e=t[this.justify],i=s(this,I,"f")-e;this.el.animate({transform:[`translateX(${i}px)`,"none"]},{...this.flow.transformTiming,composite:"accumulate"})}}I=new WeakMap;class rt extends dt{update(t){const e=new Map;this.children.forEach((i,n)=>{t.find(r=>r.key===n)||e.set(n,i),this.unpop(i)}),this.addNewAndUpdateExisting(t),e.forEach(i=>{i instanceof pt&&i.update(0)}),this.pop(e)}}class lt extends dt{update(t){const e=new Map;this.children.forEach((i,n)=>{t.find(r=>r.key===n)||e.set(n,i)}),this.pop(e),this.addNewAndUpdateExisting(t)}}class st{constructor(t,e,{onRemove:i,animateIn:n=!1}={}){this.flow=t,this.el=e,j.set(this,!0),G.set(this,void 0),T.set(this,()=>{var r;this.el.remove(),(r=s(this,G,"f"))==null||r.call(this)}),this.el.classList.add("animate-presence"),this.flow.computedAnimated&&n&&this.el.animate({[q]:[-.9999,0]},{...this.flow.opacityTiming,composite:"accumulate"}),h(this,G,i,"f")}get present(){return s(this,j,"f")}set present(t){if(s(this,j,"f")!==t){if(h(this,j,t,"f"),!this.flow.computedAnimated){t||s(this,T,"f").call(this);return}this.el.style.setProperty("--_number-flow-d-opacity",t?"0":"-.999"),this.el.animate({[q]:t?[-.9999,0]:[.999,0]},{...this.flow.opacityTiming,composite:"accumulate"}),t?this.flow.removeEventListener("animationsfinish",s(this,T,"f")):this.flow.addEventListener("animationsfinish",s(this,T,"f"),{once:!0})}}}j=new WeakMap,G=new WeakMap,T=new WeakMap;class ut extends st{constructor(t,e,i,n){super(t.flow,i,n),this.section=t,this.value=e,this.el=i}}class pt extends ut{constructor(t,e,i,n,r){const l=Array.from({length:10}).map((u,p)=>{const m=w("span",{className:`digit__num${p===i?" is-current":""}`},[document.createTextNode(String(p))]);return m.style.setProperty("--n",String(p)),m}),o=w("span",{className:"digit"},l);o.style.setProperty("--current",String(i)),super(t,i,o,r),this.place=n,A.set(this,void 0),v.set(this,void 0),Y.set(this,void 0),it.set(this,()=>{this.el.classList.remove("is-spinning")}),h(this,A,l,"f")}willUpdate(t){const e=this.el.getBoundingClientRect();h(this,v,this.value,"f");const i=e[this.section.justify]-t[this.section.justify],n=e.width/2;h(this,Y,this.section.justify==="left"?i+n:i-n,"f")}update(t){var e,i;(e=s(this,A,"f")[this.value])==null||e.classList.remove("is-current"),this.el.style.setProperty("--current",String(t)),(i=s(this,A,"f")[t])==null||i.classList.add("is-current"),this.value=t}didUpdate(t){const e=this.el.getBoundingClientRect(),i=e[this.section.justify]-t[this.section.justify],n=e.width/2,r=this.section.justify==="left"?i+n:i-n;this.el.animate({transform:[`translateX(${s(this,Y,"f")-r}px)`,"none"]},{...this.flow.transformTiming,composite:"accumulate"});const l=this.diff;l&&(this.el.classList.add("is-spinning"),this.el.animate({[at]:[-l,0]},{...this.flow.spinTiming??this.flow.transformTiming,composite:"accumulate"}),this.flow.addEventListener("animationsfinish",s(this,it,"f"),{once:!0}))}get diff(){let t=this.flow.computedTrend;const e=this.value-s(this,v,"f");return!e&&this.flow.startingPlace!=null&&this.flow.startingPlace>=this.place?10*t:(t||(t=Math.sign(e)),t===b.DOWN&&this.value>s(this,v,"f")?this.value-10-s(this,v,"f"):t===b.UP&&this.value<s(this,v,"f")?10-s(this,v,"f")+this.value:e)}}A=new WeakMap,v=new WeakMap,Y=new WeakMap,it=new WeakMap;class Pt extends ut{constructor(t,e,i,n){const r=w("span",{className:"symbol__value",textContent:i});super(t,i,w("span",{className:"symbol"},[r]),n),this.type=e,_.set(this,new Map),K.set(this,void 0),Z.set(this,l=>()=>{s(this,_,"f").delete(l)}),s(this,_,"f").set(i,new st(this.flow,r,{onRemove:s(this,Z,"f").call(this,i)}))}willUpdate(t){if(this.type==="decimal")return;const e=this.el.getBoundingClientRect();h(this,K,e[this.section.justify]-t[this.section.justify],"f")}update(t){if(this.value!==t){const e=s(this,_,"f").get(this.value);if(e.present=!1,e.el.classList.add("symbol__exiting"),s(this,_,"f").has(t)){const i=s(this,_,"f").get(t);i.present=!0,i.el.classList.remove("symbol__exiting")}else{const i=w("span",{className:"symbol__value",textContent:t});this.el.appendChild(i),s(this,_,"f").set(t,new st(this.flow,i,{animateIn:!0,onRemove:s(this,Z,"f").call(this,t)}))}}this.value=t}didUpdate(t){if(this.type==="decimal")return;const i=this.el.getBoundingClientRect()[this.section.justify]-t[this.section.justify];this.el.animate({transform:[`translateX(${s(this,K,"f")-i}px)`,"none"]},{...this.flow.transformTiming,composite:"accumulate"})}}_=new WeakMap,K=new WeakMap,Z=new WeakMap;exports.NumberFlowLite=ft;exports.canAnimate=ct;exports.define=wt;exports.partitionParts=vt;exports.prefersReducedMotion=B;exports.render=xt;
package/dist/index.mjs CHANGED
@@ -1,28 +1,31 @@
1
- function n(a, t, e, i) {
1
+ function s(a, t, e, i) {
2
2
  if (e === "a" && !i) throw new TypeError("Private accessor was defined without a getter");
3
3
  if (typeof t == "function" ? a !== t || !i : !t.has(a)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
4
  return e === "m" ? i : e === "a" ? i.call(a) : i ? i.value : t.get(a);
5
5
  }
6
- function h(a, t, e, i, s) {
6
+ function h(a, t, e, i, n) {
7
7
  if (i === "m") throw new TypeError("Private method is not writable");
8
- if (i === "a" && !s) throw new TypeError("Private accessor was defined without a setter");
9
- if (typeof t == "function" ? a !== t || !s : !t.has(a)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
10
- return i === "a" ? s.call(a, e) : s ? s.value = e : t.set(a, e), e;
8
+ if (i === "a" && !n) throw new TypeError("Private accessor was defined without a setter");
9
+ if (typeof t == "function" ? a !== t || !n : !t.has(a)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
10
+ return i === "a" ? n.call(a, e) : n ? n.value = e : t.set(a, e), e;
11
11
  }
12
- const w = (a, t, e) => {
13
- const i = document.createElement(a), [s, r] = Array.isArray(t) ? [void 0, t] : [t, e];
14
- return s && Object.assign(i, s), r == null || r.forEach((l) => i.appendChild(l)), i;
15
- }, ft = (a, t) => {
12
+ const F = typeof window < "u", w = (a, t, e) => {
13
+ const i = document.createElement(a), [n, r] = Array.isArray(t) ? [void 0, t] : [t, e];
14
+ return n && Object.assign(i, n), r == null || r.forEach((l) => i.appendChild(l)), i;
15
+ }, pt = (a, t) => {
16
16
  var e;
17
17
  return t === "left" ? a.offsetLeft : (((e = a.offsetParent instanceof HTMLElement ? a.offsetParent : null) == null ? void 0 : e.offsetWidth) ?? 0) - a.offsetWidth - a.offsetLeft;
18
+ }, ut = (a) => a.offsetWidth > 0 && a.offsetHeight > 0, Et = (a, t) => {
19
+ if (!(!F || customElements.get(a) === t))
20
+ return customElements.define(a, t);
18
21
  };
19
- function dt(a, t, { reverse: e = !1 } = {}) {
22
+ function mt(a, t, { reverse: e = !1 } = {}) {
20
23
  const i = a.length;
21
- for (let s = e ? i - 1 : 0; e ? s >= 0 : s < i; e ? s-- : s++)
22
- t(a[s], s);
24
+ for (let n = e ? i - 1 : 0; e ? n >= 0 : n < i; e ? n-- : n++)
25
+ t(a[n], n);
23
26
  }
24
- function $t(a, t) {
25
- const e = t.formatToParts(a), i = [], s = [], r = [], l = [], o = {}, p = (c) => {
27
+ function Mt(a, t) {
28
+ const e = t.formatToParts(a), i = [], n = [], r = [], l = [], o = {}, p = (c) => {
26
29
  const f = o[c] == null ? o[c] = 0 : ++o[c];
27
30
  return `${c}:${f}`;
28
31
  };
@@ -30,9 +33,9 @@ function $t(a, t) {
30
33
  for (const c of e) {
31
34
  u += c.value;
32
35
  const f = c.type === "minusSign" || c.type === "plusSign" ? "sign" : c.type;
33
- f === "integer" ? (m = !0, s.push(...c.value.split("").map((q) => ({ type: f, value: parseInt(q) })))) : f === "group" ? s.push({ type: f, value: c.value }) : f === "decimal" ? (N = !0, r.push({ type: f, value: c.value, key: p(f) })) : f === "fraction" ? r.push(...c.value.split("").map((q) => ({
36
+ f === "integer" ? (m = !0, n.push(...c.value.split("").map((J) => ({ type: f, value: parseInt(J) })))) : f === "group" ? n.push({ type: f, value: c.value }) : f === "decimal" ? (N = !0, r.push({ type: f, value: c.value, key: p(f) })) : f === "fraction" ? r.push(...c.value.split("").map((J) => ({
34
37
  type: f,
35
- value: parseInt(q),
38
+ value: parseInt(J),
36
39
  key: p(f),
37
40
  place: -1 - o[f]
38
41
  }))) : (m || N ? l : i).push({
@@ -42,8 +45,8 @@ function $t(a, t) {
42
45
  });
43
46
  }
44
47
  const d = [];
45
- for (let c = s.length - 1; c >= 0; c--) {
46
- const f = s[c];
48
+ for (let c = n.length - 1; c >= 0; c--) {
49
+ const f = n[c];
47
50
  d.unshift(f.type === "integer" ? {
48
51
  ...f,
49
52
  key: p(f.type),
@@ -62,26 +65,25 @@ function $t(a, t) {
62
65
  value: typeof a == "string" ? parseFloat(a) : a
63
66
  };
64
67
  }
65
- const T = typeof window < "u", pt = T ? HTMLElement : class {
66
- }, ut = String.raw, mt = T && typeof CSS < "u" && CSS.supports("animation-timing-function", "linear(1,2)"), gt = T && typeof CSS < "u" && CSS.supports("line-height", "mod(1,1)"), J = T ? matchMedia("(prefers-reduced-motion: reduce)") : null, Y = "--_number-flow-d-opacity", it = "--_number-flow-d-width", Z = "--_number-flow-dx", st = "--_number-flow-d", wt = (() => {
68
+ const gt = String.raw, wt = F && typeof CSS < "u" && CSS.supports("animation-timing-function", "linear(1,2)"), yt = F && typeof CSS < "u" && CSS.supports("line-height", "mod(1,1)"), Q = F ? matchMedia("(prefers-reduced-motion: reduce)") : null, Z = "--_number-flow-d-opacity", nt = "--_number-flow-d-width", q = "--_number-flow-dx", at = "--_number-flow-d", _t = (() => {
67
69
  try {
68
70
  return CSS.registerProperty({
69
- name: Y,
71
+ name: Z,
70
72
  syntax: "<number>",
71
73
  inherits: !1,
72
74
  initialValue: "0"
73
75
  }), CSS.registerProperty({
74
- name: Z,
76
+ name: q,
75
77
  syntax: "<length>",
76
78
  inherits: !0,
77
79
  initialValue: "0px"
78
80
  }), CSS.registerProperty({
79
- name: it,
81
+ name: nt,
80
82
  syntax: "<number>",
81
83
  inherits: !1,
82
84
  initialValue: "0"
83
85
  }), CSS.registerProperty({
84
- name: st,
86
+ name: at,
85
87
  syntax: "<number>",
86
88
  inherits: !0,
87
89
  initialValue: "0"
@@ -89,162 +91,166 @@ const T = typeof window < "u", pt = T ? HTMLElement : class {
89
91
  } catch {
90
92
  return !1;
91
93
  }
92
- })(), rt = "var(--number-flow-char-height, 1em)", g = "var(--number-flow-mask-height, 0.25em)", C = `calc(${g} / 2)`, Q = "var(--number-flow-mask-width, 0.5em)", S = `calc(${Q} / var(--scale-x))`, A = "#000 0, transparent 71%", yt = "span", Et = ({ willChange: a }) => ({
93
- fontKerning: "none",
94
- display: "inline-block",
95
- lineHeight: rt,
96
- padding: `${g} 0`,
97
- willChange: a ? "transform" : void 0
98
- }), nt = ut`:host{display:inline-flex;align-items:baseline;direction:ltr;white-space:nowrap;position:relative;line-height:${rt} !important;isolation:isolate;}::slotted(${yt}){position:absolute;left:0;top:0;color:transparent !important;z-index:-5;}:host > .number,:host > .section{pointer-events:none;user-select:none;}.number,.number__inner{display:inline-flex;align-items:baseline;transform-origin:left top;}:host([data-will-change]) .number,:host([data-will-change]) .number__inner{will-change:transform;}.number{--scale-x:calc(1 + var(${it}) / var(--width));transform:translateX(var(${Z})) scaleX(var(--scale-x));margin:0 calc(-1 * ${Q});position:relative;z-index:-1;overflow:clip;-webkit-mask-image:linear-gradient( to right,transparent 0,#000 ${S},#000 calc(100% - ${S}),transparent ),linear-gradient( to bottom,transparent 0,#000 ${g},#000 calc(100% - ${g}),transparent 100% ),radial-gradient(at bottom right,${A}),radial-gradient(at bottom left,${A}),radial-gradient(at top left,${A}),radial-gradient(at top right,${A});-webkit-mask-size:100% calc(100% - ${g} * 2),calc(100% - ${S} * 2) 100%,${S} ${g},${S} ${g},${S} ${g},${S} ${g};-webkit-mask-position:center,center,top left,top right,bottom right,bottom left;-webkit-mask-repeat:no-repeat;}.number__inner{padding:0 ${Q};transform:scaleX(calc(1 / var(--scale-x))) translateX(calc(-1 * var(${Z})));}.section{display:inline-flex;align-items:baseline;padding-bottom:${C};padding-top:${C};position:relative;isolation:isolate;}.section::after{content:'\200b';display:block;padding:${C} 0;}:host([data-will-change]) .section{will-change:transform;}.section--justify-left{transform-origin:center left;}.section--justify-right{transform-origin:center right;}.section__exiting{position:absolute !important;z-index:-1;}.digit{display:block;position:relative;--c:var(--current) + var(${st});}:host([data-will-change]) .digit,:host([data-will-change]) .digit__num{will-change:transform;}.digit__num{display:block;padding:${C} 0;--offset-raw:mod(10 + var(--n) - mod(var(--c),10),10);--offset:calc(var(--offset-raw) - 10 * round(down,var(--offset-raw) / 5,1));--y:clamp(-100%,var(--offset) * 100%,100%);transform:translateY(var(--y));}.digit__num:not(.is-current){position:absolute;top:0;left:50%;transform:translateX(-50%) translateY(var(--y));}.digit:not(.is-spinning) .digit__num:not(.is-current){display:none;}.symbol{display:inline-flex;align-items:baseline;position:relative;isolation:isolate;padding:${C} 0;}:host([data-will-change]) .symbol{will-change:transform;}.symbol__value{display:block;white-space:pre;}.symbol__exiting{position:absolute;z-index:-1;}.section--justify-left .symbol__exiting{left:0;}.section--justify-right .symbol__exiting{right:0;}.animate-presence{opacity:calc(1 + var(${Y}));}`, vt = (a, t) => a != null && t == null ? a : a == null && t != null ? t : a != null && t != null ? Math.max(a, t) : null;
99
- var D, O, x, k, $, y, P, U, W, B, E, M, H, V, X, L, z, j, R, v, I, tt, _, G, K;
100
- const _t = gt && mt && wt;
94
+ })(), ht = "var(--number-flow-char-height, 1em)", g = "var(--number-flow-mask-height, 0.25em)", C = `calc(${g} / 2)`, tt = "var(--number-flow-mask-width, 0.5em)", S = `calc(${tt} / var(--scale-x))`, D = "#000 0, transparent 71%", et = "span", ot = gt`:host{display:inline-flex;align-items:baseline;direction:ltr;white-space:nowrap;position:relative;line-height:${ht} !important;isolation:isolate;}::slotted(${et}){position:absolute;left:0;top:0;color:transparent !important;will-change:unset !important;z-index:-5;}:host > .number,:host > .section{pointer-events:none;user-select:none;}.number,.number__inner{display:inline-flex;align-items:baseline;transform-origin:left top;}:host([data-will-change]) .number,:host([data-will-change]) .number__inner{will-change:transform;}.number{--scale-x:calc(1 + var(${nt}) / var(--width));transform:translateX(var(${q})) scaleX(var(--scale-x));margin:0 calc(-1 * ${tt});position:relative;z-index:-1;overflow:clip;-webkit-mask-image:linear-gradient( to right,transparent 0,#000 ${S},#000 calc(100% - ${S}),transparent ),linear-gradient( to bottom,transparent 0,#000 ${g},#000 calc(100% - ${g}),transparent 100% ),radial-gradient(at bottom right,${D}),radial-gradient(at bottom left,${D}),radial-gradient(at top left,${D}),radial-gradient(at top right,${D});-webkit-mask-size:100% calc(100% - ${g} * 2),calc(100% - ${S} * 2) 100%,${S} ${g},${S} ${g},${S} ${g},${S} ${g};-webkit-mask-position:center,center,top left,top right,bottom right,bottom left;-webkit-mask-repeat:no-repeat;}.number__inner{padding:0 ${tt};transform:scaleX(calc(1 / var(--scale-x))) translateX(calc(-1 * var(${q})));}.section{display:inline-flex;align-items:baseline;padding-bottom:${C};padding-top:${C};position:relative;isolation:isolate;}.section::after{content:'\200b';display:block;padding:${C} 0;}:host([data-will-change]) .section{will-change:transform;}.section--justify-left{transform-origin:center left;}.section--justify-right{transform-origin:center right;}.section__exiting{position:absolute !important;z-index:-1;}.digit{display:block;position:relative;--c:var(--current) + var(${at});}:host([data-will-change]) .digit,:host([data-will-change]) .digit__num{will-change:transform;}.digit__num{display:block;padding:${C} 0;--offset-raw:mod(10 + var(--n) - mod(var(--c),10),10);--offset:calc(var(--offset-raw) - 10 * round(down,var(--offset-raw) / 5,1));--y:clamp(-100%,var(--offset) * 100%,100%);transform:translateY(var(--y));}.digit__num:not(.is-current){position:absolute;top:0;left:50%;transform:translateX(-50%) translateY(var(--y));}.digit:not(.is-spinning) .digit__num:not(.is-current){display:none;}.symbol{display:inline-flex;align-items:baseline;position:relative;isolation:isolate;padding:${C} 0;}:host([data-will-change]) .symbol{will-change:transform;}.symbol__value{display:block;white-space:pre;}.symbol__exiting{position:absolute;z-index:-1;}.section--justify-left .symbol__exiting{left:0;}.section--justify-right .symbol__exiting{right:0;}.animate-presence{opacity:calc(1 + var(${Z}));}`, vt = F ? HTMLElement : class {
95
+ }, Nt = ({ formatted: a, willChange: t }) => `<${et} style="font-kerning: none; display: inline-block; line-height: ${ht}; padding: ${g} 0;${t ? "will-change: transform" : ""}">${a}</${et}>`, bt = (a, t) => a != null && t == null ? a : a == null && t != null ? t : a != null && t != null ? Math.max(a, t) : null;
96
+ var P, B, k, x, $, y, U, L, R, W, H, E, M, V, X, z, j, I, T, A, _, G, it, v, Y, K;
97
+ const St = yt && wt && _t;
101
98
  var b;
102
99
  (function(a) {
103
100
  a[a.UP = 1] = "UP", a[a.DOWN = -1] = "DOWN", a[a.NONE = 0] = "NONE";
104
101
  })(b || (b = {}));
105
- const bt = { duration: 450, easing: "ease-out" }, St = {
106
- duration: 900,
107
- // Make sure to keep this minified:
108
- easing: "linear(0,.005,.019,.039,.066,.096,.129,.165,.202,.24,.278,.316,.354,.39,.426,.461,.494,.526,.557,.586,.614,.64,.665,.689,.711,.731,.751,.769,.786,.802,.817,.831,.844,.856,.867,.877,.887,.896,.904,.912,.919,.925,.931,.937,.942,.947,.951,.955,.959,.962,.965,.968,.971,.973,.976,.978,.98,.981,.983,.984,.986,.987,.988,.989,.99,.991,.992,.992,.993,.994,.994,.995,.995,.996,.996,.9963,.9967,.9969,.9972,.9975,.9977,.9979,.9981,.9982,.9984,.9985,.9987,.9988,.9989,1)"
109
- };
110
- let F;
111
- class Mt extends pt {
102
+ let O;
103
+ class kt extends vt {
112
104
  constructor() {
113
- super(...arguments), this.transformTiming = St, this.opacityTiming = bt, D.set(this, !0), this.manual = !1, this.respectMotionPreference = !0, O.set(this, !1), x.set(this, void 0), k.set(this, void 0), $.set(this, void 0), this.trend = !0, y.set(this, void 0), this.continuous = !1, P.set(this, void 0), U.set(this, void 0), W.set(this, void 0);
105
+ super(...arguments), this.transformTiming = this.constructor.defaultProps.transformTiming, this.spinTiming = this.constructor.defaultProps.spinTiming, this.opacityTiming = this.constructor.defaultProps.opacityTiming, this.respectMotionPreference = this.constructor.defaultProps.respectMotionPreference, this.trend = this.constructor.defaultProps.trend, this.continuous = this.constructor.defaultProps.continuous, P.set(this, this.constructor.defaultProps.animated), B.set(this, !1), k.set(this, void 0), x.set(this, void 0), $.set(this, void 0), y.set(this, void 0), U.set(this, void 0), L.set(this, s(this, P, "f")), R.set(this, void 0), this.manual = !1, W.set(this, void 0);
114
106
  }
115
- static define() {
116
- T && customElements.define("number-flow", this);
107
+ get animated() {
108
+ return s(this, P, "f");
117
109
  }
118
- get startingPlace() {
119
- return n(this, P, "f");
110
+ set animated(t) {
111
+ var e;
112
+ this.animated !== t && (h(this, P, t, "f"), (e = this.shadowRoot) == null || e.getAnimations().forEach((i) => i.finish()));
120
113
  }
121
114
  get computedTrend() {
122
- return n(this, y, "f");
115
+ return s(this, y, "f");
116
+ }
117
+ get startingPlace() {
118
+ return s(this, U, "f");
119
+ }
120
+ get computedAnimated() {
121
+ return s(this, L, "f");
123
122
  }
124
123
  set parts(t) {
125
124
  if (t == null)
126
125
  return;
127
- const { pre: e, integer: i, fraction: s, post: r, value: l } = t;
128
- if (n(this, O, "f")) {
129
- const o = n(this, U, "f");
130
- if (h(this, U, t, "f"), this.trend === !0 ? h(this, y, Math.sign(l - o.value), "f") : this.trend === "increasing" ? h(this, y, b.UP, "f") : this.trend === "decreasing" ? h(this, y, b.DOWN, "f") : h(this, y, b.NONE, "f"), h(this, P, void 0, "f"), n(this, y, "f") !== b.NONE && this.continuous) {
126
+ const { pre: e, integer: i, fraction: n, post: r, value: l } = t;
127
+ if (s(this, B, "f")) {
128
+ const o = s(this, R, "f");
129
+ if (h(this, R, t, "f"), this.trend === !0 ? h(this, y, Math.sign(l - o.value), "f") : this.trend === "increasing" ? h(this, y, b.UP, "f") : this.trend === "decreasing" ? h(this, y, b.DOWN, "f") : h(this, y, b.NONE, "f"), h(this, U, void 0, "f"), s(this, y, "f") !== b.NONE && this.continuous) {
131
130
  const p = o.integer.concat(o.fraction).filter((d) => d.type === "integer" || d.type === "fraction"), u = t.integer.concat(t.fraction).filter((d) => d.type === "integer" || d.type === "fraction"), m = p.find((d) => !u.find((c) => c.place === d.place && c.value === d.value)), N = u.find((d) => !p.find((c) => d.place === c.place && d.value === c.value));
132
- h(this, P, vt(m == null ? void 0 : m.place, N == null ? void 0 : N.place), "f");
131
+ h(this, U, bt(m == null ? void 0 : m.place, N == null ? void 0 : N.place), "f");
133
132
  }
134
- this.manual || this.willUpdate(), n(this, x, "f").update(e), n(this, k, "f").update({ integer: i, fraction: s }), n(this, $, "f").update(r), this.manual || this.didUpdate();
133
+ h(this, L, St && s(this, P, "f") && (!this.respectMotionPreference || !(Q != null && Q.matches)) && // https://github.com/barvian/number-flow/issues/9
134
+ ut(this), "f"), this.manual || this.willUpdate(), s(this, k, "f").update(e), s(this, x, "f").update({ integer: i, fraction: n }), s(this, $, "f").update(r), this.manual || this.didUpdate();
135
135
  } else {
136
- if (h(this, U, t, "f"), this.attachShadow({ mode: "open" }), typeof CSSStyleSheet < "u" && this.shadowRoot.adoptedStyleSheets)
137
- F || (F = new CSSStyleSheet(), F.replaceSync(nt)), this.shadowRoot.adoptedStyleSheets = [F];
136
+ if (h(this, R, t, "f"), this.attachShadow({ mode: "open" }), typeof CSSStyleSheet < "u" && this.shadowRoot.adoptedStyleSheets)
137
+ O || (O = new CSSStyleSheet(), O.replaceSync(ot)), this.shadowRoot.adoptedStyleSheets = [O];
138
138
  else {
139
139
  const o = document.createElement("style");
140
- o.textContent = nt, this.shadowRoot.appendChild(o);
140
+ o.textContent = ot, this.shadowRoot.appendChild(o);
141
141
  }
142
- this.shadowRoot.appendChild(w("slot")), h(this, x, new ot(this, e, {
142
+ this.shadowRoot.appendChild(w("slot")), h(this, k, new lt(this, e, {
143
143
  inert: !0,
144
144
  ariaHidden: "true",
145
145
  justify: "right"
146
- }), "f"), this.shadowRoot.appendChild(n(this, x, "f").el), h(this, k, new xt(this, i, s, {
146
+ }), "f"), this.shadowRoot.appendChild(s(this, k, "f").el), h(this, x, new xt(this, i, n, {
147
147
  inert: !0,
148
148
  ariaHidden: "true"
149
- }), "f"), this.shadowRoot.appendChild(n(this, k, "f").el), h(this, $, new ot(this, r, {
149
+ }), "f"), this.shadowRoot.appendChild(s(this, x, "f").el), h(this, $, new lt(this, r, {
150
150
  inert: !0,
151
151
  ariaHidden: "true",
152
152
  justify: "left"
153
- }), "f"), this.shadowRoot.appendChild(n(this, $, "f").el);
153
+ }), "f"), this.shadowRoot.appendChild(s(this, $, "f").el);
154
154
  }
155
- h(this, O, !0, "f");
155
+ h(this, B, !0, "f");
156
156
  }
157
157
  willUpdate() {
158
- this.animated && (n(this, x, "f").willUpdate(), n(this, k, "f").willUpdate(), n(this, $, "f").willUpdate());
158
+ s(this, k, "f").willUpdate(), s(this, x, "f").willUpdate(), s(this, $, "f").willUpdate();
159
159
  }
160
160
  didUpdate() {
161
- if (!this.animated)
161
+ if (!s(this, L, "f"))
162
162
  return;
163
- n(this, W, "f") ? n(this, W, "f").abort() : this.dispatchEvent(new Event("animationsstart")), n(this, x, "f").didUpdate(), n(this, k, "f").didUpdate(), n(this, $, "f").didUpdate();
163
+ s(this, W, "f") ? s(this, W, "f").abort() : this.dispatchEvent(new Event("animationsstart")), s(this, k, "f").didUpdate(), s(this, x, "f").didUpdate(), s(this, $, "f").didUpdate();
164
164
  const t = new AbortController();
165
165
  Promise.all(this.shadowRoot.getAnimations().map((e) => e.finished)).then(() => {
166
166
  t.signal.aborted || (this.dispatchEvent(new Event("animationsfinish")), h(this, W, void 0, "f"));
167
167
  }), h(this, W, t, "f");
168
168
  }
169
- get animated() {
170
- return _t && n(this, D, "f") && (!this.respectMotionPreference || !(J != null && J.matches));
171
- }
172
- set animated(t) {
173
- var e;
174
- this.animated !== t && (h(this, D, t, "f"), (e = this.shadowRoot) == null || e.getAnimations().forEach((i) => i.finish()));
175
- }
176
169
  }
177
- D = /* @__PURE__ */ new WeakMap(), O = /* @__PURE__ */ new WeakMap(), x = /* @__PURE__ */ new WeakMap(), k = /* @__PURE__ */ new WeakMap(), $ = /* @__PURE__ */ new WeakMap(), y = /* @__PURE__ */ new WeakMap(), P = /* @__PURE__ */ new WeakMap(), U = /* @__PURE__ */ new WeakMap(), W = /* @__PURE__ */ new WeakMap();
170
+ P = /* @__PURE__ */ new WeakMap(), B = /* @__PURE__ */ new WeakMap(), k = /* @__PURE__ */ new WeakMap(), x = /* @__PURE__ */ new WeakMap(), $ = /* @__PURE__ */ new WeakMap(), y = /* @__PURE__ */ new WeakMap(), U = /* @__PURE__ */ new WeakMap(), L = /* @__PURE__ */ new WeakMap(), R = /* @__PURE__ */ new WeakMap(), W = /* @__PURE__ */ new WeakMap();
171
+ kt.defaultProps = {
172
+ transformTiming: {
173
+ duration: 900,
174
+ // Make sure to keep this minified:
175
+ easing: "linear(0,.005,.019,.039,.066,.096,.129,.165,.202,.24,.278,.316,.354,.39,.426,.461,.494,.526,.557,.586,.614,.64,.665,.689,.711,.731,.751,.769,.786,.802,.817,.831,.844,.856,.867,.877,.887,.896,.904,.912,.919,.925,.931,.937,.942,.947,.951,.955,.959,.962,.965,.968,.971,.973,.976,.978,.98,.981,.983,.984,.986,.987,.988,.989,.99,.991,.992,.992,.993,.994,.994,.995,.995,.996,.996,.9963,.9967,.9969,.9972,.9975,.9977,.9979,.9981,.9982,.9984,.9985,.9987,.9988,.9989,1)"
176
+ },
177
+ spinTiming: void 0,
178
+ opacityTiming: { duration: 450, easing: "ease-out" },
179
+ animated: !0,
180
+ trend: !0,
181
+ continuous: !1,
182
+ respectMotionPreference: !0
183
+ };
178
184
  class xt {
179
- constructor(t, e, i, { className: s, ...r } = {}) {
180
- this.flow = t, B.set(this, void 0), E.set(this, void 0), M.set(this, void 0), H.set(this, void 0), V.set(this, void 0), h(this, E, new at(t, e, {
185
+ constructor(t, e, i, { className: n, ...r } = {}) {
186
+ this.flow = t, H.set(this, void 0), E.set(this, void 0), M.set(this, void 0), V.set(this, void 0), X.set(this, void 0), h(this, E, new rt(t, e, {
181
187
  justify: "right"
182
- }), "f"), h(this, M, new at(t, i, {
188
+ }), "f"), h(this, M, new rt(t, i, {
183
189
  justify: "left"
184
- }), "f"), h(this, B, w("span", {
190
+ }), "f"), h(this, H, w("span", {
185
191
  className: "number__inner"
186
- }, [n(this, E, "f").el, n(this, M, "f").el]), "f"), this.el = w("span", {
192
+ }, [s(this, E, "f").el, s(this, M, "f").el]), "f"), this.el = w("span", {
187
193
  ...r,
188
- className: `number ${s ?? ""}`
189
- }, [n(this, B, "f")]);
194
+ className: `number ${n ?? ""}`
195
+ }, [s(this, H, "f")]);
190
196
  }
191
197
  willUpdate() {
192
- h(this, H, this.el.offsetWidth, "f"), h(this, V, this.el.getBoundingClientRect().left, "f"), n(this, E, "f").willUpdate(), n(this, M, "f").willUpdate();
198
+ h(this, V, this.el.offsetWidth, "f"), h(this, X, this.el.getBoundingClientRect().left, "f"), s(this, E, "f").willUpdate(), s(this, M, "f").willUpdate();
193
199
  }
194
200
  update({ integer: t, fraction: e }) {
195
- n(this, E, "f").update(t), n(this, M, "f").update(e);
201
+ s(this, E, "f").update(t), s(this, M, "f").update(e);
196
202
  }
197
203
  didUpdate() {
198
204
  const t = this.el.getBoundingClientRect();
199
- n(this, E, "f").didUpdate(), n(this, M, "f").didUpdate();
200
- const e = n(this, V, "f") - t.left, i = this.el.offsetWidth, s = n(this, H, "f") - i;
205
+ s(this, E, "f").didUpdate(), s(this, M, "f").didUpdate();
206
+ const e = s(this, X, "f") - t.left, i = this.el.offsetWidth, n = s(this, V, "f") - i;
201
207
  this.el.style.setProperty("--width", String(i)), this.el.animate({
202
- [Z]: [`${e}px`, "0px"],
203
- [it]: [s, 0]
208
+ [q]: [`${e}px`, "0px"],
209
+ [nt]: [n, 0]
204
210
  }, {
205
211
  ...this.flow.transformTiming,
206
212
  composite: "accumulate"
207
213
  });
208
214
  }
209
215
  }
210
- B = /* @__PURE__ */ new WeakMap(), E = /* @__PURE__ */ new WeakMap(), M = /* @__PURE__ */ new WeakMap(), H = /* @__PURE__ */ new WeakMap(), V = /* @__PURE__ */ new WeakMap();
211
- class lt {
212
- constructor(t, e, { justify: i, className: s, ...r }, l) {
216
+ H = /* @__PURE__ */ new WeakMap(), E = /* @__PURE__ */ new WeakMap(), M = /* @__PURE__ */ new WeakMap(), V = /* @__PURE__ */ new WeakMap(), X = /* @__PURE__ */ new WeakMap();
217
+ class ct {
218
+ constructor(t, e, { justify: i, className: n, ...r }, l) {
213
219
  this.flow = t, this.children = /* @__PURE__ */ new Map(), this.onCharRemove = (p) => () => {
214
220
  this.children.delete(p);
215
- }, X.set(this, void 0), this.justify = i;
221
+ }, z.set(this, void 0), this.justify = i;
216
222
  const o = e.map((p) => this.addChar(p).el);
217
223
  this.el = w("span", {
218
224
  ...r,
219
- className: `section section--justify-${i} ${s ?? ""}`
225
+ className: `section section--justify-${i} ${n ?? ""}`
220
226
  }, l ? l(o) : o);
221
227
  }
222
228
  addChar(t, { startDigitsAtZero: e = !1, ...i } = {}) {
223
- const s = t.type === "integer" || t.type === "fraction" ? new ct(this, t.type, e ? 0 : t.value, t.place, {
229
+ const n = t.type === "integer" || t.type === "fraction" ? new dt(this, t.type, e ? 0 : t.value, t.place, {
224
230
  ...i,
225
231
  onRemove: this.onCharRemove(t.key)
226
- }) : new kt(this, t.type, t.value, {
232
+ }) : new $t(this, t.type, t.value, {
227
233
  ...i,
228
234
  onRemove: this.onCharRemove(t.key)
229
235
  });
230
- return this.children.set(t.key, s), s;
236
+ return this.children.set(t.key, n), n;
231
237
  }
232
238
  unpop(t) {
233
239
  t.el.classList.remove("section__exiting"), t.el.style[this.justify] = "";
234
240
  }
235
241
  pop(t) {
236
242
  t.forEach((e) => {
237
- e.el.style[this.justify] = `${ft(e.el, this.justify)}px`;
243
+ e.el.style[this.justify] = `${pt(e.el, this.justify)}px`;
238
244
  }), t.forEach((e) => {
239
245
  e.el.classList.add("section__exiting"), e.present = !1;
240
246
  });
241
247
  }
242
248
  addNewAndUpdateExisting(t) {
243
- const e = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map(), s = this.justify === "left", r = s ? "prepend" : "append";
244
- if (dt(t, (l) => {
249
+ const e = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map(), n = this.justify === "left", r = n ? "prepend" : "append";
250
+ if (mt(t, (l) => {
245
251
  let o;
246
252
  this.children.has(l.key) ? (o = this.children.get(l.key), i.set(l, o), this.unpop(o), o.present = !0) : (o = this.addChar(l, { startDigitsAtZero: !0, animateIn: !0 }), e.set(l, o)), this.el[r](o.el);
247
- }, { reverse: s }), this.flow.animated) {
253
+ }, { reverse: n }), this.flow.computedAnimated) {
248
254
  const l = this.el.getBoundingClientRect();
249
255
  e.forEach((o) => {
250
256
  o.willUpdate(l);
@@ -258,12 +264,12 @@ class lt {
258
264
  }
259
265
  willUpdate() {
260
266
  const t = this.el.getBoundingClientRect();
261
- h(this, X, t[this.justify], "f"), this.children.forEach((e) => e.willUpdate(t));
267
+ h(this, z, t[this.justify], "f"), this.children.forEach((e) => e.willUpdate(t));
262
268
  }
263
269
  didUpdate() {
264
270
  const t = this.el.getBoundingClientRect();
265
- this.children.forEach((s) => s.didUpdate(t));
266
- const e = t[this.justify], i = n(this, X, "f") - e;
271
+ this.children.forEach((n) => n.didUpdate(t));
272
+ const e = t[this.justify], i = s(this, z, "f") - e;
267
273
  this.el.animate({
268
274
  transform: [`translateX(${i}px)`, "none"]
269
275
  }, {
@@ -272,142 +278,142 @@ class lt {
272
278
  });
273
279
  }
274
280
  }
275
- X = /* @__PURE__ */ new WeakMap();
276
- class at extends lt {
281
+ z = /* @__PURE__ */ new WeakMap();
282
+ class rt extends ct {
277
283
  update(t) {
278
284
  const e = /* @__PURE__ */ new Map();
279
- this.children.forEach((i, s) => {
280
- t.find((r) => r.key === s) || e.set(s, i), this.unpop(i);
285
+ this.children.forEach((i, n) => {
286
+ t.find((r) => r.key === n) || e.set(n, i), this.unpop(i);
281
287
  }), this.addNewAndUpdateExisting(t), e.forEach((i) => {
282
- i instanceof ct && i.update(0);
288
+ i instanceof dt && i.update(0);
283
289
  }), this.pop(e);
284
290
  }
285
291
  }
286
- class ot extends lt {
292
+ class lt extends ct {
287
293
  update(t) {
288
294
  const e = /* @__PURE__ */ new Map();
289
- this.children.forEach((i, s) => {
290
- t.find((r) => r.key === s) || e.set(s, i);
295
+ this.children.forEach((i, n) => {
296
+ t.find((r) => r.key === n) || e.set(n, i);
291
297
  }), this.pop(e), this.addNewAndUpdateExisting(t);
292
298
  }
293
299
  }
294
- class et {
295
- constructor(t, e, { onRemove: i, animateIn: s = !1 } = {}) {
296
- this.flow = t, this.el = e, L.set(this, !0), z.set(this, void 0), j.set(this, () => {
300
+ class st {
301
+ constructor(t, e, { onRemove: i, animateIn: n = !1 } = {}) {
302
+ this.flow = t, this.el = e, j.set(this, !0), I.set(this, void 0), T.set(this, () => {
297
303
  var r;
298
- this.el.remove(), (r = n(this, z, "f")) == null || r.call(this);
299
- }), this.el.classList.add("animate-presence"), this.flow.animated && s && this.el.animate({
300
- [Y]: [-0.9999, 0]
304
+ this.el.remove(), (r = s(this, I, "f")) == null || r.call(this);
305
+ }), this.el.classList.add("animate-presence"), this.flow.computedAnimated && n && this.el.animate({
306
+ [Z]: [-0.9999, 0]
301
307
  }, {
302
308
  ...this.flow.opacityTiming,
303
309
  composite: "accumulate"
304
- }), h(this, z, i, "f");
310
+ }), h(this, I, i, "f");
305
311
  }
306
312
  get present() {
307
- return n(this, L, "f");
313
+ return s(this, j, "f");
308
314
  }
309
315
  set present(t) {
310
- if (n(this, L, "f") !== t) {
311
- if (h(this, L, t, "f"), !this.flow.animated) {
312
- t || n(this, j, "f").call(this);
316
+ if (s(this, j, "f") !== t) {
317
+ if (h(this, j, t, "f"), !this.flow.computedAnimated) {
318
+ t || s(this, T, "f").call(this);
313
319
  return;
314
320
  }
315
321
  this.el.style.setProperty("--_number-flow-d-opacity", t ? "0" : "-.999"), this.el.animate({
316
- [Y]: t ? [-0.9999, 0] : [0.999, 0]
322
+ [Z]: t ? [-0.9999, 0] : [0.999, 0]
317
323
  }, {
318
324
  ...this.flow.opacityTiming,
319
325
  composite: "accumulate"
320
- }), t ? this.flow.removeEventListener("animationsfinish", n(this, j, "f")) : this.flow.addEventListener("animationsfinish", n(this, j, "f"), {
326
+ }), t ? this.flow.removeEventListener("animationsfinish", s(this, T, "f")) : this.flow.addEventListener("animationsfinish", s(this, T, "f"), {
321
327
  once: !0
322
328
  });
323
329
  }
324
330
  }
325
331
  }
326
- L = /* @__PURE__ */ new WeakMap(), z = /* @__PURE__ */ new WeakMap(), j = /* @__PURE__ */ new WeakMap();
327
- class ht extends et {
328
- constructor(t, e, i, s) {
329
- super(t.flow, i, s), this.section = t, this.value = e, this.el = i;
332
+ j = /* @__PURE__ */ new WeakMap(), I = /* @__PURE__ */ new WeakMap(), T = /* @__PURE__ */ new WeakMap();
333
+ class ft extends st {
334
+ constructor(t, e, i, n) {
335
+ super(t.flow, i, n), this.section = t, this.value = e, this.el = i;
330
336
  }
331
337
  }
332
- class ct extends ht {
333
- constructor(t, e, i, s, r) {
338
+ class dt extends ft {
339
+ constructor(t, e, i, n, r) {
334
340
  const l = Array.from({ length: 10 }).map((p, u) => {
335
341
  const m = w("span", { className: `digit__num${u === i ? " is-current" : ""}` }, [document.createTextNode(String(u))]);
336
342
  return m.style.setProperty("--n", String(u)), m;
337
343
  }), o = w("span", {
338
344
  className: "digit"
339
345
  }, l);
340
- o.style.setProperty("--current", String(i)), super(t, i, o, r), this.place = s, R.set(this, void 0), v.set(this, void 0), I.set(this, void 0), tt.set(this, () => {
346
+ o.style.setProperty("--current", String(i)), super(t, i, o, r), this.place = n, A.set(this, void 0), _.set(this, void 0), G.set(this, void 0), it.set(this, () => {
341
347
  this.el.classList.remove("is-spinning");
342
- }), h(this, R, l, "f");
348
+ }), h(this, A, l, "f");
343
349
  }
344
350
  willUpdate(t) {
345
351
  const e = this.el.getBoundingClientRect();
346
- h(this, v, this.value, "f");
347
- const i = e[this.section.justify] - t[this.section.justify], s = e.width / 2;
348
- h(this, I, this.section.justify === "left" ? i + s : i - s, "f");
352
+ h(this, _, this.value, "f");
353
+ const i = e[this.section.justify] - t[this.section.justify], n = e.width / 2;
354
+ h(this, G, this.section.justify === "left" ? i + n : i - n, "f");
349
355
  }
350
356
  update(t) {
351
357
  var e, i;
352
- (e = n(this, R, "f")[this.value]) == null || e.classList.remove("is-current"), this.el.style.setProperty("--current", String(t)), (i = n(this, R, "f")[t]) == null || i.classList.add("is-current"), this.value = t;
358
+ (e = s(this, A, "f")[this.value]) == null || e.classList.remove("is-current"), this.el.style.setProperty("--current", String(t)), (i = s(this, A, "f")[t]) == null || i.classList.add("is-current"), this.value = t;
353
359
  }
354
360
  didUpdate(t) {
355
- const e = this.el.getBoundingClientRect(), i = e[this.section.justify] - t[this.section.justify], s = e.width / 2, r = this.section.justify === "left" ? i + s : i - s;
361
+ const e = this.el.getBoundingClientRect(), i = e[this.section.justify] - t[this.section.justify], n = e.width / 2, r = this.section.justify === "left" ? i + n : i - n;
356
362
  this.el.animate({
357
- transform: [`translateX(${n(this, I, "f") - r}px)`, "none"]
363
+ transform: [`translateX(${s(this, G, "f") - r}px)`, "none"]
358
364
  }, {
359
365
  ...this.flow.transformTiming,
360
366
  composite: "accumulate"
361
367
  });
362
368
  const l = this.diff;
363
369
  l && (this.el.classList.add("is-spinning"), this.el.animate({
364
- [st]: [-l, 0]
370
+ [at]: [-l, 0]
365
371
  }, {
366
372
  ...this.flow.spinTiming ?? this.flow.transformTiming,
367
373
  composite: "accumulate"
368
- }), this.flow.addEventListener("animationsfinish", n(this, tt, "f"), { once: !0 }));
374
+ }), this.flow.addEventListener("animationsfinish", s(this, it, "f"), { once: !0 }));
369
375
  }
370
376
  get diff() {
371
377
  let t = this.flow.computedTrend;
372
- const e = this.value - n(this, v, "f");
373
- return !e && this.flow.startingPlace != null && this.flow.startingPlace >= this.place ? 10 * t : (t || (t = Math.sign(e)), t === b.DOWN && this.value > n(this, v, "f") ? this.value - 10 - n(this, v, "f") : t === b.UP && this.value < n(this, v, "f") ? 10 - n(this, v, "f") + this.value : e);
378
+ const e = this.value - s(this, _, "f");
379
+ return !e && this.flow.startingPlace != null && this.flow.startingPlace >= this.place ? 10 * t : (t || (t = Math.sign(e)), t === b.DOWN && this.value > s(this, _, "f") ? this.value - 10 - s(this, _, "f") : t === b.UP && this.value < s(this, _, "f") ? 10 - s(this, _, "f") + this.value : e);
374
380
  }
375
381
  }
376
- R = /* @__PURE__ */ new WeakMap(), v = /* @__PURE__ */ new WeakMap(), I = /* @__PURE__ */ new WeakMap(), tt = /* @__PURE__ */ new WeakMap();
377
- class kt extends ht {
378
- constructor(t, e, i, s) {
382
+ A = /* @__PURE__ */ new WeakMap(), _ = /* @__PURE__ */ new WeakMap(), G = /* @__PURE__ */ new WeakMap(), it = /* @__PURE__ */ new WeakMap();
383
+ class $t extends ft {
384
+ constructor(t, e, i, n) {
379
385
  const r = w("span", {
380
386
  className: "symbol__value",
381
387
  textContent: i
382
388
  });
383
389
  super(t, i, w("span", {
384
390
  className: "symbol"
385
- }, [r]), s), this.type = e, _.set(this, /* @__PURE__ */ new Map()), G.set(this, void 0), K.set(this, (l) => () => {
386
- n(this, _, "f").delete(l);
387
- }), n(this, _, "f").set(i, new et(this.flow, r, {
388
- onRemove: n(this, K, "f").call(this, i)
391
+ }, [r]), n), this.type = e, v.set(this, /* @__PURE__ */ new Map()), Y.set(this, void 0), K.set(this, (l) => () => {
392
+ s(this, v, "f").delete(l);
393
+ }), s(this, v, "f").set(i, new st(this.flow, r, {
394
+ onRemove: s(this, K, "f").call(this, i)
389
395
  }));
390
396
  }
391
397
  willUpdate(t) {
392
398
  if (this.type === "decimal")
393
399
  return;
394
400
  const e = this.el.getBoundingClientRect();
395
- h(this, G, e[this.section.justify] - t[this.section.justify], "f");
401
+ h(this, Y, e[this.section.justify] - t[this.section.justify], "f");
396
402
  }
397
403
  update(t) {
398
404
  if (this.value !== t) {
399
- const e = n(this, _, "f").get(this.value);
400
- if (e.present = !1, e.el.classList.add("symbol__exiting"), n(this, _, "f").has(t)) {
401
- const i = n(this, _, "f").get(t);
405
+ const e = s(this, v, "f").get(this.value);
406
+ if (e.present = !1, e.el.classList.add("symbol__exiting"), s(this, v, "f").has(t)) {
407
+ const i = s(this, v, "f").get(t);
402
408
  i.present = !0, i.el.classList.remove("symbol__exiting");
403
409
  } else {
404
410
  const i = w("span", {
405
411
  className: "symbol__value",
406
412
  textContent: t
407
413
  });
408
- this.el.appendChild(i), n(this, _, "f").set(t, new et(this.flow, i, {
414
+ this.el.appendChild(i), s(this, v, "f").set(t, new st(this.flow, i, {
409
415
  animateIn: !0,
410
- onRemove: n(this, K, "f").call(this, t)
416
+ onRemove: s(this, K, "f").call(this, t)
411
417
  }));
412
418
  }
413
419
  }
@@ -418,18 +424,16 @@ class kt extends ht {
418
424
  return;
419
425
  const i = this.el.getBoundingClientRect()[this.section.justify] - t[this.section.justify];
420
426
  this.el.animate({
421
- transform: [`translateX(${n(this, G, "f") - i}px)`, "none"]
427
+ transform: [`translateX(${s(this, Y, "f") - i}px)`, "none"]
422
428
  }, { ...this.flow.transformTiming, composite: "accumulate" });
423
429
  }
424
430
  }
425
- _ = /* @__PURE__ */ new WeakMap(), G = /* @__PURE__ */ new WeakMap(), K = /* @__PURE__ */ new WeakMap();
431
+ v = /* @__PURE__ */ new WeakMap(), Y = /* @__PURE__ */ new WeakMap(), K = /* @__PURE__ */ new WeakMap();
426
432
  export {
427
- Mt as NumberFlowLite,
428
- yt as SlottedTag,
429
- _t as canAnimate,
430
- bt as defaultOpacityTiming,
431
- St as defaultTransformTiming,
432
- $t as partitionParts,
433
- J as prefersReducedMotion,
434
- Et as slottedStyles
433
+ kt as NumberFlowLite,
434
+ St as canAnimate,
435
+ Et as define,
436
+ Mt as partitionParts,
437
+ Q as prefersReducedMotion,
438
+ Nt as render
435
439
  };
package/dist/ssr.d.ts CHANGED
@@ -1,4 +1,10 @@
1
+ import type { PartitionedParts } from './formatter';
1
2
  export declare const ServerSafeHTMLElement: {
2
3
  new (): HTMLElement;
3
4
  prototype: HTMLElement;
4
5
  };
6
+ export type RenderProps = {
7
+ formatted: PartitionedParts['formatted'];
8
+ willChange?: boolean;
9
+ };
10
+ export declare const render: ({ formatted, willChange }: RenderProps) => string;
package/dist/styles.d.ts CHANGED
@@ -9,14 +9,5 @@ export declare const supportsAtProperty: boolean;
9
9
  export declare const charHeight = "var(--number-flow-char-height, 1em)";
10
10
  export declare const maskHeight = "var(--number-flow-mask-height, 0.25em)";
11
11
  export declare const SlottedTag = "span";
12
- export declare const slottedStyles: ({ willChange }: {
13
- willChange?: boolean;
14
- }) => {
15
- readonly fontKerning: "none";
16
- readonly display: "inline-block";
17
- readonly lineHeight: "var(--number-flow-char-height, 1em)";
18
- readonly padding: "var(--number-flow-mask-height, 0.25em) 0";
19
- readonly willChange: "transform" | undefined;
20
- };
21
12
  declare const styles: string;
22
13
  export default styles;
@@ -7,4 +7,6 @@ export type HTMLProps<K extends keyof HTMLElementTagNameMap> = Partial<ExcludeRe
7
7
  export declare const createElement: <K extends keyof HTMLElementTagNameMap>(tagName: K, optionsOrChildren?: HTMLProps<K> | Node[], _children?: Node[]) => HTMLElementTagNameMap[K];
8
8
  export type Justify = 'left' | 'right';
9
9
  export declare const offset: (el: HTMLElement, justify: Justify) => number;
10
+ export declare const visible: (el: HTMLElement) => boolean;
11
+ export declare const define: (name: string, constructor: CustomElementConstructor) => void;
10
12
  export {};
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.3.3",
6
+ "version": "0.3.5",
7
7
  "author": {
8
8
  "name": "Maxwell Barvian",
9
9
  "email": "max@barvian.me",