@oslokommune/punkt-elements 16.18.0 → 16.21.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 (190) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/{accordion-CU2tJ5vn.js → accordion-BjYsEbSM.js} +19 -19
  3. package/dist/{accordion-DDZkjXFb.cjs → accordion-DaeWPWod.cjs} +5 -5
  4. package/dist/{alert-D_eXGOez.js → alert-BkzC5mVu.js} +22 -22
  5. package/dist/{alert-NyLr62jZ.cjs → alert-D_45dWPn.cjs} +6 -6
  6. package/dist/{async-directive-CaQiqjyV.js → async-directive-Cz6tcqge.js} +2 -2
  7. package/dist/async-directive-DO1QtVmf.cjs +1 -0
  8. package/dist/{backlink-CTu44BHn.js → backlink-BXAdgAte.js} +6 -6
  9. package/dist/{backlink-BsQ0Rmxj.cjs → backlink-C42-3OG3.cjs} +2 -2
  10. package/dist/{breadcrumbs-BNZ1L-0q.cjs → breadcrumbs-CkjeLh3U.cjs} +6 -6
  11. package/dist/{breadcrumbs-DPnoURvl.js → breadcrumbs-Dkb9TxMp.js} +15 -15
  12. package/dist/{button-ZYlrRRfu.js → button-CR-KWhTT.js} +21 -21
  13. package/dist/{button-DsGvcLIn.cjs → button-Dwv11n6R.cjs} +7 -7
  14. package/dist/{calendar-CDDVoUby.cjs → calendar-Buvxe4l_.cjs} +11 -11
  15. package/dist/{calendar-VOqO5um6.js → calendar-DAq6iJdx.js} +50 -50
  16. package/dist/{card-B4oDGIRP.js → card-5PydU247.js} +43 -43
  17. package/dist/{card-DZuZy0ay.cjs → card-C__IlsUa.cjs} +26 -26
  18. package/dist/{checkbox-CF5mSBR5.js → checkbox-CC1X7fw4.js} +23 -23
  19. package/dist/{checkbox-BerAYcfK.cjs → checkbox-DzMc0AJX.cjs} +10 -10
  20. package/dist/class-map-B8Ja0q7n.cjs +1 -0
  21. package/dist/{class-map-C8HuhNzZ.js → class-map-DH9hlJny.js} +7 -8
  22. package/dist/{combobox-BDYoPZmg.js → combobox-D-DY7YcW.js} +42 -42
  23. package/dist/{combobox-Ct9gCFa1.cjs → combobox-x4tBGP3F.cjs} +17 -17
  24. package/dist/components/heading/heading.d.ts +5 -8
  25. package/dist/{consent-BME_rQ2w.cjs → consent-BB3g_ByO.cjs} +3 -3
  26. package/dist/{consent-1IUuWZAh.js → consent-Y14WZ0JS.js} +8 -8
  27. package/dist/{datepicker-ByqXCpCd.cjs → datepicker-BFI-3stE.cjs} +20 -20
  28. package/dist/{datepicker-BGpoabCM.js → datepicker-CRk7aiwH.js} +57 -57
  29. package/dist/{directive-helpers-Dkv2gKgs.js → directive-helpers-Cep_4cpj.js} +1 -1
  30. package/dist/{directive-helpers-D1QSxY17.cjs → directive-helpers-f36YZFOG.cjs} +1 -1
  31. package/dist/docs/components/loader.d.ts +6 -0
  32. package/dist/element-CXAtr6Gu.cjs +2 -0
  33. package/dist/{element-cZ85T_aa.js → element-CduG0XyF.js} +47 -23
  34. package/dist/{element-with-slot-4J2o3SeU.js → element-with-slot-BVj9MXzi.js} +5 -6
  35. package/dist/element-with-slot-Cmxb9h4H.cjs +1 -0
  36. package/dist/{fileupload-B6W7qOQT.js → fileupload-C8muj8qd.js} +149 -149
  37. package/dist/{fileupload-a2OL3dzG.cjs → fileupload-YtsrgQTY.cjs} +40 -40
  38. package/dist/{header-BZFSan0_.cjs → header-CjBip0zj.cjs} +57 -57
  39. package/dist/{header-BgVpJMHQ.js → header-DONTGbD9.js} +130 -130
  40. package/dist/{header-menu-BXzVVOHq.js → header-menu-BU-ylGrJ.js} +45 -45
  41. package/dist/{header-menu-BLngov1D.cjs → header-menu-CnW7nzmF.cjs} +24 -24
  42. package/dist/heading-3o4Dk0Wn.js +80 -0
  43. package/dist/heading-C40-NX0r.cjs +1 -0
  44. package/dist/{helptext-BeU-enix.js → helptext-C2aQBBo_.js} +12 -12
  45. package/dist/{helptext-DWMFqMnV.cjs → helptext-DNLg43eI.cjs} +4 -4
  46. package/dist/icon-Dw6I0HDV.cjs +1 -0
  47. package/dist/{icon-CZQkrK6B.js → icon-LaKyBKON.js} +18 -19
  48. package/dist/if-defined-LTjAScFG.cjs +1 -0
  49. package/dist/{if-defined-Cjj8qN-Z.js → if-defined-VShASPdu.js} +1 -1
  50. package/dist/{input-element-D0egtEnr.cjs → input-element-BHQVt4Q9.cjs} +1 -1
  51. package/dist/{input-element-B1ciW1N2.js → input-element-BrmkXIXi.js} +30 -30
  52. package/dist/{input-wrapper-oYcbCFow.js → input-wrapper-B6WowlWG.js} +33 -33
  53. package/dist/{input-wrapper-Y98KV-sy.cjs → input-wrapper-Dhkt20WW.cjs} +17 -17
  54. package/dist/{link-BMMIjg50.cjs → link-B5ur0Rym.cjs} +4 -4
  55. package/dist/{link-CT0LB3S7.js → link-ClUNY__5.js} +13 -13
  56. package/dist/linkcard-BIcCW-qw.cjs +13 -0
  57. package/dist/{linkcard-Bz5zb69P.js → linkcard-DNJm5FvA.js} +15 -15
  58. package/dist/{listbox-0NHJvNjz.js → listbox-DXMIBv3y.js} +35 -35
  59. package/dist/{listbox-CcThiNBY.cjs → listbox-DbEobJNx.cjs} +14 -14
  60. package/dist/{loader-8T6M0FCQ.cjs → loader-Uap9qDsV.cjs} +5 -5
  61. package/dist/{loader-Cbrc4FFx.js → loader-gKdQpOOQ.js} +12 -12
  62. package/dist/{messagebox-C6LHT78_.cjs → messagebox-BqBxXK8c.cjs} +5 -5
  63. package/dist/{messagebox-TKKUVTo4.js → messagebox-XRFecqyS.js} +15 -15
  64. package/dist/{modal-BVHH8koz.js → modal-CWgeT-RP.js} +19 -19
  65. package/dist/{modal-CRzbtqL3.cjs → modal-CrYHKOmr.cjs} +8 -8
  66. package/dist/pkt-accordion.cjs +1 -1
  67. package/dist/pkt-accordion.js +1 -1
  68. package/dist/pkt-alert.cjs +1 -1
  69. package/dist/pkt-alert.js +1 -1
  70. package/dist/pkt-backlink.cjs +1 -1
  71. package/dist/pkt-backlink.js +1 -1
  72. package/dist/pkt-breadcrumbs.cjs +1 -1
  73. package/dist/pkt-breadcrumbs.js +1 -1
  74. package/dist/pkt-button.cjs +1 -1
  75. package/dist/pkt-button.js +1 -1
  76. package/dist/pkt-calendar.cjs +1 -1
  77. package/dist/pkt-calendar.js +1 -1
  78. package/dist/pkt-card.cjs +1 -1
  79. package/dist/pkt-card.js +1 -1
  80. package/dist/pkt-checkbox.cjs +1 -1
  81. package/dist/pkt-checkbox.js +1 -1
  82. package/dist/pkt-combobox.cjs +1 -1
  83. package/dist/pkt-combobox.js +1 -1
  84. package/dist/pkt-consent.cjs +1 -1
  85. package/dist/pkt-consent.js +1 -1
  86. package/dist/pkt-datepicker.cjs +1 -1
  87. package/dist/pkt-datepicker.js +1 -1
  88. package/dist/pkt-fileupload.cjs +1 -1
  89. package/dist/pkt-fileupload.js +1 -1
  90. package/dist/pkt-header-menu.cjs +1 -1
  91. package/dist/pkt-header-menu.js +1 -1
  92. package/dist/pkt-header.cjs +1 -1
  93. package/dist/pkt-header.js +1 -1
  94. package/dist/pkt-heading.cjs +1 -1
  95. package/dist/pkt-heading.js +1 -1
  96. package/dist/pkt-helptext.cjs +1 -1
  97. package/dist/pkt-helptext.js +1 -1
  98. package/dist/pkt-icon.cjs +1 -1
  99. package/dist/pkt-icon.js +1 -1
  100. package/dist/pkt-index.cjs +1 -1
  101. package/dist/pkt-index.js +32 -32
  102. package/dist/pkt-input-wrapper.cjs +1 -1
  103. package/dist/pkt-input-wrapper.js +1 -1
  104. package/dist/pkt-link.cjs +1 -1
  105. package/dist/pkt-link.js +1 -1
  106. package/dist/pkt-linkcard.cjs +1 -1
  107. package/dist/pkt-linkcard.js +1 -1
  108. package/dist/pkt-listbox.cjs +1 -1
  109. package/dist/pkt-listbox.js +1 -1
  110. package/dist/pkt-loader.cjs +1 -1
  111. package/dist/pkt-loader.js +1 -1
  112. package/dist/pkt-messagebox.cjs +1 -1
  113. package/dist/pkt-messagebox.js +1 -1
  114. package/dist/pkt-modal.cjs +1 -1
  115. package/dist/pkt-modal.js +1 -1
  116. package/dist/{pkt-options-controller-CCB15L_G.js → pkt-options-controller-BTNtjEIS.js} +1 -1
  117. package/dist/{pkt-options-controller-CeAQ-D-i.cjs → pkt-options-controller-CBM8xHwR.cjs} +1 -1
  118. package/dist/pkt-progressbar.cjs +1 -1
  119. package/dist/pkt-progressbar.js +1 -1
  120. package/dist/pkt-radiobutton.cjs +1 -1
  121. package/dist/pkt-radiobutton.js +1 -1
  122. package/dist/pkt-searchinput.cjs +1 -1
  123. package/dist/pkt-searchinput.js +1 -1
  124. package/dist/pkt-select.cjs +1 -1
  125. package/dist/pkt-select.js +1 -1
  126. package/dist/pkt-tabs.cjs +1 -1
  127. package/dist/pkt-tabs.js +1 -1
  128. package/dist/pkt-tag.cjs +1 -1
  129. package/dist/pkt-tag.js +1 -1
  130. package/dist/pkt-textarea.cjs +1 -1
  131. package/dist/pkt-textarea.js +1 -1
  132. package/dist/pkt-textinput.cjs +1 -1
  133. package/dist/pkt-textinput.js +1 -1
  134. package/dist/pkt-timepicker.cjs +1 -1
  135. package/dist/pkt-timepicker.js +1 -1
  136. package/dist/{progressbar-C-5oESiB.js → progressbar-B0P_vmGD.js} +23 -24
  137. package/dist/progressbar-DADdvDl5.cjs +17 -0
  138. package/dist/{radiobutton-B1Xg6XzP.cjs → radiobutton-BfURufrZ.cjs} +8 -8
  139. package/dist/{radiobutton-BAn1V_mQ.js → radiobutton-C6zERHoy.js} +20 -20
  140. package/dist/{ref-RS8Uv6uC.js → ref-BgoHEsEt.js} +7 -8
  141. package/dist/ref-CBdWMlde.cjs +1 -0
  142. package/dist/{repeat-DV1O43YU.js → repeat-CKIii8Mi.js} +15 -16
  143. package/dist/repeat-CRRgmzVn.cjs +1 -0
  144. package/dist/{searchinput-DUgZb_zm.cjs → searchinput-BrxfRzez.cjs} +13 -13
  145. package/dist/{searchinput-C9FP89qD.js → searchinput-fPvXHu2O.js} +31 -31
  146. package/dist/{select-DkKIW7zD.js → select-BIgFPp42.js} +13 -13
  147. package/dist/{select-DAs8kzN4.cjs → select-DzZHv6Bz.cjs} +3 -3
  148. package/dist/{tabs-ClI1XQDt.js → tabs-BJx6wwXD.js} +29 -29
  149. package/dist/{tabs-CN_RIMWg.cjs → tabs-DxQy8U-0.cjs} +7 -7
  150. package/dist/{tag-vgKH9B4k.cjs → tag-CBFz0R9N.cjs} +5 -5
  151. package/dist/{tag-DSZ-czu-.js → tag-CzlnHhho.js} +19 -19
  152. package/dist/textarea-M_S9WK7s.cjs +46 -0
  153. package/dist/{textarea-BfjI6d7Q.js → textarea-qHtkhelz.js} +24 -25
  154. package/dist/{textinput-DhoupEyI.js → textinput-CZrBM-Fj.js} +26 -26
  155. package/dist/{textinput-BM66vo5e.cjs → textinput-C_6kvf87.cjs} +12 -12
  156. package/dist/{timepicker-CtRGbypF.js → timepicker-O0iCeJyW.js} +51 -51
  157. package/dist/{timepicker-C4oRmmRd.cjs → timepicker-WiYLAncb.cjs} +20 -20
  158. package/package.json +2 -2
  159. package/src/components/card/card.ts +1 -1
  160. package/src/components/heading/heading.test.ts +79 -70
  161. package/src/components/heading/heading.ts +40 -78
  162. package/dist/async-directive-B9P1Qa0k.cjs +0 -1
  163. package/dist/class-map-CJ-msbHs.cjs +0 -1
  164. package/dist/directive-3THFsVew.js +0 -28
  165. package/dist/directive-CJ2giQBZ.cjs +0 -1
  166. package/dist/element-DjtxO-1r.cjs +0 -2
  167. package/dist/element-with-slot-CWoTGA1B.cjs +0 -1
  168. package/dist/heading-BxvE80bb.js +0 -73
  169. package/dist/heading-DRJTS27k.cjs +0 -1
  170. package/dist/icon-PbaC9uUg.cjs +0 -1
  171. package/dist/if-defined-XKOD_t_V.cjs +0 -1
  172. package/dist/linkcard-CupEMkvj.cjs +0 -13
  173. package/dist/progressbar-C0g830Tk.cjs +0 -17
  174. package/dist/ref-BaJ0mBT_.cjs +0 -1
  175. package/dist/repeat-DaDFvx86.cjs +0 -1
  176. package/dist/textarea-C7YiheLo.cjs +0 -46
  177. /package/dist/{booleanish-CRaKZ75t.js → booleanish-BmcOU-43.js} +0 -0
  178. /package/dist/{booleanish-B5EFqFpJ.cjs → booleanish-jJLlnr6-.cjs} +0 -0
  179. /package/dist/{classutils-z8YsPlOf.cjs → classutils-CVTzKF0J.cjs} +0 -0
  180. /package/dist/{classutils-DEL164Ur.js → classutils-lVbGcvjN.js} +0 -0
  181. /package/dist/{converters-Bffq_YDm.cjs → converters-C_66kHUN.cjs} +0 -0
  182. /package/dist/{converters-jauYkvNh.js → converters-DSQXaDQ_.js} +0 -0
  183. /package/dist/{dialog-polyfill.esm-B7W3teD0.js → dialog-polyfill.esm-0dVT8G1o.js} +0 -0
  184. /package/dist/{dialog-polyfill.esm-BnAQvMQO.cjs → dialog-polyfill.esm-CYs2AHP1.cjs} +0 -0
  185. /package/dist/{focus-modality-controller-pzSZkDkH.js → focus-modality-controller-CaUqYdk0.js} +0 -0
  186. /package/dist/{focus-modality-controller-BSZAQk8y.cjs → focus-modality-controller-wI5SR8wH.cjs} +0 -0
  187. /package/dist/{input-wrapper-CQGoyLdZ.cjs → input-wrapper-CYCCx8MP.cjs} +0 -0
  188. /package/dist/{input-wrapper-DwSsP39J.js → input-wrapper-kw2y6Jp_.js} +0 -0
  189. /package/dist/{utils-BOOZ0ppt.js → utils-CUqCKGvp.js} +0 -0
  190. /package/dist/{utils-CM67Oudc.cjs → utils-CjAbIttF.cjs} +0 -0
