@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.
- package/LICENSE +21 -0
- package/README.md +27 -0
- package/dist/angular.d.ts +22 -0
- package/dist/angular.js +1 -0
- package/dist/astro/Action.astro +7 -0
- package/dist/astro/Calendar.astro +7 -0
- package/dist/astro/Cell.astro +7 -0
- package/dist/astro/Continuous.astro +7 -0
- package/dist/astro/DateTimePicker.astro +7 -0
- package/dist/astro/DayTrigger.astro +7 -0
- package/dist/astro/Field.astro +7 -0
- package/dist/astro/Grid.astro +7 -0
- package/dist/astro/Heading.astro +7 -0
- package/dist/astro/MonthSelect.astro +7 -0
- package/dist/astro/Number.astro +7 -0
- package/dist/astro/Period.astro +7 -0
- package/dist/astro/Root.astro +7 -0
- package/dist/astro/Segment.astro +7 -0
- package/dist/astro/Week.astro +7 -0
- package/dist/astro/Weekday.astro +7 -0
- package/dist/astro/YearSelect.astro +7 -0
- package/dist/browser/date-time-picker.js +1554 -0
- package/dist/browser/date-time-picker.min.js +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.js +1 -0
- package/dist/react.d.ts +47 -0
- package/dist/react.js +1 -0
- package/dist/styles.css +115 -0
- package/dist/styles.min.css +1 -0
- package/dist/svelte.ts +1 -0
- package/dist/vanilla.d.ts +43 -0
- package/dist/vanilla.js +1 -0
- package/dist/vue.d.ts +292 -0
- package/dist/vue.js +1 -0
- package/package.json +106 -0
|
@@ -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=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[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);})();
|
package/dist/index.d.ts
ADDED
|
@@ -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};
|
package/dist/react.d.ts
ADDED
|
@@ -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};
|
package/dist/styles.css
ADDED
|
@@ -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;
|
package/dist/vanilla.js
ADDED
|
@@ -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};
|