@oslokommune/punkt-elements 12.31.2 → 12.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/dist/{alert-BDxxRqgi.cjs → alert-D5G5UJuo.cjs} +1 -1
  2. package/dist/{alert-D0S57u0r.js → alert-gERpVuB7.js} +6 -6
  3. package/dist/alert.d.ts +32 -0
  4. package/dist/{backlink-CzpB-ih9.js → backlink-DdNgqA56.js} +2 -2
  5. package/dist/{backlink-Dn4DfWVR.cjs → backlink-Q2HTG9jm.cjs} +1 -1
  6. package/dist/backlink.d.ts +32 -0
  7. package/dist/{button-Beo3c7cx.cjs → button-BPyZeW73.cjs} +1 -1
  8. package/dist/{button-9NwGr-OS.js → button-rArIL0-j.js} +3 -3
  9. package/dist/button.d.ts +32 -0
  10. package/dist/{calendar-BbZNxsKY.js → calendar-1ryAEdX3.js} +4 -4
  11. package/dist/{calendar-CxBo98iI.cjs → calendar-2DqPLXdD.cjs} +1 -1
  12. package/dist/calendar.d.ts +32 -0
  13. package/dist/{card-DQfNKnKl.js → card-BbMBpvJt.js} +7 -7
  14. package/dist/{card-C63x_nll.cjs → card-ZX09f_ka.cjs} +1 -1
  15. package/dist/card.d.ts +32 -0
  16. package/dist/{checkbox-9Zjy_NU7.cjs → checkbox-BnDG6wIO.cjs} +1 -1
  17. package/dist/{checkbox-CzDpR6_8.js → checkbox-Ceui2TLp.js} +4 -4
  18. package/dist/checkbox.d.ts +32 -0
  19. package/dist/{class-map-DWtqmIRS.js → class-map-ChuDQU5C.js} +1 -1
  20. package/dist/{class-map-Dj5mbCUg.cjs → class-map-D4rXyUxT.cjs} +1 -1
  21. package/dist/combobox-DH-YlbNh.cjs +115 -0
  22. package/dist/combobox-DbO6I0GT.js +694 -0
  23. package/dist/combobox.d.ts +47 -0
  24. package/dist/{datepicker-CYUvRGhE.js → datepicker-8MOgQsyL.js} +144 -196
  25. package/dist/datepicker-BRH-59Q9.cjs +153 -0
  26. package/dist/datepicker.d.ts +32 -0
  27. package/dist/directive-helpers-D7XIyCQ_.js +45 -0
  28. package/dist/directive-helpers-mGjAtADc.cjs +5 -0
  29. package/dist/{element-CzFXQBoS.cjs → element-BBo3JZk5.cjs} +1 -1
  30. package/dist/{element-C7XjZtLU.js → element-G8JoS0Lj.js} +6 -0
  31. package/dist/{helptext-B9kxDc2b.cjs → helptext-B4Uc-d56.cjs} +2 -2
  32. package/dist/{helptext-CqnoPodd.js → helptext-Y4cSgTkd.js} +10 -10
  33. package/dist/helptext.d.ts +32 -0
  34. package/dist/{icon-BEUgV9Wo.js → icon-BJnwW0eh.js} +1 -1
  35. package/dist/{icon-BOKusjAA.cjs → icon-BTUCDPN5.cjs} +1 -1
  36. package/dist/icon.d.ts +32 -0
  37. package/dist/{if-defined-CpIkv1A4.cjs → if-defined-C1ZDVzYn.cjs} +1 -1
  38. package/dist/{if-defined-eRX4e5zO.js → if-defined-rCqT8Od1.js} +1 -1
  39. package/dist/index.d.ts +208 -14
  40. package/dist/input-element-AhnBdCb8.cjs +1 -0
  41. package/dist/{input-element-BK8UkQli.js → input-element-DM2uSYaW.js} +22 -19
  42. package/dist/input-wrapper-BdZxmQyO.cjs +52 -0
  43. package/dist/input-wrapper-DQmYzhcy.js +185 -0
  44. package/dist/input-wrapper.d.ts +32 -0
  45. package/dist/{link-D3U0Jkz8.js → link-C3lW3z8X.js} +5 -5
  46. package/dist/{link-1iq0Pmuf.cjs → link-DOVlsg2S.cjs} +1 -1
  47. package/dist/link.d.ts +32 -0
  48. package/dist/{linkcard-CRpo3tiw.js → linkcard-CvqqyHVW.js} +4 -4
  49. package/dist/{linkcard-2WzDJPZz.cjs → linkcard-DDD92XfD.cjs} +1 -1
  50. package/dist/linkcard.d.ts +32 -0
  51. package/dist/listbox-BTVnrHWv.cjs +95 -0
  52. package/dist/listbox-DX-Euxdm.js +360 -0
  53. package/dist/listbox.d.ts +47 -0
  54. package/dist/{loader-B1edLWTg.js → loader-BudoV0yd.js} +6 -6
  55. package/dist/{loader-DI74pe25.cjs → loader-Csq0Yd1k.cjs} +1 -1
  56. package/dist/loader.d.ts +32 -0
  57. package/dist/{messagebox-DQpEMkS2.cjs → messagebox-8GwnNqb0.cjs} +1 -1
  58. package/dist/{messagebox-KP-8-tA9.js → messagebox-D6uexEhg.js} +6 -6
  59. package/dist/messagebox.d.ts +32 -0
  60. package/dist/{modal-ytIJwfr3.cjs → modal-CLixB4Dz.cjs} +1 -1
  61. package/dist/{modal-kPX8nO_L.js → modal-DnYn2Rlg.js} +6 -6
  62. package/dist/modal.d.ts +32 -0
  63. package/dist/pkt-alert.cjs +1 -1
  64. package/dist/pkt-alert.js +1 -1
  65. package/dist/pkt-backlink.cjs +1 -1
  66. package/dist/pkt-backlink.js +1 -1
  67. package/dist/pkt-button.cjs +1 -1
  68. package/dist/pkt-button.js +1 -1
  69. package/dist/pkt-calendar.cjs +1 -1
  70. package/dist/pkt-calendar.js +1 -1
  71. package/dist/pkt-card.cjs +1 -1
  72. package/dist/pkt-card.js +1 -1
  73. package/dist/pkt-checkbox.cjs +1 -1
  74. package/dist/pkt-checkbox.js +1 -1
  75. package/dist/pkt-combobox.cjs +1 -0
  76. package/dist/pkt-combobox.js +6 -0
  77. package/dist/pkt-datepicker.cjs +1 -1
  78. package/dist/pkt-datepicker.js +1 -1
  79. package/dist/pkt-helptext.cjs +1 -1
  80. package/dist/pkt-helptext.js +1 -1
  81. package/dist/pkt-icon.cjs +1 -1
  82. package/dist/pkt-icon.js +1 -1
  83. package/dist/pkt-index.cjs +3 -3
  84. package/dist/pkt-index.js +45 -43
  85. package/dist/pkt-input-wrapper.cjs +1 -1
  86. package/dist/pkt-input-wrapper.js +1 -1
  87. package/dist/pkt-link.cjs +1 -1
  88. package/dist/pkt-link.js +1 -1
  89. package/dist/pkt-linkcard.cjs +1 -1
  90. package/dist/pkt-linkcard.js +1 -1
  91. package/dist/pkt-listbox.cjs +1 -0
  92. package/dist/pkt-listbox.js +6 -0
  93. package/dist/pkt-loader.cjs +1 -1
  94. package/dist/pkt-loader.js +1 -1
  95. package/dist/pkt-messagebox.cjs +1 -1
  96. package/dist/pkt-messagebox.js +1 -1
  97. package/dist/pkt-modal.cjs +1 -1
  98. package/dist/pkt-modal.js +1 -1
  99. package/dist/pkt-options-controller-BtU1zEtG.cjs +1 -0
  100. package/dist/pkt-options-controller-CZplGTgu.js +38 -0
  101. package/dist/pkt-progressbar.cjs +1 -1
  102. package/dist/pkt-progressbar.js +2 -2
  103. package/dist/pkt-radiobutton.cjs +1 -1
  104. package/dist/pkt-radiobutton.js +1 -1
  105. package/dist/pkt-select.cjs +1 -1
  106. package/dist/pkt-select.js +1 -1
  107. package/dist/pkt-slot-controller-CqNvEpFd.cjs +1 -0
  108. package/dist/{pkt-slot-controller-Clbye6cM.js → pkt-slot-controller-D1DakVrU.js} +17 -7
  109. package/dist/pkt-tag.cjs +1 -1
  110. package/dist/pkt-tag.js +1 -1
  111. package/dist/pkt-textarea.cjs +1 -1
  112. package/dist/pkt-textarea.js +1 -1
  113. package/dist/pkt-textinput.cjs +1 -1
  114. package/dist/pkt-textinput.js +1 -1
  115. package/dist/{progressbar-B6A9UVXS.cjs → progressbar-BW_icNId.cjs} +1 -1
  116. package/dist/{progressbar-D0nxLqHu.js → progressbar-czvExwTL.js} +5 -5
  117. package/dist/progressbar.d.ts +32 -0
  118. package/dist/{radiobutton-BWyQgR_x.cjs → radiobutton-BeSuCrbp.cjs} +1 -1
  119. package/dist/{radiobutton-DLWjvLBO.js → radiobutton-DKo27Stm.js} +5 -5
  120. package/dist/radiobutton.d.ts +32 -0
  121. package/dist/ref-DsoUUoPU.cjs +9 -0
  122. package/dist/ref-cRTOoM4R.js +102 -0
  123. package/dist/repeat-CArTw6-s.js +61 -0
  124. package/dist/repeat-kruY8poV.cjs +5 -0
  125. package/dist/select-DxHhPEgD.js +118 -0
  126. package/dist/select-lvFnhEVg.cjs +49 -0
  127. package/dist/select.d.ts +32 -0
  128. package/dist/{state-HNj0_316.cjs → state-BILlRnrD.cjs} +1 -1
  129. package/dist/{state-CDQk0DFQ.js → state-gfUuUqVg.js} +1 -1
  130. package/dist/{tag-CmFcSdOV.js → tag-CWx1XsGR.js} +7 -7
  131. package/dist/{tag-BeLSOjNh.cjs → tag-DThwKsrg.cjs} +1 -1
  132. package/dist/tag.d.ts +32 -0
  133. package/dist/{textarea-BPqWCymU.js → textarea-BNNDbxxO.js} +18 -17
  134. package/dist/{textarea-VG-UTMLP.cjs → textarea-CDsLbogK.cjs} +6 -6
  135. package/dist/textarea.d.ts +32 -0
  136. package/dist/{textinput-CEP7QA3E.cjs → textinput-C3C088Ki.cjs} +5 -4
  137. package/dist/{textinput-VD74aGzx.js → textinput-M8I4dfoP.js} +25 -24
  138. package/dist/textinput.d.ts +32 -0
  139. package/package.json +3 -3
  140. package/src/components/combobox/combobox.ts +873 -0
  141. package/src/components/combobox/countrycodes.json +927 -0
  142. package/src/components/combobox/index.ts +6 -0
  143. package/src/components/datepicker/datepicker.ts +2 -0
  144. package/src/components/helptext/helptext.ts +1 -1
  145. package/src/components/index.ts +7 -0
  146. package/src/components/input-wrapper/input-wrapper.ts +42 -34
  147. package/src/components/listbox/index.ts +4 -0
  148. package/src/components/listbox/listbox.ts +474 -0
  149. package/src/components/select/select.ts +7 -0
  150. package/src/components/textinput/textinput.ts +3 -2
  151. package/dist/datepicker-FuAL0uNU.cjs +0 -155
  152. package/dist/input-element-Dtyuf6s8.cjs +0 -1
  153. package/dist/input-wrapper-Bo2_t6pA.cjs +0 -50
  154. package/dist/input-wrapper-DaZZq8c0.js +0 -172
  155. package/dist/pkt-slot-controller-Oc32unDk.cjs +0 -1
  156. package/dist/ref-2anvRHT4.cjs +0 -13
  157. package/dist/ref-DbOSDQbk.js +0 -143
  158. package/dist/select-CzuxXKll.js +0 -150
  159. package/dist/select-DZL6aa2s.cjs +0 -48
