@oslokommune/punkt-elements 16.7.0 → 16.7.1
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/CHANGELOG.md +17 -0
- package/dist/pkt-timepicker.cjs +16 -13
- package/dist/pkt-timepicker.js +48 -42
- package/package.json +2 -2
- package/src/components/timepicker/timepicker.ts +8 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,23 @@ og skriver commits ca etter [Conventional Commits](https://conventionalcommits.o
|
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
## [16.7.1](https://github.com/oslokommune/punkt/compare/16.7.0...16.7.1) (2026-04-13)
|
|
9
|
+
|
|
10
|
+
### ⚠ BREAKING CHANGES
|
|
11
|
+
Ingen
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
Ingen
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
Ingen
|
|
18
|
+
|
|
19
|
+
### Chores
|
|
20
|
+
Ingen
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
|
|
8
25
|
## [16.7.0](https://github.com/oslokommune/punkt/compare/16.6.2...16.7.0) (2026-04-10)
|
|
9
26
|
|
|
10
27
|
### ⚠ BREAKING CHANGES
|
package/dist/pkt-timepicker.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./element-gR_VtSiD.cjs"),_=require("./state-Dg-53wQ8.cjs"),u=require("./ref-CL-Xk9Xm.cjs"),c=require("./if-defined-BOW3ODSj.cjs"),$=require("./class-map-CsENJXf1.cjs"),y=require("./input-element-DdVhUvva.cjs"),S=require("./element-with-slot-ZX-up7jO.cjs");require("./icon-Bqj9oBbl.cjs");require("./input-wrapper-B0MkQ0IZ.cjs");const D=o=>/^\d{2}:\d{2}$/.test(o)&&parseInt(o.slice(0,2),10)<=23&&parseInt(o.slice(3),10)<=59,d=o=>{const[t,e]=o.split(":").map(Number);return t*60+e},m=o=>o?Math.max(1,Math.round(o/60)):1,w=(o,t)=>{const e=o?parseInt(String(o).split(":")[0],10):0,s=t?parseInt(String(t).split(":")[0],10):23;return Array.from({length:s-e+1},(i,n)=>n+e)},x=o=>{const t=m(o);return Array.from({length:Math.floor(60/t)},(e,s)=>s*t)},I=(o,t,e,s)=>{let r=o!==""?parseInt(o,10):e===1?0:23,p=t!==""?parseInt(t,10):e===1?0:Math.floor(59/s)*s;return p+=e*s,p>59?(p=0,r=(r+1)%24):p<0&&(p=Math.floor(59/s)*s,r=(r-1+24)%24),{hours:String(r).padStart(2,"0"),minutes:String(p).padStart(2,"0")}};var A=Object.defineProperty,F=Object.getOwnPropertyDescriptor,h=(o,t,e,s)=>{for(var i=s>1?void 0:s?F(t,e):t,n=o.length-1,r;n>=0;n--)(r=o[n])&&(i=(s?r(t,e,i):r(i))||i);return s&&i&&A(t,e,i),i};exports.PktTimepicker=class extends y.PktInputElement{constructor(){super(...arguments),this.hiddenInputRef=u.e(),this.hoursInputRef=u.e(),this.minutesInputRef=u.e(),this.buttonRef=u.e(),this.value="",this.hidePicker=!1,this.stepArrows=!1,this._hours="",this._minutes="",this._isOpen=!1,this._hoursDigitCount=0,this._hoursFirstDigit=-1,this._minutesDigitCount=0,this._minutesFirstDigit=-1,this._hasFocus=!1,this._outsideClickHandler=t=>{this.contains(t.target)||this._closePopup()},this._handleComponentFocusIn=()=>{this._hasFocus||(this._hasFocus=!0,this.onFocus())},this._handleComponentFocusOut=t=>{this.contains(t.relatedTarget)||(this._hasFocus=!1,this.onBlur())},this._handleHoursKeydown=t=>{var s,i,n;const e=t.target;switch(t.key){case"ArrowUp":{t.preventDefault();const r=this._hours!==""?parseInt(this._hours,10):0;this._hours=String((r+1)%24).padStart(2,"0"),this._syncValueFromDisplay(),this.onInput();break}case"ArrowDown":{t.preventDefault();const r=this._hours!==""?parseInt(this._hours,10):0;this._hours=String((r-1+24)%24).padStart(2,"0"),this._syncValueFromDisplay(),this.onInput();break}case"ArrowRight":t.preventDefault(),(s=this.minutesInputRef.value)==null||s.focus();break;case"Backspace":case"Delete":this._hoursDigitCount=0,this._hoursFirstDigit=-1;break;case"Tab":break;case"Enter":{t.preventDefault();const r=this.internals.form;r?r.requestSubmit():e.blur();break}default:if(/^\d$/.test(t.key)){t.preventDefault();const r=parseInt(t.key,10);if(this._hoursDigitCount===0)this._hoursFirstDigit=r,this._hours=String(r).padStart(2,"0"),this._hoursDigitCount=1,this.onInput(),r>=3&&(this._hoursFirstDigit=-1,this._hoursDigitCount=0,this._syncValueFromDisplay(),(i=this.minutesInputRef.value)==null||i.focus());else{const p=this._hoursFirstDigit*10+r;this._hours=p<=23?String(p).padStart(2,"0"):String(r).padStart(2,"0"),this._hoursFirstDigit=-1,this._hoursDigitCount=0,this._syncValueFromDisplay(),this.onInput(),(n=this.minutesInputRef.value)==null||n.focus()}}else t.preventDefault()}},this._handleHoursBlur=()=>{this._hours!==""&&(this._hours=String(parseInt(this._hours,10)).padStart(2,"0")),this._hoursDigitCount=0,this._hoursFirstDigit=-1,this._syncValueFromDisplay()},this._handleMinutesKeydown=t=>{var s;const e=t.target;switch(t.key){case"ArrowUp":{t.preventDefault();const i=this._minutes!==""?parseInt(this._minutes,10):0;this._minutes=String((i+this._minuteStep)%60).padStart(2,"0"),this._syncValueFromDisplay(),this.onInput();break}case"ArrowDown":{t.preventDefault();const i=this._minutes!==""?parseInt(this._minutes,10):0;this._minutes=String((i-this._minuteStep+60)%60).padStart(2,"0"),this._syncValueFromDisplay(),this.onInput();break}case"ArrowLeft":t.preventDefault(),(s=this.hoursInputRef.value)==null||s.focus();break;case"Backspace":case"Delete":this._minutesDigitCount=0,this._minutesFirstDigit=-1;break;case"Tab":break;case"Enter":{t.preventDefault();const i=this.internals.form;i?i.requestSubmit():e.blur();break}default:if(/^\d$/.test(t.key)){t.preventDefault();const i=parseInt(t.key,10);if(this._minutesDigitCount===0)this._minutesFirstDigit=i,this._minutes=String(i).padStart(2,"0"),this._minutesDigitCount=1,this.onInput(),i>=6&&(this._minutesFirstDigit=-1,this._minutesDigitCount=0,this._syncValueFromDisplay());else{const n=this._minutesFirstDigit*10+i;this._minutes=n<=59?String(n).padStart(2,"0"):String(i).padStart(2,"0"),this._minutesFirstDigit=-1,this._minutesDigitCount=0,this._syncValueFromDisplay(),this.onInput()}}else t.preventDefault()}},this._handleMinutesBlur=()=>{this._minutes!==""&&(this._minutes=String(parseInt(this._minutes,10)).padStart(2,"0")),this._minutesDigitCount=0,this._minutesFirstDigit=-1,this._syncValueFromDisplay()},this._handlePopupKeydown=t=>{var p;const e=document.activeElement,s=e.closest(".pkt-timepicker-popup__col");if(!s)return;const i=Array.from(s.querySelectorAll(".pkt-timepicker-popup__option")),n=i.indexOf(e),r=e.dataset.type??"";switch(t.key){case"ArrowDown":t.preventDefault(),this._focusOptionAndSync(i[Math.min(n+1,i.length-1)],r);break;case"ArrowUp":t.preventDefault(),this._focusOptionAndSync(i[Math.max(n-1,0)],r);break;case"Home":t.preventDefault(),this._focusOptionAndSync(i[0],r);break;case"End":t.preventDefault(),this._focusOptionAndSync(i[i.length-1],r);break;case"ArrowRight":t.preventDefault(),r==="hour"&&(this._focusOptionAndSync(e,r),this.updateComplete.then(()=>{this._scrollToSelected(),this._focusSelectedOrFirst("minute")}));break;case"ArrowLeft":t.preventDefault(),r==="minute"&&(this._focusOptionAndSync(e,r),this.updateComplete.then(()=>{this._scrollToSelected(),this._focusSelectedOrFirst("hour")}));break;case"Enter":case" ":t.preventDefault(),e.click();break;case"Escape":t.preventDefault(),this._closePopup(),(p=this.buttonRef.value)==null||p.focus();break}}}get inputRef(){return this.hiddenInputRef}manageValidity(t){const e=this.hoursInputRef.value;if(!e)return;if(this.required&&!this.value){this.internals.setValidity({valueMissing:!0},a.strings.forms.messages.required,e),this._setAriaInvalid(!0);return}if(!this.value){this.internals.setValidity({}),this._setAriaInvalid(!1);return}const s=d(this.value),i=m(this.step);if(this.min&&s<d(String(this.min))){this.internals.setValidity({rangeUnderflow:!0},a.strings.forms.messages.rangeUnderflowMin.replace("{min}",String(this.min)),e),this._setAriaInvalid(!0);return}if(this.max&&s>d(String(this.max))){this.internals.setValidity({rangeOverflow:!0},a.strings.forms.messages.rangeOverflowMax.replace("{max}",String(this.max)),e),this._setAriaInvalid(!0);return}if(this.step&&s%i!==0){const n=i===60?a.strings.forms.messages.timeStepMismatchHour:i===30?a.strings.forms.messages.timeStepMismatchHalfHour:a.strings.forms.messages.timeStepMismatch.replace("{step}",`${i}, ${i*2}, ${i*3}`);this.internals.setValidity({stepMismatch:!0},n,e),this._setAriaInvalid(!0);return}this.internals.setValidity({}),this._setAriaInvalid(!1)}_setAriaInvalid(t){if(!this.touched&&t)return;const e=this.hoursInputRef.value,s=this.minutesInputRef.value;t?(e==null||e.setAttribute("aria-invalid","true"),s==null||s.setAttribute("aria-invalid","true")):(e==null||e.removeAttribute("aria-invalid"),s==null||s.removeAttribute("aria-invalid"))}connectedCallback(){super.connectedCallback(),this.addEventListener("focusin",this._handleComponentFocusIn),this.addEventListener("focusout",this._handleComponentFocusOut),document.addEventListener("click",this._outsideClickHandler)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("focusin",this._handleComponentFocusIn),this.removeEventListener("focusout",this._handleComponentFocusOut),document.removeEventListener("click",this._outsideClickHandler)}willUpdate(t){super.willUpdate(t),t.has("value")&&this._syncDisplayFromValue()}updated(t){super.updated(t),this.classList.toggle("pkt-timepicker--stepper",this.stepArrows),this.classList.toggle("pkt-timepicker--fullwidth",this.fullwidth),t.has("step")&&this.step!==null&&!this._isValidStep(this.step)&&console.warn(`pkt-timepicker: step="${this.step}" er ikke en gyldig verdi. Step må være et multiplum av 60 (hele minutter) eller nøyaktig 3600 (hel time).`)}formResetCallback(){super.formResetCallback(),this._hours="",this._minutes="",this._isOpen=!1}_isValidStep(t){return t===3600||t<3600&&3600%t===0&&t%60===0}_syncDisplayFromValue(){const t=D(this.value)?this.value.split(":"):null;t?(this._hours=t[0],this._minutes=t[1]):(this._hours="",this._minutes="")}_syncValueFromDisplay(){if(this._hours!==""&&this._minutes!==""){const t=`${this._hours}:${this._minutes}`;t!==this.value&&(this.value=t,this.onChange(t))}else this.value!==""&&(this.value="",this.onChange(""))}get _minuteStep(){return m(this.step)}get _hourOptions(){return w(this.min,this.max)}get _minuteOptions(){return x(this.step)}_openPopup(){this._isOpen=!0,this.updateComplete.then(()=>{this._scrollToSelected(),this._focusSelectedOrFirst("hour")})}_closePopup(){this._isOpen=!1,this._syncValueFromDisplay()}_togglePopup(){this._isOpen?this._closePopup():this._openPopup()}_scrollToSelected(){const t=this.querySelector(".pkt-timepicker-popup");t&&t.querySelectorAll(".pkt-timepicker-popup__col").forEach(e=>{const s=e.querySelector(".pkt-timepicker-popup__option--selected");s&&s.scrollIntoView({block:"center"})})}_focusSelectedOrFirst(t){var p;const e=this.querySelector(".pkt-timepicker-popup");if(!e)return;const s=e.querySelectorAll(".pkt-timepicker-popup__col"),i=t==="hour"?s[0]:s[1];if(!i)return;const n=i.querySelector(".pkt-timepicker-popup__option--selected"),r=i.querySelector(".pkt-timepicker-popup__option");(p=n||r)==null||p.focus()}_handleOptionClick(t,e){var i;const s=String(t).padStart(2,"0");e==="hour"?(this._hours=s,this.updateComplete.then(()=>this._focusSelectedOrFirst("minute"))):(this._minutes=s,this._closePopup(),(i=this.buttonRef.value)==null||i.focus())}_focusOptionAndSync(t,e){if(!t)return;const s=parseInt(t.dataset.value??"0",10);e==="hour"?this._hours=String(s).padStart(2,"0"):this._minutes=String(s).padStart(2,"0"),t.focus()}_stepTime(t){const e=I(this._hours,this._minutes,t,this._minuteStep);this._hours=e.hours,this._minutes=e.minutes,this._syncValueFromDisplay()}_renderOption(t,e){const s=String(t).padStart(2,"0"),i=e==="hour"?this._hours!==""?parseInt(this._hours,10):NaN:this._minutes!==""?parseInt(this._minutes,10):NaN,n=t===i;return a.b`
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./element-gR_VtSiD.cjs"),_=require("./state-Dg-53wQ8.cjs"),p=require("./ref-CL-Xk9Xm.cjs"),c=require("./if-defined-BOW3ODSj.cjs"),y=require("./class-map-CsENJXf1.cjs"),S=require("./input-element-DdVhUvva.cjs"),D=require("./element-with-slot-ZX-up7jO.cjs");require("./icon-Bqj9oBbl.cjs");require("./input-wrapper-B0MkQ0IZ.cjs");const w=o=>/^\d{2}:\d{2}$/.test(o)&&parseInt(o.slice(0,2),10)<=23&&parseInt(o.slice(3),10)<=59,d=o=>{const[t,e]=o.split(":").map(Number);return t*60+e},m=o=>o?Math.max(1,Math.round(o/60)):1,x=(o,t)=>{const e=o?parseInt(String(o).split(":")[0],10):0,s=t?parseInt(String(t).split(":")[0],10):23;return Array.from({length:s-e+1},(i,n)=>n+e)},I=o=>{const t=m(o);return Array.from({length:Math.floor(60/t)},(e,s)=>s*t)},A=(o,t,e,s)=>{let r=o!==""?parseInt(o,10):e===1?0:23,u=t!==""?parseInt(t,10):e===1?0:Math.floor(59/s)*s;return u+=e*s,u>59?(u=0,r=(r+1)%24):u<0&&(u=Math.floor(59/s)*s,r=(r-1+24)%24),{hours:String(r).padStart(2,"0"),minutes:String(u).padStart(2,"0")}};var F=Object.defineProperty,C=Object.getOwnPropertyDescriptor,l=(o,t,e,s)=>{for(var i=s>1?void 0:s?C(t,e):t,n=o.length-1,r;n>=0;n--)(r=o[n])&&(i=(s?r(t,e,i):r(i))||i);return s&&i&&F(t,e,i),i};exports.PktTimepicker=class extends S.PktInputElement{constructor(){super(...arguments),this.hiddenInputRef=p.e(),this.hoursInputRef=p.e(),this.minutesInputRef=p.e(),this.buttonRef=p.e(),this.value="",this.hidePicker=!1,this.stepArrows=!1,this._hours="",this._minutes="",this._isOpen=!1,this._hoursDigitCount=0,this._hoursFirstDigit=-1,this._minutesDigitCount=0,this._minutesFirstDigit=-1,this._hasFocus=!1,this._outsideClickHandler=t=>{this.contains(t.target)||this._closePopup()},this._handleComponentFocusIn=()=>{this._hasFocus||(this._hasFocus=!0,this.onFocus())},this._handleComponentFocusOut=t=>{this.contains(t.relatedTarget)||(this._hasFocus=!1,this.onBlur())},this._handleHoursKeydown=t=>{var s,i,n;const e=t.target;switch(t.key){case"ArrowUp":{t.preventDefault();const r=this._hours!==""?parseInt(this._hours,10):0;this._hours=String((r+1)%24).padStart(2,"0"),this._syncValueFromDisplay(),this.onInput();break}case"ArrowDown":{t.preventDefault();const r=this._hours!==""?parseInt(this._hours,10):0;this._hours=String((r-1+24)%24).padStart(2,"0"),this._syncValueFromDisplay(),this.onInput();break}case"ArrowRight":t.preventDefault(),(s=this.minutesInputRef.value)==null||s.focus();break;case"Backspace":case"Delete":this._hoursDigitCount=0,this._hoursFirstDigit=-1;break;case"Tab":break;case"Enter":{t.preventDefault();const r=this.internals.form;r?r.requestSubmit():e.blur();break}default:if(/^\d$/.test(t.key)){t.preventDefault();const r=parseInt(t.key,10);if(this._hoursDigitCount===0)this._hoursFirstDigit=r,this._hours=String(r).padStart(2,"0"),this._hoursDigitCount=1,this.onInput(),r>=3&&(this._hoursFirstDigit=-1,this._hoursDigitCount=0,this._syncValueFromDisplay(),(i=this.minutesInputRef.value)==null||i.focus());else{const u=this._hoursFirstDigit*10+r;this._hours=u<=23?String(u).padStart(2,"0"):String(r).padStart(2,"0"),this._hoursFirstDigit=-1,this._hoursDigitCount=0,this._syncValueFromDisplay(),this.onInput(),(n=this.minutesInputRef.value)==null||n.focus()}}else t.preventDefault()}},this._handleHoursBlur=()=>{this._hours!==""&&(this._hours=String(parseInt(this._hours,10)).padStart(2,"0")),this._hoursDigitCount=0,this._hoursFirstDigit=-1,this._syncValueFromDisplay()},this._handleMinutesKeydown=t=>{var s;const e=t.target;switch(t.key){case"ArrowUp":{t.preventDefault();const i=this._minutes!==""?parseInt(this._minutes,10):0;this._minutes=String((i+this._minuteStep)%60).padStart(2,"0"),this._syncValueFromDisplay(),this.onInput();break}case"ArrowDown":{t.preventDefault();const i=this._minutes!==""?parseInt(this._minutes,10):0;this._minutes=String((i-this._minuteStep+60)%60).padStart(2,"0"),this._syncValueFromDisplay(),this.onInput();break}case"ArrowLeft":t.preventDefault(),(s=this.hoursInputRef.value)==null||s.focus();break;case"Backspace":case"Delete":this._minutesDigitCount=0,this._minutesFirstDigit=-1;break;case"Tab":break;case"Enter":{t.preventDefault();const i=this.internals.form;i?i.requestSubmit():e.blur();break}default:if(/^\d$/.test(t.key)){t.preventDefault();const i=parseInt(t.key,10);if(this._minutesDigitCount===0)this._minutesFirstDigit=i,this._minutes=String(i).padStart(2,"0"),this._minutesDigitCount=1,this.onInput(),i>=6&&(this._minutesFirstDigit=-1,this._minutesDigitCount=0,this._syncValueFromDisplay());else{const n=this._minutesFirstDigit*10+i;this._minutes=n<=59?String(n).padStart(2,"0"):String(i).padStart(2,"0"),this._minutesFirstDigit=-1,this._minutesDigitCount=0,this._syncValueFromDisplay(),this.onInput()}}else t.preventDefault()}},this._handleMinutesBlur=()=>{this._minutes!==""&&(this._minutes=String(parseInt(this._minutes,10)).padStart(2,"0")),this._minutesDigitCount=0,this._minutesFirstDigit=-1,this._syncValueFromDisplay()},this._handlePopupKeydown=t=>{var u;const e=document.activeElement,s=e.closest(".pkt-timepicker-popup__col");if(!s)return;const i=Array.from(s.querySelectorAll(".pkt-timepicker-popup__option")),n=i.indexOf(e),r=e.dataset.type??"";switch(t.key){case"ArrowDown":t.preventDefault(),this._focusOptionAndSync(i[Math.min(n+1,i.length-1)],r);break;case"ArrowUp":t.preventDefault(),this._focusOptionAndSync(i[Math.max(n-1,0)],r);break;case"Home":t.preventDefault(),this._focusOptionAndSync(i[0],r);break;case"End":t.preventDefault(),this._focusOptionAndSync(i[i.length-1],r);break;case"ArrowRight":t.preventDefault(),r==="hour"&&(this._focusOptionAndSync(e,r),this.updateComplete.then(()=>{this._scrollToSelected(),this._focusSelectedOrFirst("minute")}));break;case"ArrowLeft":t.preventDefault(),r==="minute"&&(this._focusOptionAndSync(e,r),this.updateComplete.then(()=>{this._scrollToSelected(),this._focusSelectedOrFirst("hour")}));break;case"Enter":case" ":t.preventDefault(),e.click();break;case"Escape":t.preventDefault(),this._closePopup(),(u=this.buttonRef.value)==null||u.focus();break}}}get inputRef(){return this.hiddenInputRef}manageValidity(t){const e=this.hoursInputRef.value;if(!e)return;if(this.required&&!this.value){this.internals.setValidity({valueMissing:!0},a.strings.forms.messages.required,e),this._setAriaInvalid(!0);return}if(!this.value){this.internals.setValidity({}),this._setAriaInvalid(!1);return}const s=d(this.value),i=m(this.step);if(this.min&&s<d(String(this.min))){this.internals.setValidity({rangeUnderflow:!0},a.strings.forms.messages.rangeUnderflowMin.replace("{min}",String(this.min)),e),this._setAriaInvalid(!0);return}if(this.max&&s>d(String(this.max))){this.internals.setValidity({rangeOverflow:!0},a.strings.forms.messages.rangeOverflowMax.replace("{max}",String(this.max)),e),this._setAriaInvalid(!0);return}if(this.step&&s%i!==0){const n=i===60?a.strings.forms.messages.timeStepMismatchHour:i===30?a.strings.forms.messages.timeStepMismatchHalfHour:a.strings.forms.messages.timeStepMismatch.replace("{step}",`${i}, ${i*2}, ${i*3}`);this.internals.setValidity({stepMismatch:!0},n,e),this._setAriaInvalid(!0);return}this.internals.setValidity({}),this._setAriaInvalid(!1)}_setAriaInvalid(t){if(!this.touched&&t)return;const e=this.hoursInputRef.value,s=this.minutesInputRef.value;t?(e==null||e.setAttribute("aria-invalid","true"),s==null||s.setAttribute("aria-invalid","true")):(e==null||e.removeAttribute("aria-invalid"),s==null||s.removeAttribute("aria-invalid"))}connectedCallback(){super.connectedCallback(),this.addEventListener("focusin",this._handleComponentFocusIn),this.addEventListener("focusout",this._handleComponentFocusOut),document.addEventListener("click",this._outsideClickHandler)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("focusin",this._handleComponentFocusIn),this.removeEventListener("focusout",this._handleComponentFocusOut),document.removeEventListener("click",this._outsideClickHandler)}willUpdate(t){super.willUpdate(t),t.has("value")&&this._syncDisplayFromValue()}updated(t){super.updated(t),this.classList.toggle("pkt-timepicker--stepper",this.stepArrows),this.classList.toggle("pkt-timepicker--fullwidth",this.fullwidth),t.has("step")&&this.step!==null&&!this._isValidStep(this.step)&&console.warn(`pkt-timepicker: step="${this.step}" er ikke en gyldig verdi. Step må være et multiplum av 60 (hele minutter) eller nøyaktig 3600 (hel time).`)}formResetCallback(){super.formResetCallback(),this._hours="",this._minutes="",this._isOpen=!1}_isValidStep(t){return t===3600||t<3600&&3600%t===0&&t%60===0}_syncDisplayFromValue(){const t=w(this.value)?this.value.split(":"):null;t?(this._hours=t[0],this._minutes=t[1]):(this._hours="",this._minutes="")}_syncValueFromDisplay(){if(this._hours!==""&&this._minutes!==""){const t=`${this._hours}:${this._minutes}`;t!==this.value&&(this.value=t,this.onChange(t))}else this.value!==""&&(this.value="",this.onChange(""))}get _minuteStep(){return m(this.step)}get _hourOptions(){return x(this.min,this.max)}get _minuteOptions(){return I(this.step)}_openPopup(){this._isOpen=!0,this.updateComplete.then(()=>{this._scrollToSelected(),this._focusSelectedOrFirst("hour")})}_closePopup(){this._isOpen=!1,this._syncValueFromDisplay()}_togglePopup(){this._isOpen?this._closePopup():this._openPopup()}_scrollToSelected(){const t=this.querySelector(".pkt-timepicker-popup");t&&t.querySelectorAll(".pkt-timepicker-popup__col").forEach(e=>{const s=e.querySelector(".pkt-timepicker-popup__option--selected");s&&s.scrollIntoView({block:"center"})})}_focusSelectedOrFirst(t){var u;const e=this.querySelector(".pkt-timepicker-popup");if(!e)return;const s=e.querySelectorAll(".pkt-timepicker-popup__col"),i=t==="hour"?s[0]:s[1];if(!i)return;const n=i.querySelector(".pkt-timepicker-popup__option--selected"),r=i.querySelector(".pkt-timepicker-popup__option");(u=n||r)==null||u.focus()}_handleOptionClick(t,e){var i;const s=String(t).padStart(2,"0");e==="hour"?(this._hours=s,this.updateComplete.then(()=>this._focusSelectedOrFirst("minute"))):(this._minutes=s,this._closePopup(),(i=this.buttonRef.value)==null||i.focus())}_focusOptionAndSync(t,e){if(!t)return;const s=parseInt(t.dataset.value??"0",10);e==="hour"?this._hours=String(s).padStart(2,"0"):this._minutes=String(s).padStart(2,"0"),t.focus()}_stepTime(t){const e=A(this._hours,this._minutes,t,this._minuteStep);this._hours=e.hours,this._minutes=e.minutes,this._syncValueFromDisplay()}_renderOption(t,e){const s=String(t).padStart(2,"0"),i=e==="hour"?this._hours!==""?parseInt(this._hours,10):NaN:this._minutes!==""?parseInt(this._minutes,10):NaN,n=t===i;return a.b`
|
|
2
2
|
<button
|
|
3
|
-
class=${
|
|
3
|
+
class=${y.e({"pkt-btn":!0,"pkt-btn--tertiary":!0,"pkt-btn--small":!0,"pkt-btn--label-only":!0,"pkt-timepicker-popup__option":!0,"pkt-timepicker-popup__option--selected":n})}
|
|
4
4
|
type="button"
|
|
5
5
|
role="option"
|
|
6
6
|
aria-selected=${n?"true":"false"}
|
|
@@ -38,13 +38,16 @@
|
|
|
38
38
|
${this._minuteOptions.map(i=>this._renderOption(i,"minute"))}
|
|
39
39
|
</div>
|
|
40
40
|
</div>
|
|
41
|
-
`}_renderContainer(){var n,r,
|
|
42
|
-
<div
|
|
41
|
+
`}_renderContainer(){var n,r,u,k,f,g,b,v;const t=((n=this.strings.timepicker)==null?void 0:n.hours)??"Timer",e=((r=this.strings.timepicker)==null?void 0:r.minutes)??"Minutter",s=this.label?`${t}, ${this.label}`:t,i=this.label?`${e}, ${this.label}`:e;return a.b`
|
|
42
|
+
<div
|
|
43
|
+
class="pkt-input__container"
|
|
44
|
+
@click=${h=>{var $;h.target.closest("button, input")||($=this.hoursInputRef.value)==null||$.focus()}}
|
|
45
|
+
>
|
|
43
46
|
${this.stepArrows?a.b`
|
|
44
47
|
<button
|
|
45
48
|
class="pkt-input-icon pkt-btn pkt-btn--icon-only pkt-btn--tertiary pkt-timepicker__button pkt-timepicker__button--prev"
|
|
46
49
|
type="button"
|
|
47
|
-
aria-label=${((
|
|
50
|
+
aria-label=${((u=this.strings.timepicker)==null?void 0:u.prevTime)??"Forrige tidspunkt"}
|
|
48
51
|
?disabled=${this.disabled}
|
|
49
52
|
@click=${()=>this._stepTime(-1)}
|
|
50
53
|
>
|
|
@@ -55,7 +58,7 @@
|
|
|
55
58
|
</button>
|
|
56
59
|
`:a.A}
|
|
57
60
|
<input
|
|
58
|
-
${
|
|
61
|
+
${p.n(this.hoursInputRef)}
|
|
59
62
|
type="text"
|
|
60
63
|
inputmode="numeric"
|
|
61
64
|
maxlength="2"
|
|
@@ -77,11 +80,11 @@
|
|
|
77
80
|
?disabled=${this.disabled}
|
|
78
81
|
@keydown=${this._handleHoursKeydown}
|
|
79
82
|
@blur=${this._handleHoursBlur}
|
|
80
|
-
@focus=${
|
|
83
|
+
@focus=${h=>{h.target.select(),h.stopImmediatePropagation()}}
|
|
81
84
|
/>
|
|
82
85
|
<span class="pkt-timepicker__separator">:</span>
|
|
83
86
|
<input
|
|
84
|
-
${
|
|
87
|
+
${p.n(this.minutesInputRef)}
|
|
85
88
|
type="text"
|
|
86
89
|
inputmode="numeric"
|
|
87
90
|
maxlength="2"
|
|
@@ -103,7 +106,7 @@
|
|
|
103
106
|
?disabled=${this.disabled}
|
|
104
107
|
@keydown=${this._handleMinutesKeydown}
|
|
105
108
|
@blur=${this._handleMinutesBlur}
|
|
106
|
-
@focus=${
|
|
109
|
+
@focus=${h=>{h.target.select(),h.stopImmediatePropagation()}}
|
|
107
110
|
/>
|
|
108
111
|
${this.hidePicker&&!this.stepArrows?a.b`<pkt-icon
|
|
109
112
|
class="pkt-input-icon pkt-timepicker__icon"
|
|
@@ -112,7 +115,7 @@
|
|
|
112
115
|
></pkt-icon>`:a.A}
|
|
113
116
|
${!this.hidePicker&&!this.stepArrows?a.b`
|
|
114
117
|
<button
|
|
115
|
-
${
|
|
118
|
+
${p.n(this.buttonRef)}
|
|
116
119
|
class="pkt-input-icon pkt-btn pkt-btn--icon-only pkt-btn--tertiary pkt-timepicker__button"
|
|
117
120
|
type="button"
|
|
118
121
|
aria-label=${((f=this.strings.timepicker)==null?void 0:f.openPicker)??"Åpne tidspunkt-velger"}
|
|
@@ -143,7 +146,7 @@
|
|
|
143
146
|
</button>
|
|
144
147
|
`:a.A}
|
|
145
148
|
<input
|
|
146
|
-
${
|
|
149
|
+
${p.n(this.hiddenInputRef)}
|
|
147
150
|
type="time"
|
|
148
151
|
hidden
|
|
149
152
|
name=${this.name||this.id}
|
|
@@ -178,11 +181,11 @@
|
|
|
178
181
|
.requiredText=${this.requiredText}
|
|
179
182
|
.tagText=${this.tagText}
|
|
180
183
|
>
|
|
181
|
-
<div class="pkt-contents" slot="helptext">${
|
|
184
|
+
<div class="pkt-contents" slot="helptext">${D.slotContent(this,"helptext")}</div>
|
|
182
185
|
${!this.hidePicker&&!this.stepArrows?a.b`
|
|
183
186
|
<div class="pkt-timepicker__anchor">
|
|
184
187
|
${this._renderContainer()} ${this._renderPopup()}
|
|
185
188
|
</div>
|
|
186
189
|
`:this._renderContainer()}
|
|
187
190
|
</pkt-input-wrapper>
|
|
188
|
-
`}};
|
|
191
|
+
`}};l([a.n({type:String,reflect:!0})],exports.PktTimepicker.prototype,"value",2);l([a.n({type:Boolean,reflect:!0,attribute:"hide-picker"})],exports.PktTimepicker.prototype,"hidePicker",2);l([a.n({type:Boolean,reflect:!0,attribute:"step-arrows"})],exports.PktTimepicker.prototype,"stepArrows",2);l([_.r()],exports.PktTimepicker.prototype,"_hours",2);l([_.r()],exports.PktTimepicker.prototype,"_minutes",2);l([_.r()],exports.PktTimepicker.prototype,"_isOpen",2);exports.PktTimepicker=l([a.t("pkt-timepicker")],exports.PktTimepicker);
|
package/dist/pkt-timepicker.js
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { s as
|
|
1
|
+
import { s as d, b as u, A as o, n as b, t as x } from "./element-CPpT3rFQ.js";
|
|
2
2
|
import { r as v } from "./state-C_1EOo3D.js";
|
|
3
3
|
import { e as m, n as _ } from "./ref-Bg_Swj5w.js";
|
|
4
|
-
import { o as
|
|
5
|
-
import { e as
|
|
6
|
-
import { P as
|
|
7
|
-
import { s as
|
|
4
|
+
import { o as f } from "./if-defined-B0krMLad.js";
|
|
5
|
+
import { e as I } from "./class-map-CEnykyO_.js";
|
|
6
|
+
import { P as F } from "./input-element-8nLwuQS4.js";
|
|
7
|
+
import { s as A } from "./element-with-slot-Dqk6-TRR.js";
|
|
8
8
|
import "./icon-BlKA8YuW.js";
|
|
9
9
|
import "./input-wrapper-B2JpK016.js";
|
|
10
|
-
const
|
|
10
|
+
const C = (t) => /^\d{2}:\d{2}$/.test(t) && parseInt(t.slice(0, 2), 10) <= 23 && parseInt(t.slice(3), 10) <= 59, k = (t) => {
|
|
11
11
|
const [e, s] = t.split(":").map(Number);
|
|
12
12
|
return e * 60 + s;
|
|
13
|
-
}, g = (t) => t ? Math.max(1, Math.round(t / 60)) : 1,
|
|
13
|
+
}, g = (t) => t ? Math.max(1, Math.round(t / 60)) : 1, O = (t, e) => {
|
|
14
14
|
const s = t ? parseInt(String(t).split(":")[0], 10) : 0, i = e ? parseInt(String(e).split(":")[0], 10) : 23;
|
|
15
15
|
return Array.from({ length: i - s + 1 }, (n, r) => r + s);
|
|
16
|
-
},
|
|
16
|
+
}, T = (t) => {
|
|
17
17
|
const e = g(t);
|
|
18
18
|
return Array.from({ length: Math.floor(60 / e) }, (s, i) => i * e);
|
|
19
|
-
},
|
|
19
|
+
}, M = (t, e, s, i) => {
|
|
20
20
|
let a = t !== "" ? parseInt(t, 10) : s === 1 ? 0 : 23, p = e !== "" ? parseInt(e, 10) : s === 1 ? 0 : Math.floor(59 / i) * i;
|
|
21
21
|
return p += s * i, p > 59 ? (p = 0, a = (a + 1) % 24) : p < 0 && (p = Math.floor(59 / i) * i, a = (a - 1 + 24) % 24), {
|
|
22
22
|
hours: String(a).padStart(2, "0"),
|
|
23
23
|
minutes: String(p).padStart(2, "0")
|
|
24
24
|
};
|
|
25
25
|
};
|
|
26
|
-
var
|
|
27
|
-
for (var n = i > 1 ? void 0 : i ?
|
|
26
|
+
var V = Object.defineProperty, P = Object.getOwnPropertyDescriptor, c = (t, e, s, i) => {
|
|
27
|
+
for (var n = i > 1 ? void 0 : i ? P(e, s) : e, r = t.length - 1, a; r >= 0; r--)
|
|
28
28
|
(a = t[r]) && (n = (i ? a(e, s, n) : a(n)) || n);
|
|
29
|
-
return i && n &&
|
|
29
|
+
return i && n && V(e, s, n), n;
|
|
30
30
|
};
|
|
31
|
-
let h = class extends
|
|
31
|
+
let h = class extends F {
|
|
32
32
|
constructor() {
|
|
33
33
|
super(...arguments), this.hiddenInputRef = m(), this.hoursInputRef = m(), this.minutesInputRef = m(), this.buttonRef = m(), this.value = "", this.hidePicker = !1, this.stepArrows = !1, this._hours = "", this._minutes = "", this._isOpen = !1, this._hoursDigitCount = 0, this._hoursFirstDigit = -1, this._minutesDigitCount = 0, this._minutesFirstDigit = -1, this._hasFocus = !1, this._outsideClickHandler = (t) => {
|
|
34
34
|
this.contains(t.target) || this._closePopup();
|
|
@@ -185,32 +185,32 @@ let h = class extends I {
|
|
|
185
185
|
const e = this.hoursInputRef.value;
|
|
186
186
|
if (!e) return;
|
|
187
187
|
if (this.required && !this.value) {
|
|
188
|
-
this.internals.setValidity({ valueMissing: !0 },
|
|
188
|
+
this.internals.setValidity({ valueMissing: !0 }, d.forms.messages.required, e), this._setAriaInvalid(!0);
|
|
189
189
|
return;
|
|
190
190
|
}
|
|
191
191
|
if (!this.value) {
|
|
192
192
|
this.internals.setValidity({}), this._setAriaInvalid(!1);
|
|
193
193
|
return;
|
|
194
194
|
}
|
|
195
|
-
const s =
|
|
196
|
-
if (this.min && s <
|
|
195
|
+
const s = k(this.value), i = g(this.step);
|
|
196
|
+
if (this.min && s < k(String(this.min))) {
|
|
197
197
|
this.internals.setValidity(
|
|
198
198
|
{ rangeUnderflow: !0 },
|
|
199
|
-
|
|
199
|
+
d.forms.messages.rangeUnderflowMin.replace("{min}", String(this.min)),
|
|
200
200
|
e
|
|
201
201
|
), this._setAriaInvalid(!0);
|
|
202
202
|
return;
|
|
203
203
|
}
|
|
204
|
-
if (this.max && s >
|
|
204
|
+
if (this.max && s > k(String(this.max))) {
|
|
205
205
|
this.internals.setValidity(
|
|
206
206
|
{ rangeOverflow: !0 },
|
|
207
|
-
|
|
207
|
+
d.forms.messages.rangeOverflowMax.replace("{max}", String(this.max)),
|
|
208
208
|
e
|
|
209
209
|
), this._setAriaInvalid(!0);
|
|
210
210
|
return;
|
|
211
211
|
}
|
|
212
212
|
if (this.step && s % i !== 0) {
|
|
213
|
-
const n = i === 60 ?
|
|
213
|
+
const n = i === 60 ? d.forms.messages.timeStepMismatchHour : i === 30 ? d.forms.messages.timeStepMismatchHalfHour : d.forms.messages.timeStepMismatch.replace(
|
|
214
214
|
"{step}",
|
|
215
215
|
`${i}, ${i * 2}, ${i * 3}`
|
|
216
216
|
);
|
|
@@ -245,7 +245,7 @@ let h = class extends I {
|
|
|
245
245
|
return t === 3600 || t < 3600 && 3600 % t === 0 && t % 60 === 0;
|
|
246
246
|
}
|
|
247
247
|
_syncDisplayFromValue() {
|
|
248
|
-
const t =
|
|
248
|
+
const t = C(this.value) ? this.value.split(":") : null;
|
|
249
249
|
t ? (this._hours = t[0], this._minutes = t[1]) : (this._hours = "", this._minutes = "");
|
|
250
250
|
}
|
|
251
251
|
_syncValueFromDisplay() {
|
|
@@ -258,10 +258,10 @@ let h = class extends I {
|
|
|
258
258
|
return g(this.step);
|
|
259
259
|
}
|
|
260
260
|
get _hourOptions() {
|
|
261
|
-
return
|
|
261
|
+
return O(this.min, this.max);
|
|
262
262
|
}
|
|
263
263
|
get _minuteOptions() {
|
|
264
|
-
return
|
|
264
|
+
return T(this.step);
|
|
265
265
|
}
|
|
266
266
|
_openPopup() {
|
|
267
267
|
this._isOpen = !0, this.updateComplete.then(() => {
|
|
@@ -303,14 +303,14 @@ let h = class extends I {
|
|
|
303
303
|
e === "hour" ? this._hours = String(s).padStart(2, "0") : this._minutes = String(s).padStart(2, "0"), t.focus();
|
|
304
304
|
}
|
|
305
305
|
_stepTime(t) {
|
|
306
|
-
const e =
|
|
306
|
+
const e = M(this._hours, this._minutes, t, this._minuteStep);
|
|
307
307
|
this._hours = e.hours, this._minutes = e.minutes, this._syncValueFromDisplay();
|
|
308
308
|
}
|
|
309
309
|
_renderOption(t, e) {
|
|
310
310
|
const s = String(t).padStart(2, "0"), i = e === "hour" ? this._hours !== "" ? parseInt(this._hours, 10) : NaN : this._minutes !== "" ? parseInt(this._minutes, 10) : NaN, n = t === i;
|
|
311
311
|
return u`
|
|
312
312
|
<button
|
|
313
|
-
class=${
|
|
313
|
+
class=${I({
|
|
314
314
|
"pkt-btn": !0,
|
|
315
315
|
"pkt-btn--tertiary": !0,
|
|
316
316
|
"pkt-btn--small": !0,
|
|
@@ -370,7 +370,13 @@ let h = class extends I {
|
|
|
370
370
|
var n, r, a, p, $, y, S, D;
|
|
371
371
|
const t = ((n = this.strings.timepicker) == null ? void 0 : n.hours) ?? "Timer", e = ((r = this.strings.timepicker) == null ? void 0 : r.minutes) ?? "Minutter", s = this.label ? `${t}, ${this.label}` : t, i = this.label ? `${e}, ${this.label}` : e;
|
|
372
372
|
return u`
|
|
373
|
-
<div
|
|
373
|
+
<div
|
|
374
|
+
class="pkt-input__container"
|
|
375
|
+
@click=${(l) => {
|
|
376
|
+
var w;
|
|
377
|
+
l.target.closest("button, input") || (w = this.hoursInputRef.value) == null || w.focus();
|
|
378
|
+
}}
|
|
379
|
+
>
|
|
374
380
|
${this.stepArrows ? u`
|
|
375
381
|
<button
|
|
376
382
|
class="pkt-input-icon pkt-btn pkt-btn--icon-only pkt-btn--tertiary pkt-timepicker__button pkt-timepicker__button--prev"
|
|
@@ -408,8 +414,8 @@ let h = class extends I {
|
|
|
408
414
|
?disabled=${this.disabled}
|
|
409
415
|
@keydown=${this._handleHoursKeydown}
|
|
410
416
|
@blur=${this._handleHoursBlur}
|
|
411
|
-
@focus=${(
|
|
412
|
-
|
|
417
|
+
@focus=${(l) => {
|
|
418
|
+
l.target.select(), l.stopImmediatePropagation();
|
|
413
419
|
}}
|
|
414
420
|
/>
|
|
415
421
|
<span class="pkt-timepicker__separator">:</span>
|
|
@@ -436,8 +442,8 @@ let h = class extends I {
|
|
|
436
442
|
?disabled=${this.disabled}
|
|
437
443
|
@keydown=${this._handleMinutesKeydown}
|
|
438
444
|
@blur=${this._handleMinutesBlur}
|
|
439
|
-
@focus=${(
|
|
440
|
-
|
|
445
|
+
@focus=${(l) => {
|
|
446
|
+
l.target.select(), l.stopImmediatePropagation();
|
|
441
447
|
}}
|
|
442
448
|
/>
|
|
443
449
|
${this.hidePicker && !this.stepArrows ? u`<pkt-icon
|
|
@@ -484,9 +490,9 @@ let h = class extends I {
|
|
|
484
490
|
name=${this.name || this.id}
|
|
485
491
|
id=${this.id + "-input"}
|
|
486
492
|
.value=${this.value}
|
|
487
|
-
min=${
|
|
488
|
-
max=${
|
|
489
|
-
step=${
|
|
493
|
+
min=${f(this.min ?? void 0)}
|
|
494
|
+
max=${f(this.max ?? void 0)}
|
|
495
|
+
step=${f(this.step ?? void 0)}
|
|
490
496
|
?required=${this.required}
|
|
491
497
|
?disabled=${this.disabled}
|
|
492
498
|
tabindex="-1"
|
|
@@ -516,7 +522,7 @@ let h = class extends I {
|
|
|
516
522
|
.requiredText=${this.requiredText}
|
|
517
523
|
.tagText=${this.tagText}
|
|
518
524
|
>
|
|
519
|
-
<div class="pkt-contents" slot="helptext">${
|
|
525
|
+
<div class="pkt-contents" slot="helptext">${A(this, "helptext")}</div>
|
|
520
526
|
${!this.hidePicker && !this.stepArrows ? u`
|
|
521
527
|
<div class="pkt-timepicker__anchor">
|
|
522
528
|
${this._renderContainer()} ${this._renderPopup()}
|
|
@@ -526,26 +532,26 @@ let h = class extends I {
|
|
|
526
532
|
`;
|
|
527
533
|
}
|
|
528
534
|
};
|
|
529
|
-
|
|
535
|
+
c([
|
|
530
536
|
b({ type: String, reflect: !0 })
|
|
531
537
|
], h.prototype, "value", 2);
|
|
532
|
-
|
|
538
|
+
c([
|
|
533
539
|
b({ type: Boolean, reflect: !0, attribute: "hide-picker" })
|
|
534
540
|
], h.prototype, "hidePicker", 2);
|
|
535
|
-
|
|
541
|
+
c([
|
|
536
542
|
b({ type: Boolean, reflect: !0, attribute: "step-arrows" })
|
|
537
543
|
], h.prototype, "stepArrows", 2);
|
|
538
|
-
|
|
544
|
+
c([
|
|
539
545
|
v()
|
|
540
546
|
], h.prototype, "_hours", 2);
|
|
541
|
-
|
|
547
|
+
c([
|
|
542
548
|
v()
|
|
543
549
|
], h.prototype, "_minutes", 2);
|
|
544
|
-
|
|
550
|
+
c([
|
|
545
551
|
v()
|
|
546
552
|
], h.prototype, "_isOpen", 2);
|
|
547
|
-
h =
|
|
548
|
-
|
|
553
|
+
h = c([
|
|
554
|
+
x("pkt-timepicker")
|
|
549
555
|
], h);
|
|
550
556
|
export {
|
|
551
557
|
h as PktTimepicker
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oslokommune/punkt-elements",
|
|
3
|
-
"version": "16.7.
|
|
3
|
+
"version": "16.7.1",
|
|
4
4
|
"description": "Komponentbiblioteket til Punkt, et designsystem laget av Oslo Origo",
|
|
5
5
|
"homepage": "https://punkt.oslo.kommune.no",
|
|
6
6
|
"author": "Team Designsystem, Oslo Origo",
|
|
@@ -78,5 +78,5 @@
|
|
|
78
78
|
"url": "https://github.com/oslokommune/punkt/issues"
|
|
79
79
|
},
|
|
80
80
|
"license": "MIT",
|
|
81
|
-
"gitHead": "
|
|
81
|
+
"gitHead": "f03ecd48c2bc6097584f3a3f1d45848578bf524d"
|
|
82
82
|
}
|
|
@@ -612,7 +612,14 @@ export class PktTimepicker extends PktInputElement<Props> {
|
|
|
612
612
|
const hoursAriaLabel = this.label ? `${hoursLabel}, ${this.label}` : hoursLabel
|
|
613
613
|
const minutesAriaLabel = this.label ? `${minutesLabel}, ${this.label}` : minutesLabel
|
|
614
614
|
return html`
|
|
615
|
-
<div
|
|
615
|
+
<div
|
|
616
|
+
class="pkt-input__container"
|
|
617
|
+
@click=${(e: Event) => {
|
|
618
|
+
const target = e.target as HTMLElement
|
|
619
|
+
if (target.closest('button, input')) return
|
|
620
|
+
this.hoursInputRef.value?.focus()
|
|
621
|
+
}}
|
|
622
|
+
>
|
|
616
623
|
${this.stepArrows
|
|
617
624
|
? html`
|
|
618
625
|
<button
|