UNPKG

@anoki/fse-marche-ui

Version:

FSE UI components library

3 lines (2 loc) 5.41 kB
"use strict";const o=require("./index.cjs118.js"),h=require("./index.cjs3.js"),v=require("./index.cjs4.js"),m=require("./index.cjs130.js"),V=require("./index.cjs131.js"),S=require("./index.cjs121.js"),O=require("./index.cjs129.js"),f="Invalid Interval";function D(c,t){return!c||!c.isValid?a.invalid("missing or invalid start"):!t||!t.isValid?a.invalid("missing or invalid end"):t<c?a.invalid("end before start",`The end of an interval must be after its start, but you had start=${c.toISO()} and end=${t.toISO()}`):null}class a{constructor(t){this.s=t.start,this.e=t.end,this.invalid=t.invalid||null,this.isLuxonInterval=!0}static invalid(t,i=null){if(!t)throw new m.InvalidArgumentError("need to specify a reason the Interval is invalid");const e=t instanceof V?t:new V(t,i);if(v.throwOnInvalid)throw new m.InvalidIntervalError(e);return new a({invalid:e})}static fromDateTimes(t,i){const e=o.friendlyDateTime(t),s=o.friendlyDateTime(i),r=D(e,s);return r??new a({start:e,end:s})}static after(t,i){const e=h.default.fromDurationLike(i),s=o.friendlyDateTime(t);return a.fromDateTimes(s,s.plus(e))}static before(t,i){const e=h.default.fromDurationLike(i),s=o.friendlyDateTime(t);return a.fromDateTimes(s.minus(e),s)}static fromISO(t,i){const[e,s]=(t||"").split("/",2);if(e&&s){let r,n;try{r=o.default.fromISO(e,i),n=r.isValid}catch{n=!1}let u,l;try{u=o.default.fromISO(s,i),l=u.isValid}catch{l=!1}if(n&&l)return a.fromDateTimes(r,u);if(n){const d=h.default.fromISO(s,i);if(d.isValid)return a.after(r,d)}else if(l){const d=h.default.fromISO(e,i);if(d.isValid)return a.before(u,d)}}return a.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static isInterval(t){return t&&t.isLuxonInterval||!1}get start(){return this.isValid?this.s:null}get end(){return this.isValid?this.e:null}get lastDateTime(){return this.isValid&&this.e?this.e.minus(1):null}get isValid(){return this.invalidReason===null}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}length(t="milliseconds"){return this.isValid?this.toDuration(t).get(t):NaN}count(t="milliseconds",i){if(!this.isValid)return NaN;const e=this.start.startOf(t,i);let s;return i!=null&&i.useLocaleWeeks?s=this.end.reconfigure({locale:e.locale}):s=this.end,s=s.startOf(t,i),Math.floor(s.diff(e,t).get(t))+(s.valueOf()!==this.end.valueOf())}hasSame(t){return this.isValid?this.isEmpty()||this.e.minus(1).hasSame(this.s,t):!1}isEmpty(){return this.s.valueOf()===this.e.valueOf()}isAfter(t){return this.isValid?this.s>t:!1}isBefore(t){return this.isValid?this.e<=t:!1}contains(t){return this.isValid?this.s<=t&&this.e>t:!1}set({start:t,end:i}={}){return this.isValid?a.fromDateTimes(t||this.s,i||this.e):this}splitAt(...t){if(!this.isValid)return[];const i=t.map(o.friendlyDateTime).filter(n=>this.contains(n)).sort((n,u)=>n.toMillis()-u.toMillis()),e=[];let{s}=this,r=0;for(;s<this.e;){const n=i[r]||this.e,u=+n>+this.e?this.e:n;e.push(a.fromDateTimes(s,u)),s=u,r+=1}return e}splitBy(t){const i=h.default.fromDurationLike(t);if(!this.isValid||!i.isValid||i.as("milliseconds")===0)return[];let{s:e}=this,s=1,r;const n=[];for(;e<this.e;){const u=this.start.plus(i.mapUnits(l=>l*s));r=+u>+this.e?this.e:u,n.push(a.fromDateTimes(e,r)),e=r,s+=1}return n}divideEqually(t){return this.isValid?this.splitBy(this.length()/t).slice(0,t):[]}overlaps(t){return this.e>t.s&&this.s<t.e}abutsStart(t){return this.isValid?+this.e==+t.s:!1}abutsEnd(t){return this.isValid?+t.e==+this.s:!1}engulfs(t){return this.isValid?this.s<=t.s&&this.e>=t.e:!1}equals(t){return!this.isValid||!t.isValid?!1:this.s.equals(t.s)&&this.e.equals(t.e)}intersection(t){if(!this.isValid)return this;const i=this.s>t.s?this.s:t.s,e=this.e<t.e?this.e:t.e;return i>=e?null:a.fromDateTimes(i,e)}union(t){if(!this.isValid)return this;const i=this.s<t.s?this.s:t.s,e=this.e>t.e?this.e:t.e;return a.fromDateTimes(i,e)}static merge(t){const[i,e]=t.sort((s,r)=>s.s-r.s).reduce(([s,r],n)=>r?r.overlaps(n)||r.abutsStart(n)?[s,r.union(n)]:[s.concat([r]),n]:[s,n],[[],null]);return e&&i.push(e),i}static xor(t){let i=null,e=0;const s=[],r=t.map(l=>[{time:l.s,type:"s"},{time:l.e,type:"e"}]),n=Array.prototype.concat(...r),u=n.sort((l,d)=>l.time-d.time);for(const l of u)e+=l.type==="s"?1:-1,e===1?i=l.time:(i&&+i!=+l.time&&s.push(a.fromDateTimes(i,l.time)),i=null);return a.merge(s)}difference(...t){return a.xor([this].concat(t)).map(i=>this.intersection(i)).filter(i=>i&&!i.isEmpty())}toString(){return this.isValid?`[${this.s.toISO()}${this.e.toISO()})`:f}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`:`Interval { Invalid, reason: ${this.invalidReason} }`}toLocaleString(t=O.DATE_SHORT,i={}){return this.isValid?S.create(this.s.loc.clone(i),t).formatInterval(this):f}toISO(t){return this.isValid?`${this.s.toISO(t)}/${this.e.toISO(t)}`:f}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:f}toISOTime(t){return this.isValid?`${this.s.toISOTime(t)}/${this.e.toISOTime(t)}`:f}toFormat(t,{separator:i=" – "}={}){return this.isValid?`${this.s.toFormat(t)}${i}${this.e.toFormat(t)}`:f}toDuration(t,i){return this.isValid?this.e.diff(this.s,t,i):h.default.invalid(this.invalidReason)}mapEndpoints(t){return a.fromDateTimes(t(this.s),t(this.e))}}module.exports=a; //# sourceMappingURL=index.cjs119.js.map