@oslokommune/punkt-elements 18.9.3 → 18.9.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.
Files changed (179) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/{accordion-CsrLQXEA.cjs → accordion-BLMbI8SQ.cjs} +1 -1
  3. package/dist/{accordion-DoxhiwK-.js → accordion-Bwka5Mxo.js} +5 -5
  4. package/dist/{alert-DH3VqNqh.cjs → alert-Cfr6t5uz.cjs} +1 -1
  5. package/dist/{alert-DxAGxSX_.js → alert-DaXpwnzT.js} +6 -6
  6. package/dist/{async-directive-BSwJ8-GL.js → async-directive-C8UAk8Mv.js} +2 -2
  7. package/dist/{async-directive-CfPXShXu.cjs → async-directive-U0EE5r36.cjs} +1 -1
  8. package/dist/{backlink-CGc7r9CS.js → backlink-BjJwDjuP.js} +3 -3
  9. package/dist/{backlink-CDH824db.cjs → backlink-DM220m4q.cjs} +1 -1
  10. package/dist/{breadcrumbs-DRGhIXmN.js → breadcrumbs-B1pDtQy8.js} +2 -2
  11. package/dist/{breadcrumbs-B37tsIoh.cjs → breadcrumbs-BUmbj-hP.cjs} +1 -1
  12. package/dist/{button-D6QhHPWH.js → button-BUl8uWWh.js} +5 -5
  13. package/dist/{button-Cx6Xdp6t.cjs → button-CCR4eyt_.cjs} +1 -1
  14. package/dist/{calendar-CAwIY7x_.cjs → calendar-BuSfyUR9.cjs} +1 -1
  15. package/dist/{calendar-42o_q-jI.js → calendar-KUQ1dFeX.js} +3 -3
  16. package/dist/{card-cyZE94EO.js → card-27RxxKxW.js} +6 -6
  17. package/dist/{card-CB72gwBC.cjs → card-B-RKnu_C.cjs} +1 -1
  18. package/dist/{checkbox-BhyUp6l6.js → checkbox-CTf4GatI.js} +4 -4
  19. package/dist/{checkbox-DJfH-vTj.cjs → checkbox-DlzVGBum.cjs} +1 -1
  20. package/dist/{class-map-DupQbnhE.cjs → class-map-B0FX3YsK.cjs} +1 -1
  21. package/dist/{class-map-DSoj1J68.js → class-map-D5GHsely.js} +1 -1
  22. package/dist/combobox-CNCM-Psm.cjs +139 -0
  23. package/dist/{combobox-fzSaCPok.js → combobox-Dym_phvv.js} +67 -58
  24. package/dist/components/combobox/combobox.d.ts +1 -0
  25. package/dist/components/header/header-service.d.ts +1 -1
  26. package/dist/components/header/types.d.ts +1 -1
  27. package/dist/components/helptext/helptext-association.test.d.ts +0 -0
  28. package/dist/components/timepicker/timepicker.d.ts +1 -0
  29. package/dist/{consent-CsgKWDsR.js → consent-BeoP4rOa.js} +2 -2
  30. package/dist/{consent-DnE6IPEj.cjs → consent-Cle1hkPg.cjs} +1 -1
  31. package/dist/{datepicker-D6os8IVu.cjs → datepicker-BtEZMsWH.cjs} +1 -1
  32. package/dist/{datepicker-DMiZ3BBw.js → datepicker-Ct4dbs4e.js} +11 -11
  33. package/dist/{directive-helpers-2mcpDDv5.cjs → directive-helpers-BushnrQQ.cjs} +1 -1
  34. package/dist/{directive-helpers-ChEduoup.js → directive-helpers-DpyLJPJm.js} +1 -1
  35. package/dist/{element-D_mCyFeX.cjs → element-CewjrA4g.cjs} +1 -1
  36. package/dist/{element-J8nynuVk.js → element-CqC-sGuC.js} +11 -1
  37. package/dist/{element-with-slot-BOuXlWSY.js → element-with-slot-D_OKDlYo.js} +2 -2
  38. package/dist/{element-with-slot-C66Jck5e.cjs → element-with-slot-MCvSBwUv.cjs} +1 -1
  39. package/dist/{fileupload-Y4bDkaD9.cjs → fileupload-BVAgrofy.cjs} +3 -3
  40. package/dist/{fileupload-C5lxuood.js → fileupload-Dqf_94m2.js} +11 -11
  41. package/dist/{footer-ByAxlj9_.js → footer-Bf6RFuia.js} +4 -4
  42. package/dist/{footer-Ca3DM544.cjs → footer-XrX6LFHY.cjs} +1 -1
  43. package/dist/{header-CP332MCg.cjs → header-DMMt5FtF.cjs} +64 -50
  44. package/dist/{header-CCJeadiL.js → header-fkKhLsyE.js} +182 -167
  45. package/dist/{header-menu-CIuu8_UC.js → header-menu-CUHrJCvx.js} +4 -4
  46. package/dist/{header-menu-B9ABa0WW.cjs → header-menu-DYZsigfH.cjs} +1 -1
  47. package/dist/{heading-4ZHACOeL.cjs → heading-BDdX4JiM.cjs} +1 -1
  48. package/dist/{heading-BHWdVbvN.js → heading-ELXWxyTv.js} +2 -2
  49. package/dist/{helptext-BESB9Vlq.js → helptext-BQkrYsoV.js} +4 -4
  50. package/dist/{helptext-6HsH-I6a.cjs → helptext-DQe6GO75.cjs} +1 -1
  51. package/dist/{icon-DkVqRWbC.js → icon-B2v30QUk.js} +1 -1
  52. package/dist/{icon-BzxBkRyE.cjs → icon-Clz68-Kz.cjs} +1 -1
  53. package/dist/{if-defined-BILLSM7i.js → if-defined-BNXGXCwT.js} +1 -1
  54. package/dist/if-defined-CjRKmMQs.cjs +1 -0
  55. package/dist/{input-element-BWxgs8L-.js → input-element-BTzuDh4h.js} +2 -2
  56. package/dist/{input-element-PN5nWd1A.cjs → input-element-BdIWsDl-.cjs} +1 -1
  57. package/dist/{input-wrapper-D64Qn-QH.cjs → input-wrapper-BIrQijWT.cjs} +1 -1
  58. package/dist/{input-wrapper-Bg06k-cj.js → input-wrapper-CvFMiqIt.js} +6 -6
  59. package/dist/{link-Bk7aDZCC.cjs → link-1JEWpEDG.cjs} +1 -1
  60. package/dist/{link-C7fOEv66.js → link-BxKWhYsn.js} +4 -4
  61. package/dist/{linkcard-Bguo9oCv.js → linkcard-CICSZ7pK.js} +4 -4
  62. package/dist/{linkcard-rZpQuO1Z.cjs → linkcard-DXOkeQUy.cjs} +1 -1
  63. package/dist/{listbox-CrQboPG6.js → listbox-DcCrI15L.js} +4 -4
  64. package/dist/{listbox-kV4OO1Qa.cjs → listbox-DsYaWvLu.cjs} +1 -1
  65. package/dist/{loader-BAn68gBb.cjs → loader-BA__N62k.cjs} +1 -1
  66. package/dist/{loader-C3gwO0i3.js → loader-nIl61aTv.js} +4 -4
  67. package/dist/{messagebox-WH2HjT5I.cjs → messagebox-CdNMgTz4.cjs} +1 -1
  68. package/dist/{messagebox-DAE59dMX.js → messagebox-D0qxveug.js} +4 -4
  69. package/dist/{modal-DdC1_qT3.js → modal-D5tGq-nN.js} +5 -5
  70. package/dist/{modal-DZm_fn3K.cjs → modal-i3Qxv38H.cjs} +1 -1
  71. package/dist/pkt-accordion.cjs +1 -1
  72. package/dist/pkt-accordion.js +1 -1
  73. package/dist/pkt-alert.cjs +1 -1
  74. package/dist/pkt-alert.js +1 -1
  75. package/dist/pkt-backlink.cjs +1 -1
  76. package/dist/pkt-backlink.js +1 -1
  77. package/dist/pkt-breadcrumbs.cjs +1 -1
  78. package/dist/pkt-breadcrumbs.js +1 -1
  79. package/dist/pkt-button.cjs +1 -1
  80. package/dist/pkt-button.js +1 -1
  81. package/dist/pkt-calendar.cjs +1 -1
  82. package/dist/pkt-calendar.js +1 -1
  83. package/dist/pkt-card.cjs +1 -1
  84. package/dist/pkt-card.js +1 -1
  85. package/dist/pkt-checkbox.cjs +1 -1
  86. package/dist/pkt-checkbox.js +1 -1
  87. package/dist/pkt-combobox.cjs +1 -1
  88. package/dist/pkt-combobox.js +1 -1
  89. package/dist/pkt-consent.cjs +1 -1
  90. package/dist/pkt-consent.js +1 -1
  91. package/dist/pkt-datepicker.cjs +1 -1
  92. package/dist/pkt-datepicker.js +1 -1
  93. package/dist/pkt-fileupload.cjs +1 -1
  94. package/dist/pkt-fileupload.js +1 -1
  95. package/dist/pkt-footer.cjs +1 -1
  96. package/dist/pkt-footer.js +1 -1
  97. package/dist/pkt-header-menu.cjs +1 -1
  98. package/dist/pkt-header-menu.js +1 -1
  99. package/dist/pkt-header.cjs +1 -1
  100. package/dist/pkt-header.js +1 -1
  101. package/dist/pkt-heading.cjs +1 -1
  102. package/dist/pkt-heading.js +1 -1
  103. package/dist/pkt-helptext.cjs +1 -1
  104. package/dist/pkt-helptext.js +1 -1
  105. package/dist/pkt-icon.cjs +1 -1
  106. package/dist/pkt-icon.js +1 -1
  107. package/dist/pkt-index.cjs +1 -1
  108. package/dist/pkt-index.js +34 -34
  109. package/dist/pkt-input-wrapper.cjs +1 -1
  110. package/dist/pkt-input-wrapper.js +1 -1
  111. package/dist/pkt-link.cjs +1 -1
  112. package/dist/pkt-link.js +1 -1
  113. package/dist/pkt-linkcard.cjs +1 -1
  114. package/dist/pkt-linkcard.js +1 -1
  115. package/dist/pkt-listbox.cjs +1 -1
  116. package/dist/pkt-listbox.js +1 -1
  117. package/dist/pkt-loader.cjs +1 -1
  118. package/dist/pkt-loader.js +1 -1
  119. package/dist/pkt-messagebox.cjs +1 -1
  120. package/dist/pkt-messagebox.js +1 -1
  121. package/dist/pkt-modal.cjs +1 -1
  122. package/dist/pkt-modal.js +1 -1
  123. package/dist/{pkt-options-controller-DXAAVcBJ.cjs → pkt-options-controller-BClk341e.cjs} +1 -1
  124. package/dist/{pkt-options-controller-XcIgx_v1.js → pkt-options-controller-v2bPM9iU.js} +1 -1
  125. package/dist/pkt-progressbar.cjs +1 -1
  126. package/dist/pkt-progressbar.js +1 -1
  127. package/dist/pkt-radiobutton.cjs +1 -1
  128. package/dist/pkt-radiobutton.js +1 -1
  129. package/dist/pkt-searchinput.cjs +1 -1
  130. package/dist/pkt-searchinput.js +1 -1
  131. package/dist/pkt-select.cjs +1 -1
  132. package/dist/pkt-select.js +1 -1
  133. package/dist/pkt-tabs.cjs +1 -1
  134. package/dist/pkt-tabs.js +1 -1
  135. package/dist/pkt-tag.cjs +1 -1
  136. package/dist/pkt-tag.js +1 -1
  137. package/dist/pkt-textarea.cjs +1 -1
  138. package/dist/pkt-textarea.js +1 -1
  139. package/dist/pkt-textinput.cjs +1 -1
  140. package/dist/pkt-textinput.js +1 -1
  141. package/dist/pkt-timepicker.cjs +1 -1
  142. package/dist/pkt-timepicker.js +1 -1
  143. package/dist/{progressbar-D1x6MwdY.js → progressbar-4WyR4T72.js} +5 -5
  144. package/dist/{progressbar-DsE4-qaW.cjs → progressbar-CJFGbev-.cjs} +1 -1
  145. package/dist/{radiobutton-CnGhAnjp.cjs → radiobutton-BQRtv7PK.cjs} +1 -1
  146. package/dist/{radiobutton-DWdn1O48.js → radiobutton-D7308uCY.js} +4 -4
  147. package/dist/{ref-DNowxdYH.js → ref-37-yxmc4.js} +2 -2
  148. package/dist/{ref-AuNEkS5a.cjs → ref-HT6KRjxp.cjs} +1 -1
  149. package/dist/{repeat-B3ksuY2F.cjs → repeat-Ddge5HTp.cjs} +1 -1
  150. package/dist/{repeat-CZ1oMXnW.js → repeat-DntD73oB.js} +2 -2
  151. package/dist/{searchinput-vi7twt5b.cjs → searchinput-D1cJ73Ki.cjs} +1 -1
  152. package/dist/{searchinput-CmyWnNr6.js → searchinput-j4IvYRzj.js} +4 -4
  153. package/dist/{select-CM-CcWab.js → select-B4gbFOil.js} +7 -7
  154. package/dist/{select-D761TXmv.cjs → select-oIF7UVvV.cjs} +1 -1
  155. package/dist/shared-strings/nb.d.ts +10 -0
  156. package/dist/{tabs-hiTrWsXq.cjs → tabs-95BpwB6j.cjs} +1 -1
  157. package/dist/{tabs-kxsX1ZEf.js → tabs-DexV26qJ.js} +4 -4
  158. package/dist/{tag-CGlxtBOH.cjs → tag-CQEyjF32.cjs} +1 -1
  159. package/dist/{tag-bztxjcF0.js → tag-DoUC99hn.js} +5 -5
  160. package/dist/{textarea-D3SeDZ1r.js → textarea-DGSMKcqK.js} +9 -9
  161. package/dist/{textarea-4s_SiG0_.cjs → textarea-DNFX958g.cjs} +1 -1
  162. package/dist/{textinput-uDRbleIa.cjs → textinput-Bzkdo2mN.cjs} +1 -1
  163. package/dist/{textinput-Dje0Zcsa.js → textinput-DpLeElI_.js} +8 -8
  164. package/dist/{timepicker--CrfIU_7.js → timepicker-CCNQeX5Q.js} +36 -27
  165. package/dist/timepicker-DCzhlRuc.cjs +198 -0
  166. package/package.json +2 -2
  167. package/src/components/combobox/combobox.ts +12 -0
  168. package/src/components/fileupload/fileupload.ts +1 -3
  169. package/src/components/header/header-global.test.ts +8 -0
  170. package/src/components/header/header-global.ts +13 -2
  171. package/src/components/header/header-service.test.ts +54 -0
  172. package/src/components/header/header-service.ts +20 -7
  173. package/src/components/header/header-user-menu.ts +10 -8
  174. package/src/components/header/types.ts +3 -2
  175. package/src/components/helptext/helptext-association.test.ts +108 -0
  176. package/src/components/timepicker/timepicker.ts +11 -0
  177. package/dist/combobox-B9Qo7hbt.cjs +0 -137
  178. package/dist/if-defined-BbUZeoaQ.cjs +0 -1
  179. package/dist/timepicker-auQ5Y6Et.cjs +0 -196
