@salyra-ui/date-time-picker 0.1.0

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.
@@ -0,0 +1 @@
1
+ "use strict";var SalyraDateTimePicker=(()=>{var Q=Object.defineProperty;var we=Object.getOwnPropertyDescriptor;var Se=Object.getOwnPropertyNames;var De=Object.prototype.hasOwnProperty;var Ee=(e,t)=>{for(var n in t)Q(e,n,{get:t[n],enumerable:!0})},Me=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of Se(t))!De.call(e,l)&&l!==n&&Q(e,l,{get:()=>t[l],enumerable:!(a=we(t,l))||a.enumerable});return e};var xe=e=>Me(Q({},"__esModule",{value:!0}),e);var $e={};Ee($e,{addDays:()=>q,addMonths:()=>P,attribute:()=>w,bindCalendar:()=>K,bindDateField:()=>de,bindDayTrigger:()=>ue,bindMonthScroller:()=>fe,bindPickerForm:()=>Le,bindPickerPopover:()=>Re,bindTimeSegment:()=>ce,calendarMarkup:()=>_,createCalendarEngine:()=>z,createDateTimePickerStore:()=>Ae,createPickerStore:()=>be,dateFormatter:()=>ee,dateString:()=>C,dayAttributes:()=>U,dayNumber:()=>O,dayTriggerAttributes:()=>le,daysInMonth:()=>R,escapeHTML:()=>$,formatDate:()=>I,formatMonth:()=>F,fromDayNumber:()=>G,isRange:()=>V,leapYear:()=>he,monthScrollerMarkup:()=>Ce,mountDateTimePicker:()=>Ne,mountPicker:()=>ke,parseDate:()=>S,pointFor:()=>E,resolveZonedDateTime:()=>Oe,shiftDateMonths:()=>X,timeParts:()=>ae,timeSeconds:()=>M,timeSegmentValue:()=>oe,timeSlots:()=>Te,timeString:()=>re,today:()=>ne,updateTime:()=>ie,utcDate:()=>te,validateWeekStart:()=>W,weekNumber:()=>Pe,weekday:()=>N,weekdayLabels:()=>J});function he(e){return e%4===0&&(e%100!==0||e%400===0)}function R(e,t){if(!Number.isInteger(e)||e<1||e>9999||!Number.isInteger(t)||t<1||t>12)throw new RangeError("Calendar supports Gregorian years 1\u20139999 and months 1\u201312");return t===2?he(e)?29:28:[4,6,9,11].includes(t)?30:31}function S(e){let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);if(!t)throw new RangeError("Use YYYY-MM-DD");let[,n,a,l]=t,i={year:Number(n),month:Number(a),day:Number(l)};if(i.day<1||i.day>R(i.year,i.month))throw new RangeError("Invalid calendar date");return i}function C(e){if(!Number.isInteger(e.day)||e.day<1||e.day>R(e.year,e.month))throw new RangeError("Invalid calendar date");return`${String(e.year).padStart(4,"0")}-${String(e.month).padStart(2,"0")}-${String(e.day).padStart(2,"0")}`}function O(e){let t=S(typeof e=="string"?e:C(e)),n=t.year-(t.month<=2?1:0),a=Math.floor(n/400),l=n-a*400,i=t.month+(t.month>2?-3:9),f=Math.floor((153*i+2)/5)+t.day-1;return a*146097+l*365+Math.floor(l/4)-Math.floor(l/100)+f-719468}function G(e){if(!Number.isInteger(e))throw new RangeError("Day number must be an integer");let t=e+719468,n=Math.floor(t/146097),a=t-n*146097,l=Math.floor((a-Math.floor(a/1460)+Math.floor(a/36524)-Math.floor(a/146096))/365),i=l+n*400,f=a-(365*l+Math.floor(l/4)-Math.floor(l/100)),g=Math.floor((5*f+2)/153),y=f-Math.floor((153*g+2)/5)+1,d=g+(g<10?3:-9);i+=d<=2?1:0;let o={year:i,month:d,day:y};return C(o),o}function q(e,t){return C(G(O(e)+t))}function N(e){return((O(e)+4)%7+7)%7}function P(e,t){if(R(e.year,e.month),!Number.isInteger(t))throw new RangeError("Month offset must be an integer");let n=(e.year-1)*12+e.month-1+t,a={year:Math.floor(n/12)+1,month:(n%12+12)%12+1};return R(a.year,a.month),a}function X(e,t){let n=S(e),a=P(n,t);return C({...a,day:Math.min(n.day,R(a.year,a.month))})}function Pe(e){let t=O(e),n=(N(e)+6)%7,a=G(t+3-n),l=`${String(a.year).padStart(4,"0")}-01-04`,i=O(l)-(N(l)+6)%7;return{year:a.year,week:Math.floor((t-i)/7)+1}}function W(e){if(!Number.isInteger(e)||e<0||e>6)throw new RangeError("weekStartsOn must be 0\u20136");return e}function z(e=48){if(!Number.isInteger(e)||e<1)throw new RangeError("Cache capacity must be positive");let t=new Map;return{month(n,a,l={}){R(n,a);let i=W(l.weekStartsOn??1),f=`${n}:${a}:${i}:${!!l.fixedWeeks}:${l.outsideDays??"visible"}`,g=t.get(f);if(g)return t.delete(f),t.set(f,g),g;let y=C({year:n,month:a,day:1}),d=(N(y)-i+7)%7,o=O(y),b=O("0001-01-01"),s=O("9999-12-31"),p=l.fixedWeeks?42:Math.ceil((d+R(n,a))/7)*7,m=[];for(let c=0;c<p/7;c++){let u=[];for(let h=0;h<7;h++){let k=o-d+c*7+h;if(k<b||k>s){u.push(Object.freeze({date:"",day:0,weekday:(i+h)%7,outside:!0,hidden:!0}));continue}let D=G(k),T=D.month!==a;u.push(Object.freeze({date:C(D),day:D.day,weekday:(i+h)%7,outside:T,hidden:T&&l.outsideDays==="hidden"}))}m.push(Object.freeze(u))}let r=Object.freeze({year:n,month:a,weeks:Object.freeze(m)});return t.set(f,r),t.size>e&&t.delete(t.keys().next().value),r},clear(){t.clear()},get cacheSize(){return t.size}}}var B=new Map;function ee(e,t){let n=JSON.stringify([e,t]),a=B.get(n);return a||(a=new Intl.DateTimeFormat(e,{...t,calendar:"gregory",timeZone:"UTC"}),B.set(n,a),B.size>32&&B.delete(B.keys().next().value)),a}function te(e){let{year:t,month:n,day:a}=S(e),l=new Date(0);return l.setUTCFullYear(t,n-1,a),l.setUTCHours(12,0,0,0),l}function I(e,t="en-GB",n={dateStyle:"long"}){return ee(t,n).format(te(e))}function F(e,t="en-GB"){return I(`${String(e.year).padStart(4,"0")}-${String(e.month).padStart(2,"0")}-01`,t,{month:"long",year:"numeric"})}function J(e,t,n="short"){let a=ee(e,{weekday:n});return Array.from({length:7},(l,i)=>{let f=(t+i)%7;return{weekday:f,label:a.format(te(`2023-01-${String(f+1).padStart(2,"0")}`))}})}function ne(e="UTC",t=new Date){let n=new Intl.DateTimeFormat("en-CA",{timeZone:e,calendar:"gregory",year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(t),a=l=>n.find(i=>i.type===l).value;return`${a("year").padStart(4,"0")}-${a("month")}-${a("day")}`}function M(e){let t=/^(\d{2}):(\d{2})(?::(\d{2}))?$/.exec(e);if(!t||Number(t[1])>23||Number(t[2])>59||Number(t[3]??0)>59)throw new RangeError("Use HH:mm or HH:mm:ss");return Number(t[1])*3600+Number(t[2])*60+Number(t[3]??0)}function re(e,t=!1){if(!Number.isInteger(e)||e<0||e>86399)throw new RangeError("Time must fit within a day");let n=[Math.floor(e/3600),Math.floor(e/60)%60];return t&&n.push(e%60),n.map(a=>String(a).padStart(2,"0")).join(":")}function ae(e,t=24){let n=M(e),a=Math.floor(n/3600);return{hour:t===12?a%12||12:a,minute:Math.floor(n/60)%60,second:n%60,period:a<12?"AM":"PM"}}function ie(e,t,n,a=24,l=!1){let i=ae(e,24),f=i.hour,g=i.minute,y=i.second;if(t==="period"){if(n!=="AM"&&n!=="PM")throw new RangeError("Use AM or PM");f=f%12+(n==="PM"?12:0)}else{let d=Number(n),o=t==="hour"?a===12?12:23:59,b=t==="hour"&&a===12?1:0;if(!Number.isInteger(d)||d<b||d>o)throw new RangeError("Invalid time segment");t==="hour"&&(f=a===12?d%12+(i.period==="PM"?12:0):d),t==="minute"&&(g=d),t==="second"&&(y=d)}return re(f*3600+g*60+y,l)}function Te(e=30,t="00:00",n="23:59"){if(!Number.isInteger(e)||e<1||e>1440)throw new RangeError("Time step must be 1\u20131440 minutes");let a=[],l=M(t),i=M(n),f=t.length===8||n.length===8;if(l>i)throw new RangeError("Time slot bounds must be ordered within one day");for(let g=l;g<=i;g+=e*60)a.push(re(g,f));return Object.freeze(a)}function oe(e,t,n=24){return!e&&t!=="period"?"":String(ae(e??"00:00",n)[t])}function V(e){return e!==null&&"start"in e}function E(e,t="start"){return V(e)?e[t]:t==="start"?e:null}var ge=(e,t)=>JSON.stringify(e)===JSON.stringify(t);function ye(e){if(e.kind&&!["date","time","datetime"].includes(e.kind))throw new RangeError("Invalid picker kind");if(e.selection&&!["single","range","none"].includes(e.selection))throw new RangeError("Invalid selection");if(e.hourCycle!==void 0&&e.hourCycle!==12&&e.hourCycle!==24)throw new RangeError("hourCycle must be 12 or 24");let t=e.referenceDate??ne(e.timeZone??"UTC");S(t);let n=e.months??1,a=e.minuteStep??1;if(!Number.isInteger(n)||n<1||n>12)throw new RangeError("months must be 1\u201312");if(!Number.isInteger(a)||a<1||a>60)throw new RangeError("minuteStep must be 1\u201360");if(e.minDate&&S(e.minDate),e.maxDate&&S(e.maxDate),e.minDate&&e.maxDate&&e.minDate>e.maxDate)throw new RangeError("minDate must precede maxDate");if(e.minTime&&M(e.minTime),e.maxTime&&M(e.maxTime),e.minTime&&e.maxTime&&M(e.minTime)>M(e.maxTime))throw new RangeError("minTime must precede maxTime");for(let f of[e.minDuration,e.maxDuration])if(f!==void 0&&(!Number.isFinite(f)||f<0))throw new RangeError("Duration must be nonnegative");if(e.minDuration!==void 0&&e.maxDuration!==void 0&&e.minDuration>e.maxDuration)throw new RangeError("minDuration must not exceed maxDuration");let l=Object.freeze([...e.weekend??[0,6]]);l.forEach(W);let i=e.timeZone??"UTC";return new Intl.DateTimeFormat("en",{timeZone:i}),Object.freeze({...e,kind:e.kind??"date",selection:e.selection??"single",referenceDate:t,locale:e.locale??"en-GB",timeZone:i,weekStartsOn:W(e.weekStartsOn??1),months:n,weekend:l,hourCycle:e.hourCycle??24,minuteStep:a})}function se(e,t){if(!e)return null;let n={};if(t.kind!=="time"){if(!e.date)throw new RangeError("Date is required");S(e.date),n.date=e.date}else e.date&&(S(e.date),n.date=e.date);if(t.kind!=="date"&&(e.time&&(M(e.time),n.time=e.time),e.dayOffset!==void 0)){if(n.date)throw new RangeError("Use date or dayOffset, not both");if(!Number.isInteger(e.dayOffset)||e.dayOffset<0)throw new RangeError("dayOffset must be nonnegative");n.dayOffset=e.dayOffset}return Object.freeze(n)}function Z(e,t){if(!e)return t.selection==="range"?Object.freeze({start:null,end:null}):null;if(t.selection==="range"){if(!V(e))throw new RangeError("A range requires start and end");return Object.freeze({start:se(e.start,t),end:se(e.end,t)})}if(V(e))throw new RangeError("Single selection expects one point");return se(e,t)}function pe(e){return(e.date?O(e.date):e.dayOffset??0)*86400+(e.time?M(e.time):0)}function Y(e={}){let t=ye(e),n=Z(e.value===void 0?e.defaultValue??null:e.value,t),a=z(),l=e.month??S(E(n)?.date??t.referenceDate);P(l,t.months-1);let i=Object.freeze({options:t,value:n,draft:n,visibleMonth:Object.freeze({year:l.year,month:l.month}),focusedDate:E(n)?.date??t.referenceDate,hoverDate:null,activeEndpoint:"start",open:!1,error:null}),f=new Set,g=new Set,y=r=>{let c=i;Object.entries(r).every(([u,h])=>u==="options"?c.options===h:ge(c[u],h))||(i=Object.freeze({...i,...r}),f.forEach(u=>u()),ge(c.value,i.value)||(g.forEach(u=>u(i.value)),t.onValueChange?.(i.value)))},d=r=>!!(t.minDate&&r<t.minDate||t.maxDate&&r>t.maxDate||t.isDateUnavailable?.(r));function o(r,c=!1){let u=V(r)?[r.start,r.end]:[r];if(u.every(h=>h===null))return null;for(let h of u){if(!h){if(c)return"Choose a complete value";continue}if(h.date&&d(h.date))return"This date is unavailable";if(t.kind!=="date"){if(!h.time){if(c)return"Choose a time";continue}let k=M(h.time);if(t.minTime&&k<M(t.minTime)||t.maxTime&&k>M(t.maxTime)||t.isTimeUnavailable?.(h.time,h))return"This time is unavailable"}}if(V(r)&&r.start&&r.end&&(t.kind==="date"||r.start.time&&r.end.time)){if(t.kind==="time"&&!!r.start.date!=!!r.end.date)return"Both endpoints need dates, or neither";let h=pe(r.end)-pe(r.start);if(h<0)return"The end must follow the start";let k=t.kind==="date"?h/86400+1:h;if(t.minDuration!==void 0&&k<t.minDuration)return"The interval is too short";if(t.maxDuration!==void 0&&k>t.maxDuration)return"The interval is too long";if(t.isRangeUnavailable?.(r.start,r.end))return"This interval is unavailable"}return null}function b(r,c=i.activeEndpoint,u=!1){let h=Z(r,t),k=o(h);if(k)return y(u?{draft:h,error:k,activeEndpoint:c}:{error:k}),!1;let D=o(h,!0)===null;return y({draft:h,error:null,activeEndpoint:c,...t.commit!=="explicit"&&D?{value:h}:{}}),!0}function s(r,c){return b(t.selection==="range"?{start:E(i.draft,"start"),end:E(i.draft,"end"),[c]:r}:r,c,!0)}let p={getSnapshot:()=>i,subscribe(r){return f.add(r),()=>{f.delete(r)}},subscribeValue(r){return g.add(r),()=>{g.delete(r)}},getMonth(r=0){let c=P(i.visibleMonth,r);return a.month(c.year,c.month,t)},getDay(r){if(!r)return{selected:!1,rangeStart:!1,rangeEnd:!1,inRange:!1,preview:!1,disabled:!0,today:!1,weekend:!1,focused:!1};let c=i.draft,u=E(c)?.date,h=V(c)?c.end?.date:void 0,k=!h&&u?i.hoverDate:null,D=k&&k<u?k:u,T=k&&k<u?u:k??h;return{selected:r===u||r===h,rangeStart:r===u,rangeEnd:r===h,inRange:!!(D&&T&&r>=D&&r<=T),preview:!!k,disabled:!!t.disabled||d(r),today:r===t.referenceDate,weekend:t.weekend.includes(N(r)),focused:r===i.focusedDate}},setVisibleMonth(r){P(r,t.months-1),y({visibleMonth:Object.freeze({year:r.year,month:r.month}),hoverDate:null})},navigate(r){p.setVisibleMonth(P(i.visibleMonth,r))},focus(r){S(r),y({focusedDate:r});let c=S(r),u=C({...i.visibleMonth,day:1}),h=P(i.visibleMonth,t.months-1);if(r<u||r>C({...h,day:R(h.year,h.month)})){let k=P({year:9999,month:12},-(t.months-1));p.setVisibleMonth(c.year>k.year||c.year===k.year&&c.month>k.month?k:c)}},moveFocus(r,c=!1){let u=i.focusedDate,h={ArrowLeft:-1,ArrowRight:1,ArrowUp:-7,ArrowDown:7};if(r in h)u=q(u,h[r]);else if(r==="Home")u=q(u,-((N(u)-t.weekStartsOn+7)%7));else if(r==="End")u=q(u,6-(N(u)-t.weekStartsOn+7)%7);else if(r==="PageUp"||r==="PageDown")u=X(u,(r==="PageUp"?-1:1)*(c?12:1));else return!1;return p.focus(u),!0},hover(r){r&&S(r),t.selection==="range"&&E(i.draft)?.date&&!E(i.draft,"end")&&y({hoverDate:r})},selectDate(r){if(S(r),t.disabled||t.readOnly||d(r))return!1;if(t.selection==="none")return t.onSelect?.(r),!0;if(t.kind==="time")return p.setDate(r,i.activeEndpoint);let c=E(i.draft,i.activeEndpoint),u={date:r,...t.kind==="datetime"&&c?.time?{time:c.time}:{}},h=u,k="start";if(t.selection==="range"){let T=E(i.draft),v=E(i.draft,"end");!T||v?(h={start:u,end:null},k="end"):(h=r<T.date?{start:u,end:T}:{start:T,end:u},k="end")}let D=b(h,k);return D&&(y({focusedDate:r,hoverDate:null}),t.onSelect?.(r)),D},setDate(r,c="start"){if(S(r),t.disabled||t.readOnly)return!1;let u=E(i.draft,c);return s({date:r,...t.kind!=="date"&&u?.time?{time:u.time}:{}},c)},setTime(r,c="start"){if(M(r),t.disabled||t.readOnly||t.kind==="date")return!1;let u=E(i.draft,c);return s({...u,time:r,...t.kind==="datetime"&&!u?.date?{date:t.referenceDate}:{}},c)},setDayOffset(r,c="end"){if(!Number.isInteger(r)||r<0)throw new RangeError("Day offset must be nonnegative");if(t.disabled||t.readOnly||t.kind!=="time")return!1;let u=E(i.draft,c);return s({...u,date:void 0,dayOffset:r},c)},setEndpoint(r){if(r==="end"&&t.selection!=="range")throw new RangeError("End is available only for a range");y({activeEndpoint:r})},setValue(r){let c=Z(r,t),u=o(c);if(u)throw new RangeError(u);y({value:c,draft:c,error:null,hoverDate:null})},apply(){if(t.disabled||t.readOnly)return!1;let r=o(i.draft,!0);return r?(y({error:r}),!1):(y({value:i.draft,error:null,open:!1}),!0)},cancel(){y({draft:i.value,error:null,hoverDate:null,open:!1})},clear(){if(t.disabled||t.readOnly)return;let r=Z(null,t);y({draft:r,value:t.commit==="explicit"?i.value:r,error:null,hoverDate:null,activeEndpoint:"start"})},setOpen(r){r&&t.disabled||y({open:r})},setOptions(r){if(Object.entries(r).every(([u,h])=>Object.is(t[u],h)))return;if(r.kind&&r.kind!==t.kind||r.selection&&r.selection!==t.selection)throw new RangeError("Create a new store to change kind or selection");let c=ye({...t,...r});P(i.visibleMonth,c.months-1),t=c,y({options:c,error:o(i.draft)})},validate:()=>o(i.draft,!0),destroy(){f.clear(),g.clear(),a.clear()},get cacheSize(){return a.cacheSize}},m=o(n);if(m)throw new RangeError(m);return p}function Oe(e,t,n="reject"){if(!e.date||!e.time)throw new RangeError("Date and time are required");S(e.date);let a=O(e.date)*864e5+M(e.time)*1e3,l=new Intl.DateTimeFormat("en-CA",{timeZone:t,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}),i=o=>{let b=l.formatToParts(new Date(o)),s=p=>b.find(m=>m.type===p).value;return O(`${s("year").padStart(4,"0")}-${s("month")}-${s("day")}`)*864e5+M(`${s("hour")}:${s("minute")}:${s("second")}`)*1e3},f=new Set;for(let o of[-48,-24,-12,0,12,24,48]){let b=a+o*36e5;f.add(i(b)-b)}let g=[...f].map(o=>a-o).sort((o,b)=>o-b),y=g.filter(o=>i(o)===a);if(y.length===1)return new Date(y[0]);if(n==="reject")throw new RangeError(y.length?"This local time occurs twice":"This local time does not exist");let d=y.length?y:g;return new Date(n==="earlier"?d[0]:d[d.length-1])}function $(e){return String(e??"").replace(/[&<>"']/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[t])}function w(e,t,n){if(n===!1||n==null)e.hasAttribute(t)&&e.removeAttribute(t);else{let a=n===!0?"":n;e.getAttribute(t)!==a&&e.setAttribute(t,a)}}function U(e,t,n=!1){let a=e.getDay(t),l=e.getSnapshot().options;return{"data-date":t,"data-selected":a.selected?"":void 0,"data-range-start":a.rangeStart?"":void 0,"data-range-end":a.rangeEnd?"":void 0,"data-in-range":a.inRange?"":void 0,"data-preview":a.preview&&a.inRange?"":void 0,"data-weekend":a.weekend?"":void 0,"data-outside":n?"":void 0,"data-today":a.today?"":void 0,"aria-selected":a.selected||a.inRange&&!a.preview?"true":"false"}}function le(e,t,n=!1){let{"aria-selected":a,...l}=U(e,t,n);return l}function _(e,t={}){let{options:n,focusedDate:a}=e.getSnapshot(),l=J(n.locale,n.weekStartsOn),i=J(n.locale,n.weekStartsOn,"long"),f=Array.from({length:n.months},(d,o)=>e.getMonth(o)),g=f.flatMap(d=>d.weeks.flat()).filter(d=>!d.hidden&&!d.outside),y=g.some(d=>d.date===a&&!e.getDay(d.date).disabled)?a:g.find(d=>!e.getDay(d.date).disabled)?.date;return Array.from({length:n.months},(d,o)=>{let b=f[o],s=l.map(p=>{let m=t.weekdays?.[p.weekday],r=m?.label??p.label,c=m?.ariaLabel??(m?.label||i.find(u=>u.weekday===p.weekday).label);return`<th scope="col" data-part="weekday" data-weekday="${p.weekday}" class="${$(m?.class??"")}" ${n.weekend.includes(p.weekday)?"data-weekend":""} aria-label="${$(c)}">${t.renderWeekday?.(p.weekday,r)??$(r)}</th>`}).join("");return`<section class="sp-month" data-part="month"><h3 data-part="month-title" aria-live="polite">${$(F(b,n.locale))}</h3><table role="grid" aria-readonly="${!!n.readOnly}" aria-multiselectable="${n.selection==="range"}" aria-label="${$(F(b,n.locale))}" class="sp-grid"><thead><tr>${s}</tr></thead><tbody>${b.weeks.map(p=>`<tr>${p.map(m=>{if(m.hidden)return'<td role="gridcell" aria-disabled="true"></td>';let r=e.getDay(m.date),c=r.disabled||m.outside&&n.outsideSelectable===!1,u=Object.entries(U(e,m.date,m.outside)).map(([k,D])=>D==null?"":`${k}="${$(D)}"`).join(" "),h=t.renderCell?.(m,r)??`<button type="button" data-day-trigger data-date="${m.date}" aria-label="${$(I(m.date,n.locale))}" ${c?"disabled":""} tabindex="${m.date===y&&!m.outside?"0":"-1"}"><span data-part="number">${m.day}</span></button>`;return`<td role="gridcell" data-part="cell" ${u}>${h}</td>`}).join("")}</tr>`).join("")}</tbody></table></section>`}).join("")}function K(e,t,n={}){let a="",l=!0,i=new Set,f=()=>{let{options:s,visibleMonth:p,focusedDate:m}=t.getSnapshot(),r=JSON.stringify([p,s.months,s.weekStartsOn,s.outsideDays,s.fixedWeeks,s.locale,s.weekend,n.weekdays]),c=e.contains(e.ownerDocument.activeElement);r!==a&&(e.innerHTML=_(t,n),a=r);let u;for(let h of e.querySelectorAll('[data-part="cell"]')){let k=h.dataset.date,D=h.hasAttribute("data-outside"),T=t.getDay(k);for(let[j,H]of Object.entries(U(t,k,D)))w(h,j,H);let v=h.querySelector("[data-day-trigger]");v&&(v.disabled=T.disabled||D&&s.outsideSelectable===!1,v.hasAttribute("aria-label")||w(v,"aria-label",I(k,s.locale)),w(v,"aria-current",T.today?"date":null),v.tabIndex=-1,!v.disabled&&!D&&(!u||k===m)&&(u=v))}u&&(u.tabIndex=0),c&&u&&m===u.dataset.date&&e.ownerDocument.activeElement!==u&&u.focus();for(let h of e.querySelectorAll('[role="grid"]'))w(h,"aria-readonly",String(!!s.readOnly)),w(h,"aria-multiselectable",String(s.selection==="range"))},g=s=>{let p=s.target.closest("[data-day-trigger]");if(!p||!e.contains(p)||p.disabled)return;let m=p.dataset.date;n.onDayClick?.(m,s);let r=setTimeout(()=>{i.delete(r),l&&e.isConnected&&!s.defaultPrevented&&t.selectDate(m)&&n.onSelect?.(m)},0);i.add(r)},y=s=>{if(s.pointerType==="touch")return;let p=s.target.closest("[data-day-trigger]");p&&!p.hasAttribute("disabled")&&t.hover(p.dataset.date)},d=()=>t.hover(null),o=s=>{let p=s.target.closest("[data-day-trigger]");if(p){if(s.key==="Escape"){t.cancel(),s.preventDefault();return}if(s.key==="ArrowLeft"||s.key==="ArrowRight"||s.key==="ArrowUp"||s.key==="ArrowDown"||s.key==="Home"||s.key==="End"||s.key==="PageUp"||s.key==="PageDown"){s.preventDefault(),t.focus(p.dataset.date);let m=getComputedStyle(e).direction==="rtl",r=m&&s.key==="ArrowLeft"?"ArrowRight":m&&s.key==="ArrowRight"?"ArrowLeft":s.key;try{t.moveFocus(r,s.shiftKey)}catch(c){if(!(c instanceof RangeError))throw c}}}};f();let b=t.subscribe(f);return e.addEventListener("click",g),e.addEventListener("pointerover",y),e.addEventListener("pointerleave",d),e.addEventListener("keydown",o),()=>{l=!1;for(let s of i)clearTimeout(s);i.clear(),b(),e.removeEventListener("click",g),e.removeEventListener("pointerover",y),e.removeEventListener("pointerleave",d),e.removeEventListener("keydown",o)}}function de(e,t,n="start"){let a=e.value,l=e.disabled,i=e.readOnly,f=()=>{let o=t.getSnapshot();e.disabled=l||!!o.options.disabled,e.readOnly=i||!!o.options.readOnly,e.ownerDocument.activeElement!==e&&(e.value=E(o.draft,n)?.date??"",w(e,"aria-invalid",String(!!o.error)))},g=()=>{try{S(e.value);let o=t.setDate(e.value,n);w(e,"aria-invalid",String(!o))}catch{w(e,"aria-invalid","true")}},y=()=>{e.value=E(t.getSnapshot().draft,n)?.date??"",w(e,"aria-invalid",String(!!t.getSnapshot().error))};f();let d=t.subscribe(f);return e.addEventListener("input",g),e.addEventListener("blur",y),()=>{d(),e.removeEventListener("input",g),e.removeEventListener("blur",y),e.value=a}}function ce(e,t,n,a="start"){let l=!1,i=e.disabled,f=e instanceof e.ownerDocument.defaultView.HTMLInputElement&&e.readOnly,g=()=>oe(E(t.getSnapshot().draft,a)?.time,n,t.getSnapshot().options.hourCycle),y=()=>{let s=t.getSnapshot();e.disabled=i||!!s.options.disabled,e instanceof e.ownerDocument.defaultView.HTMLInputElement?(e.readOnly=f||!!s.options.readOnly,e.min=n==="hour"&&s.options.hourCycle===12?"1":"0",e.max=n==="hour"?s.options.hourCycle===12?"12":"23":"59",e.step=n==="minute"?String(s.options.minuteStep):"1"):e.disabled=i||!!s.options.disabled||!!s.options.readOnly,(e.ownerDocument.activeElement!==e||!l)&&(e.value=g(),s.error||(l=!1)),w(e,"aria-invalid",String(l||!!s.error))},d=()=>{if(e.value.trim()===""){l=!0,w(e,"aria-invalid","true");return}try{let s=t.getSnapshot(),p=E(s.draft,a)?.time??"00:00";if(n==="minute"&&Number(e.value)%s.options.minuteStep!==0)throw new RangeError("Minute must match the configured step");let m=ie(p,n,e.value,s.options.hourCycle,!!s.options.seconds||p.length===8||n==="second");l=!t.setTime(m,a),w(e,"aria-invalid",String(l))}catch{l=!0,w(e,"aria-invalid","true")}},o=()=>{l=!1,e.value=g(),w(e,"aria-invalid",String(!!t.getSnapshot().error))};y();let b=t.subscribe(y);return e.addEventListener("input",d),e.addEventListener("blur",o),()=>{b(),e.removeEventListener("input",d),e.removeEventListener("blur",o)}}function Le(e,t,{name:n="date",required:a=!1}={}){let l=e.ownerDocument.createElement("input");l.type="hidden",l.name=n,e.append(l);let i=t.getSnapshot().value,f=()=>{l.disabled=!!t.getSnapshot().options.disabled,l.value=JSON.stringify(t.getSnapshot().value)},g=o=>{if(l.disabled)return;let b=t.getSnapshot().value,s=!b||"start"in b&&!b.start&&!b.end;s&&!a||(a&&s||t.validate())&&(o.preventDefault(),e.dispatchEvent(new CustomEvent("picker-invalid",{detail:t.validate()??"Choose a value"})))},y=()=>queueMicrotask(()=>t.setValue(i));f();let d=t.subscribe(f);return e.addEventListener("submit",g),e.addEventListener("reset",y),()=>{d(),l.remove(),e.removeEventListener("submit",g),e.removeEventListener("reset",y)}}function ue(e,t,n,{outside:a=!1,onSelect:l,disabled:i}={}){let f=!0,g=new Set,y=i??e.disabled,d=e.getAttribute("aria-label"),o=()=>{let r=t.getSnapshot(),c=t.getDay(n);for(let[h,k]of Object.entries(le(t,n,a)))w(e,h,k);e.disabled=y||c.disabled||a&&r.options.outsideSelectable===!1,e.tabIndex=c.focused&&!a?0:-1,w(e,"data-day-trigger",!0),w(e,"aria-current",c.today?"date":null),w(e,"aria-label",d??I(n,r.options.locale));let u=e.ownerDocument.activeElement;c.focused&&!a&&u!==e&&u?.matches("[data-day-trigger]")&&u.closest('[role="grid"]')===e.closest('[role="grid"]')&&e.focus()},b=r=>{let c=setTimeout(()=>{g.delete(c),f&&e.isConnected&&!e.disabled&&!r.defaultPrevented&&!(a&&t.getSnapshot().options.outsideSelectable===!1)&&t.selectDate(n)&&l?.(n)},0);g.add(c)},s=r=>{r.pointerType!=="touch"&&!e.disabled&&t.hover(n)},p=r=>{if(!r.defaultPrevented)try{if(r.key==="Escape"){t.cancel(),r.preventDefault();return}t.focus(n);let c=getComputedStyle(e).direction==="rtl",u=c&&r.key==="ArrowLeft"?"ArrowRight":c&&r.key==="ArrowRight"?"ArrowLeft":r.key;t.moveFocus(u,r.shiftKey)&&r.preventDefault()}catch(c){if(!(c instanceof RangeError))throw c}};o();let m=t.subscribe(o);return e.addEventListener("click",b),e.addEventListener("pointerenter",s),e.addEventListener("keydown",p),()=>{f=!1;for(let r of g)clearTimeout(r);g.clear(),m(),e.removeEventListener("click",b),e.removeEventListener("pointerenter",s),e.removeEventListener("keydown",p)}}function Re(e,t,n,{modal:a=!1,label:l="Choose a date"}={}){let i=t.ownerDocument,f=t.hidden,g=e.disabled;t.setAttribute("role","dialog"),t.setAttribute("aria-label",t.getAttribute("aria-label")??l),a&&t.setAttribute("aria-modal","true"),e.setAttribute("aria-haspopup","dialog");let y=n.getSnapshot().open,d=()=>{let m=n.getSnapshot();t.hidden=!m.open,e.disabled=g||!!m.options.disabled,e.setAttribute("aria-expanded",String(m.open)),m.open&&!y&&queueMicrotask(()=>{n.getSnapshot().open&&(t.querySelector('[data-day-trigger][tabindex="0"],input:not(:disabled),button:not(:disabled)')??t).focus()}),!m.open&&y&&e.focus(),y=m.open},o=m=>{m.defaultPrevented||(n.getSnapshot().open?n.cancel():n.setOpen(!0))},b=m=>{n.getSnapshot().open&&!t.contains(m.target)&&!e.contains(m.target)&&n.cancel()},s=m=>{if(n.getSnapshot().open&&(m.key==="Escape"&&(m.preventDefault(),n.cancel()),a&&m.key==="Tab")){let r=[...t.querySelectorAll('button:not(:disabled),input:not(:disabled),select:not(:disabled),a[href],[tabindex="0"]')].filter(h=>h.tabIndex>=0&&!h.hidden&&h.getClientRects().length),c=r[0],u=r.at(-1);c?m.shiftKey&&i.activeElement===c?(m.preventDefault(),u.focus()):!m.shiftKey&&i.activeElement===u&&(m.preventDefault(),c.focus()):(m.preventDefault(),t.focus())}};d();let p=n.subscribe(d);return e.addEventListener("click",o),i.addEventListener("pointerdown",b),i.addEventListener("keydown",s),()=>{p(),t.hidden=f,e.removeEventListener("click",o),i.removeEventListener("pointerdown",b),i.removeEventListener("keydown",s)}}function Ce(e,t={}){let n=e.getSnapshot(),a=z(1),l=t.from??{year:1900,month:1},i=t.to??{year:2100,month:12},f=d=>d.year*12+d.month,g=f(n.visibleMonth)<f(l)?l:f(n.visibleMonth)>f(i)?i:n.visibleMonth,y={...e,getSnapshot:()=>({...n,visibleMonth:g,options:{...n.options,months:1,fixedWeeks:!0}}),getMonth:(d=0)=>{let o=P(g,d);return a.month(o.year,o.month,{...n.options,fixedWeeks:!0})}};return _(y,t)}function fe(e,t,n={}){let a=n.from??{year:1900,month:1},l=n.to??{year:2100,month:12};P(a,0),P(l,0);let i=v=>(v.year-a.year)*12+v.month-a.month,f=i(l)+1,g=n.monthHeight??340,y=n.overscan??1;if(f<1||f>1e4||g<280||!Number.isFinite(g)||!Number.isInteger(y)||y<0||y>4)throw new RangeError("Invalid scrolling window or month geometry");let d=e.ownerDocument,o=d.createElement("div");o.style.height=`${f*g}px`,o.style.position="relative",e.replaceChildren(o);let b=z(12),s=new Map,p=0,m=!1,r=v=>{let j,H;return{...t,getSnapshot(){let A=t.getSnapshot();return A!==j&&(j=A,H=Object.freeze({...A,visibleMonth:v,options:Object.freeze({...A.options,months:1,fixedWeeks:!0})})),H},getMonth(A=0){let x=P(v,A);return b.month(x.year,x.month,{...t.getSnapshot().options,fixedWeeks:!0})}}},c=()=>{let v=Math.max(0,Math.min(f-1,Math.floor(e.scrollTop/g))),j=Math.ceil((e.clientHeight||g)/g),H=Math.max(0,v-y),A=Math.min(f-1,v+j+y);for(let[x,L]of s)(x<H||x>A)&&(L.stop(),L.element.remove(),s.delete(x));for(let x=H;x<=A;x++)if(!s.has(x)){let L=d.createElement("div");L.className="sp-scroll-month",L.style.cssText=`position:absolute;top:${x*g}px;left:0;right:0;height:${g}px;overflow:hidden`,o.append(L);let ve=P(a,x);s.set(x,{element:L,stop:K(L,r(ve),n)})}if(!m){let x=P(a,v),L=t.getSnapshot();(x.year!==L.visibleMonth.year||x.month!==L.visibleMonth.month)&&(m=!0,t.setVisibleMonth(x),m=!1)}},u=()=>{p||(p=e.ownerDocument.defaultView.requestAnimationFrame(()=>{p=0,c()}))},h=()=>{if(m)return;let v=i(t.getSnapshot().visibleMonth);v<0||v>=f||Math.floor(e.scrollTop/g)!==v&&(e.scrollTop=v*g,c())};e.scrollTop=Math.max(0,Math.min(f-1,i(t.getSnapshot().visibleMonth)))*g,c();let k=t.subscribe(h);e.addEventListener("scroll",u,{passive:!0});let D=e.ownerDocument.defaultView?.ResizeObserver,T=D?new D(u):void 0;return T?.observe(e),()=>{T?.disconnect(),k(),e.removeEventListener("scroll",u),p&&e.ownerDocument.defaultView.cancelAnimationFrame(p);for(let v of s.values())v.stop();s.clear(),b.clear(),o.remove()}}function be(e={}){return Y({...e,kind:"datetime"})}var Ae=be;function me(e,t={}){let n="getSnapshot"in t,a=n?t:Y(t),l=[],i=d=>[...e.querySelectorAll(d)].filter(o=>!o.parentElement?.closest("[data-picker-root]")||o.parentElement.closest("[data-picker-root]")===e);w(e,"data-picker-root",!0);for(let d of i("[data-continuous]"))l.push(fe(d,a,JSON.parse(d.dataset.continuous??"{}")));for(let d of i("[data-calendar]"))l.push(K(d,a,JSON.parse(d.dataset.calendarOptions??"{}")));for(let d of i("[data-day-trigger]"))d.closest("[data-calendar]")||l.push(ue(d,a,d.dataset.date));for(let d of i("[data-date-field]"))l.push(de(d,a,d.dataset.endpoint??"start"));for(let d of i("[data-time-segment]"))l.push(ce(d,a,d.dataset.timeSegment,d.dataset.endpoint??"start"));let f=d=>{if(d.defaultPrevented)return;let o=d.target.closest("[data-picker-action]");if(!o||!e.contains(o)||o.closest("[data-picker-root]")!==e||a.getSnapshot().options.disabled)return;let s=o.dataset.pickerAction;try{s==="previous"?a.navigate(-1):s==="next"?a.navigate(1):s==="open"?a.setOpen(!0):(s==="cancel"||s==="apply"||s==="clear")&&a[s]()}catch(p){if(!(p instanceof RangeError))throw p}},g=d=>{let o=d.target;if(!(o.closest("[data-picker-root]")!==e||a.getSnapshot().options.disabled))try{o.hasAttribute("data-month-select")&&a.setVisibleMonth({...a.getSnapshot().visibleMonth,month:Number(o.value)}),o.hasAttribute("data-year-select")&&a.setVisibleMonth({...a.getSnapshot().visibleMonth,year:Number(o.value)}),o.hasAttribute("data-day-offset")&&a.setDayOffset(Number(o.value),o.dataset.endpoint??"end")}catch(b){if(!(b instanceof RangeError))throw b}},y=()=>{let d=a.getSnapshot();for(let o of i("[data-calendar-cell]"))for(let[b,s]of Object.entries(U(a,o.dataset.date,o.hasAttribute("data-outside"))))w(o,b,s);for(let o of i("[data-picker-output]"))o.textContent=JSON.stringify(d.value,null,2);for(let o of i("[data-picker-error]"))o.textContent=d.error??"",o.hidden=!d.error;for(let o of i("[data-month-heading]"))o.textContent=F(d.visibleMonth,d.options.locale);for(let o of i("[data-month-select]"))o.value=String(d.visibleMonth.month);for(let o of i("[data-year-select]"))o.value=String(d.visibleMonth.year);for(let o of i("[data-picker-action], [data-month-select], [data-year-select], [data-day-offset]"))o.disabled=!!d.options.disabled};return y(),l.push(a.subscribe(y)),e.addEventListener("click",f),e.addEventListener("change",g),{store:a,destroy(){l.forEach(d=>d()),e.removeEventListener("click",f),e.removeEventListener("change",g),n||a.destroy()}}}function ke(e,t={}){if("getSnapshot"in t){if(t.getSnapshot().options.kind!=="datetime")throw new RangeError("Use a datetime store with DateTimePicker");return me(e,t)}return me(e,{...t,kind:"datetime"})}var Ne=ke;return xe($e);})();
@@ -0,0 +1,40 @@
1
+ export * from "@salyra-ui/calendar";
2
+ import { type PickerOptions } from "@salyra-ui/calendar";
3
+ export type DateTimePickerOptions = Omit<PickerOptions, "kind">;
4
+ export declare function createPickerStore(options?: DateTimePickerOptions): {
5
+ getSnapshot: () => import("@salyra-ui/calendar").PickerSnapshot;
6
+ subscribe(fn: () => void): () => void;
7
+ subscribeValue(fn: (v: import("@salyra-ui/calendar").PickerValue) => void): () => void;
8
+ getMonth(offset?: number): import("@salyra-ui/calendar").CalendarMonth;
9
+ getDay(date: string): {
10
+ selected: boolean;
11
+ rangeStart: boolean;
12
+ rangeEnd: boolean;
13
+ inRange: boolean;
14
+ preview: boolean;
15
+ disabled: boolean;
16
+ today: boolean;
17
+ weekend: boolean;
18
+ focused: boolean;
19
+ };
20
+ setVisibleMonth(next: import("@salyra-ui/calendar").Month): void;
21
+ navigate(count: number): void;
22
+ focus(date: string): void;
23
+ moveFocus(key: string, shift?: boolean): boolean;
24
+ hover(date: string | null): void;
25
+ selectDate(date: string): boolean;
26
+ setDate(date: string, endpoint?: import("@salyra-ui/calendar").Endpoint): boolean;
27
+ setTime(time: string, endpoint?: import("@salyra-ui/calendar").Endpoint): boolean;
28
+ setDayOffset(offset: number, endpoint?: import("@salyra-ui/calendar").Endpoint): boolean;
29
+ setEndpoint(endpoint: import("@salyra-ui/calendar").Endpoint): void;
30
+ setValue(value: import("@salyra-ui/calendar").PickerValue): void;
31
+ apply(): boolean;
32
+ cancel(): void;
33
+ clear(): void;
34
+ setOpen(open: boolean): void;
35
+ setOptions(patch: Partial<PickerOptions>): void;
36
+ validate: () => string | null;
37
+ destroy(): void;
38
+ readonly cacheSize: number;
39
+ };
40
+ export declare const createDateTimePickerStore: typeof createPickerStore;
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export*from"@salyra-ui/calendar";import{createPickerStore as t}from"@salyra-ui/calendar";function r(e={}){return t({...e,kind:"datetime"})}var o=r;export{o as createDateTimePickerStore,r as createPickerStore};
@@ -0,0 +1,47 @@
1
+ export * from "./index";
2
+ export declare const DateTimePicker: {
3
+ Root: (props: import("@salyra-ui/calendar/react").RootProps) => import("react").JSX.Element;
4
+ Calendar: import("react").ForwardRefExoticComponent<import("@salyra-ui/calendar/react").CalendarProps & import("react").RefAttributes<HTMLDivElement>>;
5
+ Segment: import("react").ForwardRefExoticComponent<import("react").InputHTMLAttributes<HTMLInputElement> & {
6
+ part: Exclude<import("@salyra-ui/calendar").TimeSegment, "period">;
7
+ endpoint?: import("@salyra-ui/calendar").Endpoint;
8
+ } & import("react").RefAttributes<HTMLInputElement>>;
9
+ Period: import("react").ForwardRefExoticComponent<import("react").SelectHTMLAttributes<HTMLSelectElement> & {
10
+ endpoint?: import("@salyra-ui/calendar").Endpoint;
11
+ } & import("react").RefAttributes<HTMLSelectElement>>;
12
+ Time: typeof import("@salyra-ui/calendar/react").Time;
13
+ Action: typeof import("@salyra-ui/calendar/react").Action;
14
+ Output: typeof import("@salyra-ui/calendar/react").Output;
15
+ View: import("react").ForwardRefExoticComponent<import("@salyra-ui/calendar/react").CalendarProps & import("react").RefAttributes<HTMLDivElement>>;
16
+ Continuous: typeof import("@salyra-ui/calendar/react").Continuous;
17
+ MonthSelect: typeof import("@salyra-ui/calendar/react").MonthSelect;
18
+ YearSelect: typeof import("@salyra-ui/calendar/react").YearSelect;
19
+ Grid: import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
20
+ Week: import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
21
+ Cell: import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLDivElement> & {
22
+ date: string;
23
+ outside?: boolean;
24
+ } & import("react").RefAttributes<HTMLDivElement>>;
25
+ Number: import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLSpanElement> & {
26
+ date: string;
27
+ } & import("react").RefAttributes<HTMLSpanElement>>;
28
+ DayTrigger: import("react").ForwardRefExoticComponent<Omit<import("react").ButtonHTMLAttributes<HTMLButtonElement>, "onSelect"> & {
29
+ date: string;
30
+ outside?: boolean;
31
+ onSelect?: (date: string) => void;
32
+ } & import("react").RefAttributes<HTMLButtonElement>>;
33
+ Heading: import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLHeadingElement> & {
34
+ offset?: number;
35
+ } & import("react").RefAttributes<HTMLHeadingElement>>;
36
+ Weekday: import("react").ForwardRefExoticComponent<import("react").HTMLAttributes<HTMLSpanElement> & {
37
+ day: number;
38
+ } & import("react").RefAttributes<HTMLSpanElement>>;
39
+ Navigation: typeof import("@salyra-ui/calendar/react").Navigation;
40
+ Field: import("react").ForwardRefExoticComponent<import("react").InputHTMLAttributes<HTMLInputElement> & {
41
+ endpoint?: import("@salyra-ui/calendar").Endpoint;
42
+ } & import("react").RefAttributes<HTMLInputElement>>;
43
+ };
44
+ export { usePickerStore } from "@salyra-ui/calendar/react";
45
+ export { DateTimeRoot as Root } from "@salyra-ui/calendar/react";
46
+ export { Field, Action, MonthSelect, YearSelect, } from "@salyra-ui/date-picker/react";
47
+ export { Segment, Period, Time } from "@salyra-ui/time-picker/react";
package/dist/react.js ADDED
@@ -0,0 +1 @@
1
+ "use client";var k=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var P=(i,r)=>{for(var m in r)k(i,m,{get:r[m],enumerable:!0})},n=(i,r,m,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let c of S(r))!T.call(i,c)&&c!==m&&k(i,c,{get:()=>r[c],enumerable:!(a=x(r,c))||a.enumerable});return i},t=(i,r,m)=>(n(i,r,"default"),m&&n(m,r,"default"));var o={};P(o,{Action:()=>g,DateTimePicker:()=>u,Field:()=>C,MonthSelect:()=>h,Period:()=>F,Root:()=>y,Segment:()=>A,Time:()=>M,YearSelect:()=>w,createDateTimePickerStore:()=>f,createPickerStore:()=>p,usePickerStore:()=>R});var e={};P(e,{createDateTimePickerStore:()=>f,createPickerStore:()=>p});t(e,b);import*as b from"@salyra-ui/calendar";import{createPickerStore as d}from"@salyra-ui/calendar";function p(i={}){return d({...i,kind:"datetime"})}var f=p;t(o,e);import{Calendar as s,DateTimeRoot as D}from"@salyra-ui/calendar/react";import{DatePicker as l}from"@salyra-ui/date-picker/react";import{TimePicker as O}from"@salyra-ui/time-picker/react";import{usePickerStore as R}from"@salyra-ui/calendar/react";import{DateTimeRoot as y}from"@salyra-ui/calendar/react";import{Field as C,Action as g,MonthSelect as h,YearSelect as w}from"@salyra-ui/date-picker/react";import{Segment as A,Period as F,Time as M}from"@salyra-ui/time-picker/react";var u={...s,...l,...O,Root:D,Calendar:s.View};export{g as Action,u as DateTimePicker,C as Field,h as MonthSelect,F as Period,y as Root,A as Segment,M as Time,w as YearSelect,f as createDateTimePickerStore,p as createPickerStore,R as usePickerStore};
@@ -0,0 +1,115 @@
1
+ :where(.sp-calendar) {
2
+ --sp-accent: #e4002b;
3
+ --sp-selected-text: #fff;
4
+ --sp-range: #fce5ea;
5
+ --sp-outside: #737373;
6
+ --sp-border: #dddde2;
7
+ color: #181818;
8
+ font-family:
9
+ "Helvetica Neue",
10
+ Helvetica,
11
+ Arial,
12
+ sans-serif;
13
+ }
14
+ .sp-calendar {
15
+ display: grid;
16
+ grid-template-columns: repeat(var(--sp-months, 1), minmax(0, 1fr));
17
+ gap: 24px;
18
+ }
19
+ .sp-month {
20
+ min-width: 0;
21
+ }
22
+ .sp-month h3 {
23
+ margin: 0 0 20px;
24
+ font-size: 15px;
25
+ font-weight: 600;
26
+ }
27
+ .sp-grid {
28
+ width: 100%;
29
+ table-layout: fixed;
30
+ border-collapse: collapse;
31
+ }
32
+ .sp-grid th {
33
+ height: 32px;
34
+ font-size: 11px;
35
+ font-weight: 500;
36
+ color: #656565;
37
+ text-align: center;
38
+ }
39
+ .sp-grid td {
40
+ padding: 2px 0;
41
+ position: relative;
42
+ height: 40px;
43
+ text-align: center;
44
+ }
45
+ .sp-grid [data-day-trigger] {
46
+ position: relative;
47
+ z-index: 1;
48
+ display: inline-grid;
49
+ place-items: center;
50
+ width: 36px;
51
+ height: 36px;
52
+ border: 1px solid transparent;
53
+ border-radius: var(--sp-day-radius, 4px);
54
+ background: transparent;
55
+ color: inherit;
56
+ font: inherit;
57
+ font-size: 13px;
58
+ font-variant-numeric: tabular-nums;
59
+ cursor: pointer;
60
+ }
61
+ .sp-grid [data-day-trigger]:hover {
62
+ border-color: var(--sp-border);
63
+ }
64
+ .sp-grid [data-part=cell][data-in-range] {
65
+ background: var(--sp-range);
66
+ }
67
+ .sp-grid [data-part=cell][data-selected] [data-day-trigger] {
68
+ background: var(--sp-accent);
69
+ color: var(--sp-selected-text);
70
+ }
71
+ .sp-grid [data-part=cell][data-outside]:not([data-selected]) {
72
+ color: var(--sp-outside);
73
+ }
74
+ .sp-grid [data-part=cell][data-today]:not([data-selected]) [data-part=number] {
75
+ text-decoration: underline;
76
+ text-underline-offset: 4px;
77
+ }
78
+ .sp-grid [data-day-trigger]:focus-visible {
79
+ outline: 2px solid var(--sp-accent);
80
+ outline-offset: 2px;
81
+ }
82
+ .sp-grid [data-day-trigger]:disabled {
83
+ opacity: 0.3;
84
+ cursor: default;
85
+ }
86
+ .sp-time {
87
+ display: flex;
88
+ gap: 12px;
89
+ flex-wrap: wrap;
90
+ }
91
+ .sp-time label {
92
+ display: grid;
93
+ gap: 8px;
94
+ font: inherit;
95
+ font-size: 12px;
96
+ }
97
+ .sp-time input,
98
+ .sp-time select {
99
+ width: 72px;
100
+ min-height: 40px;
101
+ border: 1px solid #dddde2;
102
+ padding: 8px;
103
+ box-sizing: border-box;
104
+ background: transparent;
105
+ color: inherit;
106
+ font: inherit;
107
+ }
108
+ .sp-time [aria-invalid=true] {
109
+ outline: 2px solid #e4002b;
110
+ }
111
+ @media (max-width: 640px) {
112
+ .sp-calendar {
113
+ grid-template-columns: 1fr;
114
+ }
115
+ }
@@ -0,0 +1 @@
1
+ :where(.sp-calendar){--sp-accent: #e4002b;--sp-selected-text: #fff;--sp-range: #fce5ea;--sp-outside: #737373;--sp-border: #dddde2;color:#181818;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.sp-calendar{display:grid;grid-template-columns:repeat(var(--sp-months, 1),minmax(0,1fr));gap:24px}.sp-month{min-width:0}.sp-month h3{margin:0 0 20px;font-size:15px;font-weight:600}.sp-grid{width:100%;table-layout:fixed;border-collapse:collapse}.sp-grid th{height:32px;font-size:11px;font-weight:500;color:#656565;text-align:center}.sp-grid td{padding:2px 0;position:relative;height:40px;text-align:center}.sp-grid [data-day-trigger]{position:relative;z-index:1;display:inline-grid;place-items:center;width:36px;height:36px;border:1px solid transparent;border-radius:var(--sp-day-radius, 4px);background:transparent;color:inherit;font:inherit;font-size:13px;font-variant-numeric:tabular-nums;cursor:pointer}.sp-grid [data-day-trigger]:hover{border-color:var(--sp-border)}.sp-grid [data-part=cell][data-in-range]{background:var(--sp-range)}.sp-grid [data-part=cell][data-selected] [data-day-trigger]{background:var(--sp-accent);color:var(--sp-selected-text)}.sp-grid [data-part=cell][data-outside]:not([data-selected]){color:var(--sp-outside)}.sp-grid [data-part=cell][data-today]:not([data-selected]) [data-part=number]{text-decoration:underline;text-underline-offset:4px}.sp-grid [data-day-trigger]:focus-visible{outline:2px solid var(--sp-accent);outline-offset:2px}.sp-grid [data-day-trigger]:disabled{opacity:.3;cursor:default}.sp-time{display:flex;gap:12px;flex-wrap:wrap}.sp-time label{display:grid;gap:8px;font:inherit;font-size:12px}.sp-time input,.sp-time select{width:72px;min-height:40px;border:1px solid #dddde2;padding:8px;box-sizing:border-box;background:transparent;color:inherit;font:inherit}.sp-time [aria-invalid=true]{outline:2px solid #e4002b}@media(max-width:640px){.sp-calendar{grid-template-columns:1fr}}
package/dist/svelte.ts ADDED
@@ -0,0 +1 @@
1
+ export*from"./index";import{Calendar,DateTimeRoot}from"@salyra-ui/calendar/svelte";import{DatePicker}from"@salyra-ui/date-picker/svelte";import{TimePicker}from"@salyra-ui/time-picker/svelte";export const DateTimePicker={...Calendar,...DatePicker,...TimePicker,Root:DateTimeRoot,Calendar:Calendar.View};export{usePickerStore}from"@salyra-ui/calendar/svelte";export{DateTimeRoot as Root}from"@salyra-ui/calendar/svelte";export{Field,Action,MonthSelect,YearSelect}from"@salyra-ui/date-picker/svelte";export{Segment,Period,Time}from"@salyra-ui/time-picker/svelte";
@@ -0,0 +1,43 @@
1
+ export * from "./index";
2
+ import type { PickerStore } from "@salyra-ui/calendar";
3
+ import type { DateTimePickerOptions } from "./index";
4
+ export declare function mountPicker(element: HTMLElement, options?: DateTimePickerOptions | PickerStore): {
5
+ store: {
6
+ getSnapshot: () => import("@salyra-ui/calendar").PickerSnapshot;
7
+ subscribe(fn: () => void): () => void;
8
+ subscribeValue(fn: (v: import("@salyra-ui/calendar").PickerValue) => void): () => void;
9
+ getMonth(offset?: number): import("@salyra-ui/calendar").CalendarMonth;
10
+ getDay(date: string): {
11
+ selected: boolean;
12
+ rangeStart: boolean;
13
+ rangeEnd: boolean;
14
+ inRange: boolean;
15
+ preview: boolean;
16
+ disabled: boolean;
17
+ today: boolean;
18
+ weekend: boolean;
19
+ focused: boolean;
20
+ };
21
+ setVisibleMonth(next: import("@salyra-ui/calendar").Month): void;
22
+ navigate(count: number): void;
23
+ focus(date: string): void;
24
+ moveFocus(key: string, shift?: boolean): boolean;
25
+ hover(date: string | null): void;
26
+ selectDate(date: string): boolean;
27
+ setDate(date: string, endpoint?: import("@salyra-ui/calendar").Endpoint): boolean;
28
+ setTime(time: string, endpoint?: import("@salyra-ui/calendar").Endpoint): boolean;
29
+ setDayOffset(offset: number, endpoint?: import("@salyra-ui/calendar").Endpoint): boolean;
30
+ setEndpoint(endpoint: import("@salyra-ui/calendar").Endpoint): void;
31
+ setValue(value: import("@salyra-ui/calendar").PickerValue): void;
32
+ apply(): boolean;
33
+ cancel(): void;
34
+ clear(): void;
35
+ setOpen(open: boolean): void;
36
+ setOptions(patch: Partial<import("@salyra-ui/calendar").PickerOptions>): void;
37
+ validate: () => string | null;
38
+ destroy(): void;
39
+ readonly cacheSize: number;
40
+ };
41
+ destroy(): void;
42
+ };
43
+ export declare const mountDateTimePicker: typeof mountPicker;
@@ -0,0 +1 @@
1
+ var k=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var P=(r,e)=>{for(var o in e)k(r,o,{get:e[o],enumerable:!0})},p=(r,e,o,c)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of x(e))!S.call(r,a)&&a!==o&&k(r,a,{get:()=>e[a],enumerable:!(c=u(e,a))||c.enumerable});return r},i=(r,e,o)=>(p(r,e,"default"),o&&p(o,e,"default"));var n={};P(n,{createDateTimePickerStore:()=>s,createPickerStore:()=>m,mountDateTimePicker:()=>D,mountPicker:()=>f});var t={};P(t,{createDateTimePickerStore:()=>s,createPickerStore:()=>m});i(t,h);import*as h from"@salyra-ui/calendar";import{createPickerStore as T}from"@salyra-ui/calendar";function m(r={}){return T({...r,kind:"datetime"})}var s=m;i(n,t);import{mountPicker as d}from"@salyra-ui/calendar/vanilla";function f(r,e={}){if("getSnapshot"in e){if(e.getSnapshot().options.kind!=="datetime")throw new RangeError("Use a datetime store with DateTimePicker");return d(r,e)}return d(r,{...e,kind:"datetime"})}var D=f;export{s as createDateTimePickerStore,m as createPickerStore,D as mountDateTimePicker,f as mountPicker};