@@ -22,6 +22,9 @@ const createHeading = async (headingProps = '', content = 'Test Heading') => {
22
22
  return container
23
23
  }
24
24
 
25
+ const innerHeading = (host: PktHeading): HTMLHeadingElement | null =>
26
+ host.querySelector('h1, h2, h3, h4, h5, h6')
27
+
25
28
  // Cleanup after each test
26
29
  afterEach(() => {
27
30
  document.body.innerHTML = ''
@@ -34,7 +37,7 @@ describe('PktHeading', () => {
34
37
  const heading = container.querySelector('pkt-heading') as PktHeading
35
38
 
36
39
  expect(heading).toBeInTheDocument()
37
- expect(heading.shadowRoot).toBeTruthy()
40
+ expect(heading.shadowRoot).toBeNull()
38
41
  })
39
42
 
40
43
  test('renders with default properties', async () => {
@@ -47,19 +50,33 @@ describe('PktHeading', () => {
47
50
  expect(heading.align).toBe(undefined)
48
51
  })
49
52
 
50
- test('renders content in shadow DOM slot', async () => {
53
+ test('renders content inside a semantic heading element', async () => {
51
54
  const container = await createHeading('', 'Custom Heading Text')
52
55
  const heading = container.querySelector('pkt-heading') as PktHeading
53
56
  await heading.updateComplete
54
57
 
55
- const slot = heading.shadowRoot?.querySelector('slot')
56
- expect(slot).toBeInTheDocument()
57
- expect(heading.textContent).toContain('Custom Heading Text')
58
+ const inner = innerHeading(heading)
59
+ expect(inner).toBeInTheDocument()
60
+ expect(inner?.tagName).toBe('H2')
61
+ expect(inner?.textContent).toContain('Custom Heading Text')
62
+ })
63
+
64
+ test('uses the matching h-tag for the given level', async () => {
65
+ const levels: TPktHeadingLevel[] = [1, 2, 3, 4, 5, 6]
66
+
67
+ for (const level of levels) {
68
+ const container = await createHeading(`level="${level}"`)
69
+ const heading = container.querySelector('pkt-heading') as PktHeading
70
+ await heading.updateComplete
71
+
72
+ expect(innerHeading(heading)?.tagName).toBe(`H${level}`)
73
+ document.body.innerHTML = ''
74
+ }
58
75
  })
59
76
  })
60
77
 
61
78
  describe('Properties and attributes', () => {
62
- test('applies default properties correctly', async () => {
79
+ test('applies default reflected attributes correctly', async () => {
63
80
  const container = await createHeading()
64
81
  const heading = container.querySelector('pkt-heading') as PktHeading
65
82
  await heading.updateComplete
@@ -104,7 +121,7 @@ describe('PktHeading', () => {
104
121
  await heading.updateComplete
105
122
 
106
123
  expect(heading.visuallyHidden).toBe(true)
107
- expect(heading.hasAttribute('visuallyHidden')).toBe(true)
124
+ expect(heading.hasAttribute('visuallyhidden')).toBe(true)
108
125
  })
109
126
 
110
127
  test('sets align property correctly', async () => {
@@ -123,17 +140,16 @@ describe('PktHeading', () => {
123
140
  })
124
141
 
125
142
  describe('CSS classes and styling', () => {
126
- test('applies default CSS classes', async () => {
143
+ test('applies pkt-heading class to the inner heading element, not the host', async () => {
127
144
  const container = await createHeading()
128
145
  const heading = container.querySelector('pkt-heading') as PktHeading
129
146
  await heading.updateComplete
130
147
 
131
- expect(heading.classList.contains('pkt-heading')).toBe(true)
132
- expect(heading.classList.contains('pkt-heading--medium')).toBe(false)
133
- expect(heading.classList.contains('pkt-heading--start')).toBe(false)
148
+ expect(heading.classList.contains('pkt-heading')).toBe(false)
149
+ expect(innerHeading(heading)?.classList.contains('pkt-heading')).toBe(true)
134
150
  })
135
151
 
136
- test('applies size-specific CSS classes', async () => {
152
+ test('applies size-specific class to the inner heading', async () => {
137
153
  const sizes: TPktHeadingSize[] = ['xsmall', 'small', 'medium', 'large', 'xlarge']
138
154
 
139
155
  for (const size of sizes) {
@@ -141,20 +157,20 @@ describe('PktHeading', () => {
141
157
  const heading = container.querySelector('pkt-heading') as PktHeading
142
158
  await heading.updateComplete
143
159
 
144
- expect(heading.classList.contains(`pkt-heading--${size}`)).toBe(true)
160
+ expect(innerHeading(heading)?.classList.contains(`pkt-heading--${size}`)).toBe(true)
145
161
  document.body.innerHTML = ''
146
162
  }
147
163
  })
148
164
 
149
- test('applies visually hidden class when enabled', async () => {
165
+ test('applies visually hidden class to the inner heading when enabled', async () => {
150
166
  const container = await createHeading('visuallyHidden="true"')
151
167
  const heading = container.querySelector('pkt-heading') as PktHeading
152
168
  await heading.updateComplete
153
169
 
154
- expect(heading.classList.contains('pkt-sr-only')).toBe(true)
170
+ expect(innerHeading(heading)?.classList.contains('pkt-sr-only')).toBe(true)
155
171
  })
156
172
 
157
- test('applies alignment-specific CSS classes', async () => {
173
+ test('applies alignment-specific class to the inner heading', async () => {
158
174
  const alignments = ['start', 'center', 'end'] as const
159
175
 
160
176
  for (const align of alignments) {
@@ -162,7 +178,7 @@ describe('PktHeading', () => {
162
178
  const heading = container.querySelector('pkt-heading') as PktHeading
163
179
  await heading.updateComplete
164
180
 
165
- expect(heading.classList.contains(`pkt-heading--${align}`)).toBe(true)
181
+ expect(innerHeading(heading)?.classList.contains(`pkt-heading--${align}`)).toBe(true)
166
182
  document.body.innerHTML = ''
167
183
  }
168
184
  })
@@ -172,55 +188,47 @@ describe('PktHeading', () => {
172
188
  const heading = container.querySelector('pkt-heading') as PktHeading
173
189
  await heading.updateComplete
174
190
 
175
- expect(heading.classList.contains('pkt-heading--small')).toBe(true)
176
- expect(heading.classList.contains('pkt-heading--center')).toBe(true)
191
+ expect(innerHeading(heading)?.classList.contains('pkt-heading--small')).toBe(true)
192
+ expect(innerHeading(heading)?.classList.contains('pkt-heading--center')).toBe(true)
177
193
 
178
- // Change properties
179
194
  heading.size = 'large'
180
195
  heading.align = 'end'
181
196
  await heading.updateComplete
182
197
 
183
- expect(heading.classList.contains('pkt-heading--small')).toBe(false)
184
- expect(heading.classList.contains('pkt-heading--center')).toBe(false)
185
- expect(heading.classList.contains('pkt-heading--large')).toBe(true)
186
- expect(heading.classList.contains('pkt-heading--end')).toBe(true)
198
+ expect(innerHeading(heading)?.classList.contains('pkt-heading--small')).toBe(false)
199
+ expect(innerHeading(heading)?.classList.contains('pkt-heading--center')).toBe(false)
200
+ expect(innerHeading(heading)?.classList.contains('pkt-heading--large')).toBe(true)
201
+ expect(innerHeading(heading)?.classList.contains('pkt-heading--end')).toBe(true)
187
202
  })
188
203
  })
189
204
 
190
- describe('ARIA and accessibility attributes', () => {
191
- test('sets role and aria-level attributes on connection', async () => {
192
- const container = await createHeading('level="3"')
193
- const heading = container.querySelector('pkt-heading') as PktHeading
194
- await heading.updateComplete
195
-
196
- expect(heading.getAttribute('role')).toBe('heading')
197
- expect(heading.getAttribute('aria-level')).toBe('3')
198
- })
199
-
200
- test('updates aria-level when level property changes', async () => {
201
- const container = await createHeading('level="2"')
205
+ describe('Dynamic level changes', () => {
206
+ test('swaps the inner heading tag when the level changes via property', async () => {
207
+ const container = await createHeading('level="2"', 'Dynamic')
202
208
  const heading = container.querySelector('pkt-heading') as PktHeading
203
209
  await heading.updateComplete
204
210
 
205
- expect(heading.getAttribute('aria-level')).toBe('2')
211
+ expect(innerHeading(heading)?.tagName).toBe('H2')
212
+ expect(innerHeading(heading)?.textContent).toContain('Dynamic')
206
213
 
207
214
  heading.level = 4
208
215
  await heading.updateComplete
209
216
 
210
- expect(heading.getAttribute('aria-level')).toBe('4')
217
+ expect(innerHeading(heading)?.tagName).toBe('H4')
218
+ expect(innerHeading(heading)?.textContent).toContain('Dynamic')
211
219
  })
212
220
 
213
- test('updates aria-level when level attribute changes', async () => {
221
+ test('swaps the inner heading tag when the level attribute changes', async () => {
214
222
  const container = await createHeading('level="1"')
215
223
  const heading = container.querySelector('pkt-heading') as PktHeading
216
224
  await heading.updateComplete
217
225
 
218
- expect(heading.getAttribute('aria-level')).toBe('1')
226
+ expect(innerHeading(heading)?.tagName).toBe('H1')
219
227
 
220
228
  heading.setAttribute('level', '5')
221
229
  await heading.updateComplete
222
230
 
223
- expect(heading.getAttribute('aria-level')).toBe('5')
231
+ expect(innerHeading(heading)?.tagName).toBe('H5')
224
232
  expect(heading.level).toBe(5)
225
233
  })
226
234
  })
@@ -235,28 +243,27 @@ describe('PktHeading', () => {
235
243
  await heading.updateComplete
236
244
 
237
245
  expect(heading.level).toBe(level)
238
- expect(heading.getAttribute('aria-level')).toBe(String(level))
246
+ expect(innerHeading(heading)?.tagName).toBe(`H${level}`)
239
247
  document.body.innerHTML = ''
240
248
  }
241
249
  })
242
250
 
243
- test('handles invalid levels gracefully', async () => {
251
+ test('warns and falls back to h2 for invalid levels', async () => {
244
252
  const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => {})
245
253
 
246
254
  const container = await createHeading()
247
255
  const heading = container.querySelector('pkt-heading') as PktHeading
248
256
  await heading.updateComplete
249
257
 
250
- // Test invalid level via property
251
258
  heading.level = 0 as TPktHeadingLevel
252
259
  await heading.updateComplete
253
-
254
260
  expect(consoleSpy).toHaveBeenCalledWith('Invalid heading level: 0. Must be between 1 and 6.')
261
+ expect(innerHeading(heading)?.tagName).toBe('H2')
255
262
 
256
263
  heading.level = 7 as TPktHeadingLevel
257
264
  await heading.updateComplete
258
-
259
265
  expect(consoleSpy).toHaveBeenCalledWith('Invalid heading level: 7. Must be between 1 and 6.')
266
+ expect(innerHeading(heading)?.tagName).toBe('H2')
260
267
 
261
268
  consoleSpy.mockRestore()
262
269
  })
@@ -268,13 +275,13 @@ describe('PktHeading', () => {
268
275
  const heading = container.querySelector('pkt-heading') as PktHeading
269
276
  await heading.updateComplete
270
277
 
271
- expect(heading.classList.contains('pkt-heading--small')).toBe(true)
278
+ expect(innerHeading(heading)?.classList.contains('pkt-heading--small')).toBe(true)
272
279
 
273
280
  heading.size = 'xlarge'
274
281
  await heading.updateComplete
275
282
 
276
- expect(heading.classList.contains('pkt-heading--small')).toBe(false)
277
- expect(heading.classList.contains('pkt-heading--xlarge')).toBe(true)
283
+ expect(innerHeading(heading)?.classList.contains('pkt-heading--small')).toBe(false)
284
+ expect(innerHeading(heading)?.classList.contains('pkt-heading--xlarge')).toBe(true)
278
285
  })
279
286
 
280
287
  test('updates classes when visuallyHidden property changes', async () => {
@@ -282,12 +289,12 @@ describe('PktHeading', () => {
282
289
  const heading = container.querySelector('pkt-heading') as PktHeading
283
290
  await heading.updateComplete
284
291
 
285
- expect(heading.classList.contains('pkt-sr-only')).toBe(false)
292
+ expect(innerHeading(heading)?.classList.contains('pkt-sr-only')).toBe(false)
286
293
 
287
294
  heading.visuallyHidden = true
288
295
  await heading.updateComplete
289
296
 
290
- expect(heading.classList.contains('pkt-sr-only')).toBe(true)
297
+ expect(innerHeading(heading)?.classList.contains('pkt-sr-only')).toBe(true)
291
298
  })
292
299
 
293
300
  test('updates classes when align property changes', async () => {
@@ -295,34 +302,37 @@ describe('PktHeading', () => {
295
302
  const heading = container.querySelector('pkt-heading') as PktHeading
296
303
  await heading.updateComplete
297
304
 
298
- expect(heading.classList.contains('pkt-heading--start')).toBe(true)
305
+ expect(innerHeading(heading)?.classList.contains('pkt-heading--start')).toBe(true)
299
306
 
300
307
  heading.align = 'center'
301
308
  await heading.updateComplete
302
309
 
303
- expect(heading.classList.contains('pkt-heading--start')).toBe(false)
304
- expect(heading.classList.contains('pkt-heading--center')).toBe(true)
310
+ expect(innerHeading(heading)?.classList.contains('pkt-heading--start')).toBe(false)
311
+ expect(innerHeading(heading)?.classList.contains('pkt-heading--center')).toBe(true)
305
312
  })
306
313
  })
307
314
 
308
315
  describe('Content rendering', () => {
309
- test('renders simple text content', async () => {
316
+ test('renders simple text content inside the h-tag', async () => {
310
317
  const container = await createHeading('', 'Simple Heading')
311
318
  const heading = container.querySelector('pkt-heading') as PktHeading
319
+ await heading.updateComplete
312
320
 
313
- expect(heading.textContent).toContain('Simple Heading')
321
+ expect(innerHeading(heading)?.textContent).toContain('Simple Heading')
314
322
  })
315
323
 
316
- test('renders HTML content safely', async () => {
324
+ test('renders nested HTML content inside the h-tag', async () => {
317
325
  const container = await createHeading('', '<strong>Bold</strong> heading')
318
326
  const heading = container.querySelector('pkt-heading') as PktHeading
327
+ await heading.updateComplete
319
328
 
320
- expect(heading.innerHTML).toContain('<strong>Bold</strong>')
321
- expect(heading.innerHTML).toContain('heading')
322
- expect(heading.querySelector('strong')).toBeInTheDocument()
329
+ const inner = innerHeading(heading)
330
+ expect(inner?.querySelector('strong')).toBeInTheDocument()
331
+ expect(inner?.textContent).toContain('Bold')
332
+ expect(inner?.textContent).toContain('heading')
323
333
  })
324
334
 
325
- test('renders multiple child elements', async () => {
335
+ test('renders multiple child elements inside the h-tag', async () => {
326
336
  const container = document.createElement('div')
327
337
  container.innerHTML = `
328
338
  <pkt-heading>
@@ -336,10 +346,11 @@ describe('PktHeading', () => {
336
346
  const heading = container.querySelector('pkt-heading') as PktHeading
337
347
  await heading.updateComplete
338
348
 
339
- expect(heading.querySelector('span')).toBeInTheDocument()
340
- expect(heading.querySelector('em')).toBeInTheDocument()
341
- expect(heading.textContent).toContain('Part 1')
342
- expect(heading.textContent).toContain('Part 2')
349
+ const inner = innerHeading(heading)
350
+ expect(inner?.querySelector('span')).toBeInTheDocument()
351
+ expect(inner?.querySelector('em')).toBeInTheDocument()
352
+ expect(inner?.textContent).toContain('Part 1')
353
+ expect(inner?.textContent).toContain('Part 2')
343
354
  })
344
355
  })
345
356
 
@@ -423,11 +434,11 @@ describe('PktHeading', () => {
423
434
  await Promise.all([...headings].map((h) => h.updateComplete))
424
435
 
425
436
  expect(headings[0].level).toBe(1)
426
- expect(headings[0].size).toBe('xlarge')
437
+ expect(innerHeading(headings[0])?.tagName).toBe('H1')
427
438
  expect(headings[1].level).toBe(2)
428
- expect(headings[1].size).toBe('large')
439
+ expect(innerHeading(headings[1])?.tagName).toBe('H2')
429
440
  expect(headings[2].level).toBe(3)
430
- expect(headings[2].size).toBe('medium')
441
+ expect(innerHeading(headings[2])?.tagName).toBe('H3')
431
442
  })
432
443
 
433
444
  test('maintains independence between multiple instances', async () => {
@@ -443,12 +454,10 @@ describe('PktHeading', () => {
443
454
  const heading2 = container.querySelector('#h2') as PktHeading
444
455
  await Promise.all([heading1.updateComplete, heading2.updateComplete])
445
456
 
446
- // Change properties on first heading
447
457
  heading1.size = 'xlarge'
448
458
  heading1.align = 'center'
449
459
  await heading1.updateComplete
450
460
 
451
- // Verify second heading is unaffected
452
461
  expect(heading2.size).toBe('small')
453
462
  expect(heading2.align).toBe(undefined)
454
463
  expect(heading1.size).toBe('xlarge')
@@ -1,5 +1,6 @@
1
- import { PktShadowElement } from '@/base-elements/element'
2
- import { html, PropertyValues } from 'lit'
1
+ import { PktElementWithSlot } from '@/base-elements/element-with-slot'
2
+ import { slotContent } from '@/directives/slot-content'
3
+ import { html, PropertyValues, TemplateResult } from 'lit'
3
4
  import { customElement, property } from 'lit/decorators.js'
4
5
  import type { THeadingLevel, THeadingSize, THeadingWeight } from 'shared-types'
5
6
 
@@ -15,7 +16,7 @@ export interface IPktHeading {
15
16
  align?: 'start' | 'center' | 'end'
16
17
  }
17
18
 
18
- export class PktHeading extends PktShadowElement<IPktHeading> implements IPktHeading {
19
+ export class PktHeading extends PktElementWithSlot<IPktHeading> implements IPktHeading {
19
20
  @property({ type: String, reflect: true }) size: TPktHeadingSize | undefined = undefined
20
21
  @property({ type: Number, reflect: true }) level: TPktHeadingLevel = 2
21
22
  @property({ type: String, reflect: true }) weight: TPktHeadingWeight | undefined = undefined
@@ -23,32 +24,13 @@ export class PktHeading extends PktShadowElement<IPktHeading> implements IPktHea
23
24
  @property({ type: String, reflect: true }) align: 'start' | 'center' | 'end' | undefined =
24
25
  undefined
25
26
 
26
- connectedCallback(): void {
27
- super.connectedCallback()
28
- this.setAttribute('role', 'heading')
29
- this.setAttribute('aria-level', String(this.level))
30
-
31
- this.updateHostClasses()
32
- }
33
-
34
- attributeChangedCallback(name: string, _old: string | null, value: string | null): void {
35
- super.attributeChangedCallback(name, _old, value)
36
- if (name === 'level' && value) {
37
- this.setLevel(Number(value) as TPktHeadingLevel)
38
- }
39
- if (name === 'visuallyHidden') {
40
- this.visuallyHidden = value !== null && value !== 'false'
41
- }
42
- if (name === 'size' || name === 'visuallyHidden' || name === 'align' || name === 'weight') {
43
- this.updateHostClasses()
44
- }
45
- }
46
-
47
27
  protected updated(_changedProperties: PropertyValues): void {
48
28
  super.updated(_changedProperties)
49
- if (_changedProperties.has('level')) {
50
- this.setLevel(this.level)
51
29
 
30
+ if (_changedProperties.has('level')) {
31
+ if (this.level < 1 || this.level > 6) {
32
+ console.warn(`Invalid heading level: ${this.level}. Must be between 1 and 6.`)
33
+ }
52
34
  if (!this.hasAttribute('size')) {
53
35
  this.size = this.defaultSizeForLevel
54
36
  }
@@ -56,29 +38,9 @@ export class PktHeading extends PktShadowElement<IPktHeading> implements IPktHea
56
38
  this.weight = this.defaultWeightForLevel
57
39
  }
58
40
  }
59
- if (
60
- !this.hasAttribute('size') &&
61
- (_changedProperties.has('level') || this.size === undefined)
62
- ) {
63
- this.size = this.defaultSizeForLevel
64
- }
65
-
66
- if (
67
- _changedProperties.has('size') ||
68
- _changedProperties.has('visuallyHidden') ||
69
- _changedProperties.has('align') ||
70
- _changedProperties.has('weight')
71
- ) {
72
- this.updateHostClasses()
73
- }
74
- }
75
41
 
76
- private setLevel(level: TPktHeadingLevel): void {
77
- if (level >= 1 && level <= 6) {
78
- this.level = level
79
- this.setAttribute('aria-level', String(level))
80
- } else {
81
- console.warn(`Invalid heading level: ${level}. Must be between 1 and 6.`)
42
+ if (!this.hasAttribute('size') && this.size === undefined) {
43
+ this.size = this.defaultSizeForLevel
82
44
  }
83
45
  }
84
46
 
@@ -93,7 +55,6 @@ export class PktHeading extends PktShadowElement<IPktHeading> implements IPktHea
93
55
  case 4:
94
56
  return 'small'
95
57
  case 5:
96
- return 'xsmall'
97
58
  case 6:
98
59
  return 'xsmall'
99
60
  default:
@@ -104,15 +65,11 @@ export class PktHeading extends PktShadowElement<IPktHeading> implements IPktHea
104
65
  private get defaultWeightForLevel(): TPktHeadingWeight {
105
66
  switch (this.level) {
106
67
  case 1:
107
- return 'regular'
108
68
  case 2:
109
69
  return 'regular'
110
70
  case 3:
111
- return 'medium'
112
71
  case 4:
113
- return 'medium'
114
72
  case 5:
115
- return 'medium'
116
73
  case 6:
117
74
  return 'medium'
118
75
  default:
@@ -120,34 +77,39 @@ export class PktHeading extends PktShadowElement<IPktHeading> implements IPktHea
120
77
  }
121
78
  }
122
79
 
123
- private updateHostClasses() {
124
- // Remove all possible classes first
125
- this.classList.remove(
80
+ private get headingClasses(): string {
81
+ return [
126
82
  'pkt-heading',
127
- 'pkt-heading--xsmall',
128
- 'pkt-heading--small',
129
- 'pkt-heading--medium',
130
- 'pkt-heading--large',
131
- 'pkt-heading--xlarge',
132
- 'pkt-sr-only',
133
- 'pkt-heading--start',
134
- 'pkt-heading--center',
135
- 'pkt-heading--end',
136
- 'pkt-heading--light',
137
- 'pkt-heading--regular',
138
- 'pkt-heading--medium',
139
- 'pkt-heading--bold',
140
- )
141
- // Add current classes
142
- this.classList.add('pkt-heading')
143
- if (this.size) this.classList.add(`pkt-heading--${this.size}`)
144
- if (this.weight) this.classList.add(`pkt-heading--fw-${this.weight}`)
145
- if (this.visuallyHidden) this.classList.add('pkt-sr-only')
146
- if (this.align) this.classList.add(`pkt-heading--${this.align}`)
83
+ this.size && `pkt-heading--${this.size}`,
84
+ this.weight && `pkt-heading--fw-${this.weight}`,
85
+ this.visuallyHidden && 'pkt-sr-only',
86
+ this.align && `pkt-heading--${this.align}`,
87
+ ]
88
+ .filter(Boolean)
89
+ .join(' ')
147
90
  }
148
91
 
149
- render() {
150
- return html`<slot></slot>`
92
+ render(): TemplateResult {
93
+ const classes = this.headingClasses
94
+ const content = slotContent(this)
95
+ const safeLevel = this.level >= 1 && this.level <= 6 ? this.level : 2
96
+
97
+ switch (safeLevel) {
98
+ case 1:
99
+ return html`<h1 class=${classes}>${content}</h1>`
100
+ case 2:
101
+ return html`<h2 class=${classes}>${content}</h2>`
102
+ case 3:
103
+ return html`<h3 class=${classes}>${content}</h3>`
104
+ case 4:
105
+ return html`<h4 class=${classes}>${content}</h4>`
106
+ case 5:
107
+ return html`<h5 class=${classes}>${content}</h5>`
108
+ case 6:
109
+ return html`<h6 class=${classes}>${content}</h6>`
110
+ default:
111
+ return html`<h2 class=${classes}>${content}</h2>`
112
+ }
151
113
  }
152
114
  }
153
115
 
@@ -1 +0,0 @@
1
- const e=require(`./directive-CJ2giQBZ.cjs`),t=require(`./directive-helpers-D1QSxY17.cjs`);var n=(e,t)=>{let r=e._$AN;if(r===void 0)return!1;for(let e of r)e._$AO?.(t,!1),n(e,t);return!0},r=e=>{let t,n;do{if((t=e._$AM)===void 0)break;n=t._$AN,n.delete(e),e=t}while(n?.size===0)},i=e=>{for(let t;t=e._$AM;e=t){let n=t._$AN;if(n===void 0)t._$AN=n=new Set;else if(n.has(e))break;n.add(e),s(t)}};function a(e){this._$AN===void 0?this._$AM=e:(r(this),this._$AM=e,i(this))}function o(e,t=!1,i=0){let a=this._$AH,o=this._$AN;if(o!==void 0&&o.size!==0)if(t)if(Array.isArray(a))for(let e=i;e<a.length;e++)n(a[e],!1),r(a[e]);else a!=null&&(n(a,!1),r(a));else n(this,e)}var s=t=>{t.type==e.r.CHILD&&(t._$AP??=o,t._$AQ??=a)},c=class extends e.n{constructor(){super(...arguments),this._$AN=void 0}_$AT(e,t,n){super._$AT(e,t,n),i(this),this.isConnected=e._$AU}_$AO(e,t=!0){e!==this.isConnected&&(this.isConnected=e,e?this.reconnected?.():this.disconnected?.()),t&&(n(this,e),r(this))}setValue(e){if(t.i(this._$Ct))this._$Ct._$AI(e,this);else{let t=[...this._$Ct._$AH];t[this._$Ci]=e,this._$Ct._$AI(t,this,0)}}disconnected(){}reconnected(){}};Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return c}});
@@ -1 +0,0 @@
1
- const e=require(`./element-DjtxO-1r.cjs`),t=require(`./directive-CJ2giQBZ.cjs`);var n=t.t(class extends t.n{constructor(e){if(super(e),e.type!==t.r.ATTRIBUTE||e.name!==`class`||e.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(e){return` `+Object.keys(e).filter(t=>e[t]).join(` `)+` `}update(t,[n]){if(this.st===void 0){this.st=new Set,t.strings!==void 0&&(this.nt=new Set(t.strings.join(` `).split(/\s/).filter(e=>e!==``)));for(let e in n)n[e]&&!this.nt?.has(e)&&this.st.add(e);return this.render(n)}let r=t.element.classList;for(let e of this.st)e in n||(r.remove(e),this.st.delete(e));for(let e in n){let t=!!n[e];t===this.st.has(e)||this.nt?.has(e)||(t?(r.add(e),this.st.add(e)):(r.remove(e),this.st.delete(e)))}return e.u}});Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
@@ -1,28 +0,0 @@
1
- //#region ../../node_modules/lit-html/directive.js
2
- var e = {
3
- ATTRIBUTE: 1,
4
- CHILD: 2,
5
- PROPERTY: 3,
6
- BOOLEAN_ATTRIBUTE: 4,
7
- EVENT: 5,
8
- ELEMENT: 6
9
- }, t = (e) => (...t) => ({
10
- _$litDirective$: e,
11
- values: t
12
- }), n = class {
13
- constructor(e) {}
14
- get _$AU() {
15
- return this._$AM._$AU;
16
- }
17
- _$AT(e, t, n) {
18
- this._$Ct = e, this._$AM = t, this._$Ci = n;
19
- }
20
- _$AS(e, t) {
21
- return this.update(e, t);
22
- }
23
- update(e, t) {
24
- return this.render(...t);
25
- }
26
- };
27
- //#endregion
28
- export { n, e as r, t };
@@ -1 +0,0 @@
1
- var e={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},t=e=>(...t)=>({_$litDirective$:e,values:t}),n=class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,n){this._$Ct=e,this._$AM=t,this._$Ci=n}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}};Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t}});
@@ -1,2 +0,0 @@
1
- var e=globalThis,t=e=>e,n=e.trustedTypes,r=n?n.createPolicy(`lit-html`,{createHTML:e=>e}):void 0,i=`$lit$`,a=`lit$${Math.random().toFixed(9).slice(2)}$`,o=`?`+a,s=`<${o}>`,c=document,l=()=>c.createComment(``),u=e=>e===null||typeof e!=`object`&&typeof e!=`function`,d=Array.isArray,f=e=>d(e)||typeof e?.[Symbol.iterator]==`function`,p=`[
2
- \f\r]`,m=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,h=/-->/g,g=/>/g,_=RegExp(`>|${p}(?:([^\\s"'>=/]+)(${p}*=${p}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,`g`),v=/'/g,y=/"/g,b=/^(?:script|style|textarea|title)$/i,x=(e=>(t,...n)=>({_$litType$:e,strings:t,values:n}))(1),S=Symbol.for(`lit-noChange`),C=Symbol.for(`lit-nothing`),w=new WeakMap,T=c.createTreeWalker(c,129);function E(e,t){if(!d(e)||!e.hasOwnProperty(`raw`))throw Error(`invalid template strings array`);return r===void 0?t:r.createHTML(t)}var D=(e,t)=>{let n=e.length-1,r=[],o,c=t===2?`<svg>`:t===3?`<math>`:``,l=m;for(let t=0;t<n;t++){let n=e[t],u,d,f=-1,p=0;for(;p<n.length&&(l.lastIndex=p,d=l.exec(n),d!==null);)p=l.lastIndex,l===m?d[1]===`!--`?l=h:d[1]===void 0?d[2]===void 0?d[3]!==void 0&&(l=_):(b.test(d[2])&&(o=RegExp(`</`+d[2],`g`)),l=_):l=g:l===_?d[0]===`>`?(l=o??m,f=-1):d[1]===void 0?f=-2:(f=l.lastIndex-d[2].length,u=d[1],l=d[3]===void 0?_:d[3]===`"`?y:v):l===y||l===v?l=_:l===h||l===g?l=m:(l=_,o=void 0);let x=l===_&&e[t+1].startsWith(`/>`)?` `:``;c+=l===m?n+s:f>=0?(r.push(u),n.slice(0,f)+i+n.slice(f)+a+x):n+a+(f===-2?t:x)}return[E(e,c+(e[n]||`<?>`)+(t===2?`</svg>`:t===3?`</math>`:``)),r]},O=class e{constructor({strings:t,_$litType$:r},s){let c;this.parts=[];let u=0,d=0,f=t.length-1,p=this.parts,[m,h]=D(t,r);if(this.el=e.createElement(m,s),T.currentNode=this.el.content,r===2||r===3){let e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;(c=T.nextNode())!==null&&p.length<f;){if(c.nodeType===1){if(c.hasAttributes())for(let e of c.getAttributeNames())if(e.endsWith(i)){let t=h[d++],n=c.getAttribute(e).split(a),r=/([.?@])?(.*)/.exec(t);p.push({type:1,index:u,name:r[2],strings:n,ctor:r[1]===`.`?N:r[1]===`?`?P:r[1]===`@`?F:M}),c.removeAttribute(e)}else e.startsWith(a)&&(p.push({type:6,index:u}),c.removeAttribute(e));if(b.test(c.tagName)){let e=c.textContent.split(a),t=e.length-1;if(t>0){c.textContent=n?n.emptyScript:``;for(let n=0;n<t;n++)c.append(e[n],l()),T.nextNode(),p.push({type:2,index:++u});c.append(e[t],l())}}}else if(c.nodeType===8)if(c.data===o)p.push({type:2,index:u});else{let e=-1;for(;(e=c.data.indexOf(a,e+1))!==-1;)p.push({type:7,index:u}),e+=a.length-1}u++}}static createElement(e,t){let n=c.createElement(`template`);return n.innerHTML=e,n}};function k(e,t,n=e,r){if(t===S)return t;let i=r===void 0?n._$Cl:n._$Co?.[r],a=u(t)?void 0:t._$litDirective$;return i?.constructor!==a&&(i?._$AO?.(!1),a===void 0?i=void 0:(i=new a(e),i._$AT(e,n,r)),r===void 0?n._$Cl=i:(n._$Co??=[])[r]=i),i!==void 0&&(t=k(e,i._$AS(e,t.values),i,r)),t}var A=class{constructor(e,t){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){let{el:{content:t},parts:n}=this._$AD,r=(e?.creationScope??c).importNode(t,!0);T.currentNode=r;let i=T.nextNode(),a=0,o=0,s=n[0];for(;s!==void 0;){if(a===s.index){let t;s.type===2?t=new j(i,i.nextSibling,this,e):s.type===1?t=new s.ctor(i,s.name,s.strings,this,e):s.type===6&&(t=new I(i,this,e)),this._$AV.push(t),s=n[++o]}a!==s?.index&&(i=T.nextNode(),a++)}return T.currentNode=c,r}p(e){let t=0;for(let n of this._$AV)n!==void 0&&(n.strings===void 0?n._$AI(e[t]):(n._$AI(e,n,t),t+=n.strings.length-2)),t++}},j=class e{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(e,t,n,r){this.type=2,this._$AH=C,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=n,this.options=r,this._$Cv=r?.isConnected??!0}get parentNode(){let e=this._$AA.parentNode,t=this._$AM;return t!==void 0&&e?.nodeType===11&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=k(this,e,t),u(e)?e===C||e==null||e===``?(this._$AH!==C&&this._$AR(),this._$AH=C):e!==this._$AH&&e!==S&&this._(e):e._$litType$===void 0?e.nodeType===void 0?f(e)?this.k(e):this._(e):this.T(e):this.$(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==C&&u(this._$AH)?this._$AA.nextSibling.data=e:this.T(c.createTextNode(e)),this._$AH=e}$(e){let{values:t,_$litType$:n}=e,r=typeof n==`number`?this._$AC(e):(n.el===void 0&&(n.el=O.createElement(E(n.h,n.h[0]),this.options)),n);if(this._$AH?._$AD===r)this._$AH.p(t);else{let e=new A(r,this),n=e.u(this.options);e.p(t),this.T(n),this._$AH=e}}_$AC(e){let t=w.get(e.strings);return t===void 0&&w.set(e.strings,t=new O(e)),t}k(t){d(this._$AH)||(this._$AH=[],this._$AR());let n=this._$AH,r,i=0;for(let a of t)i===n.length?n.push(r=new e(this.O(l()),this.O(l()),this,this.options)):r=n[i],r._$AI(a),i++;i<n.length&&(this._$AR(r&&r._$AB.nextSibling,i),n.length=i)}_$AR(e=this._$AA.nextSibling,n){for(this._$AP?.(!1,!0,n);e!==this._$AB;){let n=t(e).nextSibling;t(e).remove(),e=n}}setConnected(e){this._$AM===void 0&&(this._$Cv=e,this._$AP?.(e))}},M=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,t,n,r,i){this.type=1,this._$AH=C,this._$AN=void 0,this.element=e,this.name=t,this._$AM=r,this.options=i,n.length>2||n[0]!==``||n[1]!==``?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=C}_$AI(e,t=this,n,r){let i=this.strings,a=!1;if(i===void 0)e=k(this,e,t,0),a=!u(e)||e!==this._$AH&&e!==S,a&&(this._$AH=e);else{let r=e,o,s;for(e=i[0],o=0;o<i.length-1;o++)s=k(this,r[n+o],t,o),s===S&&(s=this._$AH[o]),a||=!u(s)||s!==this._$AH[o],s===C?e=C:e!==C&&(e+=(s??``)+i[o+1]),this._$AH[o]=s}a&&!r&&this.j(e)}j(e){e===C?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??``)}},N=class extends M{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===C?void 0:e}},P=class extends M{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==C)}},F=class extends M{constructor(e,t,n,r,i){super(e,t,n,r,i),this.type=5}_$AI(e,t=this){if((e=k(this,e,t,0)??C)===S)return;let n=this._$AH,r=e===C&&n!==C||e.capture!==n.capture||e.once!==n.once||e.passive!==n.passive,i=e!==C&&(n===C||r);r&&this.element.removeEventListener(this.name,this,n),i&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){typeof this._$AH==`function`?this._$AH.call(this.options?.host??this.element,e):this._$AH.handleEvent(e)}},I=class{constructor(e,t,n){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=n}get _$AU(){return this._$AM._$AU}_$AI(e){k(this,e)}},ee={M:i,P:a,A:o,C:1,L:D,R:A,D:f,V:k,I:j,H:M,N:P,U:F,B:N,F:I},te=e.litHtmlPolyfillSupport;te?.(O,j),(e.litHtmlVersions??=[]).push(`3.3.2`);var ne=(e,t,n)=>{let r=n?.renderBefore??t,i=r._$litPart$;if(i===void 0){let e=n?.renderBefore??null;r._$litPart$=i=new j(t.insertBefore(l(),e),e,void 0,n??{})}return i._$AI(e),i},re=e=>(t,n)=>{n===void 0?customElements.define(e,t):n.addInitializer(()=>{customElements.define(e,t)})},L=globalThis,R=L.ShadowRoot&&(L.ShadyCSS===void 0||L.ShadyCSS.nativeShadow)&&`adoptedStyleSheets`in Document.prototype&&`replace`in CSSStyleSheet.prototype,z=Symbol(),B=new WeakMap,ie=class{constructor(e,t,n){if(this._$cssResult$=!0,n!==z)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o,t=this.t;if(R&&e===void 0){let n=t!==void 0&&t.length===1;n&&(e=B.get(t)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),n&&B.set(t,e))}return e}toString(){return this.cssText}},ae=e=>new ie(typeof e==`string`?e:e+``,void 0,z),oe=(e,t)=>{if(R)e.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let n of t){let t=document.createElement(`style`),r=L.litNonce;r!==void 0&&t.setAttribute(`nonce`,r),t.textContent=n.cssText,e.appendChild(t)}},V=R?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t=``;for(let n of e.cssRules)t+=n.cssText;return ae(t)})(e):e,{is:se,defineProperty:ce,getOwnPropertyDescriptor:le,getOwnPropertyNames:ue,getOwnPropertySymbols:de,getPrototypeOf:fe}=Object,H=globalThis,U=H.trustedTypes,pe=U?U.emptyScript:``,me=H.reactiveElementPolyfillSupport,W=(e,t)=>e,G={toAttribute(e,t){switch(t){case Boolean:e=e?pe:null;break;case Object:case Array:e=e==null?e:JSON.stringify(e)}return e},fromAttribute(e,t){let n=e;switch(t){case Boolean:n=e!==null;break;case Number:n=e===null?null:Number(e);break;case Object:case Array:try{n=JSON.parse(e)}catch{n=null}}return n}},K=(e,t)=>!se(e,t),q={attribute:!0,type:String,converter:G,reflect:!1,useDefault:!1,hasChanged:K};Symbol.metadata??=Symbol(`metadata`),H.litPropertyMetadata??=new WeakMap;var J=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=q){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){let n=Symbol(),r=this.getPropertyDescriptor(e,n,t);r!==void 0&&ce(this.prototype,e,r)}}static getPropertyDescriptor(e,t,n){let{get:r,set:i}=le(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:r,set(t){let a=r?.call(this);i?.call(this,t),this.requestUpdate(e,a,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??q}static _$Ei(){if(this.hasOwnProperty(W(`elementProperties`)))return;let e=fe(this);e.finalize(),e.l!==void 0&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(W(`finalized`)))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(W(`properties`))){let e=this.properties,t=[...ue(e),...de(e)];for(let n of t)this.createProperty(n,e[n])}let e=this[Symbol.metadata];if(e!==null){let t=litPropertyMetadata.get(e);if(t!==void 0)for(let[e,n]of t)this.elementProperties.set(e,n)}this._$Eh=new Map;for(let[e,t]of this.elementProperties){let n=this._$Eu(e,t);n!==void 0&&this._$Eh.set(n,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){let t=[];if(Array.isArray(e)){let n=new Set(e.flat(1/0).reverse());for(let e of n)t.unshift(V(e))}else e!==void 0&&t.push(V(e));return t}static _$Eu(e,t){let n=t.attribute;return!1===n?void 0:typeof n==`string`?n:typeof e==`string`?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),this.renderRoot!==void 0&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){let e=new Map,t=this.constructor.elementProperties;for(let n of t.keys())this.hasOwnProperty(n)&&(e.set(n,this[n]),delete this[n]);e.size>0&&(this._$Ep=e)}createRenderRoot(){let e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return oe(e,this.constructor.elementStyles),e}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,n){this._$AK(e,n)}_$ET(e,t){let n=this.constructor.elementProperties.get(e),r=this.constructor._$Eu(e,n);if(r!==void 0&&!0===n.reflect){let i=(n.converter?.toAttribute===void 0?G:n.converter).toAttribute(t,n.type);this._$Em=e,i==null?this.removeAttribute(r):this.setAttribute(r,i),this._$Em=null}}_$AK(e,t){let n=this.constructor,r=n._$Eh.get(e);if(r!==void 0&&this._$Em!==r){let e=n.getPropertyOptions(r),i=typeof e.converter==`function`?{fromAttribute:e.converter}:e.converter?.fromAttribute===void 0?G:e.converter;this._$Em=r;let a=i.fromAttribute(t,e.type);this[r]=a??this._$Ej?.get(r)??a,this._$Em=null}}requestUpdate(e,t,n,r=!1,i){if(e!==void 0){let a=this.constructor;if(!1===r&&(i=this[e]),n??=a.getPropertyOptions(e),!((n.hasChanged??K)(i,t)||n.useDefault&&n.reflect&&i===this._$Ej?.get(e)&&!this.hasAttribute(a._$Eu(e,n))))return;this.C(e,t,n)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:n,reflect:r,wrapped:i},a){n&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,a??t??this[e]),!0!==i||a!==void 0)||(this._$AL.has(e)||(this.hasUpdated||n||(t=void 0),this._$AL.set(e,t)),!0===r&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}let e=this.constructor.elementProperties;if(e.size>0)for(let[t,n]of e){let{wrapped:e}=n,r=this[t];!0!==e||this._$AL.has(t)||r===void 0||this.C(t,void 0,n,r)}}let e=!1,t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(e=>e.hostUpdate?.()),this.update(t)):this._$EM()}catch(t){throw e=!1,this._$EM(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(e){}firstUpdated(e){}};J.elementStyles=[],J.shadowRootOptions={mode:`open`},J[W(`elementProperties`)]=new Map,J[W(`finalized`)]=new Map,me?.({ReactiveElement:J}),(H.reactiveElementVersions??=[]).push(`2.1.2`);var he={attribute:!0,type:String,converter:G,reflect:!1,hasChanged:K},ge=(e=he,t,n)=>{let{kind:r,metadata:i}=n,a=globalThis.litPropertyMetadata.get(i);if(a===void 0&&globalThis.litPropertyMetadata.set(i,a=new Map),r===`setter`&&((e=Object.create(e)).wrapped=!0),a.set(n.name,e),r===`accessor`){let{name:r}=n;return{set(n){let i=t.get.call(this);t.set.call(this,n),this.requestUpdate(r,i,e,!0,n)},init(t){return t!==void 0&&this.C(r,void 0,e,t),t}}}if(r===`setter`){let{name:r}=n;return function(n){let i=this[r];t.call(this,n),this.requestUpdate(r,i,e,!0,n)}}throw Error(`Unsupported decorator location: `+r)};function Y(e){return(t,n)=>typeof n==`object`?ge(e,t,n):((e,t,n)=>{let r=t.hasOwnProperty(n);return t.constructor.createProperty(n,e),r?Object.getOwnPropertyDescriptor(t,n):void 0})(e,t,n)}function _e(e){return Y({...e,state:!0,attribute:!1})}var X=globalThis,Z=class extends J{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){let t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=ne(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return S}};Z._$litElement$=!0,Z.finalized=!0,X.litElementHydrateSupport?.({LitElement:Z});var ve=X.litElementPolyfillSupport;ve?.({LitElement:Z}),(X.litElementVersions??=[]).push(`4.2.2`);var ye={example:{hi:`Hei!`},generic:{from:`Fra`,to:`Til`},calendar:{buttonAltText:`Åpne kalender`,deleteDate:`Fjern dato`},dates:{month:`Måned`,year:`År`,days:[`Mandag`,`Tirsdag`,`Onsdag`,`Torsdag`,`Fredag`,`Lørdag`,`Søndag`],daysShort:[`Man`,`Tir`,`Ons`,`Tor`,`Fre`,`Lør`,`Søn`],months:[`Januar`,`Februar`,`Mars`,`April`,`Mai`,`Juni`,`Juli`,`August`,`September`,`Oktober`,`November`,`Desember`],monthsShort:[`Jan`,`Feb`,`Mar`,`Apr`,`Mai`,`Jun`,`Jul`,`Aug`,`Sep`,`Okt`,`Nov`,`Des`],week:`Uke`,prevMonth:`Forrige måned`,nextMonth:`Neste måned`},timepicker:{hours:`Timer`,minutes:`Minutter`,openPicker:`Åpne tidspunkt-velger`,prevTime:`Forrige tidspunkt`,nextTime:`Neste tidspunkt`,selectTime:`Velg tidspunkt`},forms:{search:{placeholder:`Søk…`},labels:{optional:`Valgfritt`,required:`Må fylles ut`},messages:{required:`Dette feltet er påkrevd`,invalid:`Ugyldig verdi`,invalidPattern:`Ugyldig format`,tooShort:`For kort`,tooLong:`For lang`,rangeUnderflow:`For lav verdi`,rangeOverflow:`For høy verdi`,stepMismatch:`Må treffe på steget som er definert i elementet`,timeStepMismatch:`Må treffe på et steg, for eksempel 0, {step} minutter`,timeStepMismatchHour:`Må treffe på hver hele time`,timeStepMismatchHalfHour:`Må treffe på hver hele eller halve time`,rangeUnderflowMin:`Verdien må være større enn eller lik {min}.`,rangeOverflowMax:`Verdien må være mindre enn eller lik {max}.`,dateUnderflow:`For tidlig dato`,dateOverflow:`For sen dato`},helptext:{helptextDropdownButton:`Les mer`},date:{multiple:`Her kan du velge flere datoer. Trykk komma eller enter når du har skrevet inn en dato.`}}};function Q(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var $=class extends Z{constructor(...e){super(...e),this.strings=ye,this.role=null}hotReplacedCallback(){this.requestUpdate()}};Q([Y({type:Object})],$.prototype,`strings`,void 0),Q([Y({type:String})],$.prototype,`role`,void 0);var be=class extends ${createRenderRoot(){return this}};Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return re}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return ee}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return S}});
@@ -1 +0,0 @@
1
- const e=require(`./element-DjtxO-1r.cjs`),t=require(`./directive-CJ2giQBZ.cjs`),n=require(`./async-directive-B9P1Qa0k.cjs`);function r(e){return e.classList&&(e.classList.contains(`_dialog_overlay`)||e.classList.contains(`backdrop`))?!0:typeof e.hasAttribute==`function`&&e.hasAttribute(`data-skip`)}function i(e){return e.nodeName===`OPTION`||e.nodeName===`DATA`}function a(e){return e.nodeType===Node.TEXT_NODE&&e.nodeValue?.trim()!==``}var o=new WeakMap;function s(e){let t=o.get(e);return t||(t=new f(e),o.set(e,t)),t}var c=Symbol(`default`);function l(e){return e===void 0?c:e}function u(e,t){if(e.nodeType===Node.COMMENT_NODE)return!1;if(e.nodeType===Node.TEXT_NODE)return a(e)?(d(t,c,e),!0):!1;if(e.nodeType===Node.ELEMENT_NODE){let n=e;if(r(n)||i(n))return!1;if(n instanceof HTMLTemplateElement){let e=Array.from(n.content.childNodes),r=l(n.getAttribute(`slot`)??void 0);for(let n of e)d(t,r,n);return!0}let a=n.getAttribute(`slot`);return d(t,a===null?c:l(a),e),!0}return!1}function d(e,t,n){let r=e.get(t);r||(r=[],e.set(t,r)),r.push(n)}var f=class e{static{this.PLACEHOLDER_PREFIX=`pkt-slot`}constructor(e){this.observer=null,this.nodesBySlot=new Map,this.directives=new Set,this.observing=!1,this.trackedNodes=new Set,this.generation=0,this.initialCollectionDone=!1,this.processingMutations=!1,this.placeholderToNode=new Map,this.nodeToPlaceholder=new Map,this.host=e}collectNodes(){if(this.initialCollectionDone)return;this.initialCollectionDone=!0,this.generation++;let e=Array.from(this.host.childNodes);for(let t of e)u(t,this.nodesBySlot)&&this.trackedNodes.add(t)}addDirective(e){this.directives.add(e),this.startObserving()}removeDirective(e){this.directives.delete(e),this.directives.size===0&&this.stopObserving()}getNodes(e){return this.nodesBySlot.get(l(e))??[]}hasContent(e){return this.getNodes(e).length>0}ensurePlaceholder(t){if(this.nodeToPlaceholder.has(t)||t.parentNode!==this.host)return;let n=document.createComment(e.PLACEHOLDER_PREFIX);this.host.insertBefore(n,t),this.placeholderToNode.set(n,t),this.nodeToPlaceholder.set(t,n)}startObserving(){this.observing||(this.observing=!0,setTimeout(()=>{this.observing&&(this.observer=new MutationObserver(e=>{this.handleMutations(e)}),this.observer.observe(this.host,{childList:!0}))},0))}stopObserving(){this.observing&&(this.observing=!1,this.observer?.disconnect(),this.observer=null)}handleMutations(e){if(this.processingMutations)return;this.processingMutations=!0;let t=!1;for(let n of e)if(n.target===this.host){for(let e of n.removedNodes){let n=this.placeholderToNode.get(e);if(n){n.parentNode?.removeChild(n),this.trackedNodes.delete(n),this.removeFromSlots(n),this.placeholderToNode.delete(e),this.nodeToPlaceholder.delete(n),t=!0;continue}if(this.trackedNodes.has(e)){this.trackedNodes.delete(e),this.removeFromSlots(e);let n=this.nodeToPlaceholder.get(e);n&&(n.parentNode?.removeChild(n),this.placeholderToNode.delete(n),this.nodeToPlaceholder.delete(e)),t=!0}}for(let e of n.addedNodes)this.placeholderToNode.has(e)||!this.trackedNodes.has(e)&&this.isUserContent(e)&&u(e,this.nodesBySlot)&&(this.trackedNodes.add(e),t=!0)}t&&(this.generation++,this.notifyDirectives()),this.observer?.takeRecords(),this.processingMutations=!1}isUserContent(e){if(e.nodeType===Node.COMMENT_NODE)return!1;if(e.nodeType===Node.TEXT_NODE)return a(e);if(e.nodeType===Node.ELEMENT_NODE){let t=e;return!(r(t)||i(t))}return!1}removeFromSlots(e){for(let[t,n]of this.nodesBySlot){let r=n.indexOf(e);if(r!==-1){n.splice(r,1),n.length===0&&this.nodesBySlot.delete(t);return}}}notifyDirectives(){for(let e of this.directives)e.handleNodesChanged()}},p=class extends n.t{constructor(e){if(super(e),this.manager=null,this.lastGeneration=-1,e.type!==t.r.CHILD)throw Error(`slotContent() can only be used in child expressions`)}render(t,n){return e.u}update(e,[t,n]){return this.slotName=n,this.manager||(this.manager=s(t),this.manager.collectNodes(),this.manager.addDirective(this)),this.ensurePlaceholders(),this.getNodesOrNoChange()}handleNodesChanged(){if(!this.isConnected||!this.manager)return;this.ensurePlaceholders();let t=this.getNodesOrNoChange();t!==e.u&&this.setValue(t)}ensurePlaceholders(){if(!this.manager)return;let e=this.manager.getNodes(this.slotName);for(let t of e)this.manager.ensurePlaceholder(t)}disconnected(){this.manager?.removeDirective(this),this.manager=null,this.lastGeneration=-1}reconnected(){}getNodesOrNoChange(){if(!this.manager)return e.u;let t=this.manager.generation;return t===this.lastGeneration?e.u:(this.lastGeneration=t,this.manager.getNodes(this.slotName))}},m=t.t(p),h=class extends e.t{connectedCallback(){s(this).collectNodes(),super.connectedCallback()}hasSlotContent(e){return s(this).hasContent(e)}};Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return h}});