timepicker-ui 4.2.2 → 4.3.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.
@@ -1 +1 @@
1
- function f(n){if(!n||n==="--:--")return null;let t=n.match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);if(t)return{hour:t[1],minutes:t[2],type:t[3].toUpperCase()};let e=n.match(/^(\d{1,2}):(\d{2})$/);return e?{hour:e[1],minutes:e[2]}:null}function o(n){let t=n.minutes==="--"?"--":n.minutes.padStart(2,"0"),e=`${n.hour}:${t}`;return n.type?`${e} ${n.type}`:e}function v(n,t){if(!n)return 0;let e=parseInt(n.hour,10),i=parseInt(n.minutes,10);return t==="12h"&&n.type&&(n.type==="PM"&&e!==12&&(e+=12),n.type==="AM"&&e===12&&(e=0)),e*60+i}function g(n,t,e){if(!n||!t)return 0;let i=v(n,e);return v(t,e)-i}function p(n,t){return n?t==="12h"?!!(n.hour&&n.minutes&&n.type):!!(n.hour&&n.minutes):!1}function V(n){if(!n||!n.includes(" - "))return{from:null,to:null};let t=n.split(" - ").map(e=>e.trim());return t.length!==2||t[0]==="--:--"||t[1]==="--:--"?{from:null,to:null}:{from:f(t[0]),to:f(t[1])}}var h=class{activePart="from";fromValue=null;toValue=null;previewValue=null;clockType;minDuration;maxDuration;emitter;constructor(t,e,i,a){this.clockType=t,this.minDuration=e,this.maxDuration=i,this.emitter=a}getActivePart(){return this.activePart}getFromValue(){return this.fromValue}getToValue(){return this.toValue}getPreviewValue(){return this.previewValue}setFromValue(t){this.fromValue=t}setToValue(t){this.toValue=t}setPreviewValue(t){this.previewValue=t}isFromComplete(){return p(this.fromValue,this.clockType)}isToComplete(){return p(this.toValue,this.clockType)}canSwitchToEnd(){return this.isFromComplete()}canConfirm(){return!this.isFromComplete()||!this.isToComplete()?!1:this.getDuration()>0}setActivePart(t){if(t==="to"&&!this.canSwitchToEnd())return!1;let e=this.activePart!==t;return this.activePart=t,e&&(this.previewValue=null),e}resetActivePart(){this.activePart="from",this.previewValue=null}getCurrentValue(){return this.previewValue?this.previewValue:this.activePart==="from"?this.fromValue:this.toValue}getSavedValue(){return this.activePart==="from"?this.fromValue:this.toValue}commitPreview(){this.previewValue&&(this.activePart==="from"?this.fromValue=this.previewValue:this.toValue=this.previewValue,this.previewValue=null)}getDuration(){return g(this.fromValue,this.toValue,this.clockType)}validate(){if(!this.fromValue||!this.toValue)return{valid:!0,duration:0};let t=this.getDuration(),e=!0;return this.minDuration!==void 0&&t<this.minDuration&&(e=!1),this.maxDuration!==void 0&&t>this.maxDuration&&(e=!1),this.emitter.emit("range:validation",{valid:e,duration:t,minDuration:this.minDuration,maxDuration:this.maxDuration}),{valid:e,duration:t}}getDisabledTimeForEndPart(){if(this.activePart==="from"||!this.fromValue||!this.isFromComplete())return null;let t=[],e=[],i=parseInt(this.fromValue.hour,10),a=parseInt(this.fromValue.minutes,10),r=this.fromValue.type;if(this.clockType==="24h"){for(let s=0;s<i;s++)t.push(s.toString().padStart(2,"0"));for(let s=0;s<a;s++)e.push(s.toString().padStart(2,"0"));return{hours:t,minutes:e,fromHour:i}}for(let s=0;s<a;s++)e.push(s.toString().padStart(2,"0"));return{hours:t,minutes:e,fromType:r,fromHour:i}}reset(){this.activePart="from",this.fromValue=null,this.toValue=null,this.previewValue=null}};var c=class{core;state;constructor(t,e){this.core=t,this.state=e}updateTabs(){let t=this.core.getModalElement();if(!t)return;let e=t.querySelector(".tp-ui-range-tab.tp-ui-range-from"),i=t.querySelector(".tp-ui-range-tab.tp-ui-range-to"),a=this.state.getActivePart()==="from",r=this.state.isFromComplete();e?.classList.toggle("active",a),i?.classList.toggle("active",!a),i?.classList.toggle("disabled",!r),e?.setAttribute("aria-selected",String(a)),i?.setAttribute("aria-selected",String(!a)),i?.setAttribute("aria-disabled",String(!r)),e?.setAttribute("tabindex",a?"0":"-1"),i?.setAttribute("tabindex",a||!r?"-1":"0")}updateTimeDisplay(){let t=this.core.getModalElement();if(!t)return;let e=t.querySelector(".tp-ui-range-from-time"),i=t.querySelector(".tp-ui-range-to-time"),a=this.state.getActivePart(),r=this.state.getPreviewValue(),s=this.state.getFromValue(),m=this.state.getToValue(),l="--:--";a==="from"&&r?l=o(r):s&&(l=o(s));let d="--:--";a==="to"&&r?d=o(r):m&&(d=o(m)),e&&(e.textContent=l),i&&(i.textContent=d)}updateOkButton(){let t=this.core.getOkButton();if(!t)return;let e=this.state.canConfirm();t.classList.toggle("disabled",!e),t.setAttribute("aria-disabled",String(!e))}updateInputValue(){let t=this.core.getInput();if(!t)return;let e=this.state.getFromValue(),i=this.state.getToValue(),a=e?o(e):"--:--",r=i?o(i):"--:--";t.value=`${a} - ${r}`}syncClockToActivePart(){let t=this.state.getSavedValue(),e=this.core.getHour(),i=this.core.getMinutes();if(e&&(e.value=t?.hour??"12"),i&&(i.value=t?.minutes??"00"),this.core.options.clock.type==="12h"){let a=this.core.getAM(),r=this.core.getPM();t?.type==="AM"?(a?.classList.add("active"),r?.classList.remove("active")):t?.type==="PM"?(r?.classList.add("active"),a?.classList.remove("active")):(a?.classList.remove("active"),r?.classList.remove("active"))}i&&(i.blur(),i.classList.remove("active")),e&&e.click()}updateAll(){this.updateTabs(),this.updateTimeDisplay(),this.updateOkButton()}};var u=class{core;emitter;state;ui;cleanupHandlers=[];isSyncingAmPm=!1;boundHandleMinuteCommit;boundHandleConfirm;boundHandleUpdate;boundHandleAmPm;boundHandleClear;constructor(t,e){this.core=t,this.emitter=e;let{range:i,clock:a}=t.options;this.state=new h(a.type,i?.minDuration,i?.maxDuration,e),this.ui=new c(t,this.state),this.boundHandleMinuteCommit=this.handleMinuteCommit.bind(this),this.boundHandleConfirm=this.handleConfirm.bind(this),this.boundHandleUpdate=this.handleUpdate.bind(this),this.boundHandleAmPm=this.handleAmPm.bind(this),this.boundHandleClear=this.handleClear.bind(this)}get isEnabled(){return this.core.options.range?.enabled===!0}init(){if(!this.isEnabled)return;let e=this.core.getInput()?.value||"",{from:i,to:a}=V(e);this.state.setFromValue(i),this.state.setToValue(a),this.state.setActivePart("from"),this.state.setPreviewValue(null),this.bindEvents(),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent(),this.ui.updateAll()}getActivePart(){return this.state.getActivePart()}setActivePart(t){if(!this.isEnabled)return;this.state.setActivePart(t)&&this.emitter.emit("range:switch",{active:t,disabledTime:this.state.getDisabledTimeForEndPart()}),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent(),this.ui.updateAll()}getFromValue(){return this.state.getFromValue()}getToValue(){return this.state.getToValue()}getDisabledTimeForEndPart(){return this.isEnabled?this.state.getDisabledTimeForEndPart():null}getDuration(){return this.state.getDuration()}validateRange(){return this.isEnabled?this.state.validate():{valid:!0,duration:0}}canConfirm(){return this.isEnabled?this.state.canConfirm():!0}getFormattedRange(){let t=this.state.getFromValue(),e=this.state.getToValue();return!t||!e?null:{from:o(t),to:o(e)}}bindEvents(){let t=this.core.getModalElement();if(!t)return;let e=t.querySelector(".tp-ui-range-tab.tp-ui-range-from"),i=t.querySelector(".tp-ui-range-tab.tp-ui-range-to");if(e){let a=()=>this.setActivePart("from");e.addEventListener("click",a),this.cleanupHandlers.push(()=>e.removeEventListener("click",a))}if(i){let a=()=>this.setActivePart("to");i.addEventListener("click",a),this.cleanupHandlers.push(()=>i.removeEventListener("click",a))}this.emitter.on("update",this.boundHandleUpdate),this.cleanupHandlers.push(()=>this.emitter.off("update",this.boundHandleUpdate)),this.emitter.on("range:minute:commit",this.boundHandleMinuteCommit),this.cleanupHandlers.push(()=>this.emitter.off("range:minute:commit",this.boundHandleMinuteCommit)),this.emitter.on("confirm",this.boundHandleConfirm),this.cleanupHandlers.push(()=>this.emitter.off("confirm",this.boundHandleConfirm)),this.emitter.on("select:am",this.boundHandleAmPm),this.cleanupHandlers.push(()=>this.emitter.off("select:am",this.boundHandleAmPm)),this.emitter.on("select:pm",this.boundHandleAmPm),this.cleanupHandlers.push(()=>this.emitter.off("select:pm",this.boundHandleAmPm)),this.emitter.on("clear",this.boundHandleClear),this.cleanupHandlers.push(()=>this.emitter.off("clear",this.boundHandleClear))}handleClear(){this.isEnabled&&(this.state.setFromValue(null),this.state.setToValue(null),this.state.setPreviewValue(null),this.state.resetActivePart())}handleUpdate(){if(!this.isEnabled)return;let t=this.core.getHour(),e=this.core.getMinutes(),i=this.core.getActiveTypeMode(),a=t?.value??"12",r=this.state.getSavedValue(),m=r?.minutes&&r.minutes!=="--"?e?.value??"--":"--",l=this.core.options.clock.type==="12h"?i?.textContent??void 0:void 0;this.state.setPreviewValue({hour:a,minutes:m,type:l}),this.ui.updateAll()}handleMinuteCommit(t){if(!this.isEnabled)return;let e={hour:t.hour,minutes:t.minutes,type:t.type??void 0};this.state.getActivePart()==="from"?(this.state.setFromValue(e),this.state.setPreviewValue(null),this.state.isFromComplete()&&(this.state.setActivePart("to"),this.emitter.emit("range:switch",{active:"to",disabledTime:this.state.getDisabledTimeForEndPart()}),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent())):(this.state.setToValue(e),this.state.setPreviewValue(null)),this.state.validate(),this.ui.updateAll()}handleAmPm(){if(!this.isEnabled||this.isSyncingAmPm||this.core.options.clock.type!=="12h")return;let e=this.core.getActiveTypeMode()?.textContent;if(!e)return;if(this.state.getActivePart()==="from"){let a=this.state.getFromValue();a&&(this.state.setFromValue({...a,type:e}),this.state.isFromComplete()&&(this.state.setActivePart("to"),this.state.setPreviewValue(null),this.emitter.emit("range:switch",{active:"to",disabledTime:this.state.getDisabledTimeForEndPart()}),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent()))}else{let a=this.state.getToValue();a&&this.state.setToValue({...a,type:e}),this.emitter.emit("range:switch",{active:"to",disabledTime:this.state.getDisabledTimeForEndPart()})}this.state.validate(),this.ui.updateAll()}emitAmPmSyncEvent(){if(this.core.options.clock.type!=="12h")return;let t=this.state.getSavedValue();if(t?.type){this.isSyncingAmPm=!0;try{t.type==="AM"?this.emitter.emit("select:am",{}):t.type==="PM"&&this.emitter.emit("select:pm",{})}finally{this.isSyncingAmPm=!1}}}handleConfirm(t){if(!this.isEnabled)return;this.state.commitPreview();let e=this.state.getFromValue(),i=this.state.getToValue(),a=e?o(e):"--:--",r=i?o(i):"--:--",s=this.state.getDuration();this.ui.updateInputValue(),this.emitter.emit("range:confirm",{from:a,to:r,duration:s})}reset(){this.state.reset()}destroy(){this.cleanupHandlers.forEach(t=>t()),this.cleanupHandlers=[],this.reset()}};var k={name:"range",factory:(n,t)=>new u(n,t)};export{u as RangeManager,k as RangePlugin};
1
+ function f(n){if(!n||n==="--:--")return null;let t=n.match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);if(t)return{hour:t[1],minutes:t[2],type:t[3].toUpperCase()};let e=n.match(/^(\d{1,2}):(\d{2})$/);return e?{hour:e[1],minutes:e[2]}:null}function o(n){let t=n.minutes==="--"?"--":n.minutes.padStart(2,"0"),e=`${n.hour}:${t}`;return n.type?`${e} ${n.type}`:e}function v(n,t){if(!n)return 0;let e=parseInt(n.hour,10),i=parseInt(n.minutes,10);return t==="12h"&&n.type&&(n.type==="PM"&&e!==12&&(e+=12),n.type==="AM"&&e===12&&(e=0)),e*60+i}function g(n,t,e){if(!n||!t)return 0;let i=v(n,e);return v(t,e)-i}function p(n,t){return n?t==="12h"?!!(n.hour&&n.minutes&&n.type):!!(n.hour&&n.minutes):!1}function V(n){if(!n||!n.includes(" - "))return{from:null,to:null};let t=n.split(" - ").map(e=>e.trim());return t.length!==2||t[0]==="--:--"||t[1]==="--:--"?{from:null,to:null}:{from:f(t[0]),to:f(t[1])}}var c=class{activePart="from";fromValue=null;toValue=null;previewValue=null;clockType;minDuration;maxDuration;emitter;constructor(t,e,i,a){this.clockType=t,this.minDuration=e,this.maxDuration=i,this.emitter=a}getActivePart(){return this.activePart}getFromValue(){return this.fromValue}getToValue(){return this.toValue}getPreviewValue(){return this.previewValue}setFromValue(t){this.fromValue=t}setToValue(t){this.toValue=t}setPreviewValue(t){this.previewValue=t}isFromComplete(){return p(this.fromValue,this.clockType)}isToComplete(){return p(this.toValue,this.clockType)}canSwitchToEnd(){return this.isFromComplete()}canConfirm(){return!this.isFromComplete()||!this.isToComplete()?!1:this.getDuration()>0}setActivePart(t){if(t==="to"&&!this.canSwitchToEnd())return!1;let e=this.activePart!==t;return this.activePart=t,e&&(this.previewValue=null),e}resetActivePart(){this.activePart="from",this.previewValue=null}getCurrentValue(){return this.previewValue?this.previewValue:this.activePart==="from"?this.fromValue:this.toValue}getSavedValue(){return this.activePart==="from"?this.fromValue:this.toValue}commitPreview(){this.previewValue&&(this.activePart==="from"?this.fromValue=this.previewValue:this.toValue=this.previewValue,this.previewValue=null)}getDuration(){return g(this.fromValue,this.toValue,this.clockType)}validate(){if(!this.fromValue||!this.toValue)return{valid:!0,duration:0};let t=this.getDuration(),e=!0;return this.minDuration!==void 0&&t<this.minDuration&&(e=!1),this.maxDuration!==void 0&&t>this.maxDuration&&(e=!1),this.emitter.emit("range:validation",{valid:e,duration:t,minDuration:this.minDuration,maxDuration:this.maxDuration}),{valid:e,duration:t}}getDisabledTimeForEndPart(){if(this.activePart==="from"||!this.fromValue||!this.isFromComplete())return null;let t=[],e=[],i=parseInt(this.fromValue.hour,10),a=parseInt(this.fromValue.minutes,10),r=this.fromValue.type;if(this.clockType==="24h"){for(let s=0;s<i;s++)t.push(s.toString().padStart(2,"0"));for(let s=0;s<a;s++)e.push(s.toString().padStart(2,"0"));return{hours:t,minutes:e,fromHour:i}}for(let s=0;s<a;s++)e.push(s.toString().padStart(2,"0"));return{hours:t,minutes:e,fromType:r,fromHour:i}}reset(){this.activePart="from",this.fromValue=null,this.toValue=null,this.previewValue=null}};var h=class{core;state;constructor(t,e){this.core=t,this.state=e}updateTabs(){let t=this.core.getModalElement();if(!t)return;let e=t.querySelector(".tp-ui-range-tab.tp-ui-range-from"),i=t.querySelector(".tp-ui-range-tab.tp-ui-range-to"),a=this.state.getActivePart()==="from",r=this.state.isFromComplete();e?.classList.toggle("active",a),i?.classList.toggle("active",!a),i?.classList.toggle("disabled",!r),e?.setAttribute("aria-selected",String(a)),i?.setAttribute("aria-selected",String(!a)),i?.setAttribute("aria-disabled",String(!r)),e?.setAttribute("tabindex",a?"0":"-1"),i?.setAttribute("tabindex",a||!r?"-1":"0")}updateTimeDisplay(){let t=this.core.getModalElement();if(!t)return;let e=t.querySelector(".tp-ui-range-from-time"),i=t.querySelector(".tp-ui-range-to-time"),a=this.state.getActivePart(),r=this.state.getPreviewValue(),s=this.state.getFromValue(),u=this.state.getToValue(),m="--:--";a==="from"&&r?m=o(r):s&&(m=o(s));let d="--:--";a==="to"&&r?d=o(r):u&&(d=o(u)),e&&(e.textContent=m),i&&(i.textContent=d)}updateOkButton(){let t=this.core.getOkButton();if(!t)return;let e=this.state.canConfirm();t.classList.toggle("disabled",!e),t.setAttribute("aria-disabled",String(!e))}updateInputValue(){let t=this.core.getInput();if(!t)return;let e=this.state.getFromValue(),i=this.state.getToValue(),a=e?o(e):"--:--",r=i?o(i):"--:--";t.value=`${a} - ${r}`}syncClockToActivePart(){let t=this.state.getSavedValue(),e=this.core.getHour(),i=this.core.getMinutes();if(e&&(e.value=t?.hour??"12"),i&&(i.value=t?.minutes??"00"),this.core.options.clock.type==="12h"){let a=this.core.getAM(),r=this.core.getPM();t?.type==="AM"?(a?.classList.add("active"),r?.classList.remove("active")):t?.type==="PM"?(r?.classList.add("active"),a?.classList.remove("active")):(a?.classList.remove("active"),r?.classList.remove("active"))}i&&(i.blur(),i.classList.remove("active")),e&&e.click()}updateAll(){this.updateTabs(),this.updateTimeDisplay(),this.updateOkButton()}};var l=class{core;emitter;state;ui;cleanupHandlers=[];isSyncingAmPm=!1;boundHandleMinuteCommit;boundHandleConfirm;boundHandleUpdate;boundHandleAmPm;boundHandleClear;constructor(t,e){this.core=t,this.emitter=e;let{range:i,clock:a}=t.options;this.state=new c(a.type,i?.minDuration,i?.maxDuration,e),this.ui=new h(t,this.state),this.boundHandleMinuteCommit=this.handleMinuteCommit.bind(this),this.boundHandleConfirm=this.handleConfirm.bind(this),this.boundHandleUpdate=this.handleUpdate.bind(this),this.boundHandleAmPm=this.handleAmPm.bind(this),this.boundHandleClear=this.handleClear.bind(this)}get isEnabled(){return this.core.options.range?.enabled===!0}init(){if(!this.isEnabled)return;let e=this.core.getInput()?.value||"",{from:i,to:a}=V(e);this.state.setFromValue(i),this.state.setToValue(a),this.state.setActivePart("from"),this.state.setPreviewValue(null),this.bindEvents(),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent(),this.ui.updateAll()}getActivePart(){return this.state.getActivePart()}setActivePart(t){if(!this.isEnabled)return;this.state.setActivePart(t)&&this.emitter.emit("range:switch",{active:t,disabledTime:this.state.getDisabledTimeForEndPart()}),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent(),this.ui.updateAll()}getFromValue(){return this.state.getFromValue()}getToValue(){return this.state.getToValue()}getDisabledTimeForEndPart(){return this.isEnabled?this.state.getDisabledTimeForEndPart():null}getDuration(){return this.state.getDuration()}validateRange(){return this.isEnabled?this.state.validate():{valid:!0,duration:0}}canConfirm(){return this.isEnabled?this.state.canConfirm():!0}getFormattedRange(){let t=this.state.getFromValue(),e=this.state.getToValue();return!t||!e?null:{from:o(t),to:o(e)}}bindEvents(){let t=this.core.getModalElement();if(!t)return;let e=t.querySelector(".tp-ui-range-tab.tp-ui-range-from"),i=t.querySelector(".tp-ui-range-tab.tp-ui-range-to");if(e){let a=()=>this.setActivePart("from");e.addEventListener("click",a),this.cleanupHandlers.push(()=>e.removeEventListener("click",a))}if(i){let a=()=>this.setActivePart("to");i.addEventListener("click",a),this.cleanupHandlers.push(()=>i.removeEventListener("click",a))}this.emitter.on("update",this.boundHandleUpdate),this.cleanupHandlers.push(()=>this.emitter.off("update",this.boundHandleUpdate)),this.emitter.on("range:minute:commit",this.boundHandleMinuteCommit),this.cleanupHandlers.push(()=>this.emitter.off("range:minute:commit",this.boundHandleMinuteCommit)),this.emitter.on("confirm",this.boundHandleConfirm),this.cleanupHandlers.push(()=>this.emitter.off("confirm",this.boundHandleConfirm)),this.emitter.on("select:am",this.boundHandleAmPm),this.cleanupHandlers.push(()=>this.emitter.off("select:am",this.boundHandleAmPm)),this.emitter.on("select:pm",this.boundHandleAmPm),this.cleanupHandlers.push(()=>this.emitter.off("select:pm",this.boundHandleAmPm)),this.emitter.on("clear",this.boundHandleClear),this.cleanupHandlers.push(()=>this.emitter.off("clear",this.boundHandleClear))}handleClear(){this.isEnabled&&(this.state.setFromValue(null),this.state.setToValue(null),this.state.setPreviewValue(null),this.state.resetActivePart())}handleUpdate(){if(!this.isEnabled)return;let t=this.core.getHour(),e=this.core.getMinutes(),i=this.core.getActiveTypeMode(),a=t?.value??"12",r=this.state.getSavedValue(),u=r?.minutes&&r.minutes!=="--"?e?.value??"--":"--",m=this.core.options.clock.type==="12h"?i?.textContent??void 0:void 0;this.state.setPreviewValue({hour:a,minutes:u,type:m}),this.ui.updateAll()}handleMinuteCommit(t){if(!this.isEnabled)return;let e={hour:t.hour,minutes:t.minutes,type:t.type??void 0};this.state.getActivePart()==="from"?(this.state.setFromValue(e),this.state.setPreviewValue(null),this.state.isFromComplete()&&(this.state.setActivePart("to"),this.emitter.emit("range:switch",{active:"to",disabledTime:this.state.getDisabledTimeForEndPart()}),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent())):(this.state.setToValue(e),this.state.setPreviewValue(null)),this.state.validate(),this.ui.updateAll()}handleAmPm(){if(!this.isEnabled||this.isSyncingAmPm||this.core.options.clock.type!=="12h")return;let e=this.core.getActiveTypeMode()?.textContent;if(!e)return;if(this.state.getActivePart()==="from"){let a=this.state.getFromValue();a&&(this.state.setFromValue({...a,type:e}),this.state.isFromComplete()&&(this.state.setActivePart("to"),this.state.setPreviewValue(null),this.emitter.emit("range:switch",{active:"to",disabledTime:this.state.getDisabledTimeForEndPart()}),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent()))}else{let a=this.state.getToValue();a&&this.state.setToValue({...a,type:e}),this.emitter.emit("range:switch",{active:"to",disabledTime:this.state.getDisabledTimeForEndPart()})}this.state.validate(),this.ui.updateAll()}emitAmPmSyncEvent(){if(this.core.options.clock.type!=="12h")return;let t=this.state.getSavedValue();if(t?.type){this.isSyncingAmPm=!0;try{t.type==="AM"?this.emitter.emit("select:am",{}):t.type==="PM"&&this.emitter.emit("select:pm",{})}finally{this.isSyncingAmPm=!1}}}handleConfirm(t){if(!this.isEnabled)return;this.state.commitPreview();let e=this.state.getFromValue(),i=this.state.getToValue(),a=e?o(e):"--:--",r=i?o(i):"--:--",s=this.state.getDuration();this.ui.updateInputValue(),this.emitter.emit("range:confirm",{from:a,to:r,duration:s})}reset(){this.state.reset()}destroy(){this.cleanupHandlers.forEach(t=>t()),this.cleanupHandlers=[],this.reset()}};var F={name:"range",factory:(n,t)=>new l(n,t),clearHandler:(n,t)=>{if(!n.options.range?.enabled)return;let e=n.getModalElement();if(!e)return;let i=e.querySelector(".tp-ui-range-from"),a=e.querySelector(".tp-ui-range-to"),r=e.querySelector(".tp-ui-range-from-time"),s=e.querySelector(".tp-ui-range-to-time");r&&(r.textContent="--:--"),s&&(s.textContent="--:--"),i?.classList.add("active"),a?.classList.remove("active"),i?.setAttribute("aria-selected","true"),a?.setAttribute("aria-selected","false"),i?.setAttribute("tabindex","0"),a?.setAttribute("tabindex","-1"),a?.classList.add("disabled"),a?.setAttribute("aria-disabled","true");let u=n.getHour();u&&u.focus(),t.emit("range:switch",{active:"from",disabledTime:null})}};export{l as RangeManager,F as RangePlugin};
@@ -1 +1 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TimepickerUIRange={})}(this,function(t){"use strict";function e(t){if(!t||"--:--"===t)return null;const e=t.match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);if(e)return{hour:e[1],minutes:e[2],type:e[3].toUpperCase()};const i=t.match(/^(\d{1,2}):(\d{2})$/);return i?{hour:i[1],minutes:i[2]}:null}function i(t){const e="--"===t.minutes?"--":t.minutes.padStart(2,"0"),i=`${t.hour}:${e}`;return t.type?`${i} ${t.type}`:i}function s(t,e){if(!t)return 0;let i=parseInt(t.hour,10);const s=parseInt(t.minutes,10);return"12h"===e&&t.type&&("PM"===t.type&&12!==i&&(i+=12),"AM"===t.type&&12===i&&(i=0)),60*i+s}function a(t,e){return!!t&&("12h"===e?!!(t.hour&&t.minutes&&t.type):!(!t.hour||!t.minutes))}class r{activePart="from";fromValue=null;toValue=null;previewValue=null;clockType;minDuration;maxDuration;emitter;constructor(t,e,i,s){this.clockType=t,this.minDuration=e,this.maxDuration=i,this.emitter=s}getActivePart(){return this.activePart}getFromValue(){return this.fromValue}getToValue(){return this.toValue}getPreviewValue(){return this.previewValue}setFromValue(t){this.fromValue=t}setToValue(t){this.toValue=t}setPreviewValue(t){this.previewValue=t}isFromComplete(){return a(this.fromValue,this.clockType)}isToComplete(){return a(this.toValue,this.clockType)}canSwitchToEnd(){return this.isFromComplete()}canConfirm(){if(!this.isFromComplete()||!this.isToComplete())return!1;return this.getDuration()>0}setActivePart(t){if("to"===t&&!this.canSwitchToEnd())return!1;const e=this.activePart!==t;return this.activePart=t,e&&(this.previewValue=null),e}resetActivePart(){this.activePart="from",this.previewValue=null}getCurrentValue(){return this.previewValue?this.previewValue:"from"===this.activePart?this.fromValue:this.toValue}getSavedValue(){return"from"===this.activePart?this.fromValue:this.toValue}commitPreview(){this.previewValue&&("from"===this.activePart?this.fromValue=this.previewValue:this.toValue=this.previewValue,this.previewValue=null)}getDuration(){return function(t,e,i){if(!t||!e)return 0;const a=s(t,i);return s(e,i)-a}(this.fromValue,this.toValue,this.clockType)}validate(){if(!this.fromValue||!this.toValue)return{valid:!0,duration:0};const t=this.getDuration();let e=!0;return void 0!==this.minDuration&&t<this.minDuration&&(e=!1),void 0!==this.maxDuration&&t>this.maxDuration&&(e=!1),this.emitter.emit("range:validation",{valid:e,duration:t,minDuration:this.minDuration,maxDuration:this.maxDuration}),{valid:e,duration:t}}getDisabledTimeForEndPart(){if("from"===this.activePart)return null;if(!this.fromValue||!this.isFromComplete())return null;const t=[],e=[],i=parseInt(this.fromValue.hour,10),s=parseInt(this.fromValue.minutes,10),a=this.fromValue.type;if("24h"===this.clockType){for(let e=0;e<i;e++)t.push(e.toString().padStart(2,"0"));for(let t=0;t<s;t++)e.push(t.toString().padStart(2,"0"));return{hours:t,minutes:e,fromHour:i}}for(let t=0;t<s;t++)e.push(t.toString().padStart(2,"0"));return{hours:t,minutes:e,fromType:a,fromHour:i}}reset(){this.activePart="from",this.fromValue=null,this.toValue=null,this.previewValue=null}}class n{core;state;constructor(t,e){this.core=t,this.state=e}updateTabs(){const t=this.core.getModalElement();if(!t)return;const e=t.querySelector(".tp-ui-range-tab.tp-ui-range-from"),i=t.querySelector(".tp-ui-range-tab.tp-ui-range-to"),s="from"===this.state.getActivePart(),a=this.state.isFromComplete();e?.classList.toggle("active",s),i?.classList.toggle("active",!s),i?.classList.toggle("disabled",!a),e?.setAttribute("aria-selected",String(s)),i?.setAttribute("aria-selected",String(!s)),i?.setAttribute("aria-disabled",String(!a)),e?.setAttribute("tabindex",s?"0":"-1"),i?.setAttribute("tabindex",s||!a?"-1":"0")}updateTimeDisplay(){const t=this.core.getModalElement();if(!t)return;const e=t.querySelector(".tp-ui-range-from-time"),s=t.querySelector(".tp-ui-range-to-time"),a=this.state.getActivePart(),r=this.state.getPreviewValue(),n=this.state.getFromValue(),o=this.state.getToValue();let u="--:--";"from"===a&&r?u=i(r):n&&(u=i(n));let l="--:--";"to"===a&&r?l=i(r):o&&(l=i(o)),e&&(e.textContent=u),s&&(s.textContent=l)}updateOkButton(){const t=this.core.getOkButton();if(!t)return;const e=this.state.canConfirm();t.classList.toggle("disabled",!e),t.setAttribute("aria-disabled",String(!e))}updateInputValue(){const t=this.core.getInput();if(!t)return;const e=this.state.getFromValue(),s=this.state.getToValue(),a=e?i(e):"--:--",r=s?i(s):"--:--";t.value=`${a} - ${r}`}syncClockToActivePart(){const t=this.state.getSavedValue(),e=this.core.getHour(),i=this.core.getMinutes();if(e&&(e.value=t?.hour??"12"),i&&(i.value=t?.minutes??"00"),"12h"===this.core.options.clock.type){const e=this.core.getAM(),i=this.core.getPM();"AM"===t?.type?(e?.classList.add("active"),i?.classList.remove("active")):"PM"===t?.type?(i?.classList.add("active"),e?.classList.remove("active")):(e?.classList.remove("active"),i?.classList.remove("active"))}i&&(i.blur(),i.classList.remove("active")),e&&e.click()}updateAll(){this.updateTabs(),this.updateTimeDisplay(),this.updateOkButton()}}class o{core;emitter;state;ui;cleanupHandlers=[];isSyncingAmPm=!1;boundHandleMinuteCommit;boundHandleConfirm;boundHandleUpdate;boundHandleAmPm;boundHandleClear;constructor(t,e){this.core=t,this.emitter=e;const{range:i,clock:s}=t.options;this.state=new r(s.type,i?.minDuration,i?.maxDuration,e),this.ui=new n(t,this.state),this.boundHandleMinuteCommit=this.handleMinuteCommit.bind(this),this.boundHandleConfirm=this.handleConfirm.bind(this),this.boundHandleUpdate=this.handleUpdate.bind(this),this.boundHandleAmPm=this.handleAmPm.bind(this),this.boundHandleClear=this.handleClear.bind(this)}get isEnabled(){return!0===this.core.options.range?.enabled}init(){if(!this.isEnabled)return;const t=this.core.getInput(),i=t?.value||"",{from:s,to:a}=function(t){if(!t||!t.includes(" - "))return{from:null,to:null};const i=t.split(" - ").map(t=>t.trim());return 2!==i.length||"--:--"===i[0]||"--:--"===i[1]?{from:null,to:null}:{from:e(i[0]),to:e(i[1])}}(i);this.state.setFromValue(s),this.state.setToValue(a),this.state.setActivePart("from"),this.state.setPreviewValue(null),this.bindEvents(),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent(),this.ui.updateAll()}getActivePart(){return this.state.getActivePart()}setActivePart(t){if(!this.isEnabled)return;this.state.setActivePart(t)&&this.emitter.emit("range:switch",{active:t,disabledTime:this.state.getDisabledTimeForEndPart()}),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent(),this.ui.updateAll()}getFromValue(){return this.state.getFromValue()}getToValue(){return this.state.getToValue()}getDisabledTimeForEndPart(){return this.isEnabled?this.state.getDisabledTimeForEndPart():null}getDuration(){return this.state.getDuration()}validateRange(){return this.isEnabled?this.state.validate():{valid:!0,duration:0}}canConfirm(){return!this.isEnabled||this.state.canConfirm()}getFormattedRange(){const t=this.state.getFromValue(),e=this.state.getToValue();return t&&e?{from:i(t),to:i(e)}:null}bindEvents(){const t=this.core.getModalElement();if(!t)return;const e=t.querySelector(".tp-ui-range-tab.tp-ui-range-from"),i=t.querySelector(".tp-ui-range-tab.tp-ui-range-to");if(e){const t=()=>this.setActivePart("from");e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))}if(i){const t=()=>this.setActivePart("to");i.addEventListener("click",t),this.cleanupHandlers.push(()=>i.removeEventListener("click",t))}this.emitter.on("update",this.boundHandleUpdate),this.cleanupHandlers.push(()=>this.emitter.off("update",this.boundHandleUpdate)),this.emitter.on("range:minute:commit",this.boundHandleMinuteCommit),this.cleanupHandlers.push(()=>this.emitter.off("range:minute:commit",this.boundHandleMinuteCommit)),this.emitter.on("confirm",this.boundHandleConfirm),this.cleanupHandlers.push(()=>this.emitter.off("confirm",this.boundHandleConfirm)),this.emitter.on("select:am",this.boundHandleAmPm),this.cleanupHandlers.push(()=>this.emitter.off("select:am",this.boundHandleAmPm)),this.emitter.on("select:pm",this.boundHandleAmPm),this.cleanupHandlers.push(()=>this.emitter.off("select:pm",this.boundHandleAmPm)),this.emitter.on("clear",this.boundHandleClear),this.cleanupHandlers.push(()=>this.emitter.off("clear",this.boundHandleClear))}handleClear(){this.isEnabled&&(this.state.setFromValue(null),this.state.setToValue(null),this.state.setPreviewValue(null),this.state.resetActivePart())}handleUpdate(){if(!this.isEnabled)return;const t=this.core.getHour(),e=this.core.getMinutes(),i=this.core.getActiveTypeMode(),s=t?.value??"12",a=this.state.getSavedValue(),r=a?.minutes&&"--"!==a.minutes?e?.value??"--":"--",n="12h"===this.core.options.clock.type?i?.textContent??void 0:void 0;this.state.setPreviewValue({hour:s,minutes:r,type:n}),this.ui.updateAll()}handleMinuteCommit(t){if(!this.isEnabled)return;const e={hour:t.hour,minutes:t.minutes,type:t.type??void 0};"from"===this.state.getActivePart()?(this.state.setFromValue(e),this.state.setPreviewValue(null),this.state.isFromComplete()&&(this.state.setActivePart("to"),this.emitter.emit("range:switch",{active:"to",disabledTime:this.state.getDisabledTimeForEndPart()}),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent())):(this.state.setToValue(e),this.state.setPreviewValue(null)),this.state.validate(),this.ui.updateAll()}handleAmPm(){if(!this.isEnabled)return;if(this.isSyncingAmPm)return;if("12h"!==this.core.options.clock.type)return;const t=this.core.getActiveTypeMode(),e=t?.textContent;if(!e)return;if("from"===this.state.getActivePart()){const t=this.state.getFromValue();t&&(this.state.setFromValue({...t,type:e}),this.state.isFromComplete()&&(this.state.setActivePart("to"),this.state.setPreviewValue(null),this.emitter.emit("range:switch",{active:"to",disabledTime:this.state.getDisabledTimeForEndPart()}),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent()))}else{const t=this.state.getToValue();t&&this.state.setToValue({...t,type:e}),this.emitter.emit("range:switch",{active:"to",disabledTime:this.state.getDisabledTimeForEndPart()})}this.state.validate(),this.ui.updateAll()}emitAmPmSyncEvent(){if("12h"!==this.core.options.clock.type)return;const t=this.state.getSavedValue();if(t?.type){this.isSyncingAmPm=!0;try{"AM"===t.type?this.emitter.emit("select:am",{}):"PM"===t.type&&this.emitter.emit("select:pm",{})}finally{this.isSyncingAmPm=!1}}}handleConfirm(t){if(!this.isEnabled)return;this.state.commitPreview();const e=this.state.getFromValue(),s=this.state.getToValue(),a=e?i(e):"--:--",r=s?i(s):"--:--",n=this.state.getDuration();this.ui.updateInputValue(),this.emitter.emit("range:confirm",{from:a,to:r,duration:n})}reset(){this.state.reset()}destroy(){this.cleanupHandlers.forEach(t=>t()),this.cleanupHandlers=[],this.reset()}}const u={name:"range",factory:(t,e)=>new o(t,e)};t.RangeManager=o,t.RangePlugin=u});
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).TimepickerUIRange={})}(this,function(t){"use strict";function e(t){if(!t||"--:--"===t)return null;const e=t.match(/^(\d{1,2}):(\d{2})\s*(AM|PM)$/i);if(e)return{hour:e[1],minutes:e[2],type:e[3].toUpperCase()};const i=t.match(/^(\d{1,2}):(\d{2})$/);return i?{hour:i[1],minutes:i[2]}:null}function i(t){const e="--"===t.minutes?"--":t.minutes.padStart(2,"0"),i=`${t.hour}:${e}`;return t.type?`${i} ${t.type}`:i}function s(t,e){if(!t)return 0;let i=parseInt(t.hour,10);const s=parseInt(t.minutes,10);return"12h"===e&&t.type&&("PM"===t.type&&12!==i&&(i+=12),"AM"===t.type&&12===i&&(i=0)),60*i+s}function a(t,e){return!!t&&("12h"===e?!!(t.hour&&t.minutes&&t.type):!(!t.hour||!t.minutes))}class r{activePart="from";fromValue=null;toValue=null;previewValue=null;clockType;minDuration;maxDuration;emitter;constructor(t,e,i,s){this.clockType=t,this.minDuration=e,this.maxDuration=i,this.emitter=s}getActivePart(){return this.activePart}getFromValue(){return this.fromValue}getToValue(){return this.toValue}getPreviewValue(){return this.previewValue}setFromValue(t){this.fromValue=t}setToValue(t){this.toValue=t}setPreviewValue(t){this.previewValue=t}isFromComplete(){return a(this.fromValue,this.clockType)}isToComplete(){return a(this.toValue,this.clockType)}canSwitchToEnd(){return this.isFromComplete()}canConfirm(){if(!this.isFromComplete()||!this.isToComplete())return!1;return this.getDuration()>0}setActivePart(t){if("to"===t&&!this.canSwitchToEnd())return!1;const e=this.activePart!==t;return this.activePart=t,e&&(this.previewValue=null),e}resetActivePart(){this.activePart="from",this.previewValue=null}getCurrentValue(){return this.previewValue?this.previewValue:"from"===this.activePart?this.fromValue:this.toValue}getSavedValue(){return"from"===this.activePart?this.fromValue:this.toValue}commitPreview(){this.previewValue&&("from"===this.activePart?this.fromValue=this.previewValue:this.toValue=this.previewValue,this.previewValue=null)}getDuration(){return function(t,e,i){if(!t||!e)return 0;const a=s(t,i);return s(e,i)-a}(this.fromValue,this.toValue,this.clockType)}validate(){if(!this.fromValue||!this.toValue)return{valid:!0,duration:0};const t=this.getDuration();let e=!0;return void 0!==this.minDuration&&t<this.minDuration&&(e=!1),void 0!==this.maxDuration&&t>this.maxDuration&&(e=!1),this.emitter.emit("range:validation",{valid:e,duration:t,minDuration:this.minDuration,maxDuration:this.maxDuration}),{valid:e,duration:t}}getDisabledTimeForEndPart(){if("from"===this.activePart)return null;if(!this.fromValue||!this.isFromComplete())return null;const t=[],e=[],i=parseInt(this.fromValue.hour,10),s=parseInt(this.fromValue.minutes,10),a=this.fromValue.type;if("24h"===this.clockType){for(let e=0;e<i;e++)t.push(e.toString().padStart(2,"0"));for(let t=0;t<s;t++)e.push(t.toString().padStart(2,"0"));return{hours:t,minutes:e,fromHour:i}}for(let t=0;t<s;t++)e.push(t.toString().padStart(2,"0"));return{hours:t,minutes:e,fromType:a,fromHour:i}}reset(){this.activePart="from",this.fromValue=null,this.toValue=null,this.previewValue=null}}class n{core;state;constructor(t,e){this.core=t,this.state=e}updateTabs(){const t=this.core.getModalElement();if(!t)return;const e=t.querySelector(".tp-ui-range-tab.tp-ui-range-from"),i=t.querySelector(".tp-ui-range-tab.tp-ui-range-to"),s="from"===this.state.getActivePart(),a=this.state.isFromComplete();e?.classList.toggle("active",s),i?.classList.toggle("active",!s),i?.classList.toggle("disabled",!a),e?.setAttribute("aria-selected",String(s)),i?.setAttribute("aria-selected",String(!s)),i?.setAttribute("aria-disabled",String(!a)),e?.setAttribute("tabindex",s?"0":"-1"),i?.setAttribute("tabindex",s||!a?"-1":"0")}updateTimeDisplay(){const t=this.core.getModalElement();if(!t)return;const e=t.querySelector(".tp-ui-range-from-time"),s=t.querySelector(".tp-ui-range-to-time"),a=this.state.getActivePart(),r=this.state.getPreviewValue(),n=this.state.getFromValue(),o=this.state.getToValue();let u="--:--";"from"===a&&r?u=i(r):n&&(u=i(n));let l="--:--";"to"===a&&r?l=i(r):o&&(l=i(o)),e&&(e.textContent=u),s&&(s.textContent=l)}updateOkButton(){const t=this.core.getOkButton();if(!t)return;const e=this.state.canConfirm();t.classList.toggle("disabled",!e),t.setAttribute("aria-disabled",String(!e))}updateInputValue(){const t=this.core.getInput();if(!t)return;const e=this.state.getFromValue(),s=this.state.getToValue(),a=e?i(e):"--:--",r=s?i(s):"--:--";t.value=`${a} - ${r}`}syncClockToActivePart(){const t=this.state.getSavedValue(),e=this.core.getHour(),i=this.core.getMinutes();if(e&&(e.value=t?.hour??"12"),i&&(i.value=t?.minutes??"00"),"12h"===this.core.options.clock.type){const e=this.core.getAM(),i=this.core.getPM();"AM"===t?.type?(e?.classList.add("active"),i?.classList.remove("active")):"PM"===t?.type?(i?.classList.add("active"),e?.classList.remove("active")):(e?.classList.remove("active"),i?.classList.remove("active"))}i&&(i.blur(),i.classList.remove("active")),e&&e.click()}updateAll(){this.updateTabs(),this.updateTimeDisplay(),this.updateOkButton()}}class o{core;emitter;state;ui;cleanupHandlers=[];isSyncingAmPm=!1;boundHandleMinuteCommit;boundHandleConfirm;boundHandleUpdate;boundHandleAmPm;boundHandleClear;constructor(t,e){this.core=t,this.emitter=e;const{range:i,clock:s}=t.options;this.state=new r(s.type,i?.minDuration,i?.maxDuration,e),this.ui=new n(t,this.state),this.boundHandleMinuteCommit=this.handleMinuteCommit.bind(this),this.boundHandleConfirm=this.handleConfirm.bind(this),this.boundHandleUpdate=this.handleUpdate.bind(this),this.boundHandleAmPm=this.handleAmPm.bind(this),this.boundHandleClear=this.handleClear.bind(this)}get isEnabled(){return!0===this.core.options.range?.enabled}init(){if(!this.isEnabled)return;const t=this.core.getInput(),i=t?.value||"",{from:s,to:a}=function(t){if(!t||!t.includes(" - "))return{from:null,to:null};const i=t.split(" - ").map(t=>t.trim());return 2!==i.length||"--:--"===i[0]||"--:--"===i[1]?{from:null,to:null}:{from:e(i[0]),to:e(i[1])}}(i);this.state.setFromValue(s),this.state.setToValue(a),this.state.setActivePart("from"),this.state.setPreviewValue(null),this.bindEvents(),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent(),this.ui.updateAll()}getActivePart(){return this.state.getActivePart()}setActivePart(t){if(!this.isEnabled)return;this.state.setActivePart(t)&&this.emitter.emit("range:switch",{active:t,disabledTime:this.state.getDisabledTimeForEndPart()}),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent(),this.ui.updateAll()}getFromValue(){return this.state.getFromValue()}getToValue(){return this.state.getToValue()}getDisabledTimeForEndPart(){return this.isEnabled?this.state.getDisabledTimeForEndPart():null}getDuration(){return this.state.getDuration()}validateRange(){return this.isEnabled?this.state.validate():{valid:!0,duration:0}}canConfirm(){return!this.isEnabled||this.state.canConfirm()}getFormattedRange(){const t=this.state.getFromValue(),e=this.state.getToValue();return t&&e?{from:i(t),to:i(e)}:null}bindEvents(){const t=this.core.getModalElement();if(!t)return;const e=t.querySelector(".tp-ui-range-tab.tp-ui-range-from"),i=t.querySelector(".tp-ui-range-tab.tp-ui-range-to");if(e){const t=()=>this.setActivePart("from");e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))}if(i){const t=()=>this.setActivePart("to");i.addEventListener("click",t),this.cleanupHandlers.push(()=>i.removeEventListener("click",t))}this.emitter.on("update",this.boundHandleUpdate),this.cleanupHandlers.push(()=>this.emitter.off("update",this.boundHandleUpdate)),this.emitter.on("range:minute:commit",this.boundHandleMinuteCommit),this.cleanupHandlers.push(()=>this.emitter.off("range:minute:commit",this.boundHandleMinuteCommit)),this.emitter.on("confirm",this.boundHandleConfirm),this.cleanupHandlers.push(()=>this.emitter.off("confirm",this.boundHandleConfirm)),this.emitter.on("select:am",this.boundHandleAmPm),this.cleanupHandlers.push(()=>this.emitter.off("select:am",this.boundHandleAmPm)),this.emitter.on("select:pm",this.boundHandleAmPm),this.cleanupHandlers.push(()=>this.emitter.off("select:pm",this.boundHandleAmPm)),this.emitter.on("clear",this.boundHandleClear),this.cleanupHandlers.push(()=>this.emitter.off("clear",this.boundHandleClear))}handleClear(){this.isEnabled&&(this.state.setFromValue(null),this.state.setToValue(null),this.state.setPreviewValue(null),this.state.resetActivePart())}handleUpdate(){if(!this.isEnabled)return;const t=this.core.getHour(),e=this.core.getMinutes(),i=this.core.getActiveTypeMode(),s=t?.value??"12",a=this.state.getSavedValue(),r=a?.minutes&&"--"!==a.minutes?e?.value??"--":"--",n="12h"===this.core.options.clock.type?i?.textContent??void 0:void 0;this.state.setPreviewValue({hour:s,minutes:r,type:n}),this.ui.updateAll()}handleMinuteCommit(t){if(!this.isEnabled)return;const e={hour:t.hour,minutes:t.minutes,type:t.type??void 0};"from"===this.state.getActivePart()?(this.state.setFromValue(e),this.state.setPreviewValue(null),this.state.isFromComplete()&&(this.state.setActivePart("to"),this.emitter.emit("range:switch",{active:"to",disabledTime:this.state.getDisabledTimeForEndPart()}),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent())):(this.state.setToValue(e),this.state.setPreviewValue(null)),this.state.validate(),this.ui.updateAll()}handleAmPm(){if(!this.isEnabled)return;if(this.isSyncingAmPm)return;if("12h"!==this.core.options.clock.type)return;const t=this.core.getActiveTypeMode(),e=t?.textContent;if(!e)return;if("from"===this.state.getActivePart()){const t=this.state.getFromValue();t&&(this.state.setFromValue({...t,type:e}),this.state.isFromComplete()&&(this.state.setActivePart("to"),this.state.setPreviewValue(null),this.emitter.emit("range:switch",{active:"to",disabledTime:this.state.getDisabledTimeForEndPart()}),this.ui.syncClockToActivePart(),this.emitAmPmSyncEvent()))}else{const t=this.state.getToValue();t&&this.state.setToValue({...t,type:e}),this.emitter.emit("range:switch",{active:"to",disabledTime:this.state.getDisabledTimeForEndPart()})}this.state.validate(),this.ui.updateAll()}emitAmPmSyncEvent(){if("12h"!==this.core.options.clock.type)return;const t=this.state.getSavedValue();if(t?.type){this.isSyncingAmPm=!0;try{"AM"===t.type?this.emitter.emit("select:am",{}):"PM"===t.type&&this.emitter.emit("select:pm",{})}finally{this.isSyncingAmPm=!1}}}handleConfirm(t){if(!this.isEnabled)return;this.state.commitPreview();const e=this.state.getFromValue(),s=this.state.getToValue(),a=e?i(e):"--:--",r=s?i(s):"--:--",n=this.state.getDuration();this.ui.updateInputValue(),this.emitter.emit("range:confirm",{from:a,to:r,duration:n})}reset(){this.state.reset()}destroy(){this.cleanupHandlers.forEach(t=>t()),this.cleanupHandlers=[],this.reset()}}const u={name:"range",factory:(t,e)=>new o(t,e),clearHandler:(t,e)=>{if(!t.options.range?.enabled)return;const i=t.getModalElement();if(!i)return;const s=i.querySelector(".tp-ui-range-from"),a=i.querySelector(".tp-ui-range-to"),r=i.querySelector(".tp-ui-range-from-time"),n=i.querySelector(".tp-ui-range-to-time");r&&(r.textContent="--:--"),n&&(n.textContent="--:--"),s?.classList.add("active"),a?.classList.remove("active"),s?.setAttribute("aria-selected","true"),a?.setAttribute("aria-selected","false"),s?.setAttribute("tabindex","0"),a?.setAttribute("tabindex","-1"),a?.classList.add("disabled"),a?.setAttribute("aria-disabled","true");const o=t.getHour();o&&o.focus(),e.emit("range:switch",{active:"from",disabledTime:null})}};t.RangeManager=o,t.RangePlugin=u});
@@ -1 +1 @@
1
- "use strict";var h=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var k=(o,e)=>{for(var t in e)h(o,t,{get:e[t],enumerable:!0})},I=(o,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of w(e))!b.call(o,n)&&n!==t&&h(o,n,{get:()=>e[n],enumerable:!(i=y(e,n))||i.enumerable});return o};var z=o=>I(h({},"__esModule",{value:!0}),o);var S={};k(S,{TimezoneManager:()=>l,TimezonePlugin:()=>D});module.exports=z(S);var p=null,A=o=>{if(!o||o==="+0"||o==="-0")return"+00:00";let e=o.startsWith("-")?"-":"+",i=o.replace(/^[+-]/,"").split(":"),n=i[0].padStart(2,"0"),r=i.length>1?i[1].padStart(2,"0"):"00";return`${e}${n}:${r}`},O=o=>{try{let n=new Intl.DateTimeFormat("en-US",{timeZone:o,timeZoneName:"shortOffset"}).formatToParts(new Date).find(r=>r.type==="timeZoneName")?.value?.replace("GMT","")||"";return A(n)}catch{return"+00:00"}};var x=o=>{try{return Intl.DateTimeFormat(void 0,{timeZone:o}),!0}catch{return!1}},L=["Pacific/Pago_Pago","Pacific/Honolulu","America/Anchorage","America/Los_Angeles","America/Denver","America/Chicago","America/New_York","America/Santiago","America/Sao_Paulo","Atlantic/Azores","UTC","Europe/Paris","Europe/Helsinki","Europe/Moscow","Asia/Dubai","Asia/Karachi","Asia/Kolkata","Asia/Kathmandu","Asia/Dhaka","Asia/Yangon","Asia/Bangkok","Asia/Shanghai","Asia/Tokyo","Australia/Darwin","Australia/Sydney","Pacific/Guadalcanal","Pacific/Auckland","Pacific/Chatham","Pacific/Kiritimati"],M=o=>{let e=O(o),t=o.split("/").pop()?.replace(/_/g," ")||o;return{id:o,label:`${t} (${e||"UTC"})`,offset:e}},T=o=>{let e=o??L;if(!o&&p)return p;let t=e.filter(x).map(M);return o||(p=t),t},E=()=>{p=null};var c=()=>typeof document<"u";var g={DEFAULT_DELAY:300,MODAL_ANIMATION:150,SCROLLBAR_RESTORE:400,MODAL_REMOVE:300,CLOCK_ANIMATION:600,TIPS_ANIMATION:401,MOBILE_TOGGLE:450,CLOCK_SCALE_DELAY:150,WRAPPER_TRANSITION:400,DROPDOWN_CLICK_DELAY:10};var m=class{core;emitter;selectedTimezone=null;constructor(e,t){this.core=e,this.emitter=t}getDropdown(){return this.core.getModalElement()?.querySelector(".tp-ui-timezone-dropdown")??null}getMenu(){return this.core.getModalElement()?.querySelector(".tp-ui-timezone-menu")??null}getOptions(){let e=this.getMenu();if(!e)return[];let t=e.querySelectorAll(".tp-ui-timezone-option"),i=[];return t.forEach(n=>{n instanceof HTMLElement&&i.push(n)}),i}populateOptions(){let{whitelist:e}=this.core.options.timezone??{},t=T(e),i=this.getMenu();if(!i)return;let n=t.map(r=>`<div class="tp-ui-timezone-option" role="option" data-value="${r.id}" tabindex="-1">${r.label}</div>`).join("");i.innerHTML=n}setOpen(e){let t=this.getDropdown();if(t&&(t.setAttribute("aria-expanded",String(e)),e)){let n=this.getMenu()?.querySelector('[data-selected="true"]');n instanceof HTMLElement&&n.scrollIntoView({block:"nearest"})}}isOpen(){return this.getDropdown()?.getAttribute("aria-expanded")==="true"}selectTimezone(e,t=!0){this.selectedTimezone=e;let n=this.getDropdown()?.querySelector(".tp-ui-timezone-selected"),r=this.getMenu();if(n&&r){let a=r.querySelectorAll(".tp-ui-timezone-option"),s="";a.forEach(d=>{let u=d.getAttribute("data-value")===e;d.setAttribute("data-selected",String(u)),u&&(s=d.textContent||"")}),n.textContent=s,n.removeAttribute("data-placeholder")}t&&this.emitter.emit("timezone:change",{timezone:this.selectedTimezone})}getSelectedTimezone(){return this.selectedTimezone}restorePreviousSelection(){let e=this.getDropdown(),t=e?.querySelector(".tp-ui-timezone-selected");if(!(!e||!t))if(this.selectedTimezone)this.selectTimezone(this.selectedTimezone,!1);else{let i=this.core.options.timezone?.default;i&&this.selectTimezone(i)}}reset(){this.selectedTimezone=null}};var f=class{focusedIndex=-1;getFocusedIndex(){return this.focusedIndex}setFocusedIndex(e){this.focusedIndex=e}moveDown(e){return this.focusedIndex=Math.min(this.focusedIndex+1,e-1),this.focusedIndex}moveUp(){return this.focusedIndex=Math.max(this.focusedIndex-1,0),this.focusedIndex}moveToFirst(){return this.focusedIndex=0,this.focusedIndex}moveToLast(e){return this.focusedIndex=e-1,this.focusedIndex}reset(){this.focusedIndex=-1}updateVisualFocus(e){e.forEach((t,i)=>{t.setAttribute("data-focused",String(i===this.focusedIndex))}),this.focusedIndex>=0&&e[this.focusedIndex]&&e[this.focusedIndex].scrollIntoView({block:"nearest",behavior:"smooth"})}};var l=class{core;emitter;dropdown;keyboard;cleanupHandlers=[];clickOutsideTimerId=null;constructor(e,t){this.core=e,this.emitter=t,this.dropdown=new m(e,t),this.keyboard=new f}get isEnabled(){return this.core.options.timezone?.enabled===!0}init(){!this.isEnabled||!c()||!this.dropdown.getDropdown()||(this.dropdown.populateOptions(),this.dropdown.restorePreviousSelection(),this.bindEvents())}getSelectedTimezone(){return this.dropdown.getSelectedTimezone()}setTimezone(e){this.isEnabled&&this.dropdown.selectTimezone(e)}bindEvents(){let e=this.dropdown.getDropdown(),t=this.dropdown.getMenu();if(!e||!t)return;let i=s=>{e.contains(s.target)||(this.dropdown.setOpen(!1),this.keyboard.reset(),c()&&document.removeEventListener("click",i))},n=s=>{s.stopPropagation(),this.dropdown.isOpen()?(this.dropdown.setOpen(!1),this.keyboard.reset()):(this.dropdown.setOpen(!0),this.clickOutsideTimerId=window.setTimeout(()=>{c()&&document.addEventListener("click",i),this.clickOutsideTimerId=null},g.DROPDOWN_CLICK_DELAY))},r=s=>{this.handleKeydown(s,i)},a=s=>{s.stopPropagation();let d=s.target;if(!(d instanceof HTMLElement))return;let u=d.closest(".tp-ui-timezone-option");if(u instanceof HTMLElement){let v=u.getAttribute("data-value");v&&(this.dropdown.selectTimezone(v),this.dropdown.setOpen(!1),this.keyboard.reset(),c()&&document.removeEventListener("click",i),e.focus())}};e.addEventListener("click",n),e.addEventListener("keydown",r),t.addEventListener("click",a),this.cleanupHandlers.push(()=>e.removeEventListener("click",n),()=>e.removeEventListener("keydown",r),()=>t.removeEventListener("click",a),()=>{c()&&document.removeEventListener("click",i)})}handleKeydown(e,t){if(!this.dropdown.getDropdown())return;let n=this.dropdown.isOpen(),r=this.dropdown.getOptions();switch(e.key){case"Enter":case" ":if(e.preventDefault(),!n)this.dropdown.setOpen(!0);else{let a=this.keyboard.getFocusedIndex();if(a>=0){let s=r[a]?.getAttribute("data-value");s&&(this.dropdown.selectTimezone(s),this.dropdown.setOpen(!1),this.keyboard.reset())}}break;case"Escape":e.preventDefault(),this.dropdown.setOpen(!1),this.keyboard.reset(),c()&&document.removeEventListener("click",t);break;case"ArrowDown":e.preventDefault(),n?(this.keyboard.moveDown(r.length),this.keyboard.updateVisualFocus(r)):this.dropdown.setOpen(!0);break;case"ArrowUp":e.preventDefault(),n&&(this.keyboard.moveUp(),this.keyboard.updateVisualFocus(r));break;case"Home":n&&(e.preventDefault(),this.keyboard.moveToFirst(),this.keyboard.updateVisualFocus(r));break;case"End":n&&(e.preventDefault(),this.keyboard.moveToLast(r.length),this.keyboard.updateVisualFocus(r));break}}destroy(){this.clickOutsideTimerId!==null&&(window.clearTimeout(this.clickOutsideTimerId),this.clickOutsideTimerId=null),this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[],this.keyboard.reset(),this.dropdown.reset(),E()}};var D={name:"timezone",factory:(o,e)=>new l(o,e)};0&&(module.exports={TimezoneManager,TimezonePlugin});
1
+ "use strict";var h=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var k=(o,e)=>{for(var t in e)h(o,t,{get:e[t],enumerable:!0})},z=(o,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of w(e))!b.call(o,n)&&n!==t&&h(o,n,{get:()=>e[n],enumerable:!(i=y(e,n))||i.enumerable});return o};var I=o=>z(h({},"__esModule",{value:!0}),o);var S={};k(S,{TimezoneManager:()=>l,TimezonePlugin:()=>D});module.exports=I(S);var p=null,A=o=>{if(!o||o==="+0"||o==="-0")return"+00:00";let e=o.startsWith("-")?"-":"+",i=o.replace(/^[+-]/,"").split(":"),n=i[0].padStart(2,"0"),r=i.length>1?i[1].padStart(2,"0"):"00";return`${e}${n}:${r}`},x=o=>{try{let n=new Intl.DateTimeFormat("en-US",{timeZone:o,timeZoneName:"shortOffset"}).formatToParts(new Date).find(r=>r.type==="timeZoneName")?.value?.replace("GMT","")||"";return A(n)}catch{return"+00:00"}};var O=o=>{try{return Intl.DateTimeFormat(void 0,{timeZone:o}),!0}catch{return!1}},L=["Pacific/Pago_Pago","Pacific/Honolulu","America/Anchorage","America/Los_Angeles","America/Denver","America/Chicago","America/New_York","America/Santiago","America/Sao_Paulo","Atlantic/Azores","UTC","Europe/Paris","Europe/Helsinki","Europe/Moscow","Asia/Dubai","Asia/Karachi","Asia/Kolkata","Asia/Kathmandu","Asia/Dhaka","Asia/Yangon","Asia/Bangkok","Asia/Shanghai","Asia/Tokyo","Australia/Darwin","Australia/Sydney","Pacific/Guadalcanal","Pacific/Auckland","Pacific/Chatham","Pacific/Kiritimati"],M=o=>{let e=x(o),t=o.split("/").pop()?.replace(/_/g," ")||o;return{id:o,label:`${t} (${e||"UTC"})`,offset:e}},T=o=>{let e=o??L;if(!o&&p)return p;let t=e.filter(O).map(M);return o||(p=t),t},E=()=>{p=null};var c=()=>typeof document<"u";var g={DEFAULT_DELAY:300,MODAL_ANIMATION:150,SCROLLBAR_RESTORE:400,MODAL_REMOVE:300,CLOCK_ANIMATION:600,TIPS_ANIMATION:401,MOBILE_TOGGLE:450,CLOCK_SCALE_DELAY:150,WRAPPER_TRANSITION:400,DROPDOWN_CLICK_DELAY:10};var m=class{core;emitter;selectedTimezone=null;constructor(e,t){this.core=e,this.emitter=t}getDropdown(){return this.core.getModalElement()?.querySelector(".tp-ui-timezone-dropdown")??null}getMenu(){return this.core.getModalElement()?.querySelector(".tp-ui-timezone-menu")??null}getOptions(){let e=this.getMenu();if(!e)return[];let t=e.querySelectorAll(".tp-ui-timezone-option"),i=[];return t.forEach(n=>{n instanceof HTMLElement&&i.push(n)}),i}populateOptions(){let{whitelist:e}=this.core.options.timezone??{},t=T(e),i=this.getMenu();if(!i)return;let n=t.map(r=>`<div class="tp-ui-timezone-option" role="option" data-value="${r.id}" tabindex="-1">${r.label}</div>`).join("");i.innerHTML=n}setOpen(e){let t=this.getDropdown();if(t&&(t.setAttribute("aria-expanded",String(e)),e)){let n=this.getMenu()?.querySelector('[data-selected="true"]');n instanceof HTMLElement&&n.scrollIntoView({block:"nearest"})}}isOpen(){return this.getDropdown()?.getAttribute("aria-expanded")==="true"}selectTimezone(e,t=!0){this.selectedTimezone=e;let n=this.getDropdown()?.querySelector(".tp-ui-timezone-selected"),r=this.getMenu();if(n&&r){let a=r.querySelectorAll(".tp-ui-timezone-option"),s="";a.forEach(d=>{let u=d.getAttribute("data-value")===e;d.setAttribute("data-selected",String(u)),u&&(s=d.textContent||"")}),n.textContent=s,n.removeAttribute("data-placeholder")}t&&this.emitter.emit("timezone:change",{timezone:this.selectedTimezone})}getSelectedTimezone(){return this.selectedTimezone}restorePreviousSelection(){let e=this.getDropdown(),t=e?.querySelector(".tp-ui-timezone-selected");if(!(!e||!t))if(this.selectedTimezone)this.selectTimezone(this.selectedTimezone,!1);else{let i=this.core.options.timezone?.default;i&&this.selectTimezone(i)}}reset(){this.selectedTimezone=null}};var f=class{focusedIndex=-1;getFocusedIndex(){return this.focusedIndex}setFocusedIndex(e){this.focusedIndex=e}moveDown(e){return this.focusedIndex=Math.min(this.focusedIndex+1,e-1),this.focusedIndex}moveUp(){return this.focusedIndex=Math.max(this.focusedIndex-1,0),this.focusedIndex}moveToFirst(){return this.focusedIndex=0,this.focusedIndex}moveToLast(e){return this.focusedIndex=e-1,this.focusedIndex}reset(){this.focusedIndex=-1}updateVisualFocus(e){e.forEach((t,i)=>{t.setAttribute("data-focused",String(i===this.focusedIndex))}),this.focusedIndex>=0&&e[this.focusedIndex]&&e[this.focusedIndex].scrollIntoView({block:"nearest",behavior:"smooth"})}};var l=class{core;emitter;dropdown;keyboard;cleanupHandlers=[];clickOutsideTimerId=null;constructor(e,t){this.core=e,this.emitter=t,this.dropdown=new m(e,t),this.keyboard=new f}get isEnabled(){return this.core.options.timezone?.enabled===!0}init(){!this.isEnabled||!c()||!this.dropdown.getDropdown()||(this.dropdown.populateOptions(),this.dropdown.restorePreviousSelection(),this.bindEvents())}getSelectedTimezone(){return this.dropdown.getSelectedTimezone()}setTimezone(e){this.isEnabled&&this.dropdown.selectTimezone(e)}bindEvents(){let e=this.dropdown.getDropdown(),t=this.dropdown.getMenu();if(!e||!t)return;let i=s=>{e.contains(s.target)||(this.dropdown.setOpen(!1),this.keyboard.reset(),c()&&document.removeEventListener("click",i))},n=s=>{s.stopPropagation(),this.dropdown.isOpen()?(this.dropdown.setOpen(!1),this.keyboard.reset()):(this.dropdown.setOpen(!0),this.clickOutsideTimerId=window.setTimeout(()=>{c()&&document.addEventListener("click",i),this.clickOutsideTimerId=null},g.DROPDOWN_CLICK_DELAY))},r=s=>{this.handleKeydown(s,i)},a=s=>{s.stopPropagation();let d=s.target;if(!(d instanceof HTMLElement))return;let u=d.closest(".tp-ui-timezone-option");if(u instanceof HTMLElement){let v=u.getAttribute("data-value");v&&(this.dropdown.selectTimezone(v),this.dropdown.setOpen(!1),this.keyboard.reset(),c()&&document.removeEventListener("click",i),e.focus())}};e.addEventListener("click",n),e.addEventListener("keydown",r),t.addEventListener("click",a),this.cleanupHandlers.push(()=>e.removeEventListener("click",n),()=>e.removeEventListener("keydown",r),()=>t.removeEventListener("click",a),()=>{c()&&document.removeEventListener("click",i)})}handleKeydown(e,t){if(!this.dropdown.getDropdown())return;let n=this.dropdown.isOpen(),r=this.dropdown.getOptions();switch(e.key){case"Enter":case" ":if(e.preventDefault(),!n)this.dropdown.setOpen(!0);else{let a=this.keyboard.getFocusedIndex();if(a>=0){let s=r[a]?.getAttribute("data-value");s&&(this.dropdown.selectTimezone(s),this.dropdown.setOpen(!1),this.keyboard.reset())}}break;case"Escape":e.preventDefault(),this.dropdown.setOpen(!1),this.keyboard.reset(),c()&&document.removeEventListener("click",t);break;case"ArrowDown":e.preventDefault(),n?(this.keyboard.moveDown(r.length),this.keyboard.updateVisualFocus(r)):this.dropdown.setOpen(!0);break;case"ArrowUp":e.preventDefault(),n&&(this.keyboard.moveUp(),this.keyboard.updateVisualFocus(r));break;case"Home":n&&(e.preventDefault(),this.keyboard.moveToFirst(),this.keyboard.updateVisualFocus(r));break;case"End":n&&(e.preventDefault(),this.keyboard.moveToLast(r.length),this.keyboard.updateVisualFocus(r));break}}destroy(){this.clickOutsideTimerId!==null&&(window.clearTimeout(this.clickOutsideTimerId),this.clickOutsideTimerId=null),this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[],this.keyboard.reset(),this.dropdown.reset(),E()}};var D={name:"timezone",factory:(o,e)=>new l(o,e),clearHandler:o=>{if(!o.options.timezone?.enabled)return;let e=o.getModalElement();if(!e)return;let t=e.querySelector(".tp-ui-timezone-dropdown"),i=e.querySelector(".tp-ui-timezone-selected");if(i){let n=i.getAttribute("data-placeholder")||"Timezone...";i.textContent=n}t?.setAttribute("aria-expanded","false")}};0&&(module.exports={TimezoneManager,TimezonePlugin});
@@ -1 +1 @@
1
- var p=null,g=i=>{if(!i||i==="+0"||i==="-0")return"+00:00";let e=i.startsWith("-")?"-":"+",o=i.replace(/^[+-]/,"").split(":"),n=o[0].padStart(2,"0"),r=o.length>1?o[1].padStart(2,"0"):"00";return`${e}${n}:${r}`},y=i=>{try{let n=new Intl.DateTimeFormat("en-US",{timeZone:i,timeZoneName:"shortOffset"}).formatToParts(new Date).find(r=>r.type==="timeZoneName")?.value?.replace("GMT","")||"";return g(n)}catch{return"+00:00"}};var w=i=>{try{return Intl.DateTimeFormat(void 0,{timeZone:i}),!0}catch{return!1}},b=["Pacific/Pago_Pago","Pacific/Honolulu","America/Anchorage","America/Los_Angeles","America/Denver","America/Chicago","America/New_York","America/Santiago","America/Sao_Paulo","Atlantic/Azores","UTC","Europe/Paris","Europe/Helsinki","Europe/Moscow","Asia/Dubai","Asia/Karachi","Asia/Kolkata","Asia/Kathmandu","Asia/Dhaka","Asia/Yangon","Asia/Bangkok","Asia/Shanghai","Asia/Tokyo","Australia/Darwin","Australia/Sydney","Pacific/Guadalcanal","Pacific/Auckland","Pacific/Chatham","Pacific/Kiritimati"],k=i=>{let e=y(i),t=i.split("/").pop()?.replace(/_/g," ")||i;return{id:i,label:`${t} (${e||"UTC"})`,offset:e}},v=i=>{let e=i??b;if(!i&&p)return p;let t=e.filter(w).map(k);return i||(p=t),t},T=()=>{p=null};var c=()=>typeof document<"u";var E={DEFAULT_DELAY:300,MODAL_ANIMATION:150,SCROLLBAR_RESTORE:400,MODAL_REMOVE:300,CLOCK_ANIMATION:600,TIPS_ANIMATION:401,MOBILE_TOGGLE:450,CLOCK_SCALE_DELAY:150,WRAPPER_TRANSITION:400,DROPDOWN_CLICK_DELAY:10};var m=class{core;emitter;selectedTimezone=null;constructor(e,t){this.core=e,this.emitter=t}getDropdown(){return this.core.getModalElement()?.querySelector(".tp-ui-timezone-dropdown")??null}getMenu(){return this.core.getModalElement()?.querySelector(".tp-ui-timezone-menu")??null}getOptions(){let e=this.getMenu();if(!e)return[];let t=e.querySelectorAll(".tp-ui-timezone-option"),o=[];return t.forEach(n=>{n instanceof HTMLElement&&o.push(n)}),o}populateOptions(){let{whitelist:e}=this.core.options.timezone??{},t=v(e),o=this.getMenu();if(!o)return;let n=t.map(r=>`<div class="tp-ui-timezone-option" role="option" data-value="${r.id}" tabindex="-1">${r.label}</div>`).join("");o.innerHTML=n}setOpen(e){let t=this.getDropdown();if(t&&(t.setAttribute("aria-expanded",String(e)),e)){let n=this.getMenu()?.querySelector('[data-selected="true"]');n instanceof HTMLElement&&n.scrollIntoView({block:"nearest"})}}isOpen(){return this.getDropdown()?.getAttribute("aria-expanded")==="true"}selectTimezone(e,t=!0){this.selectedTimezone=e;let n=this.getDropdown()?.querySelector(".tp-ui-timezone-selected"),r=this.getMenu();if(n&&r){let a=r.querySelectorAll(".tp-ui-timezone-option"),s="";a.forEach(d=>{let u=d.getAttribute("data-value")===e;d.setAttribute("data-selected",String(u)),u&&(s=d.textContent||"")}),n.textContent=s,n.removeAttribute("data-placeholder")}t&&this.emitter.emit("timezone:change",{timezone:this.selectedTimezone})}getSelectedTimezone(){return this.selectedTimezone}restorePreviousSelection(){let e=this.getDropdown(),t=e?.querySelector(".tp-ui-timezone-selected");if(!(!e||!t))if(this.selectedTimezone)this.selectTimezone(this.selectedTimezone,!1);else{let o=this.core.options.timezone?.default;o&&this.selectTimezone(o)}}reset(){this.selectedTimezone=null}};var f=class{focusedIndex=-1;getFocusedIndex(){return this.focusedIndex}setFocusedIndex(e){this.focusedIndex=e}moveDown(e){return this.focusedIndex=Math.min(this.focusedIndex+1,e-1),this.focusedIndex}moveUp(){return this.focusedIndex=Math.max(this.focusedIndex-1,0),this.focusedIndex}moveToFirst(){return this.focusedIndex=0,this.focusedIndex}moveToLast(e){return this.focusedIndex=e-1,this.focusedIndex}reset(){this.focusedIndex=-1}updateVisualFocus(e){e.forEach((t,o)=>{t.setAttribute("data-focused",String(o===this.focusedIndex))}),this.focusedIndex>=0&&e[this.focusedIndex]&&e[this.focusedIndex].scrollIntoView({block:"nearest",behavior:"smooth"})}};var l=class{core;emitter;dropdown;keyboard;cleanupHandlers=[];clickOutsideTimerId=null;constructor(e,t){this.core=e,this.emitter=t,this.dropdown=new m(e,t),this.keyboard=new f}get isEnabled(){return this.core.options.timezone?.enabled===!0}init(){!this.isEnabled||!c()||!this.dropdown.getDropdown()||(this.dropdown.populateOptions(),this.dropdown.restorePreviousSelection(),this.bindEvents())}getSelectedTimezone(){return this.dropdown.getSelectedTimezone()}setTimezone(e){this.isEnabled&&this.dropdown.selectTimezone(e)}bindEvents(){let e=this.dropdown.getDropdown(),t=this.dropdown.getMenu();if(!e||!t)return;let o=s=>{e.contains(s.target)||(this.dropdown.setOpen(!1),this.keyboard.reset(),c()&&document.removeEventListener("click",o))},n=s=>{s.stopPropagation(),this.dropdown.isOpen()?(this.dropdown.setOpen(!1),this.keyboard.reset()):(this.dropdown.setOpen(!0),this.clickOutsideTimerId=window.setTimeout(()=>{c()&&document.addEventListener("click",o),this.clickOutsideTimerId=null},E.DROPDOWN_CLICK_DELAY))},r=s=>{this.handleKeydown(s,o)},a=s=>{s.stopPropagation();let d=s.target;if(!(d instanceof HTMLElement))return;let u=d.closest(".tp-ui-timezone-option");if(u instanceof HTMLElement){let h=u.getAttribute("data-value");h&&(this.dropdown.selectTimezone(h),this.dropdown.setOpen(!1),this.keyboard.reset(),c()&&document.removeEventListener("click",o),e.focus())}};e.addEventListener("click",n),e.addEventListener("keydown",r),t.addEventListener("click",a),this.cleanupHandlers.push(()=>e.removeEventListener("click",n),()=>e.removeEventListener("keydown",r),()=>t.removeEventListener("click",a),()=>{c()&&document.removeEventListener("click",o)})}handleKeydown(e,t){if(!this.dropdown.getDropdown())return;let n=this.dropdown.isOpen(),r=this.dropdown.getOptions();switch(e.key){case"Enter":case" ":if(e.preventDefault(),!n)this.dropdown.setOpen(!0);else{let a=this.keyboard.getFocusedIndex();if(a>=0){let s=r[a]?.getAttribute("data-value");s&&(this.dropdown.selectTimezone(s),this.dropdown.setOpen(!1),this.keyboard.reset())}}break;case"Escape":e.preventDefault(),this.dropdown.setOpen(!1),this.keyboard.reset(),c()&&document.removeEventListener("click",t);break;case"ArrowDown":e.preventDefault(),n?(this.keyboard.moveDown(r.length),this.keyboard.updateVisualFocus(r)):this.dropdown.setOpen(!0);break;case"ArrowUp":e.preventDefault(),n&&(this.keyboard.moveUp(),this.keyboard.updateVisualFocus(r));break;case"Home":n&&(e.preventDefault(),this.keyboard.moveToFirst(),this.keyboard.updateVisualFocus(r));break;case"End":n&&(e.preventDefault(),this.keyboard.moveToLast(r.length),this.keyboard.updateVisualFocus(r));break}}destroy(){this.clickOutsideTimerId!==null&&(window.clearTimeout(this.clickOutsideTimerId),this.clickOutsideTimerId=null),this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[],this.keyboard.reset(),this.dropdown.reset(),T()}};var R={name:"timezone",factory:(i,e)=>new l(i,e)};export{l as TimezoneManager,R as TimezonePlugin};
1
+ var p=null,g=n=>{if(!n||n==="+0"||n==="-0")return"+00:00";let e=n.startsWith("-")?"-":"+",o=n.replace(/^[+-]/,"").split(":"),i=o[0].padStart(2,"0"),r=o.length>1?o[1].padStart(2,"0"):"00";return`${e}${i}:${r}`},y=n=>{try{let i=new Intl.DateTimeFormat("en-US",{timeZone:n,timeZoneName:"shortOffset"}).formatToParts(new Date).find(r=>r.type==="timeZoneName")?.value?.replace("GMT","")||"";return g(i)}catch{return"+00:00"}};var w=n=>{try{return Intl.DateTimeFormat(void 0,{timeZone:n}),!0}catch{return!1}},b=["Pacific/Pago_Pago","Pacific/Honolulu","America/Anchorage","America/Los_Angeles","America/Denver","America/Chicago","America/New_York","America/Santiago","America/Sao_Paulo","Atlantic/Azores","UTC","Europe/Paris","Europe/Helsinki","Europe/Moscow","Asia/Dubai","Asia/Karachi","Asia/Kolkata","Asia/Kathmandu","Asia/Dhaka","Asia/Yangon","Asia/Bangkok","Asia/Shanghai","Asia/Tokyo","Australia/Darwin","Australia/Sydney","Pacific/Guadalcanal","Pacific/Auckland","Pacific/Chatham","Pacific/Kiritimati"],k=n=>{let e=y(n),t=n.split("/").pop()?.replace(/_/g," ")||n;return{id:n,label:`${t} (${e||"UTC"})`,offset:e}},v=n=>{let e=n??b;if(!n&&p)return p;let t=e.filter(w).map(k);return n||(p=t),t},T=()=>{p=null};var c=()=>typeof document<"u";var E={DEFAULT_DELAY:300,MODAL_ANIMATION:150,SCROLLBAR_RESTORE:400,MODAL_REMOVE:300,CLOCK_ANIMATION:600,TIPS_ANIMATION:401,MOBILE_TOGGLE:450,CLOCK_SCALE_DELAY:150,WRAPPER_TRANSITION:400,DROPDOWN_CLICK_DELAY:10};var m=class{core;emitter;selectedTimezone=null;constructor(e,t){this.core=e,this.emitter=t}getDropdown(){return this.core.getModalElement()?.querySelector(".tp-ui-timezone-dropdown")??null}getMenu(){return this.core.getModalElement()?.querySelector(".tp-ui-timezone-menu")??null}getOptions(){let e=this.getMenu();if(!e)return[];let t=e.querySelectorAll(".tp-ui-timezone-option"),o=[];return t.forEach(i=>{i instanceof HTMLElement&&o.push(i)}),o}populateOptions(){let{whitelist:e}=this.core.options.timezone??{},t=v(e),o=this.getMenu();if(!o)return;let i=t.map(r=>`<div class="tp-ui-timezone-option" role="option" data-value="${r.id}" tabindex="-1">${r.label}</div>`).join("");o.innerHTML=i}setOpen(e){let t=this.getDropdown();if(t&&(t.setAttribute("aria-expanded",String(e)),e)){let i=this.getMenu()?.querySelector('[data-selected="true"]');i instanceof HTMLElement&&i.scrollIntoView({block:"nearest"})}}isOpen(){return this.getDropdown()?.getAttribute("aria-expanded")==="true"}selectTimezone(e,t=!0){this.selectedTimezone=e;let i=this.getDropdown()?.querySelector(".tp-ui-timezone-selected"),r=this.getMenu();if(i&&r){let a=r.querySelectorAll(".tp-ui-timezone-option"),s="";a.forEach(d=>{let u=d.getAttribute("data-value")===e;d.setAttribute("data-selected",String(u)),u&&(s=d.textContent||"")}),i.textContent=s,i.removeAttribute("data-placeholder")}t&&this.emitter.emit("timezone:change",{timezone:this.selectedTimezone})}getSelectedTimezone(){return this.selectedTimezone}restorePreviousSelection(){let e=this.getDropdown(),t=e?.querySelector(".tp-ui-timezone-selected");if(!(!e||!t))if(this.selectedTimezone)this.selectTimezone(this.selectedTimezone,!1);else{let o=this.core.options.timezone?.default;o&&this.selectTimezone(o)}}reset(){this.selectedTimezone=null}};var f=class{focusedIndex=-1;getFocusedIndex(){return this.focusedIndex}setFocusedIndex(e){this.focusedIndex=e}moveDown(e){return this.focusedIndex=Math.min(this.focusedIndex+1,e-1),this.focusedIndex}moveUp(){return this.focusedIndex=Math.max(this.focusedIndex-1,0),this.focusedIndex}moveToFirst(){return this.focusedIndex=0,this.focusedIndex}moveToLast(e){return this.focusedIndex=e-1,this.focusedIndex}reset(){this.focusedIndex=-1}updateVisualFocus(e){e.forEach((t,o)=>{t.setAttribute("data-focused",String(o===this.focusedIndex))}),this.focusedIndex>=0&&e[this.focusedIndex]&&e[this.focusedIndex].scrollIntoView({block:"nearest",behavior:"smooth"})}};var l=class{core;emitter;dropdown;keyboard;cleanupHandlers=[];clickOutsideTimerId=null;constructor(e,t){this.core=e,this.emitter=t,this.dropdown=new m(e,t),this.keyboard=new f}get isEnabled(){return this.core.options.timezone?.enabled===!0}init(){!this.isEnabled||!c()||!this.dropdown.getDropdown()||(this.dropdown.populateOptions(),this.dropdown.restorePreviousSelection(),this.bindEvents())}getSelectedTimezone(){return this.dropdown.getSelectedTimezone()}setTimezone(e){this.isEnabled&&this.dropdown.selectTimezone(e)}bindEvents(){let e=this.dropdown.getDropdown(),t=this.dropdown.getMenu();if(!e||!t)return;let o=s=>{e.contains(s.target)||(this.dropdown.setOpen(!1),this.keyboard.reset(),c()&&document.removeEventListener("click",o))},i=s=>{s.stopPropagation(),this.dropdown.isOpen()?(this.dropdown.setOpen(!1),this.keyboard.reset()):(this.dropdown.setOpen(!0),this.clickOutsideTimerId=window.setTimeout(()=>{c()&&document.addEventListener("click",o),this.clickOutsideTimerId=null},E.DROPDOWN_CLICK_DELAY))},r=s=>{this.handleKeydown(s,o)},a=s=>{s.stopPropagation();let d=s.target;if(!(d instanceof HTMLElement))return;let u=d.closest(".tp-ui-timezone-option");if(u instanceof HTMLElement){let h=u.getAttribute("data-value");h&&(this.dropdown.selectTimezone(h),this.dropdown.setOpen(!1),this.keyboard.reset(),c()&&document.removeEventListener("click",o),e.focus())}};e.addEventListener("click",i),e.addEventListener("keydown",r),t.addEventListener("click",a),this.cleanupHandlers.push(()=>e.removeEventListener("click",i),()=>e.removeEventListener("keydown",r),()=>t.removeEventListener("click",a),()=>{c()&&document.removeEventListener("click",o)})}handleKeydown(e,t){if(!this.dropdown.getDropdown())return;let i=this.dropdown.isOpen(),r=this.dropdown.getOptions();switch(e.key){case"Enter":case" ":if(e.preventDefault(),!i)this.dropdown.setOpen(!0);else{let a=this.keyboard.getFocusedIndex();if(a>=0){let s=r[a]?.getAttribute("data-value");s&&(this.dropdown.selectTimezone(s),this.dropdown.setOpen(!1),this.keyboard.reset())}}break;case"Escape":e.preventDefault(),this.dropdown.setOpen(!1),this.keyboard.reset(),c()&&document.removeEventListener("click",t);break;case"ArrowDown":e.preventDefault(),i?(this.keyboard.moveDown(r.length),this.keyboard.updateVisualFocus(r)):this.dropdown.setOpen(!0);break;case"ArrowUp":e.preventDefault(),i&&(this.keyboard.moveUp(),this.keyboard.updateVisualFocus(r));break;case"Home":i&&(e.preventDefault(),this.keyboard.moveToFirst(),this.keyboard.updateVisualFocus(r));break;case"End":i&&(e.preventDefault(),this.keyboard.moveToLast(r.length),this.keyboard.updateVisualFocus(r));break}}destroy(){this.clickOutsideTimerId!==null&&(window.clearTimeout(this.clickOutsideTimerId),this.clickOutsideTimerId=null),this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[],this.keyboard.reset(),this.dropdown.reset(),T()}};var R={name:"timezone",factory:(n,e)=>new l(n,e),clearHandler:n=>{if(!n.options.timezone?.enabled)return;let e=n.getModalElement();if(!e)return;let t=e.querySelector(".tp-ui-timezone-dropdown"),o=e.querySelector(".tp-ui-timezone-selected");if(o){let i=o.getAttribute("data-placeholder")||"Timezone...";o.textContent=i}t?.setAttribute("aria-expanded","false")}};export{l as TimezoneManager,R as TimezonePlugin};
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TimepickerUITimezone={})}(this,function(e){"use strict";let t=null;const o=e=>{try{return Intl.DateTimeFormat(void 0,{timeZone:e}),!0}catch{return!1}},i=["Pacific/Pago_Pago","Pacific/Honolulu","America/Anchorage","America/Los_Angeles","America/Denver","America/Chicago","America/New_York","America/Santiago","America/Sao_Paulo","Atlantic/Azores","UTC","Europe/Paris","Europe/Helsinki","Europe/Moscow","Asia/Dubai","Asia/Karachi","Asia/Kolkata","Asia/Kathmandu","Asia/Dhaka","Asia/Yangon","Asia/Bangkok","Asia/Shanghai","Asia/Tokyo","Australia/Darwin","Australia/Sydney","Pacific/Guadalcanal","Pacific/Auckland","Pacific/Chatham","Pacific/Kiritimati"],n=e=>{const t=(e=>{try{const t=new Intl.DateTimeFormat("en-US",{timeZone:e,timeZoneName:"shortOffset"}).formatToParts(new Date).find(e=>"timeZoneName"===e.type);return(e=>{if(!e||"+0"===e||"-0"===e)return"+00:00";const t=e.startsWith("-")?"-":"+",o=e.replace(/^[+-]/,"").split(":");return`${t}${o[0].padStart(2,"0")}:${o.length>1?o[1].padStart(2,"0"):"00"}`})(t?.value?.replace("GMT","")||"")}catch{return"+00:00"}})(e),o=e.split("/").pop()?.replace(/_/g," ")||e;return{id:e,label:`${o} (${t||"UTC"})`,offset:t}},s=()=>"undefined"!=typeof document,r=10;class d{core;emitter;selectedTimezone=null;constructor(e,t){this.core=e,this.emitter=t}getDropdown(){return this.core.getModalElement()?.querySelector(".tp-ui-timezone-dropdown")??null}getMenu(){return this.core.getModalElement()?.querySelector(".tp-ui-timezone-menu")??null}getOptions(){const e=this.getMenu();if(!e)return[];const t=e.querySelectorAll(".tp-ui-timezone-option"),o=[];return t.forEach(e=>{e instanceof HTMLElement&&o.push(e)}),o}populateOptions(){const{whitelist:e}=this.core.options.timezone??{},s=(e=>{if(!e&&t)return t;const s=(e??i).filter(o).map(n);return e||(t=s),s})(e),r=this.getMenu();if(!r)return;const d=s.map(e=>`<div class="tp-ui-timezone-option" role="option" data-value="${e.id}" tabindex="-1">${e.label}</div>`).join("");r.innerHTML=d}setOpen(e){const t=this.getDropdown();if(t&&(t.setAttribute("aria-expanded",String(e)),e)){const e=this.getMenu(),t=e?.querySelector('[data-selected="true"]');t instanceof HTMLElement&&t.scrollIntoView({block:"nearest"})}}isOpen(){const e=this.getDropdown();return"true"===e?.getAttribute("aria-expanded")}selectTimezone(e,t=!0){this.selectedTimezone=e;const o=this.getDropdown(),i=o?.querySelector(".tp-ui-timezone-selected"),n=this.getMenu();if(i&&n){const t=n.querySelectorAll(".tp-ui-timezone-option");let o="";t.forEach(t=>{const i=t.getAttribute("data-value")===e;t.setAttribute("data-selected",String(i)),i&&(o=t.textContent||"")}),i.textContent=o,i.removeAttribute("data-placeholder")}t&&this.emitter.emit("timezone:change",{timezone:this.selectedTimezone})}getSelectedTimezone(){return this.selectedTimezone}restorePreviousSelection(){const e=this.getDropdown(),t=e?.querySelector(".tp-ui-timezone-selected");if(e&&t)if(this.selectedTimezone)this.selectTimezone(this.selectedTimezone,!1);else{const e=this.core.options.timezone?.default;e&&this.selectTimezone(e)}}reset(){this.selectedTimezone=null}}class a{focusedIndex=-1;getFocusedIndex(){return this.focusedIndex}setFocusedIndex(e){this.focusedIndex=e}moveDown(e){return this.focusedIndex=Math.min(this.focusedIndex+1,e-1),this.focusedIndex}moveUp(){return this.focusedIndex=Math.max(this.focusedIndex-1,0),this.focusedIndex}moveToFirst(){return this.focusedIndex=0,this.focusedIndex}moveToLast(e){return this.focusedIndex=e-1,this.focusedIndex}reset(){this.focusedIndex=-1}updateVisualFocus(e){e.forEach((e,t)=>{e.setAttribute("data-focused",String(t===this.focusedIndex))}),this.focusedIndex>=0&&e[this.focusedIndex]&&e[this.focusedIndex].scrollIntoView({block:"nearest",behavior:"smooth"})}}class c{core;emitter;dropdown;keyboard;cleanupHandlers=[];clickOutsideTimerId=null;constructor(e,t){this.core=e,this.emitter=t,this.dropdown=new d(e,t),this.keyboard=new a}get isEnabled(){return!0===this.core.options.timezone?.enabled}init(){if(!this.isEnabled||!s())return;this.dropdown.getDropdown()&&(this.dropdown.populateOptions(),this.dropdown.restorePreviousSelection(),this.bindEvents())}getSelectedTimezone(){return this.dropdown.getSelectedTimezone()}setTimezone(e){this.isEnabled&&this.dropdown.selectTimezone(e)}bindEvents(){const e=this.dropdown.getDropdown(),t=this.dropdown.getMenu();if(!e||!t)return;const o=t=>{e.contains(t.target)||(this.dropdown.setOpen(!1),this.keyboard.reset(),s()&&document.removeEventListener("click",o))},i=e=>{e.stopPropagation();this.dropdown.isOpen()?(this.dropdown.setOpen(!1),this.keyboard.reset()):(this.dropdown.setOpen(!0),this.clickOutsideTimerId=window.setTimeout(()=>{s()&&document.addEventListener("click",o),this.clickOutsideTimerId=null},r))},n=e=>{this.handleKeydown(e,o)},d=t=>{t.stopPropagation();const i=t.target;if(!(i instanceof HTMLElement))return;const n=i.closest(".tp-ui-timezone-option");if(n instanceof HTMLElement){const t=n.getAttribute("data-value");t&&(this.dropdown.selectTimezone(t),this.dropdown.setOpen(!1),this.keyboard.reset(),s()&&document.removeEventListener("click",o),e.focus())}};e.addEventListener("click",i),e.addEventListener("keydown",n),t.addEventListener("click",d),this.cleanupHandlers.push(()=>e.removeEventListener("click",i),()=>e.removeEventListener("keydown",n),()=>t.removeEventListener("click",d),()=>{s()&&document.removeEventListener("click",o)})}handleKeydown(e,t){if(!this.dropdown.getDropdown())return;const o=this.dropdown.isOpen(),i=this.dropdown.getOptions();switch(e.key){case"Enter":case" ":if(e.preventDefault(),o){const e=this.keyboard.getFocusedIndex();if(e>=0){const t=i[e]?.getAttribute("data-value");t&&(this.dropdown.selectTimezone(t),this.dropdown.setOpen(!1),this.keyboard.reset())}}else this.dropdown.setOpen(!0);break;case"Escape":e.preventDefault(),this.dropdown.setOpen(!1),this.keyboard.reset(),s()&&document.removeEventListener("click",t);break;case"ArrowDown":e.preventDefault(),o?(this.keyboard.moveDown(i.length),this.keyboard.updateVisualFocus(i)):this.dropdown.setOpen(!0);break;case"ArrowUp":e.preventDefault(),o&&(this.keyboard.moveUp(),this.keyboard.updateVisualFocus(i));break;case"Home":o&&(e.preventDefault(),this.keyboard.moveToFirst(),this.keyboard.updateVisualFocus(i));break;case"End":o&&(e.preventDefault(),this.keyboard.moveToLast(i.length),this.keyboard.updateVisualFocus(i))}}destroy(){null!==this.clickOutsideTimerId&&(window.clearTimeout(this.clickOutsideTimerId),this.clickOutsideTimerId=null),this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[],this.keyboard.reset(),this.dropdown.reset(),t=null}}const u={name:"timezone",factory:(e,t)=>new c(e,t)};e.TimezoneManager=c,e.TimezonePlugin=u});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).TimepickerUITimezone={})}(this,function(e){"use strict";let t=null;const o=e=>{try{return Intl.DateTimeFormat(void 0,{timeZone:e}),!0}catch{return!1}},n=["Pacific/Pago_Pago","Pacific/Honolulu","America/Anchorage","America/Los_Angeles","America/Denver","America/Chicago","America/New_York","America/Santiago","America/Sao_Paulo","Atlantic/Azores","UTC","Europe/Paris","Europe/Helsinki","Europe/Moscow","Asia/Dubai","Asia/Karachi","Asia/Kolkata","Asia/Kathmandu","Asia/Dhaka","Asia/Yangon","Asia/Bangkok","Asia/Shanghai","Asia/Tokyo","Australia/Darwin","Australia/Sydney","Pacific/Guadalcanal","Pacific/Auckland","Pacific/Chatham","Pacific/Kiritimati"],i=e=>{const t=(e=>{try{const t=new Intl.DateTimeFormat("en-US",{timeZone:e,timeZoneName:"shortOffset"}).formatToParts(new Date).find(e=>"timeZoneName"===e.type);return(e=>{if(!e||"+0"===e||"-0"===e)return"+00:00";const t=e.startsWith("-")?"-":"+",o=e.replace(/^[+-]/,"").split(":");return`${t}${o[0].padStart(2,"0")}:${o.length>1?o[1].padStart(2,"0"):"00"}`})(t?.value?.replace("GMT","")||"")}catch{return"+00:00"}})(e),o=e.split("/").pop()?.replace(/_/g," ")||e;return{id:e,label:`${o} (${t||"UTC"})`,offset:t}},s=()=>"undefined"!=typeof document,r=10;class d{core;emitter;selectedTimezone=null;constructor(e,t){this.core=e,this.emitter=t}getDropdown(){return this.core.getModalElement()?.querySelector(".tp-ui-timezone-dropdown")??null}getMenu(){return this.core.getModalElement()?.querySelector(".tp-ui-timezone-menu")??null}getOptions(){const e=this.getMenu();if(!e)return[];const t=e.querySelectorAll(".tp-ui-timezone-option"),o=[];return t.forEach(e=>{e instanceof HTMLElement&&o.push(e)}),o}populateOptions(){const{whitelist:e}=this.core.options.timezone??{},s=(e=>{if(!e&&t)return t;const s=(e??n).filter(o).map(i);return e||(t=s),s})(e),r=this.getMenu();if(!r)return;const d=s.map(e=>`<div class="tp-ui-timezone-option" role="option" data-value="${e.id}" tabindex="-1">${e.label}</div>`).join("");r.innerHTML=d}setOpen(e){const t=this.getDropdown();if(t&&(t.setAttribute("aria-expanded",String(e)),e)){const e=this.getMenu(),t=e?.querySelector('[data-selected="true"]');t instanceof HTMLElement&&t.scrollIntoView({block:"nearest"})}}isOpen(){const e=this.getDropdown();return"true"===e?.getAttribute("aria-expanded")}selectTimezone(e,t=!0){this.selectedTimezone=e;const o=this.getDropdown(),n=o?.querySelector(".tp-ui-timezone-selected"),i=this.getMenu();if(n&&i){const t=i.querySelectorAll(".tp-ui-timezone-option");let o="";t.forEach(t=>{const n=t.getAttribute("data-value")===e;t.setAttribute("data-selected",String(n)),n&&(o=t.textContent||"")}),n.textContent=o,n.removeAttribute("data-placeholder")}t&&this.emitter.emit("timezone:change",{timezone:this.selectedTimezone})}getSelectedTimezone(){return this.selectedTimezone}restorePreviousSelection(){const e=this.getDropdown(),t=e?.querySelector(".tp-ui-timezone-selected");if(e&&t)if(this.selectedTimezone)this.selectTimezone(this.selectedTimezone,!1);else{const e=this.core.options.timezone?.default;e&&this.selectTimezone(e)}}reset(){this.selectedTimezone=null}}class a{focusedIndex=-1;getFocusedIndex(){return this.focusedIndex}setFocusedIndex(e){this.focusedIndex=e}moveDown(e){return this.focusedIndex=Math.min(this.focusedIndex+1,e-1),this.focusedIndex}moveUp(){return this.focusedIndex=Math.max(this.focusedIndex-1,0),this.focusedIndex}moveToFirst(){return this.focusedIndex=0,this.focusedIndex}moveToLast(e){return this.focusedIndex=e-1,this.focusedIndex}reset(){this.focusedIndex=-1}updateVisualFocus(e){e.forEach((e,t)=>{e.setAttribute("data-focused",String(t===this.focusedIndex))}),this.focusedIndex>=0&&e[this.focusedIndex]&&e[this.focusedIndex].scrollIntoView({block:"nearest",behavior:"smooth"})}}class c{core;emitter;dropdown;keyboard;cleanupHandlers=[];clickOutsideTimerId=null;constructor(e,t){this.core=e,this.emitter=t,this.dropdown=new d(e,t),this.keyboard=new a}get isEnabled(){return!0===this.core.options.timezone?.enabled}init(){if(!this.isEnabled||!s())return;this.dropdown.getDropdown()&&(this.dropdown.populateOptions(),this.dropdown.restorePreviousSelection(),this.bindEvents())}getSelectedTimezone(){return this.dropdown.getSelectedTimezone()}setTimezone(e){this.isEnabled&&this.dropdown.selectTimezone(e)}bindEvents(){const e=this.dropdown.getDropdown(),t=this.dropdown.getMenu();if(!e||!t)return;const o=t=>{e.contains(t.target)||(this.dropdown.setOpen(!1),this.keyboard.reset(),s()&&document.removeEventListener("click",o))},n=e=>{e.stopPropagation();this.dropdown.isOpen()?(this.dropdown.setOpen(!1),this.keyboard.reset()):(this.dropdown.setOpen(!0),this.clickOutsideTimerId=window.setTimeout(()=>{s()&&document.addEventListener("click",o),this.clickOutsideTimerId=null},r))},i=e=>{this.handleKeydown(e,o)},d=t=>{t.stopPropagation();const n=t.target;if(!(n instanceof HTMLElement))return;const i=n.closest(".tp-ui-timezone-option");if(i instanceof HTMLElement){const t=i.getAttribute("data-value");t&&(this.dropdown.selectTimezone(t),this.dropdown.setOpen(!1),this.keyboard.reset(),s()&&document.removeEventListener("click",o),e.focus())}};e.addEventListener("click",n),e.addEventListener("keydown",i),t.addEventListener("click",d),this.cleanupHandlers.push(()=>e.removeEventListener("click",n),()=>e.removeEventListener("keydown",i),()=>t.removeEventListener("click",d),()=>{s()&&document.removeEventListener("click",o)})}handleKeydown(e,t){if(!this.dropdown.getDropdown())return;const o=this.dropdown.isOpen(),n=this.dropdown.getOptions();switch(e.key){case"Enter":case" ":if(e.preventDefault(),o){const e=this.keyboard.getFocusedIndex();if(e>=0){const t=n[e]?.getAttribute("data-value");t&&(this.dropdown.selectTimezone(t),this.dropdown.setOpen(!1),this.keyboard.reset())}}else this.dropdown.setOpen(!0);break;case"Escape":e.preventDefault(),this.dropdown.setOpen(!1),this.keyboard.reset(),s()&&document.removeEventListener("click",t);break;case"ArrowDown":e.preventDefault(),o?(this.keyboard.moveDown(n.length),this.keyboard.updateVisualFocus(n)):this.dropdown.setOpen(!0);break;case"ArrowUp":e.preventDefault(),o&&(this.keyboard.moveUp(),this.keyboard.updateVisualFocus(n));break;case"Home":o&&(e.preventDefault(),this.keyboard.moveToFirst(),this.keyboard.updateVisualFocus(n));break;case"End":o&&(e.preventDefault(),this.keyboard.moveToLast(n.length),this.keyboard.updateVisualFocus(n))}}destroy(){null!==this.clickOutsideTimerId&&(window.clearTimeout(this.clickOutsideTimerId),this.clickOutsideTimerId=null),this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[],this.keyboard.reset(),this.dropdown.reset(),t=null}}const l={name:"timezone",factory:(e,t)=>new c(e,t),clearHandler:e=>{if(!e.options.timezone?.enabled)return;const t=e.getModalElement();if(!t)return;const o=t.querySelector(".tp-ui-timezone-dropdown"),n=t.querySelector(".tp-ui-timezone-selected");if(n){const e=n.getAttribute("data-placeholder")||"Timezone...";n.textContent=e}o?.setAttribute("aria-expanded","false")}};e.TimezoneManager=c,e.TimezonePlugin=l});
@@ -1 +1 @@
1
- "use strict";var I=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var R=(a,e)=>{for(var t in e)I(a,t,{get:e[t],enumerable:!0})},_=(a,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of V(e))!O.call(a,n)&&n!==t&&I(a,n,{get:()=>e[n],enumerable:!(r=P(e,n))||r.enumerable});return a};var k=a=>_(I({},"__esModule",{value:!0}),a);var J={};R(J,{WheelManager:()=>p,WheelPlugin:()=>j});module.exports=k(J);var d=()=>typeof document<"u";var b=(a="")=>{let e=a.replace(/(AM|PM|am|pm)/,i=>` ${i}`),t=new Date(`September 20, 2000 ${e}`),r=t.getHours().toString().padStart(2,"0"),n=t.getMinutes().toString().padStart(2,"0");return`${r}:${n}`},S=a=>{let[e,t]=a.split(":");return`${e.padStart(2,"0")}:${t.padStart(2,"0")}`};var A=(a,e,t,r,n)=>{if(!a||!e||!r||!n)return!1;let i=n==="12h"?b(`${a}:${e} ${t||""}`.trim()):S(`${a}:${e}`),s=Array.isArray(r)?r:[r];for(let l of s){let[o,u]=l.trim().split("-"),m,c;if(n==="12h"){let h=o.trim(),v=u.trim();if(!/\s?(AM|PM|am|pm)\s?$/.test(h)||!/\s?(AM|PM|am|pm)\s?$/.test(v))continue;m=b(h),c=b(v)}else{let h=o.trim(),v=u.trim();if(/\s?(AM|PM|am|pm)\s?/.test(h)||/\s?(AM|PM|am|pm)\s?/.test(v))continue;m=S(h),c=S(v)}if(i>=m&&i<=c)return!1}return!0};var N={hours:".tp-ui-wheel-hours",minutes:".tp-ui-wheel-minutes",ampm:".tp-ui-wheel-ampm"},C=class{core;columns=new Map;cachedItemHeight=null;cachedItems=new Map;removedItems=new Map;constructor(e){this.core=e}init(){if(this.cachedItems.clear(),this.cachedItemHeight=null,this.restoreRemovedItems(),!d())return;let e=this.core.getModalElement();if(!e)return;["hours","minutes","ampm"].forEach(r=>{let n=e.querySelector(N[r]);n&&this.columns.set(r,n)}),this.updateDisabledItems()}updateDisabledItems(){let e=this.core.disabledTime;if(!e?.value)return;let t=this.core.options.wheel.hideDisabled===!0;t&&(this.restoreRemovedItems(),this.invalidateItemCache()),e.value.isInterval&&e.value.intervals?this.updateDisabledByInterval(e.value,t):this.updateDisabledByFlatLists(e.value,t),t&&this.invalidateItemCache()}updateDisabledByFlatLists(e,t){let r=this.columns.get("hours"),n=this.columns.get("minutes");if(r&&e.hours){let i=new Set(e.hours.map(String));this.toggleDisabledOnItems(r,i,t)}if(n&&e.minutes){let i=new Set(e.minutes.map(String));this.toggleDisabledOnItems(n,i,t)}}updateDisabledByInterval(e,t){let r=e.clockType??"12h",n=e.intervals,i=this.getCurrentAmPm(),s=this.getCurrentHour(),l=this.columns.get("hours");l&&l.querySelectorAll(".tp-ui-wheel-item").forEach(m=>{let c=m.getAttribute("data-value");if(c===null)return;let h=this.isHourFullyDisabled(c,i,n,r);m.classList.toggle("is-disabled",h),t&&h&&this.removeItemFromDOM(m,l)});let o=this.columns.get("minutes");o&&o.querySelectorAll(".tp-ui-wheel-item").forEach(m=>{let c=m.getAttribute("data-value");if(c===null)return;let h=A(s,c,i,n,r);m.classList.toggle("is-disabled",!h),t&&!h&&this.removeItemFromDOM(m,o)})}isHourFullyDisabled(e,t,r,n){if(!r)return!1;for(let i=0;i<60;i++){let s=i.toString().padStart(2,"0");if(A(e,s,t,r,n))return!1}return!0}toggleDisabledOnItems(e,t,r){e.querySelectorAll(".tp-ui-wheel-item").forEach(i=>{let s=i.getAttribute("data-value");if(s!==null){let l=String(parseInt(s,10)),o=t.has(l)||t.has(s);i.classList.toggle("is-disabled",o),r&&o&&this.removeItemFromDOM(i,e)}})}getCurrentAmPm(){return this.core.getAM()?.classList.contains("active")?"AM":"PM"}getCurrentHour(){return this.core.getHour()?.value?.padStart(2,"0")??"12"}getColumnElement(e){return this.columns.get(e)??null}getItems(e){let t=this.cachedItems.get(e);if(t)return t;let r=this.columns.get(e);if(!r)return null;let n=r.querySelectorAll(".tp-ui-wheel-item");return this.cachedItems.set(e,n),n}invalidateItemCache(){this.cachedItems.clear(),this.cachedItemHeight=null}getItemCount(e){let t=this.getItems(e);return t?t.length:0}getItemHeight(){if(this.cachedItemHeight!==null)return this.cachedItemHeight;let e=this.columns.get("hours");if(!e)return 0;let t=e.querySelector(".tp-ui-wheel-item");if(!t)return 0;let r=t.getBoundingClientRect().height;return r>0&&(this.cachedItemHeight=r),r}removeItemFromDOM(e,t){let r=this.getColumnTypeByElement(t);if(!r)return;let n=this.removedItems.get(r)??[];n.push(e),this.removedItems.set(r,n),e.remove()}restoreRemovedItems(){["hours","minutes","ampm"].forEach(t=>{let r=this.removedItems.get(t);if(!r||r.length===0)return;let n=this.columns.get(t);if(!n)return;let i=Array.from(n.querySelectorAll(".tp-ui-wheel-item"));r.forEach(s=>{s.classList.remove("is-disabled");let l=parseInt(s.getAttribute("data-value")??"0",10),o=i.find(u=>parseInt(u.getAttribute("data-value")??"0",10)>l);if(o)n.insertBefore(s,o);else{let m=i[i.length-1]?.nextSibling??null;m?n.insertBefore(s,m):n.appendChild(s)}i.push(s),i.sort((u,m)=>parseInt(u.getAttribute("data-value")??"0",10)-parseInt(m.getAttribute("data-value")??"0",10))})}),this.removedItems.clear()}getColumnTypeByElement(e){for(let[t,r]of this.columns)if(r===e)return t;return null}destroy(){this.restoreRemovedItems(),this.columns.clear(),this.cachedItems.clear(),this.cachedItemHeight=null,this.removedItems.clear()}};var y=class{renderer;core;dragHandler=null;onScrollEnd=null;onScrollStart=null;constructor(e,t){this.renderer=e,this.core=t}setDragHandler(e){this.dragHandler=e}init(){this.dragHandler&&(this.dragHandler.setSnapCallback(e=>{this.onColumnSnapped(e)}),this.dragHandler.setScrollStartCallback(e=>{this.emitScrollStart(e)}))}setScrollEndCallback(e){this.onScrollEnd=e}setScrollStartCallback(e){this.onScrollStart=e}scrollToValue(e,t){if(!this.renderer.getColumnElement(e)||!this.dragHandler)return;let n=this.renderer.getItemHeight();if(n<=0)return;let i=this.renderer.getItems(e);if(!i)return;let s=-1;for(let o=0;o<i.length;o++)if(i[o].getAttribute("data-value")===t){s=o;break}if(s<0)return;let l=s*n;this.dragHandler.setScrollOffset(e,l),this.applyVisualClassesForIndex(e,s)}getSelectedValue(e){if(!this.dragHandler)return null;let t=this.renderer.getItemHeight();if(t<=0)return null;let r=this.dragHandler.getScrollOffset(e),n=Math.round(r/t),i=this.renderer.getItems(e);return!i||n<0||n>=i.length?null:i[n].getAttribute("data-value")}getCurrentSelection(){let e=this.getSelectedValue("hours")??"12",t=this.getSelectedValue("minutes")??"00",r=null;return this.core.options.clock.type!=="24h"&&(r=this.getSelectedValue("ampm"),r===null&&(r=this.core.getAM()?.classList.contains("active")?"AM":"PM")),{hour:e,minute:t,ampm:r}}destroy(){this.onScrollEnd=null,this.onScrollStart=null,this.dragHandler=null}onColumnSnapped(e){let t=this.getSelectedValue(e);if(t!==null){if(this.isValueDisabled(e,t)){this.scrollToNextValid(e,t);return}this.onScrollEnd&&this.onScrollEnd(e,t)}}emitScrollStart(e){this.onScrollStart&&this.onScrollStart(e)}updateVisualClasses(e){if(!this.dragHandler)return;let t=this.renderer.getItemHeight();if(t<=0)return;let r=this.dragHandler.getScrollOffset(e),n=Math.round(r/t);this.applyVisualClassesForIndex(e,n)}applyVisualClassesForIndex(e,t){let r=this.renderer.getItems(e);if(!r)return;r.forEach((i,s)=>{let l=Math.abs(s-t),o=l===0;i.classList.toggle("is-center",o),i.classList.toggle("is-near",l===1),i.setAttribute("aria-selected",String(o))});let n=this.renderer.getColumnElement(e);if(n){let i=r[t];if(i){let l=i.getAttribute("id");l&&n.setAttribute("aria-activedescendant",l)}let s=n.parentElement;s&&(s.classList.toggle("at-start",t<=0),s.classList.toggle("at-end",t>=r.length-1))}}isValueDisabled(e,t){let r=this.renderer.getItems(e);if(!r)return!1;for(let n=0;n<r.length;n++)if(r[n].getAttribute("data-value")===t)return r[n].classList.contains("is-disabled");return!1}scrollToNextValid(e,t){let r=this.renderer.getItems(e);if(!r)return;let n=-1;for(let s=0;s<r.length;s++)if(r[s].getAttribute("data-value")===t){n=s;break}if(n<0)return;let i=r.length;for(let s=1;s<=i;s++){let l=n+s,o=n-s;if(l<r.length&&!r[l].classList.contains("is-disabled")){let u=r[l].getAttribute("data-value");if(u!==null){this.scrollToValue(e,u),this.onScrollEnd&&this.onScrollEnd(e,u);return}}if(o>=0&&!r[o].classList.contains("is-disabled")){let u=r[o].getAttribute("data-value");if(u!==null){this.scrollToValue(e,u),this.onScrollEnd&&this.onScrollEnd(e,u);return}}}}};var H=(a,e)=>{if(!a)return;let t=a.querySelector(".timepicker-announcer");t&&(t.textContent="",setTimeout(()=>{t.textContent=e},100))};var D="ArrowUp",U="ArrowDown",$="12",F="00",q="AM",Y=400,T=class{emitter;scrollHandler;core;keydownListeners=new Map;clearHandler=null;previousValues=new Map;scrollStartHandler=null;commitOnScrollTimer=null;constructor(e,t,r){this.emitter=e,this.scrollHandler=t,this.core=r}init(){this.removeKeyboardListeners(),this.removeClearListener(),this.previousValues.clear(),this.captureCurrentValues(),this.scrollHandler.setScrollEndCallback((e,t)=>{this.handleColumnScrollEnd(e,t)}),this.scrollStartHandler=e=>{this.emitter.emit("wheel:scroll:start",{column:e})},this.scrollHandler.setScrollStartCallback(this.scrollStartHandler),this.attachKeyboardListeners(),this.attachClearListener()}destroy(){this.scrollHandler.setScrollEndCallback(()=>{}),this.scrollHandler.setScrollStartCallback(null),this.removeKeyboardListeners(),this.removeClearListener(),this.previousValues.clear(),this.scrollStartHandler=null,this.commitOnScrollTimer!==null&&(clearTimeout(this.commitOnScrollTimer),this.commitOnScrollTimer=null)}handleColumnScrollEnd(e,t){let r=this.scrollHandler.getCurrentSelection(),n=this.previousValues.get(e)??null;this.emitter.emit("wheel:scroll:end",{column:e,value:t,previousValue:n}),this.previousValues.set(e,t);let i=this.core.getModalElement();switch(e){case"hours":this.syncHourInput(t),this.emitter.emit("select:hour",{hour:t}),H(i,`Hour: ${t}`);break;case"minutes":this.syncMinuteInput(t),this.emitter.emit("select:minute",{minutes:t}),H(i,`Minutes: ${t}`);break;case"ampm":this.syncAmPmState(t),t==="AM"?this.emitter.emit("select:am",{}):this.emitter.emit("select:pm",{}),H(i,`${t} selected`);break}this.emitter.emit("update",{hour:r.hour,minutes:r.minute,type:r.ampm??void 0}),this.core.options.wheel?.commitOnScroll===!0&&this.scheduleCommitOnScroll()}scheduleCommitOnScroll(){this.commitOnScrollTimer!==null&&clearTimeout(this.commitOnScrollTimer),this.commitOnScrollTimer=setTimeout(()=>{this.commitOnScrollTimer=null;let e=this.scrollHandler.getCurrentSelection(),t=this.core.getInput();if(t){let r=e.ampm?` ${e.ampm}`:"";t.value=`${e.hour}:${e.minute}${r}`}this.emitter.emit("confirm",{hour:e.hour,minutes:e.minute,type:e.ampm??void 0,autoCommit:!0})},Y)}syncHourInput(e){let t=this.core.getHour();t&&(t.value=e,t.setAttribute("aria-valuenow",e)),this.core.setDegreesHours(parseInt(e,10)*30)}syncMinuteInput(e){let t=this.core.getMinutes();t&&(t.value=e,t.setAttribute("aria-valuenow",e)),this.core.setDegreesMinutes(parseInt(e,10)*6)}syncAmPmState(e){let t=this.core.getAM(),r=this.core.getPM();t&&r&&(t.classList.toggle("active",e==="AM"),r.classList.toggle("active",e==="PM"))}attachKeyboardListeners(){if(!d())return;["hours","minutes","ampm"].forEach(t=>{let r=this.scrollHandler.getCurrentSelection()?this.getColumnFromRenderer(t):null;if(!r)return;let n=i=>{(i.key===D||i.key===U)&&(i.preventDefault(),this.handleArrowKey(t,i.key))};r.addEventListener("keydown",n),this.keydownListeners.set(t,n)})}getColumnFromRenderer(e){if(!d())return null;let t=this.core.getModalElement();if(!t)return null;let r={hours:".tp-ui-wheel-hours",minutes:".tp-ui-wheel-minutes",ampm:".tp-ui-wheel-ampm"};return t.querySelector(r[e])}handleArrowKey(e,t){let r=this.scrollHandler.getSelectedValue(e);if(r===null)return;let n=this.getColumnFromRenderer(e);if(!n)return;let i=n.querySelectorAll(".tp-ui-wheel-item"),s=-1;for(let m=0;m<i.length;m++)if(i[m].getAttribute("data-value")===r){s=m;break}if(s<0)return;let o=s+(t===D?-1:1);if(o<0||o>=i.length)return;let u=i[o].getAttribute("data-value");u!==null&&(this.scrollHandler.scrollToValue(e,u),this.handleColumnScrollEnd(e,u))}removeKeyboardListeners(){this.keydownListeners.forEach((e,t)=>{let r=this.getColumnFromRenderer(t);r&&r.removeEventListener("keydown",e)}),this.keydownListeners.clear()}attachClearListener(){this.clearHandler=()=>{this.scrollHandler.scrollToValue("hours",$),this.scrollHandler.scrollToValue("minutes",F),this.scrollHandler.scrollToValue("ampm",q)},this.emitter.on("clear",this.clearHandler)}removeClearListener(){this.clearHandler&&(this.emitter.off("clear",this.clearHandler),this.clearHandler=null)}captureCurrentValues(){let e=this.scrollHandler.getCurrentSelection();this.previousValues.set("hours",e.hour),this.previousValues.set("minutes",e.minute),e.ampm!==null&&this.previousValues.set("ampm",e.ampm)}};var M=class{element;columnType;_lastY=0;_isDragging=!1;_pointerId=-1;_momentumRaf=null;velocitySamples=[];snapTimeout=null;snapAnimationRaf=null;abortController=null;constructor(e,t){this.element=e,this.columnType=t,this.abortController=new AbortController}get lastY(){return this._lastY}get isDragging(){return this._isDragging}get pointerId(){return this._pointerId}get signal(){return this.abortController?this.abortController.signal:new AbortController().signal}startDrag(e,t){this.stopMomentum(),this._isDragging=!0,this._lastY=e,this._pointerId=t,this.velocitySamples=[{time:performance.now(),y:e}]}updateLastY(e){this._lastY=e}addVelocitySample(e){this.velocitySamples.push({time:performance.now(),y:e}),this.velocitySamples.length>5&&this.velocitySamples.shift()}computeReleaseVelocity(){let e=performance.now(),t=this.velocitySamples.filter(s=>e-s.time<100);if(t.length<2)return 0;let r=t[0],n=t[t.length-1],i=n.time-r.time;return i<=0?0:(r.y-n.y)/i}endDrag(){this._isDragging=!1,this._pointerId=-1,this.velocitySamples=[]}setMomentumRaf(e){this._momentumRaf=e}hasMomentum(){return this._momentumRaf!==null}stopMomentum(){this._momentumRaf!==null&&(cancelAnimationFrame(this._momentumRaf),this._momentumRaf=null),this.snapAnimationRaf!==null&&(cancelAnimationFrame(this.snapAnimationRaf),this.snapAnimationRaf=null)}animateToOffset(e,t){this.stopMomentum();let r=this.element.scrollTop,n=e-r,i=performance.now();if(Math.abs(n)<.5){this.element.scrollTop=e,t();return}let s=()=>{let l=performance.now()-i,o=Math.min(l/180,1),u=1-Math.pow(1-o,3);this.element.scrollTop=r+n*u,o<1?this.snapAnimationRaf=requestAnimationFrame(s):(this.element.scrollTop=e,this.snapAnimationRaf=null,t())};this.snapAnimationRaf=requestAnimationFrame(s)}scheduleSnapAfterWheel(e){this.snapTimeout!==null&&clearTimeout(this.snapTimeout),this.snapTimeout=setTimeout(()=>{this.snapTimeout=null,e()},120)}destroy(){this.stopMomentum(),this.snapTimeout!==null&&(clearTimeout(this.snapTimeout),this.snapTimeout=null),this.abortController&&(this.abortController.abort(),this.abortController=null)}};var B=.92,x=.3,W=8,z=30,E=class{renderer;columnStates=new Map;onSnap=null;onVisualUpdate=null;onScrollStart=null;activeDragColumn=null;visualUpdateRaf=null;pendingVisualColumns=new Set;wheelAccumulator=new Map;pointerMoveHandler;pointerUpHandler;documentListenerController=null;constructor(e){this.renderer=e,this.pointerMoveHandler=t=>this.handlePointerMove(t),this.pointerUpHandler=t=>this.handlePointerUp(t)}setSnapCallback(e){this.onSnap=e}setVisualUpdateCallback(e){this.onVisualUpdate=e}setScrollStartCallback(e){this.onScrollStart=e}init(){if(this.cleanupPreviousInit(),!d())return;["hours","minutes","ampm"].forEach(t=>{let r=this.renderer.getColumnElement(t);if(!r)return;let n=new M(r,t);this.columnStates.set(t,n),r.addEventListener("pointerdown",i=>{this.handlePointerDown(t,i)},{signal:n.signal}),r.addEventListener("wheel",i=>{this.handleWheel(t,i)},{passive:!1,signal:n.signal})}),this.documentListenerController=new AbortController,document.addEventListener("pointermove",this.pointerMoveHandler,{signal:this.documentListenerController.signal}),document.addEventListener("pointerup",this.pointerUpHandler,{signal:this.documentListenerController.signal})}getScrollOffset(e){let t=this.renderer.getColumnElement(e);return t?t.scrollTop:0}setScrollOffset(e,t){let r=this.columnStates.get(e);r&&r.stopMomentum();let n=this.renderer.getColumnElement(e);n&&(n.scrollTop=t)}getMaxOffset(e){let t=this.renderer.getItemHeight();if(t<=0)return 0;let r=this.renderer.getItemCount(e);return Math.max(0,(r-1)*t)}destroy(){this.cleanupPreviousInit(),this.onSnap=null,this.onVisualUpdate=null,this.onScrollStart=null}cleanupPreviousInit(){this.visualUpdateRaf!==null&&(cancelAnimationFrame(this.visualUpdateRaf),this.visualUpdateRaf=null),this.pendingVisualColumns.clear(),this.wheelAccumulator.clear(),this.activeDragColumn=null,this.documentListenerController&&(this.documentListenerController.abort(),this.documentListenerController=null),this.columnStates.forEach(e=>e.destroy()),this.columnStates.clear()}handlePointerDown(e,t){let r=this.columnStates.get(e);r&&(t.preventDefault(),this.activeDragColumn=e,r.startDrag(t.clientY,t.pointerId),r.element.classList.add("is-dragging"),r.element.setPointerCapture(t.pointerId),this.onScrollStart&&this.onScrollStart(e))}handlePointerMove(e){if(this.activeDragColumn===null)return;let t=this.columnStates.get(this.activeDragColumn);if(!t||!t.isDragging||t.pointerId!==e.pointerId)return;let r=t.lastY-e.clientY;t.addVelocitySample(e.clientY);let n=this.getMaxOffset(t.columnType),i=f(t.element.scrollTop+r,0,n);t.element.scrollTop=i,t.updateLastY(e.clientY),this.scheduleVisualUpdate(t.columnType)}handlePointerUp(e){if(this.activeDragColumn===null)return;let t=this.columnStates.get(this.activeDragColumn);if(!t||!t.isDragging||t.pointerId!==e.pointerId)return;t.element.classList.remove("is-dragging"),t.element.releasePointerCapture(e.pointerId),this.activeDragColumn=null;let r=t.computeReleaseVelocity();t.endDrag(),Math.abs(r)>x?this.startMomentum(t,r):this.snapColumn(t.columnType)}handleWheel(e,t){t.preventDefault();let r=this.columnStates.get(e);if(!r)return;let n=r.hasMomentum();r.stopMomentum(),!n&&this.onScrollStart&&this.onScrollStart(e);let i=this.renderer.getItemHeight();if(i<=0)return;let s=(this.wheelAccumulator.get(e)??0)+t.deltaY;if(this.wheelAccumulator.set(e,s),Math.abs(s)>=z){let l=s>0?1:-1;this.wheelAccumulator.set(e,0);let o=this.getMaxOffset(e),m=Math.round(r.element.scrollTop/i)+l,c=f(m*i,0,o);r.animateToOffset(c,()=>{this.emitVisualUpdate(e),this.onSnap&&this.onSnap(e)}),this.scheduleVisualUpdate(e)}}startMomentum(e,t){let r=f(t,-W,W),n=performance.now(),i=this.getMaxOffset(e.columnType),s=()=>{let l=performance.now(),o=l-n;n=l,r*=B;let u=r*o,m=e.element.scrollTop,c=f(m+u,0,i);if(e.element.scrollTop=c,this.emitVisualUpdate(e.columnType),Math.abs(r)<x||c<=0||c>=i){e.setMomentumRaf(null),this.snapColumn(e.columnType);return}e.setMomentumRaf(requestAnimationFrame(s))};e.setMomentumRaf(requestAnimationFrame(s))}snapColumn(e){let t=this.columnStates.get(e);if(!t)return;let r=this.renderer.getItemHeight();if(r<=0)return;let n=this.getMaxOffset(e),i=Math.round(t.element.scrollTop/r),s=f(i*r,0,n);t.animateToOffset(s,()=>{this.emitVisualUpdate(e),this.onSnap&&this.onSnap(e)})}scheduleVisualUpdate(e){this.pendingVisualColumns.add(e),this.visualUpdateRaf===null&&(this.visualUpdateRaf=requestAnimationFrame(()=>{this.visualUpdateRaf=null,this.pendingVisualColumns.forEach(t=>{this.emitVisualUpdate(t)}),this.pendingVisualColumns.clear()}))}emitVisualUpdate(e){this.onVisualUpdate&&this.onVisualUpdate(e)}};function f(a,e,t){return Math.max(e,Math.min(t,a))}var w=4,X=260,K=328,L=4,G=16,g=class{core;emitter;resizeHandler=null;scrollHandler=null;clickOutsideHandler=null;rafId=null;isAttached=!1;constructor(e,t){this.core=e,this.emitter=t}isPopoverMode(){return this.core.options.ui.mode==="compact-wheel"&&!!this.core.options.wheel?.placement}attach(){if(!this.isPopoverMode()||!d()||this.isAttached)return;let e=this.core.getModalElement();e&&(e.classList.add("tp-ui-popover"),this.positionPopover(),this.addListeners(),this.isAttached=!0)}detach(){this.isAttached&&(this.removeListeners(),this.isAttached=!1)}destroy(){this.detach()}positionPopover(){let e=this.core.getInput(),t=this.core.getModalElement();if(!e||!t)return;let r=e.getBoundingClientRect(),n=this.core.options.wheel?.placement??"auto",i=Math.min(Math.max(r.width,X),K);t.style.width=`${i}px`;let s=t.offsetHeight,l=this.resolvePlacement(n,r,s),o=this.computeTop(l,r,s),u=this.clampHorizontal(r.left,i);t.style.top=`${o}px`,t.style.left=`${u}px`,t.setAttribute("data-popover-placement",l)}resolvePlacement(e,t,r){if(e==="top")return"top";if(e==="bottom")return"bottom";let i=document.documentElement.clientHeight-t.bottom,s=t.top,l=r+w+G;return i>=l?"bottom":s>=l?"top":i>=s?"bottom":"top"}computeTop(e,t,r){return e==="top"?t.top-r-w:t.bottom+w}clampHorizontal(e,t){let r=document.documentElement.clientWidth,n=e;return n+t>r&&(n=r-t-L),n<L&&(n=L),n}addListeners(){if(!d())return;this.resizeHandler=()=>{this.scheduleReposition()},this.scrollHandler=()=>{this.scheduleReposition()},this.clickOutsideHandler=t=>{this.handleClickOutside(t)},window.addEventListener("resize",this.resizeHandler,{passive:!0}),window.addEventListener("scroll",this.scrollHandler,{passive:!0,capture:!0});let e=this.clickOutsideHandler;setTimeout(()=>{e===this.clickOutsideHandler&&document.addEventListener("pointerdown",e)},0)}removeListeners(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.resizeHandler&&(window.removeEventListener("resize",this.resizeHandler),this.resizeHandler=null),this.scrollHandler&&(window.removeEventListener("scroll",this.scrollHandler,!0),this.scrollHandler=null),this.clickOutsideHandler&&(document.removeEventListener("pointerdown",this.clickOutsideHandler),this.clickOutsideHandler=null)}scheduleReposition(){this.rafId===null&&(this.rafId=requestAnimationFrame(()=>{this.rafId=null,this.positionPopover()}))}handleClickOutside(e){if(this.core.options.wheel?.ignoreOutsideClick)return;let t=this.core.getModalElement(),r=this.core.getInput(),n=e.target;if(!t||!n)return;let i=t.contains(n),s=r?r.contains(n):!1;!i&&!s&&this.emitter.emit("cancel",{})}};var p=class{renderer;dragHandler;scrollHandler;eventHandler;core;emitter;popover;amPmHandler=null;hourChangeHandler=null;clearHandler=null;constructor(e,t){this.core=e,this.emitter=t,this.renderer=new C(e),this.dragHandler=new E(this.renderer),this.scrollHandler=new y(this.renderer,e),this.scrollHandler.setDragHandler(this.dragHandler),this.eventHandler=new T(t,this.scrollHandler,e),this.popover=new g(e,t)}init(){this.renderer.init(),this.dragHandler.init(),this.scrollHandler.init(),this.eventHandler.init(),this.dragHandler.setVisualUpdateCallback(e=>{this.scrollHandler.updateVisualClasses(e)}),this.listenForAmPmChanges(),this.listenForHourChanges(),this.listenForClear(),this.deferInitialSync()}scrollToValue(e,t,r){this.scrollHandler.scrollToValue("hours",e.padStart(2,"0")),this.scrollHandler.scrollToValue("minutes",t.padStart(2,"0")),r&&this.isCompactWheelMode()&&this.scrollHandler.scrollToValue("ampm",r.toUpperCase())}updateDisabledItems(){this.renderer.updateDisabledItems()}attachPopover(){this.popover.attach()}detachPopover(){this.popover.detach()}destroy(){this.popover.destroy(),this.amPmHandler&&(this.emitter.off("select:am",this.amPmHandler),this.emitter.off("select:pm",this.amPmHandler),this.amPmHandler=null),this.hourChangeHandler&&(this.emitter.off("select:hour",this.hourChangeHandler),this.hourChangeHandler=null),this.clearHandler&&(this.emitter.off("clear",this.clearHandler),this.clearHandler=null),this.eventHandler.destroy(),this.scrollHandler.destroy(),this.dragHandler.destroy(),this.renderer.destroy()}deferInitialSync(){typeof requestAnimationFrame<"u"?requestAnimationFrame(()=>{this.syncInitialValues()}):this.syncInitialValues()}syncInitialValues(){let e=this.core.getHour(),t=this.core.getMinutes(),r=this.isCompactWheelMode(),n=e?.value??"",i=t?.value??"";if(r&&(!n||!i)){let s=this.parseMainInputValue();n||(n=s.hour),i||(i=s.minutes)}if(n&&this.scrollHandler.scrollToValue("hours",n.padStart(2,"0")),i&&this.scrollHandler.scrollToValue("minutes",i.padStart(2,"0")),r){let l=this.core.getAM()?.classList.contains("active")?"AM":"PM";this.scrollHandler.scrollToValue("ampm",l)}}parseMainInputValue(){let e=this.core.getInput();if(!e?.value)return{hour:"",minutes:""};let t=e.value.trim(),[r,n]=t.split(" "),[i="",s=""]=(r??"").split(":"),l=i.replace(/\D/g,"").padStart(2,"0"),o=s.replace(/\D/g,"").padStart(2,"0");return{hour:l,minutes:o,type:this.core.options.clock.type==="12h"?n:void 0}}isCompactWheelMode(){return this.core.options.ui.mode==="compact-wheel"}listenForAmPmChanges(){this.core.options.clock.type!=="24h"&&(this.amPmHandler=()=>{let e=this.scrollHandler.getSelectedValue("hours"),t=this.scrollHandler.getSelectedValue("minutes");this.renderer.updateDisabledItems(),this.scrollToFirstAvailable("hours",e),this.scrollToFirstAvailable("minutes",t)},this.emitter.on("select:am",this.amPmHandler),this.emitter.on("select:pm",this.amPmHandler))}listenForClear(){this.clearHandler=()=>{this.deferInitialSync()},this.emitter.on("clear",this.clearHandler)}listenForHourChanges(){this.core.disabledTime?.value?.isInterval&&(this.hourChangeHandler=()=>{let t=this.scrollHandler.getSelectedValue("minutes");this.renderer.updateDisabledItems(),this.scrollToFirstAvailable("minutes",t)},this.emitter.on("select:hour",this.hourChangeHandler))}scrollToFirstAvailable(e,t){let r=this.renderer.getItems(e);if(!(!r||r.length===0)){if(t!==null){for(let n=0;n<r.length;n++)if(r[n].getAttribute("data-value")===t&&!r[n].classList.contains("is-disabled")){this.scrollHandler.scrollToValue(e,t);return}}for(let n=0;n<r.length;n++)if(!r[n].classList.contains("is-disabled")){let i=r[n].getAttribute("data-value");if(i!==null){this.scrollHandler.scrollToValue(e,i);return}}}}};var j={name:"wheel",factory:(a,e)=>new p(a,e)};0&&(module.exports={WheelManager,WheelPlugin});
1
+ "use strict";var A=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var $=(l,e)=>{for(var t in e)A(l,t,{get:e[t],enumerable:!0})},U=(l,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of N(e))!k.call(l,n)&&n!==t&&A(l,n,{get:()=>e[n],enumerable:!(r=_(e,n))||r.enumerable});return l};var F=l=>U(A({},"__esModule",{value:!0}),l);var le={};$(le,{WheelManager:()=>p,WheelPlugin:()=>se});module.exports=F(le);var d=()=>typeof document<"u";var b=(l="")=>{let e=l.replace(/(AM|PM|am|pm)/,i=>` ${i}`),t=new Date(`September 20, 2000 ${e}`),r=t.getHours().toString().padStart(2,"0"),n=t.getMinutes().toString().padStart(2,"0");return`${r}:${n}`},C=l=>{let[e,t]=l.split(":");return`${e.padStart(2,"0")}:${t.padStart(2,"0")}`};var I=(l,e,t,r,n)=>{if(!l||!e||!r||!n)return!1;let i=n==="12h"?b(`${l}:${e} ${t||""}`.trim()):C(`${l}:${e}`),s=Array.isArray(r)?r:[r];for(let o of s){let[a,u]=o.trim().split("-"),m,c;if(n==="12h"){let h=a.trim(),v=u.trim();if(!/\s?(AM|PM|am|pm)\s?$/.test(h)||!/\s?(AM|PM|am|pm)\s?$/.test(v))continue;m=b(h),c=b(v)}else{let h=a.trim(),v=u.trim();if(/\s?(AM|PM|am|pm)\s?/.test(h)||/\s?(AM|PM|am|pm)\s?/.test(v))continue;m=C(h),c=C(v)}if(i>=m&&i<=c)return!1}return!0};var q={hours:".tp-ui-wheel-hours",minutes:".tp-ui-wheel-minutes",ampm:".tp-ui-wheel-ampm"},S=class{core;columns=new Map;cachedItemHeight=null;cachedItems=new Map;removedItems=new Map;constructor(e){this.core=e}init(){if(this.cachedItems.clear(),this.cachedItemHeight=null,this.restoreRemovedItems(),!d())return;let e=this.core.getModalElement();if(!e)return;["hours","minutes","ampm"].forEach(r=>{let n=e.querySelector(q[r]);n&&this.columns.set(r,n)}),this.updateDisabledItems()}updateDisabledItems(){let e=this.core.disabledTime;if(!e?.value)return;let t=this.core.options.wheel.hideDisabled===!0;t&&(this.restoreRemovedItems(),this.invalidateItemCache()),e.value.isInterval&&e.value.intervals?this.updateDisabledByInterval(e.value,t):this.updateDisabledByFlatLists(e.value,t),t&&this.invalidateItemCache()}updateDisabledByFlatLists(e,t){let r=this.columns.get("hours"),n=this.columns.get("minutes");if(r&&e.hours){let i=new Set(e.hours.map(String));this.toggleDisabledOnItems(r,i,t)}if(n&&e.minutes){let i=new Set(e.minutes.map(String));this.toggleDisabledOnItems(n,i,t)}}updateDisabledByInterval(e,t){let r=e.clockType??"12h",n=e.intervals,i=this.getCurrentAmPm(),s=this.getCurrentHour(),o=this.columns.get("hours");o&&o.querySelectorAll(".tp-ui-wheel-item").forEach(m=>{let c=m.getAttribute("data-value");if(c===null)return;let h=this.isHourFullyDisabled(c,i,n,r);m.classList.toggle("is-disabled",h),t&&h&&this.removeItemFromDOM(m,o)});let a=this.columns.get("minutes");a&&a.querySelectorAll(".tp-ui-wheel-item").forEach(m=>{let c=m.getAttribute("data-value");if(c===null)return;let h=I(s,c,i,n,r);m.classList.toggle("is-disabled",!h),t&&!h&&this.removeItemFromDOM(m,a)})}isHourFullyDisabled(e,t,r,n){if(!r)return!1;for(let i=0;i<60;i++){let s=i.toString().padStart(2,"0");if(I(e,s,t,r,n))return!1}return!0}toggleDisabledOnItems(e,t,r){e.querySelectorAll(".tp-ui-wheel-item").forEach(i=>{let s=i.getAttribute("data-value");if(s!==null){let o=String(parseInt(s,10)),a=t.has(o)||t.has(s);i.classList.toggle("is-disabled",a),r&&a&&this.removeItemFromDOM(i,e)}})}getCurrentAmPm(){return this.core.getAM()?.classList.contains("active")?"AM":"PM"}getCurrentHour(){return this.core.getHour()?.value?.padStart(2,"0")??"12"}getColumnElement(e){return this.columns.get(e)??null}getItems(e){let t=this.cachedItems.get(e);if(t)return t;let r=this.columns.get(e);if(!r)return null;let n=r.querySelectorAll(".tp-ui-wheel-item");return this.cachedItems.set(e,n),n}invalidateItemCache(){this.cachedItems.clear(),this.cachedItemHeight=null}getItemCount(e){let t=this.getItems(e);return t?t.length:0}getItemHeight(){if(this.cachedItemHeight!==null)return this.cachedItemHeight;let e=this.columns.get("hours");if(!e)return 0;let t=e.querySelector(".tp-ui-wheel-item");if(!t)return 0;let r=t.getBoundingClientRect().height;return r>0&&(this.cachedItemHeight=r),r}removeItemFromDOM(e,t){let r=this.getColumnTypeByElement(t);if(!r)return;let n=this.removedItems.get(r)??[];n.push(e),this.removedItems.set(r,n),e.remove()}restoreRemovedItems(){["hours","minutes","ampm"].forEach(t=>{let r=this.removedItems.get(t);if(!r||r.length===0)return;let n=this.columns.get(t);if(!n)return;let i=Array.from(n.querySelectorAll(".tp-ui-wheel-item"));r.forEach(s=>{s.classList.remove("is-disabled");let o=parseInt(s.getAttribute("data-value")??"0",10),a=i.find(u=>parseInt(u.getAttribute("data-value")??"0",10)>o);if(a)n.insertBefore(s,a);else{let m=i[i.length-1]?.nextSibling??null;m?n.insertBefore(s,m):n.appendChild(s)}i.push(s),i.sort((u,m)=>parseInt(u.getAttribute("data-value")??"0",10)-parseInt(m.getAttribute("data-value")??"0",10))})}),this.removedItems.clear()}getColumnTypeByElement(e){for(let[t,r]of this.columns)if(r===e)return t;return null}destroy(){this.restoreRemovedItems(),this.columns.clear(),this.cachedItems.clear(),this.cachedItemHeight=null,this.removedItems.clear()}};var y=class{renderer;core;dragHandler=null;onScrollEnd=null;onScrollStart=null;constructor(e,t){this.renderer=e,this.core=t}setDragHandler(e){this.dragHandler=e}init(){this.dragHandler&&(this.dragHandler.setSnapCallback(e=>{this.onColumnSnapped(e)}),this.dragHandler.setScrollStartCallback(e=>{this.emitScrollStart(e)}))}setScrollEndCallback(e){this.onScrollEnd=e}setScrollStartCallback(e){this.onScrollStart=e}scrollToValue(e,t){if(!this.renderer.getColumnElement(e)||!this.dragHandler)return;let n=this.renderer.getItemHeight();if(n<=0)return;let i=this.renderer.getItems(e);if(!i)return;let s=-1;for(let a=0;a<i.length;a++)if(i[a].getAttribute("data-value")===t){s=a;break}if(s<0)return;let o=s*n;this.dragHandler.setScrollOffset(e,o),this.applyVisualClassesForIndex(e,s)}getSelectedValue(e){if(!this.dragHandler)return null;let t=this.renderer.getItemHeight();if(t<=0)return null;let r=this.dragHandler.getScrollOffset(e),n=Math.round(r/t),i=this.renderer.getItems(e);return!i||n<0||n>=i.length?null:i[n].getAttribute("data-value")}getCurrentSelection(){let e=this.getSelectedValue("hours")??"12",t=this.getSelectedValue("minutes")??"00",r=null;return this.core.options.clock.type!=="24h"&&(r=this.getSelectedValue("ampm"),r===null&&(r=this.core.getAM()?.classList.contains("active")?"AM":"PM")),{hour:e,minute:t,ampm:r}}destroy(){this.onScrollEnd=null,this.onScrollStart=null,this.dragHandler=null}onColumnSnapped(e){let t=this.getSelectedValue(e);if(t!==null){if(this.isValueDisabled(e,t)){this.scrollToNextValid(e,t);return}this.onScrollEnd&&this.onScrollEnd(e,t)}}emitScrollStart(e){this.onScrollStart&&this.onScrollStart(e)}updateVisualClasses(e){if(!this.dragHandler)return;let t=this.renderer.getItemHeight();if(t<=0)return;let r=this.dragHandler.getScrollOffset(e),n=Math.round(r/t);this.applyVisualClassesForIndex(e,n)}applyVisualClassesForIndex(e,t){let r=this.renderer.getItems(e);if(!r)return;r.forEach((i,s)=>{let o=Math.abs(s-t),a=o===0;i.classList.toggle("is-center",a),i.classList.toggle("is-near",o===1),i.setAttribute("aria-selected",String(a))});let n=this.renderer.getColumnElement(e);if(n){let i=r[t];if(i){let o=i.getAttribute("id");o&&n.setAttribute("aria-activedescendant",o)}let s=n.parentElement;s&&(s.classList.toggle("at-start",t<=0),s.classList.toggle("at-end",t>=r.length-1))}}isValueDisabled(e,t){let r=this.renderer.getItems(e);if(!r)return!1;for(let n=0;n<r.length;n++)if(r[n].getAttribute("data-value")===t)return r[n].classList.contains("is-disabled");return!1}scrollToNextValid(e,t){let r=this.renderer.getItems(e);if(!r)return;let n=-1;for(let s=0;s<r.length;s++)if(r[s].getAttribute("data-value")===t){n=s;break}if(n<0)return;let i=r.length;for(let s=1;s<=i;s++){let o=n+s,a=n-s;if(o<r.length&&!r[o].classList.contains("is-disabled")){let u=r[o].getAttribute("data-value");if(u!==null){this.scrollToValue(e,u),this.onScrollEnd&&this.onScrollEnd(e,u);return}}if(a>=0&&!r[a].classList.contains("is-disabled")){let u=r[a].getAttribute("data-value");if(u!==null){this.scrollToValue(e,u),this.onScrollEnd&&this.onScrollEnd(e,u);return}}}}};var H=(l,e)=>{if(!l)return;let t=l.querySelector(".timepicker-announcer");t&&(t.textContent="",setTimeout(()=>{t.textContent=e},100))};var x="ArrowUp",Y="ArrowDown",B="12",z="00",X="AM",K=400,T=class{emitter;scrollHandler;core;keydownListeners=new Map;clearHandler=null;previousValues=new Map;scrollStartHandler=null;commitOnScrollTimer=null;constructor(e,t,r){this.emitter=e,this.scrollHandler=t,this.core=r}init(){this.removeKeyboardListeners(),this.removeClearListener(),this.previousValues.clear(),this.captureCurrentValues(),this.scrollHandler.setScrollEndCallback((e,t)=>{this.handleColumnScrollEnd(e,t)}),this.scrollStartHandler=e=>{this.emitter.emit("wheel:scroll:start",{column:e})},this.scrollHandler.setScrollStartCallback(this.scrollStartHandler),this.attachKeyboardListeners(),this.attachClearListener()}destroy(){this.scrollHandler.setScrollEndCallback(()=>{}),this.scrollHandler.setScrollStartCallback(null),this.removeKeyboardListeners(),this.removeClearListener(),this.previousValues.clear(),this.scrollStartHandler=null,this.commitOnScrollTimer!==null&&(clearTimeout(this.commitOnScrollTimer),this.commitOnScrollTimer=null)}handleColumnScrollEnd(e,t){let r=this.scrollHandler.getCurrentSelection(),n=this.previousValues.get(e)??null;this.emitter.emit("wheel:scroll:end",{column:e,value:t,previousValue:n}),this.previousValues.set(e,t);let i=this.core.getModalElement();switch(e){case"hours":this.syncHourInput(t),this.emitter.emit("select:hour",{hour:t}),H(i,`Hour: ${t}`);break;case"minutes":this.syncMinuteInput(t),this.emitter.emit("select:minute",{minutes:t}),H(i,`Minutes: ${t}`);break;case"ampm":this.syncAmPmState(t),t==="AM"?this.emitter.emit("select:am",{}):this.emitter.emit("select:pm",{}),H(i,`${t} selected`);break}this.emitter.emit("update",{hour:r.hour,minutes:r.minute,type:r.ampm??void 0}),this.core.options.wheel?.commitOnScroll===!0&&this.scheduleCommitOnScroll()}scheduleCommitOnScroll(){this.commitOnScrollTimer!==null&&clearTimeout(this.commitOnScrollTimer),this.commitOnScrollTimer=setTimeout(()=>{this.commitOnScrollTimer=null;let e=this.scrollHandler.getCurrentSelection(),t=this.core.getInput();if(t){let r=e.ampm?` ${e.ampm}`:"";t.value=`${e.hour}:${e.minute}${r}`}this.emitter.emit("confirm",{hour:e.hour,minutes:e.minute,type:e.ampm??void 0,autoCommit:!0})},K)}syncHourInput(e){let t=this.core.getHour();t&&(t.value=e,t.setAttribute("aria-valuenow",e)),this.core.setDegreesHours(parseInt(e,10)*30)}syncMinuteInput(e){let t=this.core.getMinutes();t&&(t.value=e,t.setAttribute("aria-valuenow",e)),this.core.setDegreesMinutes(parseInt(e,10)*6)}syncAmPmState(e){let t=this.core.getAM(),r=this.core.getPM();t&&r&&(t.classList.toggle("active",e==="AM"),r.classList.toggle("active",e==="PM"))}attachKeyboardListeners(){if(!d())return;["hours","minutes","ampm"].forEach(t=>{let r=this.scrollHandler.getCurrentSelection()?this.getColumnFromRenderer(t):null;if(!r)return;let n=i=>{(i.key===x||i.key===Y)&&(i.preventDefault(),this.handleArrowKey(t,i.key))};r.addEventListener("keydown",n),this.keydownListeners.set(t,n)})}getColumnFromRenderer(e){if(!d())return null;let t=this.core.getModalElement();if(!t)return null;let r={hours:".tp-ui-wheel-hours",minutes:".tp-ui-wheel-minutes",ampm:".tp-ui-wheel-ampm"};return t.querySelector(r[e])}handleArrowKey(e,t){let r=this.scrollHandler.getSelectedValue(e);if(r===null)return;let n=this.getColumnFromRenderer(e);if(!n)return;let i=n.querySelectorAll(".tp-ui-wheel-item"),s=-1;for(let m=0;m<i.length;m++)if(i[m].getAttribute("data-value")===r){s=m;break}if(s<0)return;let a=s+(t===x?-1:1);if(a<0||a>=i.length)return;let u=i[a].getAttribute("data-value");u!==null&&(this.scrollHandler.scrollToValue(e,u),this.handleColumnScrollEnd(e,u))}removeKeyboardListeners(){this.keydownListeners.forEach((e,t)=>{let r=this.getColumnFromRenderer(t);r&&r.removeEventListener("keydown",e)}),this.keydownListeners.clear()}attachClearListener(){this.clearHandler=()=>{this.scrollHandler.scrollToValue("hours",B),this.scrollHandler.scrollToValue("minutes",z),this.scrollHandler.scrollToValue("ampm",X)},this.emitter.on("clear",this.clearHandler)}removeClearListener(){this.clearHandler&&(this.emitter.off("clear",this.clearHandler),this.clearHandler=null)}captureCurrentValues(){let e=this.scrollHandler.getCurrentSelection();this.previousValues.set("hours",e.hour),this.previousValues.set("minutes",e.minute),e.ampm!==null&&this.previousValues.set("ampm",e.ampm)}};var M=class{element;columnType;_lastY=0;_isDragging=!1;_pointerId=-1;_momentumRaf=null;velocitySamples=[];snapTimeout=null;snapAnimationRaf=null;abortController=null;constructor(e,t){this.element=e,this.columnType=t,this.abortController=new AbortController}get lastY(){return this._lastY}get isDragging(){return this._isDragging}get pointerId(){return this._pointerId}get signal(){return this.abortController?this.abortController.signal:new AbortController().signal}startDrag(e,t){this.stopMomentum(),this._isDragging=!0,this._lastY=e,this._pointerId=t,this.velocitySamples=[{time:performance.now(),y:e}]}updateLastY(e){this._lastY=e}addVelocitySample(e){this.velocitySamples.push({time:performance.now(),y:e}),this.velocitySamples.length>5&&this.velocitySamples.shift()}computeReleaseVelocity(){let e=performance.now(),t=this.velocitySamples.filter(s=>e-s.time<100);if(t.length<2)return 0;let r=t[0],n=t[t.length-1],i=n.time-r.time;return i<=0?0:(r.y-n.y)/i}endDrag(){this._isDragging=!1,this._pointerId=-1,this.velocitySamples=[]}setMomentumRaf(e){this._momentumRaf=e}hasMomentum(){return this._momentumRaf!==null}stopMomentum(){this._momentumRaf!==null&&(cancelAnimationFrame(this._momentumRaf),this._momentumRaf=null),this.snapAnimationRaf!==null&&(cancelAnimationFrame(this.snapAnimationRaf),this.snapAnimationRaf=null)}animateToOffset(e,t){this.stopMomentum();let r=this.element.scrollTop,n=e-r,i=performance.now();if(Math.abs(n)<.5){this.element.scrollTop=e,t();return}let s=()=>{let o=performance.now()-i,a=Math.min(o/180,1),u=1-Math.pow(1-a,3);this.element.scrollTop=r+n*u,a<1?this.snapAnimationRaf=requestAnimationFrame(s):(this.element.scrollTop=e,this.snapAnimationRaf=null,t())};this.snapAnimationRaf=requestAnimationFrame(s)}scheduleSnapAfterWheel(e){this.snapTimeout!==null&&clearTimeout(this.snapTimeout),this.snapTimeout=setTimeout(()=>{this.snapTimeout=null,e()},120)}destroy(){this.stopMomentum(),this.snapTimeout!==null&&(clearTimeout(this.snapTimeout),this.snapTimeout=null),this.abortController&&(this.abortController.abort(),this.abortController=null)}};var G=.92,W=.3,V=8,j=30,E=class{renderer;columnStates=new Map;onSnap=null;onVisualUpdate=null;onScrollStart=null;activeDragColumn=null;visualUpdateRaf=null;pendingVisualColumns=new Set;wheelAccumulator=new Map;pointerMoveHandler;pointerUpHandler;documentListenerController=null;constructor(e){this.renderer=e,this.pointerMoveHandler=t=>this.handlePointerMove(t),this.pointerUpHandler=t=>this.handlePointerUp(t)}setSnapCallback(e){this.onSnap=e}setVisualUpdateCallback(e){this.onVisualUpdate=e}setScrollStartCallback(e){this.onScrollStart=e}init(){if(this.cleanupPreviousInit(),!d())return;["hours","minutes","ampm"].forEach(t=>{let r=this.renderer.getColumnElement(t);if(!r)return;let n=new M(r,t);this.columnStates.set(t,n),r.addEventListener("pointerdown",i=>{this.handlePointerDown(t,i)},{signal:n.signal}),r.addEventListener("wheel",i=>{this.handleWheel(t,i)},{passive:!1,signal:n.signal})}),this.documentListenerController=new AbortController,document.addEventListener("pointermove",this.pointerMoveHandler,{signal:this.documentListenerController.signal}),document.addEventListener("pointerup",this.pointerUpHandler,{signal:this.documentListenerController.signal})}getScrollOffset(e){let t=this.renderer.getColumnElement(e);return t?t.scrollTop:0}setScrollOffset(e,t){let r=this.columnStates.get(e);r&&r.stopMomentum();let n=this.renderer.getColumnElement(e);n&&(n.scrollTop=t)}getMaxOffset(e){let t=this.renderer.getItemHeight();if(t<=0)return 0;let r=this.renderer.getItemCount(e);return Math.max(0,(r-1)*t)}destroy(){this.cleanupPreviousInit(),this.onSnap=null,this.onVisualUpdate=null,this.onScrollStart=null}cleanupPreviousInit(){this.visualUpdateRaf!==null&&(cancelAnimationFrame(this.visualUpdateRaf),this.visualUpdateRaf=null),this.pendingVisualColumns.clear(),this.wheelAccumulator.clear(),this.activeDragColumn=null,this.documentListenerController&&(this.documentListenerController.abort(),this.documentListenerController=null),this.columnStates.forEach(e=>e.destroy()),this.columnStates.clear()}handlePointerDown(e,t){let r=this.columnStates.get(e);r&&(t.preventDefault(),this.activeDragColumn=e,r.startDrag(t.clientY,t.pointerId),r.element.classList.add("is-dragging"),r.element.setPointerCapture(t.pointerId),this.onScrollStart&&this.onScrollStart(e))}handlePointerMove(e){if(this.activeDragColumn===null)return;let t=this.columnStates.get(this.activeDragColumn);if(!t||!t.isDragging||t.pointerId!==e.pointerId)return;let r=t.lastY-e.clientY;t.addVelocitySample(e.clientY);let n=this.getMaxOffset(t.columnType),i=f(t.element.scrollTop+r,0,n);t.element.scrollTop=i,t.updateLastY(e.clientY),this.scheduleVisualUpdate(t.columnType)}handlePointerUp(e){if(this.activeDragColumn===null)return;let t=this.columnStates.get(this.activeDragColumn);if(!t||!t.isDragging||t.pointerId!==e.pointerId)return;t.element.classList.remove("is-dragging"),t.element.releasePointerCapture(e.pointerId),this.activeDragColumn=null;let r=t.computeReleaseVelocity();t.endDrag(),Math.abs(r)>W?this.startMomentum(t,r):this.snapColumn(t.columnType)}handleWheel(e,t){t.preventDefault();let r=this.columnStates.get(e);if(!r)return;let n=r.hasMomentum();r.stopMomentum(),!n&&this.onScrollStart&&this.onScrollStart(e);let i=this.renderer.getItemHeight();if(i<=0)return;let s=(this.wheelAccumulator.get(e)??0)+t.deltaY;if(this.wheelAccumulator.set(e,s),Math.abs(s)>=j){let o=s>0?1:-1;this.wheelAccumulator.set(e,0);let a=this.getMaxOffset(e),m=Math.round(r.element.scrollTop/i)+o,c=f(m*i,0,a);r.animateToOffset(c,()=>{this.emitVisualUpdate(e),this.onSnap&&this.onSnap(e)}),this.scheduleVisualUpdate(e)}}startMomentum(e,t){let r=f(t,-V,V),n=performance.now(),i=this.getMaxOffset(e.columnType),s=()=>{let o=performance.now(),a=o-n;n=o,r*=G;let u=r*a,m=e.element.scrollTop,c=f(m+u,0,i);if(e.element.scrollTop=c,this.emitVisualUpdate(e.columnType),Math.abs(r)<W||c<=0||c>=i){e.setMomentumRaf(null),this.snapColumn(e.columnType);return}e.setMomentumRaf(requestAnimationFrame(s))};e.setMomentumRaf(requestAnimationFrame(s))}snapColumn(e){let t=this.columnStates.get(e);if(!t)return;let r=this.renderer.getItemHeight();if(r<=0)return;let n=this.getMaxOffset(e),i=Math.round(t.element.scrollTop/r),s=f(i*r,0,n);t.animateToOffset(s,()=>{this.emitVisualUpdate(e),this.onSnap&&this.onSnap(e)})}scheduleVisualUpdate(e){this.pendingVisualColumns.add(e),this.visualUpdateRaf===null&&(this.visualUpdateRaf=requestAnimationFrame(()=>{this.visualUpdateRaf=null,this.pendingVisualColumns.forEach(t=>{this.emitVisualUpdate(t)}),this.pendingVisualColumns.clear()}))}emitVisualUpdate(e){this.onVisualUpdate&&this.onVisualUpdate(e)}};function f(l,e,t){return Math.max(e,Math.min(t,l))}var w=4,J=260,Q=328,P=4,Z=16,g=class{core;emitter;resizeHandler=null;scrollHandler=null;clickOutsideHandler=null;rafId=null;isAttached=!1;constructor(e,t){this.core=e,this.emitter=t}isPopoverMode(){return this.core.options.ui.mode==="compact-wheel"&&!!this.core.options.wheel?.placement}attach(){if(!this.isPopoverMode()||!d()||this.isAttached)return;let e=this.core.getModalElement();e&&(e.classList.add("tp-ui-popover"),this.positionPopover(),this.addListeners(),this.isAttached=!0)}detach(){this.isAttached&&(this.removeListeners(),this.isAttached=!1)}destroy(){this.detach()}positionPopover(){let e=this.core.getInput(),t=this.core.getModalElement();if(!e||!t)return;let r=e.getBoundingClientRect(),n=this.core.options.wheel?.placement??"auto",i=Math.min(Math.max(r.width,J),Q);t.style.width=`${i}px`;let s=t.offsetHeight,o=this.resolvePlacement(n,r,s),a=this.computeTop(o,r,s),u=this.clampHorizontal(r.left,i);t.style.top=`${a}px`,t.style.left=`${u}px`,t.setAttribute("data-popover-placement",o)}resolvePlacement(e,t,r){if(e==="top")return"top";if(e==="bottom")return"bottom";let i=document.documentElement.clientHeight-t.bottom,s=t.top,o=r+w+Z;return i>=o?"bottom":s>=o?"top":i>=s?"bottom":"top"}computeTop(e,t,r){return e==="top"?t.top-r-w:t.bottom+w}clampHorizontal(e,t){let r=document.documentElement.clientWidth,n=e;return n+t>r&&(n=r-t-P),n<P&&(n=P),n}addListeners(){if(!d())return;this.resizeHandler=()=>{this.scheduleReposition()},this.scrollHandler=()=>{this.scheduleReposition()},this.clickOutsideHandler=t=>{this.handleClickOutside(t)},window.addEventListener("resize",this.resizeHandler,{passive:!0}),window.addEventListener("scroll",this.scrollHandler,{passive:!0,capture:!0});let e=this.clickOutsideHandler;setTimeout(()=>{e===this.clickOutsideHandler&&document.addEventListener("pointerdown",e)},0)}removeListeners(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.resizeHandler&&(window.removeEventListener("resize",this.resizeHandler),this.resizeHandler=null),this.scrollHandler&&(window.removeEventListener("scroll",this.scrollHandler,!0),this.scrollHandler=null),this.clickOutsideHandler&&(document.removeEventListener("pointerdown",this.clickOutsideHandler),this.clickOutsideHandler=null)}scheduleReposition(){this.rafId===null&&(this.rafId=requestAnimationFrame(()=>{this.rafId=null,this.positionPopover()}))}handleClickOutside(e){if(this.core.options.wheel?.ignoreOutsideClick)return;let t=this.core.getModalElement(),r=this.core.getInput(),n=e.target;if(!t||!n)return;let i=t.contains(n),s=r?r.contains(n):!1;!i&&!s&&this.emitter.emit("cancel",{})}};var p=class{renderer;dragHandler;scrollHandler;eventHandler;core;emitter;popover;amPmHandler=null;hourChangeHandler=null;clearHandler=null;constructor(e,t){this.core=e,this.emitter=t,this.renderer=new S(e),this.dragHandler=new E(this.renderer),this.scrollHandler=new y(this.renderer,e),this.scrollHandler.setDragHandler(this.dragHandler),this.eventHandler=new T(t,this.scrollHandler,e),this.popover=new g(e,t)}init(){this.renderer.init(),this.dragHandler.init(),this.scrollHandler.init(),this.eventHandler.init(),this.dragHandler.setVisualUpdateCallback(e=>{this.scrollHandler.updateVisualClasses(e)}),this.listenForAmPmChanges(),this.listenForHourChanges(),this.listenForClear(),this.deferInitialSync()}scrollToValue(e,t,r){this.scrollHandler.scrollToValue("hours",e.padStart(2,"0")),this.scrollHandler.scrollToValue("minutes",t.padStart(2,"0")),r&&this.isCompactWheelMode()&&this.scrollHandler.scrollToValue("ampm",r.toUpperCase())}updateDisabledItems(){this.renderer.updateDisabledItems()}attachPopover(){this.popover.attach()}detachPopover(){this.popover.detach()}destroy(){this.popover.destroy(),this.amPmHandler&&(this.emitter.off("select:am",this.amPmHandler),this.emitter.off("select:pm",this.amPmHandler),this.amPmHandler=null),this.hourChangeHandler&&(this.emitter.off("select:hour",this.hourChangeHandler),this.hourChangeHandler=null),this.clearHandler&&(this.emitter.off("clear",this.clearHandler),this.clearHandler=null),this.eventHandler.destroy(),this.scrollHandler.destroy(),this.dragHandler.destroy(),this.renderer.destroy()}deferInitialSync(){typeof requestAnimationFrame<"u"?requestAnimationFrame(()=>{this.syncInitialValues()}):this.syncInitialValues()}syncInitialValues(){let e=this.core.getHour(),t=this.core.getMinutes(),r=this.isCompactWheelMode(),n=e?.value??"",i=t?.value??"";if(r&&(!n||!i)){let s=this.parseMainInputValue();n||(n=s.hour),i||(i=s.minutes)}if(n&&this.scrollHandler.scrollToValue("hours",n.padStart(2,"0")),i&&this.scrollHandler.scrollToValue("minutes",i.padStart(2,"0")),r){let o=this.core.getAM()?.classList.contains("active")?"AM":"PM";this.scrollHandler.scrollToValue("ampm",o)}}parseMainInputValue(){let e=this.core.getInput();if(!e?.value)return{hour:"",minutes:""};let t=e.value.trim(),[r,n]=t.split(" "),[i="",s=""]=(r??"").split(":"),o=i.replace(/\D/g,"").padStart(2,"0"),a=s.replace(/\D/g,"").padStart(2,"0");return{hour:o,minutes:a,type:this.core.options.clock.type==="12h"?n:void 0}}isCompactWheelMode(){return this.core.options.ui.mode==="compact-wheel"}listenForAmPmChanges(){this.core.options.clock.type!=="24h"&&(this.amPmHandler=()=>{let e=this.scrollHandler.getSelectedValue("hours"),t=this.scrollHandler.getSelectedValue("minutes");this.renderer.updateDisabledItems(),this.scrollToFirstAvailable("hours",e),this.scrollToFirstAvailable("minutes",t)},this.emitter.on("select:am",this.amPmHandler),this.emitter.on("select:pm",this.amPmHandler))}listenForClear(){this.clearHandler=()=>{this.deferInitialSync()},this.emitter.on("clear",this.clearHandler)}listenForHourChanges(){this.core.disabledTime?.value?.isInterval&&(this.hourChangeHandler=()=>{let t=this.scrollHandler.getSelectedValue("minutes");this.renderer.updateDisabledItems(),this.scrollToFirstAvailable("minutes",t)},this.emitter.on("select:hour",this.hourChangeHandler))}scrollToFirstAvailable(e,t){let r=this.renderer.getItems(e);if(!(!r||r.length===0)){if(t!==null){for(let n=0;n<r.length;n++)if(r[n].getAttribute("data-value")===t&&!r[n].classList.contains("is-disabled")){this.scrollHandler.scrollToValue(e,t);return}}for(let n=0;n<r.length;n++)if(!r[n].classList.contains("is-disabled")){let i=r[n].getAttribute("data-value");if(i!==null){this.scrollHandler.scrollToValue(e,i);return}}}}};var L=l=>String(l).padStart(2,"0"),O=()=>Array.from({length:2}).map(()=>'<div class="tp-ui-wheel-padding"></div>').join(""),ee=(l,e,t)=>l.map(r=>`<div class="tp-ui-wheel-item" role="option" id="${t}-${r}" data-value="${r}" aria-label="${e} ${r}" aria-selected="false">${r}</div>`).join(""),D=(l,e,t,r,n)=>`<div class="tp-ui-wheel-column-wrapper at-start"><div class="tp-ui-wheel-column ${l}" role="listbox" aria-label="${e}" aria-activedescendant="" tabindex="0">${O()}${ee(t,r,n)}${O()}</div></div>`,te=()=>Array.from({length:12},(l,e)=>L(e+1)),re=()=>Array.from({length:24},(l,e)=>L(e)),ne=l=>Array.from({length:Math.ceil(60/l)},(e,t)=>L(t*l)),ie=["AM","PM"],R=(l,e,t=!1,r="tp")=>{let n=l==="12h"?te():re(),i=ne(e),s=D("tp-ui-wheel-hours","Hours",n,"Hour",`${r}-wh`),o='<div class="tp-ui-wheel-separator" aria-hidden="true">:</div>',a=D("tp-ui-wheel-minutes","Minutes",i,"Minute",`${r}-wm`),u=t&&l==="12h"?D("tp-ui-wheel-ampm","Period",ie,"Period",`${r}-wp`):"";return`<div class="tp-ui-wheel-container">${s}${o}${a}${u}<div class="tp-ui-wheel-highlight" aria-hidden="true"></div></div>`};var se={name:"wheel",factory:(l,e)=>new p(l,e),templateProvider:(l,e)=>{let r=l.ui.mode==="compact-wheel"&&l.clock.type==="12h";return R(l.clock.type,l.clock.incrementMinutes??1,r,e)}};0&&(module.exports={WheelManager,WheelPlugin});
@@ -1 +1 @@
1
- var d=()=>typeof document<"u";var b=(m="")=>{let e=m.replace(/(AM|PM|am|pm)/,i=>` ${i}`),t=new Date(`September 20, 2000 ${e}`),r=t.getHours().toString().padStart(2,"0"),n=t.getMinutes().toString().padStart(2,"0");return`${r}:${n}`},S=m=>{let[e,t]=m.split(":");return`${e.padStart(2,"0")}:${t.padStart(2,"0")}`};var I=(m,e,t,r,n)=>{if(!m||!e||!r||!n)return!1;let i=n==="12h"?b(`${m}:${e} ${t||""}`.trim()):S(`${m}:${e}`),s=Array.isArray(r)?r:[r];for(let l of s){let[o,a]=l.trim().split("-"),u,c;if(n==="12h"){let h=o.trim(),v=a.trim();if(!/\s?(AM|PM|am|pm)\s?$/.test(h)||!/\s?(AM|PM|am|pm)\s?$/.test(v))continue;u=b(h),c=b(v)}else{let h=o.trim(),v=a.trim();if(/\s?(AM|PM|am|pm)\s?/.test(h)||/\s?(AM|PM|am|pm)\s?/.test(v))continue;u=S(h),c=S(v)}if(i>=u&&i<=c)return!1}return!0};var W={hours:".tp-ui-wheel-hours",minutes:".tp-ui-wheel-minutes",ampm:".tp-ui-wheel-ampm"},C=class{core;columns=new Map;cachedItemHeight=null;cachedItems=new Map;removedItems=new Map;constructor(e){this.core=e}init(){if(this.cachedItems.clear(),this.cachedItemHeight=null,this.restoreRemovedItems(),!d())return;let e=this.core.getModalElement();if(!e)return;["hours","minutes","ampm"].forEach(r=>{let n=e.querySelector(W[r]);n&&this.columns.set(r,n)}),this.updateDisabledItems()}updateDisabledItems(){let e=this.core.disabledTime;if(!e?.value)return;let t=this.core.options.wheel.hideDisabled===!0;t&&(this.restoreRemovedItems(),this.invalidateItemCache()),e.value.isInterval&&e.value.intervals?this.updateDisabledByInterval(e.value,t):this.updateDisabledByFlatLists(e.value,t),t&&this.invalidateItemCache()}updateDisabledByFlatLists(e,t){let r=this.columns.get("hours"),n=this.columns.get("minutes");if(r&&e.hours){let i=new Set(e.hours.map(String));this.toggleDisabledOnItems(r,i,t)}if(n&&e.minutes){let i=new Set(e.minutes.map(String));this.toggleDisabledOnItems(n,i,t)}}updateDisabledByInterval(e,t){let r=e.clockType??"12h",n=e.intervals,i=this.getCurrentAmPm(),s=this.getCurrentHour(),l=this.columns.get("hours");l&&l.querySelectorAll(".tp-ui-wheel-item").forEach(u=>{let c=u.getAttribute("data-value");if(c===null)return;let h=this.isHourFullyDisabled(c,i,n,r);u.classList.toggle("is-disabled",h),t&&h&&this.removeItemFromDOM(u,l)});let o=this.columns.get("minutes");o&&o.querySelectorAll(".tp-ui-wheel-item").forEach(u=>{let c=u.getAttribute("data-value");if(c===null)return;let h=I(s,c,i,n,r);u.classList.toggle("is-disabled",!h),t&&!h&&this.removeItemFromDOM(u,o)})}isHourFullyDisabled(e,t,r,n){if(!r)return!1;for(let i=0;i<60;i++){let s=i.toString().padStart(2,"0");if(I(e,s,t,r,n))return!1}return!0}toggleDisabledOnItems(e,t,r){e.querySelectorAll(".tp-ui-wheel-item").forEach(i=>{let s=i.getAttribute("data-value");if(s!==null){let l=String(parseInt(s,10)),o=t.has(l)||t.has(s);i.classList.toggle("is-disabled",o),r&&o&&this.removeItemFromDOM(i,e)}})}getCurrentAmPm(){return this.core.getAM()?.classList.contains("active")?"AM":"PM"}getCurrentHour(){return this.core.getHour()?.value?.padStart(2,"0")??"12"}getColumnElement(e){return this.columns.get(e)??null}getItems(e){let t=this.cachedItems.get(e);if(t)return t;let r=this.columns.get(e);if(!r)return null;let n=r.querySelectorAll(".tp-ui-wheel-item");return this.cachedItems.set(e,n),n}invalidateItemCache(){this.cachedItems.clear(),this.cachedItemHeight=null}getItemCount(e){let t=this.getItems(e);return t?t.length:0}getItemHeight(){if(this.cachedItemHeight!==null)return this.cachedItemHeight;let e=this.columns.get("hours");if(!e)return 0;let t=e.querySelector(".tp-ui-wheel-item");if(!t)return 0;let r=t.getBoundingClientRect().height;return r>0&&(this.cachedItemHeight=r),r}removeItemFromDOM(e,t){let r=this.getColumnTypeByElement(t);if(!r)return;let n=this.removedItems.get(r)??[];n.push(e),this.removedItems.set(r,n),e.remove()}restoreRemovedItems(){["hours","minutes","ampm"].forEach(t=>{let r=this.removedItems.get(t);if(!r||r.length===0)return;let n=this.columns.get(t);if(!n)return;let i=Array.from(n.querySelectorAll(".tp-ui-wheel-item"));r.forEach(s=>{s.classList.remove("is-disabled");let l=parseInt(s.getAttribute("data-value")??"0",10),o=i.find(a=>parseInt(a.getAttribute("data-value")??"0",10)>l);if(o)n.insertBefore(s,o);else{let u=i[i.length-1]?.nextSibling??null;u?n.insertBefore(s,u):n.appendChild(s)}i.push(s),i.sort((a,u)=>parseInt(a.getAttribute("data-value")??"0",10)-parseInt(u.getAttribute("data-value")??"0",10))})}),this.removedItems.clear()}getColumnTypeByElement(e){for(let[t,r]of this.columns)if(r===e)return t;return null}destroy(){this.restoreRemovedItems(),this.columns.clear(),this.cachedItems.clear(),this.cachedItemHeight=null,this.removedItems.clear()}};var y=class{renderer;core;dragHandler=null;onScrollEnd=null;onScrollStart=null;constructor(e,t){this.renderer=e,this.core=t}setDragHandler(e){this.dragHandler=e}init(){this.dragHandler&&(this.dragHandler.setSnapCallback(e=>{this.onColumnSnapped(e)}),this.dragHandler.setScrollStartCallback(e=>{this.emitScrollStart(e)}))}setScrollEndCallback(e){this.onScrollEnd=e}setScrollStartCallback(e){this.onScrollStart=e}scrollToValue(e,t){if(!this.renderer.getColumnElement(e)||!this.dragHandler)return;let n=this.renderer.getItemHeight();if(n<=0)return;let i=this.renderer.getItems(e);if(!i)return;let s=-1;for(let o=0;o<i.length;o++)if(i[o].getAttribute("data-value")===t){s=o;break}if(s<0)return;let l=s*n;this.dragHandler.setScrollOffset(e,l),this.applyVisualClassesForIndex(e,s)}getSelectedValue(e){if(!this.dragHandler)return null;let t=this.renderer.getItemHeight();if(t<=0)return null;let r=this.dragHandler.getScrollOffset(e),n=Math.round(r/t),i=this.renderer.getItems(e);return!i||n<0||n>=i.length?null:i[n].getAttribute("data-value")}getCurrentSelection(){let e=this.getSelectedValue("hours")??"12",t=this.getSelectedValue("minutes")??"00",r=null;return this.core.options.clock.type!=="24h"&&(r=this.getSelectedValue("ampm"),r===null&&(r=this.core.getAM()?.classList.contains("active")?"AM":"PM")),{hour:e,minute:t,ampm:r}}destroy(){this.onScrollEnd=null,this.onScrollStart=null,this.dragHandler=null}onColumnSnapped(e){let t=this.getSelectedValue(e);if(t!==null){if(this.isValueDisabled(e,t)){this.scrollToNextValid(e,t);return}this.onScrollEnd&&this.onScrollEnd(e,t)}}emitScrollStart(e){this.onScrollStart&&this.onScrollStart(e)}updateVisualClasses(e){if(!this.dragHandler)return;let t=this.renderer.getItemHeight();if(t<=0)return;let r=this.dragHandler.getScrollOffset(e),n=Math.round(r/t);this.applyVisualClassesForIndex(e,n)}applyVisualClassesForIndex(e,t){let r=this.renderer.getItems(e);if(!r)return;r.forEach((i,s)=>{let l=Math.abs(s-t),o=l===0;i.classList.toggle("is-center",o),i.classList.toggle("is-near",l===1),i.setAttribute("aria-selected",String(o))});let n=this.renderer.getColumnElement(e);if(n){let i=r[t];if(i){let l=i.getAttribute("id");l&&n.setAttribute("aria-activedescendant",l)}let s=n.parentElement;s&&(s.classList.toggle("at-start",t<=0),s.classList.toggle("at-end",t>=r.length-1))}}isValueDisabled(e,t){let r=this.renderer.getItems(e);if(!r)return!1;for(let n=0;n<r.length;n++)if(r[n].getAttribute("data-value")===t)return r[n].classList.contains("is-disabled");return!1}scrollToNextValid(e,t){let r=this.renderer.getItems(e);if(!r)return;let n=-1;for(let s=0;s<r.length;s++)if(r[s].getAttribute("data-value")===t){n=s;break}if(n<0)return;let i=r.length;for(let s=1;s<=i;s++){let l=n+s,o=n-s;if(l<r.length&&!r[l].classList.contains("is-disabled")){let a=r[l].getAttribute("data-value");if(a!==null){this.scrollToValue(e,a),this.onScrollEnd&&this.onScrollEnd(e,a);return}}if(o>=0&&!r[o].classList.contains("is-disabled")){let a=r[o].getAttribute("data-value");if(a!==null){this.scrollToValue(e,a),this.onScrollEnd&&this.onScrollEnd(e,a);return}}}}};var H=(m,e)=>{if(!m)return;let t=m.querySelector(".timepicker-announcer");t&&(t.textContent="",setTimeout(()=>{t.textContent=e},100))};var L="ArrowUp",P="ArrowDown",V="12",O="00",R="AM",_=400,T=class{emitter;scrollHandler;core;keydownListeners=new Map;clearHandler=null;previousValues=new Map;scrollStartHandler=null;commitOnScrollTimer=null;constructor(e,t,r){this.emitter=e,this.scrollHandler=t,this.core=r}init(){this.removeKeyboardListeners(),this.removeClearListener(),this.previousValues.clear(),this.captureCurrentValues(),this.scrollHandler.setScrollEndCallback((e,t)=>{this.handleColumnScrollEnd(e,t)}),this.scrollStartHandler=e=>{this.emitter.emit("wheel:scroll:start",{column:e})},this.scrollHandler.setScrollStartCallback(this.scrollStartHandler),this.attachKeyboardListeners(),this.attachClearListener()}destroy(){this.scrollHandler.setScrollEndCallback(()=>{}),this.scrollHandler.setScrollStartCallback(null),this.removeKeyboardListeners(),this.removeClearListener(),this.previousValues.clear(),this.scrollStartHandler=null,this.commitOnScrollTimer!==null&&(clearTimeout(this.commitOnScrollTimer),this.commitOnScrollTimer=null)}handleColumnScrollEnd(e,t){let r=this.scrollHandler.getCurrentSelection(),n=this.previousValues.get(e)??null;this.emitter.emit("wheel:scroll:end",{column:e,value:t,previousValue:n}),this.previousValues.set(e,t);let i=this.core.getModalElement();switch(e){case"hours":this.syncHourInput(t),this.emitter.emit("select:hour",{hour:t}),H(i,`Hour: ${t}`);break;case"minutes":this.syncMinuteInput(t),this.emitter.emit("select:minute",{minutes:t}),H(i,`Minutes: ${t}`);break;case"ampm":this.syncAmPmState(t),t==="AM"?this.emitter.emit("select:am",{}):this.emitter.emit("select:pm",{}),H(i,`${t} selected`);break}this.emitter.emit("update",{hour:r.hour,minutes:r.minute,type:r.ampm??void 0}),this.core.options.wheel?.commitOnScroll===!0&&this.scheduleCommitOnScroll()}scheduleCommitOnScroll(){this.commitOnScrollTimer!==null&&clearTimeout(this.commitOnScrollTimer),this.commitOnScrollTimer=setTimeout(()=>{this.commitOnScrollTimer=null;let e=this.scrollHandler.getCurrentSelection(),t=this.core.getInput();if(t){let r=e.ampm?` ${e.ampm}`:"";t.value=`${e.hour}:${e.minute}${r}`}this.emitter.emit("confirm",{hour:e.hour,minutes:e.minute,type:e.ampm??void 0,autoCommit:!0})},_)}syncHourInput(e){let t=this.core.getHour();t&&(t.value=e,t.setAttribute("aria-valuenow",e)),this.core.setDegreesHours(parseInt(e,10)*30)}syncMinuteInput(e){let t=this.core.getMinutes();t&&(t.value=e,t.setAttribute("aria-valuenow",e)),this.core.setDegreesMinutes(parseInt(e,10)*6)}syncAmPmState(e){let t=this.core.getAM(),r=this.core.getPM();t&&r&&(t.classList.toggle("active",e==="AM"),r.classList.toggle("active",e==="PM"))}attachKeyboardListeners(){if(!d())return;["hours","minutes","ampm"].forEach(t=>{let r=this.scrollHandler.getCurrentSelection()?this.getColumnFromRenderer(t):null;if(!r)return;let n=i=>{(i.key===L||i.key===P)&&(i.preventDefault(),this.handleArrowKey(t,i.key))};r.addEventListener("keydown",n),this.keydownListeners.set(t,n)})}getColumnFromRenderer(e){if(!d())return null;let t=this.core.getModalElement();if(!t)return null;let r={hours:".tp-ui-wheel-hours",minutes:".tp-ui-wheel-minutes",ampm:".tp-ui-wheel-ampm"};return t.querySelector(r[e])}handleArrowKey(e,t){let r=this.scrollHandler.getSelectedValue(e);if(r===null)return;let n=this.getColumnFromRenderer(e);if(!n)return;let i=n.querySelectorAll(".tp-ui-wheel-item"),s=-1;for(let u=0;u<i.length;u++)if(i[u].getAttribute("data-value")===r){s=u;break}if(s<0)return;let o=s+(t===L?-1:1);if(o<0||o>=i.length)return;let a=i[o].getAttribute("data-value");a!==null&&(this.scrollHandler.scrollToValue(e,a),this.handleColumnScrollEnd(e,a))}removeKeyboardListeners(){this.keydownListeners.forEach((e,t)=>{let r=this.getColumnFromRenderer(t);r&&r.removeEventListener("keydown",e)}),this.keydownListeners.clear()}attachClearListener(){this.clearHandler=()=>{this.scrollHandler.scrollToValue("hours",V),this.scrollHandler.scrollToValue("minutes",O),this.scrollHandler.scrollToValue("ampm",R)},this.emitter.on("clear",this.clearHandler)}removeClearListener(){this.clearHandler&&(this.emitter.off("clear",this.clearHandler),this.clearHandler=null)}captureCurrentValues(){let e=this.scrollHandler.getCurrentSelection();this.previousValues.set("hours",e.hour),this.previousValues.set("minutes",e.minute),e.ampm!==null&&this.previousValues.set("ampm",e.ampm)}};var M=class{element;columnType;_lastY=0;_isDragging=!1;_pointerId=-1;_momentumRaf=null;velocitySamples=[];snapTimeout=null;snapAnimationRaf=null;abortController=null;constructor(e,t){this.element=e,this.columnType=t,this.abortController=new AbortController}get lastY(){return this._lastY}get isDragging(){return this._isDragging}get pointerId(){return this._pointerId}get signal(){return this.abortController?this.abortController.signal:new AbortController().signal}startDrag(e,t){this.stopMomentum(),this._isDragging=!0,this._lastY=e,this._pointerId=t,this.velocitySamples=[{time:performance.now(),y:e}]}updateLastY(e){this._lastY=e}addVelocitySample(e){this.velocitySamples.push({time:performance.now(),y:e}),this.velocitySamples.length>5&&this.velocitySamples.shift()}computeReleaseVelocity(){let e=performance.now(),t=this.velocitySamples.filter(s=>e-s.time<100);if(t.length<2)return 0;let r=t[0],n=t[t.length-1],i=n.time-r.time;return i<=0?0:(r.y-n.y)/i}endDrag(){this._isDragging=!1,this._pointerId=-1,this.velocitySamples=[]}setMomentumRaf(e){this._momentumRaf=e}hasMomentum(){return this._momentumRaf!==null}stopMomentum(){this._momentumRaf!==null&&(cancelAnimationFrame(this._momentumRaf),this._momentumRaf=null),this.snapAnimationRaf!==null&&(cancelAnimationFrame(this.snapAnimationRaf),this.snapAnimationRaf=null)}animateToOffset(e,t){this.stopMomentum();let r=this.element.scrollTop,n=e-r,i=performance.now();if(Math.abs(n)<.5){this.element.scrollTop=e,t();return}let s=()=>{let l=performance.now()-i,o=Math.min(l/180,1),a=1-Math.pow(1-o,3);this.element.scrollTop=r+n*a,o<1?this.snapAnimationRaf=requestAnimationFrame(s):(this.element.scrollTop=e,this.snapAnimationRaf=null,t())};this.snapAnimationRaf=requestAnimationFrame(s)}scheduleSnapAfterWheel(e){this.snapTimeout!==null&&clearTimeout(this.snapTimeout),this.snapTimeout=setTimeout(()=>{this.snapTimeout=null,e()},120)}destroy(){this.stopMomentum(),this.snapTimeout!==null&&(clearTimeout(this.snapTimeout),this.snapTimeout=null),this.abortController&&(this.abortController.abort(),this.abortController=null)}};var k=.92,D=.3,x=8,N=30,E=class{renderer;columnStates=new Map;onSnap=null;onVisualUpdate=null;onScrollStart=null;activeDragColumn=null;visualUpdateRaf=null;pendingVisualColumns=new Set;wheelAccumulator=new Map;pointerMoveHandler;pointerUpHandler;documentListenerController=null;constructor(e){this.renderer=e,this.pointerMoveHandler=t=>this.handlePointerMove(t),this.pointerUpHandler=t=>this.handlePointerUp(t)}setSnapCallback(e){this.onSnap=e}setVisualUpdateCallback(e){this.onVisualUpdate=e}setScrollStartCallback(e){this.onScrollStart=e}init(){if(this.cleanupPreviousInit(),!d())return;["hours","minutes","ampm"].forEach(t=>{let r=this.renderer.getColumnElement(t);if(!r)return;let n=new M(r,t);this.columnStates.set(t,n),r.addEventListener("pointerdown",i=>{this.handlePointerDown(t,i)},{signal:n.signal}),r.addEventListener("wheel",i=>{this.handleWheel(t,i)},{passive:!1,signal:n.signal})}),this.documentListenerController=new AbortController,document.addEventListener("pointermove",this.pointerMoveHandler,{signal:this.documentListenerController.signal}),document.addEventListener("pointerup",this.pointerUpHandler,{signal:this.documentListenerController.signal})}getScrollOffset(e){let t=this.renderer.getColumnElement(e);return t?t.scrollTop:0}setScrollOffset(e,t){let r=this.columnStates.get(e);r&&r.stopMomentum();let n=this.renderer.getColumnElement(e);n&&(n.scrollTop=t)}getMaxOffset(e){let t=this.renderer.getItemHeight();if(t<=0)return 0;let r=this.renderer.getItemCount(e);return Math.max(0,(r-1)*t)}destroy(){this.cleanupPreviousInit(),this.onSnap=null,this.onVisualUpdate=null,this.onScrollStart=null}cleanupPreviousInit(){this.visualUpdateRaf!==null&&(cancelAnimationFrame(this.visualUpdateRaf),this.visualUpdateRaf=null),this.pendingVisualColumns.clear(),this.wheelAccumulator.clear(),this.activeDragColumn=null,this.documentListenerController&&(this.documentListenerController.abort(),this.documentListenerController=null),this.columnStates.forEach(e=>e.destroy()),this.columnStates.clear()}handlePointerDown(e,t){let r=this.columnStates.get(e);r&&(t.preventDefault(),this.activeDragColumn=e,r.startDrag(t.clientY,t.pointerId),r.element.classList.add("is-dragging"),r.element.setPointerCapture(t.pointerId),this.onScrollStart&&this.onScrollStart(e))}handlePointerMove(e){if(this.activeDragColumn===null)return;let t=this.columnStates.get(this.activeDragColumn);if(!t||!t.isDragging||t.pointerId!==e.pointerId)return;let r=t.lastY-e.clientY;t.addVelocitySample(e.clientY);let n=this.getMaxOffset(t.columnType),i=f(t.element.scrollTop+r,0,n);t.element.scrollTop=i,t.updateLastY(e.clientY),this.scheduleVisualUpdate(t.columnType)}handlePointerUp(e){if(this.activeDragColumn===null)return;let t=this.columnStates.get(this.activeDragColumn);if(!t||!t.isDragging||t.pointerId!==e.pointerId)return;t.element.classList.remove("is-dragging"),t.element.releasePointerCapture(e.pointerId),this.activeDragColumn=null;let r=t.computeReleaseVelocity();t.endDrag(),Math.abs(r)>D?this.startMomentum(t,r):this.snapColumn(t.columnType)}handleWheel(e,t){t.preventDefault();let r=this.columnStates.get(e);if(!r)return;let n=r.hasMomentum();r.stopMomentum(),!n&&this.onScrollStart&&this.onScrollStart(e);let i=this.renderer.getItemHeight();if(i<=0)return;let s=(this.wheelAccumulator.get(e)??0)+t.deltaY;if(this.wheelAccumulator.set(e,s),Math.abs(s)>=N){let l=s>0?1:-1;this.wheelAccumulator.set(e,0);let o=this.getMaxOffset(e),u=Math.round(r.element.scrollTop/i)+l,c=f(u*i,0,o);r.animateToOffset(c,()=>{this.emitVisualUpdate(e),this.onSnap&&this.onSnap(e)}),this.scheduleVisualUpdate(e)}}startMomentum(e,t){let r=f(t,-x,x),n=performance.now(),i=this.getMaxOffset(e.columnType),s=()=>{let l=performance.now(),o=l-n;n=l,r*=k;let a=r*o,u=e.element.scrollTop,c=f(u+a,0,i);if(e.element.scrollTop=c,this.emitVisualUpdate(e.columnType),Math.abs(r)<D||c<=0||c>=i){e.setMomentumRaf(null),this.snapColumn(e.columnType);return}e.setMomentumRaf(requestAnimationFrame(s))};e.setMomentumRaf(requestAnimationFrame(s))}snapColumn(e){let t=this.columnStates.get(e);if(!t)return;let r=this.renderer.getItemHeight();if(r<=0)return;let n=this.getMaxOffset(e),i=Math.round(t.element.scrollTop/r),s=f(i*r,0,n);t.animateToOffset(s,()=>{this.emitVisualUpdate(e),this.onSnap&&this.onSnap(e)})}scheduleVisualUpdate(e){this.pendingVisualColumns.add(e),this.visualUpdateRaf===null&&(this.visualUpdateRaf=requestAnimationFrame(()=>{this.visualUpdateRaf=null,this.pendingVisualColumns.forEach(t=>{this.emitVisualUpdate(t)}),this.pendingVisualColumns.clear()}))}emitVisualUpdate(e){this.onVisualUpdate&&this.onVisualUpdate(e)}};function f(m,e,t){return Math.max(e,Math.min(t,m))}var A=4,U=260,$=328,w=4,F=16,g=class{core;emitter;resizeHandler=null;scrollHandler=null;clickOutsideHandler=null;rafId=null;isAttached=!1;constructor(e,t){this.core=e,this.emitter=t}isPopoverMode(){return this.core.options.ui.mode==="compact-wheel"&&!!this.core.options.wheel?.placement}attach(){if(!this.isPopoverMode()||!d()||this.isAttached)return;let e=this.core.getModalElement();e&&(e.classList.add("tp-ui-popover"),this.positionPopover(),this.addListeners(),this.isAttached=!0)}detach(){this.isAttached&&(this.removeListeners(),this.isAttached=!1)}destroy(){this.detach()}positionPopover(){let e=this.core.getInput(),t=this.core.getModalElement();if(!e||!t)return;let r=e.getBoundingClientRect(),n=this.core.options.wheel?.placement??"auto",i=Math.min(Math.max(r.width,U),$);t.style.width=`${i}px`;let s=t.offsetHeight,l=this.resolvePlacement(n,r,s),o=this.computeTop(l,r,s),a=this.clampHorizontal(r.left,i);t.style.top=`${o}px`,t.style.left=`${a}px`,t.setAttribute("data-popover-placement",l)}resolvePlacement(e,t,r){if(e==="top")return"top";if(e==="bottom")return"bottom";let i=document.documentElement.clientHeight-t.bottom,s=t.top,l=r+A+F;return i>=l?"bottom":s>=l?"top":i>=s?"bottom":"top"}computeTop(e,t,r){return e==="top"?t.top-r-A:t.bottom+A}clampHorizontal(e,t){let r=document.documentElement.clientWidth,n=e;return n+t>r&&(n=r-t-w),n<w&&(n=w),n}addListeners(){if(!d())return;this.resizeHandler=()=>{this.scheduleReposition()},this.scrollHandler=()=>{this.scheduleReposition()},this.clickOutsideHandler=t=>{this.handleClickOutside(t)},window.addEventListener("resize",this.resizeHandler,{passive:!0}),window.addEventListener("scroll",this.scrollHandler,{passive:!0,capture:!0});let e=this.clickOutsideHandler;setTimeout(()=>{e===this.clickOutsideHandler&&document.addEventListener("pointerdown",e)},0)}removeListeners(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.resizeHandler&&(window.removeEventListener("resize",this.resizeHandler),this.resizeHandler=null),this.scrollHandler&&(window.removeEventListener("scroll",this.scrollHandler,!0),this.scrollHandler=null),this.clickOutsideHandler&&(document.removeEventListener("pointerdown",this.clickOutsideHandler),this.clickOutsideHandler=null)}scheduleReposition(){this.rafId===null&&(this.rafId=requestAnimationFrame(()=>{this.rafId=null,this.positionPopover()}))}handleClickOutside(e){if(this.core.options.wheel?.ignoreOutsideClick)return;let t=this.core.getModalElement(),r=this.core.getInput(),n=e.target;if(!t||!n)return;let i=t.contains(n),s=r?r.contains(n):!1;!i&&!s&&this.emitter.emit("cancel",{})}};var p=class{renderer;dragHandler;scrollHandler;eventHandler;core;emitter;popover;amPmHandler=null;hourChangeHandler=null;clearHandler=null;constructor(e,t){this.core=e,this.emitter=t,this.renderer=new C(e),this.dragHandler=new E(this.renderer),this.scrollHandler=new y(this.renderer,e),this.scrollHandler.setDragHandler(this.dragHandler),this.eventHandler=new T(t,this.scrollHandler,e),this.popover=new g(e,t)}init(){this.renderer.init(),this.dragHandler.init(),this.scrollHandler.init(),this.eventHandler.init(),this.dragHandler.setVisualUpdateCallback(e=>{this.scrollHandler.updateVisualClasses(e)}),this.listenForAmPmChanges(),this.listenForHourChanges(),this.listenForClear(),this.deferInitialSync()}scrollToValue(e,t,r){this.scrollHandler.scrollToValue("hours",e.padStart(2,"0")),this.scrollHandler.scrollToValue("minutes",t.padStart(2,"0")),r&&this.isCompactWheelMode()&&this.scrollHandler.scrollToValue("ampm",r.toUpperCase())}updateDisabledItems(){this.renderer.updateDisabledItems()}attachPopover(){this.popover.attach()}detachPopover(){this.popover.detach()}destroy(){this.popover.destroy(),this.amPmHandler&&(this.emitter.off("select:am",this.amPmHandler),this.emitter.off("select:pm",this.amPmHandler),this.amPmHandler=null),this.hourChangeHandler&&(this.emitter.off("select:hour",this.hourChangeHandler),this.hourChangeHandler=null),this.clearHandler&&(this.emitter.off("clear",this.clearHandler),this.clearHandler=null),this.eventHandler.destroy(),this.scrollHandler.destroy(),this.dragHandler.destroy(),this.renderer.destroy()}deferInitialSync(){typeof requestAnimationFrame<"u"?requestAnimationFrame(()=>{this.syncInitialValues()}):this.syncInitialValues()}syncInitialValues(){let e=this.core.getHour(),t=this.core.getMinutes(),r=this.isCompactWheelMode(),n=e?.value??"",i=t?.value??"";if(r&&(!n||!i)){let s=this.parseMainInputValue();n||(n=s.hour),i||(i=s.minutes)}if(n&&this.scrollHandler.scrollToValue("hours",n.padStart(2,"0")),i&&this.scrollHandler.scrollToValue("minutes",i.padStart(2,"0")),r){let l=this.core.getAM()?.classList.contains("active")?"AM":"PM";this.scrollHandler.scrollToValue("ampm",l)}}parseMainInputValue(){let e=this.core.getInput();if(!e?.value)return{hour:"",minutes:""};let t=e.value.trim(),[r,n]=t.split(" "),[i="",s=""]=(r??"").split(":"),l=i.replace(/\D/g,"").padStart(2,"0"),o=s.replace(/\D/g,"").padStart(2,"0");return{hour:l,minutes:o,type:this.core.options.clock.type==="12h"?n:void 0}}isCompactWheelMode(){return this.core.options.ui.mode==="compact-wheel"}listenForAmPmChanges(){this.core.options.clock.type!=="24h"&&(this.amPmHandler=()=>{let e=this.scrollHandler.getSelectedValue("hours"),t=this.scrollHandler.getSelectedValue("minutes");this.renderer.updateDisabledItems(),this.scrollToFirstAvailable("hours",e),this.scrollToFirstAvailable("minutes",t)},this.emitter.on("select:am",this.amPmHandler),this.emitter.on("select:pm",this.amPmHandler))}listenForClear(){this.clearHandler=()=>{this.deferInitialSync()},this.emitter.on("clear",this.clearHandler)}listenForHourChanges(){this.core.disabledTime?.value?.isInterval&&(this.hourChangeHandler=()=>{let t=this.scrollHandler.getSelectedValue("minutes");this.renderer.updateDisabledItems(),this.scrollToFirstAvailable("minutes",t)},this.emitter.on("select:hour",this.hourChangeHandler))}scrollToFirstAvailable(e,t){let r=this.renderer.getItems(e);if(!(!r||r.length===0)){if(t!==null){for(let n=0;n<r.length;n++)if(r[n].getAttribute("data-value")===t&&!r[n].classList.contains("is-disabled")){this.scrollHandler.scrollToValue(e,t);return}}for(let n=0;n<r.length;n++)if(!r[n].classList.contains("is-disabled")){let i=r[n].getAttribute("data-value");if(i!==null){this.scrollHandler.scrollToValue(e,i);return}}}}};var Ce={name:"wheel",factory:(m,e)=>new p(m,e)};export{p as WheelManager,Ce as WheelPlugin};
1
+ var d=()=>typeof document<"u";var b=(a="")=>{let e=a.replace(/(AM|PM|am|pm)/,i=>` ${i}`),t=new Date(`September 20, 2000 ${e}`),r=t.getHours().toString().padStart(2,"0"),n=t.getMinutes().toString().padStart(2,"0");return`${r}:${n}`},C=a=>{let[e,t]=a.split(":");return`${e.padStart(2,"0")}:${t.padStart(2,"0")}`};var A=(a,e,t,r,n)=>{if(!a||!e||!r||!n)return!1;let i=n==="12h"?b(`${a}:${e} ${t||""}`.trim()):C(`${a}:${e}`),s=Array.isArray(r)?r:[r];for(let l of s){let[o,u]=l.trim().split("-"),m,c;if(n==="12h"){let h=o.trim(),v=u.trim();if(!/\s?(AM|PM|am|pm)\s?$/.test(h)||!/\s?(AM|PM|am|pm)\s?$/.test(v))continue;m=b(h),c=b(v)}else{let h=o.trim(),v=u.trim();if(/\s?(AM|PM|am|pm)\s?/.test(h)||/\s?(AM|PM|am|pm)\s?/.test(v))continue;m=C(h),c=C(v)}if(i>=m&&i<=c)return!1}return!0};var R={hours:".tp-ui-wheel-hours",minutes:".tp-ui-wheel-minutes",ampm:".tp-ui-wheel-ampm"},S=class{core;columns=new Map;cachedItemHeight=null;cachedItems=new Map;removedItems=new Map;constructor(e){this.core=e}init(){if(this.cachedItems.clear(),this.cachedItemHeight=null,this.restoreRemovedItems(),!d())return;let e=this.core.getModalElement();if(!e)return;["hours","minutes","ampm"].forEach(r=>{let n=e.querySelector(R[r]);n&&this.columns.set(r,n)}),this.updateDisabledItems()}updateDisabledItems(){let e=this.core.disabledTime;if(!e?.value)return;let t=this.core.options.wheel.hideDisabled===!0;t&&(this.restoreRemovedItems(),this.invalidateItemCache()),e.value.isInterval&&e.value.intervals?this.updateDisabledByInterval(e.value,t):this.updateDisabledByFlatLists(e.value,t),t&&this.invalidateItemCache()}updateDisabledByFlatLists(e,t){let r=this.columns.get("hours"),n=this.columns.get("minutes");if(r&&e.hours){let i=new Set(e.hours.map(String));this.toggleDisabledOnItems(r,i,t)}if(n&&e.minutes){let i=new Set(e.minutes.map(String));this.toggleDisabledOnItems(n,i,t)}}updateDisabledByInterval(e,t){let r=e.clockType??"12h",n=e.intervals,i=this.getCurrentAmPm(),s=this.getCurrentHour(),l=this.columns.get("hours");l&&l.querySelectorAll(".tp-ui-wheel-item").forEach(m=>{let c=m.getAttribute("data-value");if(c===null)return;let h=this.isHourFullyDisabled(c,i,n,r);m.classList.toggle("is-disabled",h),t&&h&&this.removeItemFromDOM(m,l)});let o=this.columns.get("minutes");o&&o.querySelectorAll(".tp-ui-wheel-item").forEach(m=>{let c=m.getAttribute("data-value");if(c===null)return;let h=A(s,c,i,n,r);m.classList.toggle("is-disabled",!h),t&&!h&&this.removeItemFromDOM(m,o)})}isHourFullyDisabled(e,t,r,n){if(!r)return!1;for(let i=0;i<60;i++){let s=i.toString().padStart(2,"0");if(A(e,s,t,r,n))return!1}return!0}toggleDisabledOnItems(e,t,r){e.querySelectorAll(".tp-ui-wheel-item").forEach(i=>{let s=i.getAttribute("data-value");if(s!==null){let l=String(parseInt(s,10)),o=t.has(l)||t.has(s);i.classList.toggle("is-disabled",o),r&&o&&this.removeItemFromDOM(i,e)}})}getCurrentAmPm(){return this.core.getAM()?.classList.contains("active")?"AM":"PM"}getCurrentHour(){return this.core.getHour()?.value?.padStart(2,"0")??"12"}getColumnElement(e){return this.columns.get(e)??null}getItems(e){let t=this.cachedItems.get(e);if(t)return t;let r=this.columns.get(e);if(!r)return null;let n=r.querySelectorAll(".tp-ui-wheel-item");return this.cachedItems.set(e,n),n}invalidateItemCache(){this.cachedItems.clear(),this.cachedItemHeight=null}getItemCount(e){let t=this.getItems(e);return t?t.length:0}getItemHeight(){if(this.cachedItemHeight!==null)return this.cachedItemHeight;let e=this.columns.get("hours");if(!e)return 0;let t=e.querySelector(".tp-ui-wheel-item");if(!t)return 0;let r=t.getBoundingClientRect().height;return r>0&&(this.cachedItemHeight=r),r}removeItemFromDOM(e,t){let r=this.getColumnTypeByElement(t);if(!r)return;let n=this.removedItems.get(r)??[];n.push(e),this.removedItems.set(r,n),e.remove()}restoreRemovedItems(){["hours","minutes","ampm"].forEach(t=>{let r=this.removedItems.get(t);if(!r||r.length===0)return;let n=this.columns.get(t);if(!n)return;let i=Array.from(n.querySelectorAll(".tp-ui-wheel-item"));r.forEach(s=>{s.classList.remove("is-disabled");let l=parseInt(s.getAttribute("data-value")??"0",10),o=i.find(u=>parseInt(u.getAttribute("data-value")??"0",10)>l);if(o)n.insertBefore(s,o);else{let m=i[i.length-1]?.nextSibling??null;m?n.insertBefore(s,m):n.appendChild(s)}i.push(s),i.sort((u,m)=>parseInt(u.getAttribute("data-value")??"0",10)-parseInt(m.getAttribute("data-value")??"0",10))})}),this.removedItems.clear()}getColumnTypeByElement(e){for(let[t,r]of this.columns)if(r===e)return t;return null}destroy(){this.restoreRemovedItems(),this.columns.clear(),this.cachedItems.clear(),this.cachedItemHeight=null,this.removedItems.clear()}};var y=class{renderer;core;dragHandler=null;onScrollEnd=null;onScrollStart=null;constructor(e,t){this.renderer=e,this.core=t}setDragHandler(e){this.dragHandler=e}init(){this.dragHandler&&(this.dragHandler.setSnapCallback(e=>{this.onColumnSnapped(e)}),this.dragHandler.setScrollStartCallback(e=>{this.emitScrollStart(e)}))}setScrollEndCallback(e){this.onScrollEnd=e}setScrollStartCallback(e){this.onScrollStart=e}scrollToValue(e,t){if(!this.renderer.getColumnElement(e)||!this.dragHandler)return;let n=this.renderer.getItemHeight();if(n<=0)return;let i=this.renderer.getItems(e);if(!i)return;let s=-1;for(let o=0;o<i.length;o++)if(i[o].getAttribute("data-value")===t){s=o;break}if(s<0)return;let l=s*n;this.dragHandler.setScrollOffset(e,l),this.applyVisualClassesForIndex(e,s)}getSelectedValue(e){if(!this.dragHandler)return null;let t=this.renderer.getItemHeight();if(t<=0)return null;let r=this.dragHandler.getScrollOffset(e),n=Math.round(r/t),i=this.renderer.getItems(e);return!i||n<0||n>=i.length?null:i[n].getAttribute("data-value")}getCurrentSelection(){let e=this.getSelectedValue("hours")??"12",t=this.getSelectedValue("minutes")??"00",r=null;return this.core.options.clock.type!=="24h"&&(r=this.getSelectedValue("ampm"),r===null&&(r=this.core.getAM()?.classList.contains("active")?"AM":"PM")),{hour:e,minute:t,ampm:r}}destroy(){this.onScrollEnd=null,this.onScrollStart=null,this.dragHandler=null}onColumnSnapped(e){let t=this.getSelectedValue(e);if(t!==null){if(this.isValueDisabled(e,t)){this.scrollToNextValid(e,t);return}this.onScrollEnd&&this.onScrollEnd(e,t)}}emitScrollStart(e){this.onScrollStart&&this.onScrollStart(e)}updateVisualClasses(e){if(!this.dragHandler)return;let t=this.renderer.getItemHeight();if(t<=0)return;let r=this.dragHandler.getScrollOffset(e),n=Math.round(r/t);this.applyVisualClassesForIndex(e,n)}applyVisualClassesForIndex(e,t){let r=this.renderer.getItems(e);if(!r)return;r.forEach((i,s)=>{let l=Math.abs(s-t),o=l===0;i.classList.toggle("is-center",o),i.classList.toggle("is-near",l===1),i.setAttribute("aria-selected",String(o))});let n=this.renderer.getColumnElement(e);if(n){let i=r[t];if(i){let l=i.getAttribute("id");l&&n.setAttribute("aria-activedescendant",l)}let s=n.parentElement;s&&(s.classList.toggle("at-start",t<=0),s.classList.toggle("at-end",t>=r.length-1))}}isValueDisabled(e,t){let r=this.renderer.getItems(e);if(!r)return!1;for(let n=0;n<r.length;n++)if(r[n].getAttribute("data-value")===t)return r[n].classList.contains("is-disabled");return!1}scrollToNextValid(e,t){let r=this.renderer.getItems(e);if(!r)return;let n=-1;for(let s=0;s<r.length;s++)if(r[s].getAttribute("data-value")===t){n=s;break}if(n<0)return;let i=r.length;for(let s=1;s<=i;s++){let l=n+s,o=n-s;if(l<r.length&&!r[l].classList.contains("is-disabled")){let u=r[l].getAttribute("data-value");if(u!==null){this.scrollToValue(e,u),this.onScrollEnd&&this.onScrollEnd(e,u);return}}if(o>=0&&!r[o].classList.contains("is-disabled")){let u=r[o].getAttribute("data-value");if(u!==null){this.scrollToValue(e,u),this.onScrollEnd&&this.onScrollEnd(e,u);return}}}}};var H=(a,e)=>{if(!a)return;let t=a.querySelector(".timepicker-announcer");t&&(t.textContent="",setTimeout(()=>{t.textContent=e},100))};var L="ArrowUp",_="ArrowDown",N="12",k="00",$="AM",U=400,T=class{emitter;scrollHandler;core;keydownListeners=new Map;clearHandler=null;previousValues=new Map;scrollStartHandler=null;commitOnScrollTimer=null;constructor(e,t,r){this.emitter=e,this.scrollHandler=t,this.core=r}init(){this.removeKeyboardListeners(),this.removeClearListener(),this.previousValues.clear(),this.captureCurrentValues(),this.scrollHandler.setScrollEndCallback((e,t)=>{this.handleColumnScrollEnd(e,t)}),this.scrollStartHandler=e=>{this.emitter.emit("wheel:scroll:start",{column:e})},this.scrollHandler.setScrollStartCallback(this.scrollStartHandler),this.attachKeyboardListeners(),this.attachClearListener()}destroy(){this.scrollHandler.setScrollEndCallback(()=>{}),this.scrollHandler.setScrollStartCallback(null),this.removeKeyboardListeners(),this.removeClearListener(),this.previousValues.clear(),this.scrollStartHandler=null,this.commitOnScrollTimer!==null&&(clearTimeout(this.commitOnScrollTimer),this.commitOnScrollTimer=null)}handleColumnScrollEnd(e,t){let r=this.scrollHandler.getCurrentSelection(),n=this.previousValues.get(e)??null;this.emitter.emit("wheel:scroll:end",{column:e,value:t,previousValue:n}),this.previousValues.set(e,t);let i=this.core.getModalElement();switch(e){case"hours":this.syncHourInput(t),this.emitter.emit("select:hour",{hour:t}),H(i,`Hour: ${t}`);break;case"minutes":this.syncMinuteInput(t),this.emitter.emit("select:minute",{minutes:t}),H(i,`Minutes: ${t}`);break;case"ampm":this.syncAmPmState(t),t==="AM"?this.emitter.emit("select:am",{}):this.emitter.emit("select:pm",{}),H(i,`${t} selected`);break}this.emitter.emit("update",{hour:r.hour,minutes:r.minute,type:r.ampm??void 0}),this.core.options.wheel?.commitOnScroll===!0&&this.scheduleCommitOnScroll()}scheduleCommitOnScroll(){this.commitOnScrollTimer!==null&&clearTimeout(this.commitOnScrollTimer),this.commitOnScrollTimer=setTimeout(()=>{this.commitOnScrollTimer=null;let e=this.scrollHandler.getCurrentSelection(),t=this.core.getInput();if(t){let r=e.ampm?` ${e.ampm}`:"";t.value=`${e.hour}:${e.minute}${r}`}this.emitter.emit("confirm",{hour:e.hour,minutes:e.minute,type:e.ampm??void 0,autoCommit:!0})},U)}syncHourInput(e){let t=this.core.getHour();t&&(t.value=e,t.setAttribute("aria-valuenow",e)),this.core.setDegreesHours(parseInt(e,10)*30)}syncMinuteInput(e){let t=this.core.getMinutes();t&&(t.value=e,t.setAttribute("aria-valuenow",e)),this.core.setDegreesMinutes(parseInt(e,10)*6)}syncAmPmState(e){let t=this.core.getAM(),r=this.core.getPM();t&&r&&(t.classList.toggle("active",e==="AM"),r.classList.toggle("active",e==="PM"))}attachKeyboardListeners(){if(!d())return;["hours","minutes","ampm"].forEach(t=>{let r=this.scrollHandler.getCurrentSelection()?this.getColumnFromRenderer(t):null;if(!r)return;let n=i=>{(i.key===L||i.key===_)&&(i.preventDefault(),this.handleArrowKey(t,i.key))};r.addEventListener("keydown",n),this.keydownListeners.set(t,n)})}getColumnFromRenderer(e){if(!d())return null;let t=this.core.getModalElement();if(!t)return null;let r={hours:".tp-ui-wheel-hours",minutes:".tp-ui-wheel-minutes",ampm:".tp-ui-wheel-ampm"};return t.querySelector(r[e])}handleArrowKey(e,t){let r=this.scrollHandler.getSelectedValue(e);if(r===null)return;let n=this.getColumnFromRenderer(e);if(!n)return;let i=n.querySelectorAll(".tp-ui-wheel-item"),s=-1;for(let m=0;m<i.length;m++)if(i[m].getAttribute("data-value")===r){s=m;break}if(s<0)return;let o=s+(t===L?-1:1);if(o<0||o>=i.length)return;let u=i[o].getAttribute("data-value");u!==null&&(this.scrollHandler.scrollToValue(e,u),this.handleColumnScrollEnd(e,u))}removeKeyboardListeners(){this.keydownListeners.forEach((e,t)=>{let r=this.getColumnFromRenderer(t);r&&r.removeEventListener("keydown",e)}),this.keydownListeners.clear()}attachClearListener(){this.clearHandler=()=>{this.scrollHandler.scrollToValue("hours",N),this.scrollHandler.scrollToValue("minutes",k),this.scrollHandler.scrollToValue("ampm",$)},this.emitter.on("clear",this.clearHandler)}removeClearListener(){this.clearHandler&&(this.emitter.off("clear",this.clearHandler),this.clearHandler=null)}captureCurrentValues(){let e=this.scrollHandler.getCurrentSelection();this.previousValues.set("hours",e.hour),this.previousValues.set("minutes",e.minute),e.ampm!==null&&this.previousValues.set("ampm",e.ampm)}};var M=class{element;columnType;_lastY=0;_isDragging=!1;_pointerId=-1;_momentumRaf=null;velocitySamples=[];snapTimeout=null;snapAnimationRaf=null;abortController=null;constructor(e,t){this.element=e,this.columnType=t,this.abortController=new AbortController}get lastY(){return this._lastY}get isDragging(){return this._isDragging}get pointerId(){return this._pointerId}get signal(){return this.abortController?this.abortController.signal:new AbortController().signal}startDrag(e,t){this.stopMomentum(),this._isDragging=!0,this._lastY=e,this._pointerId=t,this.velocitySamples=[{time:performance.now(),y:e}]}updateLastY(e){this._lastY=e}addVelocitySample(e){this.velocitySamples.push({time:performance.now(),y:e}),this.velocitySamples.length>5&&this.velocitySamples.shift()}computeReleaseVelocity(){let e=performance.now(),t=this.velocitySamples.filter(s=>e-s.time<100);if(t.length<2)return 0;let r=t[0],n=t[t.length-1],i=n.time-r.time;return i<=0?0:(r.y-n.y)/i}endDrag(){this._isDragging=!1,this._pointerId=-1,this.velocitySamples=[]}setMomentumRaf(e){this._momentumRaf=e}hasMomentum(){return this._momentumRaf!==null}stopMomentum(){this._momentumRaf!==null&&(cancelAnimationFrame(this._momentumRaf),this._momentumRaf=null),this.snapAnimationRaf!==null&&(cancelAnimationFrame(this.snapAnimationRaf),this.snapAnimationRaf=null)}animateToOffset(e,t){this.stopMomentum();let r=this.element.scrollTop,n=e-r,i=performance.now();if(Math.abs(n)<.5){this.element.scrollTop=e,t();return}let s=()=>{let l=performance.now()-i,o=Math.min(l/180,1),u=1-Math.pow(1-o,3);this.element.scrollTop=r+n*u,o<1?this.snapAnimationRaf=requestAnimationFrame(s):(this.element.scrollTop=e,this.snapAnimationRaf=null,t())};this.snapAnimationRaf=requestAnimationFrame(s)}scheduleSnapAfterWheel(e){this.snapTimeout!==null&&clearTimeout(this.snapTimeout),this.snapTimeout=setTimeout(()=>{this.snapTimeout=null,e()},120)}destroy(){this.stopMomentum(),this.snapTimeout!==null&&(clearTimeout(this.snapTimeout),this.snapTimeout=null),this.abortController&&(this.abortController.abort(),this.abortController=null)}};var F=.92,x=.3,W=8,q=30,E=class{renderer;columnStates=new Map;onSnap=null;onVisualUpdate=null;onScrollStart=null;activeDragColumn=null;visualUpdateRaf=null;pendingVisualColumns=new Set;wheelAccumulator=new Map;pointerMoveHandler;pointerUpHandler;documentListenerController=null;constructor(e){this.renderer=e,this.pointerMoveHandler=t=>this.handlePointerMove(t),this.pointerUpHandler=t=>this.handlePointerUp(t)}setSnapCallback(e){this.onSnap=e}setVisualUpdateCallback(e){this.onVisualUpdate=e}setScrollStartCallback(e){this.onScrollStart=e}init(){if(this.cleanupPreviousInit(),!d())return;["hours","minutes","ampm"].forEach(t=>{let r=this.renderer.getColumnElement(t);if(!r)return;let n=new M(r,t);this.columnStates.set(t,n),r.addEventListener("pointerdown",i=>{this.handlePointerDown(t,i)},{signal:n.signal}),r.addEventListener("wheel",i=>{this.handleWheel(t,i)},{passive:!1,signal:n.signal})}),this.documentListenerController=new AbortController,document.addEventListener("pointermove",this.pointerMoveHandler,{signal:this.documentListenerController.signal}),document.addEventListener("pointerup",this.pointerUpHandler,{signal:this.documentListenerController.signal})}getScrollOffset(e){let t=this.renderer.getColumnElement(e);return t?t.scrollTop:0}setScrollOffset(e,t){let r=this.columnStates.get(e);r&&r.stopMomentum();let n=this.renderer.getColumnElement(e);n&&(n.scrollTop=t)}getMaxOffset(e){let t=this.renderer.getItemHeight();if(t<=0)return 0;let r=this.renderer.getItemCount(e);return Math.max(0,(r-1)*t)}destroy(){this.cleanupPreviousInit(),this.onSnap=null,this.onVisualUpdate=null,this.onScrollStart=null}cleanupPreviousInit(){this.visualUpdateRaf!==null&&(cancelAnimationFrame(this.visualUpdateRaf),this.visualUpdateRaf=null),this.pendingVisualColumns.clear(),this.wheelAccumulator.clear(),this.activeDragColumn=null,this.documentListenerController&&(this.documentListenerController.abort(),this.documentListenerController=null),this.columnStates.forEach(e=>e.destroy()),this.columnStates.clear()}handlePointerDown(e,t){let r=this.columnStates.get(e);r&&(t.preventDefault(),this.activeDragColumn=e,r.startDrag(t.clientY,t.pointerId),r.element.classList.add("is-dragging"),r.element.setPointerCapture(t.pointerId),this.onScrollStart&&this.onScrollStart(e))}handlePointerMove(e){if(this.activeDragColumn===null)return;let t=this.columnStates.get(this.activeDragColumn);if(!t||!t.isDragging||t.pointerId!==e.pointerId)return;let r=t.lastY-e.clientY;t.addVelocitySample(e.clientY);let n=this.getMaxOffset(t.columnType),i=f(t.element.scrollTop+r,0,n);t.element.scrollTop=i,t.updateLastY(e.clientY),this.scheduleVisualUpdate(t.columnType)}handlePointerUp(e){if(this.activeDragColumn===null)return;let t=this.columnStates.get(this.activeDragColumn);if(!t||!t.isDragging||t.pointerId!==e.pointerId)return;t.element.classList.remove("is-dragging"),t.element.releasePointerCapture(e.pointerId),this.activeDragColumn=null;let r=t.computeReleaseVelocity();t.endDrag(),Math.abs(r)>x?this.startMomentum(t,r):this.snapColumn(t.columnType)}handleWheel(e,t){t.preventDefault();let r=this.columnStates.get(e);if(!r)return;let n=r.hasMomentum();r.stopMomentum(),!n&&this.onScrollStart&&this.onScrollStart(e);let i=this.renderer.getItemHeight();if(i<=0)return;let s=(this.wheelAccumulator.get(e)??0)+t.deltaY;if(this.wheelAccumulator.set(e,s),Math.abs(s)>=q){let l=s>0?1:-1;this.wheelAccumulator.set(e,0);let o=this.getMaxOffset(e),m=Math.round(r.element.scrollTop/i)+l,c=f(m*i,0,o);r.animateToOffset(c,()=>{this.emitVisualUpdate(e),this.onSnap&&this.onSnap(e)}),this.scheduleVisualUpdate(e)}}startMomentum(e,t){let r=f(t,-W,W),n=performance.now(),i=this.getMaxOffset(e.columnType),s=()=>{let l=performance.now(),o=l-n;n=l,r*=F;let u=r*o,m=e.element.scrollTop,c=f(m+u,0,i);if(e.element.scrollTop=c,this.emitVisualUpdate(e.columnType),Math.abs(r)<x||c<=0||c>=i){e.setMomentumRaf(null),this.snapColumn(e.columnType);return}e.setMomentumRaf(requestAnimationFrame(s))};e.setMomentumRaf(requestAnimationFrame(s))}snapColumn(e){let t=this.columnStates.get(e);if(!t)return;let r=this.renderer.getItemHeight();if(r<=0)return;let n=this.getMaxOffset(e),i=Math.round(t.element.scrollTop/r),s=f(i*r,0,n);t.animateToOffset(s,()=>{this.emitVisualUpdate(e),this.onSnap&&this.onSnap(e)})}scheduleVisualUpdate(e){this.pendingVisualColumns.add(e),this.visualUpdateRaf===null&&(this.visualUpdateRaf=requestAnimationFrame(()=>{this.visualUpdateRaf=null,this.pendingVisualColumns.forEach(t=>{this.emitVisualUpdate(t)}),this.pendingVisualColumns.clear()}))}emitVisualUpdate(e){this.onVisualUpdate&&this.onVisualUpdate(e)}};function f(a,e,t){return Math.max(e,Math.min(t,a))}var I=4,Y=260,B=328,w=4,z=16,g=class{core;emitter;resizeHandler=null;scrollHandler=null;clickOutsideHandler=null;rafId=null;isAttached=!1;constructor(e,t){this.core=e,this.emitter=t}isPopoverMode(){return this.core.options.ui.mode==="compact-wheel"&&!!this.core.options.wheel?.placement}attach(){if(!this.isPopoverMode()||!d()||this.isAttached)return;let e=this.core.getModalElement();e&&(e.classList.add("tp-ui-popover"),this.positionPopover(),this.addListeners(),this.isAttached=!0)}detach(){this.isAttached&&(this.removeListeners(),this.isAttached=!1)}destroy(){this.detach()}positionPopover(){let e=this.core.getInput(),t=this.core.getModalElement();if(!e||!t)return;let r=e.getBoundingClientRect(),n=this.core.options.wheel?.placement??"auto",i=Math.min(Math.max(r.width,Y),B);t.style.width=`${i}px`;let s=t.offsetHeight,l=this.resolvePlacement(n,r,s),o=this.computeTop(l,r,s),u=this.clampHorizontal(r.left,i);t.style.top=`${o}px`,t.style.left=`${u}px`,t.setAttribute("data-popover-placement",l)}resolvePlacement(e,t,r){if(e==="top")return"top";if(e==="bottom")return"bottom";let i=document.documentElement.clientHeight-t.bottom,s=t.top,l=r+I+z;return i>=l?"bottom":s>=l?"top":i>=s?"bottom":"top"}computeTop(e,t,r){return e==="top"?t.top-r-I:t.bottom+I}clampHorizontal(e,t){let r=document.documentElement.clientWidth,n=e;return n+t>r&&(n=r-t-w),n<w&&(n=w),n}addListeners(){if(!d())return;this.resizeHandler=()=>{this.scheduleReposition()},this.scrollHandler=()=>{this.scheduleReposition()},this.clickOutsideHandler=t=>{this.handleClickOutside(t)},window.addEventListener("resize",this.resizeHandler,{passive:!0}),window.addEventListener("scroll",this.scrollHandler,{passive:!0,capture:!0});let e=this.clickOutsideHandler;setTimeout(()=>{e===this.clickOutsideHandler&&document.addEventListener("pointerdown",e)},0)}removeListeners(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.resizeHandler&&(window.removeEventListener("resize",this.resizeHandler),this.resizeHandler=null),this.scrollHandler&&(window.removeEventListener("scroll",this.scrollHandler,!0),this.scrollHandler=null),this.clickOutsideHandler&&(document.removeEventListener("pointerdown",this.clickOutsideHandler),this.clickOutsideHandler=null)}scheduleReposition(){this.rafId===null&&(this.rafId=requestAnimationFrame(()=>{this.rafId=null,this.positionPopover()}))}handleClickOutside(e){if(this.core.options.wheel?.ignoreOutsideClick)return;let t=this.core.getModalElement(),r=this.core.getInput(),n=e.target;if(!t||!n)return;let i=t.contains(n),s=r?r.contains(n):!1;!i&&!s&&this.emitter.emit("cancel",{})}};var p=class{renderer;dragHandler;scrollHandler;eventHandler;core;emitter;popover;amPmHandler=null;hourChangeHandler=null;clearHandler=null;constructor(e,t){this.core=e,this.emitter=t,this.renderer=new S(e),this.dragHandler=new E(this.renderer),this.scrollHandler=new y(this.renderer,e),this.scrollHandler.setDragHandler(this.dragHandler),this.eventHandler=new T(t,this.scrollHandler,e),this.popover=new g(e,t)}init(){this.renderer.init(),this.dragHandler.init(),this.scrollHandler.init(),this.eventHandler.init(),this.dragHandler.setVisualUpdateCallback(e=>{this.scrollHandler.updateVisualClasses(e)}),this.listenForAmPmChanges(),this.listenForHourChanges(),this.listenForClear(),this.deferInitialSync()}scrollToValue(e,t,r){this.scrollHandler.scrollToValue("hours",e.padStart(2,"0")),this.scrollHandler.scrollToValue("minutes",t.padStart(2,"0")),r&&this.isCompactWheelMode()&&this.scrollHandler.scrollToValue("ampm",r.toUpperCase())}updateDisabledItems(){this.renderer.updateDisabledItems()}attachPopover(){this.popover.attach()}detachPopover(){this.popover.detach()}destroy(){this.popover.destroy(),this.amPmHandler&&(this.emitter.off("select:am",this.amPmHandler),this.emitter.off("select:pm",this.amPmHandler),this.amPmHandler=null),this.hourChangeHandler&&(this.emitter.off("select:hour",this.hourChangeHandler),this.hourChangeHandler=null),this.clearHandler&&(this.emitter.off("clear",this.clearHandler),this.clearHandler=null),this.eventHandler.destroy(),this.scrollHandler.destroy(),this.dragHandler.destroy(),this.renderer.destroy()}deferInitialSync(){typeof requestAnimationFrame<"u"?requestAnimationFrame(()=>{this.syncInitialValues()}):this.syncInitialValues()}syncInitialValues(){let e=this.core.getHour(),t=this.core.getMinutes(),r=this.isCompactWheelMode(),n=e?.value??"",i=t?.value??"";if(r&&(!n||!i)){let s=this.parseMainInputValue();n||(n=s.hour),i||(i=s.minutes)}if(n&&this.scrollHandler.scrollToValue("hours",n.padStart(2,"0")),i&&this.scrollHandler.scrollToValue("minutes",i.padStart(2,"0")),r){let l=this.core.getAM()?.classList.contains("active")?"AM":"PM";this.scrollHandler.scrollToValue("ampm",l)}}parseMainInputValue(){let e=this.core.getInput();if(!e?.value)return{hour:"",minutes:""};let t=e.value.trim(),[r,n]=t.split(" "),[i="",s=""]=(r??"").split(":"),l=i.replace(/\D/g,"").padStart(2,"0"),o=s.replace(/\D/g,"").padStart(2,"0");return{hour:l,minutes:o,type:this.core.options.clock.type==="12h"?n:void 0}}isCompactWheelMode(){return this.core.options.ui.mode==="compact-wheel"}listenForAmPmChanges(){this.core.options.clock.type!=="24h"&&(this.amPmHandler=()=>{let e=this.scrollHandler.getSelectedValue("hours"),t=this.scrollHandler.getSelectedValue("minutes");this.renderer.updateDisabledItems(),this.scrollToFirstAvailable("hours",e),this.scrollToFirstAvailable("minutes",t)},this.emitter.on("select:am",this.amPmHandler),this.emitter.on("select:pm",this.amPmHandler))}listenForClear(){this.clearHandler=()=>{this.deferInitialSync()},this.emitter.on("clear",this.clearHandler)}listenForHourChanges(){this.core.disabledTime?.value?.isInterval&&(this.hourChangeHandler=()=>{let t=this.scrollHandler.getSelectedValue("minutes");this.renderer.updateDisabledItems(),this.scrollToFirstAvailable("minutes",t)},this.emitter.on("select:hour",this.hourChangeHandler))}scrollToFirstAvailable(e,t){let r=this.renderer.getItems(e);if(!(!r||r.length===0)){if(t!==null){for(let n=0;n<r.length;n++)if(r[n].getAttribute("data-value")===t&&!r[n].classList.contains("is-disabled")){this.scrollHandler.scrollToValue(e,t);return}}for(let n=0;n<r.length;n++)if(!r[n].classList.contains("is-disabled")){let i=r[n].getAttribute("data-value");if(i!==null){this.scrollHandler.scrollToValue(e,i);return}}}}};var D=a=>String(a).padStart(2,"0"),V=()=>Array.from({length:2}).map(()=>'<div class="tp-ui-wheel-padding"></div>').join(""),X=(a,e,t)=>a.map(r=>`<div class="tp-ui-wheel-item" role="option" id="${t}-${r}" data-value="${r}" aria-label="${e} ${r}" aria-selected="false">${r}</div>`).join(""),P=(a,e,t,r,n)=>`<div class="tp-ui-wheel-column-wrapper at-start"><div class="tp-ui-wheel-column ${a}" role="listbox" aria-label="${e}" aria-activedescendant="" tabindex="0">${V()}${X(t,r,n)}${V()}</div></div>`,K=()=>Array.from({length:12},(a,e)=>D(e+1)),G=()=>Array.from({length:24},(a,e)=>D(e)),j=a=>Array.from({length:Math.ceil(60/a)},(e,t)=>D(t*a)),J=["AM","PM"],O=(a,e,t=!1,r="tp")=>{let n=a==="12h"?K():G(),i=j(e),s=P("tp-ui-wheel-hours","Hours",n,"Hour",`${r}-wh`),l='<div class="tp-ui-wheel-separator" aria-hidden="true">:</div>',o=P("tp-ui-wheel-minutes","Minutes",i,"Minute",`${r}-wm`),u=t&&a==="12h"?P("tp-ui-wheel-ampm","Period",J,"Period",`${r}-wp`):"";return`<div class="tp-ui-wheel-container">${s}${l}${o}${u}<div class="tp-ui-wheel-highlight" aria-hidden="true"></div></div>`};var Le={name:"wheel",factory:(a,e)=>new p(a,e),templateProvider:(a,e)=>{let r=a.ui.mode==="compact-wheel"&&a.clock.type==="12h";return O(a.clock.type,a.clock.incrementMinutes??1,r,e)}};export{p as WheelManager,Le as WheelPlugin};