@nuralyui/timepicker 0.1.6 → 0.1.7

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/bundle.js CHANGED
@@ -24,7 +24,7 @@ class N{static createTimeValue(e,i,t=0,r){return{hours:Math.max(0,Math.min(e,23)
24
24
  * @license
25
25
  * Copyright 2023 Nuraly, Laabidi Aymen
26
26
  * SPDX-License-Identifier: MIT
27
- */class U{constructor(e){this.host=e}formatForDisplay(e){const i=this.host.getConfig();return N.formatTimeValue(e,i.format,i.showSeconds)}formatForInput(e){return this.formatForDisplay(e)}parseInputValue(e){const i=this.host.getConfig();return N.parseTimeString(e,i.format)}getFormatPattern(){const e=this.host.getConfig();return e.format===p.TwelveHour?e.showSeconds?M:$:e.showSeconds?S:T}getPlaceholder(){const e=this.host.getConfig();return e.format===p.TwelveHour?e.showSeconds?"hh:mm:ss AM/PM":"hh:mm AM/PM":e.showSeconds?"HH:mm:ss":"HH:mm"}formatTimeComponent(e,i=2){return e.toString().padStart(i,"0")}formatHours(e){if(this.host.getConfig().format===p.TwelveHour){let i=e;return 0===i?i=12:i>12&&(i-=12),i.toString()}return this.formatTimeComponent(e)}formatMinutes(e){return this.formatTimeComponent(e)}formatSeconds(e){return this.formatTimeComponent(e)}getPeriod(e){return e>=12?v.PM:v.AM}formatTimeParts(e){const i=this.host.getConfig();return{hours:this.formatHours(e.hours),minutes:this.formatMinutes(e.minutes),seconds:this.formatSeconds(e.seconds),period:i.format===p.TwelveHour?this.getPeriod(e.hours):void 0}}parseTimeParts(e){const i=this.host.getConfig(),t=N.parseTimeString(e,i.format);return t?{hours:t.hours,minutes:t.minutes,seconds:t.seconds,period:i.format===p.TwelveHour?this.getPeriod(t.hours):void 0}:null}getTimeSeparator(){return":"}isValidFormat(e){const i=N.createTimeValue(12,30,45);try{const e=this.formatForDisplay(i);return null!==this.parseInputValue(e)}catch(e){return!1}}getFormatExamples(){const e=this.host.getConfig();return[N.createTimeValue(9,15,0),N.createTimeValue(14,30,45),N.createTimeValue(23,59,59)].map((i=>N.formatTimeValue(i,e.format,e.showSeconds)))}convertFormat(e,i,t){const r=N.parseTimeString(e,i);if(!r)return null;const o=this.host.getConfig();return N.formatTimeValue(r,t,o.showSeconds)}getTimeDescription(e){const i=this.host.getConfig(),t=N.formatTimeValue(e,i.format,i.showSeconds),r=N.getCurrentTime(),o=N.compareTime(e,r);return 0===o?`${t} (now)`:o>0?`${t} (future)`:`${t} (past)`}}const R=e`
27
+ */class U{constructor(e){this.host=e}formatForDisplay(e){const i=this.host.getConfig();return N.formatTimeValue(e,i.format,i.showSeconds)}formatForInput(e){return this.formatForDisplay(e)}parseInputValue(e){const i=this.host.getConfig();return N.parseTimeString(e,i.format)}getFormatPattern(){const e=this.host.getConfig();return e.format===p.TwelveHour?e.showSeconds?M:$:e.showSeconds?S:T}getPlaceholder(){const e=this.host.getConfig();return e.format===p.TwelveHour?e.showSeconds?"hh:mm:ss AM/PM":"hh:mm AM/PM":e.showSeconds?"HH:mm:ss":"HH:mm"}formatTimeComponent(e,i=2){return e.toString().padStart(i,"0")}formatHours(e){if(this.host.getConfig().format===p.TwelveHour){let i=e;return 0===i?i=12:i>12&&(i-=12),i.toString()}return this.formatTimeComponent(e)}formatMinutes(e){return this.formatTimeComponent(e)}formatSeconds(e){return this.formatTimeComponent(e)}getPeriod(e){return e>=12?v.PM:v.AM}formatTimeParts(e){const i=this.host.getConfig();return{hours:this.formatHours(e.hours),minutes:this.formatMinutes(e.minutes),seconds:this.formatSeconds(e.seconds),period:i.format===p.TwelveHour?this.getPeriod(e.hours):void 0}}parseTimeParts(e){const i=this.host.getConfig(),t=N.parseTimeString(e,i.format);return t?{hours:t.hours,minutes:t.minutes,seconds:t.seconds,period:i.format===p.TwelveHour?this.getPeriod(t.hours):void 0}:null}getTimeSeparator(){return":"}isValidFormat(e){const i=N.createTimeValue(12,30,45);try{const e=this.formatForDisplay(i);return null!==this.parseInputValue(e)}catch(e){return!1}}getFormatExamples(){const e=this.host.getConfig();return[N.createTimeValue(9,15,0),N.createTimeValue(14,30,45),N.createTimeValue(23,59,59)].map(i=>N.formatTimeValue(i,e.format,e.showSeconds))}convertFormat(e,i,t){const r=N.parseTimeString(e,i);if(!r)return null;const o=this.host.getConfig();return N.formatTimeValue(r,t,o.showSeconds)}getTimeDescription(e){const i=this.host.getConfig(),t=N.formatTimeValue(e,i.format,i.showSeconds),r=N.getCurrentTime(),o=N.compareTime(e,r);return 0===o?`${t} (now)`:o>0?`${t} (future)`:`${t} (past)`}}const R=e`
28
28
  ${e`
29
29
  :host {
30
30
  /* ========================================
@@ -707,14 +707,14 @@ class N{static createTimeValue(e,i,t=0,r){return{hours:Math.max(0,Math.min(e,23)
707
707
  max-width: 320px;
708
708
  }
709
709
  }
710
- `;var V=function(e,i,t,r){for(var o,a=arguments.length,c=a<3?i:null===r?r=Object.getOwnPropertyDescriptor(i,t):r,l=e.length-1;l>=0;l--)(o=e[l])&&(c=(a<3?o(c):a>3?o(i,t,c):o(i,t))||c);return a>3&&c&&Object.defineProperty(i,t,c),c};let F=class extends(n(i)){constructor(){super(),this.value="",this.name="",this.placeholder="Select time",this.format=p.TwentyFourHour,this.showSeconds=!1,this.disabled=!1,this.readonly=!1,this.required=!1,this.helperText="",this.label="",this.size="medium",this.variant="outlined",this.placement=k.Bottom,this.scrollBehavior="instant",this.inputValue="",this.state=h.Default,this.validationMessage="",this.dropdownController=new s(this),this.selectionController=new D(this),this.validationController=new j(this),this.formattingController=new U(this)}connectedCallback(){super.connectedCallback(),this.updateConstraints(),this.value&&this.setTimeFromValue(this.value),this.addEventListener("click",this.handleComponentClick.bind(this)),document.addEventListener("click",this.handleDocumentClick.bind(this))}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("click",this.handleDocumentClick.bind(this))}updated(e){super.updated(e),e.has("value")&&this.value!==this.inputValue&&(this.setTimeFromValue(this.value),this.dropdownController.isOpen&&setTimeout((()=>{this.scrollToSelectedTime()}),50)),this.shouldUpdateConstraints(e)&&this.updateConstraints(),this.setupDropdownElements()}setupDropdownElements(){var e,i;const t=null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector(".time-picker__dropdown"),r=null===(i=this.shadowRoot)||void 0===i?void 0:i.querySelector(".time-picker__input-wrapper");t&&r&&this.dropdownController.setElements(t,r)}render(){const e={"time-picker":!0,"time-picker--open":this.dropdownController.isOpen,"time-picker--disabled":this.disabled,"time-picker--readonly":this.readonly,"time-picker--error":this.state===h.Error};return t`
710
+ `;var V=function(e,i,t,r){for(var o,a=arguments.length,c=a<3?i:null===r?r=Object.getOwnPropertyDescriptor(i,t):r,l=e.length-1;l>=0;l--)(o=e[l])&&(c=(a<3?o(c):a>3?o(i,t,c):o(i,t))||c);return a>3&&c&&Object.defineProperty(i,t,c),c};let F=class extends(n(i)){constructor(){super(),this.value="",this.name="",this.placeholder="Select time",this.format=p.TwentyFourHour,this.showSeconds=!1,this.disabled=!1,this.readonly=!1,this.required=!1,this.helperText="",this.label="",this.size="medium",this.variant="outlined",this.placement=k.Bottom,this.scrollBehavior="instant",this.inputValue="",this.state=h.Default,this.validationMessage="",this.dropdownController=new s(this),this.selectionController=new D(this),this.validationController=new j(this),this.formattingController=new U(this)}connectedCallback(){super.connectedCallback(),this.updateConstraints(),this.value&&this.setTimeFromValue(this.value),this.addEventListener("click",this.handleComponentClick.bind(this)),document.addEventListener("click",this.handleDocumentClick.bind(this))}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("click",this.handleDocumentClick.bind(this))}updated(e){super.updated(e),e.has("value")&&this.value!==this.inputValue&&(this.setTimeFromValue(this.value),this.dropdownController.isOpen&&setTimeout(()=>{this.scrollToSelectedTime()},50)),this.shouldUpdateConstraints(e)&&this.updateConstraints(),this.setupDropdownElements()}setupDropdownElements(){var e,i;const t=null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector(".time-picker__dropdown"),r=null===(i=this.shadowRoot)||void 0===i?void 0:i.querySelector(".time-picker__input-wrapper");t&&r&&this.dropdownController.setElements(t,r)}render(){const e={"time-picker":!0,"time-picker--open":this.dropdownController.isOpen,"time-picker--disabled":this.disabled,"time-picker--readonly":this.readonly,"time-picker--error":this.state===h.Error};return t`
711
711
  <div class="${l(e)}" data-theme="${this.currentTheme}" part="wrapper">
712
712
  ${this.renderLabel()}
713
713
  ${this.renderInput()}
714
714
  ${this.renderDropdown()}
715
715
  ${this.renderHelperText()}
716
716
  </div>
717
- `}open(){this.dropdownController.open(),setTimeout((()=>{this.scrollToSelectedTime()}),50)}close(){this.dropdownController.close()}clear(){this.value="",this.inputValue="",this.selectionController.clearSelection()}setToNow(){const e=N.getCurrentTime();this.selectionController.selectTime(e),this.updateInputValue(),this.dropdownController.isOpen&&setTimeout((()=>{this.scrollToSelectedTime()}),10)}validate(){const e=this.selectionController.getSelectedTime();return!e||this.validationController.validateConstraints(e)}validateTime(e){return this.validationController.validateConstraints(e)}isHourValid(e,i){const t=Object.assign(Object.assign({},i),{hours:e});return this.validateTime(t)}isMinuteValid(e,i){const t=Object.assign(Object.assign({},i),{minutes:e});return this.validateTime(t)}isSecondValid(e,i){const t=Object.assign(Object.assign({},i),{seconds:e});return this.validateTime(t)}renderLabel(){return this.label?t`
717
+ `}open(){this.dropdownController.open(),setTimeout(()=>{this.scrollToSelectedTime()},50)}close(){this.dropdownController.close()}clear(){this.value="",this.inputValue="",this.selectionController.clearSelection()}setToNow(){const e=N.getCurrentTime();this.selectionController.selectTime(e),this.updateInputValue(),this.dropdownController.isOpen&&setTimeout(()=>{this.scrollToSelectedTime()},10)}validate(){const e=this.selectionController.getSelectedTime();return!e||this.validationController.validateConstraints(e)}validateTime(e){return this.validationController.validateConstraints(e)}isHourValid(e,i){const t=Object.assign(Object.assign({},i),{hours:e});return this.validateTime(t)}isMinuteValid(e,i){const t=Object.assign(Object.assign({},i),{minutes:e});return this.validateTime(t)}isSecondValid(e,i){const t=Object.assign(Object.assign({},i),{seconds:e});return this.validateTime(t)}renderLabel(){return this.label?t`
718
718
  <label class="time-picker__label" part="label" for="time-input">
719
719
  ${this.label}
720
720
  ${this.required?t`<span class="time-picker__required">*</span>`:r}
@@ -752,43 +752,43 @@ class N{static createTimeValue(e,i,t=0,r){return{hours:Math.max(0,Math.min(e,23)
752
752
  ${this.renderMinuteColumn(e)}
753
753
  ${this.showSeconds?this.renderSecondColumn(e):r}
754
754
  </div>
755
- `}renderHourColumn(e,i){const r=i.format===p.TwelveHour?Array.from({length:12},((e,i)=>0===i?12:i)):Array.from({length:24},((e,i)=>i)),o=e&&i.format===p.TwelveHour?this.formattingController.formatHours(e.hours):null==e?void 0:e.hours;return t`
755
+ `}renderHourColumn(e,i){const r=i.format===p.TwelveHour?Array.from({length:12},(e,i)=>0===i?12:i):Array.from({length:24},(e,i)=>i),o=e&&i.format===p.TwelveHour?this.formattingController.formatHours(e.hours):null==e?void 0:e.hours;return t`
756
756
  <div class="time-picker__column" part="hour-column">
757
757
  <div class="time-picker__column-list">
758
- ${r.map((r=>{let a=r;if(i.format===p.TwelveHour&&e){const i=this.formattingController.getPeriod(e.hours);a=12===r?i===v.AM?0:12:i===v.AM?r:r+12}const c=e||x,l=this.isHourValid(a,c);return t`
758
+ ${r.map(r=>{let a=r;if(i.format===p.TwelveHour&&e){const i=this.formattingController.getPeriod(e.hours);a=12===r?i===v.AM?0:12:i===v.AM?r:r+12}const c=e||x,l=this.isHourValid(a,c);return t`
759
759
  <div
760
760
  class="time-picker__column-item ${!!e&&r===o?"time-picker__column-item--selected":""} ${l?"":"time-picker__column-item--disabled"}"
761
761
  @click="${l?()=>this.handleHourSelect(r,i.format):null}"
762
762
  >
763
763
  ${r.toString().padStart(2,"0")}
764
764
  </div>
765
- `}))}
765
+ `})}
766
766
  </div>
767
767
  </div>
768
- `}renderMinuteColumn(e){const i=Array.from({length:60},((e,i)=>i));return t`
768
+ `}renderMinuteColumn(e){const i=Array.from({length:60},(e,i)=>i);return t`
769
769
  <div class="time-picker__column" part="minute-column">
770
770
  <div class="time-picker__column-list">
771
- ${i.map((i=>{const r=e||x,o=this.isMinuteValid(i,r),a=!!e&&i===e.minutes;return t`
771
+ ${i.map(i=>{const r=e||x,o=this.isMinuteValid(i,r),a=!!e&&i===e.minutes;return t`
772
772
  <div
773
773
  class="time-picker__column-item ${a?"time-picker__column-item--selected":""} ${o?"":"time-picker__column-item--disabled"}"
774
774
  @click="${o?()=>this.handleMinuteSelect(i):null}"
775
775
  >
776
776
  ${i.toString().padStart(2,"0")}
777
777
  </div>
778
- `}))}
778
+ `})}
779
779
  </div>
780
780
  </div>
781
- `}renderSecondColumn(e){const i=Array.from({length:60},((e,i)=>i));return t`
781
+ `}renderSecondColumn(e){const i=Array.from({length:60},(e,i)=>i);return t`
782
782
  <div class="time-picker__column" part="second-column">
783
783
  <div class="time-picker__column-list">
784
- ${i.map((i=>{const r=e||x,o=this.isSecondValid(i,r),a=!!e&&i===e.seconds;return t`
784
+ ${i.map(i=>{const r=e||x,o=this.isSecondValid(i,r),a=!!e&&i===e.seconds;return t`
785
785
  <div
786
786
  class="time-picker__column-item ${a?"time-picker__column-item--selected":""} ${o?"":"time-picker__column-item--disabled"}"
787
787
  @click="${o?()=>this.handleSecondSelect(i):null}"
788
788
  >
789
789
  ${i.toString().padStart(2,"0")}
790
790
  </div>
791
- `}))}
791
+ `})}
792
792
  </div>
793
793
  </div>
794
794
  `}renderActions(){return t`
@@ -812,4 +812,4 @@ class N{static createTimeValue(e,i,t=0,r){return{hours:Math.max(0,Math.min(e,23)
812
812
  <div class="time-picker__helper-text ${i?"time-picker__helper-text--error":""}" part="helper-text">
813
813
  ${e}
814
814
  </div>
815
- `}scrollToSelectedTime(){try{const e=this.selectionController.getSelectedTime();if(!e)return;this.scrollToSelectedHour(e),this.scrollToSelectedMinute(e),this.showSeconds&&this.scrollToSelectedSecond(e)}catch(e){console.warn("Failed to scroll to selected time:",e)}}scrollToSelectedHour(e){var i;const t=this.getConfig(),r=null===(i=this.shadowRoot)||void 0===i?void 0:i.querySelector(".time-picker__column:first-child .time-picker__column-list");if(!r)return;let o;o=t.format===p.TwelveHour?0===e.hours||12===e.hours?12:e.hours>12?e.hours-12:e.hours:e.hours;const a=r.querySelector(`.time-picker__column-item:nth-child(${this.getHourIndex(o,t.format)+1})`);a&&a.scrollIntoView({behavior:this.scrollBehavior,block:"center",inline:"nearest"})}scrollToSelectedMinute(e){var i;const t=null===(i=this.shadowRoot)||void 0===i?void 0:i.querySelector(".time-picker__column:nth-child(2) .time-picker__column-list");if(!t)return;const r=t.querySelector(`.time-picker__column-item:nth-child(${e.minutes+1})`);r&&r.scrollIntoView({behavior:this.scrollBehavior,block:"center",inline:"nearest"})}scrollToSelectedSecond(e){var i;const t=null===(i=this.shadowRoot)||void 0===i?void 0:i.querySelector(".time-picker__column:nth-child(3) .time-picker__column-list");if(!t)return;const r=t.querySelector(`.time-picker__column-item:nth-child(${e.seconds+1})`);r&&r.scrollIntoView({behavior:this.scrollBehavior,block:"center",inline:"nearest"})}getHourIndex(e,i){return i===p.TwelveHour&&12===e?0:e}handleComponentClick(e){e.stopPropagation()}handleDocumentClick(e){var i;if(this.dropdownController.isOpen){const t=e.target;this.contains(t)||(null===(i=this.shadowRoot)||void 0===i?void 0:i.contains(t))||(this.dropdownController.close(),this.dispatchEvent(new CustomEvent(_.BLUR,{bubbles:!0,composed:!0})))}}handleDropdownClick(e){e.stopPropagation()}handleOkClick(){this.dropdownController.close();const e=this.selectionController.getSelectedTime();e&&this.dispatchEvent(new CustomEvent(_.TIME_CHANGE,{bubbles:!0,composed:!0,detail:{value:this.value,time:e}})),this.dispatchEvent(new CustomEvent(_.BLUR,{bubbles:!0,composed:!0}))}handleInputBlur(){setTimeout((()=>{var e;const i=document.activeElement;this.contains(i)||(null===(e=this.shadowRoot)||void 0===e?void 0:e.contains(i))||this.dispatchEvent(new CustomEvent(_.BLUR,{bubbles:!0,composed:!0}))}),150)}handleInputClick(e){e.preventDefault(),e.stopPropagation(),this.disabled||this.dropdownController.isOpen||(this.dropdownController.open(),setTimeout((()=>{this.scrollToSelectedTime()}),50),this.dispatchEvent(new CustomEvent(_.FOCUS,{bubbles:!0,composed:!0})))}handleInputChange(e){var i;if(this.disabled)return;const t=(null===(i=e.detail)||void 0===i?void 0:i.value)||"";this.inputValue=t;const r=this.formattingController.parseInputValue(t);r?this.validateTime(r)?(this.selectionController.selectTime(r),this.value=this.formattingController.formatForInput(r),this.state=h.Default,this.dropdownController.isOpen&&setTimeout((()=>{this.scrollToSelectedTime()}),10),this.dispatchEvent(new CustomEvent(_.TIME_CHANGE,{bubbles:!0,composed:!0,detail:{value:this.value,time:r}}))):this.state=h.Error:""===t?(this.selectionController.clearSelection(),this.value="",this.state=h.Default,this.dispatchEvent(new CustomEvent(_.TIME_CHANGE,{bubbles:!0,composed:!0,detail:{value:"",time:null}}))):this.state=h.Error,this.requestUpdate()}handleHourSelect(e,i){const t=this.selectionController.getSelectedTime()||N.getCurrentTime();let r=e;if(i===p.TwelveHour){const i=this.formattingController.getPeriod(t.hours);r=12===e?i===v.AM?0:12:i===v.AM?e:e+12}const o=Object.assign(Object.assign({},t),{hours:r});this.validateTime(o)&&(this.selectionController.selectTime(o),this.updateInputValue())}handleMinuteSelect(e){const i=this.selectionController.getSelectedTime()||N.getCurrentTime(),t=Object.assign(Object.assign({},i),{minutes:e});this.validateTime(t)&&(this.selectionController.selectTime(t),this.updateInputValue())}handleSecondSelect(e){const i=this.selectionController.getSelectedTime()||N.getCurrentTime(),t=Object.assign(Object.assign({},i),{seconds:e});this.validateTime(t)&&(this.selectionController.selectTime(t),this.updateInputValue())}shouldUpdateConstraints(e){return e.has("minTime")||e.has("maxTime")||e.has("disabledTimes")||e.has("enabledTimes")}updateConstraints(){const e={minTime:this.minTime,maxTime:this.maxTime,disabledTimes:this.disabledTimes||[],enabledTimes:this.enabledTimes};this.validationController.setConstraints(e)}setTimeFromValue(e){this.selectionController.setTimeFromString(e)&&(this.inputValue=e,this.requestUpdate(),this.dropdownController.isOpen&&setTimeout((()=>{this.scrollToSelectedTime()}),50))}updateInputValue(){const e=this.selectionController.getSelectedTime();if(e){const i=this.formattingController.formatForDisplay(e);this.inputValue=i,this.value=i,this.dispatchEvent(new CustomEvent(_.TIME_CHANGE,{detail:{value:i,time:e},bubbles:!0,composed:!0}))}}getConfig(){return{format:this.format,showSeconds:this.showSeconds,step:{hours:b.One,minutes:b.One,seconds:b.One},use12HourClock:this.format===p.TwelveHour,minuteInterval:1,secondInterval:1}}getCurrentTime(){return this.selectionController.getSelectedTime()||x}setTime(e){this.selectionController.selectTime(e),this.updateInputValue(),this.dropdownController.isOpen&&setTimeout((()=>{this.scrollToSelectedTime()}),10)}formatTime(e){return this.formattingController.formatForDisplay(e)}getFormatPlaceholder(){return this.format===p.TwelveHour?this.showSeconds?"HH:MM:SS AM/PM":"HH:MM AM/PM":this.showSeconds?"HH:MM:SS":"HH:MM"}parseTime(e){return this.formattingController.parseInputValue(e)}};F.styles=[R],V([o({type:String})],F.prototype,"value",void 0),V([o({type:String})],F.prototype,"name",void 0),V([o({type:String})],F.prototype,"placeholder",void 0),V([o({type:String})],F.prototype,"format",void 0),V([o({type:Boolean,attribute:"show-seconds"})],F.prototype,"showSeconds",void 0),V([o({type:Boolean})],F.prototype,"disabled",void 0),V([o({type:Boolean})],F.prototype,"readonly",void 0),V([o({type:Boolean})],F.prototype,"required",void 0),V([o({type:String,attribute:"min-time"})],F.prototype,"minTime",void 0),V([o({type:String,attribute:"max-time"})],F.prototype,"maxTime",void 0),V([o({type:Array,attribute:"disabled-times"})],F.prototype,"disabledTimes",void 0),V([o({type:Array,attribute:"enabled-times"})],F.prototype,"enabledTimes",void 0),V([o({type:String,attribute:"helper-text"})],F.prototype,"helperText",void 0),V([o({type:String})],F.prototype,"label",void 0),V([o({type:String})],F.prototype,"size",void 0),V([o({type:String})],F.prototype,"variant",void 0),V([o({type:String})],F.prototype,"placement",void 0),V([o({type:String,attribute:"scroll-behavior"})],F.prototype,"scrollBehavior",void 0),V([a()],F.prototype,"inputValue",void 0),V([a()],F.prototype,"state",void 0),V([a()],F.prototype,"validationMessage",void 0),F=V([c("nr-timepicker")],F);export{E as CLOCK_CONTAINER_CLASS,A as CLOCK_FACE,$ as DEFAULT_12H_TIME_FORMAT,M as DEFAULT_12H_TIME_FORMAT_WITH_SECONDS,z as DEFAULT_STEPS,w as DEFAULT_TIME_CONFIG,T as DEFAULT_TIME_FORMAT,y as DEFAULT_TIME_FORMATS,f as DEFAULT_TIME_FORMATS_WITH_SECONDS,S as DEFAULT_TIME_FORMAT_WITH_SECONDS,x as EMPTY_TIME_VALUE,F as NrTimePickerElement,H as TIME_BOUNDARIES,C as TIME_INPUT_FIELD_ID,I as TIME_PICKER_CLASSES,g as TIME_PICKER_CONSTANTS,_ as TIME_PICKER_EVENTS,O as TIME_VALIDATION_PATTERNS,p as TimeFormat,v as TimePeriod,U as TimePickerFormattingController,m as TimePickerMode,k as TimePickerPlacement,D as TimePickerSelectionController,u as TimePickerSize,h as TimePickerState,j as TimePickerValidationController,d as TimePickerVariant,b as TimeStep,N as TimeUtils};
815
+ `}scrollToSelectedTime(){try{const e=this.selectionController.getSelectedTime();if(!e)return;this.scrollToSelectedHour(e),this.scrollToSelectedMinute(e),this.showSeconds&&this.scrollToSelectedSecond(e)}catch(e){console.warn("Failed to scroll to selected time:",e)}}scrollToSelectedHour(e){var i;const t=this.getConfig(),r=null===(i=this.shadowRoot)||void 0===i?void 0:i.querySelector(".time-picker__column:first-child .time-picker__column-list");if(!r)return;let o;o=t.format===p.TwelveHour?0===e.hours||12===e.hours?12:e.hours>12?e.hours-12:e.hours:e.hours;const a=r.querySelector(`.time-picker__column-item:nth-child(${this.getHourIndex(o,t.format)+1})`);a&&a.scrollIntoView({behavior:this.scrollBehavior,block:"center",inline:"nearest"})}scrollToSelectedMinute(e){var i;const t=null===(i=this.shadowRoot)||void 0===i?void 0:i.querySelector(".time-picker__column:nth-child(2) .time-picker__column-list");if(!t)return;const r=t.querySelector(`.time-picker__column-item:nth-child(${e.minutes+1})`);r&&r.scrollIntoView({behavior:this.scrollBehavior,block:"center",inline:"nearest"})}scrollToSelectedSecond(e){var i;const t=null===(i=this.shadowRoot)||void 0===i?void 0:i.querySelector(".time-picker__column:nth-child(3) .time-picker__column-list");if(!t)return;const r=t.querySelector(`.time-picker__column-item:nth-child(${e.seconds+1})`);r&&r.scrollIntoView({behavior:this.scrollBehavior,block:"center",inline:"nearest"})}getHourIndex(e,i){return i===p.TwelveHour&&12===e?0:e}handleComponentClick(e){e.stopPropagation()}handleDocumentClick(e){var i;if(this.dropdownController.isOpen){const t=e.target;this.contains(t)||(null===(i=this.shadowRoot)||void 0===i?void 0:i.contains(t))||(this.dropdownController.close(),this.dispatchEvent(new CustomEvent(_.BLUR,{bubbles:!0,composed:!0})))}}handleDropdownClick(e){e.stopPropagation()}handleOkClick(){this.dropdownController.close();const e=this.selectionController.getSelectedTime();e&&this.dispatchEvent(new CustomEvent(_.TIME_CHANGE,{bubbles:!0,composed:!0,detail:{value:this.value,time:e}})),this.dispatchEvent(new CustomEvent(_.BLUR,{bubbles:!0,composed:!0}))}handleInputBlur(){setTimeout(()=>{var e;const i=document.activeElement;this.contains(i)||(null===(e=this.shadowRoot)||void 0===e?void 0:e.contains(i))||this.dispatchEvent(new CustomEvent(_.BLUR,{bubbles:!0,composed:!0}))},150)}handleInputClick(e){e.preventDefault(),e.stopPropagation(),this.disabled||this.dropdownController.isOpen||(this.dropdownController.open(),setTimeout(()=>{this.scrollToSelectedTime()},50),this.dispatchEvent(new CustomEvent(_.FOCUS,{bubbles:!0,composed:!0})))}handleInputChange(e){var i;if(this.disabled)return;const t=(null===(i=e.detail)||void 0===i?void 0:i.value)||"";this.inputValue=t;const r=this.formattingController.parseInputValue(t);r?this.validateTime(r)?(this.selectionController.selectTime(r),this.value=this.formattingController.formatForInput(r),this.state=h.Default,this.dropdownController.isOpen&&setTimeout(()=>{this.scrollToSelectedTime()},10),this.dispatchEvent(new CustomEvent(_.TIME_CHANGE,{bubbles:!0,composed:!0,detail:{value:this.value,time:r}}))):this.state=h.Error:""===t?(this.selectionController.clearSelection(),this.value="",this.state=h.Default,this.dispatchEvent(new CustomEvent(_.TIME_CHANGE,{bubbles:!0,composed:!0,detail:{value:"",time:null}}))):this.state=h.Error,this.requestUpdate()}handleHourSelect(e,i){const t=this.selectionController.getSelectedTime()||N.getCurrentTime();let r=e;if(i===p.TwelveHour){const i=this.formattingController.getPeriod(t.hours);r=12===e?i===v.AM?0:12:i===v.AM?e:e+12}const o=Object.assign(Object.assign({},t),{hours:r});this.validateTime(o)&&(this.selectionController.selectTime(o),this.updateInputValue())}handleMinuteSelect(e){const i=this.selectionController.getSelectedTime()||N.getCurrentTime(),t=Object.assign(Object.assign({},i),{minutes:e});this.validateTime(t)&&(this.selectionController.selectTime(t),this.updateInputValue())}handleSecondSelect(e){const i=this.selectionController.getSelectedTime()||N.getCurrentTime(),t=Object.assign(Object.assign({},i),{seconds:e});this.validateTime(t)&&(this.selectionController.selectTime(t),this.updateInputValue())}shouldUpdateConstraints(e){return e.has("minTime")||e.has("maxTime")||e.has("disabledTimes")||e.has("enabledTimes")}updateConstraints(){const e={minTime:this.minTime,maxTime:this.maxTime,disabledTimes:this.disabledTimes||[],enabledTimes:this.enabledTimes};this.validationController.setConstraints(e)}setTimeFromValue(e){this.selectionController.setTimeFromString(e)&&(this.inputValue=e,this.requestUpdate(),this.dropdownController.isOpen&&setTimeout(()=>{this.scrollToSelectedTime()},50))}updateInputValue(){const e=this.selectionController.getSelectedTime();if(e){const i=this.formattingController.formatForDisplay(e);this.inputValue=i,this.value=i,this.dispatchEvent(new CustomEvent(_.TIME_CHANGE,{detail:{value:i,time:e},bubbles:!0,composed:!0}))}}getConfig(){return{format:this.format,showSeconds:this.showSeconds,step:{hours:b.One,minutes:b.One,seconds:b.One},use12HourClock:this.format===p.TwelveHour,minuteInterval:1,secondInterval:1}}getCurrentTime(){return this.selectionController.getSelectedTime()||x}setTime(e){this.selectionController.selectTime(e),this.updateInputValue(),this.dropdownController.isOpen&&setTimeout(()=>{this.scrollToSelectedTime()},10)}formatTime(e){return this.formattingController.formatForDisplay(e)}getFormatPlaceholder(){return this.format===p.TwelveHour?this.showSeconds?"HH:MM:SS AM/PM":"HH:MM AM/PM":this.showSeconds?"HH:MM:SS":"HH:MM"}parseTime(e){return this.formattingController.parseInputValue(e)}};F.styles=[R],V([o({type:String})],F.prototype,"value",void 0),V([o({type:String})],F.prototype,"name",void 0),V([o({type:String})],F.prototype,"placeholder",void 0),V([o({type:String})],F.prototype,"format",void 0),V([o({type:Boolean,attribute:"show-seconds"})],F.prototype,"showSeconds",void 0),V([o({type:Boolean})],F.prototype,"disabled",void 0),V([o({type:Boolean})],F.prototype,"readonly",void 0),V([o({type:Boolean})],F.prototype,"required",void 0),V([o({type:String,attribute:"min-time"})],F.prototype,"minTime",void 0),V([o({type:String,attribute:"max-time"})],F.prototype,"maxTime",void 0),V([o({type:Array,attribute:"disabled-times"})],F.prototype,"disabledTimes",void 0),V([o({type:Array,attribute:"enabled-times"})],F.prototype,"enabledTimes",void 0),V([o({type:String,attribute:"helper-text"})],F.prototype,"helperText",void 0),V([o({type:String})],F.prototype,"label",void 0),V([o({type:String})],F.prototype,"size",void 0),V([o({type:String})],F.prototype,"variant",void 0),V([o({type:String})],F.prototype,"placement",void 0),V([o({type:String,attribute:"scroll-behavior"})],F.prototype,"scrollBehavior",void 0),V([a()],F.prototype,"inputValue",void 0),V([a()],F.prototype,"state",void 0),V([a()],F.prototype,"validationMessage",void 0),F=V([c("nr-timepicker")],F);export{E as CLOCK_CONTAINER_CLASS,A as CLOCK_FACE,$ as DEFAULT_12H_TIME_FORMAT,M as DEFAULT_12H_TIME_FORMAT_WITH_SECONDS,z as DEFAULT_STEPS,w as DEFAULT_TIME_CONFIG,T as DEFAULT_TIME_FORMAT,y as DEFAULT_TIME_FORMATS,f as DEFAULT_TIME_FORMATS_WITH_SECONDS,S as DEFAULT_TIME_FORMAT_WITH_SECONDS,x as EMPTY_TIME_VALUE,F as NrTimePickerElement,H as TIME_BOUNDARIES,C as TIME_INPUT_FIELD_ID,I as TIME_PICKER_CLASSES,g as TIME_PICKER_CONSTANTS,_ as TIME_PICKER_EVENTS,O as TIME_VALIDATION_PATTERNS,p as TimeFormat,v as TimePeriod,U as TimePickerFormattingController,m as TimePickerMode,k as TimePickerPlacement,D as TimePickerSelectionController,u as TimePickerSize,h as TimePickerState,j as TimePickerValidationController,d as TimePickerVariant,b as TimeStep,N as TimeUtils};
@@ -1 +1 @@
1
- {"version":3,"file":"formatting.controller.d.ts","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/formatting.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AASjG;;GAEG;AACH,qBAAa,8BAA+B,YAAW,wBAAwB;IACjE,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,cAAc;IAExC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAKzC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAKvC;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAKhD;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAU1B;;OAEG;IACH,cAAc,IAAI,MAAM;IAUxB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM;IAI9D;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAgBlC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAItC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAItC;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAIpC;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG;QAChC,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,UAAU,CAAC;KACrB;IAWD;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG;QAClC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,UAAU,CAAC;KACrB,GAAG,IAAI;IAgBR;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAWvC;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAW7B;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;IAU9F;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;CAgB5C"}
1
+ {"version":3,"file":"formatting.controller.d.ts","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/formatting.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AASjG;;GAEG;AACH,qBAAa,8BAA+B,YAAW,wBAAwB;IACjE,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,cAAc;IAExC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAKzC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAKvC;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAKhD;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAU1B;;OAEG;IACH,cAAc,IAAI,MAAM;IAUxB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM;IAI9D;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAgBlC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAItC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAItC;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAIpC;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG;QAChC,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,UAAU,CAAC;KACrB;IAWD;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG;QAClC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,UAAU,CAAC;KACrB,GAAG,IAAI;IAgBR;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAWvC;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAW7B;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;IAU9F;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;CAgB5C"}
@@ -1 +1 @@
1
- {"version":3,"file":"formatting.controller.js","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/formatting.controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue, TimeFormat, TimePeriod } from '../timepicker.types.js';\nimport { TimePickerHost, TimeFormattingController } from '../interfaces/timepicker.interface.js';\nimport { TimeUtils } from '../utils/time.utils.js';\nimport { \n DEFAULT_TIME_FORMAT, \n DEFAULT_TIME_FORMAT_WITH_SECONDS,\n DEFAULT_12H_TIME_FORMAT,\n DEFAULT_12H_TIME_FORMAT_WITH_SECONDS\n} from '../timepicker.constants.js';\n\n/**\n * Controller for handling time formatting logic\n */\nexport class TimePickerFormattingController implements TimeFormattingController {\n constructor(private host: TimePickerHost) {}\n\n /**\n * Format time for display (user-facing format)\n */\n formatForDisplay(time: TimeValue): string {\n const config = this.host.getConfig();\n return TimeUtils.formatTimeValue(time, config.format, config.showSeconds);\n }\n\n /**\n * Format time for input field value\n */\n formatForInput(time: TimeValue): string {\n // Input format is typically the same as display format\n return this.formatForDisplay(time);\n }\n\n /**\n * Parse input value to TimeValue\n */\n parseInputValue(value: string): TimeValue | null {\n const config = this.host.getConfig();\n return TimeUtils.parseTimeString(value, config.format);\n }\n\n /**\n * Get time format pattern for the current configuration\n */\n getFormatPattern(): string {\n const config = this.host.getConfig();\n \n if (config.format === TimeFormat.TwelveHour) {\n return config.showSeconds ? DEFAULT_12H_TIME_FORMAT_WITH_SECONDS : DEFAULT_12H_TIME_FORMAT;\n } else {\n return config.showSeconds ? DEFAULT_TIME_FORMAT_WITH_SECONDS : DEFAULT_TIME_FORMAT;\n }\n }\n\n /**\n * Get placeholder text for input field\n */\n getPlaceholder(): string {\n const config = this.host.getConfig();\n \n if (config.format === TimeFormat.TwelveHour) {\n return config.showSeconds ? 'hh:mm:ss AM/PM' : 'hh:mm AM/PM';\n } else {\n return config.showSeconds ? 'HH:mm:ss' : 'HH:mm';\n }\n }\n\n /**\n * Format time component with leading zeros\n */\n formatTimeComponent(value: number, length: number = 2): string {\n return value.toString().padStart(length, '0');\n }\n\n /**\n * Format hours based on current format\n */\n formatHours(hours: number): string {\n const config = this.host.getConfig();\n \n if (config.format === TimeFormat.TwelveHour) {\n let displayHours = hours;\n if (displayHours === 0) {\n displayHours = 12;\n } else if (displayHours > 12) {\n displayHours -= 12;\n }\n return displayHours.toString();\n } else {\n return this.formatTimeComponent(hours);\n }\n }\n\n /**\n * Format minutes with leading zero\n */\n formatMinutes(minutes: number): string {\n return this.formatTimeComponent(minutes);\n }\n\n /**\n * Format seconds with leading zero\n */\n formatSeconds(seconds: number): string {\n return this.formatTimeComponent(seconds);\n }\n\n /**\n * Get period (AM/PM) for 12-hour format\n */\n getPeriod(hours: number): TimePeriod {\n return hours >= 12 ? TimePeriod.PM : TimePeriod.AM;\n }\n\n /**\n * Format time parts separately\n */\n formatTimeParts(time: TimeValue): {\n hours: string;\n minutes: string;\n seconds: string;\n period?: TimePeriod;\n } {\n const config = this.host.getConfig();\n \n return {\n hours: this.formatHours(time.hours),\n minutes: this.formatMinutes(time.minutes),\n seconds: this.formatSeconds(time.seconds),\n period: config.format === TimeFormat.TwelveHour ? this.getPeriod(time.hours) : undefined,\n };\n }\n\n /**\n * Parse time parts from string\n */\n parseTimeParts(timeString: string): {\n hours?: number;\n minutes?: number;\n seconds?: number;\n period?: TimePeriod;\n } | null {\n const config = this.host.getConfig();\n const parsedTime = TimeUtils.parseTimeString(timeString, config.format);\n \n if (!parsedTime) {\n return null;\n }\n\n return {\n hours: parsedTime.hours,\n minutes: parsedTime.minutes,\n seconds: parsedTime.seconds,\n period: config.format === TimeFormat.TwelveHour ? this.getPeriod(parsedTime.hours) : undefined,\n };\n }\n\n /**\n * Get time separator character\n */\n getTimeSeparator(): string {\n return ':';\n }\n\n /**\n * Check if format is valid\n */\n isValidFormat(_format: string): boolean {\n const testTime = TimeUtils.createTimeValue(12, 30, 45);\n try {\n const formatted = this.formatForDisplay(testTime);\n const parsed = this.parseInputValue(formatted);\n return parsed !== null;\n } catch {\n return false;\n }\n }\n\n /**\n * Get format examples\n */\n getFormatExamples(): string[] {\n const config = this.host.getConfig();\n const exampleTimes = [\n TimeUtils.createTimeValue(9, 15, 0),\n TimeUtils.createTimeValue(14, 30, 45),\n TimeUtils.createTimeValue(23, 59, 59),\n ];\n\n return exampleTimes.map(time => TimeUtils.formatTimeValue(time, config.format, config.showSeconds));\n }\n\n /**\n * Convert between formats\n */\n convertFormat(timeString: string, fromFormat: TimeFormat, toFormat: TimeFormat): string | null {\n const parsedTime = TimeUtils.parseTimeString(timeString, fromFormat);\n if (!parsedTime) {\n return null;\n }\n\n const config = this.host.getConfig();\n return TimeUtils.formatTimeValue(parsedTime, toFormat, config.showSeconds);\n }\n\n /**\n * Get human-readable time description\n */\n getTimeDescription(time: TimeValue): string {\n const config = this.host.getConfig();\n const formatted = TimeUtils.formatTimeValue(time, config.format, config.showSeconds);\n \n // Add contextual information\n const now = TimeUtils.getCurrentTime();\n const comparison = TimeUtils.compareTime(time, now);\n \n if (comparison === 0) {\n return `${formatted} (now)`;\n } else if (comparison > 0) {\n return `${formatted} (future)`;\n } else {\n return `${formatted} (past)`;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"formatting.controller.js","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/formatting.controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue, TimeFormat, TimePeriod } from '../timepicker.types.js';\nimport { TimePickerHost, TimeFormattingController } from '../interfaces/timepicker.interface.js';\nimport { TimeUtils } from '../utils/time.utils.js';\nimport { \n DEFAULT_TIME_FORMAT, \n DEFAULT_TIME_FORMAT_WITH_SECONDS,\n DEFAULT_12H_TIME_FORMAT,\n DEFAULT_12H_TIME_FORMAT_WITH_SECONDS\n} from '../timepicker.constants.js';\n\n/**\n * Controller for handling time formatting logic\n */\nexport class TimePickerFormattingController implements TimeFormattingController {\n constructor(private host: TimePickerHost) {}\n\n /**\n * Format time for display (user-facing format)\n */\n formatForDisplay(time: TimeValue): string {\n const config = this.host.getConfig();\n return TimeUtils.formatTimeValue(time, config.format, config.showSeconds);\n }\n\n /**\n * Format time for input field value\n */\n formatForInput(time: TimeValue): string {\n // Input format is typically the same as display format\n return this.formatForDisplay(time);\n }\n\n /**\n * Parse input value to TimeValue\n */\n parseInputValue(value: string): TimeValue | null {\n const config = this.host.getConfig();\n return TimeUtils.parseTimeString(value, config.format);\n }\n\n /**\n * Get time format pattern for the current configuration\n */\n getFormatPattern(): string {\n const config = this.host.getConfig();\n \n if (config.format === TimeFormat.TwelveHour) {\n return config.showSeconds ? DEFAULT_12H_TIME_FORMAT_WITH_SECONDS : DEFAULT_12H_TIME_FORMAT;\n } else {\n return config.showSeconds ? DEFAULT_TIME_FORMAT_WITH_SECONDS : DEFAULT_TIME_FORMAT;\n }\n }\n\n /**\n * Get placeholder text for input field\n */\n getPlaceholder(): string {\n const config = this.host.getConfig();\n \n if (config.format === TimeFormat.TwelveHour) {\n return config.showSeconds ? 'hh:mm:ss AM/PM' : 'hh:mm AM/PM';\n } else {\n return config.showSeconds ? 'HH:mm:ss' : 'HH:mm';\n }\n }\n\n /**\n * Format time component with leading zeros\n */\n formatTimeComponent(value: number, length: number = 2): string {\n return value.toString().padStart(length, '0');\n }\n\n /**\n * Format hours based on current format\n */\n formatHours(hours: number): string {\n const config = this.host.getConfig();\n \n if (config.format === TimeFormat.TwelveHour) {\n let displayHours = hours;\n if (displayHours === 0) {\n displayHours = 12;\n } else if (displayHours > 12) {\n displayHours -= 12;\n }\n return displayHours.toString();\n } else {\n return this.formatTimeComponent(hours);\n }\n }\n\n /**\n * Format minutes with leading zero\n */\n formatMinutes(minutes: number): string {\n return this.formatTimeComponent(minutes);\n }\n\n /**\n * Format seconds with leading zero\n */\n formatSeconds(seconds: number): string {\n return this.formatTimeComponent(seconds);\n }\n\n /**\n * Get period (AM/PM) for 12-hour format\n */\n getPeriod(hours: number): TimePeriod {\n return hours >= 12 ? TimePeriod.PM : TimePeriod.AM;\n }\n\n /**\n * Format time parts separately\n */\n formatTimeParts(time: TimeValue): {\n hours: string;\n minutes: string;\n seconds: string;\n period?: TimePeriod;\n } {\n const config = this.host.getConfig();\n \n return {\n hours: this.formatHours(time.hours),\n minutes: this.formatMinutes(time.minutes),\n seconds: this.formatSeconds(time.seconds),\n period: config.format === TimeFormat.TwelveHour ? this.getPeriod(time.hours) : undefined,\n };\n }\n\n /**\n * Parse time parts from string\n */\n parseTimeParts(timeString: string): {\n hours?: number;\n minutes?: number;\n seconds?: number;\n period?: TimePeriod;\n } | null {\n const config = this.host.getConfig();\n const parsedTime = TimeUtils.parseTimeString(timeString, config.format);\n \n if (!parsedTime) {\n return null;\n }\n\n return {\n hours: parsedTime.hours,\n minutes: parsedTime.minutes,\n seconds: parsedTime.seconds,\n period: config.format === TimeFormat.TwelveHour ? this.getPeriod(parsedTime.hours) : undefined,\n };\n }\n\n /**\n * Get time separator character\n */\n getTimeSeparator(): string {\n return ':';\n }\n\n /**\n * Check if format is valid\n */\n isValidFormat(_format: string): boolean {\n const testTime = TimeUtils.createTimeValue(12, 30, 45);\n try {\n const formatted = this.formatForDisplay(testTime);\n const parsed = this.parseInputValue(formatted);\n return parsed !== null;\n } catch {\n return false;\n }\n }\n\n /**\n * Get format examples\n */\n getFormatExamples(): string[] {\n const config = this.host.getConfig();\n const exampleTimes = [\n TimeUtils.createTimeValue(9, 15, 0),\n TimeUtils.createTimeValue(14, 30, 45),\n TimeUtils.createTimeValue(23, 59, 59),\n ];\n\n return exampleTimes.map(time => TimeUtils.formatTimeValue(time, config.format, config.showSeconds));\n }\n\n /**\n * Convert between formats\n */\n convertFormat(timeString: string, fromFormat: TimeFormat, toFormat: TimeFormat): string | null {\n const parsedTime = TimeUtils.parseTimeString(timeString, fromFormat);\n if (!parsedTime) {\n return null;\n }\n\n const config = this.host.getConfig();\n return TimeUtils.formatTimeValue(parsedTime, toFormat, config.showSeconds);\n }\n\n /**\n * Get human-readable time description\n */\n getTimeDescription(time: TimeValue): string {\n const config = this.host.getConfig();\n const formatted = TimeUtils.formatTimeValue(time, config.format, config.showSeconds);\n \n // Add contextual information\n const now = TimeUtils.getCurrentTime();\n const comparison = TimeUtils.compareTime(time, now);\n \n if (comparison === 0) {\n return `${formatted} (now)`;\n } else if (comparison > 0) {\n return `${formatted} (future)`;\n } else {\n return `${formatted} (past)`;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nexport { TimePickerSelectionController } from './selection.controller.js';\nexport { TimePickerValidationController } from './validation.controller.js';\nexport { TimePickerFormattingController } from './formatting.controller.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nexport { TimePickerSelectionController } from './selection.controller.js';\nexport { TimePickerValidationController } from './validation.controller.js';\nexport { TimePickerFormattingController } from './formatting.controller.js';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"selection.controller.d.ts","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/selection.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAIhG;;GAEG;AACH,qBAAa,6BAA8B,YAAW,uBAAuB;IAG/D,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,YAAY,CAA0B;gBAE1B,IAAI,EAAE,cAAc;IAExC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAejC;;OAEG;IACH,eAAe,IAAI,SAAS,GAAG,IAAI;IAInC;;OAEG;IACH,cAAc,IAAI,IAAI;IAUtB;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAQxC;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAI7C;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI;IAsB7C;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,IAAI,GAAE,MAAU,GAAG,IAAI;IAwBjF;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,IAAI,GAAE,MAAU,GAAG,IAAI;IAIjF;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAY9C;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAQ1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAuB/B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAKxB;;OAEG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI;CAQ/C"}
1
+ {"version":3,"file":"selection.controller.d.ts","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/selection.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAIhG;;GAEG;AACH,qBAAa,6BAA8B,YAAW,uBAAuB;IAG/D,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,YAAY,CAA0B;gBAE1B,IAAI,EAAE,cAAc;IAExC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAejC;;OAEG;IACH,eAAe,IAAI,SAAS,GAAG,IAAI;IAInC;;OAEG;IACH,cAAc,IAAI,IAAI;IAUtB;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAQxC;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAI7C;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI;IAsB7C;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,IAAI,GAAE,MAAU,GAAG,IAAI;IAwBjF;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,IAAI,GAAE,MAAU,GAAG,IAAI;IAIjF;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAY9C;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAQ1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAuB/B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAKxB;;OAEG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI;CAQ/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"selection.controller.js","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/selection.controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue } from '../timepicker.types.js';\nimport { TimePickerHost, TimeSelectionController } from '../interfaces/timepicker.interface.js';\nimport { TimeUtils } from '../utils/time.utils.js';\nimport { TIME_PICKER_EVENTS } from '../timepicker.types.js';\n\n/**\n * Controller for handling time selection logic\n */\nexport class TimePickerSelectionController implements TimeSelectionController {\n private selectedTime: TimeValue | null = null;\n\n constructor(private host: TimePickerHost) {}\n\n /**\n * Select a time value\n */\n selectTime(time: TimeValue): void {\n if (!this.host.validateTime(time)) {\n return;\n }\n\n const previousTime = this.selectedTime;\n this.selectedTime = { ...time };\n\n // Dispatch time change event\n this.dispatchTimeChangeEvent(time, previousTime);\n \n // Request host update\n this.host.requestUpdate();\n }\n\n /**\n * Get currently selected time\n */\n getSelectedTime(): TimeValue | null {\n return this.selectedTime ? { ...this.selectedTime } : null;\n }\n\n /**\n * Clear current selection\n */\n clearSelection(): void {\n const previousTime = this.selectedTime;\n this.selectedTime = null;\n\n if (previousTime) {\n this.dispatchTimeChangeEvent(null, previousTime);\n this.host.requestUpdate();\n }\n }\n\n /**\n * Check if a time is currently selected\n */\n isTimeSelected(time: TimeValue): boolean {\n if (!this.selectedTime) {\n return false;\n }\n\n return TimeUtils.isTimeEqual(time, this.selectedTime);\n }\n\n /**\n * Set time without triggering events (for internal use)\n */\n setTimeInternal(time: TimeValue | null): void {\n this.selectedTime = time ? { ...time } : null;\n }\n\n /**\n * Update selected time with partial values\n */\n updateTime(updates: Partial<TimeValue>): void {\n if (!this.selectedTime) {\n // Create new time with current time as base\n const currentTime = TimeUtils.getCurrentTime();\n this.selectedTime = {\n ...currentTime,\n ...updates,\n };\n } else {\n // Update existing time\n this.selectedTime = {\n ...this.selectedTime,\n ...updates,\n };\n }\n\n if (this.host.validateTime(this.selectedTime)) {\n this.dispatchTimeChangeEvent(this.selectedTime, null);\n this.host.requestUpdate();\n }\n }\n\n /**\n * Increment time component\n */\n incrementTime(component: 'hours' | 'minutes' | 'seconds', step: number = 1): void {\n if (!this.selectedTime) {\n this.selectedTime = TimeUtils.getCurrentTime();\n }\n\n let newTime: TimeValue;\n\n switch (component) {\n case 'hours':\n newTime = TimeUtils.addTime(this.selectedTime, step, 0, 0);\n break;\n case 'minutes':\n newTime = TimeUtils.addTime(this.selectedTime, 0, step, 0);\n break;\n case 'seconds':\n newTime = TimeUtils.addTime(this.selectedTime, 0, 0, step);\n break;\n default:\n return;\n }\n\n this.selectTime(newTime);\n }\n\n /**\n * Decrement time component\n */\n decrementTime(component: 'hours' | 'minutes' | 'seconds', step: number = 1): void {\n this.incrementTime(component, -step);\n }\n\n /**\n * Set time from formatted string\n */\n setTimeFromString(timeString: string): boolean {\n const config = this.host.getConfig();\n const parsedTime = TimeUtils.parseTimeString(timeString, config.format);\n\n if (parsedTime && this.host.validateTime(parsedTime)) {\n this.selectTime(parsedTime);\n return true;\n }\n\n return false;\n }\n\n /**\n * Get formatted time string\n */\n getFormattedTime(): string {\n if (!this.selectedTime) {\n return '';\n }\n\n return this.host.formatTime(this.selectedTime);\n }\n\n /**\n * Dispatch time change event\n */\n private dispatchTimeChangeEvent(newTime: TimeValue | null, previousTime: TimeValue | null): void {\n const hostElement = this.host as any;\n \n if (!hostElement.dispatchEvent) {\n return;\n }\n\n const detail = {\n value: newTime ? this.host.formatTime(newTime) : '',\n timeValue: newTime,\n previousValue: previousTime ? this.host.formatTime(previousTime) : '',\n previousTimeValue: previousTime,\n };\n\n const event = new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n detail,\n bubbles: true,\n composed: true,\n });\n\n hostElement.dispatchEvent(event);\n }\n\n /**\n * Reset to initial/default time\n */\n reset(): void {\n this.clearSelection();\n }\n\n /**\n * Set time to current time\n */\n setToCurrentTime(): void {\n const currentTime = TimeUtils.getCurrentTime();\n this.selectTime(currentTime);\n }\n\n /**\n * Round current time to nearest interval\n */\n roundToInterval(intervalMinutes: number): void {\n if (!this.selectedTime) {\n return;\n }\n\n const roundedTime = TimeUtils.roundToInterval(this.selectedTime, intervalMinutes);\n this.selectTime(roundedTime);\n }\n}\n"]}
1
+ {"version":3,"file":"selection.controller.js","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/selection.controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue } from '../timepicker.types.js';\nimport { TimePickerHost, TimeSelectionController } from '../interfaces/timepicker.interface.js';\nimport { TimeUtils } from '../utils/time.utils.js';\nimport { TIME_PICKER_EVENTS } from '../timepicker.types.js';\n\n/**\n * Controller for handling time selection logic\n */\nexport class TimePickerSelectionController implements TimeSelectionController {\n private selectedTime: TimeValue | null = null;\n\n constructor(private host: TimePickerHost) {}\n\n /**\n * Select a time value\n */\n selectTime(time: TimeValue): void {\n if (!this.host.validateTime(time)) {\n return;\n }\n\n const previousTime = this.selectedTime;\n this.selectedTime = { ...time };\n\n // Dispatch time change event\n this.dispatchTimeChangeEvent(time, previousTime);\n \n // Request host update\n this.host.requestUpdate();\n }\n\n /**\n * Get currently selected time\n */\n getSelectedTime(): TimeValue | null {\n return this.selectedTime ? { ...this.selectedTime } : null;\n }\n\n /**\n * Clear current selection\n */\n clearSelection(): void {\n const previousTime = this.selectedTime;\n this.selectedTime = null;\n\n if (previousTime) {\n this.dispatchTimeChangeEvent(null, previousTime);\n this.host.requestUpdate();\n }\n }\n\n /**\n * Check if a time is currently selected\n */\n isTimeSelected(time: TimeValue): boolean {\n if (!this.selectedTime) {\n return false;\n }\n\n return TimeUtils.isTimeEqual(time, this.selectedTime);\n }\n\n /**\n * Set time without triggering events (for internal use)\n */\n setTimeInternal(time: TimeValue | null): void {\n this.selectedTime = time ? { ...time } : null;\n }\n\n /**\n * Update selected time with partial values\n */\n updateTime(updates: Partial<TimeValue>): void {\n if (!this.selectedTime) {\n // Create new time with current time as base\n const currentTime = TimeUtils.getCurrentTime();\n this.selectedTime = {\n ...currentTime,\n ...updates,\n };\n } else {\n // Update existing time\n this.selectedTime = {\n ...this.selectedTime,\n ...updates,\n };\n }\n\n if (this.host.validateTime(this.selectedTime)) {\n this.dispatchTimeChangeEvent(this.selectedTime, null);\n this.host.requestUpdate();\n }\n }\n\n /**\n * Increment time component\n */\n incrementTime(component: 'hours' | 'minutes' | 'seconds', step: number = 1): void {\n if (!this.selectedTime) {\n this.selectedTime = TimeUtils.getCurrentTime();\n }\n\n let newTime: TimeValue;\n\n switch (component) {\n case 'hours':\n newTime = TimeUtils.addTime(this.selectedTime, step, 0, 0);\n break;\n case 'minutes':\n newTime = TimeUtils.addTime(this.selectedTime, 0, step, 0);\n break;\n case 'seconds':\n newTime = TimeUtils.addTime(this.selectedTime, 0, 0, step);\n break;\n default:\n return;\n }\n\n this.selectTime(newTime);\n }\n\n /**\n * Decrement time component\n */\n decrementTime(component: 'hours' | 'minutes' | 'seconds', step: number = 1): void {\n this.incrementTime(component, -step);\n }\n\n /**\n * Set time from formatted string\n */\n setTimeFromString(timeString: string): boolean {\n const config = this.host.getConfig();\n const parsedTime = TimeUtils.parseTimeString(timeString, config.format);\n\n if (parsedTime && this.host.validateTime(parsedTime)) {\n this.selectTime(parsedTime);\n return true;\n }\n\n return false;\n }\n\n /**\n * Get formatted time string\n */\n getFormattedTime(): string {\n if (!this.selectedTime) {\n return '';\n }\n\n return this.host.formatTime(this.selectedTime);\n }\n\n /**\n * Dispatch time change event\n */\n private dispatchTimeChangeEvent(newTime: TimeValue | null, previousTime: TimeValue | null): void {\n const hostElement = this.host as any;\n \n if (!hostElement.dispatchEvent) {\n return;\n }\n\n const detail = {\n value: newTime ? this.host.formatTime(newTime) : '',\n timeValue: newTime,\n previousValue: previousTime ? this.host.formatTime(previousTime) : '',\n previousTimeValue: previousTime,\n };\n\n const event = new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n detail,\n bubbles: true,\n composed: true,\n });\n\n hostElement.dispatchEvent(event);\n }\n\n /**\n * Reset to initial/default time\n */\n reset(): void {\n this.clearSelection();\n }\n\n /**\n * Set time to current time\n */\n setToCurrentTime(): void {\n const currentTime = TimeUtils.getCurrentTime();\n this.selectTime(currentTime);\n }\n\n /**\n * Round current time to nearest interval\n */\n roundToInterval(intervalMinutes: number): void {\n if (!this.selectedTime) {\n return;\n }\n\n const roundedTime = TimeUtils.roundToInterval(this.selectedTime, intervalMinutes);\n this.selectTime(roundedTime);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.controller.d.ts","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/validation.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAGjG;;GAEG;AACH,qBAAa,8BAA+B,YAAW,wBAAwB;IAGjE,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,WAAW,CAAuB;gBAEtB,IAAI,EAAE,cAAc;IAExC;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAIlD;;OAEG;IACH,cAAc,IAAI,eAAe;IAIjC;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAQ7C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAmBxC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IASxC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAUvC;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAgB7C;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAqBlC;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAM/C;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG;QACpC,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB;IAsBD;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI;IAuBvD;;OAEG;IACH,uBAAuB,IAAI,OAAO;IAKlC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIxC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIxC;;OAEG;IACH,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI;IAI/C;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI;IAI7C;;OAEG;IACH,gBAAgB,IAAI,IAAI;CAGzB"}
1
+ {"version":3,"file":"validation.controller.d.ts","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/validation.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAGjG;;GAEG;AACH,qBAAa,8BAA+B,YAAW,wBAAwB;IAGjE,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,WAAW,CAAuB;gBAEtB,IAAI,EAAE,cAAc;IAExC;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAIlD;;OAEG;IACH,cAAc,IAAI,eAAe;IAIjC;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAQ7C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAmBxC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IASxC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAUvC;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAgB7C;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAqBlC;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAM/C;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG;QACpC,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB;IAsBD;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI;IAuBvD;;OAEG;IACH,uBAAuB,IAAI,OAAO;IAKlC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIxC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIxC;;OAEG;IACH,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI;IAI/C;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI;IAI7C;;OAEG;IACH,gBAAgB,IAAI,IAAI;CAGzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.controller.js","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/validation.controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue, TimeConstraints } from '../timepicker.types.js';\nimport { TimePickerHost, TimeValidationController } from '../interfaces/timepicker.interface.js';\nimport { TimeUtils } from '../utils/time.utils.js';\n\n/**\n * Controller for handling time validation logic\n */\nexport class TimePickerValidationController implements TimeValidationController {\n private constraints: TimeConstraints = {};\n\n constructor(private host: TimePickerHost) {}\n\n /**\n * Set validation constraints\n */\n setConstraints(constraints: TimeConstraints): void {\n this.constraints = { ...constraints };\n }\n\n /**\n * Get current constraints\n */\n getConstraints(): TimeConstraints {\n return { ...this.constraints };\n }\n\n /**\n * Validate time against all constraints\n */\n validateConstraints(time: TimeValue): boolean {\n return (\n this.isTimeInBounds(time) &&\n !this.isTimeDisabled(time) &&\n this.isTimeEnabled(time)\n );\n }\n\n /**\n * Check if time is within min/max bounds\n */\n isTimeInBounds(time: TimeValue): boolean {\n let minTime: TimeValue | null = null;\n let maxTime: TimeValue | null = null;\n\n // Parse min time constraint\n if (this.constraints.minTime) {\n const config = this.host.getConfig();\n minTime = TimeUtils.parseTimeString(this.constraints.minTime, config.format);\n }\n\n // Parse max time constraint\n if (this.constraints.maxTime) {\n const config = this.host.getConfig();\n maxTime = TimeUtils.parseTimeString(this.constraints.maxTime, config.format);\n }\n\n return TimeUtils.isTimeInRange(time, minTime, maxTime);\n }\n\n /**\n * Check if time is explicitly disabled\n */\n isTimeDisabled(time: TimeValue): boolean {\n if (!this.constraints.disabledTimes || this.constraints.disabledTimes.length === 0) {\n return false;\n }\n\n const timeString = this.host.formatTime(time);\n return this.constraints.disabledTimes.includes(timeString);\n }\n\n /**\n * Check if time is in enabled times list (if specified)\n */\n isTimeEnabled(time: TimeValue): boolean {\n // If no enabled times specified, all times are enabled (except disabled ones)\n if (!this.constraints.enabledTimes || this.constraints.enabledTimes.length === 0) {\n return true;\n }\n\n const timeString = this.host.formatTime(time);\n return this.constraints.enabledTimes.includes(timeString);\n }\n\n /**\n * Get validation message for a time\n */\n getValidationMessage(time: TimeValue): string {\n if (!this.isTimeInBounds(time)) {\n return this.getBoundsValidationMessage(time);\n }\n\n if (this.isTimeDisabled(time)) {\n return 'This time is not available';\n }\n\n if (!this.isTimeEnabled(time)) {\n return 'This time is not in the allowed time range';\n }\n\n return '';\n }\n\n /**\n * Get bounds validation message\n */\n private getBoundsValidationMessage(time: TimeValue): string {\n const config = this.host.getConfig();\n let message = '';\n\n if (this.constraints.minTime && this.constraints.maxTime) {\n message = `Time must be between ${this.constraints.minTime} and ${this.constraints.maxTime}`;\n } else if (this.constraints.minTime) {\n const minTime = TimeUtils.parseTimeString(this.constraints.minTime, config.format);\n if (minTime && TimeUtils.compareTime(time, minTime) < 0) {\n message = `Time must be after ${this.constraints.minTime}`;\n }\n } else if (this.constraints.maxTime) {\n const maxTime = TimeUtils.parseTimeString(this.constraints.maxTime, config.format);\n if (maxTime && TimeUtils.compareTime(time, maxTime) > 0) {\n message = `Time must be before ${this.constraints.maxTime}`;\n }\n }\n\n return message;\n }\n\n /**\n * Validate time format\n */\n validateTimeFormat(timeString: string): boolean {\n const config = this.host.getConfig();\n const parsedTime = TimeUtils.parseTimeString(timeString, config.format);\n return parsedTime !== null;\n }\n\n /**\n * Get validation result with details\n */\n getValidationResult(time: TimeValue): {\n isValid: boolean;\n message: string;\n errors: string[];\n } {\n const errors: string[] = [];\n \n if (!this.isTimeInBounds(time)) {\n errors.push(this.getBoundsValidationMessage(time));\n }\n\n if (this.isTimeDisabled(time)) {\n errors.push('This time is disabled');\n }\n\n if (!this.isTimeEnabled(time)) {\n errors.push('This time is not in the allowed range');\n }\n\n return {\n isValid: errors.length === 0,\n message: errors.length > 0 ? errors[0] : '',\n errors,\n };\n }\n\n /**\n * Find nearest valid time\n */\n findNearestValidTime(time: TimeValue): TimeValue | null {\n if (this.validateConstraints(time)) {\n return time;\n }\n\n // Try nearby times (within 1 hour range)\n for (let minuteOffset = 1; minuteOffset <= 60; minuteOffset++) {\n // Try adding minutes\n const laterTime = TimeUtils.addTime(time, 0, minuteOffset, 0);\n if (this.validateConstraints(laterTime)) {\n return laterTime;\n }\n\n // Try subtracting minutes\n const earlierTime = TimeUtils.addTime(time, 0, -minuteOffset, 0);\n if (this.validateConstraints(earlierTime)) {\n return earlierTime;\n }\n }\n\n return null;\n }\n\n /**\n * Check if current time selection is valid\n */\n isCurrentSelectionValid(): boolean {\n const selectedTime = this.host.getCurrentTime();\n return this.validateConstraints(selectedTime);\n }\n\n /**\n * Set min time constraint\n */\n setMinTime(minTime: string | null): void {\n this.constraints.minTime = minTime || undefined;\n }\n\n /**\n * Set max time constraint\n */\n setMaxTime(maxTime: string | null): void {\n this.constraints.maxTime = maxTime || undefined;\n }\n\n /**\n * Set disabled times\n */\n setDisabledTimes(disabledTimes: string[]): void {\n this.constraints.disabledTimes = [...disabledTimes];\n }\n\n /**\n * Set enabled times\n */\n setEnabledTimes(enabledTimes: string[]): void {\n this.constraints.enabledTimes = [...enabledTimes];\n }\n\n /**\n * Clear all constraints\n */\n clearConstraints(): void {\n this.constraints = {};\n }\n}\n"]}
1
+ {"version":3,"file":"validation.controller.js","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/validation.controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue, TimeConstraints } from '../timepicker.types.js';\nimport { TimePickerHost, TimeValidationController } from '../interfaces/timepicker.interface.js';\nimport { TimeUtils } from '../utils/time.utils.js';\n\n/**\n * Controller for handling time validation logic\n */\nexport class TimePickerValidationController implements TimeValidationController {\n private constraints: TimeConstraints = {};\n\n constructor(private host: TimePickerHost) {}\n\n /**\n * Set validation constraints\n */\n setConstraints(constraints: TimeConstraints): void {\n this.constraints = { ...constraints };\n }\n\n /**\n * Get current constraints\n */\n getConstraints(): TimeConstraints {\n return { ...this.constraints };\n }\n\n /**\n * Validate time against all constraints\n */\n validateConstraints(time: TimeValue): boolean {\n return (\n this.isTimeInBounds(time) &&\n !this.isTimeDisabled(time) &&\n this.isTimeEnabled(time)\n );\n }\n\n /**\n * Check if time is within min/max bounds\n */\n isTimeInBounds(time: TimeValue): boolean {\n let minTime: TimeValue | null = null;\n let maxTime: TimeValue | null = null;\n\n // Parse min time constraint\n if (this.constraints.minTime) {\n const config = this.host.getConfig();\n minTime = TimeUtils.parseTimeString(this.constraints.minTime, config.format);\n }\n\n // Parse max time constraint\n if (this.constraints.maxTime) {\n const config = this.host.getConfig();\n maxTime = TimeUtils.parseTimeString(this.constraints.maxTime, config.format);\n }\n\n return TimeUtils.isTimeInRange(time, minTime, maxTime);\n }\n\n /**\n * Check if time is explicitly disabled\n */\n isTimeDisabled(time: TimeValue): boolean {\n if (!this.constraints.disabledTimes || this.constraints.disabledTimes.length === 0) {\n return false;\n }\n\n const timeString = this.host.formatTime(time);\n return this.constraints.disabledTimes.includes(timeString);\n }\n\n /**\n * Check if time is in enabled times list (if specified)\n */\n isTimeEnabled(time: TimeValue): boolean {\n // If no enabled times specified, all times are enabled (except disabled ones)\n if (!this.constraints.enabledTimes || this.constraints.enabledTimes.length === 0) {\n return true;\n }\n\n const timeString = this.host.formatTime(time);\n return this.constraints.enabledTimes.includes(timeString);\n }\n\n /**\n * Get validation message for a time\n */\n getValidationMessage(time: TimeValue): string {\n if (!this.isTimeInBounds(time)) {\n return this.getBoundsValidationMessage(time);\n }\n\n if (this.isTimeDisabled(time)) {\n return 'This time is not available';\n }\n\n if (!this.isTimeEnabled(time)) {\n return 'This time is not in the allowed time range';\n }\n\n return '';\n }\n\n /**\n * Get bounds validation message\n */\n private getBoundsValidationMessage(time: TimeValue): string {\n const config = this.host.getConfig();\n let message = '';\n\n if (this.constraints.minTime && this.constraints.maxTime) {\n message = `Time must be between ${this.constraints.minTime} and ${this.constraints.maxTime}`;\n } else if (this.constraints.minTime) {\n const minTime = TimeUtils.parseTimeString(this.constraints.minTime, config.format);\n if (minTime && TimeUtils.compareTime(time, minTime) < 0) {\n message = `Time must be after ${this.constraints.minTime}`;\n }\n } else if (this.constraints.maxTime) {\n const maxTime = TimeUtils.parseTimeString(this.constraints.maxTime, config.format);\n if (maxTime && TimeUtils.compareTime(time, maxTime) > 0) {\n message = `Time must be before ${this.constraints.maxTime}`;\n }\n }\n\n return message;\n }\n\n /**\n * Validate time format\n */\n validateTimeFormat(timeString: string): boolean {\n const config = this.host.getConfig();\n const parsedTime = TimeUtils.parseTimeString(timeString, config.format);\n return parsedTime !== null;\n }\n\n /**\n * Get validation result with details\n */\n getValidationResult(time: TimeValue): {\n isValid: boolean;\n message: string;\n errors: string[];\n } {\n const errors: string[] = [];\n \n if (!this.isTimeInBounds(time)) {\n errors.push(this.getBoundsValidationMessage(time));\n }\n\n if (this.isTimeDisabled(time)) {\n errors.push('This time is disabled');\n }\n\n if (!this.isTimeEnabled(time)) {\n errors.push('This time is not in the allowed range');\n }\n\n return {\n isValid: errors.length === 0,\n message: errors.length > 0 ? errors[0] : '',\n errors,\n };\n }\n\n /**\n * Find nearest valid time\n */\n findNearestValidTime(time: TimeValue): TimeValue | null {\n if (this.validateConstraints(time)) {\n return time;\n }\n\n // Try nearby times (within 1 hour range)\n for (let minuteOffset = 1; minuteOffset <= 60; minuteOffset++) {\n // Try adding minutes\n const laterTime = TimeUtils.addTime(time, 0, minuteOffset, 0);\n if (this.validateConstraints(laterTime)) {\n return laterTime;\n }\n\n // Try subtracting minutes\n const earlierTime = TimeUtils.addTime(time, 0, -minuteOffset, 0);\n if (this.validateConstraints(earlierTime)) {\n return earlierTime;\n }\n }\n\n return null;\n }\n\n /**\n * Check if current time selection is valid\n */\n isCurrentSelectionValid(): boolean {\n const selectedTime = this.host.getCurrentTime();\n return this.validateConstraints(selectedTime);\n }\n\n /**\n * Set min time constraint\n */\n setMinTime(minTime: string | null): void {\n this.constraints.minTime = minTime || undefined;\n }\n\n /**\n * Set max time constraint\n */\n setMaxTime(maxTime: string | null): void {\n this.constraints.maxTime = maxTime || undefined;\n }\n\n /**\n * Set disabled times\n */\n setDisabledTimes(disabledTimes: string[]): void {\n this.constraints.disabledTimes = [...disabledTimes];\n }\n\n /**\n * Set enabled times\n */\n setEnabledTimes(enabledTimes: string[]): void {\n this.constraints.enabledTimes = [...enabledTimes];\n }\n\n /**\n * Clear all constraints\n */\n clearConstraints(): void {\n this.constraints = {};\n }\n}\n"]}
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/timepicker/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sCAAsC,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nexport { NrTimePickerElement } from './timepicker.component.js';\nexport * from './timepicker.types.js';\nexport * from './timepicker.constants.js';\nexport * from './utils/time.utils.js';\nexport * from './controllers/index.js';\nexport * from './interfaces/timepicker.interface.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/timepicker/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sCAAsC,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nexport { NrTimePickerElement } from './timepicker.component.js';\nexport * from './timepicker.types.js';\nexport * from './timepicker.constants.js';\nexport * from './utils/time.utils.js';\nexport * from './controllers/index.js';\nexport * from './interfaces/timepicker.interface.js';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker.interface.d.ts","sourceRoot":"","sources":["../../../../src/components/timepicker/interfaces/timepicker.interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,cAAc,IAAI,SAAS,CAAC;IAE5B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IAEpC;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAEhD;;OAEG;IACH,SAAS,IAAI,gBAAgB,CAAC;IAE9B;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAEvC;;OAEG;IACH,aAAa,IAAI,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAElC;;OAEG;IACH,eAAe,IAAI,SAAS,GAAG,IAAI,CAAC;IAEpC;;OAEG;IACH,cAAc,IAAI,IAAI,CAAC;IAEvB;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAE9C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAEzC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAEzC;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IAE1C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IAExC;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAEjD;;OAEG;IACH,gBAAgB,IAAI,MAAM,CAAC;CAC5B"}
1
+ {"version":3,"file":"timepicker.interface.d.ts","sourceRoot":"","sources":["../../../../../src/components/timepicker/interfaces/timepicker.interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,cAAc,IAAI,SAAS,CAAC;IAE5B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IAEpC;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAEhD;;OAEG;IACH,SAAS,IAAI,gBAAgB,CAAC;IAE9B;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAEvC;;OAEG;IACH,aAAa,IAAI,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAElC;;OAEG;IACH,eAAe,IAAI,SAAS,GAAG,IAAI,CAAC;IAEpC;;OAEG;IACH,cAAc,IAAI,IAAI,CAAC;IAEvB;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAE9C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAEzC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAEzC;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IAE1C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IAExC;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAEjD;;OAEG;IACH,gBAAgB,IAAI,MAAM,CAAC;CAC5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker.interface.js","sourceRoot":"","sources":["../../../../src/components/timepicker/interfaces/timepicker.interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue, TimePickerConfig } from '../timepicker.types.js';\n\n/**\n * Base controller interface for time picker host\n */\nexport interface TimePickerHost {\n /**\n * Get current time value\n */\n getCurrentTime(): TimeValue;\n\n /**\n * Set time value\n */\n setTime(time: TimeValue): void;\n\n /**\n * Format time value to string\n */\n formatTime(time: TimeValue): string;\n\n /**\n * Parse time string to TimeValue\n */\n parseTime(timeString: string): TimeValue | null;\n\n /**\n * Get time picker configuration\n */\n getConfig(): TimePickerConfig;\n\n /**\n * Validate time value\n */\n validateTime(time: TimeValue): boolean;\n\n /**\n * Request component update\n */\n requestUpdate(): void;\n}\n\n/**\n * Time selection controller interface\n */\nexport interface TimeSelectionController {\n /**\n * Select time value\n */\n selectTime(time: TimeValue): void;\n\n /**\n * Get selected time\n */\n getSelectedTime(): TimeValue | null;\n\n /**\n * Clear selection\n */\n clearSelection(): void;\n\n /**\n * Check if time is selected\n */\n isTimeSelected(time: TimeValue): boolean;\n}\n\n/**\n * Time validation controller interface\n */\nexport interface TimeValidationController {\n /**\n * Validate time constraints\n */\n validateConstraints(time: TimeValue): boolean;\n\n /**\n * Check if time is within min/max bounds\n */\n isTimeInBounds(time: TimeValue): boolean;\n\n /**\n * Check if time is disabled\n */\n isTimeDisabled(time: TimeValue): boolean;\n\n /**\n * Get validation message\n */\n getValidationMessage(time: TimeValue): string;\n}\n\n/**\n * Time formatting controller interface\n */\nexport interface TimeFormattingController {\n /**\n * Format time to display string\n */\n formatForDisplay(time: TimeValue): string;\n\n /**\n * Format time to input value\n */\n formatForInput(time: TimeValue): string;\n\n /**\n * Parse input value to time\n */\n parseInputValue(value: string): TimeValue | null;\n\n /**\n * Get time format pattern\n */\n getFormatPattern(): string;\n}\n"]}
1
+ {"version":3,"file":"timepicker.interface.js","sourceRoot":"","sources":["../../../../../src/components/timepicker/interfaces/timepicker.interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue, TimePickerConfig } from '../timepicker.types.js';\n\n/**\n * Base controller interface for time picker host\n */\nexport interface TimePickerHost {\n /**\n * Get current time value\n */\n getCurrentTime(): TimeValue;\n\n /**\n * Set time value\n */\n setTime(time: TimeValue): void;\n\n /**\n * Format time value to string\n */\n formatTime(time: TimeValue): string;\n\n /**\n * Parse time string to TimeValue\n */\n parseTime(timeString: string): TimeValue | null;\n\n /**\n * Get time picker configuration\n */\n getConfig(): TimePickerConfig;\n\n /**\n * Validate time value\n */\n validateTime(time: TimeValue): boolean;\n\n /**\n * Request component update\n */\n requestUpdate(): void;\n}\n\n/**\n * Time selection controller interface\n */\nexport interface TimeSelectionController {\n /**\n * Select time value\n */\n selectTime(time: TimeValue): void;\n\n /**\n * Get selected time\n */\n getSelectedTime(): TimeValue | null;\n\n /**\n * Clear selection\n */\n clearSelection(): void;\n\n /**\n * Check if time is selected\n */\n isTimeSelected(time: TimeValue): boolean;\n}\n\n/**\n * Time validation controller interface\n */\nexport interface TimeValidationController {\n /**\n * Validate time constraints\n */\n validateConstraints(time: TimeValue): boolean;\n\n /**\n * Check if time is within min/max bounds\n */\n isTimeInBounds(time: TimeValue): boolean;\n\n /**\n * Check if time is disabled\n */\n isTimeDisabled(time: TimeValue): boolean;\n\n /**\n * Get validation message\n */\n getValidationMessage(time: TimeValue): string;\n}\n\n/**\n * Time formatting controller interface\n */\nexport interface TimeFormattingController {\n /**\n * Format time to display string\n */\n formatForDisplay(time: TimeValue): string;\n\n /**\n * Format time to input value\n */\n formatForInput(time: TimeValue): string;\n\n /**\n * Parse input value to time\n */\n parseInputValue(value: string): TimeValue | null;\n\n /**\n * Get time format pattern\n */\n getFormatPattern(): string;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuralyui/timepicker",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "NuralyUI TimePicker - A comprehensive time selection component with clock interface, multiple formats, and validation",
5
5
  "type": "module",
6
6
  "main": "./index.js",
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker.test.d.ts","sourceRoot":"","sources":["../../../../src/components/timepicker/test/timepicker.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
1
+ {"version":3,"file":"timepicker.test.d.ts","sourceRoot":"","sources":["../../../../../src/components/timepicker/test/timepicker.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker.test.js","sourceRoot":"","sources":["../../../../src/components/timepicker/test/timepicker.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { html, fixture, expect, aTimeout } from '@open-wc/testing';\nimport { NrTimePickerElement } from '../timepicker.component.js';\nimport { TimeFormat, TimePickerSize, TimePickerVariant } from '../timepicker.types.js';\n\ndescribe('NrTimePickerElement', () => {\n let element: NrTimePickerElement;\n\n beforeEach(async () => {\n element = await fixture(html`<nr-timepicker></nr-timepicker>`);\n });\n\n describe('Basic functionality', () => {\n it('should render successfully', () => {\n expect(element).to.exist;\n expect(element.tagName).to.equal('NR-TIMEPICKER');\n });\n\n it('should have default properties', () => {\n expect(element.format).to.equal(TimeFormat.TwentyFourHour);\n expect(element.showSeconds).to.be.false;\n expect(element.disabled).to.be.false;\n expect(element.readonly).to.be.false;\n expect(element.required).to.be.false;\n });\n\n it('should have empty initial value', () => {\n expect(element.value).to.equal('');\n });\n });\n\n describe('Time format handling', () => {\n it('should handle 24-hour format by default', async () => {\n element.value = '14:30';\n await element.updateComplete;\n expect(element.value).to.equal('14:30');\n });\n\n it('should handle 12-hour format', async () => {\n element.format = TimeFormat.TwelveHour;\n element.value = '2:30 PM';\n await element.updateComplete;\n expect(element.value).to.equal('2:30 PM');\n });\n\n it('should format time with seconds when enabled', async () => {\n element.showSeconds = true;\n element.value = '14:30:45';\n await element.updateComplete;\n expect(element.value).to.equal('14:30:45');\n });\n });\n\n describe('Time validation', () => {\n it('should validate time within min/max range', async () => {\n element.minTime = '09:00';\n element.maxTime = '17:00';\n await element.updateComplete;\n \n // Valid time within range\n element.value = '12:00';\n await element.updateComplete;\n expect(element.value).to.equal('12:00');\n });\n\n it('should reject invalid time formats', async () => {\n const invalidValue = 'invalid-time';\n element.value = invalidValue;\n await element.updateComplete;\n \n // Should not set invalid value\n expect(element.value).to.not.equal(invalidValue);\n });\n });\n\n describe('Clock functionality', () => {\n it('should open and close clock', async () => {\n // Check initial state via DOM\n let dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n \n element.open();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.exist;\n \n element.close();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n });\n\n it('should toggle clock state via trigger button', async () => {\n const trigger = element.shadowRoot?.querySelector('.time-picker__trigger') as HTMLButtonElement;\n \n // Initially closed\n let dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n \n // Click to open\n trigger.click();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.exist;\n \n // Click to close\n trigger.click();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n });\n });\n\n describe('Time manipulation', () => {\n it('should clear time value', async () => {\n element.value = '12:00';\n await element.updateComplete;\n \n element.clear();\n await element.updateComplete;\n expect(element.value).to.equal('');\n });\n\n it('should set current time', async () => {\n element.setToNow();\n await element.updateComplete;\n \n // Should have some value after setting to now\n expect(element.value).to.not.equal('');\n // Basic format check for 24-hour format\n expect(element.value).to.match(/^\\d{1,2}:\\d{2}$/);\n });\n });\n\n describe('Event handling', () => {\n it('should dispatch time-change event', async () => {\n let eventFired = false;\n let eventDetail = null;\n\n element.addEventListener('nr-time-change', (e: Event) => {\n const customEvent = e as CustomEvent;\n eventFired = true;\n eventDetail = customEvent.detail;\n });\n\n element.value = '15:30';\n await element.updateComplete;\n \n // Allow time for event to be dispatched\n await aTimeout(10);\n \n expect(eventFired).to.be.true;\n expect(eventDetail).to.exist;\n });\n\n it('should dispatch clock open/close events', async () => {\n let openEventFired = false;\n let closeEventFired = false;\n\n element.addEventListener('nr-clock-open', () => {\n openEventFired = true;\n });\n\n element.addEventListener('nr-clock-close', () => {\n closeEventFired = true;\n });\n\n element.open();\n await element.updateComplete;\n await aTimeout(10);\n expect(openEventFired).to.be.true;\n\n element.close();\n await element.updateComplete;\n await aTimeout(10);\n expect(closeEventFired).to.be.true;\n });\n });\n\n describe('Accessibility', () => {\n it('should have proper ARIA attributes', async () => {\n element.label = 'Select Time';\n element.required = true;\n await element.updateComplete;\n\n const input = element.shadowRoot?.querySelector('input');\n expect(input).to.exist;\n expect(input?.getAttribute('required')).to.exist;\n });\n\n it('should support disabled state', async () => {\n element.disabled = true;\n await element.updateComplete;\n\n const input = element.shadowRoot?.querySelector('input');\n expect(input?.hasAttribute('disabled')).to.be.true;\n });\n\n it('should support readonly state', async () => {\n element.readonly = true;\n await element.updateComplete;\n\n const input = element.shadowRoot?.querySelector('input');\n expect(input?.hasAttribute('readonly')).to.be.true;\n });\n });\n\n describe('Size and variant attributes', () => {\n it('should apply size attribute to host', async () => {\n element.size = TimePickerSize.Large;\n await element.updateComplete;\n expect(element.hasAttribute('size')).to.be.true;\n expect(element.getAttribute('size')).to.equal('large');\n });\n\n it('should apply variant attribute to host', async () => {\n element.variant = TimePickerVariant.Outlined;\n await element.updateComplete;\n expect(element.hasAttribute('variant')).to.be.true;\n expect(element.getAttribute('variant')).to.equal('outlined');\n });\n });\n\n describe('Controller integration', () => {\n it('should have selection controller', () => {\n // Access private controller for testing (cast to any to bypass TypeScript)\n const controller = (element as any).selectionController;\n expect(controller).to.exist;\n expect(typeof controller.selectTime).to.equal('function');\n });\n\n it('should have validation controller', () => {\n const controller = (element as any).validationController;\n expect(controller).to.exist;\n expect(typeof controller.validateConstraints).to.equal('function');\n });\n\n it('should have formatting controller', () => {\n const controller = (element as any).formattingController;\n expect(controller).to.exist;\n expect(typeof controller.formatForDisplay).to.equal('function');\n });\n });\n});\n"]}
1
+ {"version":3,"file":"timepicker.test.js","sourceRoot":"","sources":["../../../../../src/components/timepicker/test/timepicker.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { html, fixture, expect, aTimeout } from '@open-wc/testing';\nimport { NrTimePickerElement } from '../timepicker.component.js';\nimport { TimeFormat, TimePickerSize, TimePickerVariant } from '../timepicker.types.js';\n\ndescribe('NrTimePickerElement', () => {\n let element: NrTimePickerElement;\n\n beforeEach(async () => {\n element = await fixture(html`<nr-timepicker></nr-timepicker>`);\n });\n\n describe('Basic functionality', () => {\n it('should render successfully', () => {\n expect(element).to.exist;\n expect(element.tagName).to.equal('NR-TIMEPICKER');\n });\n\n it('should have default properties', () => {\n expect(element.format).to.equal(TimeFormat.TwentyFourHour);\n expect(element.showSeconds).to.be.false;\n expect(element.disabled).to.be.false;\n expect(element.readonly).to.be.false;\n expect(element.required).to.be.false;\n });\n\n it('should have empty initial value', () => {\n expect(element.value).to.equal('');\n });\n });\n\n describe('Time format handling', () => {\n it('should handle 24-hour format by default', async () => {\n element.value = '14:30';\n await element.updateComplete;\n expect(element.value).to.equal('14:30');\n });\n\n it('should handle 12-hour format', async () => {\n element.format = TimeFormat.TwelveHour;\n element.value = '2:30 PM';\n await element.updateComplete;\n expect(element.value).to.equal('2:30 PM');\n });\n\n it('should format time with seconds when enabled', async () => {\n element.showSeconds = true;\n element.value = '14:30:45';\n await element.updateComplete;\n expect(element.value).to.equal('14:30:45');\n });\n });\n\n describe('Time validation', () => {\n it('should validate time within min/max range', async () => {\n element.minTime = '09:00';\n element.maxTime = '17:00';\n await element.updateComplete;\n \n // Valid time within range\n element.value = '12:00';\n await element.updateComplete;\n expect(element.value).to.equal('12:00');\n });\n\n it('should reject invalid time formats', async () => {\n const invalidValue = 'invalid-time';\n element.value = invalidValue;\n await element.updateComplete;\n \n // Should not set invalid value\n expect(element.value).to.not.equal(invalidValue);\n });\n });\n\n describe('Clock functionality', () => {\n it('should open and close clock', async () => {\n // Check initial state via DOM\n let dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n \n element.open();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.exist;\n \n element.close();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n });\n\n it('should toggle clock state via trigger button', async () => {\n const trigger = element.shadowRoot?.querySelector('.time-picker__trigger') as HTMLButtonElement;\n \n // Initially closed\n let dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n \n // Click to open\n trigger.click();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.exist;\n \n // Click to close\n trigger.click();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n });\n });\n\n describe('Time manipulation', () => {\n it('should clear time value', async () => {\n element.value = '12:00';\n await element.updateComplete;\n \n element.clear();\n await element.updateComplete;\n expect(element.value).to.equal('');\n });\n\n it('should set current time', async () => {\n element.setToNow();\n await element.updateComplete;\n \n // Should have some value after setting to now\n expect(element.value).to.not.equal('');\n // Basic format check for 24-hour format\n expect(element.value).to.match(/^\\d{1,2}:\\d{2}$/);\n });\n });\n\n describe('Event handling', () => {\n it('should dispatch time-change event', async () => {\n let eventFired = false;\n let eventDetail = null;\n\n element.addEventListener('nr-time-change', (e: Event) => {\n const customEvent = e as CustomEvent;\n eventFired = true;\n eventDetail = customEvent.detail;\n });\n\n element.value = '15:30';\n await element.updateComplete;\n \n // Allow time for event to be dispatched\n await aTimeout(10);\n \n expect(eventFired).to.be.true;\n expect(eventDetail).to.exist;\n });\n\n it('should dispatch clock open/close events', async () => {\n let openEventFired = false;\n let closeEventFired = false;\n\n element.addEventListener('nr-clock-open', () => {\n openEventFired = true;\n });\n\n element.addEventListener('nr-clock-close', () => {\n closeEventFired = true;\n });\n\n element.open();\n await element.updateComplete;\n await aTimeout(10);\n expect(openEventFired).to.be.true;\n\n element.close();\n await element.updateComplete;\n await aTimeout(10);\n expect(closeEventFired).to.be.true;\n });\n });\n\n describe('Accessibility', () => {\n it('should have proper ARIA attributes', async () => {\n element.label = 'Select Time';\n element.required = true;\n await element.updateComplete;\n\n const input = element.shadowRoot?.querySelector('input');\n expect(input).to.exist;\n expect(input?.getAttribute('required')).to.exist;\n });\n\n it('should support disabled state', async () => {\n element.disabled = true;\n await element.updateComplete;\n\n const input = element.shadowRoot?.querySelector('input');\n expect(input?.hasAttribute('disabled')).to.be.true;\n });\n\n it('should support readonly state', async () => {\n element.readonly = true;\n await element.updateComplete;\n\n const input = element.shadowRoot?.querySelector('input');\n expect(input?.hasAttribute('readonly')).to.be.true;\n });\n });\n\n describe('Size and variant attributes', () => {\n it('should apply size attribute to host', async () => {\n element.size = TimePickerSize.Large;\n await element.updateComplete;\n expect(element.hasAttribute('size')).to.be.true;\n expect(element.getAttribute('size')).to.equal('large');\n });\n\n it('should apply variant attribute to host', async () => {\n element.variant = TimePickerVariant.Outlined;\n await element.updateComplete;\n expect(element.hasAttribute('variant')).to.be.true;\n expect(element.getAttribute('variant')).to.equal('outlined');\n });\n });\n\n describe('Controller integration', () => {\n it('should have selection controller', () => {\n // Access private controller for testing (cast to any to bypass TypeScript)\n const controller = (element as any).selectionController;\n expect(controller).to.exist;\n expect(typeof controller.selectTime).to.equal('function');\n });\n\n it('should have validation controller', () => {\n const controller = (element as any).validationController;\n expect(controller).to.exist;\n expect(typeof controller.validateConstraints).to.equal('function');\n });\n\n it('should have formatting controller', () => {\n const controller = (element as any).formattingController;\n expect(controller).to.exist;\n expect(typeof controller.formatForDisplay).to.equal('function');\n });\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker.component.js","sourceRoot":"","sources":["../../../src/components/timepicker/timepicker.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, TemplateResult, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { INPUT_STATE } from '../input/input.types.js';\n\n// Import base mixin and types\nimport { NuralyUIBaseMixin } from '@nuralyui/common/mixins';\nimport { SharedDropdownController } from '@nuralyui/common/controllers';\nimport { DropdownHost } from '@nuralyui/common/controllers';\nimport {\n TimeValue,\n TimeFormat,\n TimePickerConfig,\n TimePickerState,\n TimePickerPlacement,\n TimeConstraints,\n TimePeriod,\n TimeStep,\n EMPTY_TIME_VALUE,\n TIME_PICKER_EVENTS,\n} from './timepicker.types.js';\n\n// Import controllers\nimport { TimePickerSelectionController } from './controllers/selection.controller.js';\nimport { TimePickerValidationController } from './controllers/validation.controller.js';\nimport { TimePickerFormattingController } from './controllers/formatting.controller.js';\n\n// Import utilities\nimport { TimeUtils } from './utils/time.utils.js';\n\n// Import styles\nimport { styles as timePickerStyles } from './timepicker.style.js';\n\n// Host interface for controllers\nexport interface TimePickerHost extends LitElement, DropdownHost {\n getCurrentTime(): TimeValue;\n setTime(time: TimeValue): void;\n formatTime(time: TimeValue): string;\n parseTime(timeString: string): TimeValue | null;\n getConfig(): TimePickerConfig;\n validateTime(time: TimeValue): boolean;\n requestUpdate(): void;\n}\n\n/**\n * A comprehensive time picker component that supports both 12-hour and 24-hour formats,\n * with optional seconds display and extensive customization options.\n * \n * @example\n * ```html\n * <nr-timepicker \n * value=\"14:30:00\" \n * format=\"24h\" \n * show-seconds\n * placeholder=\"Select time\">\n * </nr-timepicker>\n * ```\n */\n@customElement('nr-timepicker')\nexport class NrTimePickerElement extends NuralyUIBaseMixin(LitElement) implements TimePickerHost {\n static override styles = [timePickerStyles];\n\n // Properties\n @property({ type: String }) value = '';\n @property({ type: String }) name = '';\n @property({ type: String }) placeholder = 'Select time';\n @property({ type: String }) format: TimeFormat = TimeFormat.TwentyFourHour;\n @property({ type: Boolean, attribute: 'show-seconds' }) showSeconds = false;\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) readonly = false;\n @property({ type: Boolean }) required = false;\n @property({ type: String, attribute: 'min-time' }) minTime?: string;\n @property({ type: String, attribute: 'max-time' }) maxTime?: string;\n @property({ type: Array, attribute: 'disabled-times' }) disabledTimes?: string[];\n @property({ type: Array, attribute: 'enabled-times' }) enabledTimes?: string[];\n @property({ type: String, attribute: 'helper-text' }) helperText = '';\n @property({ type: String }) label = '';\n @property({ type: String }) size: 'small' | 'medium' | 'large' = 'medium';\n @property({ type: String }) variant: 'outlined' | 'filled' | 'standard' = 'outlined';\n @property({ type: String }) placement: TimePickerPlacement = TimePickerPlacement.Bottom;\n \n /** Scroll behavior for dropdown navigation - 'instant' for immediate, 'smooth' for animated, 'auto' for browser default */\n @property({ type: String, attribute: 'scroll-behavior' }) scrollBehavior: 'auto' | 'instant' | 'smooth' = 'instant';\n\n // State\n @state() private inputValue = '';\n @state() private state: TimePickerState = TimePickerState.Default;\n @state() private validationMessage = '';\n\n // Controllers\n private dropdownController = new SharedDropdownController(this);\n private selectionController = new TimePickerSelectionController(this);\n private validationController = new TimePickerValidationController(this);\n private formattingController = new TimePickerFormattingController(this);\n\n constructor() {\n super();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.updateConstraints();\n if (this.value) {\n this.setTimeFromValue(this.value);\n }\n \n // Add global click listener to close dropdown when clicking outside\n this.addEventListener('click', this.handleComponentClick.bind(this));\n document.addEventListener('click', this.handleDocumentClick.bind(this));\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n // Clean up global event listeners\n document.removeEventListener('click', this.handleDocumentClick.bind(this));\n }\n\n override updated(changedProperties: Map<string, any>): void {\n super.updated(changedProperties);\n\n if (changedProperties.has('value') && this.value !== this.inputValue) {\n this.setTimeFromValue(this.value);\n // Scroll to the selected time when value changes from outside\n if (this.dropdownController.isOpen) {\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 50);\n }\n }\n\n if (this.shouldUpdateConstraints(changedProperties)) {\n this.updateConstraints();\n }\n\n // Set up dropdown elements\n this.setupDropdownElements();\n }\n\n private setupDropdownElements(): void {\n const dropdown = this.shadowRoot?.querySelector('.time-picker__dropdown') as HTMLElement;\n const trigger = this.shadowRoot?.querySelector('.time-picker__input-wrapper') as HTMLElement;\n \n if (dropdown && trigger) {\n this.dropdownController.setElements(dropdown, trigger);\n }\n }\n\n override render(): TemplateResult {\n const wrapperClasses = {\n 'time-picker': true,\n 'time-picker--open': this.dropdownController.isOpen,\n 'time-picker--disabled': this.disabled,\n 'time-picker--readonly': this.readonly,\n 'time-picker--error': this.state === TimePickerState.Error,\n };\n\n return html`\n <div class=\"${classMap(wrapperClasses)}\" data-theme=\"${this.currentTheme}\" part=\"wrapper\">\n ${this.renderLabel()}\n ${this.renderInput()}\n ${this.renderDropdown()}\n ${this.renderHelperText()}\n </div>\n `;\n }\n\n // Public API methods\n open(): void { \n this.dropdownController.open();\n // Scroll to selected time when opening programmatically\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 50);\n }\n close(): void { this.dropdownController.close(); }\n clear(): void { \n this.value = '';\n this.inputValue = '';\n this.selectionController.clearSelection();\n }\n \n setToNow(): void {\n const now = TimeUtils.getCurrentTime();\n this.selectionController.selectTime(now);\n this.updateInputValue();\n // Scroll to the newly selected time if dropdown is open\n if (this.dropdownController.isOpen) {\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 10);\n }\n }\n\n validate(): boolean {\n const selectedTime = this.selectionController.getSelectedTime();\n if (!selectedTime) return true;\n return this.validationController.validateConstraints(selectedTime);\n }\n\n validateTime(time: TimeValue): boolean {\n return this.validationController.validateConstraints(time);\n }\n\n // Helper methods for checking if individual time components are valid\n private isHourValid(hour: number, selectedTime: TimeValue): boolean {\n const testTime = { ...selectedTime, hours: hour };\n return this.validateTime(testTime);\n }\n\n private isMinuteValid(minute: number, selectedTime: TimeValue): boolean {\n const testTime = { ...selectedTime, minutes: minute };\n return this.validateTime(testTime);\n }\n\n private isSecondValid(second: number, selectedTime: TimeValue): boolean {\n const testTime = { ...selectedTime, seconds: second };\n return this.validateTime(testTime);\n }\n\n // Private methods\n private renderLabel(): TemplateResult | typeof nothing {\n if (!this.label) return nothing;\n\n return html`\n <label class=\"time-picker__label\" part=\"label\" for=\"time-input\">\n ${this.label}\n ${this.required ? html`<span class=\"time-picker__required\">*</span>` : nothing}\n </label>\n `;\n }\n\n private renderInput(): TemplateResult {\n const formatPlaceholder = this.getFormatPlaceholder();\n \n return html`\n <div class=\"time-picker__input-wrapper\" part=\"input-wrapper\">\n <nr-input\n id=\"time-input\"\n part=\"input\"\n type=\"calendar\"\n .value=\"${this.inputValue}\"\n placeholder=\"${this.placeholder || formatPlaceholder}\"\n ?disabled=\"${this.disabled}\"\n ?readonly=\"${false}\"\n ?required=\"${this.required}\"\n .state=\"${this.state === TimePickerState.Error ? INPUT_STATE.Error : INPUT_STATE.Default}\"\n @click=\"${this.handleInputClick}\"\n @nr-input=\"${this.handleInputChange}\"\n @nr-blur=\"${this.handleInputBlur}\"\n >\n </nr-input>\n </div>\n `;\n }\n\n private renderDropdown(): TemplateResult | typeof nothing {\n if (!this.dropdownController.isOpen) return nothing;\n\n return html`\n <div \n class=\"time-picker__dropdown time-picker__dropdown--open\" \n part=\"dropdown\"\n @click=\"${this.handleDropdownClick}\"\n >\n ${this.renderColumnPicker()}\n ${this.renderActions()}\n </div>\n `;\n }\n\n private renderColumnPicker(): TemplateResult {\n const selectedTime = this.selectionController.getSelectedTime();\n const config = this.getConfig();\n\n return html`\n <div class=\"time-picker__columns\" part=\"columns\">\n ${this.renderHourColumn(selectedTime, config)}\n ${this.renderMinuteColumn(selectedTime)}\n ${this.showSeconds ? this.renderSecondColumn(selectedTime) : nothing}\n </div>\n `;\n }\n\n private renderHourColumn(selectedTime: TimeValue | null, config: TimePickerConfig): TemplateResult {\n const hours = config.format === TimeFormat.TwelveHour \n ? Array.from({ length: 12 }, (_, i) => i === 0 ? 12 : i)\n : Array.from({ length: 24 }, (_, i) => i);\n\n const displayHour = selectedTime && config.format === TimeFormat.TwelveHour\n ? this.formattingController.formatHours(selectedTime.hours)\n : selectedTime?.hours;\n\n return html`\n <div class=\"time-picker__column\" part=\"hour-column\">\n <div class=\"time-picker__column-list\">\n ${hours.map(hour => {\n // Convert display hour to actual hour for validation\n let actualHour = hour;\n if (config.format === TimeFormat.TwelveHour && selectedTime) {\n const currentPeriod = this.formattingController.getPeriod(selectedTime.hours);\n if (hour === 12) {\n actualHour = currentPeriod === TimePeriod.AM ? 0 : 12;\n } else {\n actualHour = currentPeriod === TimePeriod.AM ? hour : hour + 12;\n }\n }\n \n // Use EMPTY_TIME_VALUE for validation when no time is selected\n const timeForValidation = selectedTime || EMPTY_TIME_VALUE;\n const isValid = this.isHourValid(actualHour, timeForValidation);\n const isSelected = selectedTime ? hour === displayHour : false;\n \n return html`\n <div\n class=\"time-picker__column-item ${isSelected ? 'time-picker__column-item--selected' : ''} ${!isValid ? 'time-picker__column-item--disabled' : ''}\"\n @click=\"${isValid ? () => this.handleHourSelect(hour, config.format) : null}\"\n >\n ${hour.toString().padStart(2, '0')}\n </div>\n `;\n })}\n </div>\n </div>\n `;\n }\n\n private renderMinuteColumn(selectedTime: TimeValue | null): TemplateResult {\n const minutes = Array.from({ length: 60 }, (_, i) => i);\n\n return html`\n <div class=\"time-picker__column\" part=\"minute-column\">\n <div class=\"time-picker__column-list\">\n ${minutes.map(minute => {\n // Use EMPTY_TIME_VALUE for validation when no time is selected\n const timeForValidation = selectedTime || EMPTY_TIME_VALUE;\n const isValid = this.isMinuteValid(minute, timeForValidation);\n const isSelected = selectedTime ? minute === selectedTime.minutes : false;\n \n return html`\n <div\n class=\"time-picker__column-item ${isSelected ? 'time-picker__column-item--selected' : ''} ${!isValid ? 'time-picker__column-item--disabled' : ''}\"\n @click=\"${isValid ? () => this.handleMinuteSelect(minute) : null}\"\n >\n ${minute.toString().padStart(2, '0')}\n </div>\n `;\n })}\n </div>\n </div>\n `;\n }\n\n private renderSecondColumn(selectedTime: TimeValue | null): TemplateResult {\n const seconds = Array.from({ length: 60 }, (_, i) => i);\n\n return html`\n <div class=\"time-picker__column\" part=\"second-column\">\n <div class=\"time-picker__column-list\">\n ${seconds.map(second => {\n // Use EMPTY_TIME_VALUE for validation when no time is selected\n const timeForValidation = selectedTime || EMPTY_TIME_VALUE;\n const isValid = this.isSecondValid(second, timeForValidation);\n const isSelected = selectedTime ? second === selectedTime.seconds : false;\n \n return html`\n <div\n class=\"time-picker__column-item ${isSelected ? 'time-picker__column-item--selected' : ''} ${!isValid ? 'time-picker__column-item--disabled' : ''}\"\n @click=\"${isValid ? () => this.handleSecondSelect(second) : null}\"\n >\n ${second.toString().padStart(2, '0')}\n </div>\n `;\n })}\n </div>\n </div>\n `;\n }\n\n private renderActions(): TemplateResult {\n return html`\n <div class=\"time-picker__actions\">\n <nr-button\n type=\"ghost\"\n size=\"small\"\n @click=\"${() => this.setToNow()}\"\n >\n Now\n </nr-button>\n <nr-button\n type=\"primary\"\n size=\"small\"\n @click=\"${this.handleOkClick}\"\n >\n OK\n </nr-button>\n </div>\n `;\n }\n\n private renderHelperText(): TemplateResult | typeof nothing {\n const text = this.validationMessage || this.helperText;\n if (!text) return nothing;\n\n const isError = this.state === TimePickerState.Error || !!this.validationMessage;\n\n return html`\n <div class=\"time-picker__helper-text ${isError ? 'time-picker__helper-text--error' : ''}\" part=\"helper-text\">\n ${text}\n </div>\n `;\n }\n\n private scrollToSelectedTime(): void {\n try {\n const selectedTime = this.selectionController.getSelectedTime();\n if (!selectedTime) return;\n\n // Scroll each column to the selected value\n this.scrollToSelectedHour(selectedTime);\n this.scrollToSelectedMinute(selectedTime);\n if (this.showSeconds) {\n this.scrollToSelectedSecond(selectedTime);\n }\n } catch (error) {\n console.warn('Failed to scroll to selected time:', error);\n }\n }\n\n private scrollToSelectedHour(selectedTime: TimeValue): void {\n const config = this.getConfig();\n const hourColumn = this.shadowRoot?.querySelector('.time-picker__column:first-child .time-picker__column-list') as HTMLElement;\n \n if (!hourColumn) return;\n\n let displayHour: number;\n if (config.format === TimeFormat.TwelveHour) {\n // Convert 24-hour to 12-hour format\n if (selectedTime.hours === 0 || selectedTime.hours === 12) {\n displayHour = 12;\n } else {\n displayHour = selectedTime.hours > 12 ? selectedTime.hours - 12 : selectedTime.hours;\n }\n } else {\n displayHour = selectedTime.hours;\n }\n\n // Find the selected hour element\n const selectedHourElement = hourColumn.querySelector(`.time-picker__column-item:nth-child(${this.getHourIndex(displayHour, config.format) + 1})`) as HTMLElement;\n \n if (selectedHourElement) {\n selectedHourElement.scrollIntoView({\n behavior: this.scrollBehavior as ScrollBehavior,\n block: 'center',\n inline: 'nearest'\n });\n }\n }\n\n private scrollToSelectedMinute(selectedTime: TimeValue): void {\n const minuteColumn = this.shadowRoot?.querySelector('.time-picker__column:nth-child(2) .time-picker__column-list') as HTMLElement;\n \n if (!minuteColumn) return;\n\n // Find the selected minute element (minute + 1 because nth-child is 1-indexed)\n const selectedMinuteElement = minuteColumn.querySelector(`.time-picker__column-item:nth-child(${selectedTime.minutes + 1})`) as HTMLElement;\n \n if (selectedMinuteElement) {\n selectedMinuteElement.scrollIntoView({\n behavior: this.scrollBehavior as ScrollBehavior,\n block: 'center',\n inline: 'nearest'\n });\n }\n }\n\n private scrollToSelectedSecond(selectedTime: TimeValue): void {\n const secondColumn = this.shadowRoot?.querySelector('.time-picker__column:nth-child(3) .time-picker__column-list') as HTMLElement;\n \n if (!secondColumn) return;\n\n // Find the selected second element (second + 1 because nth-child is 1-indexed)\n const selectedSecondElement = secondColumn.querySelector(`.time-picker__column-item:nth-child(${selectedTime.seconds + 1})`) as HTMLElement;\n \n if (selectedSecondElement) {\n selectedSecondElement.scrollIntoView({\n behavior: this.scrollBehavior as ScrollBehavior,\n block: 'center',\n inline: 'nearest'\n });\n }\n }\n\n private getHourIndex(displayHour: number, format: TimeFormat): number {\n if (format === TimeFormat.TwelveHour) {\n // For 12-hour format: 12, 1, 2, ..., 11\n return displayHour === 12 ? 0 : displayHour;\n } else {\n // For 24-hour format: 0, 1, 2, ..., 23\n return displayHour;\n }\n }\n\n // Event handlers\n private handleComponentClick(e: Event): void {\n // Stop propagation to prevent document click handler from firing\n e.stopPropagation();\n }\n\n private handleDocumentClick(e: Event): void {\n // Close dropdown when clicking outside the component\n if (this.dropdownController.isOpen) {\n const target = e.target as Element;\n const isClickInsideComponent = this.contains(target) || \n this.shadowRoot?.contains(target);\n \n if (!isClickInsideComponent) {\n this.dropdownController.close();\n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.BLUR, {\n bubbles: true,\n composed: true,\n }));\n }\n }\n }\n\n private handleDropdownClick(e: Event): void {\n // Prevent dropdown from closing when clicking inside\n e.stopPropagation();\n }\n\n private handleOkClick(): void {\n // Close the dropdown and emit final change event\n this.dropdownController.close();\n const selectedTime = this.selectionController.getSelectedTime();\n \n if (selectedTime) {\n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n bubbles: true,\n composed: true,\n detail: { value: this.value, time: selectedTime }\n }));\n }\n \n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.BLUR, {\n bubbles: true,\n composed: true,\n }));\n }\n\n private handleInputBlur(): void {\n // Only close dropdown if clicking outside the component\n setTimeout(() => {\n const activeElement = document.activeElement;\n const isWithinComponent = this.contains(activeElement) || \n this.shadowRoot?.contains(activeElement);\n \n if (!isWithinComponent) {\n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.BLUR, {\n bubbles: true,\n composed: true,\n }));\n }\n }, 150);\n }\n\n private handleInputClick(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n \n if (!this.disabled) {\n // Only open if closed - don't close when clicking input\n if (!this.dropdownController.isOpen) {\n this.dropdownController.open();\n // Scroll to selected items when dropdown opens\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 50);\n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.FOCUS, {\n bubbles: true,\n composed: true,\n }));\n }\n }\n }\n\n private handleInputChange(e: CustomEvent): void {\n if (this.disabled) return;\n \n const inputValue = e.detail?.value || '';\n this.inputValue = inputValue;\n \n // Parse the input value and update the time selection\n const parsedTime = this.formattingController.parseInputValue(inputValue);\n if (parsedTime) {\n // Validate the parsed time\n if (this.validateTime(parsedTime)) {\n this.selectionController.selectTime(parsedTime);\n this.value = this.formattingController.formatForInput(parsedTime);\n this.state = TimePickerState.Default;\n \n // Scroll to the newly selected time if dropdown is open\n if (this.dropdownController.isOpen) {\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 10);\n }\n \n // Emit change event\n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n bubbles: true,\n composed: true,\n detail: { value: this.value, time: parsedTime }\n }));\n } else {\n // Invalid time - show error state but don't clear the input\n this.state = TimePickerState.Error;\n }\n } else if (inputValue === '') {\n // Empty input - clear the selection\n this.selectionController.clearSelection();\n this.value = '';\n this.state = TimePickerState.Default;\n \n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n bubbles: true,\n composed: true,\n detail: { value: '', time: null }\n }));\n } else {\n // Invalid format - show error state\n this.state = TimePickerState.Error;\n }\n \n // Request update to re-render with new state\n this.requestUpdate();\n }\n\n private handleHourSelect(hour: number, format: TimeFormat): void {\n const selectedTime = this.selectionController.getSelectedTime() || TimeUtils.getCurrentTime();\n let adjustedHour = hour;\n \n if (format === TimeFormat.TwelveHour) {\n const currentPeriod = this.formattingController.getPeriod(selectedTime.hours);\n if (hour === 12) {\n adjustedHour = currentPeriod === TimePeriod.AM ? 0 : 12;\n } else {\n adjustedHour = currentPeriod === TimePeriod.AM ? hour : hour + 12;\n }\n }\n \n const updatedTime = { ...selectedTime, hours: adjustedHour };\n if (this.validateTime(updatedTime)) {\n this.selectionController.selectTime(updatedTime);\n this.updateInputValue();\n // No scrolling when clicking on individual items\n }\n }\n\n private handleMinuteSelect(minute: number): void {\n const selectedTime = this.selectionController.getSelectedTime() || TimeUtils.getCurrentTime();\n const updatedTime = { ...selectedTime, minutes: minute };\n \n if (this.validateTime(updatedTime)) {\n this.selectionController.selectTime(updatedTime);\n this.updateInputValue();\n // No scrolling when clicking on individual items\n }\n }\n\n private handleSecondSelect(second: number): void {\n const selectedTime = this.selectionController.getSelectedTime() || TimeUtils.getCurrentTime();\n const updatedTime = { ...selectedTime, seconds: second };\n \n if (this.validateTime(updatedTime)) {\n this.selectionController.selectTime(updatedTime);\n this.updateInputValue();\n // No scrolling when clicking on individual items\n }\n }\n\n // Utility methods\n private shouldUpdateConstraints(changedProperties: Map<string, any>): boolean {\n return (\n changedProperties.has('minTime') ||\n changedProperties.has('maxTime') ||\n changedProperties.has('disabledTimes') ||\n changedProperties.has('enabledTimes')\n );\n }\n\n private updateConstraints(): void {\n const constraints: TimeConstraints = {\n minTime: this.minTime,\n maxTime: this.maxTime,\n disabledTimes: this.disabledTimes || [],\n enabledTimes: this.enabledTimes,\n };\n\n this.validationController.setConstraints(constraints);\n }\n\n private setTimeFromValue(value: string): void {\n if (this.selectionController.setTimeFromString(value)) {\n this.inputValue = value;\n this.requestUpdate();\n // Scroll to the time when setting from value (if dropdown is open)\n if (this.dropdownController.isOpen) {\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 50);\n }\n }\n }\n\n private updateInputValue(): void {\n const selectedTime = this.selectionController.getSelectedTime();\n if (selectedTime) {\n const formattedValue = this.formattingController.formatForDisplay(selectedTime);\n this.inputValue = formattedValue;\n this.value = formattedValue;\n \n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n detail: { value: formattedValue, time: selectedTime },\n bubbles: true,\n composed: true,\n }));\n }\n }\n\n getConfig(): TimePickerConfig {\n return {\n format: this.format,\n showSeconds: this.showSeconds,\n step: {\n hours: TimeStep.One,\n minutes: TimeStep.One,\n seconds: TimeStep.One,\n },\n use12HourClock: this.format === TimeFormat.TwelveHour,\n minuteInterval: 1,\n secondInterval: 1,\n };\n }\n\n // TimePickerHost interface implementation\n getCurrentTime(): TimeValue {\n return this.selectionController.getSelectedTime() || EMPTY_TIME_VALUE;\n }\n\n setTime(time: TimeValue): void {\n this.selectionController.selectTime(time);\n this.updateInputValue();\n // Scroll to the newly selected time if dropdown is open\n if (this.dropdownController.isOpen) {\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 10);\n }\n }\n\n formatTime(time: TimeValue): string {\n return this.formattingController.formatForDisplay(time);\n }\n\n /**\n * Get appropriate placeholder text based on format\n */\n private getFormatPlaceholder(): string {\n if (this.format === TimeFormat.TwelveHour) {\n return this.showSeconds ? 'HH:MM:SS AM/PM' : 'HH:MM AM/PM';\n } else {\n return this.showSeconds ? 'HH:MM:SS' : 'HH:MM';\n }\n }\n\n parseTime(timeString: string): TimeValue | null {\n return this.formattingController.parseInputValue(timeString);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nr-timepicker': NrTimePickerElement;\n }\n}\n"]}
1
+ {"version":3,"file":"timepicker.component.js","sourceRoot":"","sources":["../../../../src/components/timepicker/timepicker.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, TemplateResult, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { INPUT_STATE } from '../input/input.types.js';\n\n// Import base mixin and types\nimport { NuralyUIBaseMixin } from '@nuralyui/common/mixins';\nimport { SharedDropdownController } from '@nuralyui/common/controllers';\nimport { DropdownHost } from '@nuralyui/common/controllers';\nimport {\n TimeValue,\n TimeFormat,\n TimePickerConfig,\n TimePickerState,\n TimePickerPlacement,\n TimeConstraints,\n TimePeriod,\n TimeStep,\n EMPTY_TIME_VALUE,\n TIME_PICKER_EVENTS,\n} from './timepicker.types.js';\n\n// Import controllers\nimport { TimePickerSelectionController } from './controllers/selection.controller.js';\nimport { TimePickerValidationController } from './controllers/validation.controller.js';\nimport { TimePickerFormattingController } from './controllers/formatting.controller.js';\n\n// Import utilities\nimport { TimeUtils } from './utils/time.utils.js';\n\n// Import styles\nimport { styles as timePickerStyles } from './timepicker.style.js';\n\n// Host interface for controllers\nexport interface TimePickerHost extends LitElement, DropdownHost {\n getCurrentTime(): TimeValue;\n setTime(time: TimeValue): void;\n formatTime(time: TimeValue): string;\n parseTime(timeString: string): TimeValue | null;\n getConfig(): TimePickerConfig;\n validateTime(time: TimeValue): boolean;\n requestUpdate(): void;\n}\n\n/**\n * A comprehensive time picker component that supports both 12-hour and 24-hour formats,\n * with optional seconds display and extensive customization options.\n * \n * @example\n * ```html\n * <nr-timepicker \n * value=\"14:30:00\" \n * format=\"24h\" \n * show-seconds\n * placeholder=\"Select time\">\n * </nr-timepicker>\n * ```\n */\n@customElement('nr-timepicker')\nexport class NrTimePickerElement extends NuralyUIBaseMixin(LitElement) implements TimePickerHost {\n static override styles = [timePickerStyles];\n\n // Properties\n @property({ type: String }) value = '';\n @property({ type: String }) name = '';\n @property({ type: String }) placeholder = 'Select time';\n @property({ type: String }) format: TimeFormat = TimeFormat.TwentyFourHour;\n @property({ type: Boolean, attribute: 'show-seconds' }) showSeconds = false;\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) readonly = false;\n @property({ type: Boolean }) required = false;\n @property({ type: String, attribute: 'min-time' }) minTime?: string;\n @property({ type: String, attribute: 'max-time' }) maxTime?: string;\n @property({ type: Array, attribute: 'disabled-times' }) disabledTimes?: string[];\n @property({ type: Array, attribute: 'enabled-times' }) enabledTimes?: string[];\n @property({ type: String, attribute: 'helper-text' }) helperText = '';\n @property({ type: String }) label = '';\n @property({ type: String }) size: 'small' | 'medium' | 'large' = 'medium';\n @property({ type: String }) variant: 'outlined' | 'filled' | 'standard' = 'outlined';\n @property({ type: String }) placement: TimePickerPlacement = TimePickerPlacement.Bottom;\n \n /** Scroll behavior for dropdown navigation - 'instant' for immediate, 'smooth' for animated, 'auto' for browser default */\n @property({ type: String, attribute: 'scroll-behavior' }) scrollBehavior: 'auto' | 'instant' | 'smooth' = 'instant';\n\n // State\n @state() private inputValue = '';\n @state() private state: TimePickerState = TimePickerState.Default;\n @state() private validationMessage = '';\n\n // Controllers\n private dropdownController = new SharedDropdownController(this);\n private selectionController = new TimePickerSelectionController(this);\n private validationController = new TimePickerValidationController(this);\n private formattingController = new TimePickerFormattingController(this);\n\n constructor() {\n super();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.updateConstraints();\n if (this.value) {\n this.setTimeFromValue(this.value);\n }\n \n // Add global click listener to close dropdown when clicking outside\n this.addEventListener('click', this.handleComponentClick.bind(this));\n document.addEventListener('click', this.handleDocumentClick.bind(this));\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n // Clean up global event listeners\n document.removeEventListener('click', this.handleDocumentClick.bind(this));\n }\n\n override updated(changedProperties: Map<string, any>): void {\n super.updated(changedProperties);\n\n if (changedProperties.has('value') && this.value !== this.inputValue) {\n this.setTimeFromValue(this.value);\n // Scroll to the selected time when value changes from outside\n if (this.dropdownController.isOpen) {\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 50);\n }\n }\n\n if (this.shouldUpdateConstraints(changedProperties)) {\n this.updateConstraints();\n }\n\n // Set up dropdown elements\n this.setupDropdownElements();\n }\n\n private setupDropdownElements(): void {\n const dropdown = this.shadowRoot?.querySelector('.time-picker__dropdown') as HTMLElement;\n const trigger = this.shadowRoot?.querySelector('.time-picker__input-wrapper') as HTMLElement;\n \n if (dropdown && trigger) {\n this.dropdownController.setElements(dropdown, trigger);\n }\n }\n\n override render(): TemplateResult {\n const wrapperClasses = {\n 'time-picker': true,\n 'time-picker--open': this.dropdownController.isOpen,\n 'time-picker--disabled': this.disabled,\n 'time-picker--readonly': this.readonly,\n 'time-picker--error': this.state === TimePickerState.Error,\n };\n\n return html`\n <div class=\"${classMap(wrapperClasses)}\" data-theme=\"${this.currentTheme}\" part=\"wrapper\">\n ${this.renderLabel()}\n ${this.renderInput()}\n ${this.renderDropdown()}\n ${this.renderHelperText()}\n </div>\n `;\n }\n\n // Public API methods\n open(): void { \n this.dropdownController.open();\n // Scroll to selected time when opening programmatically\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 50);\n }\n close(): void { this.dropdownController.close(); }\n clear(): void { \n this.value = '';\n this.inputValue = '';\n this.selectionController.clearSelection();\n }\n \n setToNow(): void {\n const now = TimeUtils.getCurrentTime();\n this.selectionController.selectTime(now);\n this.updateInputValue();\n // Scroll to the newly selected time if dropdown is open\n if (this.dropdownController.isOpen) {\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 10);\n }\n }\n\n validate(): boolean {\n const selectedTime = this.selectionController.getSelectedTime();\n if (!selectedTime) return true;\n return this.validationController.validateConstraints(selectedTime);\n }\n\n validateTime(time: TimeValue): boolean {\n return this.validationController.validateConstraints(time);\n }\n\n // Helper methods for checking if individual time components are valid\n private isHourValid(hour: number, selectedTime: TimeValue): boolean {\n const testTime = { ...selectedTime, hours: hour };\n return this.validateTime(testTime);\n }\n\n private isMinuteValid(minute: number, selectedTime: TimeValue): boolean {\n const testTime = { ...selectedTime, minutes: minute };\n return this.validateTime(testTime);\n }\n\n private isSecondValid(second: number, selectedTime: TimeValue): boolean {\n const testTime = { ...selectedTime, seconds: second };\n return this.validateTime(testTime);\n }\n\n // Private methods\n private renderLabel(): TemplateResult | typeof nothing {\n if (!this.label) return nothing;\n\n return html`\n <label class=\"time-picker__label\" part=\"label\" for=\"time-input\">\n ${this.label}\n ${this.required ? html`<span class=\"time-picker__required\">*</span>` : nothing}\n </label>\n `;\n }\n\n private renderInput(): TemplateResult {\n const formatPlaceholder = this.getFormatPlaceholder();\n \n return html`\n <div class=\"time-picker__input-wrapper\" part=\"input-wrapper\">\n <nr-input\n id=\"time-input\"\n part=\"input\"\n type=\"calendar\"\n .value=\"${this.inputValue}\"\n placeholder=\"${this.placeholder || formatPlaceholder}\"\n ?disabled=\"${this.disabled}\"\n ?readonly=\"${false}\"\n ?required=\"${this.required}\"\n .state=\"${this.state === TimePickerState.Error ? INPUT_STATE.Error : INPUT_STATE.Default}\"\n @click=\"${this.handleInputClick}\"\n @nr-input=\"${this.handleInputChange}\"\n @nr-blur=\"${this.handleInputBlur}\"\n >\n </nr-input>\n </div>\n `;\n }\n\n private renderDropdown(): TemplateResult | typeof nothing {\n if (!this.dropdownController.isOpen) return nothing;\n\n return html`\n <div \n class=\"time-picker__dropdown time-picker__dropdown--open\" \n part=\"dropdown\"\n @click=\"${this.handleDropdownClick}\"\n >\n ${this.renderColumnPicker()}\n ${this.renderActions()}\n </div>\n `;\n }\n\n private renderColumnPicker(): TemplateResult {\n const selectedTime = this.selectionController.getSelectedTime();\n const config = this.getConfig();\n\n return html`\n <div class=\"time-picker__columns\" part=\"columns\">\n ${this.renderHourColumn(selectedTime, config)}\n ${this.renderMinuteColumn(selectedTime)}\n ${this.showSeconds ? this.renderSecondColumn(selectedTime) : nothing}\n </div>\n `;\n }\n\n private renderHourColumn(selectedTime: TimeValue | null, config: TimePickerConfig): TemplateResult {\n const hours = config.format === TimeFormat.TwelveHour \n ? Array.from({ length: 12 }, (_, i) => i === 0 ? 12 : i)\n : Array.from({ length: 24 }, (_, i) => i);\n\n const displayHour = selectedTime && config.format === TimeFormat.TwelveHour\n ? this.formattingController.formatHours(selectedTime.hours)\n : selectedTime?.hours;\n\n return html`\n <div class=\"time-picker__column\" part=\"hour-column\">\n <div class=\"time-picker__column-list\">\n ${hours.map(hour => {\n // Convert display hour to actual hour for validation\n let actualHour = hour;\n if (config.format === TimeFormat.TwelveHour && selectedTime) {\n const currentPeriod = this.formattingController.getPeriod(selectedTime.hours);\n if (hour === 12) {\n actualHour = currentPeriod === TimePeriod.AM ? 0 : 12;\n } else {\n actualHour = currentPeriod === TimePeriod.AM ? hour : hour + 12;\n }\n }\n \n // Use EMPTY_TIME_VALUE for validation when no time is selected\n const timeForValidation = selectedTime || EMPTY_TIME_VALUE;\n const isValid = this.isHourValid(actualHour, timeForValidation);\n const isSelected = selectedTime ? hour === displayHour : false;\n \n return html`\n <div\n class=\"time-picker__column-item ${isSelected ? 'time-picker__column-item--selected' : ''} ${!isValid ? 'time-picker__column-item--disabled' : ''}\"\n @click=\"${isValid ? () => this.handleHourSelect(hour, config.format) : null}\"\n >\n ${hour.toString().padStart(2, '0')}\n </div>\n `;\n })}\n </div>\n </div>\n `;\n }\n\n private renderMinuteColumn(selectedTime: TimeValue | null): TemplateResult {\n const minutes = Array.from({ length: 60 }, (_, i) => i);\n\n return html`\n <div class=\"time-picker__column\" part=\"minute-column\">\n <div class=\"time-picker__column-list\">\n ${minutes.map(minute => {\n // Use EMPTY_TIME_VALUE for validation when no time is selected\n const timeForValidation = selectedTime || EMPTY_TIME_VALUE;\n const isValid = this.isMinuteValid(minute, timeForValidation);\n const isSelected = selectedTime ? minute === selectedTime.minutes : false;\n \n return html`\n <div\n class=\"time-picker__column-item ${isSelected ? 'time-picker__column-item--selected' : ''} ${!isValid ? 'time-picker__column-item--disabled' : ''}\"\n @click=\"${isValid ? () => this.handleMinuteSelect(minute) : null}\"\n >\n ${minute.toString().padStart(2, '0')}\n </div>\n `;\n })}\n </div>\n </div>\n `;\n }\n\n private renderSecondColumn(selectedTime: TimeValue | null): TemplateResult {\n const seconds = Array.from({ length: 60 }, (_, i) => i);\n\n return html`\n <div class=\"time-picker__column\" part=\"second-column\">\n <div class=\"time-picker__column-list\">\n ${seconds.map(second => {\n // Use EMPTY_TIME_VALUE for validation when no time is selected\n const timeForValidation = selectedTime || EMPTY_TIME_VALUE;\n const isValid = this.isSecondValid(second, timeForValidation);\n const isSelected = selectedTime ? second === selectedTime.seconds : false;\n \n return html`\n <div\n class=\"time-picker__column-item ${isSelected ? 'time-picker__column-item--selected' : ''} ${!isValid ? 'time-picker__column-item--disabled' : ''}\"\n @click=\"${isValid ? () => this.handleSecondSelect(second) : null}\"\n >\n ${second.toString().padStart(2, '0')}\n </div>\n `;\n })}\n </div>\n </div>\n `;\n }\n\n private renderActions(): TemplateResult {\n return html`\n <div class=\"time-picker__actions\">\n <nr-button\n type=\"ghost\"\n size=\"small\"\n @click=\"${() => this.setToNow()}\"\n >\n Now\n </nr-button>\n <nr-button\n type=\"primary\"\n size=\"small\"\n @click=\"${this.handleOkClick}\"\n >\n OK\n </nr-button>\n </div>\n `;\n }\n\n private renderHelperText(): TemplateResult | typeof nothing {\n const text = this.validationMessage || this.helperText;\n if (!text) return nothing;\n\n const isError = this.state === TimePickerState.Error || !!this.validationMessage;\n\n return html`\n <div class=\"time-picker__helper-text ${isError ? 'time-picker__helper-text--error' : ''}\" part=\"helper-text\">\n ${text}\n </div>\n `;\n }\n\n private scrollToSelectedTime(): void {\n try {\n const selectedTime = this.selectionController.getSelectedTime();\n if (!selectedTime) return;\n\n // Scroll each column to the selected value\n this.scrollToSelectedHour(selectedTime);\n this.scrollToSelectedMinute(selectedTime);\n if (this.showSeconds) {\n this.scrollToSelectedSecond(selectedTime);\n }\n } catch (error) {\n console.warn('Failed to scroll to selected time:', error);\n }\n }\n\n private scrollToSelectedHour(selectedTime: TimeValue): void {\n const config = this.getConfig();\n const hourColumn = this.shadowRoot?.querySelector('.time-picker__column:first-child .time-picker__column-list') as HTMLElement;\n \n if (!hourColumn) return;\n\n let displayHour: number;\n if (config.format === TimeFormat.TwelveHour) {\n // Convert 24-hour to 12-hour format\n if (selectedTime.hours === 0 || selectedTime.hours === 12) {\n displayHour = 12;\n } else {\n displayHour = selectedTime.hours > 12 ? selectedTime.hours - 12 : selectedTime.hours;\n }\n } else {\n displayHour = selectedTime.hours;\n }\n\n // Find the selected hour element\n const selectedHourElement = hourColumn.querySelector(`.time-picker__column-item:nth-child(${this.getHourIndex(displayHour, config.format) + 1})`) as HTMLElement;\n \n if (selectedHourElement) {\n selectedHourElement.scrollIntoView({\n behavior: this.scrollBehavior as ScrollBehavior,\n block: 'center',\n inline: 'nearest'\n });\n }\n }\n\n private scrollToSelectedMinute(selectedTime: TimeValue): void {\n const minuteColumn = this.shadowRoot?.querySelector('.time-picker__column:nth-child(2) .time-picker__column-list') as HTMLElement;\n \n if (!minuteColumn) return;\n\n // Find the selected minute element (minute + 1 because nth-child is 1-indexed)\n const selectedMinuteElement = minuteColumn.querySelector(`.time-picker__column-item:nth-child(${selectedTime.minutes + 1})`) as HTMLElement;\n \n if (selectedMinuteElement) {\n selectedMinuteElement.scrollIntoView({\n behavior: this.scrollBehavior as ScrollBehavior,\n block: 'center',\n inline: 'nearest'\n });\n }\n }\n\n private scrollToSelectedSecond(selectedTime: TimeValue): void {\n const secondColumn = this.shadowRoot?.querySelector('.time-picker__column:nth-child(3) .time-picker__column-list') as HTMLElement;\n \n if (!secondColumn) return;\n\n // Find the selected second element (second + 1 because nth-child is 1-indexed)\n const selectedSecondElement = secondColumn.querySelector(`.time-picker__column-item:nth-child(${selectedTime.seconds + 1})`) as HTMLElement;\n \n if (selectedSecondElement) {\n selectedSecondElement.scrollIntoView({\n behavior: this.scrollBehavior as ScrollBehavior,\n block: 'center',\n inline: 'nearest'\n });\n }\n }\n\n private getHourIndex(displayHour: number, format: TimeFormat): number {\n if (format === TimeFormat.TwelveHour) {\n // For 12-hour format: 12, 1, 2, ..., 11\n return displayHour === 12 ? 0 : displayHour;\n } else {\n // For 24-hour format: 0, 1, 2, ..., 23\n return displayHour;\n }\n }\n\n // Event handlers\n private handleComponentClick(e: Event): void {\n // Stop propagation to prevent document click handler from firing\n e.stopPropagation();\n }\n\n private handleDocumentClick(e: Event): void {\n // Close dropdown when clicking outside the component\n if (this.dropdownController.isOpen) {\n const target = e.target as Element;\n const isClickInsideComponent = this.contains(target) || \n this.shadowRoot?.contains(target);\n \n if (!isClickInsideComponent) {\n this.dropdownController.close();\n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.BLUR, {\n bubbles: true,\n composed: true,\n }));\n }\n }\n }\n\n private handleDropdownClick(e: Event): void {\n // Prevent dropdown from closing when clicking inside\n e.stopPropagation();\n }\n\n private handleOkClick(): void {\n // Close the dropdown and emit final change event\n this.dropdownController.close();\n const selectedTime = this.selectionController.getSelectedTime();\n \n if (selectedTime) {\n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n bubbles: true,\n composed: true,\n detail: { value: this.value, time: selectedTime }\n }));\n }\n \n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.BLUR, {\n bubbles: true,\n composed: true,\n }));\n }\n\n private handleInputBlur(): void {\n // Only close dropdown if clicking outside the component\n setTimeout(() => {\n const activeElement = document.activeElement;\n const isWithinComponent = this.contains(activeElement) || \n this.shadowRoot?.contains(activeElement);\n \n if (!isWithinComponent) {\n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.BLUR, {\n bubbles: true,\n composed: true,\n }));\n }\n }, 150);\n }\n\n private handleInputClick(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n \n if (!this.disabled) {\n // Only open if closed - don't close when clicking input\n if (!this.dropdownController.isOpen) {\n this.dropdownController.open();\n // Scroll to selected items when dropdown opens\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 50);\n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.FOCUS, {\n bubbles: true,\n composed: true,\n }));\n }\n }\n }\n\n private handleInputChange(e: CustomEvent): void {\n if (this.disabled) return;\n \n const inputValue = e.detail?.value || '';\n this.inputValue = inputValue;\n \n // Parse the input value and update the time selection\n const parsedTime = this.formattingController.parseInputValue(inputValue);\n if (parsedTime) {\n // Validate the parsed time\n if (this.validateTime(parsedTime)) {\n this.selectionController.selectTime(parsedTime);\n this.value = this.formattingController.formatForInput(parsedTime);\n this.state = TimePickerState.Default;\n \n // Scroll to the newly selected time if dropdown is open\n if (this.dropdownController.isOpen) {\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 10);\n }\n \n // Emit change event\n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n bubbles: true,\n composed: true,\n detail: { value: this.value, time: parsedTime }\n }));\n } else {\n // Invalid time - show error state but don't clear the input\n this.state = TimePickerState.Error;\n }\n } else if (inputValue === '') {\n // Empty input - clear the selection\n this.selectionController.clearSelection();\n this.value = '';\n this.state = TimePickerState.Default;\n \n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n bubbles: true,\n composed: true,\n detail: { value: '', time: null }\n }));\n } else {\n // Invalid format - show error state\n this.state = TimePickerState.Error;\n }\n \n // Request update to re-render with new state\n this.requestUpdate();\n }\n\n private handleHourSelect(hour: number, format: TimeFormat): void {\n const selectedTime = this.selectionController.getSelectedTime() || TimeUtils.getCurrentTime();\n let adjustedHour = hour;\n \n if (format === TimeFormat.TwelveHour) {\n const currentPeriod = this.formattingController.getPeriod(selectedTime.hours);\n if (hour === 12) {\n adjustedHour = currentPeriod === TimePeriod.AM ? 0 : 12;\n } else {\n adjustedHour = currentPeriod === TimePeriod.AM ? hour : hour + 12;\n }\n }\n \n const updatedTime = { ...selectedTime, hours: adjustedHour };\n if (this.validateTime(updatedTime)) {\n this.selectionController.selectTime(updatedTime);\n this.updateInputValue();\n // No scrolling when clicking on individual items\n }\n }\n\n private handleMinuteSelect(minute: number): void {\n const selectedTime = this.selectionController.getSelectedTime() || TimeUtils.getCurrentTime();\n const updatedTime = { ...selectedTime, minutes: minute };\n \n if (this.validateTime(updatedTime)) {\n this.selectionController.selectTime(updatedTime);\n this.updateInputValue();\n // No scrolling when clicking on individual items\n }\n }\n\n private handleSecondSelect(second: number): void {\n const selectedTime = this.selectionController.getSelectedTime() || TimeUtils.getCurrentTime();\n const updatedTime = { ...selectedTime, seconds: second };\n \n if (this.validateTime(updatedTime)) {\n this.selectionController.selectTime(updatedTime);\n this.updateInputValue();\n // No scrolling when clicking on individual items\n }\n }\n\n // Utility methods\n private shouldUpdateConstraints(changedProperties: Map<string, any>): boolean {\n return (\n changedProperties.has('minTime') ||\n changedProperties.has('maxTime') ||\n changedProperties.has('disabledTimes') ||\n changedProperties.has('enabledTimes')\n );\n }\n\n private updateConstraints(): void {\n const constraints: TimeConstraints = {\n minTime: this.minTime,\n maxTime: this.maxTime,\n disabledTimes: this.disabledTimes || [],\n enabledTimes: this.enabledTimes,\n };\n\n this.validationController.setConstraints(constraints);\n }\n\n private setTimeFromValue(value: string): void {\n if (this.selectionController.setTimeFromString(value)) {\n this.inputValue = value;\n this.requestUpdate();\n // Scroll to the time when setting from value (if dropdown is open)\n if (this.dropdownController.isOpen) {\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 50);\n }\n }\n }\n\n private updateInputValue(): void {\n const selectedTime = this.selectionController.getSelectedTime();\n if (selectedTime) {\n const formattedValue = this.formattingController.formatForDisplay(selectedTime);\n this.inputValue = formattedValue;\n this.value = formattedValue;\n \n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n detail: { value: formattedValue, time: selectedTime },\n bubbles: true,\n composed: true,\n }));\n }\n }\n\n getConfig(): TimePickerConfig {\n return {\n format: this.format,\n showSeconds: this.showSeconds,\n step: {\n hours: TimeStep.One,\n minutes: TimeStep.One,\n seconds: TimeStep.One,\n },\n use12HourClock: this.format === TimeFormat.TwelveHour,\n minuteInterval: 1,\n secondInterval: 1,\n };\n }\n\n // TimePickerHost interface implementation\n getCurrentTime(): TimeValue {\n return this.selectionController.getSelectedTime() || EMPTY_TIME_VALUE;\n }\n\n setTime(time: TimeValue): void {\n this.selectionController.selectTime(time);\n this.updateInputValue();\n // Scroll to the newly selected time if dropdown is open\n if (this.dropdownController.isOpen) {\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 10);\n }\n }\n\n formatTime(time: TimeValue): string {\n return this.formattingController.formatForDisplay(time);\n }\n\n /**\n * Get appropriate placeholder text based on format\n */\n private getFormatPlaceholder(): string {\n if (this.format === TimeFormat.TwelveHour) {\n return this.showSeconds ? 'HH:MM:SS AM/PM' : 'HH:MM AM/PM';\n } else {\n return this.showSeconds ? 'HH:MM:SS' : 'HH:MM';\n }\n }\n\n parseTime(timeString: string): TimeValue | null {\n return this.formattingController.parseInputValue(timeString);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nr-timepicker': NrTimePickerElement;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker.constants.js","sourceRoot":"","sources":["../../../src/components/timepicker/timepicker.constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAE,UAAU,CAAC,cAAc;IACjC,WAAW,EAAE,KAAK;IAClB,cAAc,EAAE,CAAC;IACjB,cAAc,EAAE,CAAC;IACjB,cAAc,EAAE,KAAK;CACb,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAC3C,MAAM,CAAC,MAAM,gCAAgC,GAAG,UAAU,CAAC;AAC3D,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAC;AACjD,MAAM,CAAC,MAAM,oCAAoC,GAAG,YAAY,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAEtD;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,6BAA6B,CAAC;AAEnE;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,gBAAgB,EAAE,sDAAsD;IACxE,WAAW,EAAE,mEAAmE;CACxE,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,EAAE;IACf,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,EAAE;CACN,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,QAAQ,CAAC,GAAG;IACnB,OAAO,EAAE,QAAQ,CAAC,GAAG;IACrB,OAAO,EAAE,QAAQ,CAAC,GAAG;CACb,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,SAAS,EAAE,aAAa;IACxB,KAAK,EAAE,oBAAoB;IAC3B,KAAK,EAAE,oBAAoB;IAC3B,QAAQ,EAAE,uBAAuB;IACjC,IAAI,EAAE,mBAAmB;IACzB,MAAM,EAAE,qBAAqB;IAC7B,MAAM,EAAE,qBAAqB;IAC7B,MAAM,EAAE,qBAAqB;IAC7B,MAAM,EAAE,qBAAqB;IAC7B,SAAS,EAAE,wBAAwB;CAC3B,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,EAAE;IACV,gBAAgB,EAAE,EAAE;IACpB,kBAAkB,EAAE,EAAE;IACtB,kBAAkB,EAAE,EAAE;CACd,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeFormat, TimeStep } from './timepicker.types.js';\n\n/**\n * Default time picker configuration\n */\nexport const DEFAULT_TIME_CONFIG = {\n format: TimeFormat.TwentyFourHour,\n showSeconds: false,\n minuteInterval: 1,\n secondInterval: 1,\n use12HourClock: false,\n} as const;\n\n/**\n * Default time display formats\n */\nexport const DEFAULT_TIME_FORMAT = 'HH:mm';\nexport const DEFAULT_TIME_FORMAT_WITH_SECONDS = 'HH:mm:ss';\nexport const DEFAULT_12H_TIME_FORMAT = 'hh:mm A';\nexport const DEFAULT_12H_TIME_FORMAT_WITH_SECONDS = 'hh:mm:ss A';\n\n/**\n * Time input field ID\n */\nexport const TIME_INPUT_FIELD_ID = 'time-input-field';\n\n/**\n * Clock container CSS class\n */\nexport const CLOCK_CONTAINER_CLASS = 'time-picker-clock-container';\n\n/**\n * Time validation patterns\n */\nexport const TIME_VALIDATION_PATTERNS = {\n TWENTY_FOUR_HOUR: /^([01]?[0-9]|2[0-3]):([0-5]?[0-9])(:([0-5]?[0-9]))?$/,\n TWELVE_HOUR: /^(0?[1-9]|1[0-2]):([0-5]?[0-9])(:([0-5]?[0-9]))?\\s?(AM|PM|am|pm)$/,\n} as const;\n\n/**\n * Time boundaries\n */\nexport const TIME_BOUNDARIES = {\n MIN_HOUR_24: 0,\n MAX_HOUR_24: 23,\n MIN_HOUR_12: 1,\n MAX_HOUR_12: 12,\n MIN_MINUTE: 0,\n MAX_MINUTE: 59,\n MIN_SECOND: 0,\n MAX_SECOND: 59,\n} as const;\n\n/**\n * Default step values\n */\nexport const DEFAULT_STEPS = {\n HOURS: TimeStep.One,\n MINUTES: TimeStep.One,\n SECONDS: TimeStep.One,\n} as const;\n\n/**\n * Time picker CSS classes\n */\nexport const TIME_PICKER_CLASSES = {\n CONTAINER: 'time-picker',\n INPUT: 'time-picker__input',\n CLOCK: 'time-picker__clock',\n DROPDOWN: 'time-picker__dropdown',\n HOUR: 'time-picker__hour',\n MINUTE: 'time-picker__minute',\n SECOND: 'time-picker__second',\n PERIOD: 'time-picker__period',\n BUTTON: 'time-picker__button',\n SEPARATOR: 'time-picker__separator',\n} as const;\n\n/**\n * Clock face constants\n */\nexport const CLOCK_FACE = {\n RADIUS: 100,\n CENTER: 50,\n HOUR_HAND_LENGTH: 30,\n MINUTE_HAND_LENGTH: 40,\n SECOND_HAND_LENGTH: 45,\n} as const;\n"]}
1
+ {"version":3,"file":"timepicker.constants.js","sourceRoot":"","sources":["../../../../src/components/timepicker/timepicker.constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAE,UAAU,CAAC,cAAc;IACjC,WAAW,EAAE,KAAK;IAClB,cAAc,EAAE,CAAC;IACjB,cAAc,EAAE,CAAC;IACjB,cAAc,EAAE,KAAK;CACb,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAC3C,MAAM,CAAC,MAAM,gCAAgC,GAAG,UAAU,CAAC;AAC3D,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAC;AACjD,MAAM,CAAC,MAAM,oCAAoC,GAAG,YAAY,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAEtD;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,6BAA6B,CAAC;AAEnE;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,gBAAgB,EAAE,sDAAsD;IACxE,WAAW,EAAE,mEAAmE;CACxE,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,EAAE;IACf,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,EAAE;CACN,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,QAAQ,CAAC,GAAG;IACnB,OAAO,EAAE,QAAQ,CAAC,GAAG;IACrB,OAAO,EAAE,QAAQ,CAAC,GAAG;CACb,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,SAAS,EAAE,aAAa;IACxB,KAAK,EAAE,oBAAoB;IAC3B,KAAK,EAAE,oBAAoB;IAC3B,QAAQ,EAAE,uBAAuB;IACjC,IAAI,EAAE,mBAAmB;IACzB,MAAM,EAAE,qBAAqB;IAC7B,MAAM,EAAE,qBAAqB;IAC7B,MAAM,EAAE,qBAAqB;IAC7B,MAAM,EAAE,qBAAqB;IAC7B,SAAS,EAAE,wBAAwB;CAC3B,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,EAAE;IACV,gBAAgB,EAAE,EAAE;IACpB,kBAAkB,EAAE,EAAE;IACtB,kBAAkB,EAAE,EAAE;CACd,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeFormat, TimeStep } from './timepicker.types.js';\n\n/**\n * Default time picker configuration\n */\nexport const DEFAULT_TIME_CONFIG = {\n format: TimeFormat.TwentyFourHour,\n showSeconds: false,\n minuteInterval: 1,\n secondInterval: 1,\n use12HourClock: false,\n} as const;\n\n/**\n * Default time display formats\n */\nexport const DEFAULT_TIME_FORMAT = 'HH:mm';\nexport const DEFAULT_TIME_FORMAT_WITH_SECONDS = 'HH:mm:ss';\nexport const DEFAULT_12H_TIME_FORMAT = 'hh:mm A';\nexport const DEFAULT_12H_TIME_FORMAT_WITH_SECONDS = 'hh:mm:ss A';\n\n/**\n * Time input field ID\n */\nexport const TIME_INPUT_FIELD_ID = 'time-input-field';\n\n/**\n * Clock container CSS class\n */\nexport const CLOCK_CONTAINER_CLASS = 'time-picker-clock-container';\n\n/**\n * Time validation patterns\n */\nexport const TIME_VALIDATION_PATTERNS = {\n TWENTY_FOUR_HOUR: /^([01]?[0-9]|2[0-3]):([0-5]?[0-9])(:([0-5]?[0-9]))?$/,\n TWELVE_HOUR: /^(0?[1-9]|1[0-2]):([0-5]?[0-9])(:([0-5]?[0-9]))?\\s?(AM|PM|am|pm)$/,\n} as const;\n\n/**\n * Time boundaries\n */\nexport const TIME_BOUNDARIES = {\n MIN_HOUR_24: 0,\n MAX_HOUR_24: 23,\n MIN_HOUR_12: 1,\n MAX_HOUR_12: 12,\n MIN_MINUTE: 0,\n MAX_MINUTE: 59,\n MIN_SECOND: 0,\n MAX_SECOND: 59,\n} as const;\n\n/**\n * Default step values\n */\nexport const DEFAULT_STEPS = {\n HOURS: TimeStep.One,\n MINUTES: TimeStep.One,\n SECONDS: TimeStep.One,\n} as const;\n\n/**\n * Time picker CSS classes\n */\nexport const TIME_PICKER_CLASSES = {\n CONTAINER: 'time-picker',\n INPUT: 'time-picker__input',\n CLOCK: 'time-picker__clock',\n DROPDOWN: 'time-picker__dropdown',\n HOUR: 'time-picker__hour',\n MINUTE: 'time-picker__minute',\n SECOND: 'time-picker__second',\n PERIOD: 'time-picker__period',\n BUTTON: 'time-picker__button',\n SEPARATOR: 'time-picker__separator',\n} as const;\n\n/**\n * Clock face constants\n */\nexport const CLOCK_FACE = {\n RADIUS: 100,\n CENTER: 50,\n HOUR_HAND_LENGTH: 30,\n MINUTE_HAND_LENGTH: 40,\n SECOND_HAND_LENGTH: 45,\n} as const;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker.style.js","sourceRoot":"","sources":["../../../src/components/timepicker/timepicker.style.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;IACrB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8iBjB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { css } from 'lit';\nimport { styleVariables } from './timepicker.style.variables.js';\n\nexport const styles = css`\n ${styleVariables}\n :host {\n display: block;\n font-family: var(--nuraly-timepicker-local-font-family);\n font-size: var(--nuraly-timepicker-local-font-size);\n font-weight: var(--nuraly-timepicker-local-font-weight);\n }\n\n /* Host attribute selectors for configuration */\n :host([disabled]) {\n opacity: var(--nuraly-timepicker-local-disabled-opacity);\n pointer-events: none;\n }\n\n .time-picker {\n position: relative;\n display: inline-block;\n width: 100%;\n }\n\n /* Input wrapper hover and focus states matching select component */\n .time-picker__input-wrapper:hover:not(.time-picker--disabled) nr-input {\n --nuraly-input-border-color: var(--nuraly-timepicker-local-border-color-hover);\n }\n\n .time-picker__input-wrapper:focus-within nr-input,\n .time-picker--open .time-picker__input-wrapper nr-input,\n .time-picker__input-wrapper nr-input:focus {\n --nuraly-input-border-color: var(--nuraly-timepicker-local-focus-color);\n --nuraly-input-box-shadow: 0 0 0 2px var(--nuraly-timepicker-local-focus-color)33;\n }\n\n /* Disabled state styling */\n .time-picker--disabled .time-picker__input-wrapper nr-input {\n --nuraly-input-background-color: var(--nuraly-timepicker-local-disabled-bg);\n --nuraly-input-border-color: var(--nuraly-timepicker-local-border-color);\n --nuraly-input-text-color: var(--nuraly-timepicker-local-text-color-disabled);\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .time-picker__input-wrapper {\n position: relative;\n width: 100%;\n }\n\n /* Style the nr-input component */\n .time-picker__input-wrapper nr-input {\n width: 100%;\n }\n\n /* Style the trigger button inside nr-input */\n .time-picker__trigger {\n padding: 4px !important;\n min-width: auto !important;\n width: 24px !important;\n height: 24px !important;\n border-radius: var(--nuraly-timepicker-local-border-radius-sm) !important;\n }\n\n .time-picker__trigger svg {\n width: 16px;\n height: 16px;\n color: var(--nuraly-timepicker-local-text-color-secondary);\n transition: color 0.2s ease;\n }\n\n .time-picker__trigger:hover svg {\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__trigger:hover {\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__trigger:disabled {\n color: var(--nuraly-timepicker-local-text-color-disabled);\n cursor: not-allowed;\n }\n\n .time-picker__trigger svg {\n width: 14px;\n height: 14px;\n }\n\n .time-picker__dropdown {\n position: absolute;\n z-index: 1000;\n background-color: var(--nuraly-timepicker-local-background-color);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n border: 1px solid var(--nuraly-timepicker-local-border-color);\n border-radius: var(--nuraly-timepicker-local-border-radius);\n box-shadow: var(--nuraly-timepicker-local-box-shadow);\n width: 100%;\n min-width: 180px;\n /* Animation and positioning - simplified to match select */\n opacity: 1;\n visibility: visible;\n transform: translateY(0);\n transition: all 0.2s ease-in-out;\n /* Create new stacking context to prevent layering issues */\n isolation: isolate;\n /* Ensure solid background to prevent visual bleed-through */\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n /* Force above other elements */\n transform: translateZ(0);\n animation: dropdown-enter 0.15s ease-out;\n overflow: hidden;\n }\n\n .time-picker__dropdown.placement-top {\n animation: dropdown-enter-top 0.15s ease-out;\n }\n\n @keyframes dropdown-enter {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n @keyframes dropdown-enter-top {\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .time-picker__columns {\n display: flex;\n max-height: 216px;\n overflow: hidden;\n border-radius: var(--nuraly-timepicker-local-border-radius);\n background: var(--nuraly-timepicker-local-background-color);\n padding: 4px 0;\n }\n\n .time-picker__column {\n flex: 1;\n border-right: 1px solid rgba(0, 0, 0, 0.06);\n background: transparent;\n overflow: hidden;\n position: relative;\n min-width: 60px;\n }\n\n .time-picker__column:last-child {\n border-right: none;\n }\n\n .time-picker__column-list {\n max-height: 216px;\n overflow-y: scroll;\n overflow-x: hidden;\n scrollbar-width: thin;\n scrollbar-color: rgba(0, 0, 0, 0.06) transparent;\n /* Custom scrollbar styling to match modern design */\n padding: 4px 2px;\n scroll-behavior: smooth;\n /* Force scrollbar to always be visible */\n -webkit-overflow-scrolling: touch;\n }\n\n .time-picker__column-list::-webkit-scrollbar {\n width: 6px;\n /* Always show scrollbar */\n -webkit-appearance: none;\n }\n\n .time-picker__column-list::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.04);\n margin: 8px 0;\n border-radius: var(--nuraly-timepicker-local-border-radius-sm);\n }\n\n .time-picker__column-list::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: var(--nuraly-timepicker-local-border-radius-sm);\n transition: background-color 0.2s ease;\n /* Ensure thumb is always visible */\n min-height: 20px;\n }\n\n .time-picker__column-list::-webkit-scrollbar-thumb:hover {\n background-color: rgba(0, 0, 0, 0.3);\n }\n\n .time-picker__column-list {\n scrollbar-width: thin;\n scrollbar-color: rgba(0, 0, 0, 0.2) rgba(0, 0, 0, 0.04);\n scroll-behavior: smooth;\n }\n\n .time-picker__column-item {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px 8px;\n color: var(--nuraly-timepicker-local-text-color);\n font-size: var(--nuraly-timepicker-local-font-size);\n font-weight: var(--nuraly-timepicker-local-font-weight);\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n border-radius: var(--nuraly-timepicker-local-border-radius);\n position: relative;\n user-select: none;\n line-height: var(--nuraly-timepicker-local-line-height);\n min-height: 28px;\n margin: 1px 2px;\n }\n\n .time-picker__column-item:hover {\n background-color: var(--nuraly-timepicker-local-control-item-bg-hover);\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__column-item:active {\n background-color: var(--nuraly-timepicker-local-control-item-bg-active);\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__column-item--selected {\n background-color: var(--nuraly-timepicker-local-control-item-bg-active);\n color: var(--nuraly-timepicker-local-primary-color);\n font-weight: 600;\n border-radius: var(--nuraly-timepicker-local-border-radius);\n }\n\n .time-picker__column-item--selected:hover {\n background-color: var(--nuraly-timepicker-local-control-item-bg-active);\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__column-item--focused {\n background-color: var(--nuraly-timepicker-local-control-item-bg-hover);\n outline: 2px solid var(--nuraly-timepicker-local-focus-color);\n outline-offset: -2px;\n border-radius: var(--nuraly-timepicker-local-border-radius);\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__column-item--disabled {\n opacity: 0.4;\n cursor: not-allowed;\n color: var(--timepicker-text-color-disabled);\n }\n\n .time-picker__column-item--disabled:hover {\n background-color: transparent;\n color: var(--timepicker-text-color-disabled);\n }\n\n .time-picker__dropdown--top {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 4px;\n }\n\n .time-picker__clock-container {\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n background: var(--timepicker-background-color);\n }\n\n .time-picker__digital-inputs {\n display: flex;\n align-items: center;\n gap: 8px;\n justify-content: center;\n padding: 8px 12px;\n border-bottom: 1px solid var(--timepicker-border-color);\n }\n\n .time-picker__time-input {\n width: 56px;\n height: 32px;\n text-align: center;\n padding: 4px 8px;\n border: 1px solid var(--timepicker-border-color);\n border-radius: var(--timepicker-border-radius);\n font-size: 14px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n color: var(--timepicker-text-color);\n background-color: var(--timepicker-background-color);\n transition: all 0.3s;\n outline: none;\n }\n\n .time-picker__time-input:hover {\n border-color: var(--timepicker-primary-color-hover);\n }\n\n .time-picker__time-input:focus {\n border-color: var(--timepicker-primary-color);\n box-shadow: 0 0 0 2px var(--timepicker-primary-color-active);\n }\n\n .time-picker__separator {\n font-weight: 600;\n color: var(--timepicker-text-color);\n }\n\n .time-picker__period-toggle {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--timepicker-border-color);\n border-radius: var(--timepicker-border-radius);\n overflow: hidden;\n margin-left: 8px;\n }\n\n .time-picker__period-button {\n background: var(--timepicker-background-color);\n border: none;\n padding: 6px 12px;\n font-size: 12px;\n color: var(--timepicker-text-color);\n cursor: pointer;\n transition: all 0.3s;\n min-width: 44px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .time-picker__period-button:hover {\n background-color: var(--timepicker-item-hover-bg);\n color: var(--timepicker-text-color);\n }\n\n .time-picker__period-button--active {\n background-color: var(--timepicker-primary-color);\n color: #fff;\n }\n\n .time-picker__period-button + .time-picker__period-button {\n border-top: 1px solid var(--timepicker-border-color);\n }\n\n .time-picker__clock {\n width: var(--timepicker-clock-size);\n height: var(--timepicker-clock-size);\n border: 1px solid var(--timepicker-border-color);\n border-radius: 50%;\n background-color: var(--timepicker-background-color);\n position: relative;\n margin: 0 auto;\n user-select: none;\n }\n\n .time-picker__clock-face {\n width: 100%;\n height: 100%;\n position: relative;\n }\n\n .time-picker__clock-number {\n position: absolute;\n color: var(--timepicker-text-color);\n font-size: 14px;\n font-weight: 400;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border-radius: 50%;\n transition: all 0.3s;\n transform: translate(-50%, -50%);\n }\n\n .time-picker__clock-number:hover {\n background-color: var(--timepicker-item-hover-bg);\n color: var(--timepicker-text-color);\n }\n\n .time-picker__clock-number--selected {\n background-color: var(--timepicker-primary-color);\n color: #fff;\n }\n\n .time-picker__clock-hand {\n position: absolute;\n background-color: var(--timepicker-primary-color);\n transform-origin: bottom center;\n border-radius: 2px 2px 0 0;\n }\n\n .time-picker__clock-center {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 6px;\n height: 6px;\n background-color: var(--timepicker-primary-color);\n border-radius: 50%;\n z-index: 10;\n }\n\n .time-picker__mode-buttons {\n display: flex;\n gap: 8px;\n justify-content: center;\n margin-bottom: 8px;\n }\n\n .time-picker__mode-button {\n padding: 6px 16px;\n border: 1px solid var(--timepicker-border-color);\n background: var(--timepicker-background-color);\n color: var(--timepicker-text-color);\n border-radius: var(--timepicker-border-radius);\n cursor: pointer;\n font-size: 14px;\n transition: all 0.3s;\n outline: none;\n }\n\n .time-picker__mode-button:hover {\n background-color: var(--timepicker-item-hover-bg);\n border-color: var(--timepicker-primary-color-hover);\n }\n\n .time-picker__mode-button--active {\n background-color: var(--timepicker-primary-color);\n color: #fff;\n border-color: var(--timepicker-primary-color);\n }\n\n .time-picker__actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n padding: 8px 12px;\n border-top: 1px solid rgba(0, 0, 0, 0.06);\n background: var(--timepicker-background-color);\n border-bottom-left-radius: 8px;\n border-bottom-right-radius: 8px;\n }\n\n /* Style nr-button components in actions */\n .time-picker__actions nr-button {\n border-radius: var(--nuraly-timepicker-local-border-radius);\n font-weight: 400;\n font-size: 14px;\n height: 28px;\n }\n\n \n\n .time-picker__label {\n display: block;\n margin-bottom: 8px;\n font-weight: 400;\n color: var(--timepicker-text-color);\n font-size: 14px;\n }\n\n .time-picker__helper-text {\n font-size: 14px;\n margin-top: 4px;\n color: var(--timepicker-text-color-secondary);\n }\n\n .time-picker__helper-text--error {\n color: var(--timepicker-error-color);\n }\n\n /* Size variants */\n :host([size=\"small\"]) {\n --timepicker-height: 32px;\n --timepicker-font-size: 12px;\n --timepicker-padding: 4px 8px;\n --timepicker-clock-size: 240px;\n }\n\n :host([size=\"large\"]) {\n --timepicker-height: 48px;\n --timepicker-font-size: 16px;\n --timepicker-padding: 12px 16px;\n --timepicker-clock-size: 320px;\n }\n\n /* Variant styles */\n :host([variant=\"outlined\"]) .time-picker__input {\n background-color: transparent;\n }\n\n :host([variant=\"filled\"]) .time-picker__input {\n border: none;\n background-color: var(--timepicker-border-color)33;\n border-bottom: 2px solid var(--timepicker-border-color);\n border-radius: var(--timepicker-border-radius) var(--timepicker-border-radius) 0 0;\n }\n\n :host([variant=\"filled\"]) .time-picker__input:focus {\n border-bottom-color: var(--timepicker-focus-color);\n box-shadow: none;\n }\n\n /* Disabled state */\n :host([disabled]) .time-picker {\n pointer-events: none;\n opacity: 0.6;\n }\n\n /* Animation classes */\n .time-picker__dropdown {\n opacity: 0;\n transform: translateY(-8px);\n transition: opacity 0.2s, transform 0.2s;\n }\n\n .time-picker__dropdown--open {\n opacity: 1;\n transform: translateY(0);\n }\n\n /* Hide scrollbars on time inputs */\n .time-picker__time-input::-webkit-outer-spin-button,\n .time-picker__time-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .time-picker__time-input[type=\"number\"] {\n -moz-appearance: textfield;\n }\n\n /* Responsive adjustments */\n @media (max-width: 480px) {\n .time-picker__clock {\n --timepicker-clock-size: 240px;\n }\n \n .time-picker__dropdown {\n left: 50%;\n transform: translateX(-50%);\n width: 90vw;\n max-width: 320px;\n }\n }\n`;\n"]}
1
+ {"version":3,"file":"timepicker.style.js","sourceRoot":"","sources":["../../../../src/components/timepicker/timepicker.style.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;IACrB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8iBjB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { css } from 'lit';\nimport { styleVariables } from './timepicker.style.variables.js';\n\nexport const styles = css`\n ${styleVariables}\n :host {\n display: block;\n font-family: var(--nuraly-timepicker-local-font-family);\n font-size: var(--nuraly-timepicker-local-font-size);\n font-weight: var(--nuraly-timepicker-local-font-weight);\n }\n\n /* Host attribute selectors for configuration */\n :host([disabled]) {\n opacity: var(--nuraly-timepicker-local-disabled-opacity);\n pointer-events: none;\n }\n\n .time-picker {\n position: relative;\n display: inline-block;\n width: 100%;\n }\n\n /* Input wrapper hover and focus states matching select component */\n .time-picker__input-wrapper:hover:not(.time-picker--disabled) nr-input {\n --nuraly-input-border-color: var(--nuraly-timepicker-local-border-color-hover);\n }\n\n .time-picker__input-wrapper:focus-within nr-input,\n .time-picker--open .time-picker__input-wrapper nr-input,\n .time-picker__input-wrapper nr-input:focus {\n --nuraly-input-border-color: var(--nuraly-timepicker-local-focus-color);\n --nuraly-input-box-shadow: 0 0 0 2px var(--nuraly-timepicker-local-focus-color)33;\n }\n\n /* Disabled state styling */\n .time-picker--disabled .time-picker__input-wrapper nr-input {\n --nuraly-input-background-color: var(--nuraly-timepicker-local-disabled-bg);\n --nuraly-input-border-color: var(--nuraly-timepicker-local-border-color);\n --nuraly-input-text-color: var(--nuraly-timepicker-local-text-color-disabled);\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .time-picker__input-wrapper {\n position: relative;\n width: 100%;\n }\n\n /* Style the nr-input component */\n .time-picker__input-wrapper nr-input {\n width: 100%;\n }\n\n /* Style the trigger button inside nr-input */\n .time-picker__trigger {\n padding: 4px !important;\n min-width: auto !important;\n width: 24px !important;\n height: 24px !important;\n border-radius: var(--nuraly-timepicker-local-border-radius-sm) !important;\n }\n\n .time-picker__trigger svg {\n width: 16px;\n height: 16px;\n color: var(--nuraly-timepicker-local-text-color-secondary);\n transition: color 0.2s ease;\n }\n\n .time-picker__trigger:hover svg {\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__trigger:hover {\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__trigger:disabled {\n color: var(--nuraly-timepicker-local-text-color-disabled);\n cursor: not-allowed;\n }\n\n .time-picker__trigger svg {\n width: 14px;\n height: 14px;\n }\n\n .time-picker__dropdown {\n position: absolute;\n z-index: 1000;\n background-color: var(--nuraly-timepicker-local-background-color);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n border: 1px solid var(--nuraly-timepicker-local-border-color);\n border-radius: var(--nuraly-timepicker-local-border-radius);\n box-shadow: var(--nuraly-timepicker-local-box-shadow);\n width: 100%;\n min-width: 180px;\n /* Animation and positioning - simplified to match select */\n opacity: 1;\n visibility: visible;\n transform: translateY(0);\n transition: all 0.2s ease-in-out;\n /* Create new stacking context to prevent layering issues */\n isolation: isolate;\n /* Ensure solid background to prevent visual bleed-through */\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n /* Force above other elements */\n transform: translateZ(0);\n animation: dropdown-enter 0.15s ease-out;\n overflow: hidden;\n }\n\n .time-picker__dropdown.placement-top {\n animation: dropdown-enter-top 0.15s ease-out;\n }\n\n @keyframes dropdown-enter {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n @keyframes dropdown-enter-top {\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .time-picker__columns {\n display: flex;\n max-height: 216px;\n overflow: hidden;\n border-radius: var(--nuraly-timepicker-local-border-radius);\n background: var(--nuraly-timepicker-local-background-color);\n padding: 4px 0;\n }\n\n .time-picker__column {\n flex: 1;\n border-right: 1px solid rgba(0, 0, 0, 0.06);\n background: transparent;\n overflow: hidden;\n position: relative;\n min-width: 60px;\n }\n\n .time-picker__column:last-child {\n border-right: none;\n }\n\n .time-picker__column-list {\n max-height: 216px;\n overflow-y: scroll;\n overflow-x: hidden;\n scrollbar-width: thin;\n scrollbar-color: rgba(0, 0, 0, 0.06) transparent;\n /* Custom scrollbar styling to match modern design */\n padding: 4px 2px;\n scroll-behavior: smooth;\n /* Force scrollbar to always be visible */\n -webkit-overflow-scrolling: touch;\n }\n\n .time-picker__column-list::-webkit-scrollbar {\n width: 6px;\n /* Always show scrollbar */\n -webkit-appearance: none;\n }\n\n .time-picker__column-list::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.04);\n margin: 8px 0;\n border-radius: var(--nuraly-timepicker-local-border-radius-sm);\n }\n\n .time-picker__column-list::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: var(--nuraly-timepicker-local-border-radius-sm);\n transition: background-color 0.2s ease;\n /* Ensure thumb is always visible */\n min-height: 20px;\n }\n\n .time-picker__column-list::-webkit-scrollbar-thumb:hover {\n background-color: rgba(0, 0, 0, 0.3);\n }\n\n .time-picker__column-list {\n scrollbar-width: thin;\n scrollbar-color: rgba(0, 0, 0, 0.2) rgba(0, 0, 0, 0.04);\n scroll-behavior: smooth;\n }\n\n .time-picker__column-item {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px 8px;\n color: var(--nuraly-timepicker-local-text-color);\n font-size: var(--nuraly-timepicker-local-font-size);\n font-weight: var(--nuraly-timepicker-local-font-weight);\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n border-radius: var(--nuraly-timepicker-local-border-radius);\n position: relative;\n user-select: none;\n line-height: var(--nuraly-timepicker-local-line-height);\n min-height: 28px;\n margin: 1px 2px;\n }\n\n .time-picker__column-item:hover {\n background-color: var(--nuraly-timepicker-local-control-item-bg-hover);\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__column-item:active {\n background-color: var(--nuraly-timepicker-local-control-item-bg-active);\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__column-item--selected {\n background-color: var(--nuraly-timepicker-local-control-item-bg-active);\n color: var(--nuraly-timepicker-local-primary-color);\n font-weight: 600;\n border-radius: var(--nuraly-timepicker-local-border-radius);\n }\n\n .time-picker__column-item--selected:hover {\n background-color: var(--nuraly-timepicker-local-control-item-bg-active);\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__column-item--focused {\n background-color: var(--nuraly-timepicker-local-control-item-bg-hover);\n outline: 2px solid var(--nuraly-timepicker-local-focus-color);\n outline-offset: -2px;\n border-radius: var(--nuraly-timepicker-local-border-radius);\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__column-item--disabled {\n opacity: 0.4;\n cursor: not-allowed;\n color: var(--timepicker-text-color-disabled);\n }\n\n .time-picker__column-item--disabled:hover {\n background-color: transparent;\n color: var(--timepicker-text-color-disabled);\n }\n\n .time-picker__dropdown--top {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 4px;\n }\n\n .time-picker__clock-container {\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n background: var(--timepicker-background-color);\n }\n\n .time-picker__digital-inputs {\n display: flex;\n align-items: center;\n gap: 8px;\n justify-content: center;\n padding: 8px 12px;\n border-bottom: 1px solid var(--timepicker-border-color);\n }\n\n .time-picker__time-input {\n width: 56px;\n height: 32px;\n text-align: center;\n padding: 4px 8px;\n border: 1px solid var(--timepicker-border-color);\n border-radius: var(--timepicker-border-radius);\n font-size: 14px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n color: var(--timepicker-text-color);\n background-color: var(--timepicker-background-color);\n transition: all 0.3s;\n outline: none;\n }\n\n .time-picker__time-input:hover {\n border-color: var(--timepicker-primary-color-hover);\n }\n\n .time-picker__time-input:focus {\n border-color: var(--timepicker-primary-color);\n box-shadow: 0 0 0 2px var(--timepicker-primary-color-active);\n }\n\n .time-picker__separator {\n font-weight: 600;\n color: var(--timepicker-text-color);\n }\n\n .time-picker__period-toggle {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--timepicker-border-color);\n border-radius: var(--timepicker-border-radius);\n overflow: hidden;\n margin-left: 8px;\n }\n\n .time-picker__period-button {\n background: var(--timepicker-background-color);\n border: none;\n padding: 6px 12px;\n font-size: 12px;\n color: var(--timepicker-text-color);\n cursor: pointer;\n transition: all 0.3s;\n min-width: 44px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .time-picker__period-button:hover {\n background-color: var(--timepicker-item-hover-bg);\n color: var(--timepicker-text-color);\n }\n\n .time-picker__period-button--active {\n background-color: var(--timepicker-primary-color);\n color: #fff;\n }\n\n .time-picker__period-button + .time-picker__period-button {\n border-top: 1px solid var(--timepicker-border-color);\n }\n\n .time-picker__clock {\n width: var(--timepicker-clock-size);\n height: var(--timepicker-clock-size);\n border: 1px solid var(--timepicker-border-color);\n border-radius: 50%;\n background-color: var(--timepicker-background-color);\n position: relative;\n margin: 0 auto;\n user-select: none;\n }\n\n .time-picker__clock-face {\n width: 100%;\n height: 100%;\n position: relative;\n }\n\n .time-picker__clock-number {\n position: absolute;\n color: var(--timepicker-text-color);\n font-size: 14px;\n font-weight: 400;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border-radius: 50%;\n transition: all 0.3s;\n transform: translate(-50%, -50%);\n }\n\n .time-picker__clock-number:hover {\n background-color: var(--timepicker-item-hover-bg);\n color: var(--timepicker-text-color);\n }\n\n .time-picker__clock-number--selected {\n background-color: var(--timepicker-primary-color);\n color: #fff;\n }\n\n .time-picker__clock-hand {\n position: absolute;\n background-color: var(--timepicker-primary-color);\n transform-origin: bottom center;\n border-radius: 2px 2px 0 0;\n }\n\n .time-picker__clock-center {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 6px;\n height: 6px;\n background-color: var(--timepicker-primary-color);\n border-radius: 50%;\n z-index: 10;\n }\n\n .time-picker__mode-buttons {\n display: flex;\n gap: 8px;\n justify-content: center;\n margin-bottom: 8px;\n }\n\n .time-picker__mode-button {\n padding: 6px 16px;\n border: 1px solid var(--timepicker-border-color);\n background: var(--timepicker-background-color);\n color: var(--timepicker-text-color);\n border-radius: var(--timepicker-border-radius);\n cursor: pointer;\n font-size: 14px;\n transition: all 0.3s;\n outline: none;\n }\n\n .time-picker__mode-button:hover {\n background-color: var(--timepicker-item-hover-bg);\n border-color: var(--timepicker-primary-color-hover);\n }\n\n .time-picker__mode-button--active {\n background-color: var(--timepicker-primary-color);\n color: #fff;\n border-color: var(--timepicker-primary-color);\n }\n\n .time-picker__actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n padding: 8px 12px;\n border-top: 1px solid rgba(0, 0, 0, 0.06);\n background: var(--timepicker-background-color);\n border-bottom-left-radius: 8px;\n border-bottom-right-radius: 8px;\n }\n\n /* Style nr-button components in actions */\n .time-picker__actions nr-button {\n border-radius: var(--nuraly-timepicker-local-border-radius);\n font-weight: 400;\n font-size: 14px;\n height: 28px;\n }\n\n \n\n .time-picker__label {\n display: block;\n margin-bottom: 8px;\n font-weight: 400;\n color: var(--timepicker-text-color);\n font-size: 14px;\n }\n\n .time-picker__helper-text {\n font-size: 14px;\n margin-top: 4px;\n color: var(--timepicker-text-color-secondary);\n }\n\n .time-picker__helper-text--error {\n color: var(--timepicker-error-color);\n }\n\n /* Size variants */\n :host([size=\"small\"]) {\n --timepicker-height: 32px;\n --timepicker-font-size: 12px;\n --timepicker-padding: 4px 8px;\n --timepicker-clock-size: 240px;\n }\n\n :host([size=\"large\"]) {\n --timepicker-height: 48px;\n --timepicker-font-size: 16px;\n --timepicker-padding: 12px 16px;\n --timepicker-clock-size: 320px;\n }\n\n /* Variant styles */\n :host([variant=\"outlined\"]) .time-picker__input {\n background-color: transparent;\n }\n\n :host([variant=\"filled\"]) .time-picker__input {\n border: none;\n background-color: var(--timepicker-border-color)33;\n border-bottom: 2px solid var(--timepicker-border-color);\n border-radius: var(--timepicker-border-radius) var(--timepicker-border-radius) 0 0;\n }\n\n :host([variant=\"filled\"]) .time-picker__input:focus {\n border-bottom-color: var(--timepicker-focus-color);\n box-shadow: none;\n }\n\n /* Disabled state */\n :host([disabled]) .time-picker {\n pointer-events: none;\n opacity: 0.6;\n }\n\n /* Animation classes */\n .time-picker__dropdown {\n opacity: 0;\n transform: translateY(-8px);\n transition: opacity 0.2s, transform 0.2s;\n }\n\n .time-picker__dropdown--open {\n opacity: 1;\n transform: translateY(0);\n }\n\n /* Hide scrollbars on time inputs */\n .time-picker__time-input::-webkit-outer-spin-button,\n .time-picker__time-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .time-picker__time-input[type=\"number\"] {\n -moz-appearance: textfield;\n }\n\n /* Responsive adjustments */\n @media (max-width: 480px) {\n .time-picker__clock {\n --timepicker-clock-size: 240px;\n }\n \n .time-picker__dropdown {\n left: 50%;\n transform: translateX(-50%);\n width: 90vw;\n max-width: 320px;\n }\n }\n`;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker.style.variables.js","sourceRoot":"","sources":["../../../src/components/timepicker/timepicker.style.variables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuHhC,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const styleVariables = css`\n :host {\n /* ========================================\n * TIMEPICKER THEME-AWARE VARIABLES\n * Uses CSS custom properties from theme files\n * ======================================== */\n\n /* Base timepicker styling - uses theme variables with fallbacks */\n --nuraly-timepicker-local-background-color: var(--nuraly-color-timepicker-background, #ffffff);\n --nuraly-timepicker-local-text-color: var(--nuraly-color-timepicker-text, rgba(0, 0, 0, 0.88));\n --nuraly-timepicker-local-font-family: var(--nuraly-font-family-timepicker, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif);\n --nuraly-timepicker-local-font-size: var(--nuraly-font-size-timepicker, 14px);\n \n /* Timepicker borders - theme-aware */\n --nuraly-timepicker-local-border-color: var(--nuraly-color-timepicker-border, #d9d9d9);\n --nuraly-timepicker-local-border-width: var(--nuraly-border-width-timepicker, 1px);\n --nuraly-timepicker-local-border-radius: var(--nuraly-border-radius-timepicker, 6px);\n --nuraly-timepicker-local-border-radius-sm: var(--nuraly-border-radius-timepicker-sm, calc(var(--nuraly-border-radius-timepicker, 6px) * 0.5));\n \n /* Primary and selection colors - theme-aware */\n --nuraly-timepicker-local-primary-color: var(--nuraly-color-timepicker-primary, #1890ff);\n --nuraly-timepicker-local-focus-color: var(--nuraly-color-timepicker-focus, #1890ff);\n --nuraly-timepicker-local-border-color-hover: var(--nuraly-color-timepicker-border-hover, #1890ff);\n --nuraly-timepicker-local-selected-color: var(--nuraly-color-timepicker-selected, #1890ff);\n --nuraly-timepicker-local-selected-text-color: var(--nuraly-color-timepicker-selected-text, #ffffff);\n --nuraly-timepicker-local-hover-color: var(--nuraly-color-timepicker-hover, #f5f5f5);\n --nuraly-timepicker-local-clock-hand-color: var(--nuraly-color-timepicker-clock-hand, #1890ff);\n \n /* Control item states - theme-aware */\n --nuraly-timepicker-local-control-item-bg-hover: var(--nuraly-color-timepicker-control-item-bg-hover, #f5f5f5);\n --nuraly-timepicker-local-control-item-bg-active: var(--nuraly-color-timepicker-control-item-bg-active, #e6f7ff);\n \n /* Text colors - theme-aware */\n --nuraly-timepicker-local-text-color-secondary: var(--nuraly-color-timepicker-text-secondary, rgba(0, 0, 0, 0.45));\n --nuraly-timepicker-local-text-color-disabled: var(--nuraly-color-timepicker-text-disabled, rgba(0, 0, 0, 0.25));\n \n /* Disabled states - theme-aware */\n --nuraly-timepicker-local-disabled-color: var(--nuraly-color-timepicker-disabled, #f5f5f5);\n --nuraly-timepicker-local-disabled-bg: var(--nuraly-color-timepicker-disabled-bg, #f5f5f5);\n --nuraly-timepicker-local-disabled-text-color: var(--nuraly-color-timepicker-disabled-text, rgba(0, 0, 0, 0.25));\n --nuraly-timepicker-local-disabled-opacity: var(--nuraly-opacity-timepicker-disabled, 1);\n \n /* Input field colors - theme-aware */\n --nuraly-timepicker-local-input-background: var(--nuraly-color-timepicker-input-background, #ffffff);\n --nuraly-timepicker-local-input-border-color: var(--nuraly-color-timepicker-input-border, #d9d9d9);\n --nuraly-timepicker-local-input-focus-border-color: var(--nuraly-color-timepicker-input-focus-border, #1890ff);\n --nuraly-timepicker-local-input-text-color: var(--nuraly-color-timepicker-input-text, rgba(0, 0, 0, 0.88));\n --nuraly-timepicker-local-input-placeholder-color: var(--nuraly-color-timepicker-input-placeholder, rgba(0, 0, 0, 0.25));\n \n /* Dropdown and clock colors - theme-aware */\n --nuraly-timepicker-local-dropdown-background: var(--nuraly-color-timepicker-dropdown-background, #ffffff);\n --nuraly-timepicker-local-clock-background: var(--nuraly-color-timepicker-clock-background, #ffffff);\n --nuraly-timepicker-local-clock-text-color: var(--nuraly-color-timepicker-clock-text, rgba(0, 0, 0, 0.88));\n --nuraly-timepicker-local-clock-face-color: var(--nuraly-color-timepicker-clock-face, rgba(0, 0, 0, 0.45));\n --nuraly-timepicker-local-clock-border-color: var(--nuraly-color-timepicker-clock-border, #f0f0f0);\n \n /* Item selection colors - theme-aware */\n --nuraly-timepicker-local-item-hover-color: var(--nuraly-color-timepicker-item-hover, #f5f5f5);\n --nuraly-timepicker-local-item-active-color: var(--nuraly-color-timepicker-item-active, #e6f7ff);\n --nuraly-timepicker-local-item-selected-color: var(--nuraly-color-timepicker-item-selected, #1890ff);\n --nuraly-timepicker-local-item-selected-text-color: var(--nuraly-color-timepicker-item-selected-text, #ffffff);\n \n /* Error/warning/success colors - theme-aware */\n --nuraly-timepicker-local-error-color: var(--nuraly-color-timepicker-error, #ff4d4f);\n --nuraly-timepicker-local-warning-color: var(--nuraly-color-timepicker-warning, #faad14);\n --nuraly-timepicker-local-success-color: var(--nuraly-color-timepicker-success, #52c41a);\n \n /* Layout and sizing - theme-aware */\n --nuraly-timepicker-local-width: var(--nuraly-size-timepicker-width, 120px);\n --nuraly-timepicker-local-height: var(--nuraly-size-timepicker-height, 32px);\n --nuraly-timepicker-local-dropdown-width: var(--nuraly-size-timepicker-dropdown-width, 180px);\n --nuraly-timepicker-local-clock-size: var(--nuraly-size-timepicker-clock, 200px);\n \n /* Typography - theme-aware */\n --nuraly-timepicker-local-font-weight: var(--nuraly-font-weight-timepicker, 400);\n --nuraly-timepicker-local-line-height: var(--nuraly-line-height-timepicker, 1.5715);\n --nuraly-timepicker-local-clock-font-size: var(--nuraly-font-size-timepicker-clock, 14px);\n \n /* Spacing - theme-aware */\n --nuraly-timepicker-local-gap: var(--nuraly-spacing-timepicker-gap, 4px);\n --nuraly-timepicker-local-dropdown-padding: var(--nuraly-spacing-timepicker-dropdown-padding, 8px);\n --nuraly-timepicker-local-input-padding: var(--nuraly-spacing-timepicker-input-padding, 4px 11px);\n --nuraly-timepicker-local-padding: var(--nuraly-spacing-timepicker-padding, 4px 11px);\n \n /* Borders - theme-aware */\n --nuraly-timepicker-local-input-border-width: var(--nuraly-border-width-timepicker-input, 1px);\n --nuraly-timepicker-local-focus-border-width: var(--nuraly-border-width-timepicker-focus, 2px);\n \n /* Shadows - theme-aware */\n --nuraly-timepicker-local-shadow-color: var(--nuraly-color-timepicker-shadow, rgba(0, 0, 0, 0.15));\n --nuraly-timepicker-local-box-shadow: var(--nuraly-shadow-timepicker-box, 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05));\n --nuraly-timepicker-local-input-focus-shadow: var(--nuraly-shadow-timepicker-input-focus, 0 0 0 2px rgba(24, 144, 255, 0.2));\n \n /* States - theme-aware */\n --nuraly-timepicker-local-hover-opacity: var(--nuraly-opacity-timepicker-hover, 1);\n \n /* Animation and transitions - theme-aware */\n --nuraly-timepicker-local-transition-duration: var(--nuraly-transition-duration-timepicker, 0.2s);\n --nuraly-timepicker-local-transition-timing: var(--nuraly-transition-timing-timepicker, ease-in-out);\n \n /* Z-index - theme-aware */\n --nuraly-timepicker-local-dropdown-z-index: var(--nuraly-z-index-timepicker-dropdown, 1050);\n \n /* Icon sizes - theme-aware */\n --nuraly-timepicker-local-icon-size: var(--nuraly-size-timepicker-icon, 14px);\n \n /* Size variants - theme-aware */\n --nuraly-timepicker-local-small-font-size: var(--nuraly-font-size-timepicker-small, 12px);\n --nuraly-timepicker-local-small-padding: var(--nuraly-spacing-timepicker-small-padding, 0px 7px);\n --nuraly-timepicker-local-small-height: var(--nuraly-size-timepicker-small-height, 24px);\n \n --nuraly-timepicker-local-medium-font-size: var(--nuraly-font-size-timepicker-medium, 14px);\n --nuraly-timepicker-local-medium-padding: var(--nuraly-spacing-timepicker-medium-padding, 4px 11px);\n --nuraly-timepicker-local-medium-height: var(--nuraly-size-timepicker-medium-height, 32px);\n \n --nuraly-timepicker-local-large-font-size: var(--nuraly-font-size-timepicker-large, 16px);\n --nuraly-timepicker-local-large-padding: var(--nuraly-spacing-timepicker-large-padding, 6px 11px);\n --nuraly-timepicker-local-large-height: var(--nuraly-size-timepicker-large-height, 40px);\n }\n`;"]}
1
+ {"version":3,"file":"timepicker.style.variables.js","sourceRoot":"","sources":["../../../../src/components/timepicker/timepicker.style.variables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuHhC,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const styleVariables = css`\n :host {\n /* ========================================\n * TIMEPICKER THEME-AWARE VARIABLES\n * Uses CSS custom properties from theme files\n * ======================================== */\n\n /* Base timepicker styling - uses theme variables with fallbacks */\n --nuraly-timepicker-local-background-color: var(--nuraly-color-timepicker-background, #ffffff);\n --nuraly-timepicker-local-text-color: var(--nuraly-color-timepicker-text, rgba(0, 0, 0, 0.88));\n --nuraly-timepicker-local-font-family: var(--nuraly-font-family-timepicker, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif);\n --nuraly-timepicker-local-font-size: var(--nuraly-font-size-timepicker, 14px);\n \n /* Timepicker borders - theme-aware */\n --nuraly-timepicker-local-border-color: var(--nuraly-color-timepicker-border, #d9d9d9);\n --nuraly-timepicker-local-border-width: var(--nuraly-border-width-timepicker, 1px);\n --nuraly-timepicker-local-border-radius: var(--nuraly-border-radius-timepicker, 6px);\n --nuraly-timepicker-local-border-radius-sm: var(--nuraly-border-radius-timepicker-sm, calc(var(--nuraly-border-radius-timepicker, 6px) * 0.5));\n \n /* Primary and selection colors - theme-aware */\n --nuraly-timepicker-local-primary-color: var(--nuraly-color-timepicker-primary, #1890ff);\n --nuraly-timepicker-local-focus-color: var(--nuraly-color-timepicker-focus, #1890ff);\n --nuraly-timepicker-local-border-color-hover: var(--nuraly-color-timepicker-border-hover, #1890ff);\n --nuraly-timepicker-local-selected-color: var(--nuraly-color-timepicker-selected, #1890ff);\n --nuraly-timepicker-local-selected-text-color: var(--nuraly-color-timepicker-selected-text, #ffffff);\n --nuraly-timepicker-local-hover-color: var(--nuraly-color-timepicker-hover, #f5f5f5);\n --nuraly-timepicker-local-clock-hand-color: var(--nuraly-color-timepicker-clock-hand, #1890ff);\n \n /* Control item states - theme-aware */\n --nuraly-timepicker-local-control-item-bg-hover: var(--nuraly-color-timepicker-control-item-bg-hover, #f5f5f5);\n --nuraly-timepicker-local-control-item-bg-active: var(--nuraly-color-timepicker-control-item-bg-active, #e6f7ff);\n \n /* Text colors - theme-aware */\n --nuraly-timepicker-local-text-color-secondary: var(--nuraly-color-timepicker-text-secondary, rgba(0, 0, 0, 0.45));\n --nuraly-timepicker-local-text-color-disabled: var(--nuraly-color-timepicker-text-disabled, rgba(0, 0, 0, 0.25));\n \n /* Disabled states - theme-aware */\n --nuraly-timepicker-local-disabled-color: var(--nuraly-color-timepicker-disabled, #f5f5f5);\n --nuraly-timepicker-local-disabled-bg: var(--nuraly-color-timepicker-disabled-bg, #f5f5f5);\n --nuraly-timepicker-local-disabled-text-color: var(--nuraly-color-timepicker-disabled-text, rgba(0, 0, 0, 0.25));\n --nuraly-timepicker-local-disabled-opacity: var(--nuraly-opacity-timepicker-disabled, 1);\n \n /* Input field colors - theme-aware */\n --nuraly-timepicker-local-input-background: var(--nuraly-color-timepicker-input-background, #ffffff);\n --nuraly-timepicker-local-input-border-color: var(--nuraly-color-timepicker-input-border, #d9d9d9);\n --nuraly-timepicker-local-input-focus-border-color: var(--nuraly-color-timepicker-input-focus-border, #1890ff);\n --nuraly-timepicker-local-input-text-color: var(--nuraly-color-timepicker-input-text, rgba(0, 0, 0, 0.88));\n --nuraly-timepicker-local-input-placeholder-color: var(--nuraly-color-timepicker-input-placeholder, rgba(0, 0, 0, 0.25));\n \n /* Dropdown and clock colors - theme-aware */\n --nuraly-timepicker-local-dropdown-background: var(--nuraly-color-timepicker-dropdown-background, #ffffff);\n --nuraly-timepicker-local-clock-background: var(--nuraly-color-timepicker-clock-background, #ffffff);\n --nuraly-timepicker-local-clock-text-color: var(--nuraly-color-timepicker-clock-text, rgba(0, 0, 0, 0.88));\n --nuraly-timepicker-local-clock-face-color: var(--nuraly-color-timepicker-clock-face, rgba(0, 0, 0, 0.45));\n --nuraly-timepicker-local-clock-border-color: var(--nuraly-color-timepicker-clock-border, #f0f0f0);\n \n /* Item selection colors - theme-aware */\n --nuraly-timepicker-local-item-hover-color: var(--nuraly-color-timepicker-item-hover, #f5f5f5);\n --nuraly-timepicker-local-item-active-color: var(--nuraly-color-timepicker-item-active, #e6f7ff);\n --nuraly-timepicker-local-item-selected-color: var(--nuraly-color-timepicker-item-selected, #1890ff);\n --nuraly-timepicker-local-item-selected-text-color: var(--nuraly-color-timepicker-item-selected-text, #ffffff);\n \n /* Error/warning/success colors - theme-aware */\n --nuraly-timepicker-local-error-color: var(--nuraly-color-timepicker-error, #ff4d4f);\n --nuraly-timepicker-local-warning-color: var(--nuraly-color-timepicker-warning, #faad14);\n --nuraly-timepicker-local-success-color: var(--nuraly-color-timepicker-success, #52c41a);\n \n /* Layout and sizing - theme-aware */\n --nuraly-timepicker-local-width: var(--nuraly-size-timepicker-width, 120px);\n --nuraly-timepicker-local-height: var(--nuraly-size-timepicker-height, 32px);\n --nuraly-timepicker-local-dropdown-width: var(--nuraly-size-timepicker-dropdown-width, 180px);\n --nuraly-timepicker-local-clock-size: var(--nuraly-size-timepicker-clock, 200px);\n \n /* Typography - theme-aware */\n --nuraly-timepicker-local-font-weight: var(--nuraly-font-weight-timepicker, 400);\n --nuraly-timepicker-local-line-height: var(--nuraly-line-height-timepicker, 1.5715);\n --nuraly-timepicker-local-clock-font-size: var(--nuraly-font-size-timepicker-clock, 14px);\n \n /* Spacing - theme-aware */\n --nuraly-timepicker-local-gap: var(--nuraly-spacing-timepicker-gap, 4px);\n --nuraly-timepicker-local-dropdown-padding: var(--nuraly-spacing-timepicker-dropdown-padding, 8px);\n --nuraly-timepicker-local-input-padding: var(--nuraly-spacing-timepicker-input-padding, 4px 11px);\n --nuraly-timepicker-local-padding: var(--nuraly-spacing-timepicker-padding, 4px 11px);\n \n /* Borders - theme-aware */\n --nuraly-timepicker-local-input-border-width: var(--nuraly-border-width-timepicker-input, 1px);\n --nuraly-timepicker-local-focus-border-width: var(--nuraly-border-width-timepicker-focus, 2px);\n \n /* Shadows - theme-aware */\n --nuraly-timepicker-local-shadow-color: var(--nuraly-color-timepicker-shadow, rgba(0, 0, 0, 0.15));\n --nuraly-timepicker-local-box-shadow: var(--nuraly-shadow-timepicker-box, 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05));\n --nuraly-timepicker-local-input-focus-shadow: var(--nuraly-shadow-timepicker-input-focus, 0 0 0 2px rgba(24, 144, 255, 0.2));\n \n /* States - theme-aware */\n --nuraly-timepicker-local-hover-opacity: var(--nuraly-opacity-timepicker-hover, 1);\n \n /* Animation and transitions - theme-aware */\n --nuraly-timepicker-local-transition-duration: var(--nuraly-transition-duration-timepicker, 0.2s);\n --nuraly-timepicker-local-transition-timing: var(--nuraly-transition-timing-timepicker, ease-in-out);\n \n /* Z-index - theme-aware */\n --nuraly-timepicker-local-dropdown-z-index: var(--nuraly-z-index-timepicker-dropdown, 1050);\n \n /* Icon sizes - theme-aware */\n --nuraly-timepicker-local-icon-size: var(--nuraly-size-timepicker-icon, 14px);\n \n /* Size variants - theme-aware */\n --nuraly-timepicker-local-small-font-size: var(--nuraly-font-size-timepicker-small, 12px);\n --nuraly-timepicker-local-small-padding: var(--nuraly-spacing-timepicker-small-padding, 0px 7px);\n --nuraly-timepicker-local-small-height: var(--nuraly-size-timepicker-small-height, 24px);\n \n --nuraly-timepicker-local-medium-font-size: var(--nuraly-font-size-timepicker-medium, 14px);\n --nuraly-timepicker-local-medium-padding: var(--nuraly-spacing-timepicker-medium-padding, 4px 11px);\n --nuraly-timepicker-local-medium-height: var(--nuraly-size-timepicker-medium-height, 32px);\n \n --nuraly-timepicker-local-large-font-size: var(--nuraly-font-size-timepicker-large, 16px);\n --nuraly-timepicker-local-large-padding: var(--nuraly-spacing-timepicker-large-padding, 6px 11px);\n --nuraly-timepicker-local-large-height: var(--nuraly-size-timepicker-large-height, 40px);\n }\n`;"]}
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker.types.js","sourceRoot":"","sources":["../../../src/components/timepicker/timepicker.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,oCAAsB,CAAA;IACtB,gCAAkB,CAAA;AACpB,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,iCAAe,CAAA;IACf,qCAAmB,CAAA;IACnB,qCAAmB,CAAA;AACrB,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,iCAAe,CAAA;IACf,mCAAiB,CAAA;IACjB,iCAAe,CAAA;AACjB,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,wCAAmB,CAAA;IACnB,0CAAqB,CAAA;IACrB,sCAAiB,CAAA;AACnB,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,kCAAe,CAAA;IACf,sCAAmB,CAAA;IACnB,sCAAmB,CAAA;AACrB,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,wCAAiB,CAAA;IACjB,kCAAW,CAAA;IACX,oCAAa,CAAA;AACf,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,qCAAO,CAAA;IACP,uCAAQ,CAAA;IACR,sCAAQ,CAAA;IACR,8CAAY,CAAA;IACZ,4CAAW,CAAA;AACb,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,uBAAS,CAAA;IACT,uBAAS,CAAA;AACX,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAwDD;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,OAAO;IACpC,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,SAAS;CAC1B,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC/C,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,UAAU;IACvC,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,YAAY;CAC7B,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,YAAY,EAAE,CAAC;IACf,uBAAuB,EAAE,CAAC;IAC1B,uBAAuB,EAAE,CAAC;CAClB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,WAAW,EAAE,gBAAgB;IAC7B,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,SAAS;IACf,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,gBAAgB;IAC7B,UAAU,EAAE,eAAe;CACnB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAc;IACzC,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,UAAU,CAAC,EAAE;CACtB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * Time format types - supports 12-hour and 24-hour formats\n */\nexport enum TimeFormat {\n TwentyFourHour = '24h',\n TwelveHour = '12h',\n}\n\n/**\n * Time picker display modes\n */\nexport enum TimePickerMode {\n Hours = 'hours',\n Minutes = 'minutes',\n Seconds = 'seconds',\n}\n\n/**\n * Time picker sizes\n */\nexport enum TimePickerSize {\n Small = 'small',\n Medium = 'medium',\n Large = 'large',\n}\n\n/**\n * Time picker variants\n */\nexport enum TimePickerVariant {\n Default = 'default',\n Outlined = 'outlined',\n Filled = 'filled',\n}\n\n/**\n * Time picker states for validation\n */\nexport enum TimePickerState {\n Default = 'default',\n Error = 'error',\n Warning = 'warning',\n Success = 'success',\n}\n\n/**\n * Time picker placement options for dropdown\n */\nexport enum TimePickerPlacement {\n Bottom = 'bottom',\n Top = 'top',\n Auto = 'auto',\n}\n\n/**\n * Time selection step increments\n */\nexport enum TimeStep {\n One = 1,\n Five = 5,\n Ten = 10,\n Fifteen = 15,\n Thirty = 30,\n}\n\n/**\n * Time period for 12-hour format\n */\nexport enum TimePeriod {\n AM = 'AM',\n PM = 'PM',\n}\n\n/**\n * Time structure interface\n */\nexport interface TimeValue {\n hours: number;\n minutes: number;\n seconds: number;\n period?: TimePeriod;\n}\n\n/**\n * Time picker option for dropdowns\n */\nexport interface TimePickerOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Time validation constraints\n */\nexport interface TimeConstraints {\n minTime?: string;\n maxTime?: string;\n disabledTimes?: string[];\n enabledTimes?: string[];\n}\n\n/**\n * Time picker configuration\n */\nexport interface TimePickerConfig {\n format: TimeFormat;\n showSeconds: boolean;\n step: {\n hours: TimeStep;\n minutes: TimeStep;\n seconds: TimeStep;\n };\n use12HourClock: boolean;\n minuteInterval: number;\n secondInterval: number;\n}\n\n/**\n * Time picker event details\n */\nexport interface TimeChangeEventDetail {\n value: string;\n timeValue: TimeValue;\n formattedValue: string;\n}\n\n/**\n * Default time formats\n */\nexport const DEFAULT_TIME_FORMATS = {\n [TimeFormat.TwentyFourHour]: 'HH:mm',\n [TimeFormat.TwelveHour]: 'hh:mm A',\n} as const;\n\n/**\n * Default time format with seconds\n */\nexport const DEFAULT_TIME_FORMATS_WITH_SECONDS = {\n [TimeFormat.TwentyFourHour]: 'HH:mm:ss',\n [TimeFormat.TwelveHour]: 'hh:mm:ss A',\n} as const;\n\n/**\n * Time picker constants\n */\nexport const TIME_PICKER_CONSTANTS = {\n HOURS_24: 24,\n HOURS_12: 12,\n MINUTES: 60,\n SECONDS: 60,\n DEFAULT_STEP: 1,\n DEFAULT_MINUTE_INTERVAL: 1,\n DEFAULT_SECOND_INTERVAL: 1,\n} as const;\n\n/**\n * Time picker events\n */\nexport const TIME_PICKER_EVENTS = {\n TIME_CHANGE: 'nr-time-change',\n FOCUS: 'nr-focus',\n BLUR: 'nr-blur',\n CLOCK_OPEN: 'nr-clock-open',\n CLOCK_CLOSE: 'nr-clock-close',\n VALIDATION: 'nr-validation',\n} as const;\n\n/**\n * Empty time value\n */\nexport const EMPTY_TIME_VALUE: TimeValue = {\n hours: 0,\n minutes: 0,\n seconds: 0,\n period: TimePeriod.AM,\n};\n"]}
1
+ {"version":3,"file":"timepicker.types.js","sourceRoot":"","sources":["../../../../src/components/timepicker/timepicker.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,oCAAsB,CAAA;IACtB,gCAAkB,CAAA;AACpB,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,iCAAe,CAAA;IACf,qCAAmB,CAAA;IACnB,qCAAmB,CAAA;AACrB,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,iCAAe,CAAA;IACf,mCAAiB,CAAA;IACjB,iCAAe,CAAA;AACjB,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,wCAAmB,CAAA;IACnB,0CAAqB,CAAA;IACrB,sCAAiB,CAAA;AACnB,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,kCAAe,CAAA;IACf,sCAAmB,CAAA;IACnB,sCAAmB,CAAA;AACrB,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,wCAAiB,CAAA;IACjB,kCAAW,CAAA;IACX,oCAAa,CAAA;AACf,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,qCAAO,CAAA;IACP,uCAAQ,CAAA;IACR,sCAAQ,CAAA;IACR,8CAAY,CAAA;IACZ,4CAAW,CAAA;AACb,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,uBAAS,CAAA;IACT,uBAAS,CAAA;AACX,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAwDD;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,OAAO;IACpC,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,SAAS;CAC1B,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC/C,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,UAAU;IACvC,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,YAAY;CAC7B,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,EAAE;IACX,YAAY,EAAE,CAAC;IACf,uBAAuB,EAAE,CAAC;IAC1B,uBAAuB,EAAE,CAAC;CAClB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,WAAW,EAAE,gBAAgB;IAC7B,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,SAAS;IACf,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,gBAAgB;IAC7B,UAAU,EAAE,eAAe;CACnB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAc;IACzC,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,UAAU,CAAC,EAAE;CACtB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\n/**\n * Time format types - supports 12-hour and 24-hour formats\n */\nexport enum TimeFormat {\n TwentyFourHour = '24h',\n TwelveHour = '12h',\n}\n\n/**\n * Time picker display modes\n */\nexport enum TimePickerMode {\n Hours = 'hours',\n Minutes = 'minutes',\n Seconds = 'seconds',\n}\n\n/**\n * Time picker sizes\n */\nexport enum TimePickerSize {\n Small = 'small',\n Medium = 'medium',\n Large = 'large',\n}\n\n/**\n * Time picker variants\n */\nexport enum TimePickerVariant {\n Default = 'default',\n Outlined = 'outlined',\n Filled = 'filled',\n}\n\n/**\n * Time picker states for validation\n */\nexport enum TimePickerState {\n Default = 'default',\n Error = 'error',\n Warning = 'warning',\n Success = 'success',\n}\n\n/**\n * Time picker placement options for dropdown\n */\nexport enum TimePickerPlacement {\n Bottom = 'bottom',\n Top = 'top',\n Auto = 'auto',\n}\n\n/**\n * Time selection step increments\n */\nexport enum TimeStep {\n One = 1,\n Five = 5,\n Ten = 10,\n Fifteen = 15,\n Thirty = 30,\n}\n\n/**\n * Time period for 12-hour format\n */\nexport enum TimePeriod {\n AM = 'AM',\n PM = 'PM',\n}\n\n/**\n * Time structure interface\n */\nexport interface TimeValue {\n hours: number;\n minutes: number;\n seconds: number;\n period?: TimePeriod;\n}\n\n/**\n * Time picker option for dropdowns\n */\nexport interface TimePickerOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Time validation constraints\n */\nexport interface TimeConstraints {\n minTime?: string;\n maxTime?: string;\n disabledTimes?: string[];\n enabledTimes?: string[];\n}\n\n/**\n * Time picker configuration\n */\nexport interface TimePickerConfig {\n format: TimeFormat;\n showSeconds: boolean;\n step: {\n hours: TimeStep;\n minutes: TimeStep;\n seconds: TimeStep;\n };\n use12HourClock: boolean;\n minuteInterval: number;\n secondInterval: number;\n}\n\n/**\n * Time picker event details\n */\nexport interface TimeChangeEventDetail {\n value: string;\n timeValue: TimeValue;\n formattedValue: string;\n}\n\n/**\n * Default time formats\n */\nexport const DEFAULT_TIME_FORMATS = {\n [TimeFormat.TwentyFourHour]: 'HH:mm',\n [TimeFormat.TwelveHour]: 'hh:mm A',\n} as const;\n\n/**\n * Default time format with seconds\n */\nexport const DEFAULT_TIME_FORMATS_WITH_SECONDS = {\n [TimeFormat.TwentyFourHour]: 'HH:mm:ss',\n [TimeFormat.TwelveHour]: 'hh:mm:ss A',\n} as const;\n\n/**\n * Time picker constants\n */\nexport const TIME_PICKER_CONSTANTS = {\n HOURS_24: 24,\n HOURS_12: 12,\n MINUTES: 60,\n SECONDS: 60,\n DEFAULT_STEP: 1,\n DEFAULT_MINUTE_INTERVAL: 1,\n DEFAULT_SECOND_INTERVAL: 1,\n} as const;\n\n/**\n * Time picker events\n */\nexport const TIME_PICKER_EVENTS = {\n TIME_CHANGE: 'nr-time-change',\n FOCUS: 'nr-focus',\n BLUR: 'nr-blur',\n CLOCK_OPEN: 'nr-clock-open',\n CLOCK_CLOSE: 'nr-clock-close',\n VALIDATION: 'nr-validation',\n} as const;\n\n/**\n * Empty time value\n */\nexport const EMPTY_TIME_VALUE: TimeValue = {\n hours: 0,\n minutes: 0,\n seconds: 0,\n period: TimePeriod.AM,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"time.utils.d.ts","sourceRoot":"","sources":["../../../../src/components/timepicker/utils/time.utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAG3E;;GAEG;AACH,qBAAa,SAAS;IACpB;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAU,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS;IAS3G;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,UAAsC,GAAG,SAAS,GAAG,IAAI;IAc5G;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IA0B9B;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,GAAE,UAAsC,EAAE,WAAW,GAAE,OAAe,GAAG,MAAM;IAY7H;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAsB/B;;OAEG;IACH,MAAM,CAAC,cAAc,IAAI,SAAS;IASlC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM;IAM9D;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO;IAI/D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAW5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAW5B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAE,MAAU,GAAG,SAAS;IAc9G;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,GAAE,MAAW,EAAE,MAAM,GAAE,UAAsC,EAAE,WAAW,GAAE,OAAe,GAAG,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;IAiBtK;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,GAAG,SAAS;IAU3E;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO;IAYpG;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS;IAQ7C;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI;CAK/D"}
1
+ {"version":3,"file":"time.utils.d.ts","sourceRoot":"","sources":["../../../../../src/components/timepicker/utils/time.utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAG3E;;GAEG;AACH,qBAAa,SAAS;IACpB;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAU,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS;IAS3G;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,UAAsC,GAAG,SAAS,GAAG,IAAI;IAc5G;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IA0B9B;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,GAAE,UAAsC,EAAE,WAAW,GAAE,OAAe,GAAG,MAAM;IAY7H;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAsB/B;;OAEG;IACH,MAAM,CAAC,cAAc,IAAI,SAAS;IASlC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM;IAM9D;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO;IAI/D;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAW5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAW5B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAE,MAAU,GAAG,SAAS;IAc9G;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,GAAE,MAAW,EAAE,MAAM,GAAE,UAAsC,EAAE,WAAW,GAAE,OAAe,GAAG,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;IAiBtK;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,GAAG,SAAS;IAU3E;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO;IAYpG;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS;IAQ7C;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI;CAK/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"time.utils.js","sourceRoot":"","sources":["../../../../src/components/timepicker/utils/time.utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue, TimePeriod, TimeFormat } from '../timepicker.types.js';\nimport { TIME_BOUNDARIES } from '../timepicker.constants.js';\n\n/**\n * Time utility functions for time picker component\n */\nexport class TimeUtils {\n /**\n * Create a new TimeValue object\n */\n static createTimeValue(hours: number, minutes: number, seconds: number = 0, period?: TimePeriod): TimeValue {\n return {\n hours: Math.max(0, Math.min(hours, 23)),\n minutes: Math.max(0, Math.min(minutes, 59)),\n seconds: Math.max(0, Math.min(seconds, 59)),\n period,\n };\n }\n\n /**\n * Parse time string to TimeValue\n */\n static parseTimeString(timeString: string, format: TimeFormat = TimeFormat.TwentyFourHour): TimeValue | null {\n if (!timeString?.trim()) {\n return null;\n }\n\n const cleanTime = timeString.trim().toUpperCase();\n\n if (format === TimeFormat.TwelveHour) {\n return this.parse12HourTime(cleanTime);\n } else {\n return this.parse24HourTime(cleanTime);\n }\n }\n\n /**\n * Parse 24-hour format time string\n */\n private static parse24HourTime(timeString: string): TimeValue | null {\n const match = timeString.match(/^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?$/);\n \n if (!match) {\n return null;\n }\n\n const hours = parseInt(match[1], 10);\n const minutes = parseInt(match[2], 10);\n const seconds = match[3] ? parseInt(match[3], 10) : 0;\n\n if (!this.isValidTime24(hours, minutes, seconds)) {\n return null;\n }\n\n return this.createTimeValue(hours, minutes, seconds);\n }\n\n /**\n * Parse 12-hour format time string\n */\n private static parse12HourTime(timeString: string): TimeValue | null {\n const match = timeString.match(/^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?\\s?(AM|PM)$/);\n \n if (!match) {\n return null;\n }\n\n let hours = parseInt(match[1], 10);\n const minutes = parseInt(match[2], 10);\n const seconds = match[3] ? parseInt(match[3], 10) : 0;\n const period = match[4] as TimePeriod;\n\n if (!this.isValidTime12(hours, minutes, seconds)) {\n return null;\n }\n\n // Convert to 24-hour format for internal storage\n if (period === TimePeriod.PM && hours !== 12) {\n hours += 12;\n } else if (period === TimePeriod.AM && hours === 12) {\n hours = 0;\n }\n\n return this.createTimeValue(hours, minutes, seconds, period);\n }\n\n /**\n * Format TimeValue to string\n */\n static formatTimeValue(time: TimeValue, format: TimeFormat = TimeFormat.TwentyFourHour, showSeconds: boolean = false): string {\n if (!time) {\n return '';\n }\n\n if (format === TimeFormat.TwelveHour) {\n return this.format12HourTime(time, showSeconds);\n } else {\n return this.format24HourTime(time, showSeconds);\n }\n }\n\n /**\n * Format time in 24-hour format\n */\n private static format24HourTime(time: TimeValue, showSeconds: boolean): string {\n const hours = time.hours.toString().padStart(2, '0');\n const minutes = time.minutes.toString().padStart(2, '0');\n \n if (showSeconds) {\n const seconds = time.seconds.toString().padStart(2, '0');\n return `${hours}:${minutes}:${seconds}`;\n }\n \n return `${hours}:${minutes}`;\n }\n\n /**\n * Format time in 12-hour format\n */\n private static format12HourTime(time: TimeValue, showSeconds: boolean): string {\n let hours = time.hours;\n const minutes = time.minutes.toString().padStart(2, '0');\n const period = hours >= 12 ? TimePeriod.PM : TimePeriod.AM;\n\n // Convert to 12-hour format\n if (hours === 0) {\n hours = 12;\n } else if (hours > 12) {\n hours -= 12;\n }\n\n const hoursStr = hours.toString();\n \n if (showSeconds) {\n const seconds = time.seconds.toString().padStart(2, '0');\n return `${hoursStr}:${minutes}:${seconds} ${period}`;\n }\n \n return `${hoursStr}:${minutes} ${period}`;\n }\n\n /**\n * Get current time as TimeValue\n */\n static getCurrentTime(): TimeValue {\n const now = new Date();\n return this.createTimeValue(\n now.getHours(),\n now.getMinutes(),\n now.getSeconds()\n );\n }\n\n /**\n * Compare two TimeValue objects\n */\n static compareTime(time1: TimeValue, time2: TimeValue): number {\n const totalSeconds1 = time1.hours * 3600 + time1.minutes * 60 + time1.seconds;\n const totalSeconds2 = time2.hours * 3600 + time2.minutes * 60 + time2.seconds;\n return totalSeconds1 - totalSeconds2;\n }\n\n /**\n * Check if two TimeValue objects are equal\n */\n static isTimeEqual(time1: TimeValue, time2: TimeValue): boolean {\n return this.compareTime(time1, time2) === 0;\n }\n\n /**\n * Validate 24-hour time components\n */\n private static isValidTime24(hours: number, minutes: number, seconds: number = 0): boolean {\n return (\n hours >= TIME_BOUNDARIES.MIN_HOUR_24 && \n hours <= TIME_BOUNDARIES.MAX_HOUR_24 &&\n minutes >= TIME_BOUNDARIES.MIN_MINUTE && \n minutes <= TIME_BOUNDARIES.MAX_MINUTE &&\n seconds >= TIME_BOUNDARIES.MIN_SECOND && \n seconds <= TIME_BOUNDARIES.MAX_SECOND\n );\n }\n\n /**\n * Validate 12-hour time components\n */\n private static isValidTime12(hours: number, minutes: number, seconds: number = 0): boolean {\n return (\n hours >= TIME_BOUNDARIES.MIN_HOUR_12 && \n hours <= TIME_BOUNDARIES.MAX_HOUR_12 &&\n minutes >= TIME_BOUNDARIES.MIN_MINUTE && \n minutes <= TIME_BOUNDARIES.MAX_MINUTE &&\n seconds >= TIME_BOUNDARIES.MIN_SECOND && \n seconds <= TIME_BOUNDARIES.MAX_SECOND\n );\n }\n\n /**\n * Add time to a TimeValue\n */\n static addTime(time: TimeValue, hoursToAdd: number, minutesToAdd: number, secondsToAdd: number = 0): TimeValue {\n let totalSeconds = time.hours * 3600 + time.minutes * 60 + time.seconds;\n totalSeconds += hoursToAdd * 3600 + minutesToAdd * 60 + secondsToAdd;\n\n // Handle overflow/underflow\n totalSeconds = ((totalSeconds % 86400) + 86400) % 86400;\n\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n\n return this.createTimeValue(hours, minutes, seconds);\n }\n\n /**\n * Generate time options for dropdowns\n */\n static generateTimeOptions(interval: number = 15, format: TimeFormat = TimeFormat.TwentyFourHour, showSeconds: boolean = false): Array<{value: string, label: string}> {\n const options: Array<{value: string, label: string}> = [];\n \n for (let hour = 0; hour < 24; hour++) {\n for (let minute = 0; minute < 60; minute += interval) {\n const timeValue = this.createTimeValue(hour, minute, 0);\n const formatted = this.formatTimeValue(timeValue, format, showSeconds);\n options.push({\n value: formatted,\n label: formatted,\n });\n }\n }\n\n return options;\n }\n\n /**\n * Round time to nearest interval\n */\n static roundToInterval(time: TimeValue, intervalMinutes: number): TimeValue {\n const totalMinutes = time.hours * 60 + time.minutes;\n const roundedMinutes = Math.round(totalMinutes / intervalMinutes) * intervalMinutes;\n \n const hours = Math.floor(roundedMinutes / 60) % 24;\n const minutes = roundedMinutes % 60;\n\n return this.createTimeValue(hours, minutes, time.seconds);\n }\n\n /**\n * Check if time is within range\n */\n static isTimeInRange(time: TimeValue, minTime: TimeValue | null, maxTime: TimeValue | null): boolean {\n if (minTime && this.compareTime(time, minTime) < 0) {\n return false;\n }\n \n if (maxTime && this.compareTime(time, maxTime) > 0) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Convert Date object to TimeValue\n */\n static dateToTimeValue(date: Date): TimeValue {\n return this.createTimeValue(\n date.getHours(),\n date.getMinutes(),\n date.getSeconds()\n );\n }\n\n /**\n * Convert TimeValue to Date object (using current date)\n */\n static timeValueToDate(time: TimeValue, baseDate?: Date): Date {\n const date = baseDate ? new Date(baseDate) : new Date();\n date.setHours(time.hours, time.minutes, time.seconds, 0);\n return date;\n }\n}\n"]}
1
+ {"version":3,"file":"time.utils.js","sourceRoot":"","sources":["../../../../../src/components/timepicker/utils/time.utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue, TimePeriod, TimeFormat } from '../timepicker.types.js';\nimport { TIME_BOUNDARIES } from '../timepicker.constants.js';\n\n/**\n * Time utility functions for time picker component\n */\nexport class TimeUtils {\n /**\n * Create a new TimeValue object\n */\n static createTimeValue(hours: number, minutes: number, seconds: number = 0, period?: TimePeriod): TimeValue {\n return {\n hours: Math.max(0, Math.min(hours, 23)),\n minutes: Math.max(0, Math.min(minutes, 59)),\n seconds: Math.max(0, Math.min(seconds, 59)),\n period,\n };\n }\n\n /**\n * Parse time string to TimeValue\n */\n static parseTimeString(timeString: string, format: TimeFormat = TimeFormat.TwentyFourHour): TimeValue | null {\n if (!timeString?.trim()) {\n return null;\n }\n\n const cleanTime = timeString.trim().toUpperCase();\n\n if (format === TimeFormat.TwelveHour) {\n return this.parse12HourTime(cleanTime);\n } else {\n return this.parse24HourTime(cleanTime);\n }\n }\n\n /**\n * Parse 24-hour format time string\n */\n private static parse24HourTime(timeString: string): TimeValue | null {\n const match = timeString.match(/^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?$/);\n \n if (!match) {\n return null;\n }\n\n const hours = parseInt(match[1], 10);\n const minutes = parseInt(match[2], 10);\n const seconds = match[3] ? parseInt(match[3], 10) : 0;\n\n if (!this.isValidTime24(hours, minutes, seconds)) {\n return null;\n }\n\n return this.createTimeValue(hours, minutes, seconds);\n }\n\n /**\n * Parse 12-hour format time string\n */\n private static parse12HourTime(timeString: string): TimeValue | null {\n const match = timeString.match(/^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?\\s?(AM|PM)$/);\n \n if (!match) {\n return null;\n }\n\n let hours = parseInt(match[1], 10);\n const minutes = parseInt(match[2], 10);\n const seconds = match[3] ? parseInt(match[3], 10) : 0;\n const period = match[4] as TimePeriod;\n\n if (!this.isValidTime12(hours, minutes, seconds)) {\n return null;\n }\n\n // Convert to 24-hour format for internal storage\n if (period === TimePeriod.PM && hours !== 12) {\n hours += 12;\n } else if (period === TimePeriod.AM && hours === 12) {\n hours = 0;\n }\n\n return this.createTimeValue(hours, minutes, seconds, period);\n }\n\n /**\n * Format TimeValue to string\n */\n static formatTimeValue(time: TimeValue, format: TimeFormat = TimeFormat.TwentyFourHour, showSeconds: boolean = false): string {\n if (!time) {\n return '';\n }\n\n if (format === TimeFormat.TwelveHour) {\n return this.format12HourTime(time, showSeconds);\n } else {\n return this.format24HourTime(time, showSeconds);\n }\n }\n\n /**\n * Format time in 24-hour format\n */\n private static format24HourTime(time: TimeValue, showSeconds: boolean): string {\n const hours = time.hours.toString().padStart(2, '0');\n const minutes = time.minutes.toString().padStart(2, '0');\n \n if (showSeconds) {\n const seconds = time.seconds.toString().padStart(2, '0');\n return `${hours}:${minutes}:${seconds}`;\n }\n \n return `${hours}:${minutes}`;\n }\n\n /**\n * Format time in 12-hour format\n */\n private static format12HourTime(time: TimeValue, showSeconds: boolean): string {\n let hours = time.hours;\n const minutes = time.minutes.toString().padStart(2, '0');\n const period = hours >= 12 ? TimePeriod.PM : TimePeriod.AM;\n\n // Convert to 12-hour format\n if (hours === 0) {\n hours = 12;\n } else if (hours > 12) {\n hours -= 12;\n }\n\n const hoursStr = hours.toString();\n \n if (showSeconds) {\n const seconds = time.seconds.toString().padStart(2, '0');\n return `${hoursStr}:${minutes}:${seconds} ${period}`;\n }\n \n return `${hoursStr}:${minutes} ${period}`;\n }\n\n /**\n * Get current time as TimeValue\n */\n static getCurrentTime(): TimeValue {\n const now = new Date();\n return this.createTimeValue(\n now.getHours(),\n now.getMinutes(),\n now.getSeconds()\n );\n }\n\n /**\n * Compare two TimeValue objects\n */\n static compareTime(time1: TimeValue, time2: TimeValue): number {\n const totalSeconds1 = time1.hours * 3600 + time1.minutes * 60 + time1.seconds;\n const totalSeconds2 = time2.hours * 3600 + time2.minutes * 60 + time2.seconds;\n return totalSeconds1 - totalSeconds2;\n }\n\n /**\n * Check if two TimeValue objects are equal\n */\n static isTimeEqual(time1: TimeValue, time2: TimeValue): boolean {\n return this.compareTime(time1, time2) === 0;\n }\n\n /**\n * Validate 24-hour time components\n */\n private static isValidTime24(hours: number, minutes: number, seconds: number = 0): boolean {\n return (\n hours >= TIME_BOUNDARIES.MIN_HOUR_24 && \n hours <= TIME_BOUNDARIES.MAX_HOUR_24 &&\n minutes >= TIME_BOUNDARIES.MIN_MINUTE && \n minutes <= TIME_BOUNDARIES.MAX_MINUTE &&\n seconds >= TIME_BOUNDARIES.MIN_SECOND && \n seconds <= TIME_BOUNDARIES.MAX_SECOND\n );\n }\n\n /**\n * Validate 12-hour time components\n */\n private static isValidTime12(hours: number, minutes: number, seconds: number = 0): boolean {\n return (\n hours >= TIME_BOUNDARIES.MIN_HOUR_12 && \n hours <= TIME_BOUNDARIES.MAX_HOUR_12 &&\n minutes >= TIME_BOUNDARIES.MIN_MINUTE && \n minutes <= TIME_BOUNDARIES.MAX_MINUTE &&\n seconds >= TIME_BOUNDARIES.MIN_SECOND && \n seconds <= TIME_BOUNDARIES.MAX_SECOND\n );\n }\n\n /**\n * Add time to a TimeValue\n */\n static addTime(time: TimeValue, hoursToAdd: number, minutesToAdd: number, secondsToAdd: number = 0): TimeValue {\n let totalSeconds = time.hours * 3600 + time.minutes * 60 + time.seconds;\n totalSeconds += hoursToAdd * 3600 + minutesToAdd * 60 + secondsToAdd;\n\n // Handle overflow/underflow\n totalSeconds = ((totalSeconds % 86400) + 86400) % 86400;\n\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n\n return this.createTimeValue(hours, minutes, seconds);\n }\n\n /**\n * Generate time options for dropdowns\n */\n static generateTimeOptions(interval: number = 15, format: TimeFormat = TimeFormat.TwentyFourHour, showSeconds: boolean = false): Array<{value: string, label: string}> {\n const options: Array<{value: string, label: string}> = [];\n \n for (let hour = 0; hour < 24; hour++) {\n for (let minute = 0; minute < 60; minute += interval) {\n const timeValue = this.createTimeValue(hour, minute, 0);\n const formatted = this.formatTimeValue(timeValue, format, showSeconds);\n options.push({\n value: formatted,\n label: formatted,\n });\n }\n }\n\n return options;\n }\n\n /**\n * Round time to nearest interval\n */\n static roundToInterval(time: TimeValue, intervalMinutes: number): TimeValue {\n const totalMinutes = time.hours * 60 + time.minutes;\n const roundedMinutes = Math.round(totalMinutes / intervalMinutes) * intervalMinutes;\n \n const hours = Math.floor(roundedMinutes / 60) % 24;\n const minutes = roundedMinutes % 60;\n\n return this.createTimeValue(hours, minutes, time.seconds);\n }\n\n /**\n * Check if time is within range\n */\n static isTimeInRange(time: TimeValue, minTime: TimeValue | null, maxTime: TimeValue | null): boolean {\n if (minTime && this.compareTime(time, minTime) < 0) {\n return false;\n }\n \n if (maxTime && this.compareTime(time, maxTime) > 0) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Convert Date object to TimeValue\n */\n static dateToTimeValue(date: Date): TimeValue {\n return this.createTimeValue(\n date.getHours(),\n date.getMinutes(),\n date.getSeconds()\n );\n }\n\n /**\n * Convert TimeValue to Date object (using current date)\n */\n static timeValueToDate(time: TimeValue, baseDate?: Date): Date {\n const date = baseDate ? new Date(baseDate) : new Date();\n date.setHours(time.hours, time.minutes, time.seconds, 0);\n return date;\n }\n}\n"]}