@@ -0,0 +1,360 @@
1
+ import { P as u, x as r, E as p, t as b, n as l, a as f } from "./element-G8JoS0Lj.js";
2
+ import { r as m } from "./state-gfUuUqVg.js";
3
+ import { o as y } from "./if-defined-rCqT8Od1.js";
4
+ import { c as k } from "./repeat-CArTw6-s.js";
5
+ import { e as d } from "./class-map-ChuDQU5C.js";
6
+ import { u as x } from "./stringutils-DJjRa8dG.js";
7
+ var O = Object.defineProperty, g = Object.getOwnPropertyDescriptor, a = (e, t, s, o) => {
8
+ for (var n = o > 1 ? void 0 : o ? g(t, s) : t, c = e.length - 1, h; c >= 0; c--)
9
+ (h = e[c]) && (n = (o ? h(t, s, n) : h(n)) || n);
10
+ return o && n && O(t, s, n), n;
11
+ };
12
+ let i = class extends u {
13
+ constructor() {
14
+ super(...arguments), this.id = x(), this.label = null, this.options = [], this.isOpen = !1, this.disabled = !1, this.includeSearch = !1, this.isMultiSelect = !1, this.allowUserInput = !1, this.maxIsReached = !1, this.customUserInput = null, this.searchPlaceholder = null, this.searchValue = null, this.maxLength = 0, this.userMessage = null, this._selectedOptions = 0, this._filteredOptions = [];
15
+ }
16
+ // Lifecycle methods
17
+ connectedCallback() {
18
+ super.connectedCallback(), this.includeSearch && !this.searchValue && (this.searchValue = ""), this.options.length > 0 && this.filterOptions(), this.setAttribute("tabindex", "-1"), this.addEventListener("focus", this.focusFirstOrSelectedOption);
19
+ }
20
+ updated(e) {
21
+ (e.has("options") || e.has("searchValue")) && this.filterOptions(), super.updated(e);
22
+ }
23
+ attributeChangedCallback(e, t, s) {
24
+ (e === "options" || e === "searchValue" || e === "search-value") && this.filterOptions(), super.attributeChangedCallback(e, t, s);
25
+ }
26
+ // Render methods
27
+ render() {
28
+ return r`
29
+ <div
30
+ class=${d({
31
+ "pkt-listbox": !0,
32
+ "pkt-listbox__open": this.isOpen,
33
+ "pkt-txt-16-light": !0
34
+ })}
35
+ role="listbox"
36
+ aria-label=${y(this.label)}
37
+ >
38
+ <div class="pkt-listbox__banners">
39
+ ${this.renderMaximumReachedBanner()} ${this.renderUserMessage()}
40
+ ${this.renderNewOptionBanner()} ${this.renderSearch()}
41
+ </div>
42
+ <ul class="pkt-listbox__options" role="presentation">
43
+ ${this.renderList()}
44
+ </ul>
45
+ </div>
46
+ `;
47
+ }
48
+ renderCheckboxOrCheckIcon(e, t) {
49
+ return this.isMultiSelect ? r`
50
+ <input
51
+ class="pkt-input-check__input-checkbox"
52
+ type="checkbox"
53
+ role="presentation"
54
+ tabindex="-1"
55
+ value=${e.value}
56
+ .checked=${e.selected}
57
+ aria-labelledby=${this.id + "-option-label-" + t}
58
+ ?disabled=${this.disabled || e.disabled || this.maxIsReached && !e.selected}
59
+ />
60
+ ` : e.selected ? r`<pkt-icon name="check-big"></pkt-icon>` : p;
61
+ }
62
+ renderList() {
63
+ return r`
64
+ ${k(
65
+ this._filteredOptions,
66
+ (e) => e.value,
67
+ (e, t) => r`
68
+ <li
69
+ @click=${() => {
70
+ this.toggleOption(e);
71
+ }}
72
+ aria-selected=${e.selected ? "true" : "false"}
73
+ @keydown=${this.handleOptionKeydown}
74
+ class=${d({
75
+ "pkt-listbox__option": !0,
76
+ "pkt-listbox__option--selected": !!(!this.isMultiSelect && e.selected),
77
+ "pkt-listbox__option--checkBox": this.isMultiSelect
78
+ })}
79
+ tabindex="${this.disabled || e.disabled ? "-1" : "0"}"
80
+ data-index=${t}
81
+ data-value=${e.value}
82
+ data-selected=${e.selected ? "true" : "false"}
83
+ ?data-disabled=${this.disabled || e.disabled || this.maxIsReached && !e.selected}
84
+ role="option"
85
+ id=${`${this.id}-${t}`}
86
+ >
87
+ ${this.renderCheckboxOrCheckIcon(e, t)}
88
+ <span class="pkt-listbox__option-label" id=${this.id + "-option-label-" + t}>
89
+ ${e.prefix ? r`<span class="pkt-listbox__option-prefix">${e.prefix}</span>` : p}
90
+ ${e.label || e.value}
91
+ </span>
92
+ ${e.description ? r`<span class="pkt-listbox__option-description pkt-txt-14-light"
93
+ >${e.description}</span
94
+ >` : p}
95
+ </li>
96
+ `
97
+ )}
98
+ `;
99
+ }
100
+ renderNewOptionBanner() {
101
+ return this.allowUserInput && this.customUserInput ? r`
102
+ <div
103
+ class="pkt-listbox__banner pkt-listbox__banner--new-option pkt-listbox__option"
104
+ data-type="new-option"
105
+ data-value=${this.customUserInput}
106
+ data-selected="false"
107
+ tabindex="0"
108
+ @click=${() => this.toggleOption({
109
+ value: this.customUserInput || ""
110
+ })}
111
+ @keydown=${this.handleOptionKeydown}
112
+ >
113
+ <pkt-icon class="pkt-listbox__banner-icon" name="plus-sign" size="large"></pkt-icon>
114
+ Legg til “${this.customUserInput}”
115
+ </div>
116
+ ` : p;
117
+ }
118
+ renderMaximumReachedBanner() {
119
+ return this._selectedOptions = this.options.filter((e) => e.selected).length, this.isMultiSelect && this._selectedOptions > 0 && this.maxLength > 0 ? r`
120
+ <div class="pkt-listbox__banner pkt-listbox__banner--maximum-reached">
121
+ ${this._selectedOptions} av maks ${this.maxLength} mulige er valgt.
122
+ </div>
123
+ ` : p;
124
+ }
125
+ renderUserMessage() {
126
+ return this.userMessage ? r`<div class="pkt-listbox__banner pkt-listbox__banner--user-message">
127
+ <pkt-icon
128
+ class="pkt-listbox__banner-icon"
129
+ name="exclamation-mark-circle"
130
+ size="large"
131
+ ></pkt-icon>
132
+ ${this.userMessage}
133
+ </div>` : p;
134
+ }
135
+ renderSearch() {
136
+ return this.includeSearch ? r`
137
+ <div class="pkt-listbox__search">
138
+ <span class="pkt-listbox__search-icon">
139
+ <pkt-icon name="magnifying-glass-small" size="large"></pkt-icon>
140
+ </span>
141
+ <input
142
+ class="pkt-txt-16-light"
143
+ type="text"
144
+ aria-label="Søk i listen"
145
+ form=""
146
+ placeholder=${this.searchPlaceholder || b.forms.search.placeholder}
147
+ @input=${this.handleSearchInput}
148
+ @keydown=${this.handleSearchKeydown}
149
+ .value=${this.searchValue}
150
+ data-type="searchbox"
151
+ ?disabled=${this.disabled}
152
+ ?readonly=${this.disabled}
153
+ role="searchbox"
154
+ />
155
+ </div>
156
+ ` : p;
157
+ }
158
+ // Event handlers
159
+ handleSearchInput(e) {
160
+ this.searchValue = e.target.value, this.dispatchEvent(
161
+ new CustomEvent("search", {
162
+ detail: this.searchValue,
163
+ bubbles: !1
164
+ })
165
+ );
166
+ }
167
+ handleSearchKeydown(e) {
168
+ switch (e.key) {
169
+ case "Enter":
170
+ e.preventDefault();
171
+ break;
172
+ case "ArrowUp":
173
+ case "Escape":
174
+ this.closeOptions(), e.preventDefault();
175
+ break;
176
+ case "ArrowDown":
177
+ case "Tab":
178
+ this.focusFirstOrSelectedOption();
179
+ break;
180
+ }
181
+ }
182
+ handleOptionKeydown(e) {
183
+ const t = e.currentTarget, s = t.dataset.value, o = t.dataset.type, n = t.dataset.selected === "true";
184
+ if (!(!this.getOptionElements().length && (!this.customUserInput || !this.allowUserInput && this.customUserInput) && o !== "new-option" && o !== "searchbox"))
185
+ switch (e.key) {
186
+ case " ":
187
+ case "Enter":
188
+ this.toggleOption(t), e.preventDefault();
189
+ break;
190
+ case "Backspace":
191
+ s && (n ? this.toggleOption(t) : this.closeOptions()), e.preventDefault();
192
+ break;
193
+ case "Escape":
194
+ case "Tab":
195
+ this.closeOptions();
196
+ break;
197
+ case "ArrowDown":
198
+ e.altKey ? this.focusLastOption() : o === "searchbox" || o === "new-option" ? this.focusFirstOption() : this.focusNextOption(t), e.preventDefault();
199
+ break;
200
+ case "ArrowUp":
201
+ if (e.altKey)
202
+ this.focusFirstOption();
203
+ else if (t.dataset.index === "0" && this.includeSearch) {
204
+ const c = this.querySelector('[role="searchbox"]');
205
+ c && c.focus();
206
+ } else if (t.dataset.index === "0" && this.customUserInput) {
207
+ const c = this.querySelector('[data-type="new-option"]');
208
+ c && c.focus();
209
+ } else
210
+ this.focusPreviousOption(t);
211
+ e.preventDefault();
212
+ break;
213
+ case "Home":
214
+ this.focusFirstOption(), e.preventDefault();
215
+ break;
216
+ case "End":
217
+ this.focusLastOption(), e.preventDefault();
218
+ break;
219
+ default:
220
+ (e.metaKey || e.ctrlKey) && e.key === "a" && (this.selectAll(), e.preventDefault()), this.isLetterOrSpace(e.key) && (this.handleTypeAhead(e.key), e.preventDefault());
221
+ break;
222
+ }
223
+ }
224
+ // Focus management methods
225
+ focusAndScrollIntoView(e) {
226
+ e.scrollIntoView({ block: "nearest" }), window.setTimeout(() => e.focus(), 0);
227
+ }
228
+ focusNextOption(e) {
229
+ const t = e.nextElementSibling;
230
+ t && this.focusAndScrollIntoView(t);
231
+ }
232
+ focusPreviousOption(e) {
233
+ const t = e.previousElementSibling;
234
+ if (e.dataset.index === "0" && this.includeSearch) {
235
+ const s = this.querySelector('[role="searchbox"]');
236
+ s && this.focusAndScrollIntoView(s);
237
+ } else t && this.focusAndScrollIntoView(t);
238
+ }
239
+ focusFirstOption() {
240
+ const e = this.getOptionElements()[0];
241
+ e && this.focusAndScrollIntoView(e);
242
+ }
243
+ focusLastOption() {
244
+ const e = this.getOptionElements().pop();
245
+ e && this.focusAndScrollIntoView(e);
246
+ }
247
+ focusFirstOrSelectedOption() {
248
+ if (this.disabled) return;
249
+ const e = this.getOptionElements().find(
250
+ (t) => t.dataset.selected === "true"
251
+ );
252
+ if (this.allowUserInput && this.customUserInput) {
253
+ const t = this.querySelector('[data-type="new-option"]');
254
+ this.focusAndScrollIntoView(t);
255
+ } else if (e)
256
+ this.focusAndScrollIntoView(e);
257
+ else if (this.includeSearch && !(document.activeElement instanceof HTMLInputElement)) {
258
+ const t = this.querySelector('[role="searchbox"]');
259
+ window.setTimeout(() => t.focus(), 0);
260
+ } else
261
+ this.focusFirstOption();
262
+ }
263
+ // Event dispatching methods
264
+ toggleOption(e) {
265
+ const t = e instanceof HTMLElement ? e.dataset.disabled : e.disabled;
266
+ if (this.disabled || t) return;
267
+ const s = e instanceof HTMLElement ? e.dataset.value : e.value;
268
+ this.dispatchEvent(
269
+ new CustomEvent("option-toggle", {
270
+ detail: s,
271
+ bubbles: !1
272
+ })
273
+ );
274
+ }
275
+ selectAll() {
276
+ this.dispatchEvent(new CustomEvent("select-all", { bubbles: !1 }));
277
+ }
278
+ closeOptions() {
279
+ this.dispatchEvent(new CustomEvent("close-options", { bubbles: !1 }));
280
+ }
281
+ // Filtering and typeahead methods
282
+ filterOptions() {
283
+ this.searchValue ? this._filteredOptions = this.options.filter((e) => {
284
+ var s;
285
+ return (e.label + e.value).toLowerCase().includes(((s = this.searchValue) == null ? void 0 : s.toLowerCase()) || "");
286
+ }) : this._filteredOptions = [...this.options];
287
+ }
288
+ isLetterOrSpace(e) {
289
+ return /^[\p{L} ]$/u.test(e);
290
+ }
291
+ handleTypeAhead(e) {
292
+ this.typeAheadString += e.toLowerCase(), this.typeAheadTimeout && clearTimeout(this.typeAheadTimeout), this.typeAheadTimeout = window.setTimeout(() => {
293
+ this.typeAheadString = "";
294
+ }, 500);
295
+ const s = this.getOptionElements().find(
296
+ (o) => {
297
+ var n;
298
+ return (n = o.textContent) == null ? void 0 : n.trim().toLowerCase().startsWith(this.typeAheadString);
299
+ }
300
+ );
301
+ s && this.focusAndScrollIntoView(s);
302
+ }
303
+ // DOM helper methods
304
+ getOptionElements() {
305
+ return this._filteredOptions.length ? Array.from(
306
+ this.querySelectorAll('[role="option"]:not([data-disabled])') || []
307
+ ) : [];
308
+ }
309
+ };
310
+ a([
311
+ l({ type: String })
312
+ ], i.prototype, "id", 2);
313
+ a([
314
+ l({ type: String })
315
+ ], i.prototype, "label", 2);
316
+ a([
317
+ l({ type: Array })
318
+ ], i.prototype, "options", 2);
319
+ a([
320
+ l({ type: Boolean, reflect: !0 })
321
+ ], i.prototype, "isOpen", 2);
322
+ a([
323
+ l({ type: Boolean })
324
+ ], i.prototype, "disabled", 2);
325
+ a([
326
+ l({ type: Boolean })
327
+ ], i.prototype, "includeSearch", 2);
328
+ a([
329
+ l({ type: Boolean })
330
+ ], i.prototype, "isMultiSelect", 2);
331
+ a([
332
+ l({ type: Boolean })
333
+ ], i.prototype, "allowUserInput", 2);
334
+ a([
335
+ l({ type: Boolean })
336
+ ], i.prototype, "maxIsReached", 2);
337
+ a([
338
+ l({ type: String })
339
+ ], i.prototype, "customUserInput", 2);
340
+ a([
341
+ l({ type: String })
342
+ ], i.prototype, "searchPlaceholder", 2);
343
+ a([
344
+ l({ type: String })
345
+ ], i.prototype, "searchValue", 2);
346
+ a([
347
+ l({ type: Number })
348
+ ], i.prototype, "maxLength", 2);
349
+ a([
350
+ l({ type: String })
351
+ ], i.prototype, "userMessage", 2);
352
+ a([
353
+ m()
354
+ ], i.prototype, "_filteredOptions", 2);
355
+ i = a([
356
+ f("pkt-listbox")
357
+ ], i);
358
+ export {
359
+ i as P
360
+ };
@@ -0,0 +1,47 @@
1
+ export { }
2
+
3
+
4
+ /**
5
+ * Pkt Select is a wrapper for the native select element using the pkt-input-wrapper component.
6
+ *
7
+ * The component will prioritize options passed as a prop over options passed as children if both are provided.
8
+ * This is to allow for dynamic options that might change in the case of both children/slot and props are provided.
9
+ *
10
+ * @slot (default) - Options to be rendered as children
11
+ * @prop {TSelectOption[]} options - Options to be rendered as children
12
+ *
13
+ *
14
+ */
15
+ declare global {
16
+ interface HTMLElementTagNameMap {
17
+ 'pkt-select': PktSelect & HTMLSelectElement;
18
+ }
19
+ }
20
+
21
+
22
+ declare global {
23
+ interface HTMLElementTagNameMap {
24
+ 'pkt-combobox': PktCombobox & HTMLSelectElement;
25
+ }
26
+ }
27
+
28
+
29
+ declare global {
30
+ interface HTMLElementTagNameMap {
31
+ 'pkt-icon': PktIcon;
32
+ }
33
+ }
34
+
35
+
36
+ declare global {
37
+ interface HTMLElementTagNameMap {
38
+ 'pkt-listbox': PktListbox;
39
+ }
40
+ }
41
+
42
+
43
+ declare global {
44
+ interface Window {
45
+ pktTz: string;
46
+ }
47
+ }
@@ -1,9 +1,9 @@
1
- import { P as u, x as d, E as y, n as o, a as c } from "./element-C7XjZtLU.js";
2
- import { e as h } from "./class-map-DWtqmIRS.js";
3
- import { r as m } from "./state-CDQk0DFQ.js";
4
- import { e as f, n as v } from "./ref-DbOSDQbk.js";
5
- import { P as _ } from "./pkt-slot-controller-Clbye6cM.js";
6
- import "./icon-BEUgV9Wo.js";
1
+ import { P as u, x as d, E as y, n as o, a as c } from "./element-G8JoS0Lj.js";
2
+ import { e as h } from "./class-map-ChuDQU5C.js";
3
+ import { r as m } from "./state-gfUuUqVg.js";
4
+ import { e as f, n as v } from "./ref-cRTOoM4R.js";
5
+ import { P as _ } from "./pkt-slot-controller-D1DakVrU.js";
6
+ import "./icon-BJnwW0eh.js";
7
7
  var g = Object.defineProperty, L = Object.getOwnPropertyDescriptor, s = (e, a, l, r) => {
8
8
  for (var i = r > 1 ? void 0 : r ? L(a, l) : a, p = e.length - 1, n; p >= 0; p--)
9
9
  (n = e[p]) && (i = (r ? n(a, l, i) : n(i)) || i);
@@ -1,4 +1,4 @@
1
- "use strict";const e=require("./element-CzFXQBoS.cjs"),d=require("./class-map-Dj5mbCUg.cjs"),u=require("./state-HNj0_316.cjs"),p=require("./ref-2anvRHT4.cjs"),h=require("./pkt-slot-controller-Oc32unDk.cjs");require("./icon-BOKusjAA.cjs");var c=Object.defineProperty,y=Object.getOwnPropertyDescriptor,s=(o,t,r,i)=>{for(var a=i>1?void 0:i?y(t,r):t,l=o.length-1,n;l>=0;l--)(n=o[l])&&(a=(i?n(t,r,a):n(a))||a);return i&&a&&c(t,r,a),a};exports.PktLoader=class extends e.PktElement{constructor(){super(),this.defaultSlot=p.e(),this.delay=0,this.inline=!1,this.isLoading=!0,this.message=null,this.size="medium",this.variant="shapes",this._shouldDisplayLoader=!1,this.slotController=new h.PktSlotController(this,this.defaultSlot)}connectedCallback(){super.connectedCallback(),this._shouldDisplayLoader=this.delay===0,this.delay>0&&this.setupLoader()}updated(t){t.has("delay")&&this.setupLoader()}render(){const t=d.e({"pkt-loader":!0,[`pkt-loader--${this.inline?"inline":"box"}`]:!0,[`pkt-loader--${this.size}`]:!0}),r=d.e({"pkt-contents":!0,"pkt-hide":this.isLoading});return e.x`<div role="status" aria-live="polite" .aria-busy=${this.isLoading} class=${t}>
1
+ "use strict";const e=require("./element-BBo3JZk5.cjs"),d=require("./class-map-D4rXyUxT.cjs"),u=require("./state-BILlRnrD.cjs"),p=require("./ref-DsoUUoPU.cjs"),h=require("./pkt-slot-controller-CqNvEpFd.cjs");require("./icon-BTUCDPN5.cjs");var c=Object.defineProperty,y=Object.getOwnPropertyDescriptor,s=(o,t,r,i)=>{for(var a=i>1?void 0:i?y(t,r):t,l=o.length-1,n;l>=0;l--)(n=o[l])&&(a=(i?n(t,r,a):n(a))||a);return i&&a&&c(t,r,a),a};exports.PktLoader=class extends e.PktElement{constructor(){super(),this.defaultSlot=p.e(),this.delay=0,this.inline=!1,this.isLoading=!0,this.message=null,this.size="medium",this.variant="shapes",this._shouldDisplayLoader=!1,this.slotController=new h.PktSlotController(this,this.defaultSlot)}connectedCallback(){super.connectedCallback(),this._shouldDisplayLoader=this.delay===0,this.delay>0&&this.setupLoader()}updated(t){t.has("delay")&&this.setupLoader()}render(){const t=d.e({"pkt-loader":!0,[`pkt-loader--${this.inline?"inline":"box"}`]:!0,[`pkt-loader--${this.size}`]:!0}),r=d.e({"pkt-contents":!0,"pkt-hide":this.isLoading});return e.x`<div role="status" aria-live="polite" .aria-busy=${this.isLoading} class=${t}>
2
2
  ${this.isLoading&&this._shouldDisplayLoader?e.x`<div class="pkt-loader__spinner">
3
3
  <pkt-icon
4
4
  name=${this.getVariant(this.variant)}
package/dist/loader.d.ts CHANGED
@@ -1,6 +1,31 @@
1
1
  export { }
2
2
 
3
3
 
4
+ /**
5
+ * Pkt Select is a wrapper for the native select element using the pkt-input-wrapper component.
6
+ *
7
+ * The component will prioritize options passed as a prop over options passed as children if both are provided.
8
+ * This is to allow for dynamic options that might change in the case of both children/slot and props are provided.
9
+ *
10
+ * @slot (default) - Options to be rendered as children
11
+ * @prop {TSelectOption[]} options - Options to be rendered as children
12
+ *
13
+ *
14
+ */
15
+ declare global {
16
+ interface HTMLElementTagNameMap {
17
+ 'pkt-select': PktSelect & HTMLSelectElement;
18
+ }
19
+ }
20
+
21
+
22
+ declare global {
23
+ interface HTMLElementTagNameMap {
24
+ 'pkt-combobox': PktCombobox & HTMLSelectElement;
25
+ }
26
+ }
27
+
28
+
4
29
  declare global {
5
30
  interface HTMLElementTagNameMap {
6
31
  'pkt-icon': PktIcon;
@@ -8,6 +33,13 @@ declare global {
8
33
  }
9
34
 
10
35
 
36
+ declare global {
37
+ interface HTMLElementTagNameMap {
38
+ 'pkt-listbox': PktListbox;
39
+ }
40
+ }
41
+
42
+
11
43
  declare global {
12
44
  interface Window {
13
45
  pktTz: string;
@@ -1,4 +1,4 @@
1
- "use strict";const s=require("./element-CzFXQBoS.cjs"),b=require("./pkt-slot-controller-Oc32unDk.cjs"),c=require("./ref-2anvRHT4.cjs"),d=require("./class-map-Dj5mbCUg.cjs"),k=require("./state-HNj0_316.cjs");require("./icon-BOKusjAA.cjs");const u=require("./classutils-BwNK82ZQ.cjs"),m="pkt-messagebox",g=!0,h={onClose:{description:"React: Event som trigges når meldingsboksen lukkes"},"on-close":{description:"Vue: Event som trigges når meldingsboksen lukkes"}},f={title:{name:"Tittel",description:"Tittelen på meldingsboksen",type:"string"},skin:{name:"Utseende",description:"Velg farge på meldingsboksen",type:["beige","blue","red","green"],default:"beige"},compact:{name:"Kompakt",description:"Gjør meldingsboksen mindre",type:"boolean",default:!1},closable:{name:"Kan lukkes",description:"Viser lukkeknapp",type:"boolean",default:!1}},x={default:{description:"Innholdet i meldingsboksen"}},p={name:m,"css-class":"pkt-messagebox",isElement:g,events:h,props:f,slots:x};var v=Object.defineProperty,_=Object.getOwnPropertyDescriptor,o=(i,e,n,l)=>{for(var t=l>1?void 0:l?_(e,n):e,a=i.length-1,r;a>=0;a--)(r=i[a])&&(t=(l?r(e,n,t):r(t))||t);return l&&t&&v(e,n,t),t};exports.PktMessagebox=class extends s.PktElement{constructor(){super(),this.defaultSlot=c.e(),this.closable=p.props.closable.default,this.compact=p.props.compact.default,this.title="",this.skin=p.props.skin.default,this._isClosed=!1,this.close=e=>{this._isClosed=!0,this.dispatchEvent(new CustomEvent("close",{detail:{origin:e},bubbles:!0})),this.dispatchEvent(new CustomEvent("on-close",{detail:{origin:e},bubbles:!0}))},this.slotController=new b.PktSlotController(this,this.defaultSlot),this._isClosed=!1}updated(e){super.updated(e),e.has("_isClosed")&&u.updateClassAttribute(this,"pkt-hide",this._isClosed)}render(){const e={"pkt-messagebox":!0,"pkt-messagebox--compact":this.compact,[`pkt-messagebox--${this.skin}`]:this.skin,"pkt-messagebox--closable":this.closable,"pkt-hide":this._isClosed};return s.x`<div class=${d.e(e)}>
1
+ "use strict";const s=require("./element-BBo3JZk5.cjs"),b=require("./pkt-slot-controller-CqNvEpFd.cjs"),c=require("./ref-DsoUUoPU.cjs"),d=require("./class-map-D4rXyUxT.cjs"),k=require("./state-BILlRnrD.cjs");require("./icon-BTUCDPN5.cjs");const u=require("./classutils-BwNK82ZQ.cjs"),m="pkt-messagebox",g=!0,h={onClose:{description:"React: Event som trigges når meldingsboksen lukkes"},"on-close":{description:"Vue: Event som trigges når meldingsboksen lukkes"}},f={title:{name:"Tittel",description:"Tittelen på meldingsboksen",type:"string"},skin:{name:"Utseende",description:"Velg farge på meldingsboksen",type:["beige","blue","red","green"],default:"beige"},compact:{name:"Kompakt",description:"Gjør meldingsboksen mindre",type:"boolean",default:!1},closable:{name:"Kan lukkes",description:"Viser lukkeknapp",type:"boolean",default:!1}},x={default:{description:"Innholdet i meldingsboksen"}},p={name:m,"css-class":"pkt-messagebox",isElement:g,events:h,props:f,slots:x};var v=Object.defineProperty,_=Object.getOwnPropertyDescriptor,o=(i,e,n,l)=>{for(var t=l>1?void 0:l?_(e,n):e,a=i.length-1,r;a>=0;a--)(r=i[a])&&(t=(l?r(e,n,t):r(t))||t);return l&&t&&v(e,n,t),t};exports.PktMessagebox=class extends s.PktElement{constructor(){super(),this.defaultSlot=c.e(),this.closable=p.props.closable.default,this.compact=p.props.compact.default,this.title="",this.skin=p.props.skin.default,this._isClosed=!1,this.close=e=>{this._isClosed=!0,this.dispatchEvent(new CustomEvent("close",{detail:{origin:e},bubbles:!0})),this.dispatchEvent(new CustomEvent("on-close",{detail:{origin:e},bubbles:!0}))},this.slotController=new b.PktSlotController(this,this.defaultSlot),this._isClosed=!1}updated(e){super.updated(e),e.has("_isClosed")&&u.updateClassAttribute(this,"pkt-hide",this._isClosed)}render(){const e={"pkt-messagebox":!0,"pkt-messagebox--compact":this.compact,[`pkt-messagebox--${this.skin}`]:this.skin,"pkt-messagebox--closable":this.closable,"pkt-hide":this._isClosed};return s.x`<div class=${d.e(e)}>
2
2
  ${this.closable?s.x`<div class="pkt-messagebox__close">
3
3
  <button
4
4
  @click=${this.close}
@@ -1,9 +1,9 @@
1
- import { P as b, x as c, E as m, n, a as u } from "./element-C7XjZtLU.js";
2
- import { P as k } from "./pkt-slot-controller-Clbye6cM.js";
3
- import { e as h, n as f } from "./ref-DbOSDQbk.js";
4
- import { e as g } from "./class-map-DWtqmIRS.js";
5
- import { r as v } from "./state-CDQk0DFQ.js";
6
- import "./icon-BEUgV9Wo.js";
1
+ import { P as b, x as c, E as m, n, a as u } from "./element-G8JoS0Lj.js";
2
+ import { P as k } from "./pkt-slot-controller-D1DakVrU.js";
3
+ import { e as h, n as f } from "./ref-cRTOoM4R.js";
4
+ import { e as g } from "./class-map-ChuDQU5C.js";
5
+ import { r as v } from "./state-gfUuUqVg.js";
6
+ import "./icon-BJnwW0eh.js";
7
7
  import { u as _ } from "./classutils-RQs1k6D9.js";
8
8
  const x = "pkt-messagebox", y = !0, C = {
9
9
  onClose: {
@@ -1,6 +1,31 @@
1
1
  export { }
2
2
 
3
3
 
4
+ /**
5
+ * Pkt Select is a wrapper for the native select element using the pkt-input-wrapper component.
6
+ *
7
+ * The component will prioritize options passed as a prop over options passed as children if both are provided.
8
+ * This is to allow for dynamic options that might change in the case of both children/slot and props are provided.
9
+ *
10
+ * @slot (default) - Options to be rendered as children
11
+ * @prop {TSelectOption[]} options - Options to be rendered as children
12
+ *
13
+ *
14
+ */
15
+ declare global {
16
+ interface HTMLElementTagNameMap {
17
+ 'pkt-select': PktSelect & HTMLSelectElement;
18
+ }
19
+ }
20
+
21
+
22
+ declare global {
23
+ interface HTMLElementTagNameMap {
24
+ 'pkt-combobox': PktCombobox & HTMLSelectElement;
25
+ }
26
+ }
27
+
28
+
4
29
  declare global {
5
30
  interface HTMLElementTagNameMap {
6
31
  'pkt-icon': PktIcon;
@@ -8,6 +33,13 @@ declare global {
8
33
  }
9
34
 
10
35
 
36
+ declare global {
37
+ interface HTMLElementTagNameMap {
38
+ 'pkt-listbox': PktListbox;
39
+ }
40
+ }
41
+
42
+
11
43
  declare global {
12
44
  interface Window {
13
45
  pktTz: string;
@@ -1,4 +1,4 @@
1
- "use strict";const d=require("./class-map-Dj5mbCUg.cjs"),s=require("./element-CzFXQBoS.cjs"),k=require("./state-HNj0_316.cjs"),m=require("./pkt-slot-controller-Oc32unDk.cjs"),r=require("./ref-2anvRHT4.cjs");require("./icon-BOKusjAA.cjs");const h="pkt-modal",g=!0,f={"background-click":{description:"Event som trigges når bakgrunnen trykkes på"},close:{description:"Event som trigges når meldingsboksen lukkes"}},v={headingText:{name:"Heading text",description:"Heading tekst på modalen",type:"string"},hideCloseButton:{name:"Gjem 'Lukk'-knapp",description:"Gjemmer lukkeknappen. Dersom denne er satt til true, vil ikke lukkeknappen vises, og dermed er det viktig at man tilbyr en annen måte som f.eks. en knapp for å lukke modalen på.",type:"boolean",default:!1},closeOnBackdropClick:{name:"Lukk modalen når bakgrunnen trykkes på",description:"Lukk modalen når bakgrunnen trykkes på",type:"boolean",default:!1},closeButtonSkin:{name:"Stil på lukkeknappen",description:"Stil på lukkeknappen",type:["blue","yellow-filled"],default:"blue"},size:{name:"Størrelse",description:"Størrelsen på modalen",type:["small","medium","large"],default:"medium"}},b={default:{description:"Innholdet i meldingen. Her tilbyr vi støtteklasser for å style 1-3 knapper i modalen."}},u={name:h,"css-class":"pkt-modal",isElements:g,events:f,props:v,slots:b};var y=Object.defineProperty,_=Object.getOwnPropertyDescriptor,l=(c,e,t,n)=>{for(var o=n>1?void 0:n?_(e,t):e,i=c.length-1,a;i>=0;i--)(a=c[i])&&(o=(n?a(e,t,o):a(o))||o);return n&&o&&y(e,t,o),o};exports.PktModal=class extends s.PktElement{constructor(){super(),this.headingText="",this.removePadding=!1,this.hideCloseButton=u.props.hideCloseButton.default,this.closeOnBackdropClick=u.props.closeOnBackdropClick.default,this.closeButtonSkin="blue",this.size=u.props.size.default,this.defaultSlot=r.e(),this.dialogRef=r.e(),this._isOpen=!1,this.close=(e,t=!1)=>{var o;if(!this._isOpen)return;this._isOpen=!1,document.body.classList.remove("pkt-modal--open");const n=document.activeElement;n&&!this.isElementInViewport(n)&&n.scrollIntoView({behavior:"smooth",block:"nearest"}),this.dispatchEvent(new CustomEvent("close",{detail:{origin:e},bubbles:!0,composed:!0})),t||(o=this.dialogRef.value)==null||o.close(),this.requestUpdate()},this.showModal=e=>{var n;this._isOpen=!0,(n=this.dialogRef.value)==null||n.showModal();const t=document.querySelector(".pkt-modal");requestAnimationFrame(()=>{var o;this.dialogRef.value&&((o=this.dialogRef.value)==null||o.focus())}),t&&document.body.classList.add("pkt-modal--open"),this.dispatchEvent(new CustomEvent("showModal",{detail:{origin:e},bubbles:!0,composed:!0})),this.requestUpdate()},this.slotController=new m.PktSlotController(this,this.defaultSlot),this._isOpen=!1}async connectedCallback(){super.connectedCallback(),document.addEventListener("keydown",this.handleKeyDown),document.addEventListener("click",this.handleBackdropClick)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("keydown",this.handleKeyDown),document.removeEventListener("click",this.handleBackdropClick)}handleKeyDown(e){e.key==="Escape"&&this.close(e)}handleBackdropClick(e){var t;this.closeOnBackdropClick&&e.target===((t=this.dialogRef)==null?void 0:t.value)&&this.close(e)}isElementInViewport(e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)}render(){const e={"pkt-modal":!0,"pkt-modal--removePadding":this.removePadding??!1,"pkt-modal--noHeadingText":this.headingText===""||this.headingText===void 0,[`pkt-modal--${this.size}`]:this.size!==void 0},t={"pkt-modal__headingText":!0,"pkt-txt-24":!0},n={"pkt-modal__content":!0,"pkt-txt-18-light":!0},o=this.closeButtonSkin==="blue",i={"pkt-modal__closeButton":!0,[`pkt-modal__closeButton--${this.closeButtonSkin}`]:!0},a={"pkt-btn":!0,[`pkt-btn--${o?"tertiary":"primary"}`]:!0,"pkt-btn--icon-only":!0,"pkt-btn--medium":!0};return s.x`
1
+ "use strict";const d=require("./class-map-D4rXyUxT.cjs"),s=require("./element-BBo3JZk5.cjs"),k=require("./state-BILlRnrD.cjs"),m=require("./pkt-slot-controller-CqNvEpFd.cjs"),r=require("./ref-DsoUUoPU.cjs");require("./icon-BTUCDPN5.cjs");const h="pkt-modal",g=!0,f={"background-click":{description:"Event som trigges når bakgrunnen trykkes på"},close:{description:"Event som trigges når meldingsboksen lukkes"}},v={headingText:{name:"Heading text",description:"Heading tekst på modalen",type:"string"},hideCloseButton:{name:"Gjem 'Lukk'-knapp",description:"Gjemmer lukkeknappen. Dersom denne er satt til true, vil ikke lukkeknappen vises, og dermed er det viktig at man tilbyr en annen måte som f.eks. en knapp for å lukke modalen på.",type:"boolean",default:!1},closeOnBackdropClick:{name:"Lukk modalen når bakgrunnen trykkes på",description:"Lukk modalen når bakgrunnen trykkes på",type:"boolean",default:!1},closeButtonSkin:{name:"Stil på lukkeknappen",description:"Stil på lukkeknappen",type:["blue","yellow-filled"],default:"blue"},size:{name:"Størrelse",description:"Størrelsen på modalen",type:["small","medium","large"],default:"medium"}},b={default:{description:"Innholdet i meldingen. Her tilbyr vi støtteklasser for å style 1-3 knapper i modalen."}},u={name:h,"css-class":"pkt-modal",isElements:g,events:f,props:v,slots:b};var y=Object.defineProperty,_=Object.getOwnPropertyDescriptor,l=(c,e,t,n)=>{for(var o=n>1?void 0:n?_(e,t):e,i=c.length-1,a;i>=0;i--)(a=c[i])&&(o=(n?a(e,t,o):a(o))||o);return n&&o&&y(e,t,o),o};exports.PktModal=class extends s.PktElement{constructor(){super(),this.headingText="",this.removePadding=!1,this.hideCloseButton=u.props.hideCloseButton.default,this.closeOnBackdropClick=u.props.closeOnBackdropClick.default,this.closeButtonSkin="blue",this.size=u.props.size.default,this.defaultSlot=r.e(),this.dialogRef=r.e(),this._isOpen=!1,this.close=(e,t=!1)=>{var o;if(!this._isOpen)return;this._isOpen=!1,document.body.classList.remove("pkt-modal--open");const n=document.activeElement;n&&!this.isElementInViewport(n)&&n.scrollIntoView({behavior:"smooth",block:"nearest"}),this.dispatchEvent(new CustomEvent("close",{detail:{origin:e},bubbles:!0,composed:!0})),t||(o=this.dialogRef.value)==null||o.close(),this.requestUpdate()},this.showModal=e=>{var n;this._isOpen=!0,(n=this.dialogRef.value)==null||n.showModal();const t=document.querySelector(".pkt-modal");requestAnimationFrame(()=>{var o;this.dialogRef.value&&((o=this.dialogRef.value)==null||o.focus())}),t&&document.body.classList.add("pkt-modal--open"),this.dispatchEvent(new CustomEvent("showModal",{detail:{origin:e},bubbles:!0,composed:!0})),this.requestUpdate()},this.slotController=new m.PktSlotController(this,this.defaultSlot),this._isOpen=!1}async connectedCallback(){super.connectedCallback(),document.addEventListener("keydown",this.handleKeyDown),document.addEventListener("click",this.handleBackdropClick)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("keydown",this.handleKeyDown),document.removeEventListener("click",this.handleBackdropClick)}handleKeyDown(e){e.key==="Escape"&&this.close(e)}handleBackdropClick(e){var t;this.closeOnBackdropClick&&e.target===((t=this.dialogRef)==null?void 0:t.value)&&this.close(e)}isElementInViewport(e){const t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)}render(){const e={"pkt-modal":!0,"pkt-modal--removePadding":this.removePadding??!1,"pkt-modal--noHeadingText":this.headingText===""||this.headingText===void 0,[`pkt-modal--${this.size}`]:this.size!==void 0},t={"pkt-modal__headingText":!0,"pkt-txt-24":!0},n={"pkt-modal__content":!0,"pkt-txt-18-light":!0},o=this.closeButtonSkin==="blue",i={"pkt-modal__closeButton":!0,[`pkt-modal__closeButton--${this.closeButtonSkin}`]:!0},a={"pkt-btn":!0,[`pkt-btn--${o?"tertiary":"primary"}`]:!0,"pkt-btn--icon-only":!0,"pkt-btn--medium":!0};return s.x`
2
2
  <dialog
3
3
  class=${d.e(e)}
4
4
  ${r.n(this.dialogRef)}
@@ -1,9 +1,9 @@
1
- import { e as c } from "./class-map-DWtqmIRS.js";
2
- import { P as f, x as p, E as k, n as r, a as g } from "./element-C7XjZtLU.js";
3
- import { r as v } from "./state-CDQk0DFQ.js";
4
- import { P as b } from "./pkt-slot-controller-Clbye6cM.js";
5
- import { e as m, n as h } from "./ref-DbOSDQbk.js";
6
- import "./icon-BEUgV9Wo.js";
1
+ import { e as c } from "./class-map-ChuDQU5C.js";
2
+ import { P as f, x as p, E as k, n as r, a as g } from "./element-G8JoS0Lj.js";
3
+ import { r as v } from "./state-gfUuUqVg.js";
4
+ import { P as b } from "./pkt-slot-controller-D1DakVrU.js";
5
+ import { e as m, n as h } from "./ref-cRTOoM4R.js";
6
+ import "./icon-BJnwW0eh.js";
7
7
  const y = "pkt-modal", _ = !0, C = {
8
8
  "background-click": {
9
9
  description: "Event som trigges når bakgrunnen trykkes på"
package/dist/modal.d.ts CHANGED
@@ -1,6 +1,31 @@
1
1
  export { }
2
2
 
3
3
 
4
+ /**
5
+ * Pkt Select is a wrapper for the native select element using the pkt-input-wrapper component.
6
+ *
7
+ * The component will prioritize options passed as a prop over options passed as children if both are provided.
8
+ * This is to allow for dynamic options that might change in the case of both children/slot and props are provided.
9
+ *
10
+ * @slot (default) - Options to be rendered as children
11
+ * @prop {TSelectOption[]} options - Options to be rendered as children
12
+ *
13
+ *
14
+ */
15
+ declare global {
16
+ interface HTMLElementTagNameMap {
17
+ 'pkt-select': PktSelect & HTMLSelectElement;
18
+ }
19
+ }
20
+
21
+
22
+ declare global {
23
+ interface HTMLElementTagNameMap {
24
+ 'pkt-combobox': PktCombobox & HTMLSelectElement;
25
+ }
26
+ }
27
+
28
+
4
29
  declare global {
5
30
  interface HTMLElementTagNameMap {
6
31
  'pkt-icon': PktIcon;
@@ -8,6 +33,13 @@ declare global {
8
33
  }
9
34
 
10
35
 
36
+ declare global {
37
+ interface HTMLElementTagNameMap {
38
+ 'pkt-listbox': PktListbox;
39
+ }
40
+ }
41
+
42
+
11
43
  declare global {
12
44
  interface Window {
13
45
  pktTz: string;
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./alert-BDxxRqgi.cjs"),t=e.PktAlert;Object.defineProperty(exports,"PktAlert",{enumerable:!0,get:()=>e.PktAlert});exports.default=t;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./alert-D5G5UJuo.cjs"),t=e.PktAlert;Object.defineProperty(exports,"PktAlert",{enumerable:!0,get:()=>e.PktAlert});exports.default=t;
package/dist/pkt-alert.js CHANGED
@@ -1,4 +1,4 @@
1
- import { P as t } from "./alert-D0S57u0r.js";
1
+ import { P as t } from "./alert-gERpVuB7.js";
2
2
  const e = t;
3
3
  export {
4
4
  t as PktAlert,
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./backlink-Dn4DfWVR.cjs"),t=e.PktBackLink;Object.defineProperty(exports,"PktBackLink",{enumerable:!0,get:()=>e.PktBackLink});exports.default=t;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./backlink-Q2HTG9jm.cjs"),t=e.PktBackLink;Object.defineProperty(exports,"PktBackLink",{enumerable:!0,get:()=>e.PktBackLink});exports.default=t;
@@ -1,4 +1,4 @@
1
- import { P as k } from "./backlink-CzpB-ih9.js";
1
+ import { P as k } from "./backlink-DdNgqA56.js";
2
2
  const t = k;
3
3
  export {
4
4
  k as PktBackLink,