@@ -1,4 +1,4 @@
1
- const e=require("./element-D_mCyFeX.cjs"),t=require("./if-defined-BbUZeoaQ.cjs"),n=require("./element-with-slot-C66Jck5e.cjs"),r=require("./consume-Le4HztPo.cjs"),i=require("./ref-AuNEkS5a.cjs");var a=r.r(Symbol(`pkt-tabs-context`)),o=class extends n.t{constructor(...e){super(...e),this.arrowNav=!0,this.disableArrowNav=!1,this.separatorIconName=``,this.separatorIconPath=``,this.tabRefs=[],this.disabledMap={},this.tabCount=0,this.context={useArrowNav:this.useArrowNav,registerTab:this.registerTab.bind(this),handleClick:this.handleClick.bind(this),handleKeyUp:this.handleKeyUp.bind(this)}}get useArrowNav(){return this.arrowNav&&!this.disableArrowNav}willUpdate(e){(e.has(`arrowNav`)||e.has(`disableArrowNav`))&&(this.context={...this.context,useArrowNav:this.useArrowNav})}updated(){this.updateComplete.then(()=>this.syncSeparators())}syncSeparators(){let e=this.querySelector(`.pkt-tabs__list`);if(!e||(e.querySelectorAll(`.pkt-tabs__separator`).forEach(e=>e.remove()),!(this.separatorIconName||this.separatorIconPath)))return;let t=Array.from(e.children).filter(e=>!e.classList.contains(`pkt-tabs__separator`));for(let e=0;e<t.length-1;e++){let n=document.createElement(`span`);if(n.className=`pkt-tabs__separator`,n.setAttribute(`aria-hidden`,`true`),n.setAttribute(`role`,`presentation`),this.separatorIconPath){let e=document.createElement(`img`);e.setAttribute(`src`,this.separatorIconPath),e.setAttribute(`alt`,``),e.setAttribute(`aria-hidden`,`true`),n.appendChild(e)}else if(this.separatorIconName){let e=document.createElement(`pkt-icon`);e.setAttribute(`name`,this.separatorIconName),e.classList.add(`pkt-tabs__separator-icon`),n.appendChild(e)}t[e].after(n)}}registerTab(e,t,n=!1){this.tabRefs[t]=e,this.disabledMap[t]=n,this.tabCount=Math.max(this.tabCount,t+1)}isTabDisabled(e){return!!this.disabledMap[e]}findEnabledIndex(e,t){let n=e+t;for(;n>=0&&n<this.tabCount;){if(!this.isTabDisabled(n))return n;n+=t}return null}handleClick(e){this.isTabDisabled(e)||this.dispatchEvent(new CustomEvent(`tab-selected`,{detail:{index:e},bubbles:!0,composed:!0}))}handleKeyUp(e,t){if(this.useArrowNav){if(e.key===`ArrowLeft`){e.preventDefault();let n=this.findEnabledIndex(t,-1);n!==null&&this.tabRefs[n]?.focus()}if(e.key===`ArrowRight`){e.preventDefault();let n=this.findEnabledIndex(t,1);n!==null&&this.tabRefs[n]?.focus()}(e.key===`Enter`||e.key===` `||e.key===`Spacebar`||e.key===`ArrowDown`)&&(e.preventDefault(),this.handleClick(t))}}render(){let t=this.useArrowNav?`tablist`:`navigation`,r=this.separatorIconName||this.separatorIconPath?`pkt-tabs pkt-tabs--with-separator`:`pkt-tabs`;return e._`
1
+ const e=require("./element-CewjrA4g.cjs"),t=require("./if-defined-CjRKmMQs.cjs"),n=require("./element-with-slot-MCvSBwUv.cjs"),r=require("./consume-Le4HztPo.cjs"),i=require("./ref-HT6KRjxp.cjs");var a=r.r(Symbol(`pkt-tabs-context`)),o=class extends n.t{constructor(...e){super(...e),this.arrowNav=!0,this.disableArrowNav=!1,this.separatorIconName=``,this.separatorIconPath=``,this.tabRefs=[],this.disabledMap={},this.tabCount=0,this.context={useArrowNav:this.useArrowNav,registerTab:this.registerTab.bind(this),handleClick:this.handleClick.bind(this),handleKeyUp:this.handleKeyUp.bind(this)}}get useArrowNav(){return this.arrowNav&&!this.disableArrowNav}willUpdate(e){(e.has(`arrowNav`)||e.has(`disableArrowNav`))&&(this.context={...this.context,useArrowNav:this.useArrowNav})}updated(){this.updateComplete.then(()=>this.syncSeparators())}syncSeparators(){let e=this.querySelector(`.pkt-tabs__list`);if(!e||(e.querySelectorAll(`.pkt-tabs__separator`).forEach(e=>e.remove()),!(this.separatorIconName||this.separatorIconPath)))return;let t=Array.from(e.children).filter(e=>!e.classList.contains(`pkt-tabs__separator`));for(let e=0;e<t.length-1;e++){let n=document.createElement(`span`);if(n.className=`pkt-tabs__separator`,n.setAttribute(`aria-hidden`,`true`),n.setAttribute(`role`,`presentation`),this.separatorIconPath){let e=document.createElement(`img`);e.setAttribute(`src`,this.separatorIconPath),e.setAttribute(`alt`,``),e.setAttribute(`aria-hidden`,`true`),n.appendChild(e)}else if(this.separatorIconName){let e=document.createElement(`pkt-icon`);e.setAttribute(`name`,this.separatorIconName),e.classList.add(`pkt-tabs__separator-icon`),n.appendChild(e)}t[e].after(n)}}registerTab(e,t,n=!1){this.tabRefs[t]=e,this.disabledMap[t]=n,this.tabCount=Math.max(this.tabCount,t+1)}isTabDisabled(e){return!!this.disabledMap[e]}findEnabledIndex(e,t){let n=e+t;for(;n>=0&&n<this.tabCount;){if(!this.isTabDisabled(n))return n;n+=t}return null}handleClick(e){this.isTabDisabled(e)||this.dispatchEvent(new CustomEvent(`tab-selected`,{detail:{index:e},bubbles:!0,composed:!0}))}handleKeyUp(e,t){if(this.useArrowNav){if(e.key===`ArrowLeft`){e.preventDefault();let n=this.findEnabledIndex(t,-1);n!==null&&this.tabRefs[n]?.focus()}if(e.key===`ArrowRight`){e.preventDefault();let n=this.findEnabledIndex(t,1);n!==null&&this.tabRefs[n]?.focus()}(e.key===`Enter`||e.key===` `||e.key===`Spacebar`||e.key===`ArrowDown`)&&(e.preventDefault(),this.handleClick(t))}}render(){let t=this.useArrowNav?`tablist`:`navigation`,r=this.separatorIconName||this.separatorIconPath?`pkt-tabs pkt-tabs--with-separator`:`pkt-tabs`;return e._`
2
2
  <div class=${r}>
3
3
  <div class="pkt-tabs__list" role=${t}>${n.r(this)}</div>
4
4
  </div>
@@ -1,8 +1,8 @@
1
- import { _ as e, d as t, l as n, n as r, u as i } from "./element-J8nynuVk.js";
2
- import { t as a } from "./if-defined-BILLSM7i.js";
3
- import { r as o, t as s } from "./element-with-slot-BOuXlWSY.js";
1
+ import { _ as e, d as t, l as n, n as r, u as i } from "./element-CqC-sGuC.js";
2
+ import { t as a } from "./if-defined-BNXGXCwT.js";
3
+ import { r as o, t as s } from "./element-with-slot-D_OKDlYo.js";
4
4
  import { n as c, r as l, t as u } from "./consume-BDnMAp2g.js";
5
- import { n as d, t as f } from "./ref-DNowxdYH.js";
5
+ import { n as d, t as f } from "./ref-37-yxmc4.js";
6
6
  //#region src/components/tabs/tabs-context.ts
7
7
  var p = l(Symbol("pkt-tabs-context")), m = class extends s {
8
8
  constructor(...e) {
@@ -1,4 +1,4 @@
1
- const e=require("./element-D_mCyFeX.cjs"),t=require("./class-map-DupQbnhE.cjs"),n=require("./if-defined-BbUZeoaQ.cjs"),r=require("./format-B8meU8Tm.cjs"),i=require("./element-with-slot-C66Jck5e.cjs");require("./icon-BzxBkRyE.cjs");var a={name:`pkt-tag`,react:`PktTag`,"css-class":`pkt-tag`,isElement:!0,"dark-mode":!0,props:{size:{name:`Størrelse`,description:`Størrelsen på taggen`,required:!1,default:`medium`,type:[`small`,`medium`,`large`],category:`ui`},iconName:{name:`Ikon`,description:`Navnet på ikonet som skal vises i taggen`,type:`icon`,required:!1,category:`ui`},skin:{name:`Utseende`,description:`Utseendet til taggen`,required:!1,default:`blue`,type:[`blue`,`blue-light`,`blue-dark`,`green`,`red`,`beige`,`yellow`,`gray`],category:`ui`},closeTag:{name:`Lukk tag`,description:`Skal taggen ha en lukkeknapp?`,type:`boolean`,required:!1,default:!1,category:`ui`},textStyle:{name:`Tekststil`,description:`Stilen på teksten i taggen`,required:!1,default:`normal-text`,type:[`thin-text`,`normal-text`],category:`ui`},type:{name:`Type, dersom lukkeknapp`,description:`Type tag, brukes for å spesifisere om det er en knapp, submit eller reset`,required:!1,default:`button`,type:[`button`,`submit`,`reset`],category:`tech`},ariaLabel:{name:`aria-label`,description:`aria-label for taggen, brukes for tilgjengelighet`,type:`string`,required:!1,category:`accessibility`}},slots:{default:{description:`Teksten til tag`}}},o=class extends i.t{constructor(){super(),this.closeTag=a.props.closeTag.default,this.size=a.props.size.default,this.skin=a.props.skin.default,this.textStyle=null,this.iconName=void 0,this.type=a.props.type.default,this.ariaLabel=null,this.buttonTabindex=void 0,this._isClosed=!1,this._ariaDescription=null,this.close=e=>{this._isClosed=!0,this.dispatchEvent(new CustomEvent(`close`,{detail:{origin:e},bubbles:!1,composed:!0})),this.dispatchEvent(new CustomEvent(`on-close`,{detail:{origin:e},bubbles:!1,composed:!0}))},this._isClosed=!1}willUpdate(e){if(super.willUpdate(e),this.closeTag&&!this.ariaLabel){let e=i.n(this).getNodes().map(e=>e.textContent??``).join(``).trim();e&&(this._ariaDescription=r.t(this.pktStrings.get(`tag`).remove,{label:e}))}}render(){let r={"pkt-tag":!0,[`pkt-tag--${this.size}`]:!!this.size,[`pkt-tag--${this.skin}`]:!!this.skin,[`pkt-tag--${this.textStyle}`]:!!this.textStyle},a={"pkt-tag":!0,[`pkt-tag--${this.textStyle}`]:!!this.textStyle,[`pkt-tag--${this.size}`]:!!this.size,[`pkt-tag--${this.skin}`]:!!this.skin,"pkt-hide":this._isClosed};return this.closeTag?e._`
1
+ const e=require("./element-CewjrA4g.cjs"),t=require("./class-map-B0FX3YsK.cjs"),n=require("./if-defined-CjRKmMQs.cjs"),r=require("./format-B8meU8Tm.cjs"),i=require("./element-with-slot-MCvSBwUv.cjs");require("./icon-Clz68-Kz.cjs");var a={name:`pkt-tag`,react:`PktTag`,"css-class":`pkt-tag`,isElement:!0,"dark-mode":!0,props:{size:{name:`Størrelse`,description:`Størrelsen på taggen`,required:!1,default:`medium`,type:[`small`,`medium`,`large`],category:`ui`},iconName:{name:`Ikon`,description:`Navnet på ikonet som skal vises i taggen`,type:`icon`,required:!1,category:`ui`},skin:{name:`Utseende`,description:`Utseendet til taggen`,required:!1,default:`blue`,type:[`blue`,`blue-light`,`blue-dark`,`green`,`red`,`beige`,`yellow`,`gray`],category:`ui`},closeTag:{name:`Lukk tag`,description:`Skal taggen ha en lukkeknapp?`,type:`boolean`,required:!1,default:!1,category:`ui`},textStyle:{name:`Tekststil`,description:`Stilen på teksten i taggen`,required:!1,default:`normal-text`,type:[`thin-text`,`normal-text`],category:`ui`},type:{name:`Type, dersom lukkeknapp`,description:`Type tag, brukes for å spesifisere om det er en knapp, submit eller reset`,required:!1,default:`button`,type:[`button`,`submit`,`reset`],category:`tech`},ariaLabel:{name:`aria-label`,description:`aria-label for taggen, brukes for tilgjengelighet`,type:`string`,required:!1,category:`accessibility`}},slots:{default:{description:`Teksten til tag`}}},o=class extends i.t{constructor(){super(),this.closeTag=a.props.closeTag.default,this.size=a.props.size.default,this.skin=a.props.skin.default,this.textStyle=null,this.iconName=void 0,this.type=a.props.type.default,this.ariaLabel=null,this.buttonTabindex=void 0,this._isClosed=!1,this._ariaDescription=null,this.close=e=>{this._isClosed=!0,this.dispatchEvent(new CustomEvent(`close`,{detail:{origin:e},bubbles:!1,composed:!0})),this.dispatchEvent(new CustomEvent(`on-close`,{detail:{origin:e},bubbles:!1,composed:!0}))},this._isClosed=!1}willUpdate(e){if(super.willUpdate(e),this.closeTag&&!this.ariaLabel){let e=i.n(this).getNodes().map(e=>e.textContent??``).join(``).trim();e&&(this._ariaDescription=r.t(this.pktStrings.get(`tag`).remove,{label:e}))}}render(){let r={"pkt-tag":!0,[`pkt-tag--${this.size}`]:!!this.size,[`pkt-tag--${this.skin}`]:!!this.skin,[`pkt-tag--${this.textStyle}`]:!!this.textStyle},a={"pkt-tag":!0,[`pkt-tag--${this.textStyle}`]:!!this.textStyle,[`pkt-tag--${this.size}`]:!!this.size,[`pkt-tag--${this.skin}`]:!!this.skin,"pkt-hide":this._isClosed};return this.closeTag?e._`
2
2
  <button
3
3
  class=${t.t(a)}
4
4
  type=${this.type}
@@ -1,9 +1,9 @@
1
- import { _ as e, d as t, l as n, n as r, u as i } from "./element-J8nynuVk.js";
2
- import { t as a } from "./class-map-DSoj1J68.js";
3
- import { t as o } from "./if-defined-BILLSM7i.js";
1
+ import { _ as e, d as t, l as n, n as r, u as i } from "./element-CqC-sGuC.js";
2
+ import { t as a } from "./class-map-D5GHsely.js";
3
+ import { t as o } from "./if-defined-BNXGXCwT.js";
4
4
  import { t as s } from "./format-BTeSVkED.js";
5
- import { n as c, r as l, t as u } from "./element-with-slot-BOuXlWSY.js";
6
- import "./icon-DkVqRWbC.js";
5
+ import { n as c, r as l, t as u } from "./element-with-slot-D_OKDlYo.js";
6
+ import "./icon-B2v30QUk.js";
7
7
  var d = {
8
8
  name: "pkt-tag",
9
9
  react: "PktTag",
@@ -1,12 +1,12 @@
1
- import { _ as e, d as t, f as n, g as r, h as i, l as a, m as o, n as s, p as c, u as l } from "./element-J8nynuVk.js";
2
- import { t as u } from "./class-map-DSoj1J68.js";
3
- import { t as d } from "./if-defined-BILLSM7i.js";
4
- import { i as f, r as p } from "./directive-helpers-ChEduoup.js";
5
- import { r as m } from "./element-with-slot-BOuXlWSY.js";
6
- import "./icon-DkVqRWbC.js";
7
- import { n as h, t as g } from "./ref-DNowxdYH.js";
8
- import { t as _ } from "./input-element-BWxgs8L-.js";
9
- import { r as v } from "./input-wrapper-Bg06k-cj.js";
1
+ import { _ as e, d as t, f as n, g as r, h as i, l as a, m as o, n as s, p as c, u as l } from "./element-CqC-sGuC.js";
2
+ import { t as u } from "./class-map-D5GHsely.js";
3
+ import { t as d } from "./if-defined-BNXGXCwT.js";
4
+ import { i as f, r as p } from "./directive-helpers-DpyLJPJm.js";
5
+ import { r as m } from "./element-with-slot-D_OKDlYo.js";
6
+ import "./icon-B2v30QUk.js";
7
+ import { n as h, t as g } from "./ref-37-yxmc4.js";
8
+ import { t as _ } from "./input-element-BTzuDh4h.js";
9
+ import { r as v } from "./input-wrapper-CvFMiqIt.js";
10
10
  //#region ../../node_modules/lit-html/directives/live.js
11
11
  var y = n(class extends c {
12
12
  constructor(e) {
@@ -1,4 +1,4 @@
1
- const e=require("./element-D_mCyFeX.cjs"),t=require("./class-map-DupQbnhE.cjs"),n=require("./if-defined-BbUZeoaQ.cjs"),r=require("./directive-helpers-2mcpDDv5.cjs"),i=require("./element-with-slot-C66Jck5e.cjs");require("./icon-BzxBkRyE.cjs");const a=require("./ref-AuNEkS5a.cjs"),o=require("./input-element-PN5nWd1A.cjs"),s=require("./input-wrapper-D64Qn-QH.cjs");var c=e.f(class extends e.p{constructor(t){if(super(t),t.type!==e.m.PROPERTY&&t.type!==e.m.ATTRIBUTE&&t.type!==e.m.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!r.i(t))throw Error("`live` bindings can only contain a single expression")}render(e){return e}update(t,[n]){if(n===e.g||n===e.h)return n;let i=t.element,a=t.name;if(t.type===e.m.PROPERTY){if(n===i[a])return e.g}else if(t.type===e.m.BOOLEAN_ATTRIBUTE){if(!!n===i.hasAttribute(a))return e.g}else if(t.type===e.m.ATTRIBUTE&&i.getAttribute(a)===n+``)return e.g;return r.r(t),n}}),l=class extends o.t{constructor(...e){super(...e),this.inputRef=a.t(),this.value=``,this.autocomplete=`off`,this.rows=null,this.cols=null,this.counterCurrent=0}attributeChangedCallback(e,t,n){e===`value`&&this.value!==t&&(this.counterCurrent=n?n.length:0),super.attributeChangedCallback(e,t,n)}willUpdate(e){super.willUpdate(e),e.has(`value`)&&(this.counterCurrent=this.value?.length||0),e.has(`id`)&&!this.name&&this.id&&(this.name=this.id)}updated(e){super.updated(e),this.classList.add(`pkt-textinput`,`pkt-textarea`),e.has(`value`)&&this.valueChanged(this.value,e.get(`value`))}render(){let r=this.effectiveCounter(this.counterMaxLength>0),o=t.t({"pkt-input":!0,[`pkt-input--${this.inputSize}`]:!0,"pkt-input--fullwidth":this.fullwidth,"pkt-input--counter-error":r&&this.counterMaxLength>0&&this.value.length>this.counterMaxLength}),l=this.ariaLabelledby||`${this.id}-input-label`;return e._`<pkt-input-wrapper
1
+ const e=require("./element-CewjrA4g.cjs"),t=require("./class-map-B0FX3YsK.cjs"),n=require("./if-defined-CjRKmMQs.cjs"),r=require("./directive-helpers-BushnrQQ.cjs"),i=require("./element-with-slot-MCvSBwUv.cjs");require("./icon-Clz68-Kz.cjs");const a=require("./ref-HT6KRjxp.cjs"),o=require("./input-element-BdIWsDl-.cjs"),s=require("./input-wrapper-BIrQijWT.cjs");var c=e.f(class extends e.p{constructor(t){if(super(t),t.type!==e.m.PROPERTY&&t.type!==e.m.ATTRIBUTE&&t.type!==e.m.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!r.i(t))throw Error("`live` bindings can only contain a single expression")}render(e){return e}update(t,[n]){if(n===e.g||n===e.h)return n;let i=t.element,a=t.name;if(t.type===e.m.PROPERTY){if(n===i[a])return e.g}else if(t.type===e.m.BOOLEAN_ATTRIBUTE){if(!!n===i.hasAttribute(a))return e.g}else if(t.type===e.m.ATTRIBUTE&&i.getAttribute(a)===n+``)return e.g;return r.r(t),n}}),l=class extends o.t{constructor(...e){super(...e),this.inputRef=a.t(),this.value=``,this.autocomplete=`off`,this.rows=null,this.cols=null,this.counterCurrent=0}attributeChangedCallback(e,t,n){e===`value`&&this.value!==t&&(this.counterCurrent=n?n.length:0),super.attributeChangedCallback(e,t,n)}willUpdate(e){super.willUpdate(e),e.has(`value`)&&(this.counterCurrent=this.value?.length||0),e.has(`id`)&&!this.name&&this.id&&(this.name=this.id)}updated(e){super.updated(e),this.classList.add(`pkt-textinput`,`pkt-textarea`),e.has(`value`)&&this.valueChanged(this.value,e.get(`value`))}render(){let r=this.effectiveCounter(this.counterMaxLength>0),o=t.t({"pkt-input":!0,[`pkt-input--${this.inputSize}`]:!0,"pkt-input--fullwidth":this.fullwidth,"pkt-input--counter-error":r&&this.counterMaxLength>0&&this.value.length>this.counterMaxLength}),l=this.ariaLabelledby||`${this.id}-input-label`;return e._`<pkt-input-wrapper
2
2
  .strings=${this.strings}
3
3
  label=${this.label}
4
4
  ?counter=${r}
@@ -1,4 +1,4 @@
1
- const e=require("./element-D_mCyFeX.cjs"),t=require("./class-map-DupQbnhE.cjs"),n=require("./if-defined-BbUZeoaQ.cjs"),r=require("./element-with-slot-C66Jck5e.cjs");require("./icon-BzxBkRyE.cjs");const i=require("./ref-AuNEkS5a.cjs"),a=require("./input-element-PN5nWd1A.cjs"),o=require("./input-wrapper-D64Qn-QH.cjs");var s=class extends a.t{constructor(...e){super(...e),this.inputRef=i.t(),this.value=``,this.type=`text`,this.size=null,this.autocomplete=null,this.iconNameRight=null,this.prefix=null,this.suffix=null,this.omitSearchIcon=!1,this.counterCurrent=0}attributeChangedCallback(e,t,n){e===`value`&&this.value!==t&&(this.counterCurrent=n?n.length:0),super.attributeChangedCallback(e,t,n)}willUpdate(e){super.willUpdate(e),e.has(`value`)&&(this.counterCurrent=this.value?.length||0),e.has(`id`)&&!this.name&&this.id&&(this.name=this.id)}updated(e){super.updated(e),this.classList.add(`pkt-textinput`),e.has(`value`)&&this.valueChanged(this.value,e.get(`value`))}render(){let a=this.type===`search`&&!this.iconNameRight&&!this.omitSearchIcon,s=this.effectiveCounter(this.counterMaxLength>0),c=t.t({"pkt-input":!0,[`pkt-input--${this.inputSize}`]:!0,"pkt-input--fullwidth":this.fullwidth,"pkt-input--counter-error":s&&this.counterMaxLength>0&&this.value.length>this.counterMaxLength}),l=this.ariaLabelledby||`${this.id}-input-label`;return e._`
1
+ const e=require("./element-CewjrA4g.cjs"),t=require("./class-map-B0FX3YsK.cjs"),n=require("./if-defined-CjRKmMQs.cjs"),r=require("./element-with-slot-MCvSBwUv.cjs");require("./icon-Clz68-Kz.cjs");const i=require("./ref-HT6KRjxp.cjs"),a=require("./input-element-BdIWsDl-.cjs"),o=require("./input-wrapper-BIrQijWT.cjs");var s=class extends a.t{constructor(...e){super(...e),this.inputRef=i.t(),this.value=``,this.type=`text`,this.size=null,this.autocomplete=null,this.iconNameRight=null,this.prefix=null,this.suffix=null,this.omitSearchIcon=!1,this.counterCurrent=0}attributeChangedCallback(e,t,n){e===`value`&&this.value!==t&&(this.counterCurrent=n?n.length:0),super.attributeChangedCallback(e,t,n)}willUpdate(e){super.willUpdate(e),e.has(`value`)&&(this.counterCurrent=this.value?.length||0),e.has(`id`)&&!this.name&&this.id&&(this.name=this.id)}updated(e){super.updated(e),this.classList.add(`pkt-textinput`),e.has(`value`)&&this.valueChanged(this.value,e.get(`value`))}render(){let a=this.type===`search`&&!this.iconNameRight&&!this.omitSearchIcon,s=this.effectiveCounter(this.counterMaxLength>0),c=t.t({"pkt-input":!0,[`pkt-input--${this.inputSize}`]:!0,"pkt-input--fullwidth":this.fullwidth,"pkt-input--counter-error":s&&this.counterMaxLength>0&&this.value.length>this.counterMaxLength}),l=this.ariaLabelledby||`${this.id}-input-label`;return e._`
2
2
  <pkt-input-wrapper
3
3
  .strings=${this.strings}
4
4
  label="${this.label}"
@@ -1,11 +1,11 @@
1
- import { _ as e, d as t, h as n, l as r, n as i, u as a } from "./element-J8nynuVk.js";
2
- import { t as o } from "./class-map-DSoj1J68.js";
3
- import { t as s } from "./if-defined-BILLSM7i.js";
4
- import { r as c } from "./element-with-slot-BOuXlWSY.js";
5
- import "./icon-DkVqRWbC.js";
6
- import { n as l, t as u } from "./ref-DNowxdYH.js";
7
- import { t as d } from "./input-element-BWxgs8L-.js";
8
- import { r as f } from "./input-wrapper-Bg06k-cj.js";
1
+ import { _ as e, d as t, h as n, l as r, n as i, u as a } from "./element-CqC-sGuC.js";
2
+ import { t as o } from "./class-map-D5GHsely.js";
3
+ import { t as s } from "./if-defined-BNXGXCwT.js";
4
+ import { r as c } from "./element-with-slot-D_OKDlYo.js";
5
+ import "./icon-B2v30QUk.js";
6
+ import { n as l, t as u } from "./ref-37-yxmc4.js";
7
+ import { t as d } from "./input-element-BTzuDh4h.js";
8
+ import { r as f } from "./input-wrapper-CvFMiqIt.js";
9
9
  //#region src/components/textinput/textinput.ts
10
10
  var p = class extends d {
11
11
  constructor(...e) {
@@ -1,29 +1,29 @@
1
- import { _ as e, d as t, h as n, l as r, n as i, u as a } from "./element-J8nynuVk.js";
2
- import { t as o } from "./class-map-DSoj1J68.js";
3
- import { t as s } from "./if-defined-BILLSM7i.js";
1
+ import { _ as e, d as t, h as n, l as r, n as i, u as a } from "./element-CqC-sGuC.js";
2
+ import { t as o } from "./class-map-D5GHsely.js";
3
+ import { t as s } from "./if-defined-BNXGXCwT.js";
4
4
  import { t as c } from "./format-BTeSVkED.js";
5
- import { r as l } from "./element-with-slot-BOuXlWSY.js";
6
- import "./icon-DkVqRWbC.js";
7
- import { n as u, t as d } from "./ref-DNowxdYH.js";
8
- import { t as f } from "./input-element-BWxgs8L-.js";
9
- import "./input-wrapper-Bg06k-cj.js";
5
+ import { r as l } from "./element-with-slot-D_OKDlYo.js";
6
+ import "./icon-B2v30QUk.js";
7
+ import { n as u, t as d } from "./ref-37-yxmc4.js";
8
+ import { t as f } from "./input-element-BTzuDh4h.js";
9
+ import { r as p } from "./input-wrapper-CvFMiqIt.js";
10
10
  //#region ../../shared-utils/timepicker/time-utils.ts
11
- var p = (e) => /^\d{2}:\d{2}$/.test(e) && parseInt(e.slice(0, 2), 10) <= 23 && parseInt(e.slice(3), 10) <= 59, m = (e) => {
11
+ var m = (e) => /^\d{2}:\d{2}$/.test(e) && parseInt(e.slice(0, 2), 10) <= 23 && parseInt(e.slice(3), 10) <= 59, h = (e) => {
12
12
  let [t, n] = e.split(":").map(Number);
13
13
  return t * 60 + n;
14
- }, h = (e) => e ? Math.max(1, Math.round(e / 60)) : 1, g = (e, t) => {
14
+ }, g = (e) => e ? Math.max(1, Math.round(e / 60)) : 1, _ = (e, t) => {
15
15
  let n = e ? parseInt(String(e).split(":")[0], 10) : 0, r = t ? parseInt(String(t).split(":")[0], 10) : 23;
16
16
  return Array.from({ length: r - n + 1 }, (e, t) => t + n);
17
- }, _ = (e) => {
18
- let t = h(e);
17
+ }, v = (e) => {
18
+ let t = g(e);
19
19
  return Array.from({ length: Math.floor(60 / t) }, (e, n) => n * t);
20
- }, v = (e, t, n, r) => {
20
+ }, y = (e, t, n, r) => {
21
21
  let i = e === "" ? n === 1 ? 0 : 23 : parseInt(e, 10), a = t === "" ? n === 1 ? 0 : Math.floor(59 / r) * r : parseInt(t, 10);
22
22
  return a += n * r, a > 59 ? (a = 0, i = (i + 1) % 24) : a < 0 && (a = Math.floor(59 / r) * r, i = (i - 1 + 24) % 24), {
23
23
  hours: String(i).padStart(2, "0"),
24
24
  minutes: String(a).padStart(2, "0")
25
25
  };
26
- }, y = class extends f {
26
+ }, b = class extends f {
27
27
  constructor(...e) {
28
28
  super(...e), this.hiddenInputRef = d(), this.hoursInputRef = d(), this.minutesInputRef = d(), this.buttonRef = d(), 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 = (e) => {
29
29
  this.contains(e.target) || this._closePopup();
@@ -163,12 +163,12 @@ var p = (e) => /^\d{2}:\d{2}$/.test(e) && parseInt(e.slice(0, 2), 10) <= 23 && p
163
163
  this.internals.setValidity({}), this._setAriaInvalid(!1);
164
164
  return;
165
165
  }
166
- let r = m(this.value), i = h(this.step);
167
- if (this.min && r < m(String(this.min))) {
166
+ let r = h(this.value), i = g(this.step);
167
+ if (this.min && r < h(String(this.min))) {
168
168
  this.internals.setValidity({ rangeUnderflow: !0 }, c(n.rangeUnderflowMin, { min: String(this.min) }), t), this._setAriaInvalid(!0);
169
169
  return;
170
170
  }
171
- if (this.max && r > m(String(this.max))) {
171
+ if (this.max && r > h(String(this.max))) {
172
172
  this.internals.setValidity({ rangeOverflow: !0 }, c(n.rangeOverflowMax, { max: String(this.max) }), t), this._setAriaInvalid(!0);
173
173
  return;
174
174
  }
@@ -179,6 +179,13 @@ var p = (e) => /^\d{2}:\d{2}$/.test(e) && parseInt(e.slice(0, 2), 10) <= 23 && p
179
179
  }
180
180
  this.internals.setValidity({}), this._setAriaInvalid(!1);
181
181
  }
182
+ _describedBy() {
183
+ return p({
184
+ id: `${this.id}-hours`,
185
+ hasHelptext: !!this.helptext,
186
+ ariaDescribedby: this.ariaDescribedby
187
+ });
188
+ }
182
189
  _setAriaInvalid(e) {
183
190
  if (!this.touched && e) return;
184
191
  let t = this.hoursInputRef.value, n = this.minutesInputRef.value;
@@ -207,7 +214,7 @@ var p = (e) => /^\d{2}:\d{2}$/.test(e) && parseInt(e.slice(0, 2), 10) <= 23 && p
207
214
  return e === 3600 || e < 3600 && 3600 % e == 0 && e % 60 == 0;
208
215
  }
209
216
  _syncDisplayFromValue() {
210
- let e = p(this.value) ? this.value.split(":") : null;
217
+ let e = m(this.value) ? this.value.split(":") : null;
211
218
  e ? (this._hours = e[0], this._minutes = e[1]) : (this._hours = "", this._minutes = "");
212
219
  }
213
220
  _syncValueFromDisplay() {
@@ -217,13 +224,13 @@ var p = (e) => /^\d{2}:\d{2}$/.test(e) && parseInt(e.slice(0, 2), 10) <= 23 && p
217
224
  } else this.value !== "" && (this.value = "", this.onChange(""));
218
225
  }
219
226
  get _minuteStep() {
220
- return h(this.step);
227
+ return g(this.step);
221
228
  }
222
229
  get _hourOptions() {
223
- return g(this.min, this.max);
230
+ return _(this.min, this.max);
224
231
  }
225
232
  get _minuteOptions() {
226
- return _(this.step);
233
+ return v(this.step);
227
234
  }
228
235
  _openPopup() {
229
236
  this._isOpen = !0, this.updateComplete.then(() => {
@@ -261,7 +268,7 @@ var p = (e) => /^\d{2}:\d{2}$/.test(e) && parseInt(e.slice(0, 2), 10) <= 23 && p
261
268
  t === "hour" ? this._hours = String(n).padStart(2, "0") : this._minutes = String(n).padStart(2, "0"), e.focus();
262
269
  }
263
270
  _stepTime(e) {
264
- let t = v(this._hours, this._minutes, e, this._minuteStep);
271
+ let t = y(this._hours, this._minutes, e, this._minuteStep);
265
272
  this._hours = t.hours, this._minutes = t.minutes, this._syncValueFromDisplay();
266
273
  }
267
274
  _renderOption(t, n) {
@@ -361,6 +368,7 @@ var p = (e) => /^\d{2}:\d{2}$/.test(e) && parseInt(e.slice(0, 2), 10) <= 23 && p
361
368
  role="spinbutton"
362
369
  aria-invalid=${this.hasError ? "true" : n}
363
370
  aria-errormessage=${this.hasError ? `${this.id}-hours-error` : n}
371
+ aria-describedby=${s(this._describedBy())}
364
372
  aria-valuemin="0"
365
373
  aria-valuemax="23"
366
374
  aria-valuenow=${this._hours === "" ? n : this._hours}
@@ -390,6 +398,7 @@ var p = (e) => /^\d{2}:\d{2}$/.test(e) && parseInt(e.slice(0, 2), 10) <= 23 && p
390
398
  role="spinbutton"
391
399
  aria-invalid=${this.hasError ? "true" : n}
392
400
  aria-errormessage=${this.hasError ? `${this.id}-hours-error` : n}
401
+ aria-describedby=${s(this._describedBy())}
393
402
  aria-valuemin="0"
394
403
  aria-valuemax="59"
395
404
  aria-valuenow=${this._minutes === "" ? n : this._minutes}
@@ -494,19 +503,19 @@ var p = (e) => /^\d{2}:\d{2}$/.test(e) && parseInt(e.slice(0, 2), 10) <= 23 && p
494
503
  i([a({
495
504
  type: String,
496
505
  reflect: !0
497
- })], y.prototype, "value", void 0), i([a({
506
+ })], b.prototype, "value", void 0), i([a({
498
507
  type: Boolean,
499
508
  reflect: !0,
500
509
  attribute: "hide-picker"
501
- })], y.prototype, "hidePicker", void 0), i([a({
510
+ })], b.prototype, "hidePicker", void 0), i([a({
502
511
  type: Boolean,
503
512
  reflect: !0,
504
513
  attribute: "step-arrows"
505
- })], y.prototype, "stepArrows", void 0), i([r()], y.prototype, "_hours", void 0), i([r()], y.prototype, "_minutes", void 0), i([r()], y.prototype, "_isOpen", void 0);
514
+ })], b.prototype, "stepArrows", void 0), i([r()], b.prototype, "_hours", void 0), i([r()], b.prototype, "_minutes", void 0), i([r()], b.prototype, "_isOpen", void 0);
506
515
  try {
507
- t("pkt-timepicker")(y);
516
+ t("pkt-timepicker")(b);
508
517
  } catch {
509
518
  console.warn("Forsøker å definere <pkt-timepicker>, men den er allerede definert");
510
519
  }
511
520
  //#endregion
512
- export { y as t };
521
+ export { b as t };
@@ -0,0 +1,198 @@
1
+ const e=require("./element-CewjrA4g.cjs"),t=require("./class-map-B0FX3YsK.cjs"),n=require("./if-defined-CjRKmMQs.cjs"),r=require("./format-B8meU8Tm.cjs"),i=require("./element-with-slot-MCvSBwUv.cjs");require("./icon-Clz68-Kz.cjs");const a=require("./ref-HT6KRjxp.cjs"),o=require("./input-element-BdIWsDl-.cjs"),s=require("./input-wrapper-BIrQijWT.cjs");var c=e=>/^\d{2}:\d{2}$/.test(e)&&parseInt(e.slice(0,2),10)<=23&&parseInt(e.slice(3),10)<=59,l=e=>{let[t,n]=e.split(`:`).map(Number);return t*60+n},u=e=>e?Math.max(1,Math.round(e/60)):1,d=(e,t)=>{let n=e?parseInt(String(e).split(`:`)[0],10):0,r=t?parseInt(String(t).split(`:`)[0],10):23;return Array.from({length:r-n+1},(e,t)=>t+n)},f=e=>{let t=u(e);return Array.from({length:Math.floor(60/t)},(e,n)=>n*t)},p=(e,t,n,r)=>{let i=e===``?n===1?0:23:parseInt(e,10),a=t===``?n===1?0:Math.floor(59/r)*r:parseInt(t,10);return a+=n*r,a>59?(a=0,i=(i+1)%24):a<0&&(a=Math.floor(59/r)*r,i=(i-1+24)%24),{hours:String(i).padStart(2,`0`),minutes:String(a).padStart(2,`0`)}},m=class extends o.t{constructor(...e){super(...e),this.hiddenInputRef=a.t(),this.hoursInputRef=a.t(),this.minutesInputRef=a.t(),this.buttonRef=a.t(),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=e=>{this.contains(e.target)||this._closePopup()},this._handleComponentFocusIn=()=>{this._hasFocus||(this._hasFocus=!0,this.onFocus())},this._handleComponentFocusOut=e=>{this.contains(e.relatedTarget)||(this._hasFocus=!1,this.onBlur())},this._handleHoursKeydown=e=>{let t=e.target;switch(e.key){case`ArrowUp`:{e.preventDefault();let t=this._hours===``?0:parseInt(this._hours,10);this._hours=String((t+1)%24).padStart(2,`0`),this._syncValueFromDisplay(),this.onInput();break}case`ArrowDown`:{e.preventDefault();let t=this._hours===``?0:parseInt(this._hours,10);this._hours=String((t-1+24)%24).padStart(2,`0`),this._syncValueFromDisplay(),this.onInput();break}case`ArrowRight`:e.preventDefault(),this.minutesInputRef.value?.focus();break;case`Backspace`:case`Delete`:this._hoursDigitCount=0,this._hoursFirstDigit=-1;break;case`Tab`:break;case`Enter`:{e.preventDefault();let n=this.internals.form;n?n.requestSubmit():t.blur();break}default:if(/^\d$/.test(e.key)){e.preventDefault();let t=parseInt(e.key,10);if(this._hoursDigitCount===0)this._hoursFirstDigit=t,this._hours=String(t).padStart(2,`0`),this._hoursDigitCount=1,this.onInput(),t>=3&&(this._hoursFirstDigit=-1,this._hoursDigitCount=0,this._syncValueFromDisplay(),this.minutesInputRef.value?.focus());else{let e=this._hoursFirstDigit*10+t;this._hours=e<=23?String(e).padStart(2,`0`):String(t).padStart(2,`0`),this._hoursFirstDigit=-1,this._hoursDigitCount=0,this._syncValueFromDisplay(),this.onInput(),this.minutesInputRef.value?.focus()}}else e.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=e=>{let t=e.target;switch(e.key){case`ArrowUp`:{e.preventDefault();let t=this._minutes===``?0:parseInt(this._minutes,10);this._minutes=String((t+this._minuteStep)%60).padStart(2,`0`),this._syncValueFromDisplay(),this.onInput();break}case`ArrowDown`:{e.preventDefault();let t=this._minutes===``?0:parseInt(this._minutes,10);this._minutes=String((t-this._minuteStep+60)%60).padStart(2,`0`),this._syncValueFromDisplay(),this.onInput();break}case`ArrowLeft`:e.preventDefault(),this.hoursInputRef.value?.focus();break;case`Backspace`:case`Delete`:this._minutesDigitCount=0,this._minutesFirstDigit=-1;break;case`Tab`:break;case`Enter`:{e.preventDefault();let n=this.internals.form;n?n.requestSubmit():t.blur();break}default:if(/^\d$/.test(e.key)){e.preventDefault();let t=parseInt(e.key,10);if(this._minutesDigitCount===0)this._minutesFirstDigit=t,this._minutes=String(t).padStart(2,`0`),this._minutesDigitCount=1,this.onInput(),t>=6&&(this._minutesFirstDigit=-1,this._minutesDigitCount=0,this._syncValueFromDisplay());else{let e=this._minutesFirstDigit*10+t;this._minutes=e<=59?String(e).padStart(2,`0`):String(t).padStart(2,`0`),this._minutesFirstDigit=-1,this._minutesDigitCount=0,this._syncValueFromDisplay(),this.onInput()}}else e.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=e=>{let t=document.activeElement,n=t.closest(`.pkt-timepicker-popup__col`);if(!n)return;let r=Array.from(n.querySelectorAll(`.pkt-timepicker-popup__option`)),i=r.indexOf(t),a=t.dataset.type??``;switch(e.key){case`ArrowDown`:e.preventDefault(),this._focusOptionAndSync(r[Math.min(i+1,r.length-1)],a);break;case`ArrowUp`:e.preventDefault(),this._focusOptionAndSync(r[Math.max(i-1,0)],a);break;case`Home`:e.preventDefault(),this._focusOptionAndSync(r[0],a);break;case`End`:e.preventDefault(),this._focusOptionAndSync(r[r.length-1],a);break;case`ArrowRight`:e.preventDefault(),a===`hour`&&(this._focusOptionAndSync(t,a),this.updateComplete.then(()=>{this._scrollToSelected(),this._focusSelectedOrFirst(`minute`)}));break;case`ArrowLeft`:e.preventDefault(),a===`minute`&&(this._focusOptionAndSync(t,a),this.updateComplete.then(()=>{this._scrollToSelected(),this._focusSelectedOrFirst(`hour`)}));break;case`Enter`:case` `:e.preventDefault(),t.click();break;case`Escape`:e.preventDefault(),this._closePopup(),this.buttonRef.value?.focus()}}}get inputRef(){return this.hiddenInputRef}manageValidity(e){let t=this.hoursInputRef.value;if(!t)return;let n=this.pktStrings.get(`validation`);if(this.required&&!this.value){this.internals.setValidity({valueMissing:!0},n.valueMissing,t),this._setAriaInvalid(!0);return}if(!this.value){this.internals.setValidity({}),this._setAriaInvalid(!1);return}let i=l(this.value),a=u(this.step);if(this.min&&i<l(String(this.min))){this.internals.setValidity({rangeUnderflow:!0},r.t(n.rangeUnderflowMin,{min:String(this.min)}),t),this._setAriaInvalid(!0);return}if(this.max&&i>l(String(this.max))){this.internals.setValidity({rangeOverflow:!0},r.t(n.rangeOverflowMax,{max:String(this.max)}),t),this._setAriaInvalid(!0);return}if(this.step&&i%a!==0){let e=a===60?n.timeStepMismatchHour:a===30?n.timeStepMismatchHalfHour:r.t(n.timeStepMismatch,{step:`${a}, ${a*2}, ${a*3}`});this.internals.setValidity({stepMismatch:!0},e,t),this._setAriaInvalid(!0);return}this.internals.setValidity({}),this._setAriaInvalid(!1)}_describedBy(){return s.r({id:`${this.id}-hours`,hasHelptext:!!this.helptext,ariaDescribedby:this.ariaDescribedby})}_setAriaInvalid(e){if(!this.touched&&e)return;let t=this.hoursInputRef.value,n=this.minutesInputRef.value;if(e)t?.setAttribute(`aria-invalid`,`true`),n?.setAttribute(`aria-invalid`,`true`);else{if(this.hasError)return;t?.removeAttribute(`aria-invalid`),n?.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(e){super.willUpdate(e),e.has(`value`)&&this._syncDisplayFromValue()}updated(e){super.updated(e),this.classList.add(`pkt-timepicker`),this.classList.toggle(`pkt-timepicker--stepper`,this.stepArrows),this.classList.toggle(`pkt-timepicker--fullwidth`,this.fullwidth),this.classList.toggle(`pkt-timepicker--medium`,this.inputSize===`medium`),this.classList.toggle(`pkt-timepicker--small`,this.inputSize===`small`),this.classList.toggle(`pkt-timepicker--xsmall`,this.inputSize===`xsmall`),e.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(e){return e===3600||e<3600&&3600%e==0&&e%60==0}_syncDisplayFromValue(){let e=c(this.value)?this.value.split(`:`):null;e?(this._hours=e[0],this._minutes=e[1]):(this._hours=``,this._minutes=``)}_syncValueFromDisplay(){if(this._hours!==``&&this._minutes!==``){let e=`${this._hours}:${this._minutes}`;e!==this.value&&(this.value=e,this.onChange(e))}else this.value!==``&&(this.value=``,this.onChange(``))}get _minuteStep(){return u(this.step)}get _hourOptions(){return d(this.min,this.max)}get _minuteOptions(){return f(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(){let e=this.querySelector(`.pkt-timepicker-popup`);e&&e.querySelectorAll(`.pkt-timepicker-popup__col`).forEach(e=>{let t=e.querySelector(`.pkt-timepicker-popup__option--selected`);t&&t.scrollIntoView({block:`center`})})}_focusSelectedOrFirst(e){let t=this.querySelector(`.pkt-timepicker-popup`);if(!t)return;let n=t.querySelectorAll(`.pkt-timepicker-popup__col`),r=e===`hour`?n[0]:n[1];if(!r)return;let i=r.querySelector(`.pkt-timepicker-popup__option--selected`),a=r.querySelector(`.pkt-timepicker-popup__option`);(i||a)?.focus()}_handleOptionClick(e,t){let n=String(e).padStart(2,`0`);t===`hour`?(this._hours=n,this.updateComplete.then(()=>this._focusSelectedOrFirst(`minute`))):(this._minutes=n,this._closePopup(),this.buttonRef.value?.focus())}_focusOptionAndSync(e,t){if(!e)return;let n=parseInt(e.dataset.value??`0`,10);t===`hour`?this._hours=String(n).padStart(2,`0`):this._minutes=String(n).padStart(2,`0`),e.focus()}_stepTime(e){let t=p(this._hours,this._minutes,e,this._minuteStep);this._hours=t.hours,this._minutes=t.minutes,this._syncValueFromDisplay()}_renderOption(n,r){let i=String(n).padStart(2,`0`),a=n===(r===`hour`?this._hours===``?NaN:parseInt(this._hours,10):this._minutes===``?NaN:parseInt(this._minutes,10));return e._`
2
+ <button
3
+ class=${t.t({"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":a})}
4
+ type="button"
5
+ role="option"
6
+ aria-selected=${a?`true`:`false`}
7
+ tabindex=${a?`0`:`-1`}
8
+ data-type=${r}
9
+ data-value=${n}
10
+ @click=${e=>{e.stopImmediatePropagation(),this._handleOptionClick(n,r)}}
11
+ >
12
+ <span class="pkt-btn__text pkt-txt-14-light">${i}</span>
13
+ </button>
14
+ `}_renderPopup(){return e._`
15
+ <div
16
+ class="pkt-timepicker-popup"
17
+ id=${this.id+`-popup`}
18
+ ?hidden=${!this._isOpen}
19
+ role="group"
20
+ aria-label=${this.pktStrings.get(`timepicker`).selectTime}
21
+ @keydown=${this._handlePopupKeydown}
22
+ @focusout=${e=>{this.querySelector(`.pkt-timepicker-popup`)?.contains(e.relatedTarget)||this._closePopup()}}
23
+ >
24
+ <div
25
+ class="pkt-timepicker-popup__col"
26
+ role="listbox"
27
+ aria-label=${this.pktStrings.get(`timepicker`).hours}
28
+ aria-orientation="vertical"
29
+ >
30
+ ${this._hourOptions.map(e=>this._renderOption(e,`hour`))}
31
+ </div>
32
+ <div
33
+ class="pkt-timepicker-popup__col"
34
+ role="listbox"
35
+ aria-label=${this.pktStrings.get(`timepicker`).minutes}
36
+ aria-orientation="vertical"
37
+ >
38
+ ${this._minuteOptions.map(e=>this._renderOption(e,`minute`))}
39
+ </div>
40
+ </div>
41
+ `}_renderContainer(){let t=this.pktStrings.get(`timepicker`).hours,r=this.pktStrings.get(`timepicker`).minutes,i=this.label?`${t}, ${this.label}`:t,o=this.label?`${r}, ${this.label}`:r;return e._`
42
+ <div
43
+ class="pkt-input__container pkt-input__container--${this.inputSize}"
44
+ @click=${e=>{e.target.closest(`button, input`)||this.hoursInputRef.value?.focus()}}
45
+ >
46
+ ${this.stepArrows?e._`
47
+ <button
48
+ class="pkt-input-icon pkt-btn pkt-btn--icon-only pkt-btn--tertiary pkt-btn--${this.inputSize} pkt-timepicker__button pkt-timepicker__button--prev"
49
+ type="button"
50
+ aria-label=${this.pktStrings.get(`timepicker`).prevTime}
51
+ ?disabled=${this.disabled}
52
+ @click=${()=>this._stepTime(-1)}
53
+ >
54
+ <pkt-icon name="chevron-thin-left"></pkt-icon>
55
+ <span class="pkt-btn__text"
56
+ >${this.pktStrings.get(`timepicker`).prevTime}</span
57
+ >
58
+ </button>
59
+ `:e.h}
60
+ <input
61
+ ${a.n(this.hoursInputRef)}
62
+ type="text"
63
+ inputmode="numeric"
64
+ maxlength="2"
65
+ size="2"
66
+ class="pkt-input pkt-input--${this.inputSize} pkt-timepicker__input"
67
+ id=${this.id+`-hours`}
68
+ data-min="0"
69
+ data-max="23"
70
+ .value=${this._hours}
71
+ placeholder="––"
72
+ aria-label=${i}
73
+ role="spinbutton"
74
+ aria-invalid=${this.hasError?`true`:e.h}
75
+ aria-errormessage=${this.hasError?`${this.id}-hours-error`:e.h}
76
+ aria-describedby=${n.t(this._describedBy())}
77
+ aria-valuemin="0"
78
+ aria-valuemax="23"
79
+ aria-valuenow=${this._hours===``?e.h:this._hours}
80
+ aria-valuetext=${this._hours===``?e.h:`${this._hours} ${t.toLowerCase()}`}
81
+ autocomplete="off"
82
+ ?disabled=${this.disabled}
83
+ @keydown=${this._handleHoursKeydown}
84
+ @blur=${this._handleHoursBlur}
85
+ @focus=${e=>{e.target.select(),e.stopImmediatePropagation()}}
86
+ />
87
+ <span class="pkt-timepicker__separator">:</span>
88
+ <input
89
+ ${a.n(this.minutesInputRef)}
90
+ type="text"
91
+ inputmode="numeric"
92
+ maxlength="2"
93
+ size="2"
94
+ class="pkt-input pkt-input--${this.inputSize} pkt-timepicker__input"
95
+ id=${this.id+`-minutes`}
96
+ data-min="0"
97
+ data-max="59"
98
+ .value=${this._minutes}
99
+ placeholder="––"
100
+ aria-label=${o}
101
+ role="spinbutton"
102
+ aria-invalid=${this.hasError?`true`:e.h}
103
+ aria-errormessage=${this.hasError?`${this.id}-hours-error`:e.h}
104
+ aria-describedby=${n.t(this._describedBy())}
105
+ aria-valuemin="0"
106
+ aria-valuemax="59"
107
+ aria-valuenow=${this._minutes===``?e.h:this._minutes}
108
+ aria-valuetext=${this._minutes===``?e.h:`${this._minutes} ${r.toLowerCase()}`}
109
+ autocomplete="off"
110
+ ?disabled=${this.disabled}
111
+ @keydown=${this._handleMinutesKeydown}
112
+ @blur=${this._handleMinutesBlur}
113
+ @focus=${e=>{e.target.select(),e.stopImmediatePropagation()}}
114
+ />
115
+ ${this.hidePicker&&!this.stepArrows?e._`<pkt-icon
116
+ class="pkt-input-icon pkt-timepicker__icon"
117
+ name="clock"
118
+ aria-hidden="true"
119
+ ></pkt-icon>`:e.h}
120
+ ${!this.hidePicker&&!this.stepArrows?e._`
121
+ <button
122
+ ${a.n(this.buttonRef)}
123
+ class="pkt-input-icon pkt-btn pkt-btn--icon-only pkt-btn--tertiary pkt-btn--${this.inputSize} pkt-timepicker__button"
124
+ type="button"
125
+ aria-label=${this.pktStrings.get(`timepicker`).openPicker}
126
+ aria-haspopup="listbox"
127
+ aria-expanded=${this._isOpen?`true`:`false`}
128
+ aria-controls=${this.id+`-popup`}
129
+ ?disabled=${this.disabled}
130
+ @click=${this._togglePopup}
131
+ >
132
+ <pkt-icon name="clock"></pkt-icon>
133
+ <span class="pkt-btn__text"
134
+ >${this.pktStrings.get(`timepicker`).openPicker}</span
135
+ >
136
+ </button>
137
+ `:e.h}
138
+ ${this.stepArrows?e._`
139
+ <button
140
+ class="pkt-input-icon pkt-btn pkt-btn--icon-only pkt-btn--tertiary pkt-btn--${this.inputSize} pkt-timepicker__button pkt-timepicker__button--next"
141
+ type="button"
142
+ aria-label=${this.pktStrings.get(`timepicker`).nextTime}
143
+ ?disabled=${this.disabled}
144
+ @click=${()=>this._stepTime(1)}
145
+ >
146
+ <pkt-icon name="chevron-thin-right"></pkt-icon>
147
+ <span class="pkt-btn__text"
148
+ >${this.pktStrings.get(`timepicker`).nextTime}</span
149
+ >
150
+ </button>
151
+ `:e.h}
152
+ <input
153
+ ${a.n(this.hiddenInputRef)}
154
+ type="time"
155
+ hidden
156
+ name=${this.name||this.id}
157
+ id=${this.id+`-input`}
158
+ .value=${this.value}
159
+ min=${n.t(this.min??void 0)}
160
+ max=${n.t(this.max??void 0)}
161
+ step=${n.t(this.step??void 0)}
162
+ ?required=${this.required}
163
+ ?disabled=${this.disabled}
164
+ tabindex="-1"
165
+ />
166
+ </div>
167
+ `}render(){return e._`
168
+ <pkt-input-wrapper
169
+ .strings=${this.strings}
170
+ label="${this.label}"
171
+ ?disabled=${this.disabled}
172
+ ?fullwidth=${this.fullwidth}
173
+ ?hasError=${this.hasError}
174
+ ?hasFieldset=${this.effectiveHasFieldset(!1)}
175
+ ?inline=${this.inline}
176
+ ?optionalTag=${this.optionalTag}
177
+ ?required=${this.required}
178
+ ?requiredTag=${this.requiredTag}
179
+ useWrapper=${this.useWrapper}
180
+ .ariaDescribedby=${this.ariaDescribedby}
181
+ .errorMessage=${this.errorMessage}
182
+ .forId="${this.id+`-hours`}"
183
+ .helptext=${this.helptext}
184
+ .helptextDropdown=${this.helptextDropdown}
185
+ .helptextDropdownButton=${this.helptextDropdownButton}
186
+ .optionalText=${this.optionalText}
187
+ .requiredText=${this.requiredText}
188
+ .tagText=${this.tagText}
189
+ .size=${this.inputSize}
190
+ >
191
+ <div class="pkt-contents" slot="helptext">${i.r(this,`helptext`)}</div>
192
+ ${!this.hidePicker&&!this.stepArrows?e._`
193
+ <div class="pkt-timepicker__anchor">
194
+ ${this._renderContainer()} ${this._renderPopup()}
195
+ </div>
196
+ `:this._renderContainer()}
197
+ </pkt-input-wrapper>
198
+ `}};e.n([e.u({type:String,reflect:!0})],m.prototype,`value`,void 0),e.n([e.u({type:Boolean,reflect:!0,attribute:`hide-picker`})],m.prototype,`hidePicker`,void 0),e.n([e.u({type:Boolean,reflect:!0,attribute:`step-arrows`})],m.prototype,`stepArrows`,void 0),e.n([e.l()],m.prototype,`_hours`,void 0),e.n([e.l()],m.prototype,`_minutes`,void 0),e.n([e.l()],m.prototype,`_isOpen`,void 0);try{e.d(`pkt-timepicker`)(m)}catch{console.warn(`Forsøker å definere <pkt-timepicker>, men den er allerede definert`)}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return m}});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oslokommune/punkt-elements",
3
- "version": "18.9.3",
3
+ "version": "18.9.7",
4
4
  "description": "Komponentbiblioteket til Punkt, designsystem for Oslo kommune",
5
5
  "homepage": "https://punkt.oslo.kommune.no",
6
6
  "author": "Team Designsystem, Oslo kommune",
@@ -83,5 +83,5 @@
83
83
  "engines": {
84
84
  "node": "^22.19.0 || ^24.0.0 || ^26.0.0"
85
85
  },
86
- "gitHead": "a7bd1fc6aa32cb40e2e46bc56a971eeaa93cccef"
86
+ "gitHead": "0e5e542f79f46e2d0419e8918ffb0aff8a9c9ba6"
87
87
  }
@@ -19,6 +19,8 @@ import { formatString } from 'shared-strings'
19
19
  import type { IPktStringsProps } from 'shared-strings'
20
20
  import type { Booleanish } from 'shared-types'
21
21
 
22
+ import { describedByIds } from 'shared-utils/forms/described-by'
23
+
22
24
  import '../input-wrapper'
23
25
  import '../icon'
24
26
  import '../tag'
@@ -379,6 +381,7 @@ export class PktCombobox extends ComboboxHandlers implements IPktCombobox {
379
381
  )}
380
382
  aria-controls=${ifDefined(!this._hasTextInput ? `${this.id}-listbox` : undefined)}
381
383
  aria-haspopup=${ifDefined(!this._hasTextInput ? 'listbox' : undefined)}
384
+ aria-describedby=${ifDefined(!this._hasTextInput ? this._describedBy() : undefined)}
382
385
  aria-labelledby=${ifDefined(
383
386
  !this._hasTextInput ? `${this.id}-combobox-label` : undefined,
384
387
  )}
@@ -461,6 +464,14 @@ export class PktCombobox extends ComboboxHandlers implements IPktCombobox {
461
464
  `
462
465
  }
463
466
 
467
+ private _describedBy(): string | undefined {
468
+ return describedByIds({
469
+ id: this._hasTextInput ? `${this.id}-input` : `${this.id}-combobox`,
470
+ hasHelptext: !!this.helptext,
471
+ ariaDescribedby: this.ariaDescribedby,
472
+ })
473
+ }
474
+
464
475
  private renderInputField() {
465
476
  return this.typeahead || this.allowUserInput
466
477
  ? html`
@@ -487,6 +498,7 @@ export class PktCombobox extends ComboboxHandlers implements IPktCombobox {
487
498
  role="combobox"
488
499
  aria-expanded=${this._isOptionsOpen ? 'true' : 'false'}
489
500
  aria-label=${ifDefined(this.label)}
501
+ aria-describedby=${ifDefined(this._describedBy())}
490
502
  aria-autocomplete=${this.typeahead ? 'both' : this.allowUserInput ? 'list' : 'none'}
491
503
  aria-controls="${this.id}-listbox"
492
504
  aria-activedescendant=${ifDefined(
@@ -65,8 +65,6 @@ export class PktFileUpload extends PktFileUploadBase implements IPktFileUpload {
65
65
  render() {
66
66
  const content = this.renderContent()
67
67
 
68
- if (!this.label) return content
69
-
70
68
  return html`
71
69
  <pkt-input-wrapper
72
70
  .strings=${this.strings}
@@ -97,7 +95,7 @@ export class PktFileUpload extends PktFileUploadBase implements IPktFileUpload {
97
95
  const previewableImages = this.getPreviewableImages(filesAndTransfers)
98
96
  const fileuploadStrings = this.pktStrings.get('fileupload')
99
97
  const supportedFormatsText = this.getSupportedFormatsText()
100
- const helptextId = !this.label && this.helptext ? `${this.id}-helptext` : undefined
98
+ const helptextId = this.helptext ? `${this.id}-input-helptext` : undefined
101
99
  const errorId = this.hasEffectiveError ? `${this.id}-error` : undefined
102
100
  const describedBy = [helptextId, errorId].filter(Boolean).join(' ') || undefined
103
101
  const isThumbnailView = this.itemRenderer === 'thumbnail'
@@ -115,6 +115,14 @@ describe('pkt-header-global', () => {
115
115
  expect(logo?.getAttribute('href')).toBe('https://www.oslo.kommune.no')
116
116
  })
117
117
 
118
+ test('rendrer logoen uten lenke når logo-link er tom', async () => {
119
+ const el = await mount({ ...DESKTOP, logoLink: '' })
120
+ const logo = el.querySelector('.pkt-header-global__logo')
121
+ expect(logo?.querySelector('a')).toBeNull()
122
+ expect(logo?.getAttribute('role')).toBe('img')
123
+ expect(logo?.getAttribute('aria-label')).toBe('Oslo kommune')
124
+ })
125
+
118
126
  test('sender logo-click-event når logoen klikkes', async () => {
119
127
  const el = await mount(DESKTOP)
120
128
  // preventDefault - jsdom kan ikke navigere
@@ -368,12 +368,22 @@ export class PktHeaderGlobal extends PktElement<IPktHeaderGlobal> implements IPk
368
368
  }
369
369
 
370
370
  private renderLogo() {
371
+ const strings = this.pktStrings.get('header')
371
372
  const logoIcon = html`
372
373
  <pkt-icon name="oslologo" aria-hidden="true" path=${ifDefined(this.logoPath)}></pkt-icon>
373
374
  `
375
+
376
+ if (!this.logoLink) {
377
+ return html`
378
+ <span class="pkt-header-global__logo" role="img" aria-label=${strings.logoAlt}>
379
+ ${logoIcon}
380
+ </span>
381
+ `
382
+ }
383
+
374
384
  return html`
375
385
  <span class="pkt-header-global__logo">
376
- <a href=${this.logoLink} aria-label="Til hovedsiden" @click=${this.handleLogoClick}>
386
+ <a href=${this.logoLink} aria-label=${strings.logoLabel} @click=${this.handleLogoClick}>
377
387
  ${logoIcon}
378
388
  </a>
379
389
  </span>
@@ -522,13 +532,14 @@ export class PktHeaderGlobal extends PktElement<IPktHeaderGlobal> implements IPk
522
532
  secondIconName=${isOpen ? 'chevron-thin-up' : 'chevron-thin-down'}
523
533
  @click=${() => this.toggleMenu('user')}
524
534
  >
525
- <span class="pkt-sr-only">Brukermeny: </span>
535
+ <span class="pkt-sr-only">${this.pktStrings.get('header').userMenuButton} </span>
526
536
  <span translate="no">${this.representing?.name || this.user.name}</span>
527
537
  </pkt-button>
528
538
  ${isOpen
529
539
  ? html`
530
540
  <div class=${userMenuClasses}>
531
541
  <pkt-header-user-menu
542
+ .strings=${this.strings}
532
543
  .user=${this.user}
533
544
  formatted-last-logged-in=${this.formattedLastLoggedIn || nothing}
534
545
  .representing=${this.representing}