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.
- package/README.md +117 -805
- package/dist/index.cjs +2 -2
- package/dist/index.d.ts +7 -1
- package/dist/index.js +2 -2
- package/dist/index.umd.js +1 -1
- package/dist/plugins/range.cjs +1 -1
- package/dist/plugins/range.js +1 -1
- package/dist/plugins/range.umd.js +1 -1
- package/dist/plugins/timezone.cjs +1 -1
- package/dist/plugins/timezone.js +1 -1
- package/dist/plugins/timezone.umd.js +1 -1
- package/dist/plugins/wheel.cjs +1 -1
- package/dist/plugins/wheel.js +1 -1
- package/dist/plugins/wheel.umd.js +1 -1
- package/package.json +1 -3
package/dist/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).TimepickerUI=t()}(this,function(){"use strict";const e=()=>"undefined"==typeof window,t=()=>"undefined"!=typeof document;class i{state;constructor(e,t,i,s){this.state={degreesHours:null,degreesMinutes:null,options:t,element:e,instanceId:i,isMobileView:!1,isTouchMouseMove:!1,disabledTime:null,cloned:null,isModalRemove:!0,isOpen:!1,isInitialized:!1,customId:s,eventHandlersRegistered:!1,isDestroyed:!1}}get degreesHours(){return this.state.degreesHours}get degreesMinutes(){return this.state.degreesMinutes}get options(){return this.state.options}get element(){return this.state.element}get instanceId(){return this.state.instanceId}get isMobileView(){return this.state.isMobileView}get isTouchMouseMove(){return this.state.isTouchMouseMove}get disabledTime(){return this.state.disabledTime}get cloned(){return this.state.cloned}get isModalRemove(){return this.state.isModalRemove}get isOpen(){return this.state.isOpen}get isInitialized(){return this.state.isInitialized}get customId(){return this.state.customId}get eventHandlersRegistered(){return this.state.eventHandlersRegistered}get isDestroyed(){return this.state.isDestroyed}setDegreesHours(e){this.state={...this.state,degreesHours:e}}setDegreesMinutes(e){this.state={...this.state,degreesMinutes:e}}setOptions(e){this.state={...this.state,options:e}}setIsMobileView(e){this.state={...this.state,isMobileView:e}}setIsTouchMouseMove(e){this.state={...this.state,isTouchMouseMove:e}}setDisabledTime(e){this.state={...this.state,disabledTime:e}}setCloned(e){this.state={...this.state,cloned:e}}setIsModalRemove(e){this.state={...this.state,isModalRemove:e}}setIsOpen(e){this.state={...this.state,isOpen:e}}setIsInitialized(e){this.state={...this.state,isInitialized:e}}setEventHandlersRegistered(e){this.state={...this.state,eventHandlersRegistered:e}}setIsDestroyed(e){this.state={...this.state,isDestroyed:e}}updateOptions(e){this.state={...this.state,options:{...this.state.options,clock:{...this.state.options.clock,...e.clock||{}},ui:{...this.state.options.ui,...e.ui||{}},labels:{...this.state.options.labels,...e.labels||{}},behavior:{...this.state.options.behavior,...e.behavior||{}},callbacks:{...this.state.options.callbacks,...e.callbacks||{}}}}}reset(){this.state={...this.state,degreesHours:null,degreesMinutes:null,isTouchMouseMove:!1,disabledTime:null,cloned:null,isModalRemove:!0,isOpen:!1,isInitialized:!1,isDestroyed:!0,eventHandlersRegistered:!1}}getModalElement(){return!1===t()?null:document.querySelector(`[data-owner-id="${this.state.instanceId}"]`)}getInput(){return this.state.element?.querySelector("input")}getClockFace(){const e=this.getModalElement();return e?this.state.isMobileView?e.querySelector(".tp-ui-clock-face.mobile"):e.querySelector(".tp-ui-clock-face:not(.mobile)"):null}getClockHand(){const e=this.getModalElement();return e?this.state.isMobileView?e.querySelector(".tp-ui-mobile-clock-wrapper .tp-ui-clock-hand"):e.querySelector(".tp-ui-clock-hand:not(.mobile)"):null}getCircle(){const e=this.getModalElement();return e?this.state.isMobileView?e.querySelector(".tp-ui-mobile-clock-wrapper .tp-ui-circle-hand"):e.querySelector(".tp-ui-circle-hand:not(.mobile)"):null}getTipsWrapper(){const e=this.getModalElement();return e?this.state.isMobileView?e.querySelector(".tp-ui-mobile-clock-wrapper .tp-ui-tips-wrapper"):e.querySelector(".tp-ui-tips-wrapper:not(.mobile)"):null}getTipsWrapperFor24h(){const e=this.getModalElement();return e?this.state.isMobileView?e.querySelector(".tp-ui-mobile-clock-wrapper .tp-ui-tips-wrapper-24h"):e.querySelector(".tp-ui-tips-wrapper-24h:not(.mobile)"):null}getMinutes(){const e=this.getModalElement();return e?.querySelector(".tp-ui-minutes")||null}getHour(){const e=this.getModalElement();return e?.querySelector(".tp-ui-hour")||null}getAM(){const e=this.getModalElement();return e?.querySelector(".tp-ui-am")||null}getPM(){const e=this.getModalElement();return e?.querySelector(".tp-ui-pm")||null}getHourText(){const e=this.getModalElement();return e?.querySelector(".tp-ui-hour-text")||null}getMinutesText(){const e=this.getModalElement();return e?.querySelector(".tp-ui-minute-text")||null}getHeader(){const e=this.getModalElement();return e?.querySelector(".tp-ui-header")||null}getInputWrappers(){const e=this.getModalElement();return e?.querySelectorAll(".tp-ui-input-wrapper")||null}getDots(){const e=this.getModalElement();return e?.querySelector(".tp-ui-dots")||null}getMinutesTips(){const e=this.getModalElement();return e?.querySelector(".tp-ui-minutes-time")||null}getHourTips(){const e=this.getModalElement();return e?.querySelector(".tp-ui-hour-time-12")||null}getAllValueTips(){const e=this.getModalElement();return e?[...e.querySelectorAll(".tp-ui-value-tips"),...e.querySelectorAll(".tp-ui-value-tips-24h")]:[]}getOpenElementData(){const e=this.state.element?.querySelectorAll("[data-open]");if(e?.length>0){const t=[];return e.forEach(({dataset:e})=>t.push(e.open??"")),[...new Set(t)]}return null}getOpenElement(){const e=this.getInput(),t=this.getOpenElementData();return null===t?(e?.setAttribute("data-open","tp-ui-input"),[e]):t.map(e=>this.state.element?.querySelectorAll(`[data-open='${e}']`))[0]??""}getCancelButton(){const e=this.getModalElement();return e?.querySelector(".tp-ui-cancel-btn")||null}getOkButton(){const e=this.getModalElement();return e?.querySelector(".tp-ui-ok-btn")||null}getActiveTypeMode(){const e=this.getModalElement();return e?.querySelector(".tp-ui-type-mode.active")||null}getKeyboardClockIcon(){const e=this.getModalElement();return e?.querySelector(".tp-ui-keyboard-icon-wrapper")||null}getFooter(){const e=this.getModalElement();return e?.querySelector(".tp-ui-footer")||null}getWrapper(){const e=this.getModalElement();return e?.querySelector(".tp-ui-wrapper")||null}}const s=300,r=150,o=400,n=300,a=600,l=401,c=450,u=150,h=400;class d{core;emitter;timeouts=[];constructor(e,t){this.core=e,this.emitter=t,this.setupEventListeners()}setupEventListeners(){this.emitter.on("animation:clock",()=>{this.handleAnimationSwitchTipsMode()})}runWithAnimation(e,t=r){if(this.core.options.ui.animation){const i=setTimeout(e,t);this.timeouts.push(i)}else e()}clearAllTimeouts(){this.timeouts.forEach(clearTimeout),this.timeouts=[]}setAnimationToOpen(){this.clearAllTimeouts();const e=this.core.getModalElement();e?.classList.add("opacity"),this.runWithAnimation(()=>{this.core.getModalElement()?.classList.add("show")})}removeAnimationToClose(){this.clearAllTimeouts();this.core.getModalElement()&&this.runWithAnimation(()=>{const e=this.core.getModalElement();e?.classList.remove("show"),e?.classList.remove("opacity")})}handleAnimationClock(){this.core.options.ui.animation&&this.runWithAnimation(()=>{const e=this.core.getClockFace();e?.classList.add("tp-ui-clock-animation");const t=setTimeout(()=>{this.core.getClockFace()?.classList.remove("tp-ui-clock-animation")},a);this.timeouts.push(t)})}handleAnimationSwitchTipsMode(){const e=this.core.getClockHand();if(!e)return;this.emitter.emit("animation:start",{}),e.classList.add("tp-ui-tips-animation");const t=setTimeout(()=>{this.core.getClockHand()?.classList.remove("tp-ui-tips-animation"),this.emitter.emit("animation:end",{})},l);this.timeouts.push(t)}destroy(){this.clearAllTimeouts()}}const m=(e,t)=>Array.from({length:Number(t)-Number(e)+1},(t,i)=>Number(e)+i),p=(e,t)=>Array.from({length:Number(t)-Number(e)+1},(e,i)=>Number(t)-i).reverse(),g=(e="")=>{const t=e.replace(/(AM|PM|am|pm)/,e=>` ${e}`),i=new Date(`September 20, 2000 ${t}`);return`${i.getHours().toString().padStart(2,"0")}:${i.getMinutes().toString().padStart(2,"0")}`},v=e=>{const[t,i]=e.split(":");return`${t.padStart(2,"0")}:${i.padStart(2,"0")}`},b=(e,t)=>{if(e.length<2)return!1;const i=e.map(e=>{const[i,s]=e.trim().split("-");let r,o;if("12h"===t){if(!/\s?(AM|PM|am|pm)\s?$/.test(i.trim())||!/\s?(AM|PM|am|pm)\s?$/.test(s.trim()))throw new Error(`Invalid 12h format: "${e}"`);r=g(i.trim()),o=g(s.trim())}else{if(/\s?(AM|PM|am|pm)\s?/.test(i.trim())||/\s?(AM|PM|am|pm)\s?/.test(s.trim()))throw new Error(`Invalid 24h format: "${e}"`);r=v(i.trim()),o=v(s.trim())}return{start:r,end:o,original:e}});for(let e=0;e<i.length;e++)for(let t=e+1;t<i.length;t++){const s=i[e],r=i[t];if(s.start<=r.end&&s.end>=r.start||r.start<=s.end&&r.end>=s.start)throw new Error(`Overlapping intervals: "${s.original}" and "${r.original}"`)}return!1};var y='<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M160-200q-33 0-56.5-23.5T80-280v-400q0-33 23.5-56.5T160-760h640q33 0 56.5 23.5T880-680v400q0 33-23.5 56.5T800-200H160Zm0-80h640v-400H160v400Zm160-40h320v-80H320v80ZM200-440h80v-80h-80v80Zm120 0h80v-80h-80v80Zm120 0h80v-80h-80v80Zm120 0h80v-80h-80v80Zm120 0h80v-80h-80v80ZM200-560h80v-80h-80v80Zm120 0h80v-80h-80v80Zm120 0h80v-80h-80v80Zm120 0h80v-80h-80v80Zm120 0h80v-80h-80v80ZM160-280v-400 400Z"/></svg>',f='<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 320q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Z"/></svg>';const T=e=>String(e).padStart(2,"0"),M=()=>Array.from({length:2}).map(()=>'<div class="tp-ui-wheel-padding"></div>').join(""),k=(e,t,i,s,r)=>`<div class="tp-ui-wheel-column-wrapper at-start"><div class="tp-ui-wheel-column ${e}" role="listbox" aria-label="${t}" aria-activedescendant="" tabindex="0">${M()}${((e,t,i)=>e.map(e=>`<div class="tp-ui-wheel-item" role="option" id="${i}-${e}" data-value="${e}" aria-label="${t} ${e}" aria-selected="false">${e}</div>`).join(""))(i,s,r)}${M()}</div></div>`,C=["AM","PM"],w=(e,t,i=!1,s="tp")=>{const r="12h"===e?Array.from({length:12},(e,t)=>T(t+1)):Array.from({length:24},(e,t)=>T(t)),o=(n=t,Array.from({length:Math.ceil(60/n)},(e,t)=>T(t*n)));var n;return`<div class="tp-ui-wheel-container">${k("tp-ui-wheel-hours","Hours",r,"Hour",`${s}-wh`)}<div class="tp-ui-wheel-separator" aria-hidden="true">:</div>${k("tp-ui-wheel-minutes","Minutes",o,"Minute",`${s}-wm`)}${i&&"12h"===e?k("tp-ui-wheel-ampm","Period",C,"Period",`${s}-wp`):""}<div class="tp-ui-wheel-highlight" aria-hidden="true"></div></div>`};const A=new class{plugins=new Map;register(e){this.plugins.has(e.name)||this.plugins.set(e.name,e)}getAll(){return Array.from(this.plugins.values())}has(e){return this.plugins.has(e)}get(e){return this.plugins.get(e)}},H=["00","13","14","15","16","17","18","19","20","21","22","23"],E=["12","1","2","3","4","5","6","7","8","9","10","11"],L=["00","05","10","15","20","25","30","35","40","45","50","55"],S=(e,t)=>{const{ui:{mode:i,animation:s,theme:r,mobile:o},clock:{incrementMinutes:n}}=e,a=o?"mobile":"",l="compact-wheel"===i&&A.has("wheel"),c=("wheel"===i||l)&&A.has("wheel"),u=!!e.range?.enabled&&A.has("range"),h=!!e.timezone?.enabled&&A.has("timezone"),d={mobileClass:a,clockType:e.clock.type||"12h",instanceId:t,isWheelMode:c,isCompactWheel:l},m=(e=>{const{range:{enabled:t,fromLabel:i,toLabel:s}}=e;return t&&A.has("range")?`<div class="tp-ui-range-header" role="tablist" aria-label="Range selection"><button type="button" class="tp-ui-range-tab tp-ui-range-from active" role="tab" tabindex="0" aria-selected="true"><span class="tp-ui-range-tab-label">${i}</span><span class="tp-ui-range-tab-value tp-ui-range-from-time">--:--</span></button><button type="button" class="tp-ui-range-tab tp-ui-range-to" role="tab" tabindex="-1" aria-selected="false"><span class="tp-ui-range-tab-label">${s}</span><span class="tp-ui-range-tab-value tp-ui-range-to-time">--:--</span></button></div>`:""})(e),p=((e,t,i)=>{const{timezone:{enabled:s,label:r}}=e;return s&&A.has("timezone")?`<div class="tp-ui-timezone ${t}">\n <span class="tp-ui-timezone-label" id="tp-tz-label-${i}">${r}</span>\n <div class="tp-ui-timezone-dropdown" role="combobox" aria-expanded="false" aria-haspopup="listbox" aria-labelledby="tp-tz-label-${i}" tabindex="0" data-tz-id="${i}">\n <div class="tp-ui-timezone-selected" data-placeholder="${r}...">${r}...</div>\n <svg class="tp-ui-timezone-arrow" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>\n <div class="tp-ui-timezone-menu" role="listbox" aria-labelledby="tp-tz-label-${i}"></div>\n </div>\n </div>`:""})(e,a,t),g=l?"":((e,t)=>{const{labels:{time:i,mobileTime:s,am:r,pm:o,mobileMinute:n,mobileHour:a},ui:{editable:l}}=e,{mobileClass:c,clockType:u,instanceId:h}=t,d=c?s:i;return`<div class="tp-ui-select-time ${c}" id="tp-ui-label-${h}">${d}</div><div class="tp-ui-header ${c}"><div class="tp-ui-wrapper-time ${c} ${"24h"===u?"tp-ui-wrapper-time-24h":""}" role="group" aria-label="${d}"><div class="tp-ui-input-wrapper ${c}"><div class="tp-ui-input-ripple-wrapper ${c}" data-md3-ripple><input name="hour" ${l||c?"":"readonly"} class="tp-ui-hour ${c}" tabindex="0" type="number" min="0" max="${"12h"===u?"12":"23"}" aria-label="${c?a:"Hour"}" role="spinbutton" aria-valuenow="12"></div><div class="tp-ui-hour-text ${c}">${a}</div></div><div class="tp-ui-dots ${c}" aria-hidden="true"><span></span><span></span></div><div class="tp-ui-input-wrapper ${c}"><div class="tp-ui-input-ripple-wrapper ${c}" data-md3-ripple><input name="minutes" ${l||c?"":"readonly"} class="tp-ui-minutes ${c}" tabindex="0" type="number" min="0" max="59" aria-label="${c?n:"Minute"}" role="spinbutton" aria-valuenow="0"></div><div class="tp-ui-minute-text ${c}">${n}</div></div></div>${"24h"!==u?`<div class="tp-ui-wrapper-type-time ${c}" role="group" aria-label="Period"><div class="tp-ui-type-mode tp-ui-am ${c?"mobile":"tp-ui-ripple"}" data-md3-ripple tabindex="0" role="button" aria-label="${r}" aria-pressed="false" data-type="AM">${r}</div><div class="tp-ui-type-mode tp-ui-pm ${c?"mobile":"tp-ui-ripple"}" data-md3-ripple tabindex="0" role="button" aria-label="${o}" aria-pressed="false" data-type="PM">${o}</div></div>`:""}</div>`})(e,d),v=((e,t)=>{if(e.isWheelMode){const i=e.isCompactWheel&&"12h"===e.clockType;return`<div class="tp-ui-mobile-clock-wrapper ${e.mobileClass}">${w(e.clockType,t,i,e.instanceId)}</div>`}return`<div class="tp-ui-mobile-clock-wrapper ${e.mobileClass}"><div class="tp-ui-body ${e.mobileClass}"><div class="tp-ui-clock-face ${e.mobileClass}" role="group" aria-label="Clock"><div class="tp-ui-dot ${e.mobileClass}" aria-hidden="true"></div><div class="tp-ui-clock-hand ${e.mobileClass}" aria-hidden="true"><div class="tp-ui-circle-hand ${e.mobileClass}"></div></div><div class="tp-ui-tips-wrapper ${e.mobileClass}" role="listbox" aria-label="Time"></div>${"24h"===e.clockType?`<div class="tp-ui-tips-wrapper-24h ${e.mobileClass}" role="listbox" aria-label="24h"></div>`:""}</div></div></div>`})(d,n??1),b=l&&!0===e.wheel?.hideFooter?"":((e,t)=>{const{ui:{enableSwitchIcon:i,iconTemplate:s,iconTemplateMobile:r},labels:{cancel:o,ok:n}}=e,a=i?`<div class="tp-ui-keyboard-icon-wrapper ${t}" tabindex="0" role="button" aria-pressed="false" aria-label="Toggle" data-view="desktop">${t?r||`<button aria-label="Clock" type="button" class="tp-ui-keyboard-icon">${r||f}</button>`:`<button aria-label="Keyboard" type="button" class="tp-ui-keyboard-icon">${s||y}</button>`}</div>`:"",l=((e,t)=>{const{ui:{clearButton:i},labels:{clear:s}}=e;return i?`<div class="tp-ui-clear-btn ${t} disabled" data-md3-ripple tabindex="0" role="button" aria-pressed="false" aria-label="${s}" aria-disabled="true">${s}</div>`:""})(e,t);return`<div class="tp-ui-footer ${t}" ${t?'data-view="mobile"':""}>${a}<div class="tp-ui-wrapper-btn ${t}">${l}<div class="tp-ui-cancel-btn ${t}" data-md3-ripple tabindex="0" role="button" aria-pressed="false" aria-label="${o}">${o}</div><div class="tp-ui-ok-btn ${t}" data-md3-ripple tabindex="0" role="button" aria-pressed="false" aria-label="${n}">${n}</div></div></div>`})(e,a);let T;return T=l?" tp-ui-compact-wheel-mode":c?" tp-ui-wheel-mode":"",`<div class="tp-ui-modal normalize ${a}${u?" tp-ui-range-mode":""}${h?" tp-ui-tz-mode":""}${T}" data-theme="${r}" role="dialog" aria-modal="true" aria-labelledby="tp-ui-label-${t}" data-owner-id="${t}" style='transition:${s?"opacity 0.15s linear":"none"}'><div class="tp-ui-wrapper ${a}" tabindex="0">${m}${g}${p}${v}${b}</div><div class="timepicker-announcer sr-only" role="status" aria-live="polite" aria-atomic="true"></div></div>`};class I{core;emitter;timeouts=[];originalOverflow;originalPaddingRight;constructor(e,t){this.core=e,this.emitter=t}runWithTimeout(e,t=s){const i=setTimeout(e,t);this.timeouts.push(i)}clearAllTimeouts(){this.timeouts.forEach(clearTimeout),this.timeouts=[]}isPopoverMode(){return"compact-wheel"===this.core.options.ui.mode&&!!this.core.options.wheel?.placement}clearExistingModal(){if(!1===t())return;const e=this.core.getModalElement();e&&e.remove()}setModalTemplate(){if(!1===t())return;this.clearExistingModal();const e=S(this.core.options,this.core.instanceId);if(this.core.options.ui.inline?.enabled){const t=document.getElementById(this.core.options.ui.inline.containerId);if(!t)return;t.innerHTML="",t.insertAdjacentHTML("beforeend",e);const i=t.querySelector(".tp-ui-modal");if(i){i.classList.add("tp-ui--inline");const{showButtons:e}=this.core.options.ui.inline;!1!==e&&void 0!==e||i.querySelectorAll(".tp-ui-wrapper-btn, .tp-ui-wrapper-btn.mobile").forEach(e=>e.style.display="none")}return}const{appendModalSelector:i}=this.core.options.ui;if(i){const t=document.querySelector(i);t?.insertAdjacentHTML("beforeend",e)}else document.body.insertAdjacentHTML("beforeend",e)}setScrollbarOrNot(){!1!==t()&&(this.core.options.ui.inline?.enabled||this.isPopoverMode()||(this.core.options.ui.enableScrollbar?this.runWithTimeout(()=>{e()||this.runWithTimeout(()=>{"undefined"!=typeof document&&(document.body.style.overflowY=this.originalOverflow||"",document.body.style.paddingRight=this.originalPaddingRight||"")},o)},400):(this.originalOverflow=document.body.style.overflowY,this.originalPaddingRight=document.body.style.paddingRight,document.body.style.paddingRight=`${(()=>{if(!1===t())return 0;const e=document.createElement("div");e.className="tp-ui-measure",document.body.appendChild(e);const i=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),i})()}px`,document.body.style.overflowY="hidden")))}removeBackdrop(){if(this.core.options.ui.inline?.enabled||this.core.options.ui.backdrop)return;const e=this.core.getModalElement(),t=this.core.getOpenElement();e?.classList.add("removed"),t.forEach(e=>e?.classList.add("disabled"))}setNormalizeClass(){const e=this.core.getModalElement();if(!e)return;e.classList.add("tp-ui-normalize");e.querySelectorAll(":scope > div").forEach(e=>e.classList.add("tp-ui-normalize"))}setShowClassToBackdrop(){if(this.core.options.ui.inline?.enabled||this.isPopoverMode())return this.core.getModalElement()?.classList.add("show"),void this.setInitialFocus();this.core.options.ui.backdrop&&this.runWithTimeout(()=>{this.core.getModalElement()?.classList.add("show"),this.setInitialFocus()},r)}setInitialFocus(){if(!this.core.options.behavior.focusTrap)return;const e=this.core.getWrapper();e&&"undefined"!=typeof requestAnimationFrame&&requestAnimationFrame(()=>{e.focus()})}setFlexEndToFooterIfNoKeyboardIcon(){const e=this.core.getFooter();!this.core.options.ui.enableSwitchIcon&&e&&(e.style.justifyContent="flex-end")}destroy(){this.clearAllTimeouts(),e()||this.core.options.ui.inline?.enabled||(document.body.style.overflowY=this.originalOverflow||"",document.body.style.paddingRight=this.originalPaddingRight||""),this.clearExistingModal()}}const x=(e,t,i,s)=>{const r={hour:"12",minutes:"00",type:"24h"===t?void 0:"PM"};if(!e)return r;const o=e.value.trim();if(!i&&!o)return r;if("boolean"==typeof i&&i){const e=new Date,[i,s]=e.toLocaleTimeString().split(":"),r=i.padStart(2,"0");if(/[a-z]/i.test(s)&&"12h"===t){const[e,t]=s.split(" ");return{hour:r,minutes:e,type:t}}return{hour:r,minutes:s,type:void 0}}if("object"==typeof i){const{time:e,locales:r,preventClockType:o}=i,n=e??new Date;if(o&&s){const[e,t]=new Date(n).toLocaleTimeString().split(":");if(/[a-z]/i.test(t)){const[i,s]=t.split(" ");return{hour:e,minutes:i,type:s}}return{hour:e.padStart(2,"0"),minutes:t,type:void 0}}const a=new Date(n).toLocaleTimeString(r||"en-US",{hour:"2-digit",minute:"2-digit",hour12:"12h"===t}),[l,c]=a.split(":");if("12h"===t&&/[a-z]/i.test(c)){const e=c.trim().split(" ");return{hour:l,minutes:e[0],type:e[1]||"AM"}}return{hour:l,minutes:c.replace(/\D/g,""),type:void 0}}const[n,a]=o.split(" "),[l="",c=""]=n.split(":"),u=l.replace(/\D/g,""),h=c.replace(/\D/g,""),d={hour:u.padStart(2,"0"),minutes:h.padStart(2,"0"),type:"12h"===t?a:void 0};if(u.length>2||h.length>2)return{...d,error:"Invalid input: too many digits.",currentHour:l,currentMin:c};if(/[a-z]/i.test(n))return{...d,error:"Input contains invalid letters."};if(o.includes(" ")&&(!a||o.length>8||"AM"!==a&&"PM"!==a))return{...d,error:"Invalid AM/PM format or length.",currentLength:o.length,currentType:a};const m=Number(u),p=Number(h);if("12h"===t){if(m<1||m>12||p<0||p>59||"AM"!==a&&"PM"!==a)return{...d,error:"Invalid 12h time.",currentHour:m,currentMin:p,currentType:a}}else if(m<0||m>23||p<0||p>59)return{...d,error:"Invalid 24h time.",currentHour:m,currentMin:p};return d},$=(e,t,i)=>{const s=Number(e);if(Number.isNaN(s))return!1;switch(t){case"hour":return"24h"===i?s>=0&&s<=23:s>0&&s<=12;case"minutes":return s>=0&&s<=59;default:return}},P="tp-ui",D="mousedown mouseup mousemove mouseleave mouseover touchstart touchmove touchend",V="active";class O{core;emitter;constructor(e,t){this.core=e,this.emitter=t}isCurrentTimeEnabled(e){const t=this.core.options.clock.currentTime;return"boolean"==typeof t?t:!!t?.[e]}preventClockTypeByCurrentTime(){if(!this.isCurrentTimeEnabled("preventClockType"))return;const e=this.core.getInput();if(!e)return;const{currentTime:t,clockType:i}={currentTime:this.core.options.clock.currentTime,clockType:this.core.options.clock.type},{type:s}=x(e,i,t,!0);this.core.updateOptions({clock:{type:s?"12h":"24h"}})}updateInputValueWithCurrentTimeOnStart(){if(!this.isCurrentTimeEnabled("updateInput"))return;const e=this.core.getInput();if(!e)return;const{hour:t,minutes:i,type:s}=x(e,this.core.options.clock.type,this.core.options.clock.currentTime);e.value=s?`${t}:${i} ${s}`:`${t}:${i}`}getInputValueOnOpenAndSet(){const e=this.core.getInput();if(!e)return;const t=x(e,this.core.options.clock.type,this.core.options.clock.currentTime),i=this.core.getHour(),s=this.core.getMinutes(),r=this.core.getActiveTypeMode(),o=this.core.getAM();if(void 0===t){i&&(i.value="12"),s&&(s.value="00");const e={hour:i?.value||"12",minutes:s?.value||"00",type:r?.dataset.type,degreesHours:this.core.degreesHours,degreesMinutes:this.core.degreesMinutes};this.emitter.emit("open",e);const t=!0===this.core.options.range?.enabled;return void("24h"!==this.core.options.clock.type&&o&&!t&&o.classList.add(V))}let[n,a,l]=e.value.split(":").join(" ").split(" ");0===e.value.length&&(n=t.hour,a=t.minutes,l=t.type),"24h"===this.core.options.clock.type||l||(l=t.type||"AM"),i&&(i.value=n.padStart(2,"0")),s&&(s.value=a.padStart(2,"0"));const c=this.core.getModalElement(),u=c?.querySelector(`[data-type='${l}']`);"24h"!==this.core.options.clock.type&&u&&u.classList.add(V);const h={...t,type:r?.dataset.type,degreesHours:this.core.degreesHours,degreesMinutes:this.core.degreesMinutes};this.emitter.emit("open",h)}getInputValue(e,t,i){return x(e,t,i)}destroy(){}}class F{core;emitter;isAnimating=!1;constructor(e,t){this.core=e,this.emitter=t,this.setupEventListeners()}setupEventListeners(){this.emitter.on("switch:view",()=>{this.toggleMobileClockFace()})}checkMobileOption(){this.core.setIsMobileView(!!this.core.options.ui.mobile),this.core.options.ui.mobile&&this.core.updateOptions({ui:{editable:!0}})}toggleMobileClockFace(){if(this.isAnimating)return;const e=this.core.getModalElement();if(!e)return;const t=e.querySelector(".tp-ui-wrapper"),i=this.core.getKeyboardClockIcon(),s=e.querySelector(".tp-ui-mobile-clock-wrapper"),r=e.querySelectorAll("*"),o=e.querySelector(".tp-ui-select-time"),n=this.core.getHour(),a=this.core.getMinutes(),l=this.core.getClockFace();if(!t)return;const c=t.classList.contains("expanded"),u=this.core.isMobileView;c?this.collapseClockFace(t,s,r,i,o,n,a,l,u):this.expandClockFace(t,s,r,i,o,n,a,l)}collapseClockFace(e,t,i,s,r,o,n,a,l){if(this.isAnimating=!0,"undefined"!=typeof requestAnimationFrame){const c="undefined"!=typeof window&&window.matchMedia("(orientation: landscape) and (min-width: 320px) and (max-width: 825px)").matches;requestAnimationFrame(()=>{c&&e instanceof HTMLElement?this.collapseLandscape(e,t,i,s,r,o,n,a,l):this.collapsePortrait(e,t,i,s,r,o,n,a,l)})}else this.switchView(r,s,o,n,!0),this.isAnimating=!1;s?.setAttribute("aria-label","Show clock face"),s?.setAttribute("aria-pressed","false")}collapseLandscape(e,t,i,s,r,o,n,a,l){a?.classList.remove("scale-in");const c=this.core.getModalElement(),u=this.getMobileLandscapeHeight(c);e.style.width="328px",e.style.height=u,t instanceof HTMLElement&&(t.style.height="0",t.style.opacity="0",t.style.transform="scale(0)"),setTimeout(()=>{this.applyMobileClasses(e,t,i,r,l),e.classList.add("mobile"),t&&t.classList.add("mobile"),this.switchView(r,s,o,n,!0),requestAnimationFrame(()=>{e.style.width="",e.style.height="",t instanceof HTMLElement&&(t.style.height="",t.style.opacity="",t.style.transform=""),this.isAnimating=!1})},h)}collapsePortrait(e,t,i,s,r,o,n,a,l){l?a?.classList.remove("scale-in"):a?.classList.add("scale-in"),t?.classList.remove("expanded"),l&&t?.classList.add("mobile"),requestAnimationFrame(()=>{this.applyMobileClasses(e,t,i,r,l),this.switchView(r,s,o,n,!0),setTimeout(()=>{this.isAnimating=!1},c)})}applyMobileClasses(e,t,i,s,r){e.classList.remove("expanded"),t?.classList.remove("expanded"),r&&(e.classList.add("mobile"),t?.classList.add("mobile")),i.forEach(i=>{i!==t&&i!==e&&i!==s&&(i.classList.remove("expanded"),r&&i.classList.add("mobile"))}),s&&(s.classList.remove("expanded"),r&&s.classList.add("mobile"))}expandClockFace(e,t,i,s,r,o,n,a){this.isAnimating=!0;const l=n?.classList.contains("active");l&&n?this.emitter.emit("select:minute",{minutes:n.value}):o&&this.emitter.emit("select:hour",{hour:o.value}),i.forEach(i=>{i!==t&&i!==e&&i!==r&&(i.classList.remove("mobile"),i.classList.add("expanded"))}),r&&(r.classList.remove("mobile"),r.classList.add("expanded")),this.switchView(r,s,o,n,!1),"undefined"!=typeof requestAnimationFrame?requestAnimationFrame(()=>{e.classList.remove("mobile"),e.classList.add("expanded"),requestAnimationFrame(()=>{t&&(t.classList.remove("mobile"),t.classList.add("expanded")),a&&a.classList.remove("scale-in"),setTimeout(()=>{a&&a.classList.add("scale-in")},u),setTimeout(()=>{this.isAnimating=!1},c)})}):this.isAnimating=!1,s?.setAttribute("aria-label","Hide clock face"),s?.setAttribute("aria-pressed","true")}switchView(e,t,i,s,r){const o=this.core.getModalElement(),n=o?.querySelector(".tp-ui-hour-text"),a=o?.querySelector(".tp-ui-minute-text"),l=t?.querySelector(".tp-ui-keyboard-icon"),c=this.core.getInputWrappers(),u=this.core.getHeader(),h=o?.querySelector(".tp-ui-wrapper-type-time"),d=o?.querySelector(".tp-ui-am"),m=o?.querySelector(".tp-ui-pm"),p=o?.querySelectorAll(".tp-ui-input-ripple-wrapper"),{iconTemplate:g,iconTemplateMobile:v}=this.core.options.ui,{time:b,mobileTime:T}=this.core.options.labels;r?(e?.classList.add("mobile"),t?.classList.add("mobile"),i?.classList.add("mobile"),i?.removeAttribute("readonly"),s?.classList.add("mobile"),s?.removeAttribute("readonly"),n?.classList.add("mobile"),a?.classList.add("mobile"),u?.classList.add("mobile"),h?.classList.add("mobile"),d?.classList.add("mobile"),d?.classList.remove("tp-ui-ripple"),m?.classList.add("mobile"),m?.classList.remove("tp-ui-ripple"),c?.forEach(e=>{e.classList.add("mobile")}),p?.forEach(e=>{e.classList.add("mobile")}),e&&T&&(e.textContent=T),l&&(l.innerHTML=v||f),this.updateClockFaceAccessibility(!0)):(e?.classList.remove("mobile"),t?.classList.remove("mobile"),i?.classList.remove("mobile"),s?.classList.remove("mobile"),this.core.options.ui.editable||(i?.setAttribute("readonly",""),s?.setAttribute("readonly","")),n?.classList.remove("mobile"),a?.classList.remove("mobile"),u?.classList.remove("mobile"),h?.classList.remove("mobile"),d?.classList.remove("mobile"),d?.classList.add("tp-ui-ripple"),m?.classList.remove("mobile"),m?.classList.add("tp-ui-ripple"),c?.forEach(e=>{e.classList.remove("mobile")}),p?.forEach(e=>{e.classList.remove("mobile")}),e&&b&&(e.textContent=b),l&&(l.innerHTML=g||y),this.updateClockFaceAccessibility(!1))}updateClockFaceAccessibility(e){const t=this.core.getClockFace();if(!t)return;const i=t.querySelector(".tp-ui-tips-wrapper"),s=t.querySelector(".tp-ui-tips-wrapper-24h"),r=t.querySelectorAll(".tp-ui-tip");e?(t.setAttribute("aria-hidden","true"),i?.setAttribute("aria-hidden","true"),s?.setAttribute("aria-hidden","true"),r.forEach(e=>{e.setAttribute("tabindex","-1"),e.setAttribute("aria-hidden","true")})):(t.removeAttribute("aria-hidden"),i?.removeAttribute("aria-hidden"),s?.removeAttribute("aria-hidden"),r.forEach(e=>{e.setAttribute("tabindex","0"),e.removeAttribute("aria-hidden")}))}getMobileLandscapeHeight(e){return e?.classList.contains("tp-ui-tz-mode")?"326px":e?.classList.contains("tp-ui-range-mode")?"287px":"258px"}destroy(){}}const q=(e,t,i,s)=>{if(e){if(Array.isArray(e)&&e.length>0){return!e.map(e=>$(e,t,i)).some(e=>!1===e)}if("string"==typeof e||"number"==typeof e){return!!$(e,t,i)}}};class B{core;constructor(e){this.core=e}getDisableTime(){const e=(e=>{if(!e)return;const{disabledTime:t,type:i}=e.clock;if(!t||!Object.keys(t).length)return;const{hours:s,minutes:r,interval:o}=t;if(o){delete t.hours,delete t.minutes;const e=Array.isArray(o)?o:[o];if(!i)throw new Error("clockType required for interval");return b(e,i),{value:e.map(e=>{const[t,s]=e.trim().split("-"),{hour:r,minutes:o,type:n}=x({value:t.trim()},i),{hour:a,minutes:l,type:c}=x({value:s.trim()},i);let u=m(r,a).map(e=>0===Number(e)?"00":String(Number(e)));const h=[],d=Number(o),g=Number(l);if(c===n)return d>0&&g<=0?(h.push(u[0],u[u.length-1]),u=u.slice(1,-1)):g<59&&g>0&&d<=0?(h.push(void 0,u[u.length-1]),u=u.slice(0,-1)):g>0&&d>0?(h.push(u[0],u[u.length-1]),u=u.slice(1,-1)):0===g&&0===d&&(h.push(void 0,u[u.length-1]),u.pop()),{removedStartedHour:void 0!==h[0]&&Number(h[0])<=9?`0${h[0]}`:h[0],removedEndHour:void 0!==h[1]&&Number(h[1])<=9?`0${h[1]}`:h[1],rangeArrHour:u,startMinutes:m(o,59).map(e=>Number(e)<=9?`0${e}`:`${e}`),endMinutes:p(0,l).map(e=>Number(e)<=9?`0${e}`:`${e}`),startType:n,endType:c};{const e=m(r,12).map(String),t=p(1,a).map(String),i=[],s=[];return d>0&&g<=0?(s.push(t[t.length-1]),i.push(e[0]),t.pop(),e.shift()):g<59&&g>0&&d<=0?(i.push(e[0]),s.push(t[t.length-1]),t.pop()):g>0&&d>0?(s.push(t[t.length-1]),i.push(e[0]),t.pop(),e.shift()):0===g&&0===d&&(s.push(t[t.length-1]),i.push(e[0]),t.pop()),{startType:n,endType:c,amHours:e,pmHours:t,removedAmHour:i[0]&&Number(i[0])<=9?`0${i[0]}`:i[0],removedPmHour:s[0]&&Number(s[0])<=9?`0${s[0]}`:s[0],startMinutes:0===Number(o)?[]:m(o,59).map(e=>Number(e)<=9?`0${e}`:`${e}`),endMinutes:p(0,l).map(e=>Number(e)<=9?`0${e}`:`${e}`)}}}).reduce((e,t)=>(Object.entries(t).forEach(([t,i])=>{Array.isArray(i)?e[t]=Array.isArray(e[t])?[...e[t],...i]:[...i]:e[t]=i}),e),{isInterval:!0,clockType:i,intervals:e})}}return s?.forEach(e=>{if("12h"===i&&Number(e)>12)throw new Error("The disabled hours value has to be less than 13");if("24h"===i&&Number(e)>23)throw new Error("The disabled hours value has to be less than 24")}),r?.forEach(e=>{if(Number(e)>59)throw new Error("The disabled minutes value has to be less than 60")}),{value:{hours:s?.map(e=>"00"===e||0===Number(e)?`0${Number(e)}`:`${Number(e)}`),minutes:r?.map(e=>Number(e)<=9?`0${e}`:`${e}`)}}})(this.core.options);this.core.setDisabledTime(e||null)}destroy(){}}class z{inputValueHandler;mobileViewHandler;disabledTimeHandler;core;constructor(e,t){this.core=e,this.inputValueHandler=new O(e,t),this.mobileViewHandler=new F(e,t),this.disabledTimeHandler=new B(e)}preventClockTypeByCurrentTime(){this.inputValueHandler.preventClockTypeByCurrentTime()}updateInputValueWithCurrentTimeOnStart(){this.inputValueHandler.updateInputValueWithCurrentTimeOnStart()}getInputValueOnOpenAndSet(){this.inputValueHandler.getInputValueOnOpenAndSet()}getInputValue(e,t,i){return this.inputValueHandler.getInputValue(e,t,i)}checkMobileOption(){this.mobileViewHandler.checkMobileOption()}toggleMobileClockFace(){this.mobileViewHandler.toggleMobileClockFace()}updateClockFaceAccessibility(e){this.mobileViewHandler.updateClockFaceAccessibility(e)}getDisableTime(){this.disabledTimeHandler.getDisableTime()}destroy(){this.inputValueHandler.destroy(),this.mobileViewHandler.destroy(),this.disabledTimeHandler.destroy()}}class W{core;emitter;constructor(e,t){this.core=e,this.emitter=t}setTheme(){const e=this.core.getModalElement();if(!e)return;const{theme:t}=this.core.options.ui;t&&e.setAttribute("data-theme",t)}setInputClassToInputElement(){const e=this.core.getInput();var t,i;e&&(i="tp-ui-input",(t=e)&&t.classList.contains(i)||e.classList.add("tp-ui-input"))}setDataOpenToInputIfDoesntExistInWrapper(){const e=this.core.getOpenElementData(),t=this.core.getInput();null===e&&t&&t.setAttribute("data-open","tp-ui-input")}setClassTopOpenElement(){const e=this.core.getOpenElement();for(const t of e)t&&t.classList.add("tp-ui-open-element")}setTimepickerClassToElement(){const e=this.core.element;if(!e)return;e.classList.add(P);const t=this.core.options.ui.cssClass;t&&t!==P&&e.classList.add(t)}destroy(){const e=this.core.getModalElement();e&&e.removeAttribute("data-theme")}}class N extends Error{code;constructor(e,t){super(`[TimepickerUI] ${e}`),this.code=t,this.name="TimepickerError",Object.setPrototypeOf(this,N.prototype)}}const R="INVALID_PARAMETER";class U{core;emitter;constructor(e,t){this.core=e,this.emitter=t}setErrorHandler(){const e=this.core.getInput();if(!e)return!0;const{error:i,currentHour:s,currentMin:r,currentType:o,currentLength:n}=x(e,this.core.options.clock.type);if(this.removeErrorHandler(),i){if(!1===t())return!1;const a=document.createElement("div");a.classList.add("tp-ui-invalid-text"),a.innerHTML="<b>Invalid Time Format</b>",e.classList.add("tp-ui-invalid-format"),e.nextElementSibling?.classList.contains("tp-ui-invalid-text")||e.after(a);const l={error:i,rejectedHour:void 0,rejectedMinute:void 0,inputHour:s,inputMinute:r,inputType:o,inputLength:n};return this.emitter.emit("error",l),!1}return!0}removeErrorHandler(){const e=this.core.getInput();if(!e)return;e.classList.remove("tp-ui-invalid-format");const t=e.nextElementSibling;t?.classList.contains("tp-ui-invalid-text")&&t.remove()}checkDisabledValuesOnStart(){if(!this.core.options.clock.disabledTime)return;const{disabledTime:e,type:t}=this.core.options.clock;if(e.interval){if(!t)throw new N("clockType is required when using disabledTime.interval",R);const i=Array.isArray(e.interval)?e.interval:[e.interval];try{b(i,t)}catch(e){throw new N(`Invalid disabledTime.interval: ${e.message}`,R)}return}const{hours:i,minutes:s}=e,r=!i||q(i,"hour",t),o=!s||q(s,"minutes",t);if(!r||!o)throw new N("Invalid hours or minutes in disabledTime option",R)}destroy(){this.removeErrorHandler()}}const Z=(e,t)=>{if(!e)return;const i=e.querySelector(".timepicker-announcer");i&&(i.textContent="",setTimeout(()=>{i.textContent=t},100))},j=(e,t)=>{e&&e.setAttribute("aria-pressed",String(t))};class Y{core;emitter;cleanupHandlers=[];constructor(e,t){this.core=e,this.emitter=t}handleOpenOnClick(){const e=this.core.getOpenElement();if(!e)return;const t=e=>{if(this.core.isDestroyed)return;const t=e.currentTarget;t?.classList.contains("disabled")||this.emitter.emit("show",{})};e.forEach(e=>{e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))})}handleCancelButton(){const e=this.core.getCancelButton();if(!e)return;const t=()=>{this.core.isDestroyed||this.emitter.emit("cancel",{})};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))}handleOkButton(){const e=this.core.getOkButton();if(!e)return;const t=()=>{if(this.core.isDestroyed)return;const e=this.core.getHour(),t=this.core.getMinutes();if(e&&t){const i=this.core.getActiveTypeMode();return void this.emitter.emit("confirm",{hour:e.value,minutes:t.value,type:i?.textContent||void 0})}const i=this.core.getModalElement();if(i){const e=i.querySelector(".tp-ui-wheel-hours .tp-ui-wheel-item.is-center"),t=i.querySelector(".tp-ui-wheel-minutes .tp-ui-wheel-item.is-center"),s=i.querySelector(".tp-ui-wheel-ampm .tp-ui-wheel-item.is-center");this.emitter.emit("confirm",{hour:e?.getAttribute("data-value")??void 0,minutes:t?.getAttribute("data-value")??void 0,type:s?.getAttribute("data-value")??void 0})}};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))}handleAmClick(){const e=this.core.getAM();if(!e)return;const t=()=>{if(this.core.isDestroyed)return;const t=this.core.getPM();e.classList.add("active"),t?.classList.remove("active"),j(e,!0),j(t,!1);const i=this.core.getModalElement();Z(i,"AM selected"),this.emitter.emit("select:am",{});const s=this.core.getHour(),r=this.core.getMinutes();this.emitter.emit("update",{hour:s?.value,minutes:r?.value,type:"AM"})};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))}handlePmClick(){const e=this.core.getPM();if(!e)return;const t=()=>{if(this.core.isDestroyed)return;const t=this.core.getAM();e.classList.add("active"),t?.classList.remove("active"),j(e,!0),j(t,!1);const i=this.core.getModalElement();Z(i,"PM selected"),this.emitter.emit("select:pm",{});const s=this.core.getHour(),r=this.core.getMinutes();this.emitter.emit("update",{hour:s?.value,minutes:r?.value,type:"PM"})};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))}handleSwitchViewButton(){const e=this.core.getKeyboardClockIcon();if(!e)return;const t=()=>{this.core.isDestroyed||this.emitter.emit("switch:view",{})};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))}destroy(){this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[]}}const K=(e,t,i)=>Math.max(t,Math.min(i,e));class X{core;emitter;cleanupHandlers=[];constructor(e,t){this.core=e,this.emitter=t}handleHourEvents(){const e=this.core.getHour();if(!e)return;const t=()=>{if(this.core.isDestroyed)return;e.classList.add("active");const t=this.core.getMinutes();t?.classList.remove("active"),this.emitter.emit("select:hour",{hour:e.value});const i=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:e.value,minutes:t?.value,type:i?.textContent||void 0})};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t));let i=e.value;const s=()=>{if(this.core.isDestroyed)return;if(e.hasAttribute("readonly"))return;const t="12h"===this.core.options.clock.type,s=((e,t)=>{if(""===e)return"";const i=parseInt(e,10);return Number.isNaN(i)?"":K(i,t?1:0,t?12:23).toString().padStart(2,"0")})(e.value,t);if(e.value=s,e.setAttribute("aria-valuenow",s),e.value!==i){i=e.value,this.emitter.emit("animation:clock",{}),this.emitter.emit("select:hour",{hour:e.value});const t=this.core.getMinutes(),s=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:e.value,minutes:t?.value,type:s?.textContent||void 0})}};e.addEventListener("blur",s),this.cleanupHandlers.push(()=>e.removeEventListener("blur",s))}handleMinutesEvents(){const e=this.core.getMinutes();if(!e)return;const t=()=>{if(this.core.isDestroyed)return;e.classList.add("active");const t=this.core.getHour();t?.classList.remove("active"),this.emitter.emit("select:minute",{minutes:e.value});const i=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:t?.value,minutes:e.value,type:i?.textContent||void 0})};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t));let i=e.value;const s=()=>{if(this.core.isDestroyed)return;if(e.hasAttribute("readonly"))return;const t=(e=>{if(""===e)return"";const t=parseInt(e,10);return Number.isNaN(t)?"":K(t,0,59).toString().padStart(2,"0")})(e.value);if(e.value=t,e.setAttribute("aria-valuenow",t),e.value!==i){i=e.value,this.emitter.emit("animation:clock",{}),this.emitter.emit("select:minute",{minutes:e.value});const t=this.core.getHour(),s=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:t?.value,minutes:e.value,type:s?.textContent||void 0})}};e.addEventListener("blur",s),this.cleanupHandlers.push(()=>e.removeEventListener("blur",s))}destroy(){this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[]}}class _{core;emitter;cleanupHandlers=[];constructor(e,t){this.core=e,this.emitter=t}handleOpenOnEnterFocus(){const e=this.core.getInput();if(!e)return;const t=e=>{"Enter"!==e.key||this.core.isDestroyed||this.core.isOpen||this.emitter.emit("show",{})};e.addEventListener("keydown",t),this.cleanupHandlers.push(()=>e.removeEventListener("keydown",t))}handleEscClick(){if(!1===t())return;const e=e=>{this.core.isDestroyed||"Escape"===e.key&&this.emitter.emit("cancel",{})};document.addEventListener("keydown",e),this.cleanupHandlers.push(()=>document.removeEventListener("keydown",e))}handleKeyboardInput(){const e=this.core.getHour(),t=this.core.getMinutes();if(e){const t=t=>{if(this.core.isDestroyed)return;if("ArrowUp"!==t.key&&"ArrowDown"!==t.key)return;t.preventDefault();const i=parseInt(e.value)||0,s=parseInt(e.getAttribute("max")||"23"),r="12h"===this.core.options.clock.type;let o;o="ArrowUp"===t.key?r?i>=12?1:i+1:i>=s?0:i+1:r?i<=1?12:i-1:i<=0?s:i-1,e.value=o.toString().padStart(2,"0"),e.setAttribute("aria-valuenow",e.value);const n=this.core.getModalElement();Z(n,`Hour: ${e.value}`),this.emitter.emit("animation:clock",{}),this.emitter.emit("select:hour",{hour:e.value});const a=this.core.getMinutes(),l=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:e.value,minutes:a?.value,type:l?.textContent||void 0})};e.addEventListener("keydown",t),this.cleanupHandlers.push(()=>e.removeEventListener("keydown",t))}if(t){const e=e=>{if(this.core.isDestroyed)return;if("ArrowUp"!==e.key&&"ArrowDown"!==e.key)return;e.preventDefault();const i=parseInt(t.value)||0;let s;s="ArrowUp"===e.key?i>=59?0:i+1:i<=0?59:i-1,t.value=s.toString().padStart(2,"0"),t.setAttribute("aria-valuenow",t.value);const r=this.core.getModalElement();Z(r,`Minutes: ${t.value}`),this.emitter.emit("animation:clock",{}),this.emitter.emit("select:minute",{minutes:t.value});const o=this.core.getHour(),n=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:o?.value,minutes:t.value,type:n?.textContent||void 0})};t.addEventListener("keydown",e),this.cleanupHandlers.push(()=>t.removeEventListener("keydown",e))}}focusTrapHandler(){if(!1===t())return;const e=this.core.getWrapper();if(!e)return;const i=t=>{if(this.core.isDestroyed)return;if("Tab"!==t.key)return;const i=e.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'),s=i[0],r=i[i.length-1];t.shiftKey&&document.activeElement===s?(r?.focus(),t.preventDefault()):t.shiftKey||document.activeElement!==r||(s?.focus(),t.preventDefault())};e.addEventListener("keydown",i),this.cleanupHandlers.push(()=>e.removeEventListener("keydown",i))}destroy(){this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[]}}class G{core;emitter;cleanupHandlers=[];constructor(e,t){this.core=e,this.emitter=t}handleBackdropClick(){const e=this.core.getModalElement();if(!e)return;const t=t=>{this.core.isDestroyed||t.target===e&&this.emitter.emit("cancel",{})};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))}handleMoveHand(){if(!1===t())return;const e=e=>{this.core.isDestroyed||e.preventDefault()};document.addEventListener("mousedown",e,!1),document.addEventListener("touchstart",e,{passive:!1}),this.cleanupHandlers.push(()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)})}destroy(){this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[]}}class J{buttonHandlers;inputHandlers;keyboardHandlers;modalHandlers;constructor(e,t){this.buttonHandlers=new Y(e,t),this.inputHandlers=new X(e,t),this.keyboardHandlers=new _(e,t),this.modalHandlers=new G(e,t)}handleOpenOnClick(){this.buttonHandlers.handleOpenOnClick()}handleOpenOnEnterFocus(){this.keyboardHandlers.handleOpenOnEnterFocus()}handleCancelButton(){this.buttonHandlers.handleCancelButton()}handleOkButton(){this.buttonHandlers.handleOkButton()}handleBackdropClick(){this.modalHandlers.handleBackdropClick()}handleEscClick(){this.keyboardHandlers.handleEscClick()}handleAmClick(){this.buttonHandlers.handleAmClick()}handlePmClick(){this.buttonHandlers.handlePmClick()}handleHourEvents(){this.inputHandlers.handleHourEvents()}handleMinutesEvents(){this.inputHandlers.handleMinutesEvents()}handleKeyboardInput(){this.keyboardHandlers.handleKeyboardInput()}focusTrapHandler(){this.keyboardHandlers.focusTrapHandler()}handleMoveHand(){this.modalHandlers.handleMoveHand()}handleSwitchViewButton(){this.buttonHandlers.handleSwitchViewButton()}destroy(){this.buttonHandlers.destroy(),this.inputHandlers.destroy(),this.keyboardHandlers.destroy(),this.modalHandlers.destroy()}}class Q{emitter;getClockSystem;setHoursToClock;setMinutesToClock;updateAmPm;convertDisabledTime;constructor(e,t,i,s,r,o){this.emitter=e,this.getClockSystem=t,this.setHoursToClock=i,this.setMinutesToClock=s,this.updateAmPm=r,this.convertDisabledTime=o}setup(){this.emitter.on("select:hour",({hour:e})=>{this.emitter.emit("animation:clock",{}),this.setHoursToClock(e||null)}),this.emitter.on("select:minute",({minutes:e})=>{this.emitter.emit("animation:clock",{}),this.setMinutesToClock(e||null)}),this.emitter.on("select:am",()=>{this.updateAmPm()}),this.emitter.on("select:pm",()=>{this.updateAmPm()}),this.emitter.on("animation:start",()=>{this.getClockSystem()?.blockInteractions()}),this.emitter.on("animation:end",()=>{this.getClockSystem()?.unblockInteractions()}),this.emitter.on("range:switch",e=>{this.refreshDisabledTimeForRange(e.disabledTime)})}refreshDisabledTimeForRange(e){const t=this.getClockSystem();if(!t)return;const i=this.convertDisabledTime();let s=i;if(e){const t=[...i?.hours||[],...e.hours||[]],r=[...i?.minutes||[],...e.minutes||[]];s={...i,hours:t.length>0?t:void 0,minutes:r.length>0?r:void 0,rangeFromType:e.fromType,rangeFromHour:e.fromHour}}t.updateDisabledTime(s)}}class ee{static angleToIndex(e,t,i){const s=Math.round(e/30)%12;if("24h"===t){if(i){const e=s+12;return 12===e?0:e}return 0===s?12:s}return 0===s?12:s}static indexToValue(e,t){if("24h"===t)return e.toString().padStart(2,"0");let i=e;return 0===i&&(i=12),i>12&&(i-=12),i.toString().padStart(2,"0")}static indexToAngle(e,t){if("24h"===t)return e>=12?(e-12)%12*30:e%12*30;return(0===e?12:e)%12*30}static isDisabled(e,t,i){return!!i&&(i.isInterval&&i.intervals&&i.clockType?this.isDisabledByInterval(e,t,i):void 0!==i.rangeFromType&&void 0!==i.rangeFromHour?this.isDisabledForRange12h(e,t,i):!!i.hours&&i.hours.some(t=>String(t)===e||Number(t)===Number(e)||t===e))}static isDisabledForRange12h(e,t,i){const s=i.rangeFromType,r=i.rangeFromHour,o=parseInt(e,10);return null!==s&&void 0!==r&&("AM"===t&&"PM"===s||("AM"===t&&"AM"===s?12!==r&&(12===o||o<r):("PM"!==t||"AM"!==s)&&("PM"===t&&"PM"===s&&(12!==r&&(12===o||o<r)))))}static isDisabledByInterval(e,t,i){if(!i.intervals)return!1;for(let s=0;s<60;s++){const r=s.toString().padStart(2,"0");if(!this.isTimeInIntervals(e,r,t,i.intervals,i.clockType))return!1}return!0}static isTimeInIntervals(e,t,i,s,r){const o="12h"===r?`${e}:${t} ${i}`:`${e}:${t}`;for(const e of s){const[t,i]=e.split("-").map(e=>e.trim());if(this.isTimeBetween(o,t,i,r))return!0}return!1}static isTimeBetween(e,t,i,s){const r=this.timeToMinutes(e,s),o=this.timeToMinutes(t,s),n=this.timeToMinutes(i,s);return r>=o&&r<=n}static timeToMinutes(e,t){if("12h"===t){const t=e.match(/(\d{1,2}):(\d{2})\s*(AM|PM)/i);if(!t)return 0;let i=parseInt(t[1]);const s=parseInt(t[2]),r=t[3].toUpperCase();return"PM"===r&&12!==i&&(i+=12),"AM"===r&&12===i&&(i=0),60*i+s}{const[t,i]=e.split(":").map(Number);return 60*t+i}}static findNearestValid(e,t,i,s){const r="24h"===t?23:12;for(let o=0;o<=r;o++){const n=0===o?[e]:[e+o,e-o];for(const e of n){let o=e;o<0&&(o+=r+1),o>r&&(o%=r+1);const n=this.indexToValue(o,t);if(!this.isDisabled(n,i,s))return o}}return e}}class te{static angleToIndex(e){return Math.round(e/6)%60}static indexToValue(e){return e.toString().padStart(2,"0")}static indexToAngle(e){return e%60*6}static isDisabled(e,t,i,s,r){if(!s)return!1;if(s.isInterval&&s.intervals)return this.isDisabledByInterval(e,t,i,s,r);if(void 0!==s.rangeFromType&&void 0!==s.rangeFromHour)return this.isDisabledForRange12h(e,t,i,s);if(void 0!==s.rangeFromHour){if(parseInt(t,10)!==s.rangeFromHour)return!1}return!!s.minutes&&s.minutes.some(t=>String(t)===e||Number(t)===Number(e)||t===e)}static isDisabledForRange12h(e,t,i,s){const r=s.rangeFromType,o=s.rangeFromHour,n=parseInt(t,10),a=parseInt(e,10);if(null===r||void 0===o)return!1;const l=s.minutes||[],c=l.length>0?parseInt(l[l.length-1],10)+1:0;if("AM"===i&&"PM"===r)return!0;if("PM"===i&&"AM"===r)return!1;return!!(n===o||12===n&&12===o||i===r&&n===o)&&a<c}static isDisabledByInterval(e,t,i,s,r){if(!s.intervals)return!1;const o="12h"===r?`${t}:${e} ${i}`:`${t}:${e}`;for(const e of s.intervals){const[t,i]=e.split("-").map(e=>e.trim());if(this.isTimeBetween(o,t,i,r))return!0}return!1}static isTimeBetween(e,t,i,s){const r=this.timeToMinutes(e,s),o=this.timeToMinutes(t,s),n=this.timeToMinutes(i,s);return r>=o&&r<=n}static timeToMinutes(e,t){if("12h"===t){const t=e.match(/(\d{1,2}):(\d{2})\s*(AM|PM)/i);if(!t)return 0;let i=parseInt(t[1]);const s=parseInt(t[2]),r=t[3].toUpperCase();return"PM"===r&&12!==i&&(i+=12),"AM"===r&&12===i&&(i=0),60*i+s}{const[t,i]=e.split(":").map(Number);return 60*t+i}}static findNearestValid(e,t,i,s,r){for(let o=0;o<60;o++){const n=0===o?[e]:[e+o,e-o];for(const e of n){let o=e;o<0&&(o+=60),o>=60&&(o%=60);const n=this.indexToValue(o);if(!this.isDisabled(n,t,i,s,r))return o}}return e}}class ie{static normalizeAngle(e){let t=e%360;return t<0&&(t+=360),t}static calculateRawAngle(e,t){const i=e.x-t.x,s=e.y-t.y,r=180*Math.atan2(s,i)/Math.PI+90;return this.normalizeAngle(r)}static snapToIncrement(e,t){const i=Math.round(e/t)*t;return this.normalizeAngle(i)}static calculateDistance(e,t){const i=e.x-t.x,s=e.y-t.y;return Math.sqrt(i*i+s*s)}static isInnerCircle(e,t){return e<.75*t}static calculateShortestPath(e,t){const i=this.normalizeAngle(e),s=this.normalizeAngle(t)-i,r=s>=0?s:s+360,o=s<=0?s:s-360;return e+(Math.abs(r)<Math.abs(o)?r:o)}}class se{config;currentAngle=0;tipsCache=new Map;cachedDimensions=new Map;constructor(e){this.config=e}getCachedDimensions(e){let t=this.cachedDimensions.get(e);if(!t){const i=(e.offsetWidth-32)/2;t={width:i,height:(e.offsetHeight-32)/2,radius:i-9},this.cachedDimensions.set(e,t)}return t}setHandAngle(e){const t=ie.calculateShortestPath(this.currentAngle,e);Math.abs(this.currentAngle-t)<.01||(this.currentAngle=t,this.config.clockHand.style.transform=`rotateZ(${t}deg)`)}animateToAngle(e){const t=ie.calculateShortestPath(this.currentAngle,e);this.currentAngle=t,this.config.tipsWrapper.classList.add("tp-ui-tips-animation"),this.config.clockHand.style.transform=`rotateZ(${t}deg)`,setTimeout(()=>{this.config.tipsWrapper.classList.remove("tp-ui-tips-animation")},401)}setActiveValue(e){const t=[this.config.tipsWrapper];this.config.tipsWrapperFor24h&&t.push(this.config.tipsWrapperFor24h),t.forEach(t=>{t.querySelectorAll(".tp-ui-value-tips, .tp-ui-value-tips-24h").forEach(t=>{const i=t;i.textContent===e||Number(i.textContent)===Number(e)?(i.classList.add("active"),i.setAttribute("aria-selected","true")):(i.classList.remove("active"),i.setAttribute("aria-selected","false"))})})}renderTips(e,i,s,r,o,n=!0,a,l="",c="12"){if(!1===t())return;const u=a||this.config.tipsWrapper;n&&(u.innerHTML="",this.tipsCache.clear());const{width:h,height:d,radius:m}=this.getCachedDimensions(u),p=document.createDocumentFragment(),g=`${i}-${this.config.theme||"default"}`;e.forEach((t,n)=>{const a=`${g}-${t}`;let u=this.tipsCache.get(a);u||(u=this.createTip(t,i,o),this.tipsCache.set(a,u));const{wrapper:v,tip:b}=u;this.updateTipState(v,b,t,s,r,o,l,c);const y=n*(360/e.length)*(Math.PI/180);v.style.left=`${h+Math.sin(y)*m}px`,v.style.bottom=`${d+Math.cos(y)*m}px`,p.appendChild(v)}),u.appendChild(p)}createTip(e,i,s){if(!1===t()){const e={};return{wrapper:e,tip:e}}const r=document.createElement("span"),o=document.createElement("span");o.textContent=e,o.setAttribute("role","option"),o.setAttribute("aria-selected","false"),o.tabIndex=0;const n="24h"===s&&i.includes("24")?"tp-ui-value-tips-24h":"tp-ui-value-tips";return o.classList.add(n),r.classList.add(i),this.config.theme&&(r.classList.add(this.config.theme),o.classList.add(this.config.theme)),r.appendChild(o),{wrapper:r,tip:o}}updateTipState(e,t,i,s,r,o,n,a){e.classList.remove("tp-ui-tips-disabled"),t.classList.remove("tp-ui-tips-disabled"),t.removeAttribute("aria-disabled"),t.tabIndex=0;this.checkIfDisabled(i,s,r,o,n,a)&&(e.classList.add("tp-ui-tips-disabled"),t.classList.add("tp-ui-tips-disabled"),t.setAttribute("aria-disabled","true"),t.tabIndex=-1)}checkIfDisabled(e,t,i,s,r,o){return!!i&&("hours"===t?ee.isDisabled(e,r,i):"minutes"===t&&te.isDisabled(e,o,r,i,s))}setCircleSize(e){e?this.config.circle.classList.remove("small-circle"):this.config.circle.classList.add("small-circle")}setCircle24hMode(e){e?(this.config.circle.classList.add("tp-ui-circle-hand-24h"),this.config.clockHand.classList.add("tp-ui-clock-hand-24h")):(this.config.circle.classList.remove("tp-ui-circle-hand-24h"),this.config.clockHand.classList.remove("tp-ui-clock-hand-24h"))}destroy(){this.tipsCache.clear(),this.cachedDimensions.clear(),this.config.tipsWrapper.innerHTML=""}}class re{static processPointerInput(e){const t=ie.calculateRawAngle(e.pointerPosition,e.clockCenter);return"hours"===e.mode?this.processHours(t,e):this.processMinutes(t,e)}static processHours(e,t){const i=t.smoothHourSnap??!0;let s;if(i)s=e;else{const i=30*t.incrementHours;s=ie.snapToIncrement(e,i)}const r=ie.calculateDistance(t.pointerPosition,t.clockCenter),o="24h"===t.clockType&&ie.isInnerCircle(r,t.clockRadius);let n=ee.angleToIndex(s,t.clockType,o);const a=ee.indexToValue(n,t.clockType),l=ee.isDisabled(a,t.amPm,t.disabledTime);l&&(n=ee.findNearestValid(n,t.clockType,t.amPm,t.disabledTime));const c=ee.indexToValue(n,t.clockType);let u;return u=i?e:ee.indexToAngle(n,t.clockType),{angle:u,value:c,index:n,isValid:!l,isInnerCircle:"24h"===t.clockType?o:void 0}}static processMinutes(e,t){const i=6*t.incrementMinutes,s=ie.snapToIncrement(e,i);let r=te.angleToIndex(s);const o=te.indexToValue(r),n=t.currentHour||"00",a=te.isDisabled(o,n,t.amPm,t.disabledTime,t.clockType);a&&(r=te.findNearestValid(r,n,t.amPm,t.disabledTime,t.clockType));const l=te.indexToValue(r);return{angle:te.indexToAngle(r),value:l,index:r,isValid:!a}}static valueToAngle(e,t,i){const s=parseInt(e,10);return"hours"===t?ee.indexToAngle(s,i):te.indexToAngle(s)}}class oe{state;renderer;clockType;disabledTime;incrementHours;incrementMinutes;smoothHourSnap;isDragging=!1;callbacks;lastProcessedX=null;lastProcessedY=null;constructor(e,t,i,s,r=1,o=1,n=!0,a={}){this.renderer=e,this.state={...t},this.clockType=i,this.disabledTime=s,this.incrementHours=r,this.incrementMinutes=o,this.smoothHourSnap=n,this.callbacks=a}handlePointerMove(e,t,i){if(this.isDragging=!0,this.lastProcessedX===e.x&&this.lastProcessedY===e.y)return;this.lastProcessedX=e.x,this.lastProcessedY=e.y;const s={pointerPosition:e,clockCenter:t,clockRadius:i,mode:this.state.mode,clockType:this.clockType,amPm:this.state.amPm,disabledTime:this.disabledTime,incrementHours:this.incrementHours,incrementMinutes:this.incrementMinutes,smoothHourSnap:this.smoothHourSnap,currentHour:this.state.hour},r=re.processPointerInput(s);if(r.isValid){if("hours"===this.state.mode){const e=this.state.hour;this.state.hour=r.value,this.state.hourAngle=r.angle,"24h"===this.clockType&&void 0!==r.isInnerCircle&&(this.renderer.setCircleSize(!0),this.renderer.setCircle24hMode(r.isInnerCircle)),this.callbacks.onHourChange&&e!==r.value&&this.callbacks.onHourChange(r.value)}else{const e=this.state.minute;this.state.minute=r.value,this.state.minuteAngle=r.angle,this.renderer.setCircleSize(!0),this.renderer.setCircle24hMode(!1),this.callbacks.onMinuteChange&&e!==r.value&&this.callbacks.onMinuteChange(r.value)}this.renderer.setHandAngle(r.angle),this.renderer.setActiveValue(r.value)}}handlePointerUp(){this.isDragging=!1,this.lastProcessedX=null,this.lastProcessedY=null}snapToNearestHour(){if("hours"!==this.state.mode)return;const e=re.valueToAngle(this.state.hour,"hours",this.clockType);this.state.hourAngle=e,this.renderer.animateToAngle(e)}switchMode(e){this.state.mode=e;const t="hours"===e?this.state.hourAngle:this.state.minuteAngle,i="hours"===e?this.state.hour:this.state.minute;if("hours"===e&&"24h"===this.clockType){const e=parseInt(i,10),t=0===e||e>=13;this.renderer.setCircleSize(!0),this.renderer.setCircle24hMode(t)}else this.renderer.setCircleSize(!0),this.renderer.setCircle24hMode(!1);this.renderer.setHandAngle(t),this.renderer.setActiveValue(i)}setValue(e,t){const i=re.valueToAngle(t,e,this.clockType);if("hours"===e)if(this.state.hour=t,this.state.hourAngle=i,"24h"===this.clockType){const e=parseInt(t,10),i=0===e||e>=13;this.renderer.setCircleSize(!0),this.renderer.setCircle24hMode(i)}else this.renderer.setCircle24hMode(!1);else this.state.minute=t,this.state.minuteAngle=i,this.renderer.setCircleSize(!0),this.renderer.setCircle24hMode(!1);this.state.mode===e&&(this.renderer.setHandAngle(i),this.renderer.setActiveValue(t))}setAmPm(e){this.state.amPm=e}getState(){return{...this.state}}getHour(){return this.state.hour}getMinute(){return this.state.minute}getAmPm(){return this.state.amPm}updateDisabledTime(e){this.disabledTime=e}destroy(){this.renderer.destroy()}}class ne{controller;clockFace;isActive=!1;isBlocked=!1;config;cachedRect=null;cachedCenter=null;cachedRadius=null;rafId=null;constructor(e,t,i={}){this.controller=e,this.clockFace=t,this.config=i}attach(){this.clockFace.addEventListener("mousedown",this.handlePointerDown),this.clockFace.addEventListener("touchstart",this.handlePointerDown,{passive:!1})}detach(){this.clockFace.removeEventListener("mousedown",this.handlePointerDown),this.clockFace.removeEventListener("touchstart",this.handlePointerDown),this.removeGlobalListeners()}block(){this.isBlocked=!0}unblock(){this.isBlocked=!1}handlePointerDown=t=>{if(e()||this.isBlocked)return;const i=t.target;i&&i.classList&&i.classList.contains("tp-ui-tips-disabled")||(t.preventDefault(),this.isActive=!0,this.cachedRect=this.clockFace.getBoundingClientRect(),this.cachedCenter=this.getClockCenter(),this.cachedRadius=this.getClockRadius(),this.processPointerEvent(t),document.addEventListener("mousemove",this.handlePointerMove),document.addEventListener("touchmove",this.handlePointerMove,{passive:!1}),document.addEventListener("mouseup",this.handlePointerUp),document.addEventListener("touchend",this.handlePointerUp))};handlePointerMove=e=>{if(!this.isActive||this.isBlocked)return;const t=this.getTargetElement(e);t&&t.classList&&t.classList.contains("tp-ui-tips-disabled")||(e.preventDefault(),null===this.rafId&&(this.rafId=requestAnimationFrame(()=>{this.rafId=null,this.processPointerEvent(e)})))};handlePointerUp=()=>{if(!this.isActive)return;null!==this.rafId&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.isActive=!1,this.cachedRect=null,this.cachedCenter=null,this.cachedRadius=null,this.controller.handlePointerUp();const{autoSwitchToMinutes:e,isMobileView:t,smoothHourSnap:i,hourElement:s,minutesElement:r}=this.config;i&&s?.classList.contains("active")&&this.controller.snapToNearestHour(),this.removeGlobalListeners(),e&&s?.classList.contains("active")&&!t?(s.classList.remove("active"),r?.classList.add("active"),r?.click(),r?.focus(),s.blur()):r?.classList.contains("active")&&this.config.onMinuteCommit&&this.config.onMinuteCommit()};processPointerEvent(e){const t=this.getPointerPosition(e),i=this.cachedCenter||this.getClockCenter(),s=this.cachedRadius||this.getClockRadius();this.controller.handlePointerMove(t,i,s)}getPointerPosition(e){const t=this.cachedRect||this.clockFace.getBoundingClientRect();if("touches"in e){const i=e.touches[0]||e.changedTouches[0];return{x:i.clientX-t.left,y:i.clientY-t.top}}return{x:e.clientX-t.left,y:e.clientY-t.top}}getTargetElement(t){if("touches"in t){const i=t.touches[0]||t.changedTouches[0];if(i&&!e())return document.elementFromPoint(i.clientX,i.clientY)}return t.target}getClockCenter(){return{x:this.clockFace.offsetWidth/2,y:this.clockFace.offsetHeight/2}}getClockRadius(){return this.clockFace.offsetWidth/2}removeGlobalListeners(){!1!==t()&&(document.removeEventListener("mousemove",this.handlePointerMove),document.removeEventListener("touchmove",this.handlePointerMove),document.removeEventListener("mouseup",this.handlePointerUp),document.removeEventListener("touchend",this.handlePointerUp))}}class ae{renderer;controller;dragHandlers;clockType;disabledTime;tipsWrapper;tipsWrapperFor24h;constructor(e){this.clockType=e.clockType,this.disabledTime=e.disabledTime,this.tipsWrapper=e.tipsWrapper,this.tipsWrapperFor24h=e.tipsWrapperFor24h;const t={clockFace:e.clockFace,tipsWrapper:e.tipsWrapper,tipsWrapperFor24h:e.tipsWrapperFor24h,clockHand:e.clockHand,circle:e.circle,theme:e.theme};this.renderer=new se(t);const i={hour:e.initialHour,minute:e.initialMinute,amPm:e.initialAmPm,hourAngle:this.calculateInitialAngle("hours",e.initialHour),minuteAngle:this.calculateInitialAngle("minutes",e.initialMinute),mode:"hours"},s={onHourChange:e.onHourChange,onMinuteChange:e.onMinuteChange};this.controller=new oe(this.renderer,i,e.clockType,e.disabledTime,e.incrementHours||1,e.incrementMinutes||1,e.smoothHourSnap??!0,s),this.dragHandlers=new ne(this.controller,e.clockFace,e.dragConfig||{})}initialize(){this.dragHandlers.attach(),this.switchToHours()}switchToHours(){this.controller.switchMode("hours"),"24h"===this.clockType&&this.tipsWrapperFor24h&&this.tipsWrapperFor24h.classList.remove("none"),this.renderHourTips();const e=this.controller.getState();this.renderer.setActiveValue(e.hour)}switchToMinutes(){this.controller.switchMode("minutes"),this.tipsWrapperFor24h&&this.tipsWrapperFor24h.classList.add("none"),this.renderMinuteTips();const e=this.controller.getState();this.renderer.setActiveValue(e.minute)}setHour(e){this.controller.setValue("hours",e)}setMinute(e){this.controller.setValue("minutes",e)}setAmPm(e){this.controller.setAmPm(e);const t=this.controller.getState();"hours"===t.mode?(this.renderHourTips(),this.renderer.setHandAngle(t.hourAngle),this.renderer.setActiveValue(t.hour)):(this.renderMinuteTips(),this.renderer.setHandAngle(t.minuteAngle),this.renderer.setActiveValue(t.minute))}getHour(){return this.controller.getHour()}getMinute(){return this.controller.getMinute()}getAmPm(){return this.controller.getAmPm()}updateDisabledTime(e){this.disabledTime=e,this.controller.updateDisabledTime(e);"hours"===this.controller.getState().mode?this.renderHourTips():this.renderMinuteTips()}renderHourTips(){const e=this.controller.getState().amPm;"24h"===this.clockType?(this.renderer.renderTips(E,"tp-ui-hour-time-12","hours",this.disabledTime,this.clockType,!0,this.tipsWrapper,e),this.tipsWrapperFor24h&&this.renderer.renderTips(H,"tp-ui-hour-time-24","hours",this.disabledTime,this.clockType,!0,this.tipsWrapperFor24h,e)):this.renderer.renderTips(E,"tp-ui-hour-time-12","hours",this.disabledTime,this.clockType,!0,void 0,e)}renderMinuteTips(){const e=this.controller.getState(),t=e.amPm,i=e.hour;this.renderer.renderTips(L,"tp-ui-minutes-time","minutes",this.disabledTime,this.clockType,!0,void 0,t,i)}calculateInitialAngle(e,t){const i=parseInt(t,10);return"hours"===e?i%12*30:6*i}destroy(){this.dragHandlers.detach(),this.controller.destroy()}blockInteractions(){this.dragHandlers.block()}unblockInteractions(){this.dragHandlers.unblock()}}class le{core;emitter;clockSystem=null;constructor(e,t){this.core=e,this.emitter=t}getClockSystem(){return this.clockSystem}initialize(){const e=this.core.getClockFace(),t=this.core.getClockHand(),i=this.core.getCircle();if(!e||!t||!i)return;const s="24h"===this.core.options.clock.type,r=this.core.getTipsWrapper();if(!r)return;const o=this.core.getHour(),n=this.core.getMinutes(),a={clockFace:e,tipsWrapper:r,tipsWrapperFor24h:s&&this.core.getTipsWrapperFor24h()||void 0,clockHand:t,circle:i,clockType:this.core.options.clock.type||"12h",disabledTime:this.convertDisabledTime(),initialHour:o?.value||"12",initialMinute:n?.value||"00",initialAmPm:this.getAmPmValue(),theme:this.core.options.ui.theme,incrementHours:this.core.options.clock.incrementHours||1,incrementMinutes:this.core.options.clock.incrementMinutes||1,smoothHourSnap:this.core.options.clock.smoothHourSnap??!0,timepicker:null,dragConfig:{autoSwitchToMinutes:this.core.options.clock.autoSwitchToMinutes,isMobileView:this.core.isMobileView,smoothHourSnap:this.core.options.clock.smoothHourSnap??!0,hourElement:o,minutesElement:n,onMinuteCommit:()=>{const e=this.core.getMinutes(),t=this.core.getHour(),i=this.core.getActiveTypeMode();this.emitter.emit("range:minute:commit",{hour:t?.value??"12",minutes:e?.value??"00",type:i?.textContent??void 0})}},onHourChange:e=>{const t=this.core.getHour();t&&(t.value=e,t.setAttribute("aria-valuenow",e));const i=this.core.getModalElement();Z(i,`Hour: ${e}`);const s=this.core.getMinutes(),r=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:e,minutes:s?.value,type:r?.textContent||void 0})},onMinuteChange:e=>{const t=this.core.getMinutes();t&&(t.value=e,t.setAttribute("aria-valuenow",e));const i=this.core.getModalElement();Z(i,`Minutes: ${e}`);const s=this.core.getHour(),r=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:s?.value,minutes:e,type:r?.textContent||void 0})}};this.clockSystem=new ae(a),this.clockSystem.initialize()}convertDisabledTime(){const e=this.core.disabledTime?.value;if(!e)return null;let t;return e.intervals&&(t=Array.isArray(e.intervals)?e.intervals:[e.intervals]),{hours:e.hours,minutes:e.minutes,isInterval:e.isInterval,intervals:t,clockType:e.clockType}}getAmPmValue(){if("24h"===this.core.options.clock.type)return"";const e=this.core.getActiveTypeMode();if(e){const t=e.textContent?.trim();if("AM"===t||"PM"===t)return t}const t=this.core.getAM();return!0===this.core.options.range?.enabled?t?.classList.contains("active")?"AM":"":t?.classList.contains("active")?"AM":"PM"}destroy(){this.clockSystem&&(this.clockSystem.destroy(),this.clockSystem=null)}}class ce{core;constructor(e){this.core=e}removeCircleClockClasses24h(){const e=this.core.getCircle(),t=this.core.getClockHand();e?.classList.remove("tp-ui-circle-hand-24h"),t?.classList.remove("tp-ui-clock-hand-24h")}setCircleClockClasses24h(){const e=this.core.getCircle(),t=this.core.getClockHand();e&&e.classList.add("tp-ui-circle-hand-24h"),t&&t.classList.add("tp-ui-clock-hand-24h")}setOnStartCSSClassesIfClockType24h(){if("24h"===this.core.options.clock.type){const e=this.core.getInput();if(!e)return;let t;e.value.length>0&&(t=e.value.split(":")[0]),t&&(Number(t)>12||0===Number(t))&&this.setCircleClockClasses24h()}}setBgColorToCircleWithMinutesTips(){const e=this.core.getMinutes(),t=this.core.getCircle();if(e&&t&&e.value&&L.includes(e.value)){const e=getComputedStyle(t).getPropertyValue("--timepicker-primary").trim();e&&(t.style.backgroundColor=e),t.classList.remove("small-circle")}}removeBgColorToCirleWithMinutesTips(){const e=this.core.getMinutes(),t=this.core.getCircle();e&&t&&(e.value&&L.includes(e.value)||(t.style.backgroundColor="",t.classList.add("small-circle")))}setClassActiveToHourOnOpen(){if(this.core.options.ui.mobile||this.core.isMobileView)return;const e=this.core.getHour();e?.classList.add(V)}toggleClassActiveToValueTips(e,t){if(e)return;const i=this.core.getAllValueTips();if(!i)return;const s=i.find(e=>Number(e.innerText)===Number(t));i.forEach(e=>{e.classList.remove(V),e.setAttribute("aria-selected","false")}),void 0!==s&&(s.classList.add(V),s.setAttribute("aria-selected","true"))}}class ue{getClockSystem;styleHandler;getAmPmValue;clockType;constructor(e,t,i,s){this.getClockSystem=e,this.styleHandler=t,this.getAmPmValue=i,this.clockType=s}setMinutesToClock(e){const t=this.getClockSystem();t&&(this.styleHandler.removeBgColorToCirleWithMinutesTips(),e&&t.setMinute(e),t.switchToMinutes())}setHoursToClock(e){const t=this.getClockSystem();t&&(e&&t.setHour(e),t.switchToHours())}setTransformToCircleWithSwitchesHour(e){const t=this.getClockSystem();t&&e&&t.setHour(e)}setTransformToCircleWithSwitchesMinutes(e){const t=this.getClockSystem();t&&e&&t.setMinute(e)}updateAmPm(){const e=this.getClockSystem();if(!e||"24h"===this.clockType)return;const t=this.getAmPmValue();""!==t&&e.setAmPm(t)}}class he{systemInitializer;styleHandler;timeHandler;eventHandler;constructor(e,t){this.systemInitializer=new le(e,t),this.styleHandler=new ce(e);const i=e.options.clock.type||"12h";this.timeHandler=new ue(()=>this.systemInitializer.getClockSystem(),this.styleHandler,()=>this.systemInitializer.getAmPmValue(),i),this.eventHandler=new Q(t,()=>this.systemInitializer.getClockSystem(),e=>this.timeHandler.setHoursToClock(e),e=>this.timeHandler.setMinutesToClock(e),()=>this.timeHandler.updateAmPm(),()=>this.systemInitializer.convertDisabledTime()),this.eventHandler.setup()}initializeClockSystem(){this.systemInitializer.initialize()}destroyClockSystem(){this.systemInitializer.destroy()}removeCircleClockClasses24h(){this.styleHandler.removeCircleClockClasses24h()}setCircleClockClasses24h(){this.styleHandler.setCircleClockClasses24h()}setOnStartCSSClassesIfClockType24h(){this.styleHandler.setOnStartCSSClassesIfClockType24h()}setBgColorToCircleWithMinutesTips=()=>{this.styleHandler.setBgColorToCircleWithMinutesTips()};removeBgColorToCirleWithMinutesTips=()=>{this.styleHandler.removeBgColorToCirleWithMinutesTips()};setClassActiveToHourOnOpen=()=>{this.styleHandler.setClassActiveToHourOnOpen()};setMinutesToClock=e=>{this.timeHandler.setMinutesToClock(e)};setHoursToClock=e=>{this.timeHandler.setHoursToClock(e)};setTransformToCircleWithSwitchesHour=e=>{this.timeHandler.setTransformToCircleWithSwitchesHour(e)};setTransformToCircleWithSwitchesMinutes=e=>{this.timeHandler.setTransformToCircleWithSwitchesMinutes(e)};updateAmPm=()=>{this.timeHandler.updateAmPm()};toggleClassActiveToValueTips=e=>{const t=null!==this.systemInitializer.getClockSystem();this.styleHandler.toggleClassActiveToValueTips(t,e)};destroy(){this.destroyClockSystem()}}class de{core;emitter;cleanupHandlers=[];wasCleared=!1;constructor(e,t){this.core=e,this.emitter=t}init(){if(!this.core.options.ui.clearButton)return;const e=this.getClearButton();if(!e)return;const t=()=>{this.core.isDestroyed||"true"!==e.getAttribute("aria-disabled")&&this.handleClearClick()};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t)),this.setupInternalEventListeners()}setupInternalEventListeners(){this.emitter.on("update",()=>{this.updateClearButtonState()}),this.emitter.on("open",()=>{this.updateClearButtonState()}),this.emitter.on("select:hour",()=>{this.updateClearButtonState(),this.reenableConfirmIfCleared()}),this.emitter.on("select:minute",()=>{this.updateClearButtonState(),this.reenableConfirmIfCleared()})}handleClearClick(){const e=this.core.getInput(),t=e?.value||null;this.clearTimeValue(),this.resetClockToNeutral(),this.disableConfirmButton(),this.wasCleared=!0;const i=this.core.getModalElement();Z(i,"Time cleared"),this.emitter.emit("clear",{previousValue:t}),this.emitter.emit("update",{hour:void 0,minutes:void 0,type:void 0});const{callbacks:s}=this.core.options;s.onClear&&s.onClear({previousValue:t})}clearTimeValue(){const e=!1!==this.core.options.clearBehavior?.clearInput,t=this.core.getInput();t&&e&&(t.value=""),this.core.setDegreesHours(null),this.core.setDegreesMinutes(null),this.core.options.range?.enabled&&this.clearRangeValues(),this.core.options.timezone?.enabled&&this.clearTimezoneValue()}resetClockToNeutral(){const e=this.core.options.clock.type,t="12h"===e?"PM":void 0,i=this.core.getHour(),s=this.core.getMinutes();i&&(i.value="12",i.removeAttribute("aria-valuenow")),s&&(s.value="00",s.removeAttribute("aria-valuenow"));const r=this.core.getClockHand();if(r){const e=r.style.transition;r.style.transition="none",r.style.transform="rotateZ(0deg)",r.offsetHeight,requestAnimationFrame(()=>{r.style.transition=e})}if(this.removeActiveStates(),i&&i.click(),"12h"===e&&t){const e=this.core.getAM(),t=this.core.getPM();e?.classList.remove("active"),t?.classList.remove("active"),e?.setAttribute("aria-pressed","false"),t?.setAttribute("aria-pressed","false"),t?.classList.add("active"),t?.setAttribute("aria-pressed","true")}this.emitter.emit("animation:clock",{})}removeActiveStates(){this.core.getAllValueTips().forEach(e=>{e.classList.remove("active"),e.removeAttribute("aria-selected")});const e=this.core.getHour(),t=this.core.getMinutes();e?.removeAttribute("aria-valuenow"),t?.removeAttribute("aria-valuenow")}disableConfirmButton(){const e=this.core.getOkButton();e&&(e.classList.add("disabled"),e.setAttribute("aria-disabled","true"))}updateClearButtonState(){const e=this.getClearButton();if(!e)return;const t=this.core.getInput(),i=t?.value&&""!==t.value.trim(),s=this.core.getHour(),r=this.core.getMinutes(),o=this.core.getActiveTypeMode(),n=this.core.options.clock.type,a=s?.value||"",l=r?.value||"",c=i||!("12h"===n?"12"===a&&"00"===l&&"PM"===(o?.textContent||""):"12"===a&&"00"===l);e.classList.toggle("disabled",!c),e.setAttribute("aria-disabled",String(!c))}reenableConfirmIfCleared(){if(!this.wasCleared)return;const e=this.core.getOkButton();e&&(e.classList.remove("disabled"),e.setAttribute("aria-disabled","false"),this.wasCleared=!1)}clearRangeValues(){const e=this.getFromTab(),t=this.getToTab(),i=this.getFromTimeDisplay(),s=this.getToTimeDisplay();i&&(i.textContent="--:--"),s&&(s.textContent="--:--"),e?.classList.add("active"),t?.classList.remove("active"),e?.setAttribute("aria-selected","true"),t?.setAttribute("aria-selected","false"),e?.setAttribute("tabindex","0"),t?.setAttribute("tabindex","-1"),t?.classList.add("disabled"),t?.setAttribute("aria-disabled","true");const r=this.core.getHour();r&&r.focus(),this.emitter.emit("range:switch",{active:"from",disabledTime:null})}clearTimezoneValue(){const e=this.getTimezoneDropdown(),t=this.getTimezoneSelected();if(t){const e=t.getAttribute("data-placeholder")||"Timezone...";t.textContent=e}e?.setAttribute("aria-expanded","false")}getClearButton(){const e=this.core.getModalElement();return e?.querySelector(".tp-ui-clear-btn")||null}getFromTab(){const e=this.core.getModalElement();return e?.querySelector(".tp-ui-range-from")||null}getToTab(){const e=this.core.getModalElement();return e?.querySelector(".tp-ui-range-to")||null}getFromTimeDisplay(){const e=this.core.getModalElement();return e?.querySelector(".tp-ui-range-from-time")||null}getToTimeDisplay(){const e=this.core.getModalElement();return e?.querySelector(".tp-ui-range-to-time")||null}getTimezoneDropdown(){const e=this.core.getModalElement();return e?.querySelector(".tp-ui-timezone-dropdown")||null}getTimezoneSelected(){const e=this.core.getModalElement();return e?.querySelector(".tp-ui-timezone-selected")||null}destroy(){this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[]}}class me{animation;modal;config;theme;validation;events;clock;clearButton;plugins=new Map;constructor(e,t){this.animation=new d(e,t),this.modal=new I(e,t),this.config=new z(e,t),this.theme=new W(e,t),this.validation=new U(e,t),this.events=new J(e,t),this.clock=new he(e,t),this.clearButton=new de(e,t);A.getAll().forEach(i=>{const s=i.factory(e,t);this.plugins.set(i.name,s)})}getPlugin(e){return this.plugins.get(e)}destroy(){this.animation.destroy(),this.modal.destroy(),this.config.destroy(),this.theme.destroy(),this.validation.destroy(),this.events.destroy(),this.clock.destroy(),this.clearButton.destroy(),this.plugins.forEach(e=>e.destroy()),this.plugins.clear()}}const pe="is-rippling",ge="ripple-hold";let ve=null;function be(e){const t=e.target,i=t.hasAttribute("data-md3-ripple")?t:t.closest("[data-md3-ripple]");if(!i)return;if(0!==e.button&&"mouse"===e.pointerType)return;const s=i.getBoundingClientRect(),r=2*Math.max(s.width,s.height),o=e.clientX-s.left,n=e.clientY-s.top;i.style.setProperty("--ripple-size",`${r}px`),i.style.setProperty("--ripple-x",`${o}px`),i.style.setProperty("--ripple-y",`${n}px`),i.classList.remove(pe,ge),i.offsetWidth,i.classList.add(pe,ge),i._rippleHold=!0,ve=i}function ye(e){const t=e.target,i=(t.hasAttribute("data-md3-ripple")?t:t.closest("[data-md3-ripple]"))||ve;i&&(i._rippleHold=!1,i.classList.remove(ge),setTimeout(()=>{i.classList.remove(pe),ve===i&&(ve=null)},1e3))}function fe(e){const t=e.currentTarget;t&&t._rippleHold&&(t._rippleHold=!1,t.classList.remove(ge),setTimeout(()=>{t.classList.remove(pe),ve===t&&(ve=null)},1e3))}const Te=["basic","crane-straight","crane","m2","m3-green"];class Me{core;managers;emitter;eventsClickMobileHandler=()=>{};mutliEventsMoveHandler=()=>{};unmountTimeouts=[];constructor(e,t,i){this.core=e,this.managers=t,this.emitter=i}init(){if(!this.core.isDestroyed&&!this.core.isInitialized){try{this.managers.config.updateInputValueWithCurrentTimeOnStart(),this.managers.validation.checkDisabledValuesOnStart()}catch{return void this.core.setIsDestroyed(!0)}this.managers.theme.setTimepickerClassToElement(),this.managers.theme.setInputClassToInputElement(),this.managers.theme.setDataOpenToInputIfDoesntExistInWrapper(),this.managers.theme.setClassTopOpenElement(),this.managers.config.getDisableTime(),this.core.options.ui.inline?.enabled||this.managers.events.handleOpenOnClick(),this.managers.events.handleOpenOnEnterFocus(),this.setupCallbackBridge(),this.core.setIsInitialized(!0)}}setupCallbackBridge(){const{callbacks:e}=this.core.options;e.onOpen&&this.emitter.on("open",e.onOpen),e.onCancel&&this.emitter.on("cancel",e.onCancel),e.onConfirm&&this.emitter.on("confirm",e.onConfirm),e.onUpdate&&this.emitter.on("update",e.onUpdate),e.onSelectHour&&this.emitter.on("select:hour",e.onSelectHour),e.onSelectMinute&&this.emitter.on("select:minute",e.onSelectMinute),e.onSelectAM&&this.emitter.on("select:am",e.onSelectAM),e.onSelectPM&&this.emitter.on("select:pm",e.onSelectPM),e.onError&&this.emitter.on("error",e.onError),e.onTimezoneChange&&this.emitter.on("timezone:change",e.onTimezoneChange),e.onRangeConfirm&&this.emitter.on("range:confirm",e.onRangeConfirm),e.onRangeSwitch&&this.emitter.on("range:switch",e.onRangeSwitch),e.onRangeValidation&&this.emitter.on("range:validation",e.onRangeValidation),e.onClear&&this.emitter.on("clear",e.onClear)}mount(){this.core.isDestroyed||this.core.isOpen||(this.core.isInitialized||this.init(),this.eventsBundle())}unmount(e){const i=((e,t)=>{let i;return(...s)=>{clearTimeout(i),i=setTimeout(()=>{e(...s)},t)}})((...e)=>{if(e.length>2)return;const[i]=e.filter(e=>"boolean"==typeof e),[s]=e.filter(e=>"function"==typeof e);this.core.setIsMobileView(!!this.core.options.ui.mobile);const r=this.core.getModalElement();if(i&&r){const e=this.core.getOkButton();e?.click()}if(this.core.setIsTouchMouseMove(!1),this.core.setIsOpen(!1),this.removeEventListeners(),this.isPopoverMode()){const e=this.managers.getPlugin("wheel");e?.detachPopover()}r&&this.managers.animation.removeAnimationToClose();this.core.getOpenElement().forEach(e=>e?.classList.remove("disabled"));const a=setTimeout(()=>{t()&&(document.body.style.overflowY="",document.body.style.paddingRight="")},o);this.unmountTimeouts.push(a);const l=setTimeout(()=>{const e=this.core.getInput();this.core.options.behavior.focusInputAfterClose&&e?.focus();const t=this.core.getModalElement();t&&t.remove(),this.core.setIsModalRemove(!0)},n);this.unmountTimeouts.push(l),s&&s()},this.core.options.behavior.delayHandler||s);e?i(e):i()}destroy(t){if(this.core.isDestroyed)return;this.clearUnmountTimeouts();const i="function"==typeof t?{callback:t}:t||{},{keepInputValue:s=!1,callback:r}=i,o=this.core.getInput(),n=s?o?.value:null;this.removeEventListeners();const a=this.core.getModalElement();a?.remove();const l=this.core.getOpenElement();l?.forEach(e=>{e&&(e.classList.remove("disabled","active","tp-ui-open-element"),e.classList.remove(...Te))}),o&&(o.classList.remove("tp-ui-invalid-format","invalid-value","error","active","tp-ui-input"),o.removeAttribute("data-open"),o.removeAttribute("data-owner-id"),s&&n&&(o.value=n));const c=this.core.element;c&&(c.classList.remove(...Te),c.classList.remove("error","active","disabled"),c.removeAttribute("data-owner-id"),c.removeAttribute("data-open"),this.core.options.ui.cssClass&&c.classList.remove(this.core.options.ui.cssClass));const u=c?.querySelectorAll(".tp-ui-invalid-text");u?.forEach(e=>e.remove()),this.mutliEventsMoveHandler=()=>{},this.eventsClickMobileHandler=()=>{},this.core.reset(),this.managers.destroy(),this.emitter.clear(),e()||(document.body.style.overflowY="",document.body.style.paddingRight=""),r&&r()}eventsBundle(){if(this.core.isDestroyed)return;if(!this.core.isModalRemove)return;this.clearUnmountTimeouts(),this.core.setIsOpen(!0),this.core.setIsModalRemove(!1),this.setupValidation(),this.disableOpenElements(),this.setupModal(),this.applyExpandedState(),this.managers.modal.setFlexEndToFooterIfNoKeyboardIcon(),this.applyThemeDeferred(),this.managers.animation.setAnimationToOpen(),this.managers.config.getInputValueOnOpenAndSet();const e=this.resolveWheelMode();if(this.emitMissingPluginErrors(),this.initClockOrWheel(e),this.initOptionalPlugins(e),this.bindEventHandlers(e),this.finalizeModal(e),this.isPopoverMode()){const e=this.managers.getPlugin("wheel");e?.attachPopover()}this.managers.modal.setShowClassToBackdrop()}setupValidation(){this.managers.validation.setErrorHandler(),this.managers.validation.removeErrorHandler()}disableOpenElements(){if(!this.core.options.ui.inline?.enabled){if(this.core.getOpenElement().forEach(e=>e?.classList.add("disabled")),!this.isPopoverMode()){const e=this.core.getInput();e?.blur()}}}setupModal(){this.managers.modal.setScrollbarOrNot(),this.managers.modal.setModalTemplate(),this.managers.modal.setNormalizeClass(),this.managers.modal.removeBackdrop()}applyExpandedState(){if(this.core.isMobileView)this.managers.config.updateClockFaceAccessibility(!0);else{const e=this.core.getModalElement(),t=e?.querySelector(".tp-ui-mobile-clock-wrapper"),i=e?.querySelector(".tp-ui-wrapper"),s=e?.querySelectorAll("*");t?.classList.add("expanded"),i?.classList.add("expanded"),s?.forEach(e=>{e.classList.contains("tp-ui-select-time")||e.classList.contains("tp-ui-mobile-clock-wrapper")||e.classList.contains("tp-ui-wrapper")||e.classList.add("expanded")})}}applyThemeDeferred(){setTimeout(()=>{this.managers.theme.setTheme();const e=this.core.getWrapper();e&&this.core.options.ui.cssClass&&e.classList.add(this.core.options.ui.cssClass)},0)}isCompactWheelMode(){return"compact-wheel"===this.core.options.ui.mode}isPopoverMode(){return this.isCompactWheelMode()&&!!this.core.options.wheel?.placement}resolveWheelMode(){const e=this.core.options.ui.mode;return("wheel"===e||"compact-wheel"===e)&&A.has("wheel")}emitMissingPluginErrors(){const e=this.core.options.ui.mode;"wheel"!==e&&"compact-wheel"!==e||A.has("wheel")||this.emitter.emit("error",{error:"WheelPlugin is not registered. Import and register it: PluginRegistry.register(WheelPlugin)"}),this.core.options.range?.enabled&&!A.has("range")&&this.emitter.emit("error",{error:"RangePlugin is not registered. Import and register it: PluginRegistry.register(RangePlugin)"}),this.core.options.timezone?.enabled&&!A.has("timezone")&&this.emitter.emit("error",{error:"TimezonePlugin is not registered. Import and register it: PluginRegistry.register(TimezonePlugin)"})}initClockOrWheel(e){if(e){const e=this.managers.getPlugin("wheel");e&&e.init()}else this.managers.clock.initializeClockSystem(),this.managers.clock.setOnStartCSSClassesIfClockType24h(),this.managers.clock.setClassActiveToHourOnOpen()}initOptionalPlugins(e){const t=this.managers.getPlugin("timezone");t&&t.init();const i=this.managers.getPlugin("range");i&&!e&&i.init()}bindEventHandlers(e){if(this.managers.events.handleCancelButton(),this.managers.events.handleOkButton(),this.managers.clearButton.init(),e||(this.managers.events.handleHourEvents(),this.managers.events.handleMinutesEvents()),this.managers.events.handleKeyboardInput(),this.core.options.ui.enableSwitchIcon&&!e&&this.managers.events.handleSwitchViewButton(),"24h"===this.core.options.clock.type||this.isCompactWheelMode()||(this.managers.events.handleAmClick(),this.managers.events.handlePmClick()),this.core.options.behavior.focusTrap&&this.managers.events.focusTrapHandler(),!this.core.options.ui.inline?.enabled&&(this.managers.events.handleEscClick(),!this.isPopoverMode())){("wheel"===this.core.options.ui.mode||"compact-wheel"===this.core.options.ui.mode)&&this.core.options.wheel?.ignoreOutsideClick||this.managers.events.handleBackdropClick()}}finalizeModal(e){const i=this.core.getModalElement();if(i&&function(e){if(!1===t())return;const i=e||document;i.addEventListener("pointerdown",be),i.addEventListener("pointerup",ye),i.addEventListener("pointercancel",ye),i.querySelectorAll("[data-md3-ripple]").forEach(e=>{e.addEventListener("mouseleave",fe)})}(i),!e){const e=this.core.getClockFace();e&&"undefined"!=typeof requestAnimationFrame&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{e?.classList.add("scale-in")})})}}clearUnmountTimeouts(){this.unmountTimeouts.forEach(clearTimeout),this.unmountTimeouts=[]}removeEventListeners(){if(!1===t())return;D.split(" ").forEach(e=>{document.removeEventListener(e,this.mutliEventsMoveHandler,!1)}),document.removeEventListener("mousedown",this.eventsClickMobileHandler)}}class ke{events=new Map;on(e,t){this.events.has(e)||this.events.set(e,new Set),this.events.get(e).add(t)}once(e,t){const i=s=>{t(s),this.off(e,i)};this.on(e,i)}off(e,t){t?this.events.get(e)?.delete(t):this.events.delete(e)}emit(e,t){this.events.get(e)?.forEach(e=>{e(t)})}clear(){this.events.clear()}hasListeners(e){return(this.events.get(e)?.size??0)>0}}const Ce={type:"12h",incrementHours:1,incrementMinutes:1,autoSwitchToMinutes:!0,disabledTime:void 0,currentTime:void 0},we={mode:"clock",theme:"basic",animation:!0,backdrop:!0,mobile:!1,enableSwitchIcon:!1,editable:!1,enableScrollbar:!1,cssClass:void 0,appendModalSelector:"",iconTemplate:"",iconTemplateMobile:"",inline:void 0,clearButton:!1},Ae={am:"AM",pm:"PM",ok:"OK",cancel:"Cancel",time:"Select time",mobileTime:"Enter Time",mobileHour:"Hour",mobileMinute:"Minute",clear:"Clear"},He={focusInputAfterClose:!1,focusTrap:!0,delayHandler:300,id:void 0},Ee={onOpen:void 0,onCancel:void 0,onConfirm:void 0,onUpdate:void 0,onSelectHour:void 0,onSelectMinute:void 0,onSelectAM:void 0,onSelectPM:void 0,onError:void 0,onTimezoneChange:void 0,onRangeConfirm:void 0,onRangeSwitch:void 0,onRangeValidation:void 0,onClear:void 0},Le={enabled:!1,default:void 0,whitelist:void 0,label:"Timezone"},Se={enabled:!1,minDuration:void 0,maxDuration:void 0,fromLabel:"From",toLabel:"To"},Ie={placement:void 0,hideFooter:void 0,commitOnScroll:void 0,hideDisabled:void 0,ignoreOutsideClick:void 0},xe={clearInput:!0};const $e=new Map;return class{core;managers;lifecycle;emitter;constructor(t,s){if(e())throw new Error("TimepickerUI requires browser environment");const r=this.resolveInputElement(t);if(!r)throw new Error("Input element not found");const o=s?.behavior?.id,n=o||`tp-ui-${"undefined"!=typeof window&&window.crypto&&"function"==typeof window.crypto.randomUUID?window.crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}`,a=this.createWrapperElement(r),l=function(e={}){const t={clock:{...Ce,...e.clock},ui:{...we,...e.ui},labels:{...Ae,...e.labels},behavior:{...He,...e.behavior},callbacks:{...Ee,...e.callbacks},timezone:{...Le,...e.timezone},range:{...Se,...e.range},wheel:{...Ie,...e.wheel},clearBehavior:{...xe,...e.clearBehavior}},i=t.ui.mode;return"wheel"!==i&&"compact-wheel"!==i||(t.wheel={placement:"compact-wheel"===i?"auto":void 0,hideFooter:void 0,commitOnScroll:void 0,ignoreOutsideClick:void 0,...t.wheel}),t}(s||{});if(l.ui.inline?.enabled&&void 0===s?.behavior?.focusTrap&&(l.behavior.focusTrap=!1),l.ui.inline?.enabled){if(!l.ui.inline.containerId)throw new Error("inline.containerId is required when inline mode is enabled");if(!e()){if(!document.getElementById(l.ui.inline.containerId))throw new Error(`Container element with id "${l.ui.inline.containerId}" not found`)}}this.emitter=new ke,this.core=new i(a,l,n,o);const c=this.core.getInput();if(c){const e=x(c,l.clock.type),t=30*Number(e.hour),i=6*Number(e.minutes);this.core.setDegreesHours(t),this.core.setDegreesMinutes(i)}this.managers=new me(this.core,this.emitter),this.lifecycle=new Me(this.core,this.managers,this.emitter),this.managers.config.checkMobileOption(),this.managers.config.preventClockTypeByCurrentTime(),this.setupInternalEventListeners(),$e.set(this.core.instanceId,this)}setupInternalEventListeners(){this.emitter.on("show",()=>{this.core.isDestroyed||this.lifecycle.mount()}),this.emitter.on("cancel",()=>{this.core.isDestroyed||this.lifecycle.unmount()}),this.emitter.on("confirm",e=>{if(!this.core.isDestroyed){if(this.core.options.range?.enabled)return;const t=this.core.getInput();if(t&&e.hour&&e.minutes){const i=e.type?` ${e.type}`:"";t.value=`${e.hour}:${e.minutes}${i}`}e.autoCommit||this.lifecycle.unmount()}}),this.emitter.on("range:confirm",e=>{if(this.core.isDestroyed)return;const t=this.core.getInput();t&&(t.value=`${e.from} - ${e.to}`),this.lifecycle.unmount()})}create(){this.lifecycle.init(),this.core.options.ui.inline?.enabled&&this.lifecycle.mount()}open(e){this.lifecycle.mount(),e&&e()}close(e,t){this.lifecycle.unmount(e?t:void 0),!e&&t&&t()}destroy(e){$e.delete(this.core.instanceId),this.lifecycle.destroy(e)}update(e,t){this.core.isDestroyed||(this.core.updateOptions(e.options),this.managers.config.checkMobileOption(),this.managers.config.getDisableTime(),e.create&&this.create(),t&&t())}getValue(){if(this.core.isDestroyed)return{hour:"",minutes:"",type:void 0,time:"",degreesHours:null,degreesMinutes:null};const e=this.core.getModalElement(),t=this.core.getInput();let i="12",s="00",r="24h"===this.core.options.clock.type?void 0:"AM",o=null,n=null;if(e){const e=this.core.getHour(),t=this.core.getMinutes(),a=this.core.getActiveTypeMode();i=e?.value||"12",s=t?.value||"00",r="24h"===this.core.options.clock.type?void 0:a?.textContent||"AM",o=this.core.degreesHours,n=this.core.degreesMinutes}else if(t){const e=x(t,this.core.options.clock.type);i=e.hour,s=e.minutes,r=e.type,o=30*Number(i),n=6*Number(s)}let a="";return a="24h"===this.core.options.clock.type?`${i.padStart(2,"0")}:${s.padStart(2,"0")}`:`${i}:${s.padStart(2,"0")} ${r}`,{hour:i,minutes:s,type:r,time:a,degreesHours:o,degreesMinutes:n}}setValue(e,t=!0){if(this.core.isDestroyed)return;if(!e||"string"!=typeof e)return;this.core.isInitialized||this.create();const i=e.trim().replace(/[^0-9:APMapm\s]/g,"");try{const e=this.parseTimeString(i);if(this.applyParsedTime(e),this.syncPeriodIndicator(e.typeValue),t){const e=this.core.getInput();e&&(e.value=i)}this.syncClockVisual(e)}catch{return}}parseTimeString(e){if("24h"===this.core.options.clock.type){const t=e.match(/^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/);if(!t)throw new Error("Invalid 24h format. Expected HH:MM");return{hourValue:t[1].padStart(2,"0"),minutesValue:t[2],typeValue:"AM"}}const t=e.match(/^(1[0-2]|[1-9]):([0-5][0-9])\s*(AM|PM)$/i);if(!t)throw new Error("Invalid 12h format. Expected HH:MM AM/PM");return{hourValue:t[1],minutesValue:t[2],typeValue:t[3].toUpperCase()}}applyParsedTime(e){const t=this.core.getHour(),i=this.core.getMinutes();t&&(t.value=e.hourValue,t.setAttribute("aria-valuenow",e.hourValue),this.core.setDegreesHours(30*Number(e.hourValue))),i&&(i.value=e.minutesValue,i.setAttribute("aria-valuenow",e.minutesValue),this.core.setDegreesMinutes(6*Number(e.minutesValue)))}syncPeriodIndicator(e){if("24h"===this.core.options.clock.type)return;const t=this.core.getAM(),i=this.core.getPM();t&&i&&("AM"===e?(t.classList.add("active"),i.classList.remove("active")):(i.classList.add("active"),t.classList.remove("active")))}syncClockVisual(e){const t=this.core.options.ui.mode;if("wheel"===t||"compact-wheel"===t){const t=this.managers.getPlugin("wheel");t&&t.scrollToValue(e.hourValue,e.minutesValue,e.typeValue)}else{const e=this.core.getClockHand();e&&(e.style.transform=`rotateZ(${this.core.degreesHours||0}deg)`)}}getElement(){return this.core.element}get instanceId(){return this.core.instanceId}get options(){return this.core.options}get isInitialized(){return this.core.isInitialized}get isDestroyed(){return this.core.isDestroyed}get hour(){return this.core.getHour()}get minutes(){return this.core.getMinutes()}get okButton(){return this.core.getOkButton()}get cancelButton(){return this.core.getCancelButton()}get clockHand(){return this.core.getClockHand()}on(e,t){this.core.isDestroyed||this.emitter.on(e,t)}once(e,t){this.core.isDestroyed||this.emitter.once(e,t)}off(e,t){this.core.isDestroyed||this.emitter.off(e,t)}resolveInputElement(e){if(!1===t())return null;let i=null;if("string"==typeof e){if(i=document.querySelector(e),!i)return null}else{if(!(e instanceof HTMLElement))return null;i=e}if("INPUT"===i.tagName)return i;return i.querySelector("input")}createWrapperElement(e){if(!1===t())return e;const i=e.parentElement;if("INPUT"===e.tagName&&!i?.classList.contains("tp-ui")){const t=document.createElement("div");return t.className="tp-ui",e.parentNode?.insertBefore(t,e),t.appendChild(e),t}return i&&!i.classList.contains("tp-ui")&&i.classList.add("tp-ui"),i||e}static getById(e){return $e.get(e)}static getAllInstances(){return Array.from($e.values())}static isAvailable(t){return!e()&&("string"==typeof t?null!==document.querySelector(t):t instanceof HTMLElement&&document.contains(t))}static destroyAll(){Array.from($e.values()).forEach(e=>e.destroy()),$e.clear()}}});
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).TimepickerUI=t()}(this,function(){"use strict";const e=()=>"undefined"==typeof window,t=()=>"undefined"!=typeof document;class i{state;constructor(e,t,i,s){this.state={degreesHours:null,degreesMinutes:null,options:t,element:e,instanceId:i,isMobileView:!1,isTouchMouseMove:!1,disabledTime:null,cloned:null,isModalRemove:!0,isOpen:!1,isInitialized:!1,customId:s,eventHandlersRegistered:!1,isDestroyed:!1}}get degreesHours(){return this.state.degreesHours}get degreesMinutes(){return this.state.degreesMinutes}get options(){return this.state.options}get element(){return this.state.element}get instanceId(){return this.state.instanceId}get isMobileView(){return this.state.isMobileView}get isTouchMouseMove(){return this.state.isTouchMouseMove}get disabledTime(){return this.state.disabledTime}get cloned(){return this.state.cloned}get isModalRemove(){return this.state.isModalRemove}get isOpen(){return this.state.isOpen}get isInitialized(){return this.state.isInitialized}get customId(){return this.state.customId}get eventHandlersRegistered(){return this.state.eventHandlersRegistered}get isDestroyed(){return this.state.isDestroyed}setDegreesHours(e){this.state={...this.state,degreesHours:e}}setDegreesMinutes(e){this.state={...this.state,degreesMinutes:e}}setOptions(e){this.state={...this.state,options:e}}setIsMobileView(e){this.state={...this.state,isMobileView:e}}setIsTouchMouseMove(e){this.state={...this.state,isTouchMouseMove:e}}setDisabledTime(e){this.state={...this.state,disabledTime:e}}setCloned(e){this.state={...this.state,cloned:e}}setIsModalRemove(e){this.state={...this.state,isModalRemove:e}}setIsOpen(e){this.state={...this.state,isOpen:e}}setIsInitialized(e){this.state={...this.state,isInitialized:e}}setEventHandlersRegistered(e){this.state={...this.state,eventHandlersRegistered:e}}setIsDestroyed(e){this.state={...this.state,isDestroyed:e}}updateOptions(e){this.state={...this.state,options:{...this.state.options,clock:{...this.state.options.clock,...e.clock||{}},ui:{...this.state.options.ui,...e.ui||{}},labels:{...this.state.options.labels,...e.labels||{}},behavior:{...this.state.options.behavior,...e.behavior||{}},callbacks:{...this.state.options.callbacks,...e.callbacks||{}}}}}reset(){this.state={...this.state,degreesHours:null,degreesMinutes:null,isTouchMouseMove:!1,disabledTime:null,cloned:null,isModalRemove:!0,isOpen:!1,isInitialized:!1,isDestroyed:!0,eventHandlersRegistered:!1}}getModalElement(){return!1===t()?null:document.querySelector(`[data-owner-id="${this.state.instanceId}"]`)}getInput(){return this.state.element?.querySelector("input")}getClockFace(){const e=this.getModalElement();return e?this.state.isMobileView?e.querySelector(".tp-ui-clock-face.mobile"):e.querySelector(".tp-ui-clock-face:not(.mobile)"):null}getClockHand(){const e=this.getModalElement();return e?this.state.isMobileView?e.querySelector(".tp-ui-mobile-clock-wrapper .tp-ui-clock-hand"):e.querySelector(".tp-ui-clock-hand:not(.mobile)"):null}getCircle(){const e=this.getModalElement();return e?this.state.isMobileView?e.querySelector(".tp-ui-mobile-clock-wrapper .tp-ui-circle-hand"):e.querySelector(".tp-ui-circle-hand:not(.mobile)"):null}getTipsWrapper(){const e=this.getModalElement();return e?this.state.isMobileView?e.querySelector(".tp-ui-mobile-clock-wrapper .tp-ui-tips-wrapper"):e.querySelector(".tp-ui-tips-wrapper:not(.mobile)"):null}getTipsWrapperFor24h(){const e=this.getModalElement();return e?this.state.isMobileView?e.querySelector(".tp-ui-mobile-clock-wrapper .tp-ui-tips-wrapper-24h"):e.querySelector(".tp-ui-tips-wrapper-24h:not(.mobile)"):null}getMinutes(){const e=this.getModalElement();return e?.querySelector(".tp-ui-minutes")||null}getHour(){const e=this.getModalElement();return e?.querySelector(".tp-ui-hour")||null}getAM(){const e=this.getModalElement();return e?.querySelector(".tp-ui-am")||null}getPM(){const e=this.getModalElement();return e?.querySelector(".tp-ui-pm")||null}getHourText(){const e=this.getModalElement();return e?.querySelector(".tp-ui-hour-text")||null}getMinutesText(){const e=this.getModalElement();return e?.querySelector(".tp-ui-minute-text")||null}getHeader(){const e=this.getModalElement();return e?.querySelector(".tp-ui-header")||null}getInputWrappers(){const e=this.getModalElement();return e?.querySelectorAll(".tp-ui-input-wrapper")||null}getDots(){const e=this.getModalElement();return e?.querySelector(".tp-ui-dots")||null}getMinutesTips(){const e=this.getModalElement();return e?.querySelector(".tp-ui-minutes-time")||null}getHourTips(){const e=this.getModalElement();return e?.querySelector(".tp-ui-hour-time-12")||null}getAllValueTips(){const e=this.getModalElement();return e?[...e.querySelectorAll(".tp-ui-value-tips"),...e.querySelectorAll(".tp-ui-value-tips-24h")]:[]}getOpenElementData(){const e=this.state.element?.querySelectorAll("[data-open]");if(e?.length>0){const t=[];return e.forEach(({dataset:e})=>t.push(e.open??"")),[...new Set(t)]}return null}getOpenElement(){const e=this.getInput(),t=this.getOpenElementData();return null===t?(e?.setAttribute("data-open","tp-ui-input"),[e]):t.map(e=>this.state.element?.querySelectorAll(`[data-open='${e}']`))[0]??""}getCancelButton(){const e=this.getModalElement();return e?.querySelector(".tp-ui-cancel-btn")||null}getOkButton(){const e=this.getModalElement();return e?.querySelector(".tp-ui-ok-btn")||null}getActiveTypeMode(){const e=this.getModalElement();return e?.querySelector(".tp-ui-type-mode.active")||null}getKeyboardClockIcon(){const e=this.getModalElement();return e?.querySelector(".tp-ui-keyboard-icon-wrapper")||null}getFooter(){const e=this.getModalElement();return e?.querySelector(".tp-ui-footer")||null}getWrapper(){const e=this.getModalElement();return e?.querySelector(".tp-ui-wrapper")||null}}const s=300,r=150,n=400,o=300,a=600,l=401,c=450,u=150,h=400;class d{core;emitter;timeouts=[];constructor(e,t){this.core=e,this.emitter=t,this.setupEventListeners()}setupEventListeners(){this.emitter.on("animation:clock",()=>{this.handleAnimationSwitchTipsMode()})}runWithAnimation(e,t=r){if(this.core.options.ui.animation){const i=setTimeout(e,t);this.timeouts.push(i)}else e()}clearAllTimeouts(){this.timeouts.forEach(clearTimeout),this.timeouts=[]}setAnimationToOpen(){this.clearAllTimeouts();const e=this.core.getModalElement();e?.classList.add("opacity"),this.runWithAnimation(()=>{this.core.getModalElement()?.classList.add("show")})}removeAnimationToClose(){this.clearAllTimeouts();this.core.getModalElement()&&this.runWithAnimation(()=>{const e=this.core.getModalElement();e?.classList.remove("show"),e?.classList.remove("opacity")})}handleAnimationClock(){this.core.options.ui.animation&&this.runWithAnimation(()=>{const e=this.core.getClockFace();e?.classList.add("tp-ui-clock-animation");const t=setTimeout(()=>{this.core.getClockFace()?.classList.remove("tp-ui-clock-animation")},a);this.timeouts.push(t)})}handleAnimationSwitchTipsMode(){const e=this.core.getClockHand();if(!e)return;this.emitter.emit("animation:start",{}),e.classList.add("tp-ui-tips-animation");const t=setTimeout(()=>{this.core.getClockHand()?.classList.remove("tp-ui-tips-animation"),this.emitter.emit("animation:end",{})},l);this.timeouts.push(t)}destroy(){this.clearAllTimeouts()}}const m=(e,t)=>Array.from({length:Number(t)-Number(e)+1},(t,i)=>Number(e)+i),p=(e,t)=>Array.from({length:Number(t)-Number(e)+1},(e,i)=>Number(t)-i).reverse(),g=(e="")=>{const t=e.replace(/(AM|PM|am|pm)/,e=>` ${e}`),i=new Date(`September 20, 2000 ${t}`);return`${i.getHours().toString().padStart(2,"0")}:${i.getMinutes().toString().padStart(2,"0")}`},v=e=>{const[t,i]=e.split(":");return`${t.padStart(2,"0")}:${i.padStart(2,"0")}`},b=(e,t)=>{if(e.length<2)return!1;const i=e.map(e=>{const[i,s]=e.trim().split("-");let r,n;if("12h"===t){if(!/\s?(AM|PM|am|pm)\s?$/.test(i.trim())||!/\s?(AM|PM|am|pm)\s?$/.test(s.trim()))throw new Error(`Invalid 12h format: "${e}"`);r=g(i.trim()),n=g(s.trim())}else{if(/\s?(AM|PM|am|pm)\s?/.test(i.trim())||/\s?(AM|PM|am|pm)\s?/.test(s.trim()))throw new Error(`Invalid 24h format: "${e}"`);r=v(i.trim()),n=v(s.trim())}return{start:r,end:n,original:e}});for(let e=0;e<i.length;e++)for(let t=e+1;t<i.length;t++){const s=i[e],r=i[t];if(s.start<=r.end&&s.end>=r.start||r.start<=s.end&&r.end>=s.start)throw new Error(`Overlapping intervals: "${s.original}" and "${r.original}"`)}return!1};var y='<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M160-200q-33 0-56.5-23.5T80-280v-400q0-33 23.5-56.5T160-760h640q33 0 56.5 23.5T880-680v400q0 33-23.5 56.5T800-200H160Zm0-80h640v-400H160v400Zm160-40h320v-80H320v80ZM200-440h80v-80h-80v80Zm120 0h80v-80h-80v80Zm120 0h80v-80h-80v80Zm120 0h80v-80h-80v80Zm120 0h80v-80h-80v80ZM200-560h80v-80h-80v80Zm120 0h80v-80h-80v80Zm120 0h80v-80h-80v80Zm120 0h80v-80h-80v80Zm120 0h80v-80h-80v80ZM160-280v-400 400Z"/></svg>',f='<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 320q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Z"/></svg>';const T=new class{plugins=new Map;register(e){this.plugins.has(e.name)||this.plugins.set(e.name,e)}getAll(){return Array.from(this.plugins.values())}has(e){return this.plugins.has(e)}get(e){return this.plugins.get(e)}getTemplateProvider(e){return this.plugins.get(e)?.templateProvider}getClearHandler(e){return this.plugins.get(e)?.clearHandler}},M=["00","13","14","15","16","17","18","19","20","21","22","23"],k=["12","1","2","3","4","5","6","7","8","9","10","11"],C=["00","05","10","15","20","25","30","35","40","45","50","55"],w=(e,t)=>{const{ui:{mode:i,animation:s,theme:r,mobile:n},clock:{incrementMinutes:o}}=e,a=n?"mobile":"",l="compact-wheel"===i&&T.has("wheel"),c=("wheel"===i||l)&&T.has("wheel"),u=!!e.range?.enabled&&T.has("range"),h=!!e.timezone?.enabled&&T.has("timezone"),d={mobileClass:a,clockType:e.clock.type||"12h",instanceId:t,isWheelMode:c},m=(e=>{const{range:{enabled:t,fromLabel:i,toLabel:s}}=e;return t&&T.has("range")?`<div class="tp-ui-range-header" role="tablist" aria-label="Range selection"><button type="button" class="tp-ui-range-tab tp-ui-range-from active" role="tab" tabindex="0" aria-selected="true"><span class="tp-ui-range-tab-label">${i}</span><span class="tp-ui-range-tab-value tp-ui-range-from-time">--:--</span></button><button type="button" class="tp-ui-range-tab tp-ui-range-to" role="tab" tabindex="-1" aria-selected="false"><span class="tp-ui-range-tab-label">${s}</span><span class="tp-ui-range-tab-value tp-ui-range-to-time">--:--</span></button></div>`:""})(e),p=((e,t,i)=>{const{timezone:{enabled:s,label:r}}=e;return s&&T.has("timezone")?`<div class="tp-ui-timezone ${t}">\n <span class="tp-ui-timezone-label" id="tp-tz-label-${i}">${r}</span>\n <div class="tp-ui-timezone-dropdown" role="combobox" aria-expanded="false" aria-haspopup="listbox" aria-labelledby="tp-tz-label-${i}" tabindex="0" data-tz-id="${i}">\n <div class="tp-ui-timezone-selected" data-placeholder="${r}...">${r}...</div>\n <svg class="tp-ui-timezone-arrow" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>\n <div class="tp-ui-timezone-menu" role="listbox" aria-labelledby="tp-tz-label-${i}"></div>\n </div>\n </div>`:""})(e,a,t),g=l?"":((e,t)=>{const{labels:{time:i,mobileTime:s,am:r,pm:n,mobileMinute:o,mobileHour:a},ui:{editable:l}}=e,{mobileClass:c,clockType:u,instanceId:h}=t,d=c?s:i;return`<div class="tp-ui-select-time ${c}" id="tp-ui-label-${h}">${d}</div><div class="tp-ui-header ${c}"><div class="tp-ui-wrapper-time ${c} ${"24h"===u?"tp-ui-wrapper-time-24h":""}" role="group" aria-label="${d}"><div class="tp-ui-input-wrapper ${c}"><div class="tp-ui-input-ripple-wrapper ${c}" data-md3-ripple><input name="hour" ${l||c?"":"readonly"} class="tp-ui-hour ${c}" tabindex="0" type="number" min="0" max="${"12h"===u?"12":"23"}" aria-label="${c?a:"Hour"}" role="spinbutton" aria-valuenow="12"></div><div class="tp-ui-hour-text ${c}">${a}</div></div><div class="tp-ui-dots ${c}" aria-hidden="true"><span></span><span></span></div><div class="tp-ui-input-wrapper ${c}"><div class="tp-ui-input-ripple-wrapper ${c}" data-md3-ripple><input name="minutes" ${l||c?"":"readonly"} class="tp-ui-minutes ${c}" tabindex="0" type="number" min="0" max="59" aria-label="${c?o:"Minute"}" role="spinbutton" aria-valuenow="0"></div><div class="tp-ui-minute-text ${c}">${o}</div></div></div>${"24h"!==u?`<div class="tp-ui-wrapper-type-time ${c}" role="group" aria-label="Period"><div class="tp-ui-type-mode tp-ui-am ${c?"mobile":"tp-ui-ripple"}" data-md3-ripple tabindex="0" role="button" aria-label="${r}" aria-pressed="false" data-type="AM">${r}</div><div class="tp-ui-type-mode tp-ui-pm ${c?"mobile":"tp-ui-ripple"}" data-md3-ripple tabindex="0" role="button" aria-label="${n}" aria-pressed="false" data-type="PM">${n}</div></div>`:""}</div>`})(e,d),v=((e,t,i)=>{if(e.isWheelMode){const t=T.getTemplateProvider("wheel");return t?`<div class="tp-ui-mobile-clock-wrapper ${e.mobileClass}">${t(i,e.instanceId)}</div>`:`<div class="tp-ui-mobile-clock-wrapper ${e.mobileClass}"></div>`}return`<div class="tp-ui-mobile-clock-wrapper ${e.mobileClass}"><div class="tp-ui-body ${e.mobileClass}"><div class="tp-ui-clock-face ${e.mobileClass}" role="group" aria-label="Clock"><div class="tp-ui-dot ${e.mobileClass}" aria-hidden="true"></div><div class="tp-ui-clock-hand ${e.mobileClass}" aria-hidden="true"><div class="tp-ui-circle-hand ${e.mobileClass}"></div></div><div class="tp-ui-tips-wrapper ${e.mobileClass}" role="listbox" aria-label="Time"></div>${"24h"===e.clockType?`<div class="tp-ui-tips-wrapper-24h ${e.mobileClass}" role="listbox" aria-label="24h"></div>`:""}</div></div></div>`})(d,0,e),b=l&&!0===e.wheel?.hideFooter?"":((e,t)=>{const{ui:{enableSwitchIcon:i,iconTemplate:s,iconTemplateMobile:r},labels:{cancel:n,ok:o}}=e,a=i?`<div class="tp-ui-keyboard-icon-wrapper ${t}" tabindex="0" role="button" aria-pressed="false" aria-label="Toggle" data-view="desktop">${t?r||`<button aria-label="Clock" type="button" class="tp-ui-keyboard-icon">${r||f}</button>`:`<button aria-label="Keyboard" type="button" class="tp-ui-keyboard-icon">${s||y}</button>`}</div>`:"",l=((e,t)=>{const{ui:{clearButton:i},labels:{clear:s}}=e;return i?`<div class="tp-ui-clear-btn ${t} disabled" data-md3-ripple tabindex="0" role="button" aria-pressed="false" aria-label="${s}" aria-disabled="true">${s}</div>`:""})(e,t);return`<div class="tp-ui-footer ${t}" ${t?'data-view="mobile"':""}>${a}<div class="tp-ui-wrapper-btn ${t}">${l}<div class="tp-ui-cancel-btn ${t}" data-md3-ripple tabindex="0" role="button" aria-pressed="false" aria-label="${n}">${n}</div><div class="tp-ui-ok-btn ${t}" data-md3-ripple tabindex="0" role="button" aria-pressed="false" aria-label="${o}">${o}</div></div></div>`})(e,a);let M;return M=l?" tp-ui-compact-wheel-mode":c?" tp-ui-wheel-mode":"",`<div class="tp-ui-modal normalize ${a}${u?" tp-ui-range-mode":""}${h?" tp-ui-tz-mode":""}${M}" data-theme="${r}" role="dialog" aria-modal="true" aria-labelledby="tp-ui-label-${t}" data-owner-id="${t}" style='transition:${s?"opacity 0.15s linear":"none"}'><div class="tp-ui-wrapper ${a}" tabindex="0">${m}${g}${p}${v}${b}</div><div class="timepicker-announcer sr-only" role="status" aria-live="polite" aria-atomic="true"></div></div>`};class H{core;emitter;timeouts=[];originalOverflow;originalPaddingRight;constructor(e,t){this.core=e,this.emitter=t}runWithTimeout(e,t=s){const i=setTimeout(e,t);this.timeouts.push(i)}clearAllTimeouts(){this.timeouts.forEach(clearTimeout),this.timeouts=[]}isPopoverMode(){return"compact-wheel"===this.core.options.ui.mode&&!!this.core.options.wheel?.placement}clearExistingModal(){if(!1===t())return;const e=this.core.getModalElement();e&&e.remove()}setModalTemplate(){if(!1===t())return;this.clearExistingModal();const e=w(this.core.options,this.core.instanceId);if(this.core.options.ui.inline?.enabled){const t=document.getElementById(this.core.options.ui.inline.containerId);if(!t)return;t.innerHTML="",t.insertAdjacentHTML("beforeend",e);const i=t.querySelector(".tp-ui-modal");if(i){i.classList.add("tp-ui--inline");const{showButtons:e}=this.core.options.ui.inline;!1!==e&&void 0!==e||i.querySelectorAll(".tp-ui-wrapper-btn, .tp-ui-wrapper-btn.mobile").forEach(e=>e.style.display="none")}return}const{appendModalSelector:i}=this.core.options.ui;if(i){const t=document.querySelector(i);t?.insertAdjacentHTML("beforeend",e)}else document.body.insertAdjacentHTML("beforeend",e)}setScrollbarOrNot(){!1!==t()&&(this.core.options.ui.inline?.enabled||this.isPopoverMode()||(this.core.options.ui.enableScrollbar?this.runWithTimeout(()=>{e()||this.runWithTimeout(()=>{"undefined"!=typeof document&&(document.body.style.overflowY=this.originalOverflow||"",document.body.style.paddingRight=this.originalPaddingRight||"")},n)},400):(this.originalOverflow=document.body.style.overflowY,this.originalPaddingRight=document.body.style.paddingRight,document.body.style.paddingRight=`${(()=>{if(!1===t())return 0;const e=document.createElement("div");e.className="tp-ui-measure",document.body.appendChild(e);const i=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),i})()}px`,document.body.style.overflowY="hidden")))}removeBackdrop(){if(this.core.options.ui.inline?.enabled||this.core.options.ui.backdrop)return;const e=this.core.getModalElement(),t=this.core.getOpenElement();e?.classList.add("removed"),t.forEach(e=>e?.classList.add("disabled"))}setNormalizeClass(){const e=this.core.getModalElement();if(!e)return;e.classList.add("tp-ui-normalize");e.querySelectorAll(":scope > div").forEach(e=>e.classList.add("tp-ui-normalize"))}setShowClassToBackdrop(){if(this.core.options.ui.inline?.enabled||this.isPopoverMode())return this.core.getModalElement()?.classList.add("show"),void this.setInitialFocus();this.core.options.ui.backdrop&&this.runWithTimeout(()=>{this.core.getModalElement()?.classList.add("show"),this.setInitialFocus()},r)}setInitialFocus(){if(!this.core.options.behavior.focusTrap)return;const e=this.core.getWrapper();e&&"undefined"!=typeof requestAnimationFrame&&requestAnimationFrame(()=>{e.focus()})}setFlexEndToFooterIfNoKeyboardIcon(){const e=this.core.getFooter();!this.core.options.ui.enableSwitchIcon&&e&&(e.style.justifyContent="flex-end")}destroy(){this.clearAllTimeouts(),e()||this.core.options.ui.inline?.enabled||(document.body.style.overflowY=this.originalOverflow||"",document.body.style.paddingRight=this.originalPaddingRight||""),this.clearExistingModal()}}const A=(e,t,i,s)=>{const r={hour:"12",minutes:"00",type:"24h"===t?void 0:"PM"};if(!e)return r;const n=e.value.trim();if(!i&&!n)return r;if("boolean"==typeof i&&i){const e=new Date,[i,s]=e.toLocaleTimeString().split(":"),r=i.padStart(2,"0");if(/[a-z]/i.test(s)&&"12h"===t){const[e,t]=s.split(" ");return{hour:r,minutes:e,type:t}}return{hour:r,minutes:s,type:void 0}}if("object"==typeof i){const{time:e,locales:r,preventClockType:n}=i,o=e??new Date;if(n&&s){const[e,t]=new Date(o).toLocaleTimeString().split(":");if(/[a-z]/i.test(t)){const[i,s]=t.split(" ");return{hour:e,minutes:i,type:s}}return{hour:e.padStart(2,"0"),minutes:t,type:void 0}}const a=new Date(o).toLocaleTimeString(r||"en-US",{hour:"2-digit",minute:"2-digit",hour12:"12h"===t}),[l,c]=a.split(":");if("12h"===t&&/[a-z]/i.test(c)){const e=c.trim().split(" ");return{hour:l,minutes:e[0],type:e[1]||"AM"}}return{hour:l,minutes:c.replace(/\D/g,""),type:void 0}}const[o,a]=n.split(" "),[l="",c=""]=o.split(":"),u=l.replace(/\D/g,""),h=c.replace(/\D/g,""),d={hour:u.padStart(2,"0"),minutes:h.padStart(2,"0"),type:"12h"===t?a:void 0};if(u.length>2||h.length>2)return{...d,error:"Invalid input: too many digits.",currentHour:l,currentMin:c};if(/[a-z]/i.test(o))return{...d,error:"Input contains invalid letters."};if(n.includes(" ")&&(!a||n.length>8||"AM"!==a&&"PM"!==a))return{...d,error:"Invalid AM/PM format or length.",currentLength:n.length,currentType:a};const m=Number(u),p=Number(h);if("12h"===t){if(m<1||m>12||p<0||p>59||"AM"!==a&&"PM"!==a)return{...d,error:"Invalid 12h time.",currentHour:m,currentMin:p,currentType:a}}else if(m<0||m>23||p<0||p>59)return{...d,error:"Invalid 24h time.",currentHour:m,currentMin:p};return d},E=(e,t,i)=>{const s=Number(e);if(Number.isNaN(s))return!1;switch(t){case"hour":return"24h"===i?s>=0&&s<=23:s>0&&s<=12;case"minutes":return s>=0&&s<=59;default:return}},L="tp-ui",S="mousedown mouseup mousemove mouseleave mouseover touchstart touchmove touchend",I="active";class x{core;emitter;constructor(e,t){this.core=e,this.emitter=t}isCurrentTimeEnabled(e){const t=this.core.options.clock.currentTime;return"boolean"==typeof t?t:!!t?.[e]}preventClockTypeByCurrentTime(){if(!this.isCurrentTimeEnabled("preventClockType"))return;const e=this.core.getInput();if(!e)return;const{currentTime:t,clockType:i}={currentTime:this.core.options.clock.currentTime,clockType:this.core.options.clock.type},{type:s}=A(e,i,t,!0);this.core.updateOptions({clock:{type:s?"12h":"24h"}})}updateInputValueWithCurrentTimeOnStart(){if(!this.isCurrentTimeEnabled("updateInput"))return;const e=this.core.getInput();if(!e)return;const{hour:t,minutes:i,type:s}=A(e,this.core.options.clock.type,this.core.options.clock.currentTime);e.value=s?`${t}:${i} ${s}`:`${t}:${i}`}getInputValueOnOpenAndSet(){const e=this.core.getInput();if(!e)return;const t=A(e,this.core.options.clock.type,this.core.options.clock.currentTime),i=this.core.getHour(),s=this.core.getMinutes(),r=this.core.getActiveTypeMode(),n=this.core.getAM();if(void 0===t){i&&(i.value="12"),s&&(s.value="00");const e={hour:i?.value||"12",minutes:s?.value||"00",type:r?.dataset.type,degreesHours:this.core.degreesHours,degreesMinutes:this.core.degreesMinutes};this.emitter.emit("open",e);const t=!0===this.core.options.range?.enabled;return void("24h"!==this.core.options.clock.type&&n&&!t&&n.classList.add(I))}let[o,a,l]=e.value.split(":").join(" ").split(" ");0===e.value.length&&(o=t.hour,a=t.minutes,l=t.type),"24h"===this.core.options.clock.type||l||(l=t.type||"AM"),i&&(i.value=o.padStart(2,"0")),s&&(s.value=a.padStart(2,"0"));const c=this.core.getModalElement(),u=c?.querySelector(`[data-type='${l}']`);"24h"!==this.core.options.clock.type&&u&&u.classList.add(I);const h={...t,type:r?.dataset.type,degreesHours:this.core.degreesHours,degreesMinutes:this.core.degreesMinutes};this.emitter.emit("open",h)}getInputValue(e,t,i){return A(e,t,i)}destroy(){}}class P{core;emitter;isAnimating=!1;constructor(e,t){this.core=e,this.emitter=t,this.setupEventListeners()}setupEventListeners(){this.emitter.on("switch:view",()=>{this.toggleMobileClockFace()})}checkMobileOption(){this.core.setIsMobileView(!!this.core.options.ui.mobile),this.core.options.ui.mobile&&this.core.updateOptions({ui:{editable:!0}})}toggleMobileClockFace(){if(this.isAnimating)return;const e=this.core.getModalElement();if(!e)return;const t=e.querySelector(".tp-ui-wrapper"),i=this.core.getKeyboardClockIcon(),s=e.querySelector(".tp-ui-mobile-clock-wrapper"),r=e.querySelectorAll("*"),n=e.querySelector(".tp-ui-select-time"),o=this.core.getHour(),a=this.core.getMinutes(),l=this.core.getClockFace();if(!t)return;const c=t.classList.contains("expanded"),u=this.core.isMobileView;c?this.collapseClockFace(t,s,r,i,n,o,a,l,u):this.expandClockFace(t,s,r,i,n,o,a,l)}collapseClockFace(e,t,i,s,r,n,o,a,l){if(this.isAnimating=!0,"undefined"!=typeof requestAnimationFrame){const c="undefined"!=typeof window&&window.matchMedia("(orientation: landscape) and (min-width: 320px) and (max-width: 825px)").matches;requestAnimationFrame(()=>{c&&e instanceof HTMLElement?this.collapseLandscape(e,t,i,s,r,n,o,a,l):this.collapsePortrait(e,t,i,s,r,n,o,a,l)})}else this.switchView(r,s,n,o,!0),this.isAnimating=!1;s?.setAttribute("aria-label","Show clock face"),s?.setAttribute("aria-pressed","false")}collapseLandscape(e,t,i,s,r,n,o,a,l){a?.classList.remove("scale-in");const c=this.core.getModalElement(),u=this.getMobileLandscapeHeight(c);e.style.width="328px",e.style.height=u,t instanceof HTMLElement&&(t.style.height="0",t.style.opacity="0",t.style.transform="scale(0)"),setTimeout(()=>{this.applyMobileClasses(e,t,i,r,l),e.classList.add("mobile"),t&&t.classList.add("mobile"),this.switchView(r,s,n,o,!0),requestAnimationFrame(()=>{e.style.width="",e.style.height="",t instanceof HTMLElement&&(t.style.height="",t.style.opacity="",t.style.transform=""),this.isAnimating=!1})},h)}collapsePortrait(e,t,i,s,r,n,o,a,l){l?a?.classList.remove("scale-in"):a?.classList.add("scale-in"),t?.classList.remove("expanded"),l&&t?.classList.add("mobile"),requestAnimationFrame(()=>{this.applyMobileClasses(e,t,i,r,l),this.switchView(r,s,n,o,!0),setTimeout(()=>{this.isAnimating=!1},c)})}applyMobileClasses(e,t,i,s,r){e.classList.remove("expanded"),t?.classList.remove("expanded"),r&&(e.classList.add("mobile"),t?.classList.add("mobile")),i.forEach(i=>{i!==t&&i!==e&&i!==s&&(i.classList.remove("expanded"),r&&i.classList.add("mobile"))}),s&&(s.classList.remove("expanded"),r&&s.classList.add("mobile"))}expandClockFace(e,t,i,s,r,n,o,a){this.isAnimating=!0;const l=o?.classList.contains("active");l&&o?this.emitter.emit("select:minute",{minutes:o.value}):n&&this.emitter.emit("select:hour",{hour:n.value}),i.forEach(i=>{i!==t&&i!==e&&i!==r&&(i.classList.remove("mobile"),i.classList.add("expanded"))}),r&&(r.classList.remove("mobile"),r.classList.add("expanded")),this.switchView(r,s,n,o,!1),"undefined"!=typeof requestAnimationFrame?requestAnimationFrame(()=>{e.classList.remove("mobile"),e.classList.add("expanded"),requestAnimationFrame(()=>{t&&(t.classList.remove("mobile"),t.classList.add("expanded")),a&&a.classList.remove("scale-in"),setTimeout(()=>{a&&a.classList.add("scale-in")},u),setTimeout(()=>{this.isAnimating=!1},c)})}):this.isAnimating=!1,s?.setAttribute("aria-label","Hide clock face"),s?.setAttribute("aria-pressed","true")}switchView(e,t,i,s,r){const n=this.core.getModalElement(),o=n?.querySelector(".tp-ui-hour-text"),a=n?.querySelector(".tp-ui-minute-text"),l=t?.querySelector(".tp-ui-keyboard-icon"),c=this.core.getInputWrappers(),u=this.core.getHeader(),h=n?.querySelector(".tp-ui-wrapper-type-time"),d=n?.querySelector(".tp-ui-am"),m=n?.querySelector(".tp-ui-pm"),p=n?.querySelectorAll(".tp-ui-input-ripple-wrapper"),{iconTemplate:g,iconTemplateMobile:v}=this.core.options.ui,{time:b,mobileTime:T}=this.core.options.labels;r?(e?.classList.add("mobile"),t?.classList.add("mobile"),i?.classList.add("mobile"),i?.removeAttribute("readonly"),s?.classList.add("mobile"),s?.removeAttribute("readonly"),o?.classList.add("mobile"),a?.classList.add("mobile"),u?.classList.add("mobile"),h?.classList.add("mobile"),d?.classList.add("mobile"),d?.classList.remove("tp-ui-ripple"),m?.classList.add("mobile"),m?.classList.remove("tp-ui-ripple"),c?.forEach(e=>{e.classList.add("mobile")}),p?.forEach(e=>{e.classList.add("mobile")}),e&&T&&(e.textContent=T),l&&(l.innerHTML=v||f),this.updateClockFaceAccessibility(!0)):(e?.classList.remove("mobile"),t?.classList.remove("mobile"),i?.classList.remove("mobile"),s?.classList.remove("mobile"),this.core.options.ui.editable||(i?.setAttribute("readonly",""),s?.setAttribute("readonly","")),o?.classList.remove("mobile"),a?.classList.remove("mobile"),u?.classList.remove("mobile"),h?.classList.remove("mobile"),d?.classList.remove("mobile"),d?.classList.add("tp-ui-ripple"),m?.classList.remove("mobile"),m?.classList.add("tp-ui-ripple"),c?.forEach(e=>{e.classList.remove("mobile")}),p?.forEach(e=>{e.classList.remove("mobile")}),e&&b&&(e.textContent=b),l&&(l.innerHTML=g||y),this.updateClockFaceAccessibility(!1))}updateClockFaceAccessibility(e){const t=this.core.getClockFace();if(!t)return;const i=t.querySelector(".tp-ui-tips-wrapper"),s=t.querySelector(".tp-ui-tips-wrapper-24h"),r=t.querySelectorAll(".tp-ui-tip");e?(t.setAttribute("aria-hidden","true"),i?.setAttribute("aria-hidden","true"),s?.setAttribute("aria-hidden","true"),r.forEach(e=>{e.setAttribute("tabindex","-1"),e.setAttribute("aria-hidden","true")})):(t.removeAttribute("aria-hidden"),i?.removeAttribute("aria-hidden"),s?.removeAttribute("aria-hidden"),r.forEach(e=>{e.setAttribute("tabindex","0"),e.removeAttribute("aria-hidden")}))}getMobileLandscapeHeight(e){return e?.classList.contains("tp-ui-tz-mode")?"326px":e?.classList.contains("tp-ui-range-mode")?"287px":"258px"}destroy(){}}const $=(e,t,i,s)=>{if(e){if(Array.isArray(e)&&e.length>0){return!e.map(e=>E(e,t,i)).some(e=>!1===e)}if("string"==typeof e||"number"==typeof e){return!!E(e,t,i)}}};class D{core;constructor(e){this.core=e}getDisableTime(){const e=(e=>{if(!e)return;const{disabledTime:t,type:i}=e.clock;if(!t||!Object.keys(t).length)return;const{hours:s,minutes:r,interval:n}=t;if(n){delete t.hours,delete t.minutes;const e=Array.isArray(n)?n:[n];if(!i)throw new Error("clockType required for interval");return b(e,i),{value:e.map(e=>{const[t,s]=e.trim().split("-"),{hour:r,minutes:n,type:o}=A({value:t.trim()},i),{hour:a,minutes:l,type:c}=A({value:s.trim()},i);let u=m(r,a).map(e=>0===Number(e)?"00":String(Number(e)));const h=[],d=Number(n),g=Number(l);if(c===o)return d>0&&g<=0?(h.push(u[0],u[u.length-1]),u=u.slice(1,-1)):g<59&&g>0&&d<=0?(h.push(void 0,u[u.length-1]),u=u.slice(0,-1)):g>0&&d>0?(h.push(u[0],u[u.length-1]),u=u.slice(1,-1)):0===g&&0===d&&(h.push(void 0,u[u.length-1]),u.pop()),{removedStartedHour:void 0!==h[0]&&Number(h[0])<=9?`0${h[0]}`:h[0],removedEndHour:void 0!==h[1]&&Number(h[1])<=9?`0${h[1]}`:h[1],rangeArrHour:u,startMinutes:m(n,59).map(e=>Number(e)<=9?`0${e}`:`${e}`),endMinutes:p(0,l).map(e=>Number(e)<=9?`0${e}`:`${e}`),startType:o,endType:c};{const e=m(r,12).map(String),t=p(1,a).map(String),i=[],s=[];return d>0&&g<=0?(s.push(t[t.length-1]),i.push(e[0]),t.pop(),e.shift()):g<59&&g>0&&d<=0?(i.push(e[0]),s.push(t[t.length-1]),t.pop()):g>0&&d>0?(s.push(t[t.length-1]),i.push(e[0]),t.pop(),e.shift()):0===g&&0===d&&(s.push(t[t.length-1]),i.push(e[0]),t.pop()),{startType:o,endType:c,amHours:e,pmHours:t,removedAmHour:i[0]&&Number(i[0])<=9?`0${i[0]}`:i[0],removedPmHour:s[0]&&Number(s[0])<=9?`0${s[0]}`:s[0],startMinutes:0===Number(n)?[]:m(n,59).map(e=>Number(e)<=9?`0${e}`:`${e}`),endMinutes:p(0,l).map(e=>Number(e)<=9?`0${e}`:`${e}`)}}}).reduce((e,t)=>(Object.entries(t).forEach(([t,i])=>{Array.isArray(i)?e[t]=Array.isArray(e[t])?[...e[t],...i]:[...i]:e[t]=i}),e),{isInterval:!0,clockType:i,intervals:e})}}return s?.forEach(e=>{if("12h"===i&&Number(e)>12)throw new Error("The disabled hours value has to be less than 13");if("24h"===i&&Number(e)>23)throw new Error("The disabled hours value has to be less than 24")}),r?.forEach(e=>{if(Number(e)>59)throw new Error("The disabled minutes value has to be less than 60")}),{value:{hours:s?.map(e=>"00"===e||0===Number(e)?`0${Number(e)}`:`${Number(e)}`),minutes:r?.map(e=>Number(e)<=9?`0${e}`:`${e}`)}}})(this.core.options);this.core.setDisabledTime(e||null)}destroy(){}}class V{inputValueHandler;mobileViewHandler;disabledTimeHandler;core;constructor(e,t){this.core=e,this.inputValueHandler=new x(e,t),this.mobileViewHandler=new P(e,t),this.disabledTimeHandler=new D(e)}preventClockTypeByCurrentTime(){this.inputValueHandler.preventClockTypeByCurrentTime()}updateInputValueWithCurrentTimeOnStart(){this.inputValueHandler.updateInputValueWithCurrentTimeOnStart()}getInputValueOnOpenAndSet(){this.inputValueHandler.getInputValueOnOpenAndSet()}getInputValue(e,t,i){return this.inputValueHandler.getInputValue(e,t,i)}checkMobileOption(){this.mobileViewHandler.checkMobileOption()}toggleMobileClockFace(){this.mobileViewHandler.toggleMobileClockFace()}updateClockFaceAccessibility(e){this.mobileViewHandler.updateClockFaceAccessibility(e)}getDisableTime(){this.disabledTimeHandler.getDisableTime()}destroy(){this.inputValueHandler.destroy(),this.mobileViewHandler.destroy(),this.disabledTimeHandler.destroy()}}class O{core;emitter;constructor(e,t){this.core=e,this.emitter=t}setTheme(){const e=this.core.getModalElement();if(!e)return;const{theme:t}=this.core.options.ui;t&&e.setAttribute("data-theme",t)}setInputClassToInputElement(){const e=this.core.getInput();var t,i;e&&(i="tp-ui-input",(t=e)&&t.classList.contains(i)||e.classList.add("tp-ui-input"))}setDataOpenToInputIfDoesntExistInWrapper(){const e=this.core.getOpenElementData(),t=this.core.getInput();null===e&&t&&t.setAttribute("data-open","tp-ui-input")}setClassTopOpenElement(){const e=this.core.getOpenElement();for(const t of e)t&&t.classList.add("tp-ui-open-element")}setTimepickerClassToElement(){const e=this.core.element;if(!e)return;e.classList.add(L);const t=this.core.options.ui.cssClass;t&&t!==L&&e.classList.add(t)}destroy(){const e=this.core.getModalElement();e&&e.removeAttribute("data-theme")}}class F extends Error{code;constructor(e,t){super(`[TimepickerUI] ${e}`),this.code=t,this.name="TimepickerError",Object.setPrototypeOf(this,F.prototype)}}const q="INVALID_PARAMETER";class B{core;emitter;constructor(e,t){this.core=e,this.emitter=t}setErrorHandler(){const e=this.core.getInput();if(!e)return!0;const{error:i,currentHour:s,currentMin:r,currentType:n,currentLength:o}=A(e,this.core.options.clock.type);if(this.removeErrorHandler(),i){if(!1===t())return!1;const a=document.createElement("div");a.classList.add("tp-ui-invalid-text"),a.innerHTML="<b>Invalid Time Format</b>",e.classList.add("tp-ui-invalid-format"),e.nextElementSibling?.classList.contains("tp-ui-invalid-text")||e.after(a);const l={error:i,rejectedHour:void 0,rejectedMinute:void 0,inputHour:s,inputMinute:r,inputType:n,inputLength:o};return this.emitter.emit("error",l),!1}return!0}removeErrorHandler(){const e=this.core.getInput();if(!e)return;e.classList.remove("tp-ui-invalid-format");const t=e.nextElementSibling;t?.classList.contains("tp-ui-invalid-text")&&t.remove()}checkDisabledValuesOnStart(){if(!this.core.options.clock.disabledTime)return;const{disabledTime:e,type:t}=this.core.options.clock;if(e.interval){if(!t)throw new F("clockType is required when using disabledTime.interval",q);const i=Array.isArray(e.interval)?e.interval:[e.interval];try{b(i,t)}catch(e){throw new F(`Invalid disabledTime.interval: ${e.message}`,q)}return}const{hours:i,minutes:s}=e,r=!i||$(i,"hour",t),n=!s||$(s,"minutes",t);if(!r||!n)throw new F("Invalid hours or minutes in disabledTime option",q)}destroy(){this.removeErrorHandler()}}const z=(e,t)=>{if(!e)return;const i=e.querySelector(".timepicker-announcer");i&&(i.textContent="",setTimeout(()=>{i.textContent=t},100))},W=(e,t)=>{e&&e.setAttribute("aria-pressed",String(t))};class N{core;emitter;cleanupHandlers=[];constructor(e,t){this.core=e,this.emitter=t}handleOpenOnClick(){const e=this.core.getOpenElement();if(!e)return;const t=e=>{if(this.core.isDestroyed)return;const t=e.currentTarget;t?.classList.contains("disabled")||this.emitter.emit("show",{})};e.forEach(e=>{e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))})}handleCancelButton(){const e=this.core.getCancelButton();if(!e)return;const t=()=>{this.core.isDestroyed||this.emitter.emit("cancel",{})};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))}handleOkButton(){const e=this.core.getOkButton();if(!e)return;const t=()=>{if(this.core.isDestroyed)return;const e=this.core.getHour(),t=this.core.getMinutes();if(e&&t){const i=this.core.getActiveTypeMode();return void this.emitter.emit("confirm",{hour:e.value,minutes:t.value,type:i?.textContent||void 0})}const i=this.core.getModalElement();if(i){const e=i.querySelector(".tp-ui-wheel-hours .tp-ui-wheel-item.is-center"),t=i.querySelector(".tp-ui-wheel-minutes .tp-ui-wheel-item.is-center"),s=i.querySelector(".tp-ui-wheel-ampm .tp-ui-wheel-item.is-center");this.emitter.emit("confirm",{hour:e?.getAttribute("data-value")??void 0,minutes:t?.getAttribute("data-value")??void 0,type:s?.getAttribute("data-value")??void 0})}};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))}handleAmClick(){const e=this.core.getAM();if(!e)return;const t=()=>{if(this.core.isDestroyed)return;const t=this.core.getPM();e.classList.add("active"),t?.classList.remove("active"),W(e,!0),W(t,!1);const i=this.core.getModalElement();z(i,"AM selected"),this.emitter.emit("select:am",{});const s=this.core.getHour(),r=this.core.getMinutes();this.emitter.emit("update",{hour:s?.value,minutes:r?.value,type:"AM"})};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))}handlePmClick(){const e=this.core.getPM();if(!e)return;const t=()=>{if(this.core.isDestroyed)return;const t=this.core.getAM();e.classList.add("active"),t?.classList.remove("active"),W(e,!0),W(t,!1);const i=this.core.getModalElement();z(i,"PM selected"),this.emitter.emit("select:pm",{});const s=this.core.getHour(),r=this.core.getMinutes();this.emitter.emit("update",{hour:s?.value,minutes:r?.value,type:"PM"})};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))}handleSwitchViewButton(){const e=this.core.getKeyboardClockIcon();if(!e)return;const t=()=>{this.core.isDestroyed||this.emitter.emit("switch:view",{})};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))}destroy(){this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[]}}const R=(e,t,i)=>Math.max(t,Math.min(i,e));class U{core;emitter;cleanupHandlers=[];constructor(e,t){this.core=e,this.emitter=t}handleHourEvents(){const e=this.core.getHour();if(!e)return;const t=()=>{if(this.core.isDestroyed)return;e.classList.add("active");const t=this.core.getMinutes();t?.classList.remove("active"),this.emitter.emit("select:hour",{hour:e.value});const i=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:e.value,minutes:t?.value,type:i?.textContent||void 0})};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t));let i=e.value;const s=()=>{if(this.core.isDestroyed)return;if(e.hasAttribute("readonly"))return;const t="12h"===this.core.options.clock.type,s=((e,t)=>{if(""===e)return"";const i=parseInt(e,10);return Number.isNaN(i)?"":R(i,t?1:0,t?12:23).toString().padStart(2,"0")})(e.value,t);if(e.value=s,e.setAttribute("aria-valuenow",s),e.value!==i){i=e.value,this.emitter.emit("animation:clock",{}),this.emitter.emit("select:hour",{hour:e.value});const t=this.core.getMinutes(),s=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:e.value,minutes:t?.value,type:s?.textContent||void 0})}};e.addEventListener("blur",s),this.cleanupHandlers.push(()=>e.removeEventListener("blur",s))}handleMinutesEvents(){const e=this.core.getMinutes();if(!e)return;const t=()=>{if(this.core.isDestroyed)return;e.classList.add("active");const t=this.core.getHour();t?.classList.remove("active"),this.emitter.emit("select:minute",{minutes:e.value});const i=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:t?.value,minutes:e.value,type:i?.textContent||void 0})};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t));let i=e.value;const s=()=>{if(this.core.isDestroyed)return;if(e.hasAttribute("readonly"))return;const t=(e=>{if(""===e)return"";const t=parseInt(e,10);return Number.isNaN(t)?"":R(t,0,59).toString().padStart(2,"0")})(e.value);if(e.value=t,e.setAttribute("aria-valuenow",t),e.value!==i){i=e.value,this.emitter.emit("animation:clock",{}),this.emitter.emit("select:minute",{minutes:e.value});const t=this.core.getHour(),s=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:t?.value,minutes:e.value,type:s?.textContent||void 0})}};e.addEventListener("blur",s),this.cleanupHandlers.push(()=>e.removeEventListener("blur",s))}destroy(){this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[]}}class Z{core;emitter;cleanupHandlers=[];constructor(e,t){this.core=e,this.emitter=t}handleOpenOnEnterFocus(){const e=this.core.getInput();if(!e)return;const t=e=>{"Enter"!==e.key||this.core.isDestroyed||this.core.isOpen||this.emitter.emit("show",{})};e.addEventListener("keydown",t),this.cleanupHandlers.push(()=>e.removeEventListener("keydown",t))}handleEscClick(){if(!1===t())return;const e=e=>{this.core.isDestroyed||"Escape"===e.key&&this.emitter.emit("cancel",{})};document.addEventListener("keydown",e),this.cleanupHandlers.push(()=>document.removeEventListener("keydown",e))}handleKeyboardInput(){const e=this.core.getHour(),t=this.core.getMinutes();if(e){const t=t=>{if(this.core.isDestroyed)return;if("ArrowUp"!==t.key&&"ArrowDown"!==t.key)return;t.preventDefault();const i=parseInt(e.value)||0,s=parseInt(e.getAttribute("max")||"23"),r="12h"===this.core.options.clock.type;let n;n="ArrowUp"===t.key?r?i>=12?1:i+1:i>=s?0:i+1:r?i<=1?12:i-1:i<=0?s:i-1,e.value=n.toString().padStart(2,"0"),e.setAttribute("aria-valuenow",e.value);const o=this.core.getModalElement();z(o,`Hour: ${e.value}`),this.emitter.emit("animation:clock",{}),this.emitter.emit("select:hour",{hour:e.value});const a=this.core.getMinutes(),l=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:e.value,minutes:a?.value,type:l?.textContent||void 0})};e.addEventListener("keydown",t),this.cleanupHandlers.push(()=>e.removeEventListener("keydown",t))}if(t){const e=e=>{if(this.core.isDestroyed)return;if("ArrowUp"!==e.key&&"ArrowDown"!==e.key)return;e.preventDefault();const i=parseInt(t.value)||0;let s;s="ArrowUp"===e.key?i>=59?0:i+1:i<=0?59:i-1,t.value=s.toString().padStart(2,"0"),t.setAttribute("aria-valuenow",t.value);const r=this.core.getModalElement();z(r,`Minutes: ${t.value}`),this.emitter.emit("animation:clock",{}),this.emitter.emit("select:minute",{minutes:t.value});const n=this.core.getHour(),o=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:n?.value,minutes:t.value,type:o?.textContent||void 0})};t.addEventListener("keydown",e),this.cleanupHandlers.push(()=>t.removeEventListener("keydown",e))}}focusTrapHandler(){if(!1===t())return;const e=this.core.getWrapper();if(!e)return;const i=t=>{if(this.core.isDestroyed)return;if("Tab"!==t.key)return;const i=e.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'),s=i[0],r=i[i.length-1];t.shiftKey&&document.activeElement===s?(r?.focus(),t.preventDefault()):t.shiftKey||document.activeElement!==r||(s?.focus(),t.preventDefault())};e.addEventListener("keydown",i),this.cleanupHandlers.push(()=>e.removeEventListener("keydown",i))}destroy(){this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[]}}class Y{core;emitter;cleanupHandlers=[];constructor(e,t){this.core=e,this.emitter=t}handleBackdropClick(){const e=this.core.getModalElement();if(!e)return;const t=t=>{this.core.isDestroyed||t.target===e&&this.emitter.emit("cancel",{})};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t))}handleMoveHand(){if(!1===t())return;const e=e=>{this.core.isDestroyed||e.preventDefault()};document.addEventListener("mousedown",e,!1),document.addEventListener("touchstart",e,{passive:!1}),this.cleanupHandlers.push(()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)})}destroy(){this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[]}}class j{buttonHandlers;inputHandlers;keyboardHandlers;modalHandlers;constructor(e,t){this.buttonHandlers=new N(e,t),this.inputHandlers=new U(e,t),this.keyboardHandlers=new Z(e,t),this.modalHandlers=new Y(e,t)}handleOpenOnClick(){this.buttonHandlers.handleOpenOnClick()}handleOpenOnEnterFocus(){this.keyboardHandlers.handleOpenOnEnterFocus()}handleCancelButton(){this.buttonHandlers.handleCancelButton()}handleOkButton(){this.buttonHandlers.handleOkButton()}handleBackdropClick(){this.modalHandlers.handleBackdropClick()}handleEscClick(){this.keyboardHandlers.handleEscClick()}handleAmClick(){this.buttonHandlers.handleAmClick()}handlePmClick(){this.buttonHandlers.handlePmClick()}handleHourEvents(){this.inputHandlers.handleHourEvents()}handleMinutesEvents(){this.inputHandlers.handleMinutesEvents()}handleKeyboardInput(){this.keyboardHandlers.handleKeyboardInput()}focusTrapHandler(){this.keyboardHandlers.focusTrapHandler()}handleMoveHand(){this.modalHandlers.handleMoveHand()}handleSwitchViewButton(){this.buttonHandlers.handleSwitchViewButton()}destroy(){this.buttonHandlers.destroy(),this.inputHandlers.destroy(),this.keyboardHandlers.destroy(),this.modalHandlers.destroy()}}class K{emitter;getClockSystem;setHoursToClock;setMinutesToClock;updateAmPm;convertDisabledTime;constructor(e,t,i,s,r,n){this.emitter=e,this.getClockSystem=t,this.setHoursToClock=i,this.setMinutesToClock=s,this.updateAmPm=r,this.convertDisabledTime=n}setup(){this.emitter.on("select:hour",({hour:e})=>{this.emitter.emit("animation:clock",{}),this.setHoursToClock(e||null)}),this.emitter.on("select:minute",({minutes:e})=>{this.emitter.emit("animation:clock",{}),this.setMinutesToClock(e||null)}),this.emitter.on("select:am",()=>{this.updateAmPm()}),this.emitter.on("select:pm",()=>{this.updateAmPm()}),this.emitter.on("animation:start",()=>{this.getClockSystem()?.blockInteractions()}),this.emitter.on("animation:end",()=>{this.getClockSystem()?.unblockInteractions()}),this.emitter.on("range:switch",e=>{this.refreshDisabledTimeForRange(e.disabledTime)})}refreshDisabledTimeForRange(e){const t=this.getClockSystem();if(!t)return;const i=this.convertDisabledTime();let s=i;if(e){const t=[...i?.hours||[],...e.hours||[]],r=[...i?.minutes||[],...e.minutes||[]];s={...i,hours:t.length>0?t:void 0,minutes:r.length>0?r:void 0,rangeFromType:e.fromType,rangeFromHour:e.fromHour}}t.updateDisabledTime(s)}}class X{static angleToIndex(e,t,i){const s=Math.round(e/30)%12;if("24h"===t){if(i){const e=s+12;return 12===e?0:e}return 0===s?12:s}return 0===s?12:s}static indexToValue(e,t){if("24h"===t)return e.toString().padStart(2,"0");let i=e;return 0===i&&(i=12),i>12&&(i-=12),i.toString().padStart(2,"0")}static indexToAngle(e,t){if("24h"===t)return e>=12?(e-12)%12*30:e%12*30;return(0===e?12:e)%12*30}static isDisabled(e,t,i){return!!i&&(i.isInterval&&i.intervals&&i.clockType?this.isDisabledByInterval(e,t,i):void 0!==i.rangeFromType&&void 0!==i.rangeFromHour?this.isDisabledForRange12h(e,t,i):!!i.hours&&i.hours.some(t=>String(t)===e||Number(t)===Number(e)||t===e))}static isDisabledForRange12h(e,t,i){const s=i.rangeFromType,r=i.rangeFromHour,n=parseInt(e,10);return null!==s&&void 0!==r&&("AM"===t&&"PM"===s||("AM"===t&&"AM"===s?12!==r&&(12===n||n<r):("PM"!==t||"AM"!==s)&&("PM"===t&&"PM"===s&&(12!==r&&(12===n||n<r)))))}static isDisabledByInterval(e,t,i){if(!i.intervals)return!1;for(let s=0;s<60;s++){const r=s.toString().padStart(2,"0");if(!this.isTimeInIntervals(e,r,t,i.intervals,i.clockType))return!1}return!0}static isTimeInIntervals(e,t,i,s,r){const n="12h"===r?`${e}:${t} ${i}`:`${e}:${t}`;for(const e of s){const[t,i]=e.split("-").map(e=>e.trim());if(this.isTimeBetween(n,t,i,r))return!0}return!1}static isTimeBetween(e,t,i,s){const r=this.timeToMinutes(e,s),n=this.timeToMinutes(t,s),o=this.timeToMinutes(i,s);return r>=n&&r<=o}static timeToMinutes(e,t){if("12h"===t){const t=e.match(/(\d{1,2}):(\d{2})\s*(AM|PM)/i);if(!t)return 0;let i=parseInt(t[1]);const s=parseInt(t[2]),r=t[3].toUpperCase();return"PM"===r&&12!==i&&(i+=12),"AM"===r&&12===i&&(i=0),60*i+s}{const[t,i]=e.split(":").map(Number);return 60*t+i}}static findNearestValid(e,t,i,s){const r="24h"===t?23:12;for(let n=0;n<=r;n++){const o=0===n?[e]:[e+n,e-n];for(const e of o){let n=e;n<0&&(n+=r+1),n>r&&(n%=r+1);const o=this.indexToValue(n,t);if(!this.isDisabled(o,i,s))return n}}return e}}class _{static angleToIndex(e){return Math.round(e/6)%60}static indexToValue(e){return e.toString().padStart(2,"0")}static indexToAngle(e){return e%60*6}static isDisabled(e,t,i,s,r){if(!s)return!1;if(s.isInterval&&s.intervals)return this.isDisabledByInterval(e,t,i,s,r);if(void 0!==s.rangeFromType&&void 0!==s.rangeFromHour)return this.isDisabledForRange12h(e,t,i,s);if(void 0!==s.rangeFromHour){if(parseInt(t,10)!==s.rangeFromHour)return!1}return!!s.minutes&&s.minutes.some(t=>String(t)===e||Number(t)===Number(e)||t===e)}static isDisabledForRange12h(e,t,i,s){const r=s.rangeFromType,n=s.rangeFromHour,o=parseInt(t,10),a=parseInt(e,10);if(null===r||void 0===n)return!1;const l=s.minutes||[],c=l.length>0?parseInt(l[l.length-1],10)+1:0;if("AM"===i&&"PM"===r)return!0;if("PM"===i&&"AM"===r)return!1;return!!(o===n||12===o&&12===n||i===r&&o===n)&&a<c}static isDisabledByInterval(e,t,i,s,r){if(!s.intervals)return!1;const n="12h"===r?`${t}:${e} ${i}`:`${t}:${e}`;for(const e of s.intervals){const[t,i]=e.split("-").map(e=>e.trim());if(this.isTimeBetween(n,t,i,r))return!0}return!1}static isTimeBetween(e,t,i,s){const r=this.timeToMinutes(e,s),n=this.timeToMinutes(t,s),o=this.timeToMinutes(i,s);return r>=n&&r<=o}static timeToMinutes(e,t){if("12h"===t){const t=e.match(/(\d{1,2}):(\d{2})\s*(AM|PM)/i);if(!t)return 0;let i=parseInt(t[1]);const s=parseInt(t[2]),r=t[3].toUpperCase();return"PM"===r&&12!==i&&(i+=12),"AM"===r&&12===i&&(i=0),60*i+s}{const[t,i]=e.split(":").map(Number);return 60*t+i}}static findNearestValid(e,t,i,s,r){for(let n=0;n<60;n++){const o=0===n?[e]:[e+n,e-n];for(const e of o){let n=e;n<0&&(n+=60),n>=60&&(n%=60);const o=this.indexToValue(n);if(!this.isDisabled(o,t,i,s,r))return n}}return e}}class G{static normalizeAngle(e){let t=e%360;return t<0&&(t+=360),t}static calculateRawAngle(e,t){const i=e.x-t.x,s=e.y-t.y,r=180*Math.atan2(s,i)/Math.PI+90;return this.normalizeAngle(r)}static snapToIncrement(e,t){const i=Math.round(e/t)*t;return this.normalizeAngle(i)}static calculateDistance(e,t){const i=e.x-t.x,s=e.y-t.y;return Math.sqrt(i*i+s*s)}static isInnerCircle(e,t){return e<.75*t}static calculateShortestPath(e,t){const i=this.normalizeAngle(e),s=this.normalizeAngle(t)-i,r=s>=0?s:s+360,n=s<=0?s:s-360;return e+(Math.abs(r)<Math.abs(n)?r:n)}}class J{config;currentAngle=0;tipsCache=new Map;cachedDimensions=new Map;constructor(e){this.config=e}getCachedDimensions(e){let t=this.cachedDimensions.get(e);if(!t){const i=(e.offsetWidth-32)/2;t={width:i,height:(e.offsetHeight-32)/2,radius:i-9},this.cachedDimensions.set(e,t)}return t}setHandAngle(e){const t=G.calculateShortestPath(this.currentAngle,e);Math.abs(this.currentAngle-t)<.01||(this.currentAngle=t,this.config.clockHand.style.transform=`rotateZ(${t}deg)`)}animateToAngle(e){const t=G.calculateShortestPath(this.currentAngle,e);this.currentAngle=t,this.config.tipsWrapper.classList.add("tp-ui-tips-animation"),this.config.clockHand.style.transform=`rotateZ(${t}deg)`,setTimeout(()=>{this.config.tipsWrapper.classList.remove("tp-ui-tips-animation")},401)}setActiveValue(e){const t=[this.config.tipsWrapper];this.config.tipsWrapperFor24h&&t.push(this.config.tipsWrapperFor24h),t.forEach(t=>{t.querySelectorAll(".tp-ui-value-tips, .tp-ui-value-tips-24h").forEach(t=>{const i=t;i.textContent===e||Number(i.textContent)===Number(e)?(i.classList.add("active"),i.setAttribute("aria-selected","true")):(i.classList.remove("active"),i.setAttribute("aria-selected","false"))})})}renderTips(e,i,s,r,n,o=!0,a,l="",c="12"){if(!1===t())return;const u=a||this.config.tipsWrapper;o&&(u.innerHTML="",this.tipsCache.clear());const{width:h,height:d,radius:m}=this.getCachedDimensions(u),p=document.createDocumentFragment(),g=`${i}-${this.config.theme||"default"}`;e.forEach((t,o)=>{const a=`${g}-${t}`;let u=this.tipsCache.get(a);u||(u=this.createTip(t,i,n),this.tipsCache.set(a,u));const{wrapper:v,tip:b}=u;this.updateTipState(v,b,t,s,r,n,l,c);const y=o*(360/e.length)*(Math.PI/180);v.style.left=`${h+Math.sin(y)*m}px`,v.style.bottom=`${d+Math.cos(y)*m}px`,p.appendChild(v)}),u.appendChild(p)}createTip(e,i,s){if(!1===t()){const e={};return{wrapper:e,tip:e}}const r=document.createElement("span"),n=document.createElement("span");n.textContent=e,n.setAttribute("role","option"),n.setAttribute("aria-selected","false"),n.tabIndex=0;const o="24h"===s&&i.includes("24")?"tp-ui-value-tips-24h":"tp-ui-value-tips";return n.classList.add(o),r.classList.add(i),this.config.theme&&(r.classList.add(this.config.theme),n.classList.add(this.config.theme)),r.appendChild(n),{wrapper:r,tip:n}}updateTipState(e,t,i,s,r,n,o,a){e.classList.remove("tp-ui-tips-disabled"),t.classList.remove("tp-ui-tips-disabled"),t.removeAttribute("aria-disabled"),t.tabIndex=0;this.checkIfDisabled(i,s,r,n,o,a)&&(e.classList.add("tp-ui-tips-disabled"),t.classList.add("tp-ui-tips-disabled"),t.setAttribute("aria-disabled","true"),t.tabIndex=-1)}checkIfDisabled(e,t,i,s,r,n){return!!i&&("hours"===t?X.isDisabled(e,r,i):"minutes"===t&&_.isDisabled(e,n,r,i,s))}setCircleSize(e){e?this.config.circle.classList.remove("small-circle"):this.config.circle.classList.add("small-circle")}setCircle24hMode(e){e?(this.config.circle.classList.add("tp-ui-circle-hand-24h"),this.config.clockHand.classList.add("tp-ui-clock-hand-24h")):(this.config.circle.classList.remove("tp-ui-circle-hand-24h"),this.config.clockHand.classList.remove("tp-ui-clock-hand-24h"))}destroy(){this.tipsCache.clear(),this.cachedDimensions.clear(),this.config.tipsWrapper.innerHTML=""}}class Q{static processPointerInput(e){const t=G.calculateRawAngle(e.pointerPosition,e.clockCenter);return"hours"===e.mode?this.processHours(t,e):this.processMinutes(t,e)}static processHours(e,t){const i=t.smoothHourSnap??!0;let s;if(i)s=e;else{const i=30*t.incrementHours;s=G.snapToIncrement(e,i)}const r=G.calculateDistance(t.pointerPosition,t.clockCenter),n="24h"===t.clockType&&G.isInnerCircle(r,t.clockRadius);let o=X.angleToIndex(s,t.clockType,n);const a=X.indexToValue(o,t.clockType),l=X.isDisabled(a,t.amPm,t.disabledTime);l&&(o=X.findNearestValid(o,t.clockType,t.amPm,t.disabledTime));const c=X.indexToValue(o,t.clockType);let u;return u=i?e:X.indexToAngle(o,t.clockType),{angle:u,value:c,index:o,isValid:!l,isInnerCircle:"24h"===t.clockType?n:void 0}}static processMinutes(e,t){const i=6*t.incrementMinutes,s=G.snapToIncrement(e,i);let r=_.angleToIndex(s);const n=_.indexToValue(r),o=t.currentHour||"00",a=_.isDisabled(n,o,t.amPm,t.disabledTime,t.clockType);a&&(r=_.findNearestValid(r,o,t.amPm,t.disabledTime,t.clockType));const l=_.indexToValue(r);return{angle:_.indexToAngle(r),value:l,index:r,isValid:!a}}static valueToAngle(e,t,i){const s=parseInt(e,10);return"hours"===t?X.indexToAngle(s,i):_.indexToAngle(s)}}class ee{state;renderer;clockType;disabledTime;incrementHours;incrementMinutes;smoothHourSnap;isDragging=!1;callbacks;lastProcessedX=null;lastProcessedY=null;constructor(e,t,i,s,r=1,n=1,o=!0,a={}){this.renderer=e,this.state={...t},this.clockType=i,this.disabledTime=s,this.incrementHours=r,this.incrementMinutes=n,this.smoothHourSnap=o,this.callbacks=a}handlePointerMove(e,t,i){if(this.isDragging=!0,this.lastProcessedX===e.x&&this.lastProcessedY===e.y)return;this.lastProcessedX=e.x,this.lastProcessedY=e.y;const s={pointerPosition:e,clockCenter:t,clockRadius:i,mode:this.state.mode,clockType:this.clockType,amPm:this.state.amPm,disabledTime:this.disabledTime,incrementHours:this.incrementHours,incrementMinutes:this.incrementMinutes,smoothHourSnap:this.smoothHourSnap,currentHour:this.state.hour},r=Q.processPointerInput(s);if(r.isValid){if("hours"===this.state.mode){const e=this.state.hour;this.state.hour=r.value,this.state.hourAngle=r.angle,"24h"===this.clockType&&void 0!==r.isInnerCircle&&(this.renderer.setCircleSize(!0),this.renderer.setCircle24hMode(r.isInnerCircle)),this.callbacks.onHourChange&&e!==r.value&&this.callbacks.onHourChange(r.value)}else{const e=this.state.minute;this.state.minute=r.value,this.state.minuteAngle=r.angle,this.renderer.setCircleSize(!0),this.renderer.setCircle24hMode(!1),this.callbacks.onMinuteChange&&e!==r.value&&this.callbacks.onMinuteChange(r.value)}this.renderer.setHandAngle(r.angle),this.renderer.setActiveValue(r.value)}}handlePointerUp(){this.isDragging=!1,this.lastProcessedX=null,this.lastProcessedY=null}snapToNearestHour(){if("hours"!==this.state.mode)return;const e=Q.valueToAngle(this.state.hour,"hours",this.clockType);this.state.hourAngle=e,this.renderer.animateToAngle(e)}switchMode(e){this.state.mode=e;const t="hours"===e?this.state.hourAngle:this.state.minuteAngle,i="hours"===e?this.state.hour:this.state.minute;if("hours"===e&&"24h"===this.clockType){const e=parseInt(i,10),t=0===e||e>=13;this.renderer.setCircleSize(!0),this.renderer.setCircle24hMode(t)}else this.renderer.setCircleSize(!0),this.renderer.setCircle24hMode(!1);this.renderer.setHandAngle(t),this.renderer.setActiveValue(i)}setValue(e,t){const i=Q.valueToAngle(t,e,this.clockType);if("hours"===e)if(this.state.hour=t,this.state.hourAngle=i,"24h"===this.clockType){const e=parseInt(t,10),i=0===e||e>=13;this.renderer.setCircleSize(!0),this.renderer.setCircle24hMode(i)}else this.renderer.setCircle24hMode(!1);else this.state.minute=t,this.state.minuteAngle=i,this.renderer.setCircleSize(!0),this.renderer.setCircle24hMode(!1);this.state.mode===e&&(this.renderer.setHandAngle(i),this.renderer.setActiveValue(t))}setAmPm(e){this.state.amPm=e}getState(){return{...this.state}}getHour(){return this.state.hour}getMinute(){return this.state.minute}getAmPm(){return this.state.amPm}updateDisabledTime(e){this.disabledTime=e}destroy(){this.renderer.destroy()}}class te{controller;clockFace;isActive=!1;isBlocked=!1;config;cachedRect=null;cachedCenter=null;cachedRadius=null;rafId=null;constructor(e,t,i={}){this.controller=e,this.clockFace=t,this.config=i}attach(){this.clockFace.addEventListener("mousedown",this.handlePointerDown),this.clockFace.addEventListener("touchstart",this.handlePointerDown,{passive:!1})}detach(){this.clockFace.removeEventListener("mousedown",this.handlePointerDown),this.clockFace.removeEventListener("touchstart",this.handlePointerDown),this.removeGlobalListeners()}block(){this.isBlocked=!0}unblock(){this.isBlocked=!1}handlePointerDown=t=>{if(e()||this.isBlocked)return;const i=t.target;i&&i.classList&&i.classList.contains("tp-ui-tips-disabled")||(t.preventDefault(),this.isActive=!0,this.cachedRect=this.clockFace.getBoundingClientRect(),this.cachedCenter=this.getClockCenter(),this.cachedRadius=this.getClockRadius(),this.processPointerEvent(t),document.addEventListener("mousemove",this.handlePointerMove),document.addEventListener("touchmove",this.handlePointerMove,{passive:!1}),document.addEventListener("mouseup",this.handlePointerUp),document.addEventListener("touchend",this.handlePointerUp))};handlePointerMove=e=>{if(!this.isActive||this.isBlocked)return;const t=this.getTargetElement(e);t&&t.classList&&t.classList.contains("tp-ui-tips-disabled")||(e.preventDefault(),null===this.rafId&&(this.rafId=requestAnimationFrame(()=>{this.rafId=null,this.processPointerEvent(e)})))};handlePointerUp=()=>{if(!this.isActive)return;null!==this.rafId&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.isActive=!1,this.cachedRect=null,this.cachedCenter=null,this.cachedRadius=null,this.controller.handlePointerUp();const{autoSwitchToMinutes:e,isMobileView:t,smoothHourSnap:i,hourElement:s,minutesElement:r}=this.config;i&&s?.classList.contains("active")&&this.controller.snapToNearestHour(),this.removeGlobalListeners(),e&&s?.classList.contains("active")&&!t?(s.classList.remove("active"),r?.classList.add("active"),r?.click(),r?.focus(),s.blur()):r?.classList.contains("active")&&this.config.onMinuteCommit&&this.config.onMinuteCommit()};processPointerEvent(e){const t=this.getPointerPosition(e),i=this.cachedCenter||this.getClockCenter(),s=this.cachedRadius||this.getClockRadius();this.controller.handlePointerMove(t,i,s)}getPointerPosition(e){const t=this.cachedRect||this.clockFace.getBoundingClientRect();if("touches"in e){const i=e.touches[0]||e.changedTouches[0];return{x:i.clientX-t.left,y:i.clientY-t.top}}return{x:e.clientX-t.left,y:e.clientY-t.top}}getTargetElement(t){if("touches"in t){const i=t.touches[0]||t.changedTouches[0];if(i&&!e())return document.elementFromPoint(i.clientX,i.clientY)}return t.target}getClockCenter(){return{x:this.clockFace.offsetWidth/2,y:this.clockFace.offsetHeight/2}}getClockRadius(){return this.clockFace.offsetWidth/2}removeGlobalListeners(){!1!==t()&&(document.removeEventListener("mousemove",this.handlePointerMove),document.removeEventListener("touchmove",this.handlePointerMove),document.removeEventListener("mouseup",this.handlePointerUp),document.removeEventListener("touchend",this.handlePointerUp))}}class ie{renderer;controller;dragHandlers;clockType;disabledTime;tipsWrapper;tipsWrapperFor24h;constructor(e){this.clockType=e.clockType,this.disabledTime=e.disabledTime,this.tipsWrapper=e.tipsWrapper,this.tipsWrapperFor24h=e.tipsWrapperFor24h;const t={clockFace:e.clockFace,tipsWrapper:e.tipsWrapper,tipsWrapperFor24h:e.tipsWrapperFor24h,clockHand:e.clockHand,circle:e.circle,theme:e.theme};this.renderer=new J(t);const i={hour:e.initialHour,minute:e.initialMinute,amPm:e.initialAmPm,hourAngle:this.calculateInitialAngle("hours",e.initialHour),minuteAngle:this.calculateInitialAngle("minutes",e.initialMinute),mode:"hours"},s={onHourChange:e.onHourChange,onMinuteChange:e.onMinuteChange};this.controller=new ee(this.renderer,i,e.clockType,e.disabledTime,e.incrementHours||1,e.incrementMinutes||1,e.smoothHourSnap??!0,s),this.dragHandlers=new te(this.controller,e.clockFace,e.dragConfig||{})}initialize(){this.dragHandlers.attach(),this.switchToHours()}switchToHours(){this.controller.switchMode("hours"),"24h"===this.clockType&&this.tipsWrapperFor24h&&this.tipsWrapperFor24h.classList.remove("none"),this.renderHourTips();const e=this.controller.getState();this.renderer.setActiveValue(e.hour)}switchToMinutes(){this.controller.switchMode("minutes"),this.tipsWrapperFor24h&&this.tipsWrapperFor24h.classList.add("none"),this.renderMinuteTips();const e=this.controller.getState();this.renderer.setActiveValue(e.minute)}setHour(e){this.controller.setValue("hours",e)}setMinute(e){this.controller.setValue("minutes",e)}setAmPm(e){this.controller.setAmPm(e);const t=this.controller.getState();"hours"===t.mode?(this.renderHourTips(),this.renderer.setHandAngle(t.hourAngle),this.renderer.setActiveValue(t.hour)):(this.renderMinuteTips(),this.renderer.setHandAngle(t.minuteAngle),this.renderer.setActiveValue(t.minute))}getHour(){return this.controller.getHour()}getMinute(){return this.controller.getMinute()}getAmPm(){return this.controller.getAmPm()}updateDisabledTime(e){this.disabledTime=e,this.controller.updateDisabledTime(e);"hours"===this.controller.getState().mode?this.renderHourTips():this.renderMinuteTips()}renderHourTips(){const e=this.controller.getState().amPm;"24h"===this.clockType?(this.renderer.renderTips(k,"tp-ui-hour-time-12","hours",this.disabledTime,this.clockType,!0,this.tipsWrapper,e),this.tipsWrapperFor24h&&this.renderer.renderTips(M,"tp-ui-hour-time-24","hours",this.disabledTime,this.clockType,!0,this.tipsWrapperFor24h,e)):this.renderer.renderTips(k,"tp-ui-hour-time-12","hours",this.disabledTime,this.clockType,!0,void 0,e)}renderMinuteTips(){const e=this.controller.getState(),t=e.amPm,i=e.hour;this.renderer.renderTips(C,"tp-ui-minutes-time","minutes",this.disabledTime,this.clockType,!0,void 0,t,i)}calculateInitialAngle(e,t){const i=parseInt(t,10);return"hours"===e?i%12*30:6*i}destroy(){this.dragHandlers.detach(),this.controller.destroy()}blockInteractions(){this.dragHandlers.block()}unblockInteractions(){this.dragHandlers.unblock()}}class se{core;emitter;clockSystem=null;constructor(e,t){this.core=e,this.emitter=t}getClockSystem(){return this.clockSystem}initialize(){const e=this.core.getClockFace(),t=this.core.getClockHand(),i=this.core.getCircle();if(!e||!t||!i)return;const s="24h"===this.core.options.clock.type,r=this.core.getTipsWrapper();if(!r)return;const n=this.core.getHour(),o=this.core.getMinutes(),a={clockFace:e,tipsWrapper:r,tipsWrapperFor24h:s&&this.core.getTipsWrapperFor24h()||void 0,clockHand:t,circle:i,clockType:this.core.options.clock.type||"12h",disabledTime:this.convertDisabledTime(),initialHour:n?.value||"12",initialMinute:o?.value||"00",initialAmPm:this.getAmPmValue(),theme:this.core.options.ui.theme,incrementHours:this.core.options.clock.incrementHours||1,incrementMinutes:this.core.options.clock.incrementMinutes||1,smoothHourSnap:this.core.options.clock.smoothHourSnap??!0,timepicker:null,dragConfig:{autoSwitchToMinutes:this.core.options.clock.autoSwitchToMinutes,isMobileView:this.core.isMobileView,smoothHourSnap:this.core.options.clock.smoothHourSnap??!0,hourElement:n,minutesElement:o,onMinuteCommit:()=>{const e=this.core.getMinutes(),t=this.core.getHour(),i=this.core.getActiveTypeMode();this.emitter.emit("range:minute:commit",{hour:t?.value??"12",minutes:e?.value??"00",type:i?.textContent??void 0})}},onHourChange:e=>{const t=this.core.getHour();t&&(t.value=e,t.setAttribute("aria-valuenow",e));const i=this.core.getModalElement();z(i,`Hour: ${e}`);const s=this.core.getMinutes(),r=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:e,minutes:s?.value,type:r?.textContent||void 0})},onMinuteChange:e=>{const t=this.core.getMinutes();t&&(t.value=e,t.setAttribute("aria-valuenow",e));const i=this.core.getModalElement();z(i,`Minutes: ${e}`);const s=this.core.getHour(),r=this.core.getActiveTypeMode();this.emitter.emit("update",{hour:s?.value,minutes:e,type:r?.textContent||void 0})}};this.clockSystem=new ie(a),this.clockSystem.initialize()}convertDisabledTime(){const e=this.core.disabledTime?.value;if(!e)return null;let t;return e.intervals&&(t=Array.isArray(e.intervals)?e.intervals:[e.intervals]),{hours:e.hours,minutes:e.minutes,isInterval:e.isInterval,intervals:t,clockType:e.clockType}}getAmPmValue(){if("24h"===this.core.options.clock.type)return"";const e=this.core.getActiveTypeMode();if(e){const t=e.textContent?.trim();if("AM"===t||"PM"===t)return t}const t=this.core.getAM();return!0===this.core.options.range?.enabled?t?.classList.contains("active")?"AM":"":t?.classList.contains("active")?"AM":"PM"}destroy(){this.clockSystem&&(this.clockSystem.destroy(),this.clockSystem=null)}}class re{core;constructor(e){this.core=e}removeCircleClockClasses24h(){const e=this.core.getCircle(),t=this.core.getClockHand();e?.classList.remove("tp-ui-circle-hand-24h"),t?.classList.remove("tp-ui-clock-hand-24h")}setCircleClockClasses24h(){const e=this.core.getCircle(),t=this.core.getClockHand();e&&e.classList.add("tp-ui-circle-hand-24h"),t&&t.classList.add("tp-ui-clock-hand-24h")}setOnStartCSSClassesIfClockType24h(){if("24h"===this.core.options.clock.type){const e=this.core.getInput();if(!e)return;let t;e.value.length>0&&(t=e.value.split(":")[0]),t&&(Number(t)>12||0===Number(t))&&this.setCircleClockClasses24h()}}setBgColorToCircleWithMinutesTips(){const e=this.core.getMinutes(),t=this.core.getCircle();if(e&&t&&e.value&&C.includes(e.value)){const e=getComputedStyle(t).getPropertyValue("--timepicker-primary").trim();e&&(t.style.backgroundColor=e),t.classList.remove("small-circle")}}removeBgColorToCirleWithMinutesTips(){const e=this.core.getMinutes(),t=this.core.getCircle();e&&t&&(e.value&&C.includes(e.value)||(t.style.backgroundColor="",t.classList.add("small-circle")))}setClassActiveToHourOnOpen(){if(this.core.options.ui.mobile||this.core.isMobileView)return;const e=this.core.getHour();e?.classList.add(I)}toggleClassActiveToValueTips(e,t){if(e)return;const i=this.core.getAllValueTips();if(!i)return;const s=i.find(e=>Number(e.innerText)===Number(t));i.forEach(e=>{e.classList.remove(I),e.setAttribute("aria-selected","false")}),void 0!==s&&(s.classList.add(I),s.setAttribute("aria-selected","true"))}}class ne{getClockSystem;styleHandler;getAmPmValue;clockType;constructor(e,t,i,s){this.getClockSystem=e,this.styleHandler=t,this.getAmPmValue=i,this.clockType=s}setMinutesToClock(e){const t=this.getClockSystem();t&&(this.styleHandler.removeBgColorToCirleWithMinutesTips(),e&&t.setMinute(e),t.switchToMinutes())}setHoursToClock(e){const t=this.getClockSystem();t&&(e&&t.setHour(e),t.switchToHours())}setTransformToCircleWithSwitchesHour(e){const t=this.getClockSystem();t&&e&&t.setHour(e)}setTransformToCircleWithSwitchesMinutes(e){const t=this.getClockSystem();t&&e&&t.setMinute(e)}updateAmPm(){const e=this.getClockSystem();if(!e||"24h"===this.clockType)return;const t=this.getAmPmValue();""!==t&&e.setAmPm(t)}}class oe{systemInitializer;styleHandler;timeHandler;eventHandler;constructor(e,t){this.systemInitializer=new se(e,t),this.styleHandler=new re(e);const i=e.options.clock.type||"12h";this.timeHandler=new ne(()=>this.systemInitializer.getClockSystem(),this.styleHandler,()=>this.systemInitializer.getAmPmValue(),i),this.eventHandler=new K(t,()=>this.systemInitializer.getClockSystem(),e=>this.timeHandler.setHoursToClock(e),e=>this.timeHandler.setMinutesToClock(e),()=>this.timeHandler.updateAmPm(),()=>this.systemInitializer.convertDisabledTime()),this.eventHandler.setup()}initializeClockSystem(){this.systemInitializer.initialize()}destroyClockSystem(){this.systemInitializer.destroy()}removeCircleClockClasses24h(){this.styleHandler.removeCircleClockClasses24h()}setCircleClockClasses24h(){this.styleHandler.setCircleClockClasses24h()}setOnStartCSSClassesIfClockType24h(){this.styleHandler.setOnStartCSSClassesIfClockType24h()}setBgColorToCircleWithMinutesTips=()=>{this.styleHandler.setBgColorToCircleWithMinutesTips()};removeBgColorToCirleWithMinutesTips=()=>{this.styleHandler.removeBgColorToCirleWithMinutesTips()};setClassActiveToHourOnOpen=()=>{this.styleHandler.setClassActiveToHourOnOpen()};setMinutesToClock=e=>{this.timeHandler.setMinutesToClock(e)};setHoursToClock=e=>{this.timeHandler.setHoursToClock(e)};setTransformToCircleWithSwitchesHour=e=>{this.timeHandler.setTransformToCircleWithSwitchesHour(e)};setTransformToCircleWithSwitchesMinutes=e=>{this.timeHandler.setTransformToCircleWithSwitchesMinutes(e)};updateAmPm=()=>{this.timeHandler.updateAmPm()};toggleClassActiveToValueTips=e=>{const t=null!==this.systemInitializer.getClockSystem();this.styleHandler.toggleClassActiveToValueTips(t,e)};destroy(){this.destroyClockSystem()}}class ae{core;emitter;cleanupHandlers=[];wasCleared=!1;constructor(e,t){this.core=e,this.emitter=t}init(){if(!this.core.options.ui.clearButton)return;const e=this.getClearButton();if(!e)return;const t=()=>{this.core.isDestroyed||"true"!==e.getAttribute("aria-disabled")&&this.handleClearClick()};e.addEventListener("click",t),this.cleanupHandlers.push(()=>e.removeEventListener("click",t)),this.setupInternalEventListeners()}setupInternalEventListeners(){this.emitter.on("update",()=>{this.updateClearButtonState()}),this.emitter.on("open",()=>{this.updateClearButtonState()}),this.emitter.on("select:hour",()=>{this.updateClearButtonState(),this.reenableConfirmIfCleared()}),this.emitter.on("select:minute",()=>{this.updateClearButtonState(),this.reenableConfirmIfCleared()})}handleClearClick(){const e=this.core.getInput(),t=e?.value||null;this.clearTimeValue(),this.resetClockToNeutral(),this.disableConfirmButton(),this.wasCleared=!0;const i=this.core.getModalElement();z(i,"Time cleared"),this.emitter.emit("clear",{previousValue:t}),this.emitter.emit("update",{hour:void 0,minutes:void 0,type:void 0});const{callbacks:s}=this.core.options;s.onClear&&s.onClear({previousValue:t})}clearTimeValue(){const e=!1!==this.core.options.clearBehavior?.clearInput,t=this.core.getInput();t&&e&&(t.value=""),this.core.setDegreesHours(null),this.core.setDegreesMinutes(null);const i=T.getClearHandler("range");i&&i(this.core,this.emitter);const s=T.getClearHandler("timezone");s&&s(this.core,this.emitter)}resetClockToNeutral(){const e=this.core.options.clock.type,t="12h"===e?"PM":void 0,i=this.core.getHour(),s=this.core.getMinutes();i&&(i.value="12",i.removeAttribute("aria-valuenow")),s&&(s.value="00",s.removeAttribute("aria-valuenow"));const r=this.core.getClockHand();if(r){const e=r.style.transition;r.style.transition="none",r.style.transform="rotateZ(0deg)",r.offsetHeight,requestAnimationFrame(()=>{r.style.transition=e})}if(this.removeActiveStates(),i&&i.click(),"12h"===e&&t){const e=this.core.getAM(),t=this.core.getPM();e?.classList.remove("active"),t?.classList.remove("active"),e?.setAttribute("aria-pressed","false"),t?.setAttribute("aria-pressed","false"),t?.classList.add("active"),t?.setAttribute("aria-pressed","true")}this.emitter.emit("animation:clock",{})}removeActiveStates(){this.core.getAllValueTips().forEach(e=>{e.classList.remove("active"),e.removeAttribute("aria-selected")});const e=this.core.getHour(),t=this.core.getMinutes();e?.removeAttribute("aria-valuenow"),t?.removeAttribute("aria-valuenow")}disableConfirmButton(){const e=this.core.getOkButton();e&&(e.classList.add("disabled"),e.setAttribute("aria-disabled","true"))}updateClearButtonState(){const e=this.getClearButton();if(!e)return;const t=this.core.getInput(),i=t?.value&&""!==t.value.trim(),s=this.core.getHour(),r=this.core.getMinutes(),n=this.core.getActiveTypeMode(),o=this.core.options.clock.type,a=s?.value||"",l=r?.value||"",c=i||!("12h"===o?"12"===a&&"00"===l&&"PM"===(n?.textContent||""):"12"===a&&"00"===l);e.classList.toggle("disabled",!c),e.setAttribute("aria-disabled",String(!c))}reenableConfirmIfCleared(){if(!this.wasCleared)return;const e=this.core.getOkButton();e&&(e.classList.remove("disabled"),e.setAttribute("aria-disabled","false"),this.wasCleared=!1)}getClearButton(){const e=this.core.getModalElement();return e?.querySelector(".tp-ui-clear-btn")||null}destroy(){this.cleanupHandlers.forEach(e=>e()),this.cleanupHandlers=[]}}class le{animation;modal;config;theme;validation;events;clock;clearButton;plugins=new Map;constructor(e,t){this.animation=new d(e,t),this.modal=new H(e,t),this.config=new V(e,t),this.theme=new O(e,t),this.validation=new B(e,t),this.events=new j(e,t),this.clock=new oe(e,t),this.clearButton=new ae(e,t);T.getAll().forEach(i=>{const s=i.factory(e,t);this.plugins.set(i.name,s)})}getPlugin(e){return this.plugins.get(e)}destroy(){this.animation.destroy(),this.modal.destroy(),this.config.destroy(),this.theme.destroy(),this.validation.destroy(),this.events.destroy(),this.clock.destroy(),this.clearButton.destroy(),this.plugins.forEach(e=>e.destroy()),this.plugins.clear()}}const ce="is-rippling",ue="ripple-hold";let he=null;function de(e){const t=e.target,i=t.hasAttribute("data-md3-ripple")?t:t.closest("[data-md3-ripple]");if(!i)return;if(0!==e.button&&"mouse"===e.pointerType)return;const s=i.getBoundingClientRect(),r=2*Math.max(s.width,s.height),n=e.clientX-s.left,o=e.clientY-s.top;i.style.setProperty("--ripple-size",`${r}px`),i.style.setProperty("--ripple-x",`${n}px`),i.style.setProperty("--ripple-y",`${o}px`),i.classList.remove(ce,ue),i.offsetWidth,i.classList.add(ce,ue),i._rippleHold=!0,he=i}function me(e){const t=e.target,i=(t.hasAttribute("data-md3-ripple")?t:t.closest("[data-md3-ripple]"))||he;i&&(i._rippleHold=!1,i.classList.remove(ue),setTimeout(()=>{i.classList.remove(ce),he===i&&(he=null)},1e3))}function pe(e){const t=e.currentTarget;t&&t._rippleHold&&(t._rippleHold=!1,t.classList.remove(ue),setTimeout(()=>{t.classList.remove(ce),he===t&&(he=null)},1e3))}const ge=["basic","crane-straight","crane","m2","m3-green"];class ve{core;managers;emitter;eventsClickMobileHandler=()=>{};mutliEventsMoveHandler=()=>{};unmountTimeouts=[];constructor(e,t,i){this.core=e,this.managers=t,this.emitter=i}init(){if(!this.core.isDestroyed&&!this.core.isInitialized){try{this.managers.config.updateInputValueWithCurrentTimeOnStart(),this.managers.validation.checkDisabledValuesOnStart()}catch{return void this.core.setIsDestroyed(!0)}this.managers.theme.setTimepickerClassToElement(),this.managers.theme.setInputClassToInputElement(),this.managers.theme.setDataOpenToInputIfDoesntExistInWrapper(),this.managers.theme.setClassTopOpenElement(),this.managers.config.getDisableTime(),this.core.options.ui.inline?.enabled||this.managers.events.handleOpenOnClick(),this.managers.events.handleOpenOnEnterFocus(),this.setupCallbackBridge(),this.core.setIsInitialized(!0)}}setupCallbackBridge(){const{callbacks:e}=this.core.options;e.onOpen&&this.emitter.on("open",e.onOpen),e.onCancel&&this.emitter.on("cancel",e.onCancel),e.onConfirm&&this.emitter.on("confirm",e.onConfirm),e.onUpdate&&this.emitter.on("update",e.onUpdate),e.onSelectHour&&this.emitter.on("select:hour",e.onSelectHour),e.onSelectMinute&&this.emitter.on("select:minute",e.onSelectMinute),e.onSelectAM&&this.emitter.on("select:am",e.onSelectAM),e.onSelectPM&&this.emitter.on("select:pm",e.onSelectPM),e.onError&&this.emitter.on("error",e.onError),e.onTimezoneChange&&this.emitter.on("timezone:change",e.onTimezoneChange),e.onRangeConfirm&&this.emitter.on("range:confirm",e.onRangeConfirm),e.onRangeSwitch&&this.emitter.on("range:switch",e.onRangeSwitch),e.onRangeValidation&&this.emitter.on("range:validation",e.onRangeValidation),e.onClear&&this.emitter.on("clear",e.onClear)}mount(){this.core.isDestroyed||this.core.isOpen||(this.core.isInitialized||this.init(),this.eventsBundle())}unmount(e){const i=((e,t)=>{let i;return(...s)=>{clearTimeout(i),i=setTimeout(()=>{e(...s)},t)}})((...e)=>{if(e.length>2)return;const[i]=e.filter(e=>"boolean"==typeof e),[s]=e.filter(e=>"function"==typeof e);this.core.setIsMobileView(!!this.core.options.ui.mobile);const r=this.core.getModalElement();if(i&&r){const e=this.core.getOkButton();e?.click()}if(this.core.setIsTouchMouseMove(!1),this.core.setIsOpen(!1),this.removeEventListeners(),this.isPopoverMode()){const e=this.managers.getPlugin("wheel");e&&"detachPopover"in e&&e.detachPopover()}r&&this.managers.animation.removeAnimationToClose();this.core.getOpenElement().forEach(e=>e?.classList.remove("disabled"));const a=setTimeout(()=>{t()&&(document.body.style.overflowY="",document.body.style.paddingRight="")},n);this.unmountTimeouts.push(a);const l=setTimeout(()=>{const e=this.core.getInput();this.core.options.behavior.focusInputAfterClose&&e?.focus();const t=this.core.getModalElement();t&&t.remove(),this.core.setIsModalRemove(!0)},o);this.unmountTimeouts.push(l),s&&s()},this.core.options.behavior.delayHandler||s);e?i(e):i()}destroy(t){if(this.core.isDestroyed)return;this.clearUnmountTimeouts();const i="function"==typeof t?{callback:t}:t||{},{keepInputValue:s=!1,callback:r}=i,n=this.core.getInput(),o=s?n?.value:null;this.removeEventListeners();const a=this.core.getModalElement();a?.remove();const l=this.core.getOpenElement();l?.forEach(e=>{e&&(e.classList.remove("disabled","active","tp-ui-open-element"),e.classList.remove(...ge))}),n&&(n.classList.remove("tp-ui-invalid-format","invalid-value","error","active","tp-ui-input"),n.removeAttribute("data-open"),n.removeAttribute("data-owner-id"),s&&o&&(n.value=o));const c=this.core.element;c&&(c.classList.remove(...ge),c.classList.remove("error","active","disabled"),c.removeAttribute("data-owner-id"),c.removeAttribute("data-open"),this.core.options.ui.cssClass&&c.classList.remove(this.core.options.ui.cssClass));const u=c?.querySelectorAll(".tp-ui-invalid-text");u?.forEach(e=>e.remove()),this.mutliEventsMoveHandler=()=>{},this.eventsClickMobileHandler=()=>{},this.core.reset(),this.managers.destroy(),this.emitter.clear(),e()||(document.body.style.overflowY="",document.body.style.paddingRight=""),r&&r()}eventsBundle(){if(this.core.isDestroyed)return;if(!this.core.isModalRemove)return;this.clearUnmountTimeouts(),this.core.setIsOpen(!0),this.core.setIsModalRemove(!1),this.setupValidation(),this.disableOpenElements(),this.setupModal(),this.applyExpandedState(),this.managers.modal.setFlexEndToFooterIfNoKeyboardIcon(),this.applyThemeDeferred(),this.managers.animation.setAnimationToOpen(),this.managers.config.getInputValueOnOpenAndSet();const e=this.resolveWheelMode();if(this.emitMissingPluginErrors(),this.initClockOrWheel(e),this.initOptionalPlugins(e),this.bindEventHandlers(e),this.finalizeModal(e),this.isPopoverMode()){const e=this.managers.getPlugin("wheel");e&&"attachPopover"in e&&e.attachPopover()}this.managers.modal.setShowClassToBackdrop()}setupValidation(){this.managers.validation.setErrorHandler(),this.managers.validation.removeErrorHandler()}disableOpenElements(){if(!this.core.options.ui.inline?.enabled){if(this.core.getOpenElement().forEach(e=>e?.classList.add("disabled")),!this.isPopoverMode()){const e=this.core.getInput();e?.blur()}}}setupModal(){this.managers.modal.setScrollbarOrNot(),this.managers.modal.setModalTemplate(),this.managers.modal.setNormalizeClass(),this.managers.modal.removeBackdrop()}applyExpandedState(){if(this.core.isMobileView)this.managers.config.updateClockFaceAccessibility(!0);else{const e=this.core.getModalElement(),t=e?.querySelector(".tp-ui-mobile-clock-wrapper"),i=e?.querySelector(".tp-ui-wrapper"),s=e?.querySelectorAll("*");t?.classList.add("expanded"),i?.classList.add("expanded"),s?.forEach(e=>{e.classList.contains("tp-ui-select-time")||e.classList.contains("tp-ui-mobile-clock-wrapper")||e.classList.contains("tp-ui-wrapper")||e.classList.add("expanded")})}}applyThemeDeferred(){setTimeout(()=>{this.managers.theme.setTheme();const e=this.core.getWrapper();e&&this.core.options.ui.cssClass&&e.classList.add(this.core.options.ui.cssClass)},0)}isCompactWheelMode(){return"compact-wheel"===this.core.options.ui.mode}isPopoverMode(){return this.isCompactWheelMode()&&!!this.core.options.wheel?.placement}resolveWheelMode(){const e=this.core.options.ui.mode;return("wheel"===e||"compact-wheel"===e)&&T.has("wheel")}emitMissingPluginErrors(){const e=this.core.options.ui.mode;"wheel"!==e&&"compact-wheel"!==e||T.has("wheel")||this.emitter.emit("error",{error:"WheelPlugin is not registered. Import and register it: PluginRegistry.register(WheelPlugin)"}),this.core.options.range?.enabled&&!T.has("range")&&this.emitter.emit("error",{error:"RangePlugin is not registered. Import and register it: PluginRegistry.register(RangePlugin)"}),this.core.options.timezone?.enabled&&!T.has("timezone")&&this.emitter.emit("error",{error:"TimezonePlugin is not registered. Import and register it: PluginRegistry.register(TimezonePlugin)"})}initClockOrWheel(e){if(e){const e=this.managers.getPlugin("wheel");e&&e.init()}else this.managers.clock.initializeClockSystem(),this.managers.clock.setOnStartCSSClassesIfClockType24h(),this.managers.clock.setClassActiveToHourOnOpen()}initOptionalPlugins(e){const t=this.managers.getPlugin("timezone");t&&t.init();const i=this.managers.getPlugin("range");i&&!e&&i.init()}bindEventHandlers(e){if(this.managers.events.handleCancelButton(),this.managers.events.handleOkButton(),this.managers.clearButton.init(),e||(this.managers.events.handleHourEvents(),this.managers.events.handleMinutesEvents()),this.managers.events.handleKeyboardInput(),this.core.options.ui.enableSwitchIcon&&!e&&this.managers.events.handleSwitchViewButton(),"24h"===this.core.options.clock.type||this.isCompactWheelMode()||(this.managers.events.handleAmClick(),this.managers.events.handlePmClick()),this.core.options.behavior.focusTrap&&this.managers.events.focusTrapHandler(),!this.core.options.ui.inline?.enabled&&(this.managers.events.handleEscClick(),!this.isPopoverMode())){("wheel"===this.core.options.ui.mode||"compact-wheel"===this.core.options.ui.mode)&&this.core.options.wheel?.ignoreOutsideClick||this.managers.events.handleBackdropClick()}}finalizeModal(e){const i=this.core.getModalElement();if(i&&function(e){if(!1===t())return;const i=e||document;i.addEventListener("pointerdown",de),i.addEventListener("pointerup",me),i.addEventListener("pointercancel",me),i.querySelectorAll("[data-md3-ripple]").forEach(e=>{e.addEventListener("mouseleave",pe)})}(i),!e){const e=this.core.getClockFace();e&&"undefined"!=typeof requestAnimationFrame&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{e?.classList.add("scale-in")})})}}clearUnmountTimeouts(){this.unmountTimeouts.forEach(clearTimeout),this.unmountTimeouts=[]}removeEventListeners(){if(!1===t())return;S.split(" ").forEach(e=>{document.removeEventListener(e,this.mutliEventsMoveHandler,!1)}),document.removeEventListener("mousedown",this.eventsClickMobileHandler)}}class be{events=new Map;on(e,t){this.events.has(e)||this.events.set(e,new Set),this.events.get(e).add(t)}once(e,t){const i=s=>{t(s),this.off(e,i)};this.on(e,i)}off(e,t){t?this.events.get(e)?.delete(t):this.events.delete(e)}emit(e,t){this.events.get(e)?.forEach(e=>{e(t)})}clear(){this.events.clear()}hasListeners(e){return(this.events.get(e)?.size??0)>0}}const ye={type:"12h",incrementHours:1,incrementMinutes:1,autoSwitchToMinutes:!0,disabledTime:void 0,currentTime:void 0},fe={mode:"clock",theme:"basic",animation:!0,backdrop:!0,mobile:!1,enableSwitchIcon:!1,editable:!1,enableScrollbar:!1,cssClass:void 0,appendModalSelector:"",iconTemplate:"",iconTemplateMobile:"",inline:void 0,clearButton:!1},Te={am:"AM",pm:"PM",ok:"OK",cancel:"Cancel",time:"Select time",mobileTime:"Enter Time",mobileHour:"Hour",mobileMinute:"Minute",clear:"Clear"},Me={focusInputAfterClose:!1,focusTrap:!0,delayHandler:300,id:void 0},ke={onOpen:void 0,onCancel:void 0,onConfirm:void 0,onUpdate:void 0,onSelectHour:void 0,onSelectMinute:void 0,onSelectAM:void 0,onSelectPM:void 0,onError:void 0,onTimezoneChange:void 0,onRangeConfirm:void 0,onRangeSwitch:void 0,onRangeValidation:void 0,onClear:void 0},Ce={enabled:!1,default:void 0,whitelist:void 0,label:"Timezone"},we={enabled:!1,minDuration:void 0,maxDuration:void 0,fromLabel:"From",toLabel:"To"},He={placement:void 0,hideFooter:void 0,commitOnScroll:void 0,hideDisabled:void 0,ignoreOutsideClick:void 0},Ae={clearInput:!0};const Ee=new Map;return class{core;managers;lifecycle;emitter;constructor(t,s){if(e())throw new Error("TimepickerUI requires browser environment");const r=this.resolveInputElement(t);if(!r)throw new Error("Input element not found");const n=s?.behavior?.id,o=n||`tp-ui-${"undefined"!=typeof window&&window.crypto&&"function"==typeof window.crypto.randomUUID?window.crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}`,a=this.createWrapperElement(r),l=function(e={}){const t={clock:{...ye,...e.clock},ui:{...fe,...e.ui},labels:{...Te,...e.labels},behavior:{...Me,...e.behavior},callbacks:{...ke,...e.callbacks},timezone:{...Ce,...e.timezone},range:{...we,...e.range},wheel:{...He,...e.wheel},clearBehavior:{...Ae,...e.clearBehavior}},i=t.ui.mode;return"wheel"!==i&&"compact-wheel"!==i||(t.wheel={placement:"compact-wheel"===i?"auto":void 0,hideFooter:void 0,commitOnScroll:void 0,ignoreOutsideClick:void 0,...t.wheel}),t}(s||{});if(l.ui.inline?.enabled&&void 0===s?.behavior?.focusTrap&&(l.behavior.focusTrap=!1),l.ui.inline?.enabled){if(!l.ui.inline.containerId)throw new Error("inline.containerId is required when inline mode is enabled");if(!e()){if(!document.getElementById(l.ui.inline.containerId))throw new Error(`Container element with id "${l.ui.inline.containerId}" not found`)}}this.emitter=new be,this.core=new i(a,l,o,n);const c=this.core.getInput();if(c){const e=A(c,l.clock.type),t=30*Number(e.hour),i=6*Number(e.minutes);this.core.setDegreesHours(t),this.core.setDegreesMinutes(i)}this.managers=new le(this.core,this.emitter),this.lifecycle=new ve(this.core,this.managers,this.emitter),this.managers.config.checkMobileOption(),this.managers.config.preventClockTypeByCurrentTime(),this.setupInternalEventListeners(),Ee.set(this.core.instanceId,this)}setupInternalEventListeners(){this.emitter.on("show",()=>{this.core.isDestroyed||this.lifecycle.mount()}),this.emitter.on("cancel",()=>{this.core.isDestroyed||this.lifecycle.unmount()}),this.emitter.on("confirm",e=>{if(!this.core.isDestroyed){if(this.core.options.range?.enabled)return;const t=this.core.getInput();if(t&&e.hour&&e.minutes){const i=e.type?` ${e.type}`:"";t.value=`${e.hour}:${e.minutes}${i}`}e.autoCommit||this.lifecycle.unmount()}}),this.emitter.on("range:confirm",e=>{if(this.core.isDestroyed)return;const t=this.core.getInput();t&&(t.value=`${e.from} - ${e.to}`),this.lifecycle.unmount()})}create(){this.lifecycle.init(),this.core.options.ui.inline?.enabled&&this.lifecycle.mount()}open(e){this.lifecycle.mount(),e&&e()}close(e,t){this.lifecycle.unmount(e?t:void 0),!e&&t&&t()}destroy(e){Ee.delete(this.core.instanceId),this.lifecycle.destroy(e)}update(e,t){this.core.isDestroyed||(this.core.updateOptions(e.options),this.managers.config.checkMobileOption(),this.managers.config.getDisableTime(),e.create&&this.create(),t&&t())}getValue(){if(this.core.isDestroyed)return{hour:"",minutes:"",type:void 0,time:"",degreesHours:null,degreesMinutes:null};const e=this.core.getModalElement(),t=this.core.getInput();let i="12",s="00",r="24h"===this.core.options.clock.type?void 0:"AM",n=null,o=null;if(e){const e=this.core.getHour(),t=this.core.getMinutes(),a=this.core.getActiveTypeMode();i=e?.value||"12",s=t?.value||"00",r="24h"===this.core.options.clock.type?void 0:a?.textContent||"AM",n=this.core.degreesHours,o=this.core.degreesMinutes}else if(t){const e=A(t,this.core.options.clock.type);i=e.hour,s=e.minutes,r=e.type,n=30*Number(i),o=6*Number(s)}let a="";return a="24h"===this.core.options.clock.type?`${i.padStart(2,"0")}:${s.padStart(2,"0")}`:`${i}:${s.padStart(2,"0")} ${r}`,{hour:i,minutes:s,type:r,time:a,degreesHours:n,degreesMinutes:o}}setValue(e,t=!0){if(this.core.isDestroyed)return;if(!e||"string"!=typeof e)return;this.core.isInitialized||this.create();const i=e.trim().replace(/[^0-9:APMapm\s]/g,"");try{const e=this.parseTimeString(i);if(this.applyParsedTime(e),this.syncPeriodIndicator(e.typeValue),t){const e=this.core.getInput();e&&(e.value=i)}this.syncClockVisual(e)}catch{return}}parseTimeString(e){if("24h"===this.core.options.clock.type){const t=e.match(/^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/);if(!t)throw new Error("Invalid 24h format. Expected HH:MM");return{hourValue:t[1].padStart(2,"0"),minutesValue:t[2],typeValue:"AM"}}const t=e.match(/^(1[0-2]|[1-9]):([0-5][0-9])\s*(AM|PM)$/i);if(!t)throw new Error("Invalid 12h format. Expected HH:MM AM/PM");return{hourValue:t[1],minutesValue:t[2],typeValue:t[3].toUpperCase()}}applyParsedTime(e){const t=this.core.getHour(),i=this.core.getMinutes();t&&(t.value=e.hourValue,t.setAttribute("aria-valuenow",e.hourValue),this.core.setDegreesHours(30*Number(e.hourValue))),i&&(i.value=e.minutesValue,i.setAttribute("aria-valuenow",e.minutesValue),this.core.setDegreesMinutes(6*Number(e.minutesValue)))}syncPeriodIndicator(e){if("24h"===this.core.options.clock.type)return;const t=this.core.getAM(),i=this.core.getPM();t&&i&&("AM"===e?(t.classList.add("active"),i.classList.remove("active")):(i.classList.add("active"),t.classList.remove("active")))}syncClockVisual(e){const t=this.core.options.ui.mode;if("wheel"===t||"compact-wheel"===t){const t=this.managers.getPlugin("wheel");t&&"scrollToValue"in t&&t.scrollToValue(e.hourValue,e.minutesValue,e.typeValue)}else{const e=this.core.getClockHand();e&&(e.style.transform=`rotateZ(${this.core.degreesHours||0}deg)`)}}getElement(){return this.core.element}get instanceId(){return this.core.instanceId}get options(){return this.core.options}get isInitialized(){return this.core.isInitialized}get isDestroyed(){return this.core.isDestroyed}get hour(){return this.core.getHour()}get minutes(){return this.core.getMinutes()}get okButton(){return this.core.getOkButton()}get cancelButton(){return this.core.getCancelButton()}get clockHand(){return this.core.getClockHand()}on(e,t){this.core.isDestroyed||this.emitter.on(e,t)}once(e,t){this.core.isDestroyed||this.emitter.once(e,t)}off(e,t){this.core.isDestroyed||this.emitter.off(e,t)}resolveInputElement(e){if(!1===t())return null;let i=null;if("string"==typeof e){if(i=document.querySelector(e),!i)return null}else{if(!(e instanceof HTMLElement))return null;i=e}if("INPUT"===i.tagName)return i;return i.querySelector("input")}createWrapperElement(e){if(!1===t())return e;const i=e.parentElement;if("INPUT"===e.tagName&&!i?.classList.contains("tp-ui")){const t=document.createElement("div");return t.className="tp-ui",e.parentNode?.insertBefore(t,e),t.appendChild(e),t}return i&&!i.classList.contains("tp-ui")&&i.classList.add("tp-ui"),i||e}static getById(e){return Ee.get(e)}static getAllInstances(){return Array.from(Ee.values())}static isAvailable(t){return!e()&&("string"==typeof t?null!==document.querySelector(t):t instanceof HTMLElement&&document.contains(t))}static destroyAll(){Array.from(Ee.values()).forEach(e=>e.destroy()),Ee.clear()}}});
|
package/dist/plugins/range.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var p=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var E=(n,t)=>{for(var e in t)p(n,e,{get:t[e],enumerable:!0})},C=(n,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of P(t))!T.call(n,i)&&i!==e&&p(n,i,{get:()=>t[i],enumerable:!(a=y(t,i))||a.enumerable});return n};var R=n=>C(p({},"__esModule",{value:!0}),n);var S={};E(S,{RangeManager:()=>u,RangePlugin:()=>A});module.exports=R(S);function v(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 g(n,t){if(!n)return 0;let e=parseInt(n.hour,10),a=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+a}function V(n,t,e){if(!n||!t)return 0;let a=g(n,e);return g(t,e)-a}function f(n,t){return n?t==="12h"?!!(n.hour&&n.minutes&&n.type):!!(n.hour&&n.minutes):!1}function b(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:v(t[0]),to:v(t[1])}}var h=class{activePart="from";fromValue=null;toValue=null;previewValue=null;clockType;minDuration;maxDuration;emitter;constructor(t,e,a,i){this.clockType=t,this.minDuration=e,this.maxDuration=a,this.emitter=i}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 f(this.fromValue,this.clockType)}isToComplete(){return f(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 V(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=[],a=parseInt(this.fromValue.hour,10),i=parseInt(this.fromValue.minutes,10),r=this.fromValue.type;if(this.clockType==="24h"){for(let s=0;s<a;s++)t.push(s.toString().padStart(2,"0"));for(let s=0;s<i;s++)e.push(s.toString().padStart(2,"0"));return{hours:t,minutes:e,fromHour:a}}for(let s=0;s<i;s++)e.push(s.toString().padStart(2,"0"));return{hours:t,minutes:e,fromType:r,fromHour:a}}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"),a=t.querySelector(".tp-ui-range-tab.tp-ui-range-to"),i=this.state.getActivePart()==="from",r=this.state.isFromComplete();e?.classList.toggle("active",i),a?.classList.toggle("active",!i),a?.classList.toggle("disabled",!r),e?.setAttribute("aria-selected",String(i)),a?.setAttribute("aria-selected",String(!i)),a?.setAttribute("aria-disabled",String(!r)),e?.setAttribute("tabindex",i?"0":"-1"),a?.setAttribute("tabindex",i||!r?"-1":"0")}updateTimeDisplay(){let t=this.core.getModalElement();if(!t)return;let e=t.querySelector(".tp-ui-range-from-time"),a=t.querySelector(".tp-ui-range-to-time"),i=this.state.getActivePart(),r=this.state.getPreviewValue(),s=this.state.getFromValue(),m=this.state.getToValue(),l="--:--";i==="from"&&r?l=o(r):s&&(l=o(s));let d="--:--";i==="to"&&r?d=o(r):m&&(d=o(m)),e&&(e.textContent=l),a&&(a.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(),a=this.state.getToValue(),i=e?o(e):"--:--",r=a?o(a):"--:--";t.value=`${i} - ${r}`}syncClockToActivePart(){let t=this.state.getSavedValue(),e=this.core.getHour(),a=this.core.getMinutes();if(e&&(e.value=t?.hour??"12"),a&&(a.value=t?.minutes??"00"),this.core.options.clock.type==="12h"){let i=this.core.getAM(),r=this.core.getPM();t?.type==="AM"?(i?.classList.add("active"),r?.classList.remove("active")):t?.type==="PM"?(r?.classList.add("active"),i?.classList.remove("active")):(i?.classList.remove("active"),r?.classList.remove("active"))}a&&(a.blur(),a.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:a,clock:i}=t.options;this.state=new h(i.type,a?.minDuration,a?.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:a,to:i}=b(e);this.state.setFromValue(a),this.state.setToValue(i),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"),a=t.querySelector(".tp-ui-range-tab.tp-ui-range-to");if(e){let i=()=>this.setActivePart("from");e.addEventListener("click",i),this.cleanupHandlers.push(()=>e.removeEventListener("click",i))}if(a){let i=()=>this.setActivePart("to");a.addEventListener("click",i),this.cleanupHandlers.push(()=>a.removeEventListener("click",i))}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(),a=this.core.getActiveTypeMode(),i=t?.value??"12",r=this.state.getSavedValue(),m=r?.minutes&&r.minutes!=="--"?e?.value??"--":"--",l=this.core.options.clock.type==="12h"?a?.textContent??void 0:void 0;this.state.setPreviewValue({hour:i,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 i=this.state.getFromValue();i&&(this.state.setFromValue({...i,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 i=this.state.getToValue();i&&this.state.setToValue({...i,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(),a=this.state.getToValue(),i=e?o(e):"--:--",r=a?o(a):"--:--",s=this.state.getDuration();this.ui.updateInputValue(),this.emitter.emit("range:confirm",{from:i,to:r,duration:s})}reset(){this.state.reset()}destroy(){this.cleanupHandlers.forEach(t=>t()),this.cleanupHandlers=[],this.reset()}};var A={name:"range",factory:(n,t)=>new u(n,t)};0&&(module.exports={RangeManager,RangePlugin});
|
|
1
|
+
"use strict";var p=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var E=(n,t)=>{for(var e in t)p(n,e,{get:t[e],enumerable:!0})},C=(n,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of P(t))!T.call(n,i)&&i!==e&&p(n,i,{get:()=>t[i],enumerable:!(a=y(t,i))||a.enumerable});return n};var A=n=>C(p({},"__esModule",{value:!0}),n);var S={};E(S,{RangeManager:()=>l,RangePlugin:()=>R});module.exports=A(S);function v(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 g(n,t){if(!n)return 0;let e=parseInt(n.hour,10),a=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+a}function V(n,t,e){if(!n||!t)return 0;let a=g(n,e);return g(t,e)-a}function f(n,t){return n?t==="12h"?!!(n.hour&&n.minutes&&n.type):!!(n.hour&&n.minutes):!1}function b(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:v(t[0]),to:v(t[1])}}var c=class{activePart="from";fromValue=null;toValue=null;previewValue=null;clockType;minDuration;maxDuration;emitter;constructor(t,e,a,i){this.clockType=t,this.minDuration=e,this.maxDuration=a,this.emitter=i}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 f(this.fromValue,this.clockType)}isToComplete(){return f(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 V(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=[],a=parseInt(this.fromValue.hour,10),i=parseInt(this.fromValue.minutes,10),r=this.fromValue.type;if(this.clockType==="24h"){for(let s=0;s<a;s++)t.push(s.toString().padStart(2,"0"));for(let s=0;s<i;s++)e.push(s.toString().padStart(2,"0"));return{hours:t,minutes:e,fromHour:a}}for(let s=0;s<i;s++)e.push(s.toString().padStart(2,"0"));return{hours:t,minutes:e,fromType:r,fromHour:a}}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"),a=t.querySelector(".tp-ui-range-tab.tp-ui-range-to"),i=this.state.getActivePart()==="from",r=this.state.isFromComplete();e?.classList.toggle("active",i),a?.classList.toggle("active",!i),a?.classList.toggle("disabled",!r),e?.setAttribute("aria-selected",String(i)),a?.setAttribute("aria-selected",String(!i)),a?.setAttribute("aria-disabled",String(!r)),e?.setAttribute("tabindex",i?"0":"-1"),a?.setAttribute("tabindex",i||!r?"-1":"0")}updateTimeDisplay(){let t=this.core.getModalElement();if(!t)return;let e=t.querySelector(".tp-ui-range-from-time"),a=t.querySelector(".tp-ui-range-to-time"),i=this.state.getActivePart(),r=this.state.getPreviewValue(),s=this.state.getFromValue(),u=this.state.getToValue(),m="--:--";i==="from"&&r?m=o(r):s&&(m=o(s));let d="--:--";i==="to"&&r?d=o(r):u&&(d=o(u)),e&&(e.textContent=m),a&&(a.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(),a=this.state.getToValue(),i=e?o(e):"--:--",r=a?o(a):"--:--";t.value=`${i} - ${r}`}syncClockToActivePart(){let t=this.state.getSavedValue(),e=this.core.getHour(),a=this.core.getMinutes();if(e&&(e.value=t?.hour??"12"),a&&(a.value=t?.minutes??"00"),this.core.options.clock.type==="12h"){let i=this.core.getAM(),r=this.core.getPM();t?.type==="AM"?(i?.classList.add("active"),r?.classList.remove("active")):t?.type==="PM"?(r?.classList.add("active"),i?.classList.remove("active")):(i?.classList.remove("active"),r?.classList.remove("active"))}a&&(a.blur(),a.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:a,clock:i}=t.options;this.state=new c(i.type,a?.minDuration,a?.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:a,to:i}=b(e);this.state.setFromValue(a),this.state.setToValue(i),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"),a=t.querySelector(".tp-ui-range-tab.tp-ui-range-to");if(e){let i=()=>this.setActivePart("from");e.addEventListener("click",i),this.cleanupHandlers.push(()=>e.removeEventListener("click",i))}if(a){let i=()=>this.setActivePart("to");a.addEventListener("click",i),this.cleanupHandlers.push(()=>a.removeEventListener("click",i))}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(),a=this.core.getActiveTypeMode(),i=t?.value??"12",r=this.state.getSavedValue(),u=r?.minutes&&r.minutes!=="--"?e?.value??"--":"--",m=this.core.options.clock.type==="12h"?a?.textContent??void 0:void 0;this.state.setPreviewValue({hour:i,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 i=this.state.getFromValue();i&&(this.state.setFromValue({...i,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 i=this.state.getToValue();i&&this.state.setToValue({...i,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(),a=this.state.getToValue(),i=e?o(e):"--:--",r=a?o(a):"--:--",s=this.state.getDuration();this.ui.updateInputValue(),this.emitter.emit("range:confirm",{from:i,to:r,duration:s})}reset(){this.state.reset()}destroy(){this.cleanupHandlers.forEach(t=>t()),this.cleanupHandlers=[],this.reset()}};var R={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 a=e.querySelector(".tp-ui-range-from"),i=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="--:--"),a?.classList.add("active"),i?.classList.remove("active"),a?.setAttribute("aria-selected","true"),i?.setAttribute("aria-selected","false"),a?.setAttribute("tabindex","0"),i?.setAttribute("tabindex","-1"),i?.classList.add("disabled"),i?.setAttribute("aria-disabled","true");let u=n.getHour();u&&u.focus(),t.emit("range:switch",{active:"from",disabledTime:null})}};0&&(module.exports={RangeManager,RangePlugin});
|