@public-ui/components 4.5.0-rc.4 → 4.5.0-rc.5

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 (516) hide show
  1. package/assets/kolicons/kolicons.eot +0 -0
  2. package/assets/kolicons/kolicons.ttf +0 -0
  3. package/assets/kolicons/kolicons.woff +0 -0
  4. package/assets/kolicons/kolicons.woff2 +0 -0
  5. package/assets/kolicons/style.css +6 -6
  6. package/custom-elements.json +1 -1
  7. package/dist/cjs/{Heading-CmJwWzTx.js → Heading-DG2wWECB.js} +3 -3
  8. package/dist/cjs/{Heading-CmJwWzTx.js.map → Heading-DG2wWECB.js.map} +1 -1
  9. package/dist/cjs/{api-CimiLGvb.js → api-8kjgnnU3.js} +8 -8
  10. package/dist/cjs/{api-CimiLGvb.js.map → api-8kjgnnU3.js.map} +1 -1
  11. package/dist/cjs/{api-CGIOreYK.js → api-C2rTkOz2.js} +12 -12
  12. package/dist/cjs/{api-CGIOreYK.js.map → api-C2rTkOz2.js.map} +1 -1
  13. package/dist/cjs/{app-globals-DXKl7Bxk.js → app-globals-B1xqi4rZ.js} +4 -4
  14. package/dist/cjs/{app-globals-DXKl7Bxk.js.map → app-globals-B1xqi4rZ.js.map} +1 -1
  15. package/dist/cjs/{base-3S-emPWZ.js → base-BMrlvKIO.js} +16 -16
  16. package/dist/cjs/{base-3S-emPWZ.js.map → base-BMrlvKIO.js.map} +1 -1
  17. package/dist/cjs/{base-BCEIzc57.js → base-Cea-xkFy.js} +5 -5
  18. package/dist/cjs/{base-BCEIzc57.js.map → base-Cea-xkFy.js.map} +1 -1
  19. package/dist/cjs/{base-DD2zVHk7.js → base-OMJLjz5u.js} +4 -4
  20. package/dist/cjs/{base-DD2zVHk7.js.map → base-OMJLjz5u.js.map} +1 -1
  21. package/dist/cjs/{base-web-component-8qVyDl6W.js → base-web-component-BCEKzbV3.js} +7 -7
  22. package/dist/cjs/{base-web-component-8qVyDl6W.js.map → base-web-component-BCEKzbV3.js.map} +1 -1
  23. package/dist/cjs/{base-web-component-CtQdH3PJ.js → base-web-component-CpH4iN97.js} +5 -5
  24. package/dist/cjs/{base-web-component-CtQdH3PJ.js.map → base-web-component-CpH4iN97.js.map} +1 -1
  25. package/dist/cjs/{base-CVLHbu6O.js → base-xR4eDUJg.js} +4 -4
  26. package/dist/cjs/{base-CVLHbu6O.js.map → base-xR4eDUJg.js.map} +1 -1
  27. package/dist/cjs/{behavior-B9JuvM3I.js → behavior-XywM4z8h.js} +3 -3
  28. package/dist/cjs/{behavior-B9JuvM3I.js.map → behavior-XywM4z8h.js.map} +1 -1
  29. package/dist/cjs/{component-CCZ7pXRv.js → component-04gQVLQ1.js} +4 -4
  30. package/dist/cjs/{component-CCZ7pXRv.js.map → component-04gQVLQ1.js.map} +1 -1
  31. package/dist/cjs/{component-B18PknAn.js → component-BB3YHW86.js} +3 -3
  32. package/dist/cjs/{component-B18PknAn.js.map → component-BB3YHW86.js.map} +1 -1
  33. package/dist/cjs/{component-GzpJi_tI.js → component-BLnwCgKh.js} +7 -7
  34. package/dist/cjs/{component-GzpJi_tI.js.map → component-BLnwCgKh.js.map} +1 -1
  35. package/dist/cjs/{component-BT9bnLTG.js → component-Bprn2Dws.js} +4 -4
  36. package/dist/cjs/{component-BT9bnLTG.js.map → component-Bprn2Dws.js.map} +1 -1
  37. package/dist/cjs/{component-B368JCB7.js → component-CJDDp8K2.js} +3 -3
  38. package/dist/cjs/{component-B368JCB7.js.map → component-CJDDp8K2.js.map} +1 -1
  39. package/dist/cjs/{component-D0N2WBmH.js → component-ClYrtAkb.js} +5 -5
  40. package/dist/cjs/{component-D0N2WBmH.js.map → component-ClYrtAkb.js.map} +1 -1
  41. package/dist/cjs/{component-BzMxgoHU.js → component-DAfsN5m4.js} +5 -5
  42. package/dist/cjs/{component-BzMxgoHU.js.map → component-DAfsN5m4.js.map} +1 -1
  43. package/dist/cjs/{component-BCFL2G_g.js → component-DDlbarYZ.js} +4 -4
  44. package/dist/cjs/{component-BCFL2G_g.js.map → component-DDlbarYZ.js.map} +1 -1
  45. package/dist/cjs/{component-DXv0HPeN.js → component-DlN2bfiT.js} +5 -5
  46. package/dist/cjs/{component-DXv0HPeN.js.map → component-DlN2bfiT.js.map} +1 -1
  47. package/dist/cjs/{component-DlgM4oEf.js → component-KIiCY2eY.js} +7 -7
  48. package/dist/cjs/{component-DlgM4oEf.js.map → component-KIiCY2eY.js.map} +1 -1
  49. package/dist/cjs/{component-CH432A4c.js → component-i9zUYU8M.js} +3 -3
  50. package/dist/cjs/{component-CH432A4c.js.map → component-i9zUYU8M.js.map} +1 -1
  51. package/dist/cjs/{component-C7NI5Iy5.js → component-sZUV7dBr.js} +3 -3
  52. package/dist/cjs/{component-C7NI5Iy5.js.map → component-sZUV7dBr.js.map} +1 -1
  53. package/dist/cjs/{dev.utils-BoFqqn8Y.js → dev.utils-BVqwixuA.js} +3 -3
  54. package/dist/cjs/{dev.utils-BoFqqn8Y.js.map → dev.utils-BVqwixuA.js.map} +1 -1
  55. package/dist/cjs/{devtools-C-m9X0nz.js → devtools-DxqqXOxW.js} +4 -4
  56. package/dist/cjs/{devtools-C-m9X0nz.js.map → devtools-DxqqXOxW.js.map} +1 -1
  57. package/dist/cjs/{field-control-MhWSen3X.js → field-control-CTOjt7vn.js} +8 -8
  58. package/dist/cjs/{field-control-MhWSen3X.js.map → field-control-CTOjt7vn.js.map} +1 -1
  59. package/dist/cjs/{group-7951SxEA.js → group-VoBXFtaB.js} +5 -5
  60. package/dist/cjs/{group-7951SxEA.js.map → group-VoBXFtaB.js.map} +1 -1
  61. package/dist/cjs/{index-DO9lYEcH.js → index-Dv7OF9AY.js} +3 -3
  62. package/dist/cjs/{index-DO9lYEcH.js.map → index-Dv7OF9AY.js.map} +1 -1
  63. package/dist/cjs/{input-DCNSFlzf.js → input-BeQNLD9x.js} +5 -5
  64. package/dist/cjs/{input-DCNSFlzf.js.map → input-BeQNLD9x.js.map} +1 -1
  65. package/dist/cjs/{input-container-AUYMUXlO.js → input-container-BXz_irj1.js} +7 -7
  66. package/dist/cjs/{input-container-AUYMUXlO.js.map → input-container-BXz_irj1.js.map} +1 -1
  67. package/dist/cjs/{item-C63M9WqZ.js → item-C_mVKQHN.js} +4 -4
  68. package/dist/cjs/{item-C63M9WqZ.js.map → item-C_mVKQHN.js.map} +1 -1
  69. package/dist/cjs/{item-CAtWa-Nr.js → item-Caz7PzHo.js} +4 -4
  70. package/dist/cjs/{item-CAtWa-Nr.js.map → item-Caz7PzHo.js.map} +1 -1
  71. package/dist/cjs/{item-CXS6hLg9.js → item-DksElMyT.js} +8 -8
  72. package/dist/cjs/{item-CXS6hLg9.js.map → item-DksElMyT.js.map} +1 -1
  73. package/dist/cjs/{item-BPM40Vsi.js → item-P6pvO7ia.js} +3 -3
  74. package/dist/cjs/{item-BPM40Vsi.js.map → item-P6pvO7ia.js.map} +1 -1
  75. package/dist/cjs/kol-abbr.cjs.entry.js +2 -2
  76. package/dist/cjs/kol-accordion.cjs.entry.js +7 -7
  77. package/dist/cjs/kol-alert.cjs.entry.js +11 -11
  78. package/dist/cjs/kol-avatar.cjs.entry.js +1 -1
  79. package/dist/cjs/kol-badge.cjs.entry.js +10 -10
  80. package/dist/cjs/kol-breadcrumb.cjs.entry.js +9 -9
  81. package/dist/cjs/kol-button-link.cjs.entry.js +10 -10
  82. package/dist/cjs/kol-button.cjs.entry.js +10 -10
  83. package/dist/cjs/kol-card.cjs.entry.js +11 -11
  84. package/dist/cjs/kol-click-button.cjs.entry.js +2 -2
  85. package/dist/cjs/kol-combobox.cjs.entry.js +18 -18
  86. package/dist/cjs/kol-details.cjs.entry.js +7 -7
  87. package/dist/cjs/kol-dialog.cjs.entry.js +13 -13
  88. package/dist/cjs/kol-drawer.cjs.entry.js +12 -12
  89. package/dist/cjs/kol-form.cjs.entry.js +12 -12
  90. package/dist/cjs/kol-heading.cjs.entry.js +1 -1
  91. package/dist/cjs/kol-icon.cjs.entry.js +3 -3
  92. package/dist/cjs/kol-image.cjs.entry.js +1 -1
  93. package/dist/cjs/kol-input-checkbox.cjs.entry.js +17 -17
  94. package/dist/cjs/kol-input-color.cjs.entry.js +18 -18
  95. package/dist/cjs/kol-input-date.cjs.entry.js +18 -18
  96. package/dist/cjs/kol-input-email.cjs.entry.js +20 -20
  97. package/dist/cjs/kol-input-file.cjs.entry.js +17 -17
  98. package/dist/cjs/kol-input-number.cjs.entry.js +18 -18
  99. package/dist/cjs/kol-input-password.cjs.entry.js +20 -20
  100. package/dist/cjs/kol-input-radio.cjs.entry.js +17 -17
  101. package/dist/cjs/kol-input-range.cjs.entry.js +18 -18
  102. package/dist/cjs/kol-input-text.cjs.entry.js +20 -20
  103. package/dist/cjs/kol-kolibri.cjs.entry.js +2 -2
  104. package/dist/cjs/kol-link-button.cjs.entry.js +10 -10
  105. package/dist/cjs/kol-link.cjs.entry.js +10 -10
  106. package/dist/cjs/kol-meter.cjs.entry.js +1 -1
  107. package/dist/cjs/kol-modal.cjs.entry.js +13 -13
  108. package/dist/cjs/kol-nav.cjs.entry.js +13 -13
  109. package/dist/cjs/kol-pagination.cjs.entry.js +18 -18
  110. package/dist/cjs/kol-popover-button.cjs.entry.js +11 -11
  111. package/dist/cjs/kol-progress.cjs.entry.js +1 -1
  112. package/dist/cjs/kol-quote.cjs.entry.js +1 -1
  113. package/dist/cjs/kol-select.cjs.entry.js +17 -17
  114. package/dist/cjs/kol-single-select.cjs.entry.js +18 -18
  115. package/dist/cjs/kol-skeleton.cjs.entry.js +2 -2
  116. package/dist/cjs/kol-skip-nav.cjs.entry.js +9 -9
  117. package/dist/cjs/kol-spin.cjs.entry.js +3 -3
  118. package/dist/cjs/kol-split-button.cjs.entry.js +12 -12
  119. package/dist/cjs/kol-table-stateful.cjs.entry.js +25 -25
  120. package/dist/cjs/kol-table-stateless.cjs.entry.js +19 -19
  121. package/dist/cjs/kol-tabs.cjs.entry.js +14 -26
  122. package/dist/cjs/kol-tabs.entry.cjs.js.map +1 -1
  123. package/dist/cjs/kol-textarea.cjs.entry.js +17 -17
  124. package/dist/cjs/kol-toast-container.cjs.entry.js +11 -11
  125. package/dist/cjs/kol-toolbar.cjs.entry.js +11 -11
  126. package/dist/cjs/kol-tooltip-wc.cjs.entry.js +4 -4
  127. package/dist/cjs/kol-tree-item.cjs.entry.js +9 -9
  128. package/dist/cjs/kol-tree.cjs.entry.js +1 -1
  129. package/dist/cjs/kol-version.cjs.entry.js +9 -9
  130. package/dist/cjs/kolibri.cjs.js +2 -2
  131. package/dist/cjs/loader.cjs.js +2 -2
  132. package/dist/cjs/{resolve-props-DrG_HqJv.js → resolve-props-DS3EE-fd.js} +3 -3
  133. package/dist/cjs/{resolve-props-DrG_HqJv.js.map → resolve-props-DS3EE-fd.js.map} +1 -1
  134. package/dist/cjs/{scroll-lock-oNylqons.js → scroll-lock-B8N6TEH3.js} +3 -3
  135. package/dist/cjs/{scroll-lock-oNylqons.js.map → scroll-lock-B8N6TEH3.js.map} +1 -1
  136. package/dist/cjs/{suggestions-Dtu6i-Ff.js → suggestions-CC1tzlom.js} +4 -4
  137. package/dist/cjs/{suggestions-Dtu6i-Ff.js.map → suggestions-CC1tzlom.js.map} +1 -1
  138. package/dist/cjs/test-component.cjs.entry.js +1 -1
  139. package/dist/cjs/{toggle-handler-CE-IOVjQ.js → toggle-handler-BzdKX5H6.js} +5 -5
  140. package/dist/cjs/{toggle-handler-CE-IOVjQ.js.map → toggle-handler-BzdKX5H6.js.map} +1 -1
  141. package/dist/collection/components/accordion/style.css +2 -2
  142. package/dist/collection/components/alert/style.css +2 -2
  143. package/dist/collection/components/badge/style.css +2 -2
  144. package/dist/collection/components/breadcrumb/style.css +2 -2
  145. package/dist/collection/components/button/style.css +2 -2
  146. package/dist/collection/components/button-link/style.css +2 -2
  147. package/dist/collection/components/card/style.css +2 -2
  148. package/dist/collection/components/combobox/style.css +2 -2
  149. package/dist/collection/components/details/style.css +2 -2
  150. package/dist/collection/components/dialog/style.css +2 -2
  151. package/dist/collection/components/drawer/style.css +2 -2
  152. package/dist/collection/components/form/style.css +2 -2
  153. package/dist/collection/components/icon/style.css +2 -2
  154. package/dist/collection/components/input-checkbox/style.css +2 -2
  155. package/dist/collection/components/input-color/style.css +2 -2
  156. package/dist/collection/components/input-date/style.css +2 -2
  157. package/dist/collection/components/input-email/style.css +2 -2
  158. package/dist/collection/components/input-file/style.css +2 -2
  159. package/dist/collection/components/input-number/style.css +2 -2
  160. package/dist/collection/components/input-password/style.css +2 -2
  161. package/dist/collection/components/input-radio/style.css +2 -2
  162. package/dist/collection/components/input-range/style.css +2 -2
  163. package/dist/collection/components/input-text/style.css +2 -2
  164. package/dist/collection/components/link/style.css +2 -2
  165. package/dist/collection/components/link-button/style.css +2 -2
  166. package/dist/collection/components/modal/style.css +2 -2
  167. package/dist/collection/components/nav/style.css +2 -2
  168. package/dist/collection/components/pagination/style.css +2 -2
  169. package/dist/collection/components/popover-button/style.css +2 -2
  170. package/dist/collection/components/select/style.css +2 -2
  171. package/dist/collection/components/single-select/style.css +2 -2
  172. package/dist/collection/components/skip-nav/style.css +2 -2
  173. package/dist/collection/components/split-button/style.css +2 -2
  174. package/dist/collection/components/table-stateful/style.css +2 -2
  175. package/dist/collection/components/table-stateless/style.css +2 -2
  176. package/dist/collection/components/tabs/component.js +5 -17
  177. package/dist/collection/components/tabs/component.js.map +1 -1
  178. package/dist/collection/components/tabs/style.css +2 -2
  179. package/dist/collection/components/textarea/style.css +2 -2
  180. package/dist/collection/components/toaster/style.css +2 -2
  181. package/dist/collection/components/toolbar/style.css +2 -2
  182. package/dist/collection/components/tree-item/style.css +2 -2
  183. package/dist/collection/components/version/style.css +2 -2
  184. package/dist/components/kol-accordion.js +1 -1
  185. package/dist/components/kol-alert.js +1 -1
  186. package/dist/components/kol-badge.js +1 -1
  187. package/dist/components/kol-breadcrumb.js +1 -1
  188. package/dist/components/kol-button-link.js +1 -1
  189. package/dist/components/kol-button.js +1 -1
  190. package/dist/components/kol-card.js +1 -1
  191. package/dist/components/kol-combobox.js +1 -1
  192. package/dist/components/kol-details.js +1 -1
  193. package/dist/components/kol-dialog.js +1 -1
  194. package/dist/components/kol-drawer.js +1 -1
  195. package/dist/components/kol-form.js +1 -1
  196. package/dist/components/kol-icon.js +1 -1
  197. package/dist/components/kol-input-checkbox.js +1 -1
  198. package/dist/components/kol-input-color.js +1 -1
  199. package/dist/components/kol-input-date.js +1 -1
  200. package/dist/components/kol-input-email.js +1 -1
  201. package/dist/components/kol-input-file.js +1 -1
  202. package/dist/components/kol-input-number.js +1 -1
  203. package/dist/components/kol-input-password.js +1 -1
  204. package/dist/components/kol-input-radio.js +1 -1
  205. package/dist/components/kol-input-range.js +1 -1
  206. package/dist/components/kol-input-text.js +1 -1
  207. package/dist/components/kol-link-button.js +1 -1
  208. package/dist/components/kol-link.js +1 -1
  209. package/dist/components/kol-modal.js +1 -1
  210. package/dist/components/kol-nav.js +1 -1
  211. package/dist/components/kol-pagination.js +1 -1
  212. package/dist/components/kol-popover-button.js +1 -1
  213. package/dist/components/kol-select.js +1 -1
  214. package/dist/components/kol-single-select.js +1 -1
  215. package/dist/components/kol-skip-nav.js +1 -1
  216. package/dist/components/kol-split-button.js +1 -1
  217. package/dist/components/kol-table-stateful.js +1 -1
  218. package/dist/components/kol-table-stateless.js +1 -1
  219. package/dist/components/kol-tabs.js +6 -18
  220. package/dist/components/kol-tabs.js.map +1 -1
  221. package/dist/components/kol-textarea.js +1 -1
  222. package/dist/components/kol-toast-container.js +1 -1
  223. package/dist/components/kol-toolbar.js +1 -1
  224. package/dist/components/kol-tree-item.js +1 -1
  225. package/dist/components/kol-version.js +1 -1
  226. package/dist/esm/{Heading-D2EH5Vz9.js → Heading-DAPZwXCt.js} +3 -3
  227. package/dist/esm/{Heading-D2EH5Vz9.js.map → Heading-DAPZwXCt.js.map} +1 -1
  228. package/dist/esm/{api-DScxu3ou.js → api-DueenSkb.js} +12 -12
  229. package/dist/{kolibri/api-DScxu3ou.js.map → esm/api-DueenSkb.js.map} +1 -1
  230. package/dist/esm/{api-CN_pBHgH.js → api-zFp24D1x.js} +8 -8
  231. package/dist/esm/{api-CN_pBHgH.js.map → api-zFp24D1x.js.map} +1 -1
  232. package/dist/esm/{app-globals-CddJRb3M.js → app-globals-CYRfyhVc.js} +4 -4
  233. package/dist/esm/{app-globals-CddJRb3M.js.map → app-globals-CYRfyhVc.js.map} +1 -1
  234. package/dist/esm/{base-DHBpPWDW.js → base-AvIGo8Mp.js} +16 -16
  235. package/dist/{kolibri/base-DHBpPWDW.js.map → esm/base-AvIGo8Mp.js.map} +1 -1
  236. package/dist/esm/{base-B4XSDJBd.js → base-BU2iT3jv.js} +5 -5
  237. package/dist/{kolibri/base-B4XSDJBd.js.map → esm/base-BU2iT3jv.js.map} +1 -1
  238. package/dist/esm/{base-DFtj5G32.js → base-BUu1gNpy.js} +4 -4
  239. package/dist/{kolibri/base-DFtj5G32.js.map → esm/base-BUu1gNpy.js.map} +1 -1
  240. package/dist/esm/{base-Jvi_AWqL.js → base-CjlYs5Fb.js} +4 -4
  241. package/dist/{kolibri/base-Jvi_AWqL.js.map → esm/base-CjlYs5Fb.js.map} +1 -1
  242. package/dist/esm/{base-web-component-D_VU8SGY.js → base-web-component-BEf83bnu.js} +7 -7
  243. package/dist/esm/{base-web-component-D_VU8SGY.js.map → base-web-component-BEf83bnu.js.map} +1 -1
  244. package/dist/esm/{base-web-component-t9oDjRt3.js → base-web-component-C2q-dSOg.js} +5 -5
  245. package/dist/esm/{base-web-component-t9oDjRt3.js.map → base-web-component-C2q-dSOg.js.map} +1 -1
  246. package/dist/esm/{behavior-Dpui_R-v.js → behavior-DCpLHoHs.js} +3 -3
  247. package/dist/{kolibri/behavior-Dpui_R-v.js.map → esm/behavior-DCpLHoHs.js.map} +1 -1
  248. package/dist/esm/{component-DSKwp72M.js → component-9XV7ykPK.js} +4 -4
  249. package/dist/{kolibri/component-DSKwp72M.js.map → esm/component-9XV7ykPK.js.map} +1 -1
  250. package/dist/esm/{component-BauANlCU.js → component-B5MUeex-.js} +3 -3
  251. package/dist/{kolibri/component-BauANlCU.js.map → esm/component-B5MUeex-.js.map} +1 -1
  252. package/dist/esm/{component-B5OmtChm.js → component-BR-6tKab.js} +3 -3
  253. package/dist/esm/{component-B5OmtChm.js.map → component-BR-6tKab.js.map} +1 -1
  254. package/dist/esm/{component-ArZwqu6c.js → component-Bj13sPTL.js} +4 -4
  255. package/dist/esm/{component-ArZwqu6c.js.map → component-Bj13sPTL.js.map} +1 -1
  256. package/dist/esm/{component-DWiKUdpa.js → component-BrOA7gRZ.js} +7 -7
  257. package/dist/esm/{component-DWiKUdpa.js.map → component-BrOA7gRZ.js.map} +1 -1
  258. package/dist/esm/{component-CoN6ZwTo.js → component-CQJ_jIZm.js} +7 -7
  259. package/dist/esm/{component-CoN6ZwTo.js.map → component-CQJ_jIZm.js.map} +1 -1
  260. package/dist/esm/{component-D6Z14V5i.js → component-Cqcw7JSO.js} +5 -5
  261. package/dist/{kolibri/component-D6Z14V5i.js.map → esm/component-Cqcw7JSO.js.map} +1 -1
  262. package/dist/esm/{component-GqGXpjMZ.js → component-Cy_xOMLd.js} +3 -3
  263. package/dist/esm/{component-GqGXpjMZ.js.map → component-Cy_xOMLd.js.map} +1 -1
  264. package/dist/esm/{component-6cLprNJZ.js → component-DCK-2RQ3.js} +3 -3
  265. package/dist/esm/{component-6cLprNJZ.js.map → component-DCK-2RQ3.js.map} +1 -1
  266. package/dist/esm/{component-D0Coq_zE.js → component-DRUoRfdO.js} +5 -5
  267. package/dist/{kolibri/component-D0Coq_zE.js.map → esm/component-DRUoRfdO.js.map} +1 -1
  268. package/dist/esm/{component-DbsunX7x.js → component-D_xOkOl6.js} +4 -4
  269. package/dist/{kolibri/component-DbsunX7x.js.map → esm/component-D_xOkOl6.js.map} +1 -1
  270. package/dist/esm/{component-CChFD3b2.js → component-Droc76Vh.js} +5 -5
  271. package/dist/{kolibri/component-CChFD3b2.js.map → esm/component-Droc76Vh.js.map} +1 -1
  272. package/dist/esm/{dev.utils-DVPKJwhh.js → dev.utils-CWEYl26B.js} +3 -3
  273. package/dist/{kolibri/dev.utils-DVPKJwhh.js.map → esm/dev.utils-CWEYl26B.js.map} +1 -1
  274. package/dist/esm/{devtools-Ctvg6SnM.js → devtools-BfiT_Mej.js} +4 -4
  275. package/dist/{kolibri/devtools-Ctvg6SnM.js.map → esm/devtools-BfiT_Mej.js.map} +1 -1
  276. package/dist/esm/{field-control-CJ-9C7AK.js → field-control-BvFIxA5C.js} +8 -8
  277. package/dist/{kolibri/field-control-CJ-9C7AK.js.map → esm/field-control-BvFIxA5C.js.map} +1 -1
  278. package/dist/esm/{group-6LOQ2Eed.js → group-DzNZiu3R.js} +5 -5
  279. package/dist/esm/{group-6LOQ2Eed.js.map → group-DzNZiu3R.js.map} +1 -1
  280. package/dist/esm/{index-BtYjJomD.js → index-CyLMYdnq.js} +3 -3
  281. package/dist/{kolibri/index-BtYjJomD.js.map → esm/index-CyLMYdnq.js.map} +1 -1
  282. package/dist/esm/{input-DispvARh.js → input-C55z9I-y.js} +5 -5
  283. package/dist/esm/{input-DispvARh.js.map → input-C55z9I-y.js.map} +1 -1
  284. package/dist/esm/{input-container-CVU5Y0-o.js → input-container-28E-ib9E.js} +7 -7
  285. package/dist/{kolibri/input-container-CVU5Y0-o.js.map → esm/input-container-28E-ib9E.js.map} +1 -1
  286. package/dist/esm/{item-BShglo-p.js → item-Bwz4OUrI.js} +4 -4
  287. package/dist/esm/{item-BShglo-p.js.map → item-Bwz4OUrI.js.map} +1 -1
  288. package/dist/esm/{item-CD8r4zxe.js → item-CuhPkC8A.js} +4 -4
  289. package/dist/esm/{item-CD8r4zxe.js.map → item-CuhPkC8A.js.map} +1 -1
  290. package/dist/esm/{item-Cj7w26xK.js → item-HQBfKHr0.js} +3 -3
  291. package/dist/esm/{item-Cj7w26xK.js.map → item-HQBfKHr0.js.map} +1 -1
  292. package/dist/esm/{item-CIIV_ncI.js → item-aP2OcbwT.js} +8 -8
  293. package/dist/esm/{item-CIIV_ncI.js.map → item-aP2OcbwT.js.map} +1 -1
  294. package/dist/esm/kol-abbr.entry.js +2 -2
  295. package/dist/esm/kol-accordion.entry.js +7 -7
  296. package/dist/esm/kol-alert.entry.js +11 -11
  297. package/dist/esm/kol-avatar.entry.js +1 -1
  298. package/dist/esm/kol-badge.entry.js +10 -10
  299. package/dist/esm/kol-breadcrumb.entry.js +9 -9
  300. package/dist/esm/kol-button-link.entry.js +10 -10
  301. package/dist/esm/kol-button.entry.js +10 -10
  302. package/dist/esm/kol-card.entry.js +11 -11
  303. package/dist/esm/kol-click-button.entry.js +2 -2
  304. package/dist/esm/kol-combobox.entry.js +18 -18
  305. package/dist/esm/kol-details.entry.js +7 -7
  306. package/dist/esm/kol-dialog.entry.js +13 -13
  307. package/dist/esm/kol-drawer.entry.js +12 -12
  308. package/dist/esm/kol-form.entry.js +12 -12
  309. package/dist/esm/kol-heading.entry.js +1 -1
  310. package/dist/esm/kol-icon.entry.js +3 -3
  311. package/dist/esm/kol-image.entry.js +1 -1
  312. package/dist/esm/kol-input-checkbox.entry.js +17 -17
  313. package/dist/esm/kol-input-color.entry.js +18 -18
  314. package/dist/esm/kol-input-date.entry.js +18 -18
  315. package/dist/esm/kol-input-email.entry.js +20 -20
  316. package/dist/esm/kol-input-file.entry.js +17 -17
  317. package/dist/esm/kol-input-number.entry.js +18 -18
  318. package/dist/esm/kol-input-password.entry.js +20 -20
  319. package/dist/esm/kol-input-radio.entry.js +17 -17
  320. package/dist/esm/kol-input-range.entry.js +18 -18
  321. package/dist/esm/kol-input-text.entry.js +20 -20
  322. package/dist/esm/kol-kolibri.entry.js +2 -2
  323. package/dist/esm/kol-link-button.entry.js +10 -10
  324. package/dist/esm/kol-link.entry.js +10 -10
  325. package/dist/esm/kol-meter.entry.js +1 -1
  326. package/dist/esm/kol-modal.entry.js +13 -13
  327. package/dist/esm/kol-nav.entry.js +13 -13
  328. package/dist/esm/kol-pagination.entry.js +18 -18
  329. package/dist/esm/kol-popover-button.entry.js +11 -11
  330. package/dist/esm/kol-progress.entry.js +1 -1
  331. package/dist/esm/kol-quote.entry.js +1 -1
  332. package/dist/esm/kol-select.entry.js +17 -17
  333. package/dist/esm/kol-single-select.entry.js +18 -18
  334. package/dist/esm/kol-skeleton.entry.js +2 -2
  335. package/dist/esm/kol-skip-nav.entry.js +9 -9
  336. package/dist/esm/kol-spin.entry.js +3 -3
  337. package/dist/esm/kol-split-button.entry.js +12 -12
  338. package/dist/esm/kol-table-stateful.entry.js +25 -25
  339. package/dist/esm/kol-table-stateless.entry.js +19 -19
  340. package/dist/esm/kol-tabs.entry.js +14 -26
  341. package/dist/esm/kol-tabs.entry.js.map +1 -1
  342. package/dist/esm/kol-textarea.entry.js +17 -17
  343. package/dist/esm/kol-toast-container.entry.js +11 -11
  344. package/dist/esm/kol-toolbar.entry.js +11 -11
  345. package/dist/esm/kol-tooltip-wc.entry.js +4 -4
  346. package/dist/esm/kol-tree-item.entry.js +9 -9
  347. package/dist/esm/kol-tree.entry.js +1 -1
  348. package/dist/esm/kol-version.entry.js +9 -9
  349. package/dist/esm/kolibri.js +3 -3
  350. package/dist/esm/loader.js +3 -3
  351. package/dist/esm/{resolve-props-USwvESw_.js → resolve-props-D0-62io3.js} +3 -3
  352. package/dist/{kolibri/resolve-props-USwvESw_.js.map → esm/resolve-props-D0-62io3.js.map} +1 -1
  353. package/dist/esm/{scroll-lock-CKJqGGmP.js → scroll-lock-DYMGa60u.js} +3 -3
  354. package/dist/{kolibri/scroll-lock-CKJqGGmP.js.map → esm/scroll-lock-DYMGa60u.js.map} +1 -1
  355. package/dist/esm/{suggestions-PclKnJ2U.js → suggestions-Cm-RWrWm.js} +4 -4
  356. package/dist/esm/{suggestions-PclKnJ2U.js.map → suggestions-Cm-RWrWm.js.map} +1 -1
  357. package/dist/esm/test-component.entry.js +1 -1
  358. package/dist/esm/{toggle-handler-BIUmTJk5.js → toggle-handler-D5L4pnQ5.js} +5 -5
  359. package/dist/esm/{toggle-handler-BIUmTJk5.js.map → toggle-handler-D5L4pnQ5.js.map} +1 -1
  360. package/dist/kolibri/Heading-DAPZwXCt.js +5 -0
  361. package/dist/kolibri/{Heading-D2EH5Vz9.js.map → Heading-DAPZwXCt.js.map} +1 -1
  362. package/dist/kolibri/api-DueenSkb.js +5 -0
  363. package/dist/{esm/api-DScxu3ou.js.map → kolibri/api-DueenSkb.js.map} +1 -1
  364. package/dist/kolibri/api-zFp24D1x.js +5 -0
  365. package/dist/kolibri/{api-CN_pBHgH.js.map → api-zFp24D1x.js.map} +1 -1
  366. package/dist/kolibri/app-globals-CYRfyhVc.js +5 -0
  367. package/dist/kolibri/{app-globals-CddJRb3M.js.map → app-globals-CYRfyhVc.js.map} +1 -1
  368. package/dist/kolibri/{base-DHBpPWDW.js → base-AvIGo8Mp.js} +2 -2
  369. package/dist/{esm/base-DHBpPWDW.js.map → kolibri/base-AvIGo8Mp.js.map} +1 -1
  370. package/dist/kolibri/{base-B4XSDJBd.js → base-BU2iT3jv.js} +2 -2
  371. package/dist/{esm/base-B4XSDJBd.js.map → kolibri/base-BU2iT3jv.js.map} +1 -1
  372. package/dist/kolibri/{base-DFtj5G32.js → base-BUu1gNpy.js} +2 -2
  373. package/dist/{esm/base-DFtj5G32.js.map → kolibri/base-BUu1gNpy.js.map} +1 -1
  374. package/dist/kolibri/base-CjlYs5Fb.js +5 -0
  375. package/dist/{esm/base-Jvi_AWqL.js.map → kolibri/base-CjlYs5Fb.js.map} +1 -1
  376. package/dist/kolibri/{base-web-component-D_VU8SGY.js → base-web-component-BEf83bnu.js} +2 -2
  377. package/dist/kolibri/{base-web-component-D_VU8SGY.js.map → base-web-component-BEf83bnu.js.map} +1 -1
  378. package/dist/kolibri/{base-web-component-t9oDjRt3.js → base-web-component-C2q-dSOg.js} +2 -2
  379. package/dist/kolibri/{base-web-component-t9oDjRt3.js.map → base-web-component-C2q-dSOg.js.map} +1 -1
  380. package/dist/kolibri/{behavior-Dpui_R-v.js → behavior-DCpLHoHs.js} +2 -2
  381. package/dist/{esm/behavior-Dpui_R-v.js.map → kolibri/behavior-DCpLHoHs.js.map} +1 -1
  382. package/dist/kolibri/{component-DSKwp72M.js → component-9XV7ykPK.js} +2 -2
  383. package/dist/{esm/component-DSKwp72M.js.map → kolibri/component-9XV7ykPK.js.map} +1 -1
  384. package/dist/kolibri/{component-BauANlCU.js → component-B5MUeex-.js} +2 -2
  385. package/dist/{esm/component-BauANlCU.js.map → kolibri/component-B5MUeex-.js.map} +1 -1
  386. package/dist/kolibri/component-BR-6tKab.js +5 -0
  387. package/dist/kolibri/{component-B5OmtChm.js.map → component-BR-6tKab.js.map} +1 -1
  388. package/dist/kolibri/{component-ArZwqu6c.js → component-Bj13sPTL.js} +2 -2
  389. package/dist/kolibri/{component-ArZwqu6c.js.map → component-Bj13sPTL.js.map} +1 -1
  390. package/dist/kolibri/component-BrOA7gRZ.js +5 -0
  391. package/dist/kolibri/{component-DWiKUdpa.js.map → component-BrOA7gRZ.js.map} +1 -1
  392. package/dist/kolibri/component-CQJ_jIZm.js +5 -0
  393. package/dist/kolibri/{component-CoN6ZwTo.js.map → component-CQJ_jIZm.js.map} +1 -1
  394. package/dist/kolibri/component-Cqcw7JSO.js +5 -0
  395. package/dist/{esm/component-D6Z14V5i.js.map → kolibri/component-Cqcw7JSO.js.map} +1 -1
  396. package/dist/kolibri/component-Cy_xOMLd.js +5 -0
  397. package/dist/kolibri/{component-GqGXpjMZ.js.map → component-Cy_xOMLd.js.map} +1 -1
  398. package/dist/kolibri/component-DCK-2RQ3.js +5 -0
  399. package/dist/kolibri/{component-6cLprNJZ.js.map → component-DCK-2RQ3.js.map} +1 -1
  400. package/dist/kolibri/{component-D0Coq_zE.js → component-DRUoRfdO.js} +2 -2
  401. package/dist/{esm/component-D0Coq_zE.js.map → kolibri/component-DRUoRfdO.js.map} +1 -1
  402. package/dist/kolibri/{component-DbsunX7x.js → component-D_xOkOl6.js} +2 -2
  403. package/dist/{esm/component-DbsunX7x.js.map → kolibri/component-D_xOkOl6.js.map} +1 -1
  404. package/dist/kolibri/{component-CChFD3b2.js → component-Droc76Vh.js} +2 -2
  405. package/dist/{esm/component-CChFD3b2.js.map → kolibri/component-Droc76Vh.js.map} +1 -1
  406. package/dist/kolibri/dev.utils-CWEYl26B.js +5 -0
  407. package/dist/{esm/dev.utils-DVPKJwhh.js.map → kolibri/dev.utils-CWEYl26B.js.map} +1 -1
  408. package/dist/kolibri/{devtools-Ctvg6SnM.js → devtools-BfiT_Mej.js} +2 -2
  409. package/dist/{esm/devtools-Ctvg6SnM.js.map → kolibri/devtools-BfiT_Mej.js.map} +1 -1
  410. package/dist/kolibri/field-control-BvFIxA5C.js +5 -0
  411. package/dist/{esm/field-control-CJ-9C7AK.js.map → kolibri/field-control-BvFIxA5C.js.map} +1 -1
  412. package/dist/kolibri/{group-6LOQ2Eed.js → group-DzNZiu3R.js} +2 -2
  413. package/dist/kolibri/{group-6LOQ2Eed.js.map → group-DzNZiu3R.js.map} +1 -1
  414. package/dist/kolibri/{index-BtYjJomD.js → index-CyLMYdnq.js} +2 -2
  415. package/dist/{esm/index-BtYjJomD.js.map → kolibri/index-CyLMYdnq.js.map} +1 -1
  416. package/dist/kolibri/input-C55z9I-y.js +5 -0
  417. package/dist/kolibri/{input-DispvARh.js.map → input-C55z9I-y.js.map} +1 -1
  418. package/dist/kolibri/{input-container-CVU5Y0-o.js → input-container-28E-ib9E.js} +2 -2
  419. package/dist/{esm/input-container-CVU5Y0-o.js.map → kolibri/input-container-28E-ib9E.js.map} +1 -1
  420. package/dist/kolibri/item-Bwz4OUrI.js +5 -0
  421. package/dist/kolibri/{item-BShglo-p.js.map → item-Bwz4OUrI.js.map} +1 -1
  422. package/dist/kolibri/item-CuhPkC8A.js +5 -0
  423. package/dist/kolibri/{item-CD8r4zxe.js.map → item-CuhPkC8A.js.map} +1 -1
  424. package/dist/kolibri/{item-Cj7w26xK.js → item-HQBfKHr0.js} +2 -2
  425. package/dist/kolibri/{item-Cj7w26xK.js.map → item-HQBfKHr0.js.map} +1 -1
  426. package/dist/kolibri/item-aP2OcbwT.js +5 -0
  427. package/dist/kolibri/{item-CIIV_ncI.js.map → item-aP2OcbwT.js.map} +1 -1
  428. package/dist/kolibri/kol-abbr.entry.js +1 -1
  429. package/dist/kolibri/kol-accordion.entry.js +1 -1
  430. package/dist/kolibri/kol-alert.entry.js +1 -1
  431. package/dist/kolibri/kol-avatar.entry.js +1 -1
  432. package/dist/kolibri/kol-badge.entry.js +1 -1
  433. package/dist/kolibri/kol-breadcrumb.entry.js +1 -1
  434. package/dist/kolibri/kol-button-link.entry.js +1 -1
  435. package/dist/kolibri/kol-button.entry.js +1 -1
  436. package/dist/kolibri/kol-card.entry.js +1 -1
  437. package/dist/kolibri/kol-click-button.entry.js +1 -1
  438. package/dist/kolibri/kol-combobox.entry.js +1 -1
  439. package/dist/kolibri/kol-combobox.entry.js.map +1 -1
  440. package/dist/kolibri/kol-details.entry.js +1 -1
  441. package/dist/kolibri/kol-dialog.entry.js +1 -1
  442. package/dist/kolibri/kol-drawer.entry.js +1 -1
  443. package/dist/kolibri/kol-form.entry.js +1 -1
  444. package/dist/kolibri/kol-heading.entry.js +1 -1
  445. package/dist/kolibri/kol-icon.entry.js +1 -1
  446. package/dist/kolibri/kol-image.entry.js +1 -1
  447. package/dist/kolibri/kol-input-checkbox.entry.js +1 -1
  448. package/dist/kolibri/kol-input-color.entry.js +1 -1
  449. package/dist/kolibri/kol-input-date.entry.js +1 -1
  450. package/dist/kolibri/kol-input-email.entry.js +1 -1
  451. package/dist/kolibri/kol-input-file.entry.js +1 -1
  452. package/dist/kolibri/kol-input-number.entry.js +1 -1
  453. package/dist/kolibri/kol-input-password.entry.js +1 -1
  454. package/dist/kolibri/kol-input-radio.entry.js +1 -1
  455. package/dist/kolibri/kol-input-radio.entry.js.map +1 -1
  456. package/dist/kolibri/kol-input-range.entry.js +1 -1
  457. package/dist/kolibri/kol-input-text.entry.js +1 -1
  458. package/dist/kolibri/kol-kolibri.entry.js +1 -1
  459. package/dist/kolibri/kol-link-button.entry.js +1 -1
  460. package/dist/kolibri/kol-link.entry.js +1 -1
  461. package/dist/kolibri/kol-meter.entry.js +1 -1
  462. package/dist/kolibri/kol-modal.entry.js +1 -1
  463. package/dist/kolibri/kol-nav.entry.js +1 -1
  464. package/dist/kolibri/kol-pagination.entry.js +1 -1
  465. package/dist/kolibri/kol-popover-button.entry.js +1 -1
  466. package/dist/kolibri/kol-progress.entry.js +1 -1
  467. package/dist/kolibri/kol-quote.entry.js +1 -1
  468. package/dist/kolibri/kol-select.entry.js +1 -1
  469. package/dist/kolibri/kol-single-select.entry.js +1 -1
  470. package/dist/kolibri/kol-single-select.entry.js.map +1 -1
  471. package/dist/kolibri/kol-skeleton.entry.js +1 -1
  472. package/dist/kolibri/kol-skeleton.entry.js.map +1 -1
  473. package/dist/kolibri/kol-skip-nav.entry.js +1 -1
  474. package/dist/kolibri/kol-spin.entry.js +1 -1
  475. package/dist/kolibri/kol-split-button.entry.js +1 -1
  476. package/dist/kolibri/kol-table-stateful.entry.js +1 -1
  477. package/dist/kolibri/kol-table-stateless.entry.js +1 -1
  478. package/dist/kolibri/kol-tabs.entry.esm.js.map +1 -1
  479. package/dist/kolibri/kol-tabs.entry.js +1 -1
  480. package/dist/kolibri/kol-tabs.entry.js.map +1 -1
  481. package/dist/kolibri/kol-textarea.entry.js +1 -1
  482. package/dist/kolibri/kol-toast-container.entry.js +1 -1
  483. package/dist/kolibri/kol-toolbar.entry.js +1 -1
  484. package/dist/kolibri/kol-tooltip-wc.entry.js +1 -1
  485. package/dist/kolibri/kol-tree-item.entry.js +1 -1
  486. package/dist/kolibri/kol-tree.entry.js +1 -1
  487. package/dist/kolibri/kol-version.entry.js +1 -1
  488. package/dist/kolibri/kolibri.esm.js +1 -1
  489. package/dist/kolibri/resolve-props-D0-62io3.js +5 -0
  490. package/dist/{esm/resolve-props-USwvESw_.js.map → kolibri/resolve-props-D0-62io3.js.map} +1 -1
  491. package/dist/kolibri/{scroll-lock-CKJqGGmP.js → scroll-lock-DYMGa60u.js} +2 -2
  492. package/dist/{esm/scroll-lock-CKJqGGmP.js.map → kolibri/scroll-lock-DYMGa60u.js.map} +1 -1
  493. package/dist/kolibri/{suggestions-PclKnJ2U.js → suggestions-Cm-RWrWm.js} +2 -2
  494. package/dist/kolibri/{suggestions-PclKnJ2U.js.map → suggestions-Cm-RWrWm.js.map} +1 -1
  495. package/dist/kolibri/test-component.entry.js +1 -1
  496. package/dist/kolibri/{toggle-handler-BIUmTJk5.js → toggle-handler-D5L4pnQ5.js} +2 -2
  497. package/dist/kolibri/{toggle-handler-BIUmTJk5.js.map → toggle-handler-D5L4pnQ5.js.map} +1 -1
  498. package/package.json +4 -4
  499. package/dist/kolibri/Heading-D2EH5Vz9.js +0 -5
  500. package/dist/kolibri/api-CN_pBHgH.js +0 -5
  501. package/dist/kolibri/api-DScxu3ou.js +0 -5
  502. package/dist/kolibri/app-globals-CddJRb3M.js +0 -5
  503. package/dist/kolibri/base-Jvi_AWqL.js +0 -5
  504. package/dist/kolibri/component-6cLprNJZ.js +0 -5
  505. package/dist/kolibri/component-B5OmtChm.js +0 -5
  506. package/dist/kolibri/component-CoN6ZwTo.js +0 -5
  507. package/dist/kolibri/component-D6Z14V5i.js +0 -5
  508. package/dist/kolibri/component-DWiKUdpa.js +0 -5
  509. package/dist/kolibri/component-GqGXpjMZ.js +0 -5
  510. package/dist/kolibri/dev.utils-DVPKJwhh.js +0 -5
  511. package/dist/kolibri/field-control-CJ-9C7AK.js +0 -5
  512. package/dist/kolibri/input-DispvARh.js +0 -5
  513. package/dist/kolibri/item-BShglo-p.js +0 -5
  514. package/dist/kolibri/item-CD8r4zxe.js +0 -5
  515. package/dist/kolibri/item-CIIV_ncI.js +0 -5
  516. package/dist/kolibri/resolve-props-USwvESw_.js +0 -5
@@ -5,7 +5,7 @@ import { proxyCustomElement, h, Host } from '@stencil/core/internal/client';
5
5
  import { B as BaseTableStatelessWebComponent, v as validateAriaLabelledby } from './base4.js';
6
6
  import { a as attachInternals } from './aria-labelledby.js';
7
7
 
8
- const defaultStyleCss = "@charset \"UTF-8\";\n/*\n* This file defines the layer order for all CSS layers used in KoliBri.\n* The order is important as it determines the cascade priority.\n*\n* Layer order (lowest to highest priority):\n* 1. kol-a11y - Accessibility defaults and requirements\n* 2. kol-global - Global component styles and resets\n* 3. kol-component - Component-specific styles\n* 4. kol-theme-global - Theme-specific global styles\n* 5. kol-theme-component - Theme-specific component styles\n* 6. kol-forced-colors - Defaults for forced colors and high contrast modes\n* 7. kol-theme-forced-colors - Theme-specific styles for forced colors and high contrast modes\n*/\n@layer kol-a11y, kol-global, kol-component, kol-theme-global, kol-theme-component, kol-forced-colors, kol-theme-forced-colors;\n/* forward the rem function */\n/*\n * Guards an interaction rule (`:hover`, `:active`, `:focus…`) against the disabled state.\n *\n * Two shapes are needed because the disabled marker sits on different elements: a native control\n * carries `disabled`, an anchor or summary carries `aria-disabled`, and a BEM wrapper carries a\n * `--disabled` modifier while its inner control carries the attribute.\n */\n/* Wrapper variant: asks the interactive element inside, which is where the attribute lives. */\n/*\n * This file contains all rules for accessibility.\n */\n@layer kol-a11y {\n :host {\n /*\n * Minimum size of interactive elements.\n *\n * The `max(…, 44px)` floor guarantees the WCAG 2.5.5 (AAA) target size of 44px:\n * `to-rem(44)` runs the value through a `calc()` rem round-trip which can lose\n * sub-pixel precision and resolve to e.g. 43.99px depending on the browser's\n * rounding, dropping just below the required minimum.\n */\n --a11y-min-size: max(calc(44 * 1rem / var(--kolibri-root-font-size, 16)), 44px);\n /*\n * No element should be used without verifying the contrast ratio of its background and font colors.\n * By initially setting the background color to white and the font color to black,\n * the contrast ratio is ensured and explicit adjustment is forced.\n */\n --kol-a11y-font-color: black;\n --kol-a11y-background-color: white;\n color: var(--kol-a11y-font-color);\n background-color: var(--kol-a11y-background-color);\n /*\n * Verdana is an accessible font that can be used without requiring additional loading time.\n */\n --kol-a11y-font-family: Verdana;\n font-family: var(--kol-a11y-font-family);\n /*\n * Letter spacing is required for all texts.\n */\n letter-spacing: inherit;\n /*\n * Word spacing is required for all texts.\n */\n word-spacing: inherit;\n /*\n * Text should be aligned left by default to provide a predictable starting point.\n */\n text-align: left;\n }\n * {\n /*\n * This rule enables the word dividing for all texts. That is important for high zoom levels.\n */\n hyphens: auto;\n /*\n * This rule enables the word dividing for all texts. That is important for high zoom levels.\n */\n word-break: break-word;\n }\n /*\n * All interactive elements should have a minimum size of to-rem(44).\n */\n /* input:not([type='checkbox'], [type='radio'], [type='range']), */\n /* option, */\n /* select, */\n /* textarea, */\n button,\n .kol-input .input {\n min-width: var(--a11y-min-size);\n min-height: var(--a11y-min-size);\n }\n /*\n * Some interactive elements should not inherit the font-family and font-size.\n */\n a,\n button,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n input,\n option,\n select,\n textarea {\n /*\n * All elements should inherit the text color from his parent element.\n */\n color: inherit;\n /*\n * All elements should inherit the font family from his parent element.\n */\n font-family: inherit;\n /*\n * All elements should inherit the font size from his parent element.\n */\n font-size: inherit;\n /*\n * Letter spacing is required for all texts.\n */\n letter-spacing: inherit;\n /*\n * Word spacing is required for all texts.\n */\n word-spacing: inherit;\n }\n /**\n * Sometimes we need the semantic element for accessibility reasons,\n * but we don't want to show it.\n *\n * - https://www.a11yproject.com/posts/how-to-hide-content/\n */\n .visually-hidden {\n position: fixed;\n top: 0;\n left: 0;\n width: 1px;\n height: 1px;\n overflow: hidden;\n white-space: nowrap;\n clip-path: inset(50%);\n }\n}\n/*\n * This file contains all rules for forced-colors and highcontrast modes\n * https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/system-color to see all color keywords the browsers are providing\n */\n@layer kol-forced-colors {\n @media (forced-colors: active) {\n .kol-button__text {\n color: ButtonText;\n background-color: ButtonFace;\n border: 2px solid ButtonBorder;\n }\n .kol-button--disabled .kol-button__text {\n color: GrayText;\n border-color: GrayText;\n }\n /*\n * Forced colors drop author colors, so the only way a disabled control still reads as\n * disabled is the `GrayText` system color. `kol-button` had it; the controls whose disabled\n * state is `aria-disabled` (anchor, summary) and the native form controls did not.\n */\n .kol-link__interactive-element[aria-disabled=true],\n .kol-accordion__heading[aria-disabled=true],\n .kol-details__heading[aria-disabled=true] {\n color: GrayText;\n }\n .kol-link__interactive-element[aria-disabled=true] .kol-icon,\n .kol-link__interactive-element[aria-disabled=true] .kol-span__label,\n .kol-accordion__heading[aria-disabled=true] .kol-icon,\n .kol-accordion__heading[aria-disabled=true] .kol-span__label,\n .kol-details__heading[aria-disabled=true] .kol-icon,\n .kol-details__heading[aria-disabled=true] .kol-span__label {\n color: GrayText;\n }\n input:disabled,\n select:disabled,\n textarea:disabled {\n color: GrayText;\n border-color: GrayText;\n }\n .kol-card,\n .kol-dialog,\n .kol-modal {\n color: CanvasText;\n background-color: Canvas;\n border: 1px solid ButtonBorder;\n }\n .kol-pagination__button--selected .kol-button {\n opacity: 1;\n }\n .kol-pagination__button--selected .kol-button__text {\n color: SelectedItemText;\n background-color: SelectedItem;\n }\n /* focus styles */\n .kol-button__interactive-element:focus-visible,\n .kol-link__interactive-element:focus-visible {\n outline: 2px solid Highlight;\n outline-offset: 2px;\n }\n }\n}\n@layer kol-global {\n /*\n * Dieses CSS stellt sicher, dass der Standard-Style\n * von A und Button resettet werden.\n */\n :is(a, button) {\n background-color: transparent;\n width: 100%;\n margin: 0;\n padding: 0;\n border: none;\n /* 100% needed for custom width from outside */\n }\n /*\n * Ensure elements with hidden attribute to be actually not visible\n * @see https://meowni.ca/hidden.is.a.lie.html\n */\n [hidden] {\n display: none !important;\n }\n .badge-text-hint {\n color: black;\n background-color: white;\n }\n}\n@layer kol-global {\n :host {\n /*\n * The max-width is needed to prevent the table from overflowing the\n * parent node, if the table is wider than the parent node.\n */\n max-width: 100%;\n font-size: calc(16 * 1rem / var(--kolibri-root-font-size, 16));\n }\n * {\n /*\n * We prefer to box-sizing: border-box for all elements.\n */\n box-sizing: border-box;\n }\n .kol-span {\n /* KolSpan is a layout component with icons in all directions and a label text in the middle. */\n display: flex;\n flex-flow: column;\n align-items: center;\n justify-content: center;\n /* The sub span in KolSpan is the horizontal span with icon left and right and the label text in the middle. */\n }\n .kol-span__container {\n display: flex;\n align-items: center;\n }\n a,\n button {\n cursor: pointer;\n }\n .kol-span .kol-span__label--hide-label .kol-span__label {\n display: none;\n }\n /* Reset browser agent style. */\n button:disabled {\n color: unset;\n }\n .disabled label,\n .disabled:focus-within label,\n [aria-disabled=true],\n [aria-disabled=true]:focus,\n [disabled],\n [disabled]:focus {\n outline: none;\n cursor: not-allowed;\n }\n [aria-disabled=true]:focus .kol-span,\n [disabled]:focus .kol-span {\n outline: none !important;\n }\n .hastooltip {\n z-index: 900 !important;\n }\n}\n@layer kol-component {\n :host {\n display: block;\n }\n}\n@font-face {\n font-family: \"kolicons\";\n src: url(\"kolicons.eot?t=1791283887610\"); /* IE9*/\n src: url(\"kolicons.eot?t=1791283887610#iefix\") format(\"embedded-opentype\"), url(\"kolicons.woff2?t=1791283887610\") format(\"woff2\"), url(\"kolicons.woff?t=1791283887610\") format(\"woff\"), url(\"kolicons.ttf?t=1791283887610\") format(\"truetype\"), url(\"kolicons.svg?t=1791283887610#kolicons\") format(\"svg\"); /* iOS 4.1- */\n}\n@layer kol-component {\n [class^=kolicon-], [class*=\" kolicon-\"] {\n font-family: \"kolicons\";\n font-style: normal;\n font-weight: 400;\n line-height: 1em;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n .kolicon-alert-error::before {\n content: \"\\ea01\";\n }\n .kolicon-alert-info::before {\n content: \"\\ea02\";\n }\n .kolicon-alert-success::before {\n content: \"\\ea03\";\n }\n .kolicon-alert-warning::before {\n content: \"\\ea04\";\n }\n .kolicon-check::before {\n content: \"\\ea05\";\n }\n .kolicon-chevron-double-left::before {\n content: \"\\ea06\";\n }\n .kolicon-chevron-double-right::before {\n content: \"\\ea07\";\n }\n .kolicon-chevron-down::before {\n content: \"\\ea08\";\n }\n .kolicon-chevron-left::before {\n content: \"\\ea09\";\n }\n .kolicon-chevron-right::before {\n content: \"\\ea0a\";\n }\n .kolicon-chevron-up::before {\n content: \"\\ea0b\";\n }\n .kolicon-cogwheel::before {\n content: \"\\ea0c\";\n }\n .kolicon-cross::before {\n content: \"\\ea0d\";\n }\n .kolicon-eye-closed::before {\n content: \"\\ea0e\";\n }\n .kolicon-eye::before {\n content: \"\\ea0f\";\n }\n .kolicon-house::before {\n content: \"\\ea10\";\n }\n .kolicon-kolibri::before {\n content: \"\\ea11\";\n }\n .kolicon-link-external::before {\n content: \"\\ea12\";\n }\n .kolicon-link::before {\n content: \"\\ea13\";\n }\n .kolicon-minus::before {\n content: \"\\ea14\";\n }\n .kolicon-pin-pinned::before {\n content: \"\\ea15\";\n }\n .kolicon-pin-unpinned::before {\n content: \"\\ea16\";\n }\n .kolicon-plus::before {\n content: \"\\ea17\";\n }\n .kolicon-settings::before {\n content: \"\\ea18\";\n }\n .kolicon-sort-asc::before {\n content: \"\\ea19\";\n }\n .kolicon-sort-desc::before {\n content: \"\\ea1a\";\n }\n .kolicon-sort-neutral::before {\n content: \"\\ea1b\";\n }\n .kolicon-up::before {\n content: \"\\ea1c\";\n }\n .kolicon-version::before {\n content: \"\\ea1d\";\n }\n}\n@layer kol-component {\n .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-tooltip {\n display: contents;\n }\n .kol-tooltip__floating {\n opacity: 0;\n display: none;\n position: fixed;\n /* Avoid layout interference - see https://floating-ui.com/docs/computePosition */\n top: 0;\n left: 0;\n /* Can be used to specify the tooltip-width from the outside. Unset by default. */\n width: var(--kol-tooltip-width, max-content);\n min-width: calc(8 * 1rem / var(--kolibri-root-font-size, 16));\n max-width: 90vw;\n max-height: 90vh;\n animation-direction: normal;\n /* Can be used to specify the animation duration from the outside. 250ms by default. */\n animation-duration: var(--kolibri-tooltip-animation-duration, 250ms);\n animation-fill-mode: forwards;\n animation-iteration-count: 1;\n animation-timing-function: ease-in;\n }\n .kol-tooltip__floating.hide {\n animation-name: hideTooltip;\n }\n .kol-tooltip__floating.show {\n animation-name: showTooltip;\n }\n .kol-tooltip__arrow {\n transform: rotate(45deg);\n color: black;\n background-color: white;\n position: absolute;\n z-index: 999;\n width: calc(10 * 1rem / var(--kolibri-root-font-size, 16));\n height: calc(10 * 1rem / var(--kolibri-root-font-size, 16));\n }\n .kol-tooltip__content {\n color: black;\n background-color: white;\n position: relative;\n z-index: 1000;\n }\n @keyframes hideTooltip {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n display: none;\n }\n }\n @keyframes showTooltip {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n}\n/*\n * Button styles for a skeleton block whose interactive element sits inside the BEM root:\n * `kol-button` renders `<div class=\"kol-button\"><button class=\"kol-button__interactive-element\">`,\n * `kol-link` renders `<div class=\"kol-link\"><a class=\"kol-link__interactive-element\">`.\n *\n * Overlaps with `kol-embedded-button-box-styles` below: both target the block class itself and disagree\n * on `display` and `text-align`. A stylesheet that includes both therefore depends on order or\n * specificity — today that only happens where the caller nests one of them (e.g. `_alert.mixin`\n * nests this one under `.kol-alert`, which wins). Include only one per block unless the nesting\n * makes the winner explicit.\n */\n/*\n * Minimal box replication for shadow trees that render `ButtonFC` without including\n * `kol-button-styles`. The `kol-global` reset (`background`, `width`, `margin`, `padding`,\n * `border`) and the a11y layer `min-height`/`min-width` apply to the native button, on top of the\n * UA `inline-block`, but not to the `div` root that carries the `kol-button` class. This mixin\n * replicates that outer box on the root, while the inner `kol-button__interactive-element` degrades\n * to a plain block container to avoid the inline-level baseline gap the UA `inline-block` would add\n * below it.\n *\n * Mutually exclusive with `kol-button-styles` above — see the collision note there.\n */\n/*\n * Link styles for a skeleton block whose interactive element sits inside the BEM root:\n * `kol-link` renders `<div class=\"kol-link\"><a class=\"kol-link__interactive-element\">`,\n * `kol-button` renders `<div class=\"kol-button\"><button class=\"kol-button__interactive-element\">`.\n */\n@layer kol-component {\n @keyframes rotate {\n to {\n transform: rotate(1turn);\n }\n }\n @keyframes growingCircle {\n 0% {\n opacity: 0.5;\n border-color: white;\n clip-path: polygon(50% 50%, 0 0, 0 0, 0 0, 0 0, 0 0);\n }\n 25% {\n opacity: 0.75;\n border-color: var(--kol-spin-color, var(--kol-theme-spin-color, #000));\n clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 0, 100% 0, 100% 0);\n }\n 50% {\n opacity: 1;\n border-color: var(--kol-spin-color, var(--kol-theme-spin-color, black));\n clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 100% 100%, 100% 100%);\n }\n 75% {\n opacity: 1;\n border-color: var(--kol-spin-color, var(--kol-theme-spin-color, black));\n clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 0 100%, 0 100%);\n }\n 100% {\n opacity: 0.1;\n border-color: var(--kol-spin-color, var(--kol-theme-spin-color, black));\n clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 0 100%, 0 0);\n }\n }\n .kol-spin__spinner--cycle {\n width: calc(var(--kol-spin-size, 48) * 1rem / var(--kolibri-root-font-size, 16));\n height: calc(var(--kol-spin-size, 48) * 1rem / var(--kolibri-root-font-size, 16));\n }\n .kol-spin__spinner--cycle .kol-spin__loader {\n border-radius: 50%;\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n animation: 2s linear infinite rotate;\n }\n @media (prefers-reduced-motion) {\n .kol-spin__spinner--cycle .kol-spin__loader {\n animation-duration: 4s !important;\n }\n }\n .kol-spin__spinner--cycle .kol-spin__loader::before {\n border-radius: 50%;\n position: absolute;\n inset: 0;\n content: \"\";\n animation: 3s linear infinite growingCircle;\n border: 5px solid var(--kol-spin-color, var(--kol-theme-spin-color, #333));\n }\n @media (prefers-reduced-motion) {\n .kol-spin__spinner--cycle .kol-spin__loader::before {\n animation-duration: 6s !important;\n }\n }\n}\n@layer kol-component {\n @keyframes spin1 {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n }\n @keyframes spin2 {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(calc(var(--kol-spin-size, 13) * 1rem / var(--kolibri-root-font-size, 16)), 0);\n }\n }\n @keyframes spin3 {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n }\n }\n /* https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion#toning_down_the_animation_scaling */\n @media (prefers-reduced-motion) {\n .kol-spin__spinner-element {\n animation-duration: 2s !important;\n }\n }\n .kol-spin__spinner--dot {\n --kol-spin-border-width: calc(var(--kol-spin-size, 13) / 10);\n width: calc(calc(var(--kol-spin-size, 13) * 3 + 2) * 1rem / var(--kolibri-root-font-size, 16));\n height: calc(calc(var(--kol-spin-size, 13) + var(--kol-spin-border-width) * 2) * 1rem / var(--kolibri-root-font-size, 16));\n }\n .kol-spin__spinner--dot .kol-spin__spinner-element {\n background-color: var(--kol-spin-color, var(--kol-theme-spin-color, #000));\n border-radius: 50%;\n position: absolute;\n top: 1px;\n width: calc(var(--kol-spin-size, 13) * 1rem / var(--kolibri-root-font-size, 16));\n height: calc(var(--kol-spin-size, 13) * 1rem / var(--kolibri-root-font-size, 16));\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\n border: calc(var(--kol-spin-border-width) * 1rem / var(--kolibri-root-font-size, 16)) solid white;\n }\n .kol-spin__spinner--dot .kol-spin__spinner-element--1 {\n left: calc(var(--kol-spin-border-width) * 1rem / var(--kolibri-root-font-size, 16));\n z-index: 0;\n animation: 1s infinite spin1;\n }\n .kol-spin__spinner--dot .kol-spin__spinner-element--2 {\n left: calc(var(--kol-spin-border-width) * 1rem / var(--kolibri-root-font-size, 16));\n z-index: 1;\n animation: 1s infinite spin2;\n }\n .kol-spin__spinner--dot .kol-spin__spinner-element--3 {\n left: calc(calc(var(--kol-spin-size, 13) + var(--kol-spin-border-width)) * 1rem / var(--kolibri-root-font-size, 16));\n z-index: 1;\n animation: 1s infinite spin2;\n }\n .kol-spin__spinner--dot .kol-spin__spinner-element--neutral {\n opacity: 0.6;\n left: calc(calc(var(--kol-spin-size, 13) * 2 + var(--kol-spin-border-width)) * 1rem / var(--kolibri-root-font-size, 16));\n z-index: 0;\n animation: 1s infinite spin3;\n }\n}\n@layer kol-component {\n .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-card .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-card :host {\n display: inline-block;\n }\n .kol-card .kol-button {\n display: flex;\n height: 100%;\n min-height: var(--a11y-min-size);\n text-decoration-line: none;\n /* The interactive element is the flex container positioning the text, so it carries the\n box the root element used to be. The UA default underline sits on that element too,\n so suppressing `text-decoration` on the wrapper alone is not enough. */\n }\n .kol-card .kol-button__interactive-element {\n display: flex;\n flex: 1;\n text-align: left;\n text-decoration-line: none;\n /* A flex container only exposes a baseline if it has an in-flow text box to derive one\n from; without it the surrounding inline formatting context falls back to the bottom\n margin edge and everything after the element shifts by 1px. The zero-width space\n supplies that box. Measured, not assumed: removing it turns `popover-button/inline`\n and `input-file/basic` red against the develop baseline (the box grows 179→180px). */\n }\n .kol-card .kol-button__interactive-element::before {\n content: \"​\";\n }\n .kol-card .kol-button__text {\n flex: 1 0 100%;\n }\n .kol-card .kol-button {\n /* The tooltip wrapper holds only the absolutely positioned floating tooltip. In the legacy\n DOM it sat in a block flow and collapsed to zero height; as a flex/grid item it would\n stretch to the container height instead, adding phantom rows to the layout. */\n }\n .kol-card .kol-button__tooltip {\n height: 0;\n }\n .kol-card .kol-button--external-link > .kolicon-link-external::before {\n content: none;\n }\n .kol-card .kol-button--external-link .kol-button__interactive-element > .kolicon-link-external::before {\n content: none;\n }\n .kol-card {\n /* Visible with forced colors */\n outline: transparent solid calc(1 * 1rem / var(--kolibri-root-font-size, 16));\n display: grid;\n height: 100%;\n overflow: visible;\n grid-template-areas: \"header close\" \"content content\";\n grid-template-columns: 1fr min-content;\n grid-template-rows: min-content 1fr;\n }\n .kol-card__header {\n align-self: start;\n grid-area: header;\n }\n .kol-card__content {\n align-self: stretch;\n grid-area: content;\n }\n .kol-card__close-button {\n grid-area: close;\n }\n .kol-card:has(.kol-card__link) {\n position: relative;\n }\n .kol-card__link::after {\n position: absolute;\n inset: 0;\n content: \"\";\n cursor: pointer;\n }\n .kol-dialog,\n .kol-modal {\n min-height: var(--a11y-min-size);\n padding: 0;\n border: 0;\n /* Prevent scroll chaining from scrollable dialog content to the page. */\n overscroll-behavior: contain;\n }\n .kol-dialog__close-button,\n .kol-modal__close-button {\n position: absolute;\n top: calc(1 * 1rem / var(--kolibri-root-font-size, 16));\n right: calc(1 * 1rem / var(--kolibri-root-font-size, 16));\n z-index: 1;\n }\n .kol-alert .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-alert :host {\n display: inline-block;\n }\n .kol-alert .kol-button {\n display: flex;\n height: 100%;\n min-height: var(--a11y-min-size);\n text-decoration-line: none;\n /* The interactive element is the flex container positioning the text, so it carries the\n box the root element used to be. The UA default underline sits on that element too,\n so suppressing `text-decoration` on the wrapper alone is not enough. */\n }\n .kol-alert .kol-button__interactive-element {\n display: flex;\n flex: 1;\n text-align: left;\n text-decoration-line: none;\n /* A flex container only exposes a baseline if it has an in-flow text box to derive one\n from; without it the surrounding inline formatting context falls back to the bottom\n margin edge and everything after the element shifts by 1px. The zero-width space\n supplies that box. Measured, not assumed: removing it turns `popover-button/inline`\n and `input-file/basic` red against the develop baseline (the box grows 179→180px). */\n }\n .kol-alert .kol-button__interactive-element::before {\n content: \"​\";\n }\n .kol-alert .kol-button__text {\n flex: 1 0 100%;\n }\n .kol-alert .kol-button {\n /* The tooltip wrapper holds only the absolutely positioned floating tooltip. In the legacy\n DOM it sat in a block flow and collapsed to zero height; as a flex/grid item it would\n stretch to the container height instead, adding phantom rows to the layout. */\n }\n .kol-alert .kol-button__tooltip {\n height: 0;\n }\n .kol-alert .kol-button--external-link > .kolicon-link-external::before {\n content: none;\n }\n .kol-alert .kol-button--external-link .kol-button__interactive-element > .kolicon-link-external::before {\n content: none;\n }\n .kol-alert {\n display: grid;\n grid-template-areas: \"icon heading close\" \"icon content close\";\n grid-template-columns: min-content 1fr min-content;\n grid-template-rows: min-content min-content;\n }\n .kol-alert__icon {\n grid-area: icon;\n }\n .kol-alert__heading {\n grid-area: heading;\n }\n .kol-alert__closer {\n /* Visible with forced colors */\n outline: transparent solid calc(1 * 1rem / var(--kolibri-root-font-size, 16));\n grid-area: close;\n }\n .kol-alert__content {\n grid-area: content;\n }\n .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n :host {\n display: inline-block;\n }\n .kol-button {\n display: flex;\n height: 100%;\n min-height: var(--a11y-min-size);\n text-decoration-line: none;\n /* The interactive element is the flex container positioning the text, so it carries the\n box the root element used to be. The UA default underline sits on that element too,\n so suppressing `text-decoration` on the wrapper alone is not enough. */\n }\n .kol-button__interactive-element {\n display: flex;\n flex: 1;\n text-align: left;\n text-decoration-line: none;\n /* A flex container only exposes a baseline if it has an in-flow text box to derive one\n from; without it the surrounding inline formatting context falls back to the bottom\n margin edge and everything after the element shifts by 1px. The zero-width space\n supplies that box. Measured, not assumed: removing it turns `popover-button/inline`\n and `input-file/basic` red against the develop baseline (the box grows 179→180px). */\n }\n .kol-button__interactive-element::before {\n content: \"​\";\n }\n .kol-button__text {\n flex: 1 0 100%;\n }\n .kol-button {\n /* The tooltip wrapper holds only the absolutely positioned floating tooltip. In the legacy\n DOM it sat in a block flow and collapsed to zero height; as a flex/grid item it would\n stretch to the container height instead, adding phantom rows to the layout. */\n }\n .kol-button__tooltip {\n height: 0;\n }\n .kol-button--external-link > .kolicon-link-external::before {\n content: none;\n }\n .kol-button--external-link .kol-button__interactive-element > .kolicon-link-external::before {\n content: none;\n }\n .kol-popover-button {\n /*\n * The predecessor rendered this box as an unstyled (inline) custom element host; keep the\n * inline display so the flow layout around the embedded button stays unchanged.\n */\n display: inline;\n }\n .kol-popover-button__popover {\n margin: 0;\n padding: 0;\n border: 0;\n }\n .kol-popover-button--open .kol-button__tooltip {\n display: none;\n }\n .kol-popover-button--inline {\n display: inline-block;\n /* The size exemption has to cover both the BEM root div and the inner interactive element:\n the a11y layer pins every `button` to 44×44, so the inner `kol-button__interactive-element`\n needs the override as well — the root alone used to be the button before the skeleton migration. */\n }\n .kol-popover-button--inline .kol-button,\n .kol-popover-button--inline .kol-button .kol-button__interactive-element {\n min-width: 0;\n min-height: 1em;\n }\n .kol-popover {\n opacity: 0;\n transition: 0.2s ease-out opacity;\n }\n .kol-popover-button--open .kol-popover-button__popover {\n opacity: 1;\n }\n .kol-table-settings {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1;\n }\n .kol-table-settings .kol-popover-button__popover {\n background: white;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n border-radius: calc(8 * 1rem / var(--kolibri-root-font-size, 16));\n border: 1px solid black;\n }\n .kol-table-settings__columns {\n display: grid;\n max-height: calc(200 * 1rem / var(--kolibri-root-font-size, 16));\n overflow: auto;\n grid-auto-rows: min-content;\n grid-template-columns: min-content minmax(max-content, 1fr) calc(140 * 1rem / var(--kolibri-root-font-size, 16)) auto auto;\n }\n .kol-table-settings__column {\n display: grid;\n align-items: center;\n grid-template-columns: subgrid;\n grid-column: 1/6;\n }\n .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-table {\n --kol-table-selection-col-width: var(--a11y-min-size);\n display: block;\n position: relative;\n max-width: 100%;\n }\n .kol-table:has(.kol-table__focus-element:focus) .kol-table__scroll-container {\n /* @see https://remysharp.com/til/css/focus-ring-default-styles */\n outline: 5px auto Highlight;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: 2px;\n }\n .kol-table__scroll-container {\n overflow-x: auto;\n overflow-y: hidden;\n }\n .kol-table__table {\n table-layout: fixed;\n }\n .kol-table__caption {\n min-height: var(--a11y-min-size);\n text-align: start;\n }\n .kol-table__settings:not(:has(~ .kol-table__scroll-container .kol-table__caption)) {\n min-height: var(--a11y-min-size);\n }\n .kol-table__sort-button.kol-button {\n color: inherit;\n }\n .kol-table__sort {\n display: inline-flex;\n align-items: center;\n }\n .kol-table__sort-order {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .kol-table__body {\n text-align: left;\n }\n .kol-table__body .kol-button__text {\n justify-items: start;\n }\n .kol-table__body:has(.kol-table__loader--shown) {\n position: relative;\n min-height: calc(var(--a11y-min-size) * 3);\n }\n .kol-table__cell--align-left {\n text-align: left;\n }\n .kol-table__cell--align-left .kol-table__sort-button .kol-button__text {\n align-items: start;\n text-align: start;\n }\n .kol-table__cell--align-left .kol-table__cell-actions {\n justify-content: flex-start;\n }\n .kol-table__cell--align-center {\n text-align: center;\n }\n .kol-table__cell--align-center .kol-table__sort-button .kol-button__text {\n align-items: center;\n }\n .kol-table__cell--align-right {\n text-align: right;\n }\n .kol-table__cell--align-right .kol-table__sort-button .kol-button__text {\n align-items: end;\n text-align: end;\n }\n .kol-table__cell--align-right .kol-table__cell-actions {\n justify-content: flex-end;\n }\n .kol-table__cell--selection {\n background-color: white;\n position: sticky !important;\n left: 0;\n z-index: 2;\n width: var(--kol-table-selection-col-width, auto);\n min-width: var(--a11y-min-size);\n min-height: var(--a11y-min-size);\n white-space: nowrap;\n }\n .kol-table__cell--actions {\n white-space: nowrap;\n }\n .kol-table__cell--actions .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-table__cell--actions :host {\n display: inline-block;\n }\n .kol-table__cell--actions .kol-button {\n display: flex;\n height: 100%;\n min-height: var(--a11y-min-size);\n text-decoration-line: none;\n /* The interactive element is the flex container positioning the text, so it carries the\n box the root element used to be. The UA default underline sits on that element too,\n so suppressing `text-decoration` on the wrapper alone is not enough. */\n }\n .kol-table__cell--actions .kol-button__interactive-element {\n display: flex;\n flex: 1;\n text-align: left;\n text-decoration-line: none;\n /* A flex container only exposes a baseline if it has an in-flow text box to derive one\n from; without it the surrounding inline formatting context falls back to the bottom\n margin edge and everything after the element shifts by 1px. The zero-width space\n supplies that box. Measured, not assumed: removing it turns `popover-button/inline`\n and `input-file/basic` red against the develop baseline (the box grows 179→180px). */\n }\n .kol-table__cell--actions .kol-button__interactive-element::before {\n content: \"​\";\n }\n .kol-table__cell--actions .kol-button__text {\n flex: 1 0 100%;\n }\n .kol-table__cell--actions .kol-button {\n /* The tooltip wrapper holds only the absolutely positioned floating tooltip. In the legacy\n DOM it sat in a block flow and collapsed to zero height; as a flex/grid item it would\n stretch to the container height instead, adding phantom rows to the layout. */\n }\n .kol-table__cell--actions .kol-button__tooltip {\n height: 0;\n }\n .kol-table__cell--actions .kol-button--external-link > .kolicon-link-external::before {\n content: none;\n }\n .kol-table__cell--actions .kol-button--external-link .kol-button__interactive-element > .kolicon-link-external::before {\n content: none;\n }\n .kol-table__cell--actions .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-table__cell--actions :host {\n display: inline-block;\n }\n .kol-table__cell--actions .kol-link {\n display: inline-flex;\n max-width: fit-content;\n }\n .kol-table__cell--actions .kol-link--standalone {\n min-width: var(--a11y-min-size);\n min-height: var(--a11y-min-size);\n align-items: stretch;\n /* The interactive element is the flex container positioning the text — it must\n stretch its content so the text pill keeps the full standalone height. */\n }\n .kol-table__cell--actions .kol-link--standalone .kol-link__interactive-element {\n align-items: stretch;\n }\n .kol-table__cell--actions .kol-link--standalone .kol-link__text {\n display: inline-flex;\n flex: 1 1 100%;\n place-items: center;\n }\n .kol-table__cell--actions .kol-link__interactive-element {\n display: inline-flex;\n flex: 1;\n align-items: baseline;\n place-items: center;\n text-align: left;\n text-decoration-line: none;\n }\n .kol-table__cell--actions .kol-link__interactive-element:focus:not([aria-disabled], [disabled]) .kol-span__label, .kol-table__cell--actions .kol-link__interactive-element:hover:not([aria-disabled], [disabled]) .kol-span__label {\n text-decoration-thickness: 0.2em;\n }\n .kol-table__cell--actions .kol-link .kol-span__label {\n text-decoration-line: underline;\n }\n .kol-table__cell--actions .kol-link__icon {\n display: inline-flex;\n }\n .kol-table__cell--sticky-left, .kol-table__cell--sticky-right {\n background-color: white;\n position: sticky !important;\n z-index: 1;\n }\n .kol-table__cell--sticky-left:nth-last-child(1 of .kol-table__cell--sticky-left) {\n border-right: 2px solid black;\n }\n .kol-table__cell--sticky-right:nth-child(1 of .kol-table__cell--sticky-left) {\n border-left: 2px solid black;\n }\n .kol-table__cell-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n }\n .kol-table__cell-states {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-start;\n }\n .kol-table__spacer {\n display: none;\n }\n .kol-table__selection {\n position: relative;\n }\n .kol-table__selection-label {\n display: flex;\n position: relative;\n min-width: var(--a11y-min-size);\n min-height: var(--a11y-min-size);\n align-items: center;\n justify-content: center;\n /* The disabled modifier sits on the label, not on the selection wrapper: the former\n `&--disabled` one level up compiled to `.kol-table__selection--disabled`, which the\n component never renders, so the reset never applied. */\n }\n .kol-table__selection-label:not(.kol-table__selection-label--disabled) {\n cursor: pointer;\n }\n .kol-table__selection-label--disabled {\n cursor: not-allowed;\n }\n .kol-table__selection-icon {\n display: block;\n position: absolute;\n inset: auto;\n z-index: 1;\n }\n .kol-table__selection-input {\n border-style: solid;\n margin: 0;\n appearance: none;\n cursor: pointer;\n }\n .kol-table__selection-input:disabled {\n cursor: not-allowed;\n }\n .kol-table__selection-input:before {\n content: \"\";\n }\n .kol-table__selection-input--checkbox {\n background-color: white;\n display: flex;\n position: relative;\n min-width: calc(var(--a11y-min-size) / 2);\n min-height: calc(var(--a11y-min-size) / 2);\n border-width: 2px;\n align-items: center;\n justify-content: center;\n line-height: 1.5;\n }\n .kol-table__selection-input--radio {\n border-radius: 100%;\n display: flex;\n width: 1.5em;\n min-width: 1.5em;\n height: 1.5em;\n min-height: 1.5em;\n padding: 0;\n border-width: 2px;\n }\n .kol-table__selection-input--radio:before {\n border-radius: 100%;\n width: 0.75em;\n height: 0.75em;\n margin: auto;\n }\n .kol-table__selection-input--radio:checked:before {\n background-color: black;\n }\n @media (forced-colors: active) {\n .kol-table__selection-input--radio:checked:before {\n /* Give it a visible background in forced colors mode */\n background-color: selectedItem !important;\n }\n }\n .kol-table__loader--shown {\n background: white;\n display: flex;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n align-items: center;\n justify-content: center;\n }\n .kol-spin {\n /*\n * The root only groups the spinner and its live region. It generates no box of its own, so\n * both stay layout children of the surrounding container, e.g. the flex container of the\n * table loader.\n */\n display: contents;\n }\n .kol-spin__spinner {\n display: block;\n position: relative;\n }\n}";
8
+ const defaultStyleCss = "@charset \"UTF-8\";\n/*\n* This file defines the layer order for all CSS layers used in KoliBri.\n* The order is important as it determines the cascade priority.\n*\n* Layer order (lowest to highest priority):\n* 1. kol-a11y - Accessibility defaults and requirements\n* 2. kol-global - Global component styles and resets\n* 3. kol-component - Component-specific styles\n* 4. kol-theme-global - Theme-specific global styles\n* 5. kol-theme-component - Theme-specific component styles\n* 6. kol-forced-colors - Defaults for forced colors and high contrast modes\n* 7. kol-theme-forced-colors - Theme-specific styles for forced colors and high contrast modes\n*/\n@layer kol-a11y, kol-global, kol-component, kol-theme-global, kol-theme-component, kol-forced-colors, kol-theme-forced-colors;\n/* forward the rem function */\n/*\n * Guards an interaction rule (`:hover`, `:active`, `:focus…`) against the disabled state.\n *\n * Two shapes are needed because the disabled marker sits on different elements: a native control\n * carries `disabled`, an anchor or summary carries `aria-disabled`, and a BEM wrapper carries a\n * `--disabled` modifier while its inner control carries the attribute.\n */\n/* Wrapper variant: asks the interactive element inside, which is where the attribute lives. */\n/*\n * This file contains all rules for accessibility.\n */\n@layer kol-a11y {\n :host {\n /*\n * Minimum size of interactive elements.\n *\n * The `max(…, 44px)` floor guarantees the WCAG 2.5.5 (AAA) target size of 44px:\n * `to-rem(44)` runs the value through a `calc()` rem round-trip which can lose\n * sub-pixel precision and resolve to e.g. 43.99px depending on the browser's\n * rounding, dropping just below the required minimum.\n */\n --a11y-min-size: max(calc(44 * 1rem / var(--kolibri-root-font-size, 16)), 44px);\n /*\n * No element should be used without verifying the contrast ratio of its background and font colors.\n * By initially setting the background color to white and the font color to black,\n * the contrast ratio is ensured and explicit adjustment is forced.\n */\n --kol-a11y-font-color: black;\n --kol-a11y-background-color: white;\n color: var(--kol-a11y-font-color);\n background-color: var(--kol-a11y-background-color);\n /*\n * Verdana is an accessible font that can be used without requiring additional loading time.\n */\n --kol-a11y-font-family: Verdana;\n font-family: var(--kol-a11y-font-family);\n /*\n * Letter spacing is required for all texts.\n */\n letter-spacing: inherit;\n /*\n * Word spacing is required for all texts.\n */\n word-spacing: inherit;\n /*\n * Text should be aligned left by default to provide a predictable starting point.\n */\n text-align: left;\n }\n * {\n /*\n * This rule enables the word dividing for all texts. That is important for high zoom levels.\n */\n hyphens: auto;\n /*\n * This rule enables the word dividing for all texts. That is important for high zoom levels.\n */\n word-break: break-word;\n }\n /*\n * All interactive elements should have a minimum size of to-rem(44).\n */\n /* input:not([type='checkbox'], [type='radio'], [type='range']), */\n /* option, */\n /* select, */\n /* textarea, */\n button,\n .kol-input .input {\n min-width: var(--a11y-min-size);\n min-height: var(--a11y-min-size);\n }\n /*\n * Some interactive elements should not inherit the font-family and font-size.\n */\n a,\n button,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n input,\n option,\n select,\n textarea {\n /*\n * All elements should inherit the text color from his parent element.\n */\n color: inherit;\n /*\n * All elements should inherit the font family from his parent element.\n */\n font-family: inherit;\n /*\n * All elements should inherit the font size from his parent element.\n */\n font-size: inherit;\n /*\n * Letter spacing is required for all texts.\n */\n letter-spacing: inherit;\n /*\n * Word spacing is required for all texts.\n */\n word-spacing: inherit;\n }\n /**\n * Sometimes we need the semantic element for accessibility reasons,\n * but we don't want to show it.\n *\n * - https://www.a11yproject.com/posts/how-to-hide-content/\n */\n .visually-hidden {\n position: fixed;\n top: 0;\n left: 0;\n width: 1px;\n height: 1px;\n overflow: hidden;\n white-space: nowrap;\n clip-path: inset(50%);\n }\n}\n/*\n * This file contains all rules for forced-colors and highcontrast modes\n * https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/system-color to see all color keywords the browsers are providing\n */\n@layer kol-forced-colors {\n @media (forced-colors: active) {\n .kol-button__text {\n color: ButtonText;\n background-color: ButtonFace;\n border: 2px solid ButtonBorder;\n }\n .kol-button--disabled .kol-button__text {\n color: GrayText;\n border-color: GrayText;\n }\n /*\n * Forced colors drop author colors, so the only way a disabled control still reads as\n * disabled is the `GrayText` system color. `kol-button` had it; the controls whose disabled\n * state is `aria-disabled` (anchor, summary) and the native form controls did not.\n */\n .kol-link__interactive-element[aria-disabled=true],\n .kol-accordion__heading[aria-disabled=true],\n .kol-details__heading[aria-disabled=true] {\n color: GrayText;\n }\n .kol-link__interactive-element[aria-disabled=true] .kol-icon,\n .kol-link__interactive-element[aria-disabled=true] .kol-span__label,\n .kol-accordion__heading[aria-disabled=true] .kol-icon,\n .kol-accordion__heading[aria-disabled=true] .kol-span__label,\n .kol-details__heading[aria-disabled=true] .kol-icon,\n .kol-details__heading[aria-disabled=true] .kol-span__label {\n color: GrayText;\n }\n input:disabled,\n select:disabled,\n textarea:disabled {\n color: GrayText;\n border-color: GrayText;\n }\n .kol-card,\n .kol-dialog,\n .kol-modal {\n color: CanvasText;\n background-color: Canvas;\n border: 1px solid ButtonBorder;\n }\n .kol-pagination__button--selected .kol-button {\n opacity: 1;\n }\n .kol-pagination__button--selected .kol-button__text {\n color: SelectedItemText;\n background-color: SelectedItem;\n }\n /* focus styles */\n .kol-button__interactive-element:focus-visible,\n .kol-link__interactive-element:focus-visible {\n outline: 2px solid Highlight;\n outline-offset: 2px;\n }\n }\n}\n@layer kol-global {\n /*\n * Dieses CSS stellt sicher, dass der Standard-Style\n * von A und Button resettet werden.\n */\n :is(a, button) {\n background-color: transparent;\n width: 100%;\n margin: 0;\n padding: 0;\n border: none;\n /* 100% needed for custom width from outside */\n }\n /*\n * Ensure elements with hidden attribute to be actually not visible\n * @see https://meowni.ca/hidden.is.a.lie.html\n */\n [hidden] {\n display: none !important;\n }\n .badge-text-hint {\n color: black;\n background-color: white;\n }\n}\n@layer kol-global {\n :host {\n /*\n * The max-width is needed to prevent the table from overflowing the\n * parent node, if the table is wider than the parent node.\n */\n max-width: 100%;\n font-size: calc(16 * 1rem / var(--kolibri-root-font-size, 16));\n }\n * {\n /*\n * We prefer to box-sizing: border-box for all elements.\n */\n box-sizing: border-box;\n }\n .kol-span {\n /* KolSpan is a layout component with icons in all directions and a label text in the middle. */\n display: flex;\n flex-flow: column;\n align-items: center;\n justify-content: center;\n /* The sub span in KolSpan is the horizontal span with icon left and right and the label text in the middle. */\n }\n .kol-span__container {\n display: flex;\n align-items: center;\n }\n a,\n button {\n cursor: pointer;\n }\n .kol-span .kol-span__label--hide-label .kol-span__label {\n display: none;\n }\n /* Reset browser agent style. */\n button:disabled {\n color: unset;\n }\n .disabled label,\n .disabled:focus-within label,\n [aria-disabled=true],\n [aria-disabled=true]:focus,\n [disabled],\n [disabled]:focus {\n outline: none;\n cursor: not-allowed;\n }\n [aria-disabled=true]:focus .kol-span,\n [disabled]:focus .kol-span {\n outline: none !important;\n }\n .hastooltip {\n z-index: 900 !important;\n }\n}\n@layer kol-component {\n :host {\n display: block;\n }\n}\n@font-face {\n font-family: \"kolicons\";\n src: url(\"kolicons.eot?t=1791294643544\"); /* IE9*/\n src: url(\"kolicons.eot?t=1791294643544#iefix\") format(\"embedded-opentype\"), url(\"kolicons.woff2?t=1791294643544\") format(\"woff2\"), url(\"kolicons.woff?t=1791294643544\") format(\"woff\"), url(\"kolicons.ttf?t=1791294643544\") format(\"truetype\"), url(\"kolicons.svg?t=1791294643544#kolicons\") format(\"svg\"); /* iOS 4.1- */\n}\n@layer kol-component {\n [class^=kolicon-], [class*=\" kolicon-\"] {\n font-family: \"kolicons\";\n font-style: normal;\n font-weight: 400;\n line-height: 1em;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n .kolicon-alert-error::before {\n content: \"\\ea01\";\n }\n .kolicon-alert-info::before {\n content: \"\\ea02\";\n }\n .kolicon-alert-success::before {\n content: \"\\ea03\";\n }\n .kolicon-alert-warning::before {\n content: \"\\ea04\";\n }\n .kolicon-check::before {\n content: \"\\ea05\";\n }\n .kolicon-chevron-double-left::before {\n content: \"\\ea06\";\n }\n .kolicon-chevron-double-right::before {\n content: \"\\ea07\";\n }\n .kolicon-chevron-down::before {\n content: \"\\ea08\";\n }\n .kolicon-chevron-left::before {\n content: \"\\ea09\";\n }\n .kolicon-chevron-right::before {\n content: \"\\ea0a\";\n }\n .kolicon-chevron-up::before {\n content: \"\\ea0b\";\n }\n .kolicon-cogwheel::before {\n content: \"\\ea0c\";\n }\n .kolicon-cross::before {\n content: \"\\ea0d\";\n }\n .kolicon-eye-closed::before {\n content: \"\\ea0e\";\n }\n .kolicon-eye::before {\n content: \"\\ea0f\";\n }\n .kolicon-house::before {\n content: \"\\ea10\";\n }\n .kolicon-kolibri::before {\n content: \"\\ea11\";\n }\n .kolicon-link-external::before {\n content: \"\\ea12\";\n }\n .kolicon-link::before {\n content: \"\\ea13\";\n }\n .kolicon-minus::before {\n content: \"\\ea14\";\n }\n .kolicon-pin-pinned::before {\n content: \"\\ea15\";\n }\n .kolicon-pin-unpinned::before {\n content: \"\\ea16\";\n }\n .kolicon-plus::before {\n content: \"\\ea17\";\n }\n .kolicon-settings::before {\n content: \"\\ea18\";\n }\n .kolicon-sort-asc::before {\n content: \"\\ea19\";\n }\n .kolicon-sort-desc::before {\n content: \"\\ea1a\";\n }\n .kolicon-sort-neutral::before {\n content: \"\\ea1b\";\n }\n .kolicon-up::before {\n content: \"\\ea1c\";\n }\n .kolicon-version::before {\n content: \"\\ea1d\";\n }\n}\n@layer kol-component {\n .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-tooltip {\n display: contents;\n }\n .kol-tooltip__floating {\n opacity: 0;\n display: none;\n position: fixed;\n /* Avoid layout interference - see https://floating-ui.com/docs/computePosition */\n top: 0;\n left: 0;\n /* Can be used to specify the tooltip-width from the outside. Unset by default. */\n width: var(--kol-tooltip-width, max-content);\n min-width: calc(8 * 1rem / var(--kolibri-root-font-size, 16));\n max-width: 90vw;\n max-height: 90vh;\n animation-direction: normal;\n /* Can be used to specify the animation duration from the outside. 250ms by default. */\n animation-duration: var(--kolibri-tooltip-animation-duration, 250ms);\n animation-fill-mode: forwards;\n animation-iteration-count: 1;\n animation-timing-function: ease-in;\n }\n .kol-tooltip__floating.hide {\n animation-name: hideTooltip;\n }\n .kol-tooltip__floating.show {\n animation-name: showTooltip;\n }\n .kol-tooltip__arrow {\n transform: rotate(45deg);\n color: black;\n background-color: white;\n position: absolute;\n z-index: 999;\n width: calc(10 * 1rem / var(--kolibri-root-font-size, 16));\n height: calc(10 * 1rem / var(--kolibri-root-font-size, 16));\n }\n .kol-tooltip__content {\n color: black;\n background-color: white;\n position: relative;\n z-index: 1000;\n }\n @keyframes hideTooltip {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n display: none;\n }\n }\n @keyframes showTooltip {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n}\n/*\n * Button styles for a skeleton block whose interactive element sits inside the BEM root:\n * `kol-button` renders `<div class=\"kol-button\"><button class=\"kol-button__interactive-element\">`,\n * `kol-link` renders `<div class=\"kol-link\"><a class=\"kol-link__interactive-element\">`.\n *\n * Overlaps with `kol-embedded-button-box-styles` below: both target the block class itself and disagree\n * on `display` and `text-align`. A stylesheet that includes both therefore depends on order or\n * specificity — today that only happens where the caller nests one of them (e.g. `_alert.mixin`\n * nests this one under `.kol-alert`, which wins). Include only one per block unless the nesting\n * makes the winner explicit.\n */\n/*\n * Minimal box replication for shadow trees that render `ButtonFC` without including\n * `kol-button-styles`. The `kol-global` reset (`background`, `width`, `margin`, `padding`,\n * `border`) and the a11y layer `min-height`/`min-width` apply to the native button, on top of the\n * UA `inline-block`, but not to the `div` root that carries the `kol-button` class. This mixin\n * replicates that outer box on the root, while the inner `kol-button__interactive-element` degrades\n * to a plain block container to avoid the inline-level baseline gap the UA `inline-block` would add\n * below it.\n *\n * Mutually exclusive with `kol-button-styles` above — see the collision note there.\n */\n/*\n * Link styles for a skeleton block whose interactive element sits inside the BEM root:\n * `kol-link` renders `<div class=\"kol-link\"><a class=\"kol-link__interactive-element\">`,\n * `kol-button` renders `<div class=\"kol-button\"><button class=\"kol-button__interactive-element\">`.\n */\n@layer kol-component {\n @keyframes rotate {\n to {\n transform: rotate(1turn);\n }\n }\n @keyframes growingCircle {\n 0% {\n opacity: 0.5;\n border-color: white;\n clip-path: polygon(50% 50%, 0 0, 0 0, 0 0, 0 0, 0 0);\n }\n 25% {\n opacity: 0.75;\n border-color: var(--kol-spin-color, var(--kol-theme-spin-color, #000));\n clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 0, 100% 0, 100% 0);\n }\n 50% {\n opacity: 1;\n border-color: var(--kol-spin-color, var(--kol-theme-spin-color, black));\n clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 100% 100%, 100% 100%);\n }\n 75% {\n opacity: 1;\n border-color: var(--kol-spin-color, var(--kol-theme-spin-color, black));\n clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 0 100%, 0 100%);\n }\n 100% {\n opacity: 0.1;\n border-color: var(--kol-spin-color, var(--kol-theme-spin-color, black));\n clip-path: polygon(50% 50%, 0 0, 100% 0, 100% 100%, 0 100%, 0 0);\n }\n }\n .kol-spin__spinner--cycle {\n width: calc(var(--kol-spin-size, 48) * 1rem / var(--kolibri-root-font-size, 16));\n height: calc(var(--kol-spin-size, 48) * 1rem / var(--kolibri-root-font-size, 16));\n }\n .kol-spin__spinner--cycle .kol-spin__loader {\n border-radius: 50%;\n display: block;\n position: relative;\n width: 100%;\n height: 100%;\n animation: 2s linear infinite rotate;\n }\n @media (prefers-reduced-motion) {\n .kol-spin__spinner--cycle .kol-spin__loader {\n animation-duration: 4s !important;\n }\n }\n .kol-spin__spinner--cycle .kol-spin__loader::before {\n border-radius: 50%;\n position: absolute;\n inset: 0;\n content: \"\";\n animation: 3s linear infinite growingCircle;\n border: 5px solid var(--kol-spin-color, var(--kol-theme-spin-color, #333));\n }\n @media (prefers-reduced-motion) {\n .kol-spin__spinner--cycle .kol-spin__loader::before {\n animation-duration: 6s !important;\n }\n }\n}\n@layer kol-component {\n @keyframes spin1 {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n }\n @keyframes spin2 {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(calc(var(--kol-spin-size, 13) * 1rem / var(--kolibri-root-font-size, 16)), 0);\n }\n }\n @keyframes spin3 {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n }\n }\n /* https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion#toning_down_the_animation_scaling */\n @media (prefers-reduced-motion) {\n .kol-spin__spinner-element {\n animation-duration: 2s !important;\n }\n }\n .kol-spin__spinner--dot {\n --kol-spin-border-width: calc(var(--kol-spin-size, 13) / 10);\n width: calc(calc(var(--kol-spin-size, 13) * 3 + 2) * 1rem / var(--kolibri-root-font-size, 16));\n height: calc(calc(var(--kol-spin-size, 13) + var(--kol-spin-border-width) * 2) * 1rem / var(--kolibri-root-font-size, 16));\n }\n .kol-spin__spinner--dot .kol-spin__spinner-element {\n background-color: var(--kol-spin-color, var(--kol-theme-spin-color, #000));\n border-radius: 50%;\n position: absolute;\n top: 1px;\n width: calc(var(--kol-spin-size, 13) * 1rem / var(--kolibri-root-font-size, 16));\n height: calc(var(--kol-spin-size, 13) * 1rem / var(--kolibri-root-font-size, 16));\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\n border: calc(var(--kol-spin-border-width) * 1rem / var(--kolibri-root-font-size, 16)) solid white;\n }\n .kol-spin__spinner--dot .kol-spin__spinner-element--1 {\n left: calc(var(--kol-spin-border-width) * 1rem / var(--kolibri-root-font-size, 16));\n z-index: 0;\n animation: 1s infinite spin1;\n }\n .kol-spin__spinner--dot .kol-spin__spinner-element--2 {\n left: calc(var(--kol-spin-border-width) * 1rem / var(--kolibri-root-font-size, 16));\n z-index: 1;\n animation: 1s infinite spin2;\n }\n .kol-spin__spinner--dot .kol-spin__spinner-element--3 {\n left: calc(calc(var(--kol-spin-size, 13) + var(--kol-spin-border-width)) * 1rem / var(--kolibri-root-font-size, 16));\n z-index: 1;\n animation: 1s infinite spin2;\n }\n .kol-spin__spinner--dot .kol-spin__spinner-element--neutral {\n opacity: 0.6;\n left: calc(calc(var(--kol-spin-size, 13) * 2 + var(--kol-spin-border-width)) * 1rem / var(--kolibri-root-font-size, 16));\n z-index: 0;\n animation: 1s infinite spin3;\n }\n}\n@layer kol-component {\n .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-card .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-card :host {\n display: inline-block;\n }\n .kol-card .kol-button {\n display: flex;\n height: 100%;\n min-height: var(--a11y-min-size);\n text-decoration-line: none;\n /* The interactive element is the flex container positioning the text, so it carries the\n box the root element used to be. The UA default underline sits on that element too,\n so suppressing `text-decoration` on the wrapper alone is not enough. */\n }\n .kol-card .kol-button__interactive-element {\n display: flex;\n flex: 1;\n text-align: left;\n text-decoration-line: none;\n /* A flex container only exposes a baseline if it has an in-flow text box to derive one\n from; without it the surrounding inline formatting context falls back to the bottom\n margin edge and everything after the element shifts by 1px. The zero-width space\n supplies that box. Measured, not assumed: removing it turns `popover-button/inline`\n and `input-file/basic` red against the develop baseline (the box grows 179→180px). */\n }\n .kol-card .kol-button__interactive-element::before {\n content: \"​\";\n }\n .kol-card .kol-button__text {\n flex: 1 0 100%;\n }\n .kol-card .kol-button {\n /* The tooltip wrapper holds only the absolutely positioned floating tooltip. In the legacy\n DOM it sat in a block flow and collapsed to zero height; as a flex/grid item it would\n stretch to the container height instead, adding phantom rows to the layout. */\n }\n .kol-card .kol-button__tooltip {\n height: 0;\n }\n .kol-card .kol-button--external-link > .kolicon-link-external::before {\n content: none;\n }\n .kol-card .kol-button--external-link .kol-button__interactive-element > .kolicon-link-external::before {\n content: none;\n }\n .kol-card {\n /* Visible with forced colors */\n outline: transparent solid calc(1 * 1rem / var(--kolibri-root-font-size, 16));\n display: grid;\n height: 100%;\n overflow: visible;\n grid-template-areas: \"header close\" \"content content\";\n grid-template-columns: 1fr min-content;\n grid-template-rows: min-content 1fr;\n }\n .kol-card__header {\n align-self: start;\n grid-area: header;\n }\n .kol-card__content {\n align-self: stretch;\n grid-area: content;\n }\n .kol-card__close-button {\n grid-area: close;\n }\n .kol-card:has(.kol-card__link) {\n position: relative;\n }\n .kol-card__link::after {\n position: absolute;\n inset: 0;\n content: \"\";\n cursor: pointer;\n }\n .kol-dialog,\n .kol-modal {\n min-height: var(--a11y-min-size);\n padding: 0;\n border: 0;\n /* Prevent scroll chaining from scrollable dialog content to the page. */\n overscroll-behavior: contain;\n }\n .kol-dialog__close-button,\n .kol-modal__close-button {\n position: absolute;\n top: calc(1 * 1rem / var(--kolibri-root-font-size, 16));\n right: calc(1 * 1rem / var(--kolibri-root-font-size, 16));\n z-index: 1;\n }\n .kol-alert .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-alert :host {\n display: inline-block;\n }\n .kol-alert .kol-button {\n display: flex;\n height: 100%;\n min-height: var(--a11y-min-size);\n text-decoration-line: none;\n /* The interactive element is the flex container positioning the text, so it carries the\n box the root element used to be. The UA default underline sits on that element too,\n so suppressing `text-decoration` on the wrapper alone is not enough. */\n }\n .kol-alert .kol-button__interactive-element {\n display: flex;\n flex: 1;\n text-align: left;\n text-decoration-line: none;\n /* A flex container only exposes a baseline if it has an in-flow text box to derive one\n from; without it the surrounding inline formatting context falls back to the bottom\n margin edge and everything after the element shifts by 1px. The zero-width space\n supplies that box. Measured, not assumed: removing it turns `popover-button/inline`\n and `input-file/basic` red against the develop baseline (the box grows 179→180px). */\n }\n .kol-alert .kol-button__interactive-element::before {\n content: \"​\";\n }\n .kol-alert .kol-button__text {\n flex: 1 0 100%;\n }\n .kol-alert .kol-button {\n /* The tooltip wrapper holds only the absolutely positioned floating tooltip. In the legacy\n DOM it sat in a block flow and collapsed to zero height; as a flex/grid item it would\n stretch to the container height instead, adding phantom rows to the layout. */\n }\n .kol-alert .kol-button__tooltip {\n height: 0;\n }\n .kol-alert .kol-button--external-link > .kolicon-link-external::before {\n content: none;\n }\n .kol-alert .kol-button--external-link .kol-button__interactive-element > .kolicon-link-external::before {\n content: none;\n }\n .kol-alert {\n display: grid;\n grid-template-areas: \"icon heading close\" \"icon content close\";\n grid-template-columns: min-content 1fr min-content;\n grid-template-rows: min-content min-content;\n }\n .kol-alert__icon {\n grid-area: icon;\n }\n .kol-alert__heading {\n grid-area: heading;\n }\n .kol-alert__closer {\n /* Visible with forced colors */\n outline: transparent solid calc(1 * 1rem / var(--kolibri-root-font-size, 16));\n grid-area: close;\n }\n .kol-alert__content {\n grid-area: content;\n }\n .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n :host {\n display: inline-block;\n }\n .kol-button {\n display: flex;\n height: 100%;\n min-height: var(--a11y-min-size);\n text-decoration-line: none;\n /* The interactive element is the flex container positioning the text, so it carries the\n box the root element used to be. The UA default underline sits on that element too,\n so suppressing `text-decoration` on the wrapper alone is not enough. */\n }\n .kol-button__interactive-element {\n display: flex;\n flex: 1;\n text-align: left;\n text-decoration-line: none;\n /* A flex container only exposes a baseline if it has an in-flow text box to derive one\n from; without it the surrounding inline formatting context falls back to the bottom\n margin edge and everything after the element shifts by 1px. The zero-width space\n supplies that box. Measured, not assumed: removing it turns `popover-button/inline`\n and `input-file/basic` red against the develop baseline (the box grows 179→180px). */\n }\n .kol-button__interactive-element::before {\n content: \"​\";\n }\n .kol-button__text {\n flex: 1 0 100%;\n }\n .kol-button {\n /* The tooltip wrapper holds only the absolutely positioned floating tooltip. In the legacy\n DOM it sat in a block flow and collapsed to zero height; as a flex/grid item it would\n stretch to the container height instead, adding phantom rows to the layout. */\n }\n .kol-button__tooltip {\n height: 0;\n }\n .kol-button--external-link > .kolicon-link-external::before {\n content: none;\n }\n .kol-button--external-link .kol-button__interactive-element > .kolicon-link-external::before {\n content: none;\n }\n .kol-popover-button {\n /*\n * The predecessor rendered this box as an unstyled (inline) custom element host; keep the\n * inline display so the flow layout around the embedded button stays unchanged.\n */\n display: inline;\n }\n .kol-popover-button__popover {\n margin: 0;\n padding: 0;\n border: 0;\n }\n .kol-popover-button--open .kol-button__tooltip {\n display: none;\n }\n .kol-popover-button--inline {\n display: inline-block;\n /* The size exemption has to cover both the BEM root div and the inner interactive element:\n the a11y layer pins every `button` to 44×44, so the inner `kol-button__interactive-element`\n needs the override as well — the root alone used to be the button before the skeleton migration. */\n }\n .kol-popover-button--inline .kol-button,\n .kol-popover-button--inline .kol-button .kol-button__interactive-element {\n min-width: 0;\n min-height: 1em;\n }\n .kol-popover {\n opacity: 0;\n transition: 0.2s ease-out opacity;\n }\n .kol-popover-button--open .kol-popover-button__popover {\n opacity: 1;\n }\n .kol-table-settings {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1;\n }\n .kol-table-settings .kol-popover-button__popover {\n background: white;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n border-radius: calc(8 * 1rem / var(--kolibri-root-font-size, 16));\n border: 1px solid black;\n }\n .kol-table-settings__columns {\n display: grid;\n max-height: calc(200 * 1rem / var(--kolibri-root-font-size, 16));\n overflow: auto;\n grid-auto-rows: min-content;\n grid-template-columns: min-content minmax(max-content, 1fr) calc(140 * 1rem / var(--kolibri-root-font-size, 16)) auto auto;\n }\n .kol-table-settings__column {\n display: grid;\n align-items: center;\n grid-template-columns: subgrid;\n grid-column: 1/6;\n }\n .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-table {\n --kol-table-selection-col-width: var(--a11y-min-size);\n display: block;\n position: relative;\n max-width: 100%;\n }\n .kol-table:has(.kol-table__focus-element:focus) .kol-table__scroll-container {\n /* @see https://remysharp.com/til/css/focus-ring-default-styles */\n outline: 5px auto Highlight;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: 2px;\n }\n .kol-table__scroll-container {\n overflow-x: auto;\n overflow-y: hidden;\n }\n .kol-table__table {\n table-layout: fixed;\n }\n .kol-table__caption {\n min-height: var(--a11y-min-size);\n text-align: start;\n }\n .kol-table__settings:not(:has(~ .kol-table__scroll-container .kol-table__caption)) {\n min-height: var(--a11y-min-size);\n }\n .kol-table__sort-button.kol-button {\n color: inherit;\n }\n .kol-table__sort {\n display: inline-flex;\n align-items: center;\n }\n .kol-table__sort-order {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .kol-table__body {\n text-align: left;\n }\n .kol-table__body .kol-button__text {\n justify-items: start;\n }\n .kol-table__body:has(.kol-table__loader--shown) {\n position: relative;\n min-height: calc(var(--a11y-min-size) * 3);\n }\n .kol-table__cell--align-left {\n text-align: left;\n }\n .kol-table__cell--align-left .kol-table__sort-button .kol-button__text {\n align-items: start;\n text-align: start;\n }\n .kol-table__cell--align-left .kol-table__cell-actions {\n justify-content: flex-start;\n }\n .kol-table__cell--align-center {\n text-align: center;\n }\n .kol-table__cell--align-center .kol-table__sort-button .kol-button__text {\n align-items: center;\n }\n .kol-table__cell--align-right {\n text-align: right;\n }\n .kol-table__cell--align-right .kol-table__sort-button .kol-button__text {\n align-items: end;\n text-align: end;\n }\n .kol-table__cell--align-right .kol-table__cell-actions {\n justify-content: flex-end;\n }\n .kol-table__cell--selection {\n background-color: white;\n position: sticky !important;\n left: 0;\n z-index: 2;\n width: var(--kol-table-selection-col-width, auto);\n min-width: var(--a11y-min-size);\n min-height: var(--a11y-min-size);\n white-space: nowrap;\n }\n .kol-table__cell--actions {\n white-space: nowrap;\n }\n .kol-table__cell--actions .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-table__cell--actions :host {\n display: inline-block;\n }\n .kol-table__cell--actions .kol-button {\n display: flex;\n height: 100%;\n min-height: var(--a11y-min-size);\n text-decoration-line: none;\n /* The interactive element is the flex container positioning the text, so it carries the\n box the root element used to be. The UA default underline sits on that element too,\n so suppressing `text-decoration` on the wrapper alone is not enough. */\n }\n .kol-table__cell--actions .kol-button__interactive-element {\n display: flex;\n flex: 1;\n text-align: left;\n text-decoration-line: none;\n /* A flex container only exposes a baseline if it has an in-flow text box to derive one\n from; without it the surrounding inline formatting context falls back to the bottom\n margin edge and everything after the element shifts by 1px. The zero-width space\n supplies that box. Measured, not assumed: removing it turns `popover-button/inline`\n and `input-file/basic` red against the develop baseline (the box grows 179→180px). */\n }\n .kol-table__cell--actions .kol-button__interactive-element::before {\n content: \"​\";\n }\n .kol-table__cell--actions .kol-button__text {\n flex: 1 0 100%;\n }\n .kol-table__cell--actions .kol-button {\n /* The tooltip wrapper holds only the absolutely positioned floating tooltip. In the legacy\n DOM it sat in a block flow and collapsed to zero height; as a flex/grid item it would\n stretch to the container height instead, adding phantom rows to the layout. */\n }\n .kol-table__cell--actions .kol-button__tooltip {\n height: 0;\n }\n .kol-table__cell--actions .kol-button--external-link > .kolicon-link-external::before {\n content: none;\n }\n .kol-table__cell--actions .kol-button--external-link .kol-button__interactive-element > .kolicon-link-external::before {\n content: none;\n }\n .kol-table__cell--actions .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-table__cell--actions :host {\n display: inline-block;\n }\n .kol-table__cell--actions .kol-link {\n display: inline-flex;\n max-width: fit-content;\n }\n .kol-table__cell--actions .kol-link--standalone {\n min-width: var(--a11y-min-size);\n min-height: var(--a11y-min-size);\n align-items: stretch;\n /* The interactive element is the flex container positioning the text — it must\n stretch its content so the text pill keeps the full standalone height. */\n }\n .kol-table__cell--actions .kol-link--standalone .kol-link__interactive-element {\n align-items: stretch;\n }\n .kol-table__cell--actions .kol-link--standalone .kol-link__text {\n display: inline-flex;\n flex: 1 1 100%;\n place-items: center;\n }\n .kol-table__cell--actions .kol-link__interactive-element {\n display: inline-flex;\n flex: 1;\n align-items: baseline;\n place-items: center;\n text-align: left;\n text-decoration-line: none;\n }\n .kol-table__cell--actions .kol-link__interactive-element:focus:not([aria-disabled], [disabled]) .kol-span__label, .kol-table__cell--actions .kol-link__interactive-element:hover:not([aria-disabled], [disabled]) .kol-span__label {\n text-decoration-thickness: 0.2em;\n }\n .kol-table__cell--actions .kol-link .kol-span__label {\n text-decoration-line: underline;\n }\n .kol-table__cell--actions .kol-link__icon {\n display: inline-flex;\n }\n .kol-table__cell--sticky-left, .kol-table__cell--sticky-right {\n background-color: white;\n position: sticky !important;\n z-index: 1;\n }\n .kol-table__cell--sticky-left:nth-last-child(1 of .kol-table__cell--sticky-left) {\n border-right: 2px solid black;\n }\n .kol-table__cell--sticky-right:nth-child(1 of .kol-table__cell--sticky-left) {\n border-left: 2px solid black;\n }\n .kol-table__cell-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n }\n .kol-table__cell-states {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-start;\n }\n .kol-table__spacer {\n display: none;\n }\n .kol-table__selection {\n position: relative;\n }\n .kol-table__selection-label {\n display: flex;\n position: relative;\n min-width: var(--a11y-min-size);\n min-height: var(--a11y-min-size);\n align-items: center;\n justify-content: center;\n /* The disabled modifier sits on the label, not on the selection wrapper: the former\n `&--disabled` one level up compiled to `.kol-table__selection--disabled`, which the\n component never renders, so the reset never applied. */\n }\n .kol-table__selection-label:not(.kol-table__selection-label--disabled) {\n cursor: pointer;\n }\n .kol-table__selection-label--disabled {\n cursor: not-allowed;\n }\n .kol-table__selection-icon {\n display: block;\n position: absolute;\n inset: auto;\n z-index: 1;\n }\n .kol-table__selection-input {\n border-style: solid;\n margin: 0;\n appearance: none;\n cursor: pointer;\n }\n .kol-table__selection-input:disabled {\n cursor: not-allowed;\n }\n .kol-table__selection-input:before {\n content: \"\";\n }\n .kol-table__selection-input--checkbox {\n background-color: white;\n display: flex;\n position: relative;\n min-width: calc(var(--a11y-min-size) / 2);\n min-height: calc(var(--a11y-min-size) / 2);\n border-width: 2px;\n align-items: center;\n justify-content: center;\n line-height: 1.5;\n }\n .kol-table__selection-input--radio {\n border-radius: 100%;\n display: flex;\n width: 1.5em;\n min-width: 1.5em;\n height: 1.5em;\n min-height: 1.5em;\n padding: 0;\n border-width: 2px;\n }\n .kol-table__selection-input--radio:before {\n border-radius: 100%;\n width: 0.75em;\n height: 0.75em;\n margin: auto;\n }\n .kol-table__selection-input--radio:checked:before {\n background-color: black;\n }\n @media (forced-colors: active) {\n .kol-table__selection-input--radio:checked:before {\n /* Give it a visible background in forced colors mode */\n background-color: selectedItem !important;\n }\n }\n .kol-table__loader--shown {\n background: white;\n display: flex;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n align-items: center;\n justify-content: center;\n }\n .kol-spin {\n /*\n * The root only groups the spinner and its live region. It generates no box of its own, so\n * both stay layout children of the surrounding container, e.g. the flex container of the\n * table loader.\n */\n display: contents;\n }\n .kol-spin__spinner {\n display: block;\n position: relative;\n }\n}";
9
9
 
10
10
  const KolTableStateless$1 = proxyCustomElement(class KolTableStateless extends BaseTableStatelessWebComponent {
11
11
  constructor(registerHost) {
@@ -129,7 +129,7 @@ const TabsFC = (props) => {
129
129
  return (h(BemRootNodeFC, { block: "kol-tabs", modifiers: { [`align-${align}`]: true }, class: hostClass, ref: refRoot }, h("div", { class: BEM_CLASS_TABS__BUTTON_GROUP }, h("div", { "aria-label": label, class: BEM_CLASS_TABS__TABLIST, role: "tablist", onKeyDown: handleKeyDown, onBlur: handleBlur }, tabButtons.map(({ buttonProps, refBox }) => (h("div", { class: BEM_CLASS_TABS__TAB, ref: refBox }, h(ButtonFC, Object.assign({}, buttonProps)))))), hasCreateButton && (h("div", { class: BEM_CLASS_TABS__BUTTON_CREATE, ref: createButton.refBox }, h(ButtonFC, Object.assign({}, createButton.buttonProps))))), h("div", { class: BEM_CLASS_TABS__CONTENT, ref: refContent })));
130
130
  };
131
131
 
132
- const defaultStyleCss = "@charset \"UTF-8\";\n/* forward the rem function */\n/*\n * Guards an interaction rule (`:hover`, `:active`, `:focus…`) against the disabled state.\n *\n * Two shapes are needed because the disabled marker sits on different elements: a native control\n * carries `disabled`, an anchor or summary carries `aria-disabled`, and a BEM wrapper carries a\n * `--disabled` modifier while its inner control carries the attribute.\n */\n/* Wrapper variant: asks the interactive element inside, which is where the attribute lives. */\n/*\n* This file defines the layer order for all CSS layers used in KoliBri.\n* The order is important as it determines the cascade priority.\n*\n* Layer order (lowest to highest priority):\n* 1. kol-a11y - Accessibility defaults and requirements\n* 2. kol-global - Global component styles and resets\n* 3. kol-component - Component-specific styles\n* 4. kol-theme-global - Theme-specific global styles\n* 5. kol-theme-component - Theme-specific component styles\n* 6. kol-forced-colors - Defaults for forced colors and high contrast modes\n* 7. kol-theme-forced-colors - Theme-specific styles for forced colors and high contrast modes\n*/\n@layer kol-a11y, kol-global, kol-component, kol-theme-global, kol-theme-component, kol-forced-colors, kol-theme-forced-colors;\n/*\n * This file contains all rules for accessibility.\n */\n@layer kol-a11y {\n :host {\n /*\n * Minimum size of interactive elements.\n *\n * The `max(…, 44px)` floor guarantees the WCAG 2.5.5 (AAA) target size of 44px:\n * `to-rem(44)` runs the value through a `calc()` rem round-trip which can lose\n * sub-pixel precision and resolve to e.g. 43.99px depending on the browser's\n * rounding, dropping just below the required minimum.\n */\n --a11y-min-size: max(calc(44 * 1rem / var(--kolibri-root-font-size, 16)), 44px);\n /*\n * No element should be used without verifying the contrast ratio of its background and font colors.\n * By initially setting the background color to white and the font color to black,\n * the contrast ratio is ensured and explicit adjustment is forced.\n */\n --kol-a11y-font-color: black;\n --kol-a11y-background-color: white;\n color: var(--kol-a11y-font-color);\n background-color: var(--kol-a11y-background-color);\n /*\n * Verdana is an accessible font that can be used without requiring additional loading time.\n */\n --kol-a11y-font-family: Verdana;\n font-family: var(--kol-a11y-font-family);\n /*\n * Letter spacing is required for all texts.\n */\n letter-spacing: inherit;\n /*\n * Word spacing is required for all texts.\n */\n word-spacing: inherit;\n /*\n * Text should be aligned left by default to provide a predictable starting point.\n */\n text-align: left;\n }\n * {\n /*\n * This rule enables the word dividing for all texts. That is important for high zoom levels.\n */\n hyphens: auto;\n /*\n * This rule enables the word dividing for all texts. That is important for high zoom levels.\n */\n word-break: break-word;\n }\n /*\n * All interactive elements should have a minimum size of to-rem(44).\n */\n /* input:not([type='checkbox'], [type='radio'], [type='range']), */\n /* option, */\n /* select, */\n /* textarea, */\n button,\n .kol-input .input {\n min-width: var(--a11y-min-size);\n min-height: var(--a11y-min-size);\n }\n /*\n * Some interactive elements should not inherit the font-family and font-size.\n */\n a,\n button,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n input,\n option,\n select,\n textarea {\n /*\n * All elements should inherit the text color from his parent element.\n */\n color: inherit;\n /*\n * All elements should inherit the font family from his parent element.\n */\n font-family: inherit;\n /*\n * All elements should inherit the font size from his parent element.\n */\n font-size: inherit;\n /*\n * Letter spacing is required for all texts.\n */\n letter-spacing: inherit;\n /*\n * Word spacing is required for all texts.\n */\n word-spacing: inherit;\n }\n /**\n * Sometimes we need the semantic element for accessibility reasons,\n * but we don't want to show it.\n *\n * - https://www.a11yproject.com/posts/how-to-hide-content/\n */\n .visually-hidden {\n position: fixed;\n top: 0;\n left: 0;\n width: 1px;\n height: 1px;\n overflow: hidden;\n white-space: nowrap;\n clip-path: inset(50%);\n }\n}\n/*\n * This file contains all rules for forced-colors and highcontrast modes\n * https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/system-color to see all color keywords the browsers are providing\n */\n@layer kol-forced-colors {\n @media (forced-colors: active) {\n .kol-button__text {\n color: ButtonText;\n background-color: ButtonFace;\n border: 2px solid ButtonBorder;\n }\n .kol-button--disabled .kol-button__text {\n color: GrayText;\n border-color: GrayText;\n }\n /*\n * Forced colors drop author colors, so the only way a disabled control still reads as\n * disabled is the `GrayText` system color. `kol-button` had it; the controls whose disabled\n * state is `aria-disabled` (anchor, summary) and the native form controls did not.\n */\n .kol-link__interactive-element[aria-disabled=true],\n .kol-accordion__heading[aria-disabled=true],\n .kol-details__heading[aria-disabled=true] {\n color: GrayText;\n }\n .kol-link__interactive-element[aria-disabled=true] .kol-icon,\n .kol-link__interactive-element[aria-disabled=true] .kol-span__label,\n .kol-accordion__heading[aria-disabled=true] .kol-icon,\n .kol-accordion__heading[aria-disabled=true] .kol-span__label,\n .kol-details__heading[aria-disabled=true] .kol-icon,\n .kol-details__heading[aria-disabled=true] .kol-span__label {\n color: GrayText;\n }\n input:disabled,\n select:disabled,\n textarea:disabled {\n color: GrayText;\n border-color: GrayText;\n }\n .kol-card,\n .kol-dialog,\n .kol-modal {\n color: CanvasText;\n background-color: Canvas;\n border: 1px solid ButtonBorder;\n }\n .kol-pagination__button--selected .kol-button {\n opacity: 1;\n }\n .kol-pagination__button--selected .kol-button__text {\n color: SelectedItemText;\n background-color: SelectedItem;\n }\n /* focus styles */\n .kol-button__interactive-element:focus-visible,\n .kol-link__interactive-element:focus-visible {\n outline: 2px solid Highlight;\n outline-offset: 2px;\n }\n }\n}\n@layer kol-global {\n /*\n * Dieses CSS stellt sicher, dass der Standard-Style\n * von A und Button resettet werden.\n */\n :is(a, button) {\n background-color: transparent;\n width: 100%;\n margin: 0;\n padding: 0;\n border: none;\n /* 100% needed for custom width from outside */\n }\n /*\n * Ensure elements with hidden attribute to be actually not visible\n * @see https://meowni.ca/hidden.is.a.lie.html\n */\n [hidden] {\n display: none !important;\n }\n .badge-text-hint {\n color: black;\n background-color: white;\n }\n}\n@layer kol-global {\n :host {\n /*\n * The max-width is needed to prevent the table from overflowing the\n * parent node, if the table is wider than the parent node.\n */\n max-width: 100%;\n font-size: calc(16 * 1rem / var(--kolibri-root-font-size, 16));\n }\n * {\n /*\n * We prefer to box-sizing: border-box for all elements.\n */\n box-sizing: border-box;\n }\n .kol-span {\n /* KolSpan is a layout component with icons in all directions and a label text in the middle. */\n display: flex;\n flex-flow: column;\n align-items: center;\n justify-content: center;\n /* The sub span in KolSpan is the horizontal span with icon left and right and the label text in the middle. */\n }\n .kol-span__container {\n display: flex;\n align-items: center;\n }\n a,\n button {\n cursor: pointer;\n }\n .kol-span .kol-span__label--hide-label .kol-span__label {\n display: none;\n }\n /* Reset browser agent style. */\n button:disabled {\n color: unset;\n }\n .disabled label,\n .disabled:focus-within label,\n [aria-disabled=true],\n [aria-disabled=true]:focus,\n [disabled],\n [disabled]:focus {\n outline: none;\n cursor: not-allowed;\n }\n [aria-disabled=true]:focus .kol-span,\n [disabled]:focus .kol-span {\n outline: none !important;\n }\n .hastooltip {\n z-index: 900 !important;\n }\n}\n@layer kol-component {\n :host {\n display: block;\n }\n}\n@font-face {\n font-family: \"kolicons\";\n src: url(\"kolicons.eot?t=1791283887610\"); /* IE9*/\n src: url(\"kolicons.eot?t=1791283887610#iefix\") format(\"embedded-opentype\"), url(\"kolicons.woff2?t=1791283887610\") format(\"woff2\"), url(\"kolicons.woff?t=1791283887610\") format(\"woff\"), url(\"kolicons.ttf?t=1791283887610\") format(\"truetype\"), url(\"kolicons.svg?t=1791283887610#kolicons\") format(\"svg\"); /* iOS 4.1- */\n}\n@layer kol-component {\n [class^=kolicon-], [class*=\" kolicon-\"] {\n font-family: \"kolicons\";\n font-style: normal;\n font-weight: 400;\n line-height: 1em;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n .kolicon-alert-error::before {\n content: \"\\ea01\";\n }\n .kolicon-alert-info::before {\n content: \"\\ea02\";\n }\n .kolicon-alert-success::before {\n content: \"\\ea03\";\n }\n .kolicon-alert-warning::before {\n content: \"\\ea04\";\n }\n .kolicon-check::before {\n content: \"\\ea05\";\n }\n .kolicon-chevron-double-left::before {\n content: \"\\ea06\";\n }\n .kolicon-chevron-double-right::before {\n content: \"\\ea07\";\n }\n .kolicon-chevron-down::before {\n content: \"\\ea08\";\n }\n .kolicon-chevron-left::before {\n content: \"\\ea09\";\n }\n .kolicon-chevron-right::before {\n content: \"\\ea0a\";\n }\n .kolicon-chevron-up::before {\n content: \"\\ea0b\";\n }\n .kolicon-cogwheel::before {\n content: \"\\ea0c\";\n }\n .kolicon-cross::before {\n content: \"\\ea0d\";\n }\n .kolicon-eye-closed::before {\n content: \"\\ea0e\";\n }\n .kolicon-eye::before {\n content: \"\\ea0f\";\n }\n .kolicon-house::before {\n content: \"\\ea10\";\n }\n .kolicon-kolibri::before {\n content: \"\\ea11\";\n }\n .kolicon-link-external::before {\n content: \"\\ea12\";\n }\n .kolicon-link::before {\n content: \"\\ea13\";\n }\n .kolicon-minus::before {\n content: \"\\ea14\";\n }\n .kolicon-pin-pinned::before {\n content: \"\\ea15\";\n }\n .kolicon-pin-unpinned::before {\n content: \"\\ea16\";\n }\n .kolicon-plus::before {\n content: \"\\ea17\";\n }\n .kolicon-settings::before {\n content: \"\\ea18\";\n }\n .kolicon-sort-asc::before {\n content: \"\\ea19\";\n }\n .kolicon-sort-desc::before {\n content: \"\\ea1a\";\n }\n .kolicon-sort-neutral::before {\n content: \"\\ea1b\";\n }\n .kolicon-up::before {\n content: \"\\ea1c\";\n }\n .kolicon-version::before {\n content: \"\\ea1d\";\n }\n}\n@layer kol-component {\n .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-tooltip {\n display: contents;\n }\n .kol-tooltip__floating {\n opacity: 0;\n display: none;\n position: fixed;\n /* Avoid layout interference - see https://floating-ui.com/docs/computePosition */\n top: 0;\n left: 0;\n /* Can be used to specify the tooltip-width from the outside. Unset by default. */\n width: var(--kol-tooltip-width, max-content);\n min-width: calc(8 * 1rem / var(--kolibri-root-font-size, 16));\n max-width: 90vw;\n max-height: 90vh;\n animation-direction: normal;\n /* Can be used to specify the animation duration from the outside. 250ms by default. */\n animation-duration: var(--kolibri-tooltip-animation-duration, 250ms);\n animation-fill-mode: forwards;\n animation-iteration-count: 1;\n animation-timing-function: ease-in;\n }\n .kol-tooltip__floating.hide {\n animation-name: hideTooltip;\n }\n .kol-tooltip__floating.show {\n animation-name: showTooltip;\n }\n .kol-tooltip__arrow {\n transform: rotate(45deg);\n color: black;\n background-color: white;\n position: absolute;\n z-index: 999;\n width: calc(10 * 1rem / var(--kolibri-root-font-size, 16));\n height: calc(10 * 1rem / var(--kolibri-root-font-size, 16));\n }\n .kol-tooltip__content {\n color: black;\n background-color: white;\n position: relative;\n z-index: 1000;\n }\n @keyframes hideTooltip {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n display: none;\n }\n }\n @keyframes showTooltip {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n}\n/*\n * Button styles for a skeleton block whose interactive element sits inside the BEM root:\n * `kol-button` renders `<div class=\"kol-button\"><button class=\"kol-button__interactive-element\">`,\n * `kol-link` renders `<div class=\"kol-link\"><a class=\"kol-link__interactive-element\">`.\n *\n * Overlaps with `kol-embedded-button-box-styles` below: both target the block class itself and disagree\n * on `display` and `text-align`. A stylesheet that includes both therefore depends on order or\n * specificity — today that only happens where the caller nests one of them (e.g. `_alert.mixin`\n * nests this one under `.kol-alert`, which wins). Include only one per block unless the nesting\n * makes the winner explicit.\n */\n/*\n * Minimal box replication for shadow trees that render `ButtonFC` without including\n * `kol-button-styles`. The `kol-global` reset (`background`, `width`, `margin`, `padding`,\n * `border`) and the a11y layer `min-height`/`min-width` apply to the native button, on top of the\n * UA `inline-block`, but not to the `div` root that carries the `kol-button` class. This mixin\n * replicates that outer box on the root, while the inner `kol-button__interactive-element` degrades\n * to a plain block container to avoid the inline-level baseline gap the UA `inline-block` would add\n * below it.\n *\n * Mutually exclusive with `kol-button-styles` above — see the collision note there.\n */\n@layer kol-component {\n .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-button {\n background-color: transparent;\n display: inline-block;\n width: 100%;\n min-width: var(--a11y-min-size);\n min-height: var(--a11y-min-size);\n margin: 0;\n padding: 0;\n /* The user-agent stylesheet centers text on `button`, but not on `div`. The wrapper now\n carries the class, so that UA default has to be restated here for the inner content to\n sit where it did when the button element itself was the class carrier. */\n text-align: center;\n /* Replicate the reset the real button received: width stays at the initial `medium`, only\n the style becomes `none`. Consumer rules that flip e.g. `border-bottom-style` back to\n `solid` (tabs) must therefore target the inner button (see the `__interactive-element`\n override below), because Firefox vertically centers button content inside the content box,\n which shrinks by the border — exactly as it did when the real button carried these rules. */\n }\n .kol-button__interactive-element {\n border-style: none;\n display: block;\n border-width: medium;\n /* The UA pins `text-align: center` and (in Firefox) `font-weight: 400` directly on every\n `button`, which would beat any alignment or font styling inherited through the wrapper\n (e.g. nav's `text-align: left`, or a bold active entry that used to apply to the button\n element itself). Inheriting all three restores the old flow. */\n font-weight: inherit;\n font-style: inherit;\n text-align: inherit;\n }\n .kol-button {\n /* See kol-button-styles: the tooltip wrapper must stay zero-height, also when the wrapper\n div is a flex or grid item (e.g. nav entry rows). */\n }\n .kol-button__tooltip {\n height: 0;\n }\n .kol-tabs {\n display: var(--display);\n grid-template-columns: var(--grid-template-columns);\n grid-template-rows: var(--grid-template-rows);\n }\n .kol-tabs--align-right {\n --display: grid;\n --grid-template-columns: 1fr auto;\n --button-group-flex-direction: column;\n --button-group-order: 2;\n }\n .kol-tabs--align-left {\n --display: grid;\n --grid-template-columns: auto 1fr;\n --button-group-flex-direction: column;\n --button-group-order: 0;\n }\n .kol-tabs--align-bottom {\n --display: grid;\n --grid-template-rows: 1fr auto;\n --button-group-order: 2;\n }\n .kol-tabs__tabs-align-top {\n --display: grid;\n --grid-template-rows: auto 1fr;\n --button-group-order: 0;\n }\n .kol-tabs__button-group {\n display: flex;\n order: var(--button-group-order);\n flex-direction: var(--button-group-flex-direction);\n flex-wrap: wrap;\n }\n .kol-tabs__button-group .kol-button {\n display: block;\n /* The underline belongs to the interactive element — it carries the UA `medium`\n border-width from the shared wc-box styles, so the selected-tab underline keeps\n the exact box it had when the button element itself carried `kol-button`. */\n }\n .kol-tabs__button-group .kol-button .kol-button__interactive-element {\n border-bottom-color: transparent;\n border-bottom-style: solid;\n }\n @media (forced-colors: active) {\n .kol-tabs__button-group .kol-button.selected {\n outline: 3px solid Highlight;\n outline-offset: -3px;\n /* The outline sits on the wrapper, but only the inner button can receive focus.\n Matching `:focus-visible` on the wrapper itself would never fire, so the\n focused state has to be detected through the interactive element. */\n }\n .kol-tabs__button-group .kol-button.selected:has(.kol-button__interactive-element:focus-visible) {\n outline-style: dashed;\n }\n }\n .kol-tabs__tablist {\n display: flex;\n flex-direction: var(--button-group-flex-direction);\n flex-wrap: wrap;\n }\n .kol-tabs__panel {\n height: 100%;\n }\n}";
132
+ const defaultStyleCss = "@charset \"UTF-8\";\n/* forward the rem function */\n/*\n * Guards an interaction rule (`:hover`, `:active`, `:focus…`) against the disabled state.\n *\n * Two shapes are needed because the disabled marker sits on different elements: a native control\n * carries `disabled`, an anchor or summary carries `aria-disabled`, and a BEM wrapper carries a\n * `--disabled` modifier while its inner control carries the attribute.\n */\n/* Wrapper variant: asks the interactive element inside, which is where the attribute lives. */\n/*\n* This file defines the layer order for all CSS layers used in KoliBri.\n* The order is important as it determines the cascade priority.\n*\n* Layer order (lowest to highest priority):\n* 1. kol-a11y - Accessibility defaults and requirements\n* 2. kol-global - Global component styles and resets\n* 3. kol-component - Component-specific styles\n* 4. kol-theme-global - Theme-specific global styles\n* 5. kol-theme-component - Theme-specific component styles\n* 6. kol-forced-colors - Defaults for forced colors and high contrast modes\n* 7. kol-theme-forced-colors - Theme-specific styles for forced colors and high contrast modes\n*/\n@layer kol-a11y, kol-global, kol-component, kol-theme-global, kol-theme-component, kol-forced-colors, kol-theme-forced-colors;\n/*\n * This file contains all rules for accessibility.\n */\n@layer kol-a11y {\n :host {\n /*\n * Minimum size of interactive elements.\n *\n * The `max(…, 44px)` floor guarantees the WCAG 2.5.5 (AAA) target size of 44px:\n * `to-rem(44)` runs the value through a `calc()` rem round-trip which can lose\n * sub-pixel precision and resolve to e.g. 43.99px depending on the browser's\n * rounding, dropping just below the required minimum.\n */\n --a11y-min-size: max(calc(44 * 1rem / var(--kolibri-root-font-size, 16)), 44px);\n /*\n * No element should be used without verifying the contrast ratio of its background and font colors.\n * By initially setting the background color to white and the font color to black,\n * the contrast ratio is ensured and explicit adjustment is forced.\n */\n --kol-a11y-font-color: black;\n --kol-a11y-background-color: white;\n color: var(--kol-a11y-font-color);\n background-color: var(--kol-a11y-background-color);\n /*\n * Verdana is an accessible font that can be used without requiring additional loading time.\n */\n --kol-a11y-font-family: Verdana;\n font-family: var(--kol-a11y-font-family);\n /*\n * Letter spacing is required for all texts.\n */\n letter-spacing: inherit;\n /*\n * Word spacing is required for all texts.\n */\n word-spacing: inherit;\n /*\n * Text should be aligned left by default to provide a predictable starting point.\n */\n text-align: left;\n }\n * {\n /*\n * This rule enables the word dividing for all texts. That is important for high zoom levels.\n */\n hyphens: auto;\n /*\n * This rule enables the word dividing for all texts. That is important for high zoom levels.\n */\n word-break: break-word;\n }\n /*\n * All interactive elements should have a minimum size of to-rem(44).\n */\n /* input:not([type='checkbox'], [type='radio'], [type='range']), */\n /* option, */\n /* select, */\n /* textarea, */\n button,\n .kol-input .input {\n min-width: var(--a11y-min-size);\n min-height: var(--a11y-min-size);\n }\n /*\n * Some interactive elements should not inherit the font-family and font-size.\n */\n a,\n button,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n input,\n option,\n select,\n textarea {\n /*\n * All elements should inherit the text color from his parent element.\n */\n color: inherit;\n /*\n * All elements should inherit the font family from his parent element.\n */\n font-family: inherit;\n /*\n * All elements should inherit the font size from his parent element.\n */\n font-size: inherit;\n /*\n * Letter spacing is required for all texts.\n */\n letter-spacing: inherit;\n /*\n * Word spacing is required for all texts.\n */\n word-spacing: inherit;\n }\n /**\n * Sometimes we need the semantic element for accessibility reasons,\n * but we don't want to show it.\n *\n * - https://www.a11yproject.com/posts/how-to-hide-content/\n */\n .visually-hidden {\n position: fixed;\n top: 0;\n left: 0;\n width: 1px;\n height: 1px;\n overflow: hidden;\n white-space: nowrap;\n clip-path: inset(50%);\n }\n}\n/*\n * This file contains all rules for forced-colors and highcontrast modes\n * https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/system-color to see all color keywords the browsers are providing\n */\n@layer kol-forced-colors {\n @media (forced-colors: active) {\n .kol-button__text {\n color: ButtonText;\n background-color: ButtonFace;\n border: 2px solid ButtonBorder;\n }\n .kol-button--disabled .kol-button__text {\n color: GrayText;\n border-color: GrayText;\n }\n /*\n * Forced colors drop author colors, so the only way a disabled control still reads as\n * disabled is the `GrayText` system color. `kol-button` had it; the controls whose disabled\n * state is `aria-disabled` (anchor, summary) and the native form controls did not.\n */\n .kol-link__interactive-element[aria-disabled=true],\n .kol-accordion__heading[aria-disabled=true],\n .kol-details__heading[aria-disabled=true] {\n color: GrayText;\n }\n .kol-link__interactive-element[aria-disabled=true] .kol-icon,\n .kol-link__interactive-element[aria-disabled=true] .kol-span__label,\n .kol-accordion__heading[aria-disabled=true] .kol-icon,\n .kol-accordion__heading[aria-disabled=true] .kol-span__label,\n .kol-details__heading[aria-disabled=true] .kol-icon,\n .kol-details__heading[aria-disabled=true] .kol-span__label {\n color: GrayText;\n }\n input:disabled,\n select:disabled,\n textarea:disabled {\n color: GrayText;\n border-color: GrayText;\n }\n .kol-card,\n .kol-dialog,\n .kol-modal {\n color: CanvasText;\n background-color: Canvas;\n border: 1px solid ButtonBorder;\n }\n .kol-pagination__button--selected .kol-button {\n opacity: 1;\n }\n .kol-pagination__button--selected .kol-button__text {\n color: SelectedItemText;\n background-color: SelectedItem;\n }\n /* focus styles */\n .kol-button__interactive-element:focus-visible,\n .kol-link__interactive-element:focus-visible {\n outline: 2px solid Highlight;\n outline-offset: 2px;\n }\n }\n}\n@layer kol-global {\n /*\n * Dieses CSS stellt sicher, dass der Standard-Style\n * von A und Button resettet werden.\n */\n :is(a, button) {\n background-color: transparent;\n width: 100%;\n margin: 0;\n padding: 0;\n border: none;\n /* 100% needed for custom width from outside */\n }\n /*\n * Ensure elements with hidden attribute to be actually not visible\n * @see https://meowni.ca/hidden.is.a.lie.html\n */\n [hidden] {\n display: none !important;\n }\n .badge-text-hint {\n color: black;\n background-color: white;\n }\n}\n@layer kol-global {\n :host {\n /*\n * The max-width is needed to prevent the table from overflowing the\n * parent node, if the table is wider than the parent node.\n */\n max-width: 100%;\n font-size: calc(16 * 1rem / var(--kolibri-root-font-size, 16));\n }\n * {\n /*\n * We prefer to box-sizing: border-box for all elements.\n */\n box-sizing: border-box;\n }\n .kol-span {\n /* KolSpan is a layout component with icons in all directions and a label text in the middle. */\n display: flex;\n flex-flow: column;\n align-items: center;\n justify-content: center;\n /* The sub span in KolSpan is the horizontal span with icon left and right and the label text in the middle. */\n }\n .kol-span__container {\n display: flex;\n align-items: center;\n }\n a,\n button {\n cursor: pointer;\n }\n .kol-span .kol-span__label--hide-label .kol-span__label {\n display: none;\n }\n /* Reset browser agent style. */\n button:disabled {\n color: unset;\n }\n .disabled label,\n .disabled:focus-within label,\n [aria-disabled=true],\n [aria-disabled=true]:focus,\n [disabled],\n [disabled]:focus {\n outline: none;\n cursor: not-allowed;\n }\n [aria-disabled=true]:focus .kol-span,\n [disabled]:focus .kol-span {\n outline: none !important;\n }\n .hastooltip {\n z-index: 900 !important;\n }\n}\n@layer kol-component {\n :host {\n display: block;\n }\n}\n@font-face {\n font-family: \"kolicons\";\n src: url(\"kolicons.eot?t=1791294643544\"); /* IE9*/\n src: url(\"kolicons.eot?t=1791294643544#iefix\") format(\"embedded-opentype\"), url(\"kolicons.woff2?t=1791294643544\") format(\"woff2\"), url(\"kolicons.woff?t=1791294643544\") format(\"woff\"), url(\"kolicons.ttf?t=1791294643544\") format(\"truetype\"), url(\"kolicons.svg?t=1791294643544#kolicons\") format(\"svg\"); /* iOS 4.1- */\n}\n@layer kol-component {\n [class^=kolicon-], [class*=\" kolicon-\"] {\n font-family: \"kolicons\";\n font-style: normal;\n font-weight: 400;\n line-height: 1em;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n .kolicon-alert-error::before {\n content: \"\\ea01\";\n }\n .kolicon-alert-info::before {\n content: \"\\ea02\";\n }\n .kolicon-alert-success::before {\n content: \"\\ea03\";\n }\n .kolicon-alert-warning::before {\n content: \"\\ea04\";\n }\n .kolicon-check::before {\n content: \"\\ea05\";\n }\n .kolicon-chevron-double-left::before {\n content: \"\\ea06\";\n }\n .kolicon-chevron-double-right::before {\n content: \"\\ea07\";\n }\n .kolicon-chevron-down::before {\n content: \"\\ea08\";\n }\n .kolicon-chevron-left::before {\n content: \"\\ea09\";\n }\n .kolicon-chevron-right::before {\n content: \"\\ea0a\";\n }\n .kolicon-chevron-up::before {\n content: \"\\ea0b\";\n }\n .kolicon-cogwheel::before {\n content: \"\\ea0c\";\n }\n .kolicon-cross::before {\n content: \"\\ea0d\";\n }\n .kolicon-eye-closed::before {\n content: \"\\ea0e\";\n }\n .kolicon-eye::before {\n content: \"\\ea0f\";\n }\n .kolicon-house::before {\n content: \"\\ea10\";\n }\n .kolicon-kolibri::before {\n content: \"\\ea11\";\n }\n .kolicon-link-external::before {\n content: \"\\ea12\";\n }\n .kolicon-link::before {\n content: \"\\ea13\";\n }\n .kolicon-minus::before {\n content: \"\\ea14\";\n }\n .kolicon-pin-pinned::before {\n content: \"\\ea15\";\n }\n .kolicon-pin-unpinned::before {\n content: \"\\ea16\";\n }\n .kolicon-plus::before {\n content: \"\\ea17\";\n }\n .kolicon-settings::before {\n content: \"\\ea18\";\n }\n .kolicon-sort-asc::before {\n content: \"\\ea19\";\n }\n .kolicon-sort-desc::before {\n content: \"\\ea1a\";\n }\n .kolicon-sort-neutral::before {\n content: \"\\ea1b\";\n }\n .kolicon-up::before {\n content: \"\\ea1c\";\n }\n .kolicon-version::before {\n content: \"\\ea1d\";\n }\n}\n@layer kol-component {\n .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-tooltip {\n display: contents;\n }\n .kol-tooltip__floating {\n opacity: 0;\n display: none;\n position: fixed;\n /* Avoid layout interference - see https://floating-ui.com/docs/computePosition */\n top: 0;\n left: 0;\n /* Can be used to specify the tooltip-width from the outside. Unset by default. */\n width: var(--kol-tooltip-width, max-content);\n min-width: calc(8 * 1rem / var(--kolibri-root-font-size, 16));\n max-width: 90vw;\n max-height: 90vh;\n animation-direction: normal;\n /* Can be used to specify the animation duration from the outside. 250ms by default. */\n animation-duration: var(--kolibri-tooltip-animation-duration, 250ms);\n animation-fill-mode: forwards;\n animation-iteration-count: 1;\n animation-timing-function: ease-in;\n }\n .kol-tooltip__floating.hide {\n animation-name: hideTooltip;\n }\n .kol-tooltip__floating.show {\n animation-name: showTooltip;\n }\n .kol-tooltip__arrow {\n transform: rotate(45deg);\n color: black;\n background-color: white;\n position: absolute;\n z-index: 999;\n width: calc(10 * 1rem / var(--kolibri-root-font-size, 16));\n height: calc(10 * 1rem / var(--kolibri-root-font-size, 16));\n }\n .kol-tooltip__content {\n color: black;\n background-color: white;\n position: relative;\n z-index: 1000;\n }\n @keyframes hideTooltip {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n display: none;\n }\n }\n @keyframes showTooltip {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n}\n/*\n * Button styles for a skeleton block whose interactive element sits inside the BEM root:\n * `kol-button` renders `<div class=\"kol-button\"><button class=\"kol-button__interactive-element\">`,\n * `kol-link` renders `<div class=\"kol-link\"><a class=\"kol-link__interactive-element\">`.\n *\n * Overlaps with `kol-embedded-button-box-styles` below: both target the block class itself and disagree\n * on `display` and `text-align`. A stylesheet that includes both therefore depends on order or\n * specificity — today that only happens where the caller nests one of them (e.g. `_alert.mixin`\n * nests this one under `.kol-alert`, which wins). Include only one per block unless the nesting\n * makes the winner explicit.\n */\n/*\n * Minimal box replication for shadow trees that render `ButtonFC` without including\n * `kol-button-styles`. The `kol-global` reset (`background`, `width`, `margin`, `padding`,\n * `border`) and the a11y layer `min-height`/`min-width` apply to the native button, on top of the\n * UA `inline-block`, but not to the `div` root that carries the `kol-button` class. This mixin\n * replicates that outer box on the root, while the inner `kol-button__interactive-element` degrades\n * to a plain block container to avoid the inline-level baseline gap the UA `inline-block` would add\n * below it.\n *\n * Mutually exclusive with `kol-button-styles` above — see the collision note there.\n */\n@layer kol-component {\n .kol-icon {\n color: inherit;\n display: inline-block;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n }\n .kol-button {\n background-color: transparent;\n display: inline-block;\n width: 100%;\n min-width: var(--a11y-min-size);\n min-height: var(--a11y-min-size);\n margin: 0;\n padding: 0;\n /* The user-agent stylesheet centers text on `button`, but not on `div`. The wrapper now\n carries the class, so that UA default has to be restated here for the inner content to\n sit where it did when the button element itself was the class carrier. */\n text-align: center;\n /* Replicate the reset the real button received: width stays at the initial `medium`, only\n the style becomes `none`. Consumer rules that flip e.g. `border-bottom-style` back to\n `solid` (tabs) must therefore target the inner button (see the `__interactive-element`\n override below), because Firefox vertically centers button content inside the content box,\n which shrinks by the border — exactly as it did when the real button carried these rules. */\n }\n .kol-button__interactive-element {\n border-style: none;\n display: block;\n border-width: medium;\n /* The UA pins `text-align: center` and (in Firefox) `font-weight: 400` directly on every\n `button`, which would beat any alignment or font styling inherited through the wrapper\n (e.g. nav's `text-align: left`, or a bold active entry that used to apply to the button\n element itself). Inheriting all three restores the old flow. */\n font-weight: inherit;\n font-style: inherit;\n text-align: inherit;\n }\n .kol-button {\n /* See kol-button-styles: the tooltip wrapper must stay zero-height, also when the wrapper\n div is a flex or grid item (e.g. nav entry rows). */\n }\n .kol-button__tooltip {\n height: 0;\n }\n .kol-tabs {\n display: var(--display);\n grid-template-columns: var(--grid-template-columns);\n grid-template-rows: var(--grid-template-rows);\n }\n .kol-tabs--align-right {\n --display: grid;\n --grid-template-columns: 1fr auto;\n --button-group-flex-direction: column;\n --button-group-order: 2;\n }\n .kol-tabs--align-left {\n --display: grid;\n --grid-template-columns: auto 1fr;\n --button-group-flex-direction: column;\n --button-group-order: 0;\n }\n .kol-tabs--align-bottom {\n --display: grid;\n --grid-template-rows: 1fr auto;\n --button-group-order: 2;\n }\n .kol-tabs__tabs-align-top {\n --display: grid;\n --grid-template-rows: auto 1fr;\n --button-group-order: 0;\n }\n .kol-tabs__button-group {\n display: flex;\n order: var(--button-group-order);\n flex-direction: var(--button-group-flex-direction);\n flex-wrap: wrap;\n }\n .kol-tabs__button-group .kol-button {\n display: block;\n /* The underline belongs to the interactive element — it carries the UA `medium`\n border-width from the shared wc-box styles, so the selected-tab underline keeps\n the exact box it had when the button element itself carried `kol-button`. */\n }\n .kol-tabs__button-group .kol-button .kol-button__interactive-element {\n border-bottom-color: transparent;\n border-bottom-style: solid;\n }\n @media (forced-colors: active) {\n .kol-tabs__button-group .kol-button.selected {\n outline: 3px solid Highlight;\n outline-offset: -3px;\n /* The outline sits on the wrapper, but only the inner button can receive focus.\n Matching `:focus-visible` on the wrapper itself would never fire, so the\n focused state has to be detected through the interactive element. */\n }\n .kol-tabs__button-group .kol-button.selected:has(.kol-button__interactive-element:focus-visible) {\n outline-style: dashed;\n }\n }\n .kol-tabs__tablist {\n display: flex;\n flex-direction: var(--button-group-flex-direction);\n flex-wrap: wrap;\n }\n .kol-tabs__panel {\n height: 100%;\n }\n}";
133
133
 
134
134
  const KolTabs$1 = proxyCustomElement(class KolTabs extends BaseWebComponent {
135
135
  constructor(registerHost) {
@@ -145,30 +145,18 @@ const KolTabs$1 = proxyCustomElement(class KolTabs extends BaseWebComponent {
145
145
  this.createButtonItem = createTabsButtonItem();
146
146
  this.nextPossibleTabIndex = (tabs, offset, step = 1) => {
147
147
  const nextOffset = offset + step;
148
- if (nextOffset < tabs.length) {
149
- if (tabs[nextOffset]._disabled) {
150
- return this.nextPossibleTabIndex(tabs, offset, step + 1);
151
- }
152
- return nextOffset;
153
- }
154
- return offset;
148
+ return this.selectNextNotDisabledTab(nextOffset, tabs, true);
155
149
  };
156
150
  this.prevPossibleTabIndex = (tabs, offset, step = 1) => {
157
151
  const nextOffset = offset - step;
158
- if (nextOffset >= 0) {
159
- if (tabs[nextOffset]._disabled) {
160
- return this.prevPossibleTabIndex(tabs, offset, step + 1);
161
- }
162
- return nextOffset;
163
- }
164
- return offset;
152
+ return this.selectNextNotDisabledTab(nextOffset, tabs, false);
165
153
  };
166
154
  this.selectNextNotDisabledTab = (selected, tabs, upOrDown = true, initialSelected) => {
167
155
  if (selected > tabs.length - 1) {
168
- selected = tabs.length - 1;
156
+ selected = 0;
169
157
  }
170
158
  if (selected < 0) {
171
- selected = 0;
159
+ selected = tabs.length - 1;
172
160
  }
173
161
  if (Array.isArray(tabs) && tabs[selected]) {
174
162
  if (tabs[selected]._disabled) {
@@ -388,7 +376,7 @@ const KolTabs$1 = proxyCustomElement(class KolTabs extends BaseWebComponent {
388
376
  }, this.host);
389
377
  }
390
378
  render() {
391
- return (h(Host, { key: '6c74d6f12e9405328c75302a1fb0a03c2e3ef61f' }, h(TabsFC, { key: 'd63e3067ffa5d0726673a38e7224fe058f1732ee', align: this.getRenderProp('align'), behavior: this.getRenderProp('behavior'), createButton: this.createButton, handleBlur: this.handleBlur, handleKeyDown: this.handleKeyDown, hasCreateButton: this.getRenderProp('hasCreateButton'), label: this.getRenderProp('label'), on: this.getRenderProp('on'), refContent: this.setContentRef, refRoot: this.setRootRef, selected: this.getRenderProp('selected'), tabButtons: this.tabButtons, tabs: this.getRenderProp('tabs') })));
379
+ return (h(Host, { key: 'd818c82612d4d04df61bee406855c130b6dff407' }, h(TabsFC, { key: 'd812f905e015583f3cef8e55faa4327bf8e5038c', align: this.getRenderProp('align'), behavior: this.getRenderProp('behavior'), createButton: this.createButton, handleBlur: this.handleBlur, handleKeyDown: this.handleKeyDown, hasCreateButton: this.getRenderProp('hasCreateButton'), label: this.getRenderProp('label'), on: this.getRenderProp('on'), refContent: this.setContentRef, refRoot: this.setRootRef, selected: this.getRenderProp('selected'), tabButtons: this.tabButtons, tabs: this.getRenderProp('tabs') })));
392
380
  }
393
381
  watchAlign(value) {
394
382
  alignProp.apply(value, (v) => this.setRenderProp('align', v));
@@ -1 +1 @@
1
- {"file":"kol-tabs.js","mappings":"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","names":["KolTabs","__stencil_proxyCustomElement"],"sources":["src/internal/props/has-create-button.ts","src/internal/props/selected.ts","src/internal/props/tab-behavior.ts","src/internal/props/tabs.ts","src/internal/props/tabs-callbacks.ts","src/internal/functional-components/tabs/api.tsx","src/internal/functional-components/tabs/button-item.ts","src/internal/functional-components/tabs/component.tsx","src/components/tabs/style.scss?tag=kol-tabs&mode=default&encapsulation=shadow","src/components/tabs/component.tsx"],"sourcesContent":["import type { SimpleProp } from './helpers/factory';\nimport { createPropDefinition } from './helpers/factory';\nimport { normalizeBoolean } from './helpers/normalizers';\n\n/**\n * Renders a create button after the tabs. Clicking it invokes `_on.onCreate` and dispatches the\n * `create` DOM event — adding the new tab is up to the consumer.\n */\nexport type HasCreateButtonProp = SimpleProp<'hasCreateButton', boolean>;\nexport const hasCreateButtonProp = createPropDefinition<HasCreateButtonProp>('hasCreateButton', false, normalizeBoolean);\n","import type { SimpleProp } from './helpers/factory';\nimport { createPropDefinition } from './helpers/factory';\nimport { normalizeNumber } from './helpers/normalizers';\n\n/**\n * Index of the selected entry of a list-like component (e.g. the active tab).\n *\n * Only the type is checked here. Clamping into the list and skipping disabled entries depends on\n * the list itself, so the component resolves that after both values are known.\n */\nexport type SelectedProp = SimpleProp<'selected', number>;\nexport const selectedProp = createPropDefinition<SelectedProp>('selected', 0, normalizeNumber);\n","import type { TabBehaviorPropType } from '../../schema';\nimport type { SimpleProp } from './helpers/factory';\nimport { createPropDefinition } from './helpers/factory';\nimport { isEnumOption, normalizeString } from './helpers/normalizers';\n\nconst tabBehaviorOptions: readonly TabBehaviorPropType[] = ['select-automatic', 'select-manual'];\n\n/**\n * Keyboard behavior of a tab list.\n *\n * - `select-automatic`: arrow keys move the focus and activate the focused tab at once.\n * - `select-manual`: arrow keys only move the focus; Enter or Space activates the tab.\n *\n * Default: `select-automatic` — the behavior the predecessor applied whenever `_behavior` was\n * unset (it only checked for `select-manual`).\n *\n * @see https://www.w3.org/WAI/ARIA/apg/patterns/tabs/\n */\nexport type TabBehaviorProp = SimpleProp<'behavior', TabBehaviorPropType>;\n\nexport const tabBehaviorProp = createPropDefinition<TabBehaviorProp>(\n\t'behavior',\n\t'select-automatic',\n\t(value) => normalizeString(value) as TabBehaviorPropType,\n\t(v) => isEnumOption(v, tabBehaviorOptions),\n);\n","import type { Stringified, TabButtonProps } from '../../schema';\nimport { uiUxHintMillerscheZahl } from '../../schema/utils/a11y.tipps';\nimport type { Prop } from './helpers/factory';\nimport { createPropDefinition } from './helpers/factory';\nimport { normalizeArray } from './helpers/normalizers';\n\n/**\n * Tab buttons of `kol-tabs`.\n *\n * External type is `Stringified<TabButtonProps[]>` (JSON string when set via attribute, array\n * when set via property), internal type is the parsed array.\n *\n * Every entry must be an object with a non-empty string `_label`. One invalid entry rejects the\n * whole value and keeps the previously rendered tabs — the predecessor's `watchJsonArrayString`\n * behaved the same way.\n */\nexport type TabsProp = Prop<'tabs', Stringified<TabButtonProps[]>, TabButtonProps[]>;\n\nexport const tabsProp = createPropDefinition<TabsProp>(\n\t'tabs',\n\t[],\n\t(value) => normalizeArray(value) as TabButtonProps[],\n\t(items) => items.every((item) => typeof item === 'object' && item !== null && typeof item._label === 'string' && item._label.length > 0),\n\t{\n\t\thints: (_propName, items) => uiUxHintMillerscheZahl('KolTabs', items.length),\n\t},\n);\n","import type { KoliBriTabsCallbacks } from '../../schema';\nimport type { SimpleProp } from './helpers/factory';\nimport { createPropDefinition } from './helpers/factory';\nimport { normalizeCallbacksObject } from './helpers/normalizers';\n\nexport type TabsCallbacksProp = SimpleProp<'on', KoliBriTabsCallbacks>;\n\n/**\n * Callbacks of `kol-tabs`. Only `onCreate` and `onSelect` are kept, and only when they are\n * functions — the predecessor copied exactly these two into its state.\n */\nexport const tabsCallbacksProp = createPropDefinition<TabsCallbacksProp>('on', {}, (value) => {\n\tconst callbacks = normalizeCallbacksObject<KoliBriTabsCallbacks>(value);\n\tconst normalized: KoliBriTabsCallbacks = {};\n\tif (typeof callbacks.onCreate === 'function') {\n\t\tnormalized.onCreate = callbacks.onCreate;\n\t}\n\tif (typeof callbacks.onSelect === 'function') {\n\t\tnormalized.onSelect = callbacks.onSelect;\n\t}\n\treturn normalized;\n});\n","import type { KolFocusOptions } from '../../../schema';\nimport { alignProp, hasCreateButtonProp, labelWithExpertSlotProp, selectedProp, tabBehaviorProp, tabsCallbacksProp, tabsProp } from '../../props';\nimport type { ApiFromConfig, PropsConfigShape } from '../generic-types';\nimport type { TabsButton } from './button-item';\n\n/**\n * Props configuration for the tabs component.\n *\n * Notes on prop choices:\n * - `labelWithExpertSlotProp` (not `labelProp`): the predecessor's `validateLabel` accepted any\n * string; `labelProp` would reject one-character labels, a validation regression.\n * - `selectedProp` only checks the type. Clamping into the tab list and skipping disabled tabs\n * needs both `_selected` and `_tabs`, so the web component resolves it after applying either.\n * - `tabsCallbacksProp` and `tabBehaviorProp` are not rendered — the web component reads them in\n * its event handlers.\n */\nexport const tabsPropsConfig = {\n\trequired: [labelWithExpertSlotProp, tabsProp],\n\toptional: [alignProp, hasCreateButtonProp, selectedProp, tabBehaviorProp, tabsCallbacksProp],\n} as const satisfies PropsConfigShape;\n\nexport type TabsApi = ApiFromConfig<\n\ttypeof tabsPropsConfig,\n\t{\n\t\tCallbacks: {\n\t\t\t/** Blur handler of the tab list; resets the keyboard focus position. */\n\t\t\tblur: () => void;\n\t\t\t/** Keydown handler of the tab list: arrow keys move between tabs, Enter and Space activate. */\n\t\t\tkeyDown: (event: KeyboardEvent) => void;\n\t\t};\n\t\tMethods: {\n\t\t\tclick: () => void;\n\t\t\tfocus: (options?: KolFocusOptions) => void;\n\t\t};\n\t\tRefs: {\n\t\t\t/**\n\t\t\t * The tab panel container. The panels are created imperatively by the web component,\n\t\t\t * because every panel projects a light-DOM child through a named slot.\n\t\t\t */\n\t\t\tcontent: HTMLDivElement;\n\t\t\t/** The BEM root, used to look up a tab button by id when moving the focus. */\n\t\t\troot: HTMLDivElement;\n\t\t};\n\t\tStates: {\n\t\t\t/** The create button; rendered only when `hasCreateButton` is set. */\n\t\t\tcreateButton: TabsButton;\n\t\t\t/** One entry per tab, resolved per render pass against the selected tab. */\n\t\t\ttabButtons: TabsButton[];\n\t\t};\n\t}\n>;\n","import type { AlignPropType, InternalButtonProps, StencilUnknown } from '../../../schema';\nimport { setEventTarget } from '../../../schema';\nimport { nonce } from '../../../utils/dev.utils';\nimport { dispatchDomEvent, KolEvent } from '../../../utils/events';\nimport { BaseWebComponent } from '../base-web-component';\nimport type { ButtonApi } from '../button/api';\nimport type { ResolvedButtonProps } from '../button/resolve-props';\nimport { resolveButtonProps } from '../button/resolve-props';\nimport type { FunctionalComponentProps } from '../generic-types';\nimport { TooltipBehavior } from '../tooltip/behavior';\n\n/**\n * Everything `TabsFC` needs to render one embedded button: the resolved `ButtonFC` props and the\n * ref of the box around the button.\n */\nexport type TabsButton = {\n\tbuttonProps: FunctionalComponentProps<ButtonApi>;\n\t/**\n\t * The box stands where the predecessor's `kol-button-wc` element stood. It is the flex item of\n\t * the tab list — the `.kol-button` block inside claims `width: 100%` and would take a whole row\n\t * of its own otherwise — and the target of the `KolEvent` DOM events.\n\t */\n\trefBox: (element?: HTMLDivElement) => void;\n};\n\n/**\n * One orchestrated button of `kol-tabs` — a tab or the create button.\n *\n * `ButtonFC` is stateless, but a tab button is not: its tooltip behavior, its event handlers and\n * its element refs have to live somewhere. The predecessor rendered a `kol-button-wc` per button,\n * which owned exactly that; this item is that orchestration, minus the wrapper element. It is a\n * plain object with closures, like `popover-button/item.ts`, so `kol-tabs` composes one per button.\n *\n * Two pieces of the wrapper are deliberately absent:\n * - **Form association.** Tab buttons are `type=\"button\"` without `_name`, so there is no form\n * field to write the value into.\n * - **Submit/reset propagation.** Same reason: neither type is ever set.\n */\nexport type TabsButtonItem = {\n\t/**\n\t * Resolves the button props for the current render pass. Call once per render: the selected tab\n\t * changes the tab index, the variant and `aria-selected` of every tab.\n\t *\n\t * @param props - The button configuration, in the shape the predecessor handed `kol-button-wc`.\n\t * @param flagHost - Element the theme-scoped `buttonVariantDefault` feature flag is resolved against.\n\t */\n\tgetButton(props: InternalButtonProps, flagHost?: HTMLElement): TabsButton;\n\t/** The rendered `<button>`, once it is in the DOM. */\n\tgetButtonElement(): HTMLButtonElement | undefined;\n\t/** Re-registers the tooltip listeners. Call from `componentDidRender`. */\n\tsyncListeners(): void;\n\t/** Tears down the tooltip behavior. */\n\tdestroy(): void;\n};\n\nexport const createTabsButtonItem = (): TabsButtonItem => {\n\tconst tooltipBehavior = new TooltipBehavior(BaseWebComponent.stateLess);\n\tconst ariaDescriptionId = nonce();\n\tlet resolved: ResolvedButtonProps | undefined;\n\tlet value: StencilUnknown;\n\tlet boxElement: HTMLDivElement | undefined;\n\tlet buttonElement: HTMLButtonElement | undefined;\n\n\t// The events are dispatched on the box, not on the button: `KolEvent.click` and\n\t// `KolEvent.focus` share their type with the native events, so dispatching them on the button\n\t// would re-enter its own handlers.\n\tconst dispatch = (event: KolEvent, detail?: unknown): void => {\n\t\tif (boxElement) {\n\t\t\tdispatchDomEvent(boxElement, event, detail);\n\t\t}\n\t};\n\n\tconst handleClick = (event: MouseEvent): void => {\n\t\tevent.stopPropagation();\n\t\ttooltipBehavior.hideTooltip();\n\n\t\tconst onClick = resolved?.on.onClick;\n\t\tif (typeof onClick === 'function') {\n\t\t\tsetEventTarget(event, buttonElement);\n\t\t\tonClick(event, value);\n\t\t}\n\t\tdispatch(KolEvent.click, value);\n\t};\n\tconst handleMouseDown = (event: MouseEvent): void => {\n\t\tresolved?.on.onMouseDown?.(event);\n\t\tdispatch(KolEvent.mousedown);\n\t};\n\tconst handleFocus = (event: FocusEvent): void => {\n\t\tresolved?.on.onFocus?.(event);\n\t\tdispatch(KolEvent.focus);\n\t};\n\tconst handleBlur = (event: FocusEvent): void => {\n\t\tresolved?.on.onBlur?.(event);\n\t\tdispatch(KolEvent.blur);\n\t};\n\n\tconst refBox = (element?: HTMLDivElement): void => {\n\t\tboxElement = element;\n\t};\n\tconst refButton = (element?: HTMLButtonElement): void => {\n\t\tbuttonElement = element;\n\t};\n\n\treturn {\n\t\tgetButton: (props: InternalButtonProps, flagHost?: HTMLElement): TabsButton => {\n\t\t\tresolved = resolveButtonProps(props, flagHost);\n\t\t\tvalue = props._value;\n\n\t\t\ttooltipBehavior.componentWillLoad({\n\t\t\t\tlabel: resolved.label,\n\t\t\t\talign: resolved.tooltipAlign as AlignPropType,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tbuttonProps: {\n\t\t\t\t\t...resolved,\n\t\t\t\t\tariaDescriptionId,\n\t\t\t\t\thandleBlur,\n\t\t\t\t\thandleClick,\n\t\t\t\t\thandleFocus,\n\t\t\t\t\thandleMouseDown,\n\t\t\t\t\trefButton,\n\t\t\t\t\trefTooltip: tooltipBehavior.setTooltipElementRef,\n\t\t\t\t},\n\t\t\t\trefBox,\n\t\t\t};\n\t\t},\n\t\tgetButtonElement: (): HTMLButtonElement | undefined => buttonElement,\n\t\tsyncListeners: (): void => {\n\t\t\tif (buttonElement) {\n\t\t\t\ttooltipBehavior.syncListeners(undefined, buttonElement, true);\n\t\t\t}\n\t\t},\n\t\tdestroy: (): void => {\n\t\t\ttooltipBehavior.destroy();\n\t\t},\n\t};\n};\n","import type { FunctionalComponent as FC } from '@stencil/core';\nimport { h } from '@stencil/core';\n\nimport { bem } from '../../../schema/bem-registry';\nimport { BemRootNodeFC } from '../bem-root-node/component';\nimport { ButtonFC } from '../button/component';\nimport type { FunctionalComponentProps } from '../generic-types';\nimport type { TabsApi } from './api';\n\nconst tabsBem = bem.forBlock('kol-tabs');\nconst BEM_CLASS_TABS__BUTTON_CREATE = tabsBem('button-create');\nconst BEM_CLASS_TABS__BUTTON_GROUP = tabsBem('button-group');\nconst BEM_CLASS_TABS__CONTENT = tabsBem('content');\nconst BEM_CLASS_TABS__TAB = tabsBem('tab');\nconst BEM_CLASS_TABS__TABLIST = tabsBem('tablist');\n\n/**\n * Renders the tab list, the optional create button and the empty panel container. The panels\n * themselves are managed by the web component (see `TabsApi` → `refContent`).\n *\n * The create button is a sibling of the `tablist` inside `__button-group`: a `tablist` may only\n * contain `tab` elements (ARIA `aria-required-children`), and arrow-key handling belongs to the\n * tabs alone.\n *\n * Every button sits in a box of its own rather than being a direct child of its container: the box\n * is the flex item that sizes the tab, and it keeps the embedded `.kol-button` block a descendant\n * of `__button-create`, which the base and theme styles rely on.\n */\nexport const TabsFC: FC<FunctionalComponentProps<TabsApi>> = (props) => {\n\tconst { align, class: hostClass, createButton, handleBlur, handleKeyDown, hasCreateButton, label, refContent, refRoot, tabButtons } = props;\n\n\treturn (\n\t\t<BemRootNodeFC block=\"kol-tabs\" modifiers={{ [`align-${align}`]: true }} class={hostClass} ref={refRoot}>\n\t\t\t<div class={BEM_CLASS_TABS__BUTTON_GROUP}>\n\t\t\t\t{/* The tab buttons inside are focusable; the tab list itself is not. */}\n\t\t\t\t{/* eslint-disable-next-line jsx-a11y/interactive-supports-focus */}\n\t\t\t\t<div aria-label={label} class={BEM_CLASS_TABS__TABLIST} role=\"tablist\" onKeyDown={handleKeyDown} onBlur={handleBlur}>\n\t\t\t\t\t{tabButtons.map(({ buttonProps, refBox }) => (\n\t\t\t\t\t\t<div class={BEM_CLASS_TABS__TAB} ref={refBox}>\n\t\t\t\t\t\t\t<ButtonFC {...buttonProps} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t\t{hasCreateButton && (\n\t\t\t\t\t<div class={BEM_CLASS_TABS__BUTTON_CREATE} ref={createButton.refBox}>\n\t\t\t\t\t\t<ButtonFC {...createButton.buttonProps} />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div class={BEM_CLASS_TABS__CONTENT} ref={refContent}></div>\n\t\t</BemRootNodeFC>\n\t);\n};\n","@use '../@shared/mixins' as *;\n@use '../@shared/global' as *;\n@use '../host-display-block' as *;\n@use '../tooltip/style.scss' as *;\n@use '../@shared/button.mixin' as *;\n@use '../@shared/icon.mixin' as *;\n\n@layer kol-component {\n\t@include kol-icon-styles();\n\t@include kol-embedded-button-box-styles('kol-button');\n\t.kol-tabs {\n\t\tdisplay: var(--display);\n\t\tgrid-template-columns: var(--grid-template-columns);\n\t\tgrid-template-rows: var(--grid-template-rows);\n\n\t\t&--align-right {\n\t\t\t--display: grid;\n\t\t\t--grid-template-columns: 1fr auto;\n\n\t\t\t--button-group-flex-direction: column;\n\t\t\t--button-group-order: 2;\n\t\t}\n\n\t\t&--align-left {\n\t\t\t--display: grid;\n\t\t\t--grid-template-columns: auto 1fr;\n\n\t\t\t--button-group-flex-direction: column;\n\t\t\t--button-group-order: 0;\n\t\t}\n\n\t\t&--align-bottom {\n\t\t\t--display: grid;\n\t\t\t--grid-template-rows: 1fr auto;\n\n\t\t\t--button-group-order: 2;\n\t\t}\n\n\t\t&__tabs-align-top {\n\t\t\t--display: grid;\n\t\t\t--grid-template-rows: auto 1fr;\n\n\t\t\t--button-group-order: 0;\n\t\t}\n\n\t\t&__button-group {\n\t\t\tdisplay: flex;\n\t\t\torder: var(--button-group-order);\n\n\t\t\tflex-direction: var(--button-group-flex-direction);\n\t\t\tflex-wrap: wrap;\n\n\t\t\t.kol-button {\n\t\t\t\tdisplay: block;\n\n\t\t\t\t/* The underline belongs to the interactive element — it carries the UA `medium`\n\t\t\t\t border-width from the shared wc-box styles, so the selected-tab underline keeps\n\t\t\t\t the exact box it had when the button element itself carried `kol-button`. */\n\t\t\t\t.kol-button__interactive-element {\n\t\t\t\t\tborder-bottom-color: transparent;\n\t\t\t\t\tborder-bottom-style: solid;\n\t\t\t\t}\n\n\t\t\t\t@media (forced-colors: active) {\n\t\t\t\t\t&.selected {\n\t\t\t\t\t\toutline: 3px solid Highlight;\n\t\t\t\t\t\toutline-offset: -3px;\n\n\t\t\t\t\t\t/* The outline sits on the wrapper, but only the inner button can receive focus.\n\t\t\t\t\t\t Matching `:focus-visible` on the wrapper itself would never fire, so the\n\t\t\t\t\t\t focused state has to be detected through the interactive element. */\n\t\t\t\t\t\t&:has(.kol-button__interactive-element:focus-visible) {\n\t\t\t\t\t\t\toutline-style: dashed;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&__tablist {\n\t\t\tdisplay: flex;\n\n\t\t\tflex-direction: var(--button-group-flex-direction);\n\t\t\tflex-wrap: wrap;\n\t\t}\n\n\t\t&__panel {\n\t\t\theight: 100%;\n\t\t}\n\t}\n}\n","import type { JSX } from '@stencil/core';\nimport { Component, Element, h, Host, Method, Prop, Watch } from '@stencil/core';\n\nimport { BaseWebComponent } from '../../internal/functional-components/base-web-component';\nimport type { WebComponentInterface } from '../../internal/functional-components/generic-types';\nimport type { TabsApi } from '../../internal/functional-components/tabs/api';\nimport { tabsPropsConfig } from '../../internal/functional-components/tabs/api';\nimport type { TabsButton, TabsButtonItem } from '../../internal/functional-components/tabs/button-item';\nimport { createTabsButtonItem } from '../../internal/functional-components/tabs/button-item';\nimport { TabsFC } from '../../internal/functional-components/tabs/component';\nimport { alignProp, hasCreateButtonProp, labelWithExpertSlotProp, selectedProp, tabBehaviorProp, tabsCallbacksProp, tabsProp } from '../../internal/props';\nimport type {\n\tAlignPropType,\n\tButtonCallbacksPropType,\n\tClickableElement,\n\tFocusableElement,\n\tKolFocusOptions,\n\tKoliBriTabsCallbacks,\n\tLabelPropType,\n\tStencilUnknown,\n\tStringified,\n\tTabBehaviorPropType,\n\tTabButtonProps,\n\tTabsProps,\n} from '../../schema';\nimport { devHint, koliBriQuerySelector } from '../../schema';\n\nimport { translate } from '../../i18n';\nimport { KeyboardKey } from '../../schema/enums';\nimport type { HasCreateButtonPropType } from '../../schema/props/has-create-button';\nimport { createUniqueId } from '../../utils/dev.utils';\nimport { createCtaRef, delegateClick, delegateFocus } from '../../utils/element-interaction';\nimport { dispatchDomEvent, KolEvent } from '../../utils/events';\n// https://www.w3.org/TR/wai-aria-practices-1.1/examples/tabs/tabs-2/tabs.html\n\n/**\n * The **Tabs** component is used to organize related content on the same page and navigate between them. Tabs ensure that large amounts of content can be more easily organized for users.\n */\n@Component({\n\ttag: 'kol-tabs',\n\tstyleUrls: {\n\t\tdefault: './style.scss',\n\t},\n\tshadow: true,\n})\nexport class KolTabs extends BaseWebComponent<TabsApi> implements ClickableElement, FocusableElement, TabsProps, WebComponentInterface<TabsApi> {\n\t@Element() protected readonly host?: HTMLKolTabsElement;\n\n\tprivate rootElement?: HTMLDivElement;\n\tprivate tabPanelHost?: HTMLDivElement;\n\tprivate readonly onCreateLabel = `${translate('kol-new')} …`;\n\tprivate currentFocusIndex: number | undefined;\n\n\t/** Points at the button of the selected tab; `focus()` and `click()` delegate to it. */\n\tprotected readonly ctaRef = createCtaRef<HTMLButtonElement>();\n\n\t/**\n\t * Instance-unique prefix for all tab button and tabpanel ids (`id`, `aria-controls`,\n\t * `aria-labelledby`, `focusTabById` selector). Must not be derived from `_label`:\n\t * label characters (e.g. commas, which split CSS selector lists) would break the\n\t * `button#...` lookup, and identical labels on multiple `<kol-tabs>` would collide.\n\t */\n\tprivate readonly id = createUniqueId('tabs');\n\n\t/** One orchestrated button per tab, rebuilt whenever `_tabs` changes. */\n\tprivate tabButtonItems: TabsButtonItem[] = [];\n\tprivate readonly createButtonItem = createTabsButtonItem();\n\n\t// --- Lifecycle ---\n\n\tpublic componentWillLoad(): void {\n\t\tthis.initRenderProps(tabsPropsConfig);\n\t\talignProp.apply(this._align, (v) => this.setRenderProp('align', v));\n\t\ttabBehaviorProp.apply(this._behavior, (v) => this.setRenderProp('behavior', v));\n\t\thasCreateButtonProp.apply(this._hasCreateButton, (v) => this.setRenderProp('hasCreateButton', v));\n\t\tlabelWithExpertSlotProp.apply(this._label, (v) => this.setRenderProp('label', v));\n\t\ttabsCallbacksProp.apply(this._on, (v) => this.setRenderProp('on', v));\n\t\tthis.applySelected(this._selected);\n\t\tthis.applyTabs(this._tabs);\n\t}\n\n\tpublic componentWillRender(): void {\n\t\tthis.resolveButtons();\n\t}\n\n\tpublic componentDidRender(): void {\n\t\tthis.ctaRef(this.tabButtonItems[this.getRenderProp('selected')]?.getButtonElement());\n\t\tthis.tabButtonItems.forEach((item) => item.syncListeners());\n\t\tthis.createButtonItem.syncListeners();\n\t\tthis.refreshTabPanels();\n\t}\n\n\tpublic disconnectedCallback(): void {\n\t\tthis.tabButtonItems.forEach((item) => item.destroy());\n\t\tthis.createButtonItem.destroy();\n\t}\n\n\t// --- Public methods ---\n\n\t/**\n\t * Sets focus on the current tab button.\n\t */\n\t@Method()\n\t@delegateFocus('ctaRef')\n\t// @ts-expect-error: options parameter will be implemented by the decorator.\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tpublic async focus(options?: KolFocusOptions): Promise<void> {}\n\n\t/**\n\t * Triggers a click on the currently selected tab.\n\t */\n\t@Method()\n\t@delegateClick('ctaRef')\n\tpublic async click(): Promise<void> {}\n\n\t// --- Selection ---\n\n\tprivate nextPossibleTabIndex = (tabs: TabButtonProps[], offset: number, step = 1): number => {\n\t\tconst nextOffset = offset + step;\n\n\t\tif (nextOffset < tabs.length) {\n\t\t\tif (tabs[nextOffset]._disabled) {\n\t\t\t\treturn this.nextPossibleTabIndex(tabs, offset, step + 1);\n\t\t\t}\n\t\t\treturn nextOffset;\n\t\t}\n\n\t\treturn offset;\n\t};\n\n\tprivate prevPossibleTabIndex = (tabs: TabButtonProps[], offset: number, step = 1): number => {\n\t\tconst nextOffset = offset - step;\n\n\t\tif (nextOffset >= 0) {\n\t\t\tif (tabs[nextOffset]._disabled) {\n\t\t\t\treturn this.prevPossibleTabIndex(tabs, offset, step + 1);\n\t\t\t}\n\t\t\treturn nextOffset;\n\t\t}\n\n\t\treturn offset;\n\t};\n\n\tprivate selectNextNotDisabledTab = (selected: number, tabs: TabButtonProps[], upOrDown = true, initialSelected?: number): number => {\n\t\tif (selected > tabs.length - 1) {\n\t\t\tselected = tabs.length - 1;\n\t\t}\n\t\tif (selected < 0) {\n\t\t\tselected = 0;\n\t\t}\n\t\tif (Array.isArray(tabs) && tabs[selected]) {\n\t\t\tif (tabs[selected]._disabled) {\n\t\t\t\tif (upOrDown === true) {\n\t\t\t\t\tif (selected < tabs.length - 1) {\n\t\t\t\t\t\treturn this.selectNextNotDisabledTab(selected + 1, tabs, true, initialSelected || selected);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tselected = initialSelected || selected;\n\t\t\t\t\t\tupOrDown = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (upOrDown === false) {\n\t\t\t\t\tif (selected > 0) {\n\t\t\t\t\t\treturn this.selectNextNotDisabledTab(selected - 1, tabs, false, initialSelected || selected);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdevHint(`[KolTabs] All tabs are disabled, and therefore no tab can be displayed.`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn selected;\n\t};\n\n\t/**\n\t * Moves the selection off a disabled or out-of-range tab. Runs after `_selected` and after\n\t * `_tabs`, because the result depends on both.\n\t */\n\tprivate syncSelected(): void {\n\t\tconst tabs = this.getRenderProp('tabs');\n\t\tif (tabs.length > 0) {\n\t\t\tthis.setRenderProp('selected', this.selectNextNotDisabledTab(this.getRenderProp('selected'), tabs));\n\t\t}\n\t}\n\n\t// --- Event handling ---\n\n\tprivate readonly handleKeyDown = (event: KeyboardEvent): void => {\n\t\tswitch (event.key as KeyboardKey) {\n\t\t\tcase KeyboardKey.ArrowRight:\n\t\t\t\tthis.goToNextTab(event);\n\t\t\t\tbreak;\n\t\t\tcase KeyboardKey.ArrowLeft:\n\t\t\t\tthis.goToPreviousTab(event);\n\t\t\t\tbreak;\n\t\t\tcase KeyboardKey.Space:\n\t\t\tcase KeyboardKey.Enter:\n\t\t\t\tthis.activateFocusedTab(event);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tprivate readonly handleBlur = (): void => {\n\t\tthis.currentFocusIndex = undefined;\n\t};\n\n\tprivate getCurrentFocusIndex(): number {\n\t\tif (typeof this.currentFocusIndex === 'number') {\n\t\t\treturn this.currentFocusIndex;\n\t\t}\n\n\t\treturn this.getRenderProp('selected');\n\t}\n\n\tprivate getKeyboardTabChangeMode(): 'selectFocusOnly' | 'activateCompletely' {\n\t\tif (this.getRenderProp('behavior') === 'select-manual') {\n\t\t\treturn 'selectFocusOnly';\n\t\t}\n\n\t\treturn 'activateCompletely';\n\t}\n\n\tprivate goToNextTab(event: KeyboardEvent) {\n\t\tconst nextFocusIndex = this.nextPossibleTabIndex(this.getRenderProp('tabs'), this.getCurrentFocusIndex());\n\t\tthis.selectNextTabEvent(event, nextFocusIndex, this.getKeyboardTabChangeMode());\n\t}\n\n\tprivate goToPreviousTab(event: KeyboardEvent) {\n\t\tconst nextFocusIndex = this.prevPossibleTabIndex(this.getRenderProp('tabs'), this.getCurrentFocusIndex());\n\t\tthis.selectNextTabEvent(event, nextFocusIndex, this.getKeyboardTabChangeMode());\n\t}\n\n\tprivate activateFocusedTab(event: KeyboardEvent) {\n\t\tif (typeof this.currentFocusIndex === 'number') {\n\t\t\tthis.onSelect(event, this.currentFocusIndex);\n\t\t}\n\t}\n\n\tprivate readonly onClickSelect = (event: MouseEvent, index: number): void => {\n\t\tthis.selectNextTabEvent(event, index);\n\t};\n\n\tprivate selectNextTabEvent(\n\t\tevent: KeyboardEvent | MouseEvent,\n\t\tnextTabIndex: number,\n\t\tchangeMode: 'selectFocusOnly' | 'activateCompletely' = 'activateCompletely',\n\t): void {\n\t\tthis.currentFocusIndex = nextTabIndex;\n\n\t\tthis.focusTabById(nextTabIndex);\n\n\t\tif (changeMode === 'activateCompletely') {\n\t\t\tthis._selected = nextTabIndex;\n\n\t\t\tconst tab = this.getRenderProp('tabs')[nextTabIndex];\n\t\t\ttab._on?.onSelect?.(event, nextTabIndex);\n\n\t\t\tthis.onSelect(event, nextTabIndex);\n\t\t}\n\t}\n\n\tprivate readonly onMouseDown = (event: Event): void => {\n\t\tevent.preventDefault();\n\t};\n\n\tprivate readonly tabButtonCallbacks: ButtonCallbacksPropType<number> = {\n\t\tonClick: this.onClickSelect,\n\t\tonMouseDown: this.onMouseDown,\n\t};\n\n\tprivate focusTabById(index: number): void {\n\t\tif (this.rootElement /* SSR instanceof HTMLElement */) {\n\t\t\tconst button: HTMLElement | null = koliBriQuerySelector(`button#${this.id}-tab-${index}`, this.rootElement);\n\t\t\tbutton?.focus();\n\t\t}\n\t}\n\n\tprivate onSelect(event: CustomEvent | KeyboardEvent | MouseEvent | PointerEvent, index: number): void {\n\t\tthis.getRenderProp('on').onSelect?.(event, index);\n\t\tif (this.host) {\n\t\t\tdispatchDomEvent(this.host, KolEvent.select, index);\n\t\t}\n\n\t\tthis.focusTabById(index);\n\t}\n\n\tprivate readonly onCreate = (event: Event): void => {\n\t\tevent.preventDefault();\n\t\tthis.getRenderProp('on').onCreate?.(event);\n\t\tif (this.host) {\n\t\t\tdispatchDomEvent(this.host, KolEvent.create);\n\t\t}\n\t};\n\n\t// --- Tab panels ---\n\n\tprivate readonly setRootRef = (element?: HTMLDivElement): void => {\n\t\tthis.rootElement = element;\n\t};\n\n\tprivate readonly setContentRef = (element?: HTMLDivElement): void => {\n\t\tthis.tabPanelHost = element;\n\t};\n\n\t/**\n\t * Recreates one panel per tab. Each panel projects the light-DOM child with the same index\n\t * through a named slot, which is why the panels are built imperatively rather than rendered.\n\t */\n\tprivate refreshTabPanels(): void {\n\t\tif (!this.tabPanelHost) return;\n\t\twhile (this.tabPanelHost.firstChild) {\n\t\t\tthis.tabPanelHost.removeChild(this.tabPanelHost.firstChild);\n\t\t}\n\t\tconst tabs = this.getRenderProp('tabs');\n\t\tfor (let i = 0; i < tabs.length; i++) {\n\t\t\tconst div = document.createElement('div');\n\t\t\tdiv.setAttribute('aria-labelledby', `${this.id}-tab-${i}`);\n\t\t\tdiv.setAttribute('id', `${this.id}-panel-${i}`);\n\t\t\tdiv.setAttribute('role', 'tabpanel');\n\t\t\tdiv.setAttribute('hidden', '');\n\t\t\t// Panels are not tabbable, see https://github.com/public-ui/kolibri/issues/10082\n\t\t\tconst slot = document.createElement('slot');\n\t\t\tslot.setAttribute('name', `tabpanel-slot-${i}`);\n\t\t\tdiv.appendChild(slot);\n\t\t\tthis.tabPanelHost.appendChild(div);\n\n\t\t\tif (typeof HTMLCollection !== 'undefined' && this.host?.children instanceof HTMLCollection && this.host?.children[i] /* SSR instanceof HTMLElement */) {\n\t\t\t\tthis.host.children[i].setAttribute('slot', `tabpanel-slot-${i}`);\n\t\t\t}\n\t\t}\n\t\tthis.updateVisiblePanel();\n\t}\n\n\tprivate updateVisiblePanel(): void {\n\t\tif (!this.tabPanelHost) return;\n\t\tconst selected = this.getRenderProp('selected');\n\t\tArray.from(this.tabPanelHost.children).forEach((child, i) => {\n\t\t\tif (i === selected) {\n\t\t\t\tchild.removeAttribute('hidden');\n\t\t\t} else {\n\t\t\t\tchild.setAttribute('hidden', '');\n\t\t\t}\n\t\t});\n\t}\n\n\t// --- Render ---\n\n\t/**\n\t * Resolves the embedded buttons against the current selection. The props are the ones the\n\t * predecessor handed its `kol-button-wc` elements.\n\t */\n\tprivate resolveButtons(): void {\n\t\tconst selected = this.getRenderProp('selected');\n\t\tconst tabs = this.getRenderProp('tabs');\n\n\t\tthis.tabButtons = this.tabButtonItems.map((item, index) => {\n\t\t\tconst tab = tabs[index];\n\t\t\tconst isSelected = selected === index;\n\t\t\treturn item.getButton(\n\t\t\t\t{\n\t\t\t\t\t_ariaControls: `${this.id}-panel-${index}`,\n\t\t\t\t\t_ariaSelected: isSelected,\n\t\t\t\t\t_customClass: isSelected ? 'selected' : '',\n\t\t\t\t\t_disabled: tab._disabled,\n\t\t\t\t\t_hideLabel: tab._hideLabel,\n\t\t\t\t\t_icons: tab._icons,\n\t\t\t\t\t_id: `${this.id}-tab-${index}`,\n\t\t\t\t\t_label: tab._label, // TODO: ariaLabel-Konzept prüfen\n\t\t\t\t\t_on: this.tabButtonCallbacks as ButtonCallbacksPropType<StencilUnknown>,\n\t\t\t\t\t_role: 'tab',\n\t\t\t\t\t_tabIndex: isSelected ? 0 : -1,\n\t\t\t\t\t_tooltipAlign: tab._tooltipAlign,\n\t\t\t\t\t_value: index,\n\t\t\t\t\t_variant: isSelected ? 'custom' : undefined,\n\t\t\t\t},\n\t\t\t\tthis.host,\n\t\t\t);\n\t\t});\n\n\t\tthis.createButton = this.createButtonItem.getButton(\n\t\t\t{\n\t\t\t\t_icons: 'kolicon-plus',\n\t\t\t\t_label: this.onCreateLabel,\n\t\t\t\t_on: { onClick: this.onCreate },\n\t\t\t},\n\t\t\tthis.host,\n\t\t);\n\t}\n\n\tpublic render(): JSX.Element {\n\t\treturn (\n\t\t\t<Host>\n\t\t\t\t<TabsFC\n\t\t\t\t\talign={this.getRenderProp('align')}\n\t\t\t\t\tbehavior={this.getRenderProp('behavior')}\n\t\t\t\t\tcreateButton={this.createButton}\n\t\t\t\t\thandleBlur={this.handleBlur}\n\t\t\t\t\thandleKeyDown={this.handleKeyDown}\n\t\t\t\t\thasCreateButton={this.getRenderProp('hasCreateButton')}\n\t\t\t\t\tlabel={this.getRenderProp('label')}\n\t\t\t\t\ton={this.getRenderProp('on')}\n\t\t\t\t\trefContent={this.setContentRef}\n\t\t\t\t\trefRoot={this.setRootRef}\n\t\t\t\t\tselected={this.getRenderProp('selected')}\n\t\t\t\t\ttabButtons={this.tabButtons}\n\t\t\t\t\ttabs={this.getRenderProp('tabs')}\n\t\t\t\t/>\n\t\t\t</Host>\n\t\t);\n\t}\n\n\t// --- Resolved per render pass (see `resolveButtons`) ---\n\n\t/**\n\t * Deliberately not `@State`: both are derived from props in `componentWillRender`, so a prop\n\t * change already schedules the render that refreshes them.\n\t */\n\tpublic createButton!: TabsButton;\n\tpublic tabButtons: TabsButton[] = [];\n\n\t// --- Props + Watchers ---\n\n\t/**\n\t * Defines the visual orientation of the component.\n\t */\n\t@Prop() public _align?: AlignPropType = 'top';\n\t@Watch('_align')\n\tpublic watchAlign(value?: AlignPropType): void {\n\t\talignProp.apply(value, (v) => this.setRenderProp('align', v));\n\t}\n\n\t/**\n\t * Defines which behavior is active.\n\t */\n\t@Prop() public _behavior?: TabBehaviorPropType;\n\t@Watch('_behavior')\n\tpublic watchBehavior(value?: TabBehaviorPropType): void {\n\t\ttabBehaviorProp.apply(value, (v) => this.setRenderProp('behavior', v));\n\t}\n\n\t/**\n\t * Defines whether the element has a create button.\n\t */\n\t@Prop() public _hasCreateButton?: HasCreateButtonPropType = false;\n\t@Watch('_hasCreateButton')\n\tpublic watchHasCreateButton(value?: HasCreateButtonPropType): void {\n\t\thasCreateButtonProp.apply(value, (v) => this.setRenderProp('hasCreateButton', v));\n\t}\n\n\t/**\n\t * Defines the visible or semantic label of the component (e.g. aria-label, label, headline, caption, summary, etc.).\n\t */\n\t@Prop() public _label!: LabelPropType;\n\t@Watch('_label')\n\tpublic watchLabel(value?: LabelPropType): void {\n\t\tlabelWithExpertSlotProp.apply(value, (v) => this.setRenderProp('label', v));\n\t}\n\n\t/**\n\t * Defines the callback functions for tabs events.\n\t */\n\t@Prop() public _on?: KoliBriTabsCallbacks;\n\t@Watch('_on')\n\tpublic watchOn(value?: KoliBriTabsCallbacks): void {\n\t\ttabsCallbacksProp.apply(value, (v) => this.setRenderProp('on', v));\n\t}\n\n\t/**\n\t * Defines which tab is active.\n\t */\n\t@Prop({ mutable: true, reflect: true }) public _selected?: number = 0;\n\t@Watch('_selected')\n\tpublic watchSelected(value?: number): void {\n\t\tthis.applySelected(value);\n\t}\n\n\t/**\n\t * Defines the tab captions.\n\t */\n\t@Prop() public _tabs!: Stringified<TabButtonProps[]>;\n\t@Watch('_tabs')\n\tpublic watchTabs(value?: Stringified<TabButtonProps[]>): void {\n\t\tthis.applyTabs(value);\n\t}\n\n\tprivate applySelected(value?: number): void {\n\t\tselectedProp.apply(value, (v) => {\n\t\t\tthis.setRenderProp('selected', v);\n\t\t\tthis.syncSelected();\n\t\t});\n\t}\n\n\tprivate applyTabs(value?: Stringified<TabButtonProps[]>): void {\n\t\ttabsProp.apply(value, (tabs) => {\n\t\t\tthis.setRenderProp('tabs', tabs);\n\t\t\tthis.tabButtonItems.forEach((item) => item.destroy());\n\t\t\tthis.tabButtonItems = tabs.map(() => createTabsButtonItem());\n\t\t\tthis.syncSelected();\n\t\t});\n\t}\n}\n"],"version":3}
1
+ {"file":"kol-tabs.js","mappings":"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","names":["KolTabs","__stencil_proxyCustomElement"],"sources":["src/internal/props/has-create-button.ts","src/internal/props/selected.ts","src/internal/props/tab-behavior.ts","src/internal/props/tabs.ts","src/internal/props/tabs-callbacks.ts","src/internal/functional-components/tabs/api.tsx","src/internal/functional-components/tabs/button-item.ts","src/internal/functional-components/tabs/component.tsx","src/components/tabs/style.scss?tag=kol-tabs&mode=default&encapsulation=shadow","src/components/tabs/component.tsx"],"sourcesContent":["import type { SimpleProp } from './helpers/factory';\nimport { createPropDefinition } from './helpers/factory';\nimport { normalizeBoolean } from './helpers/normalizers';\n\n/**\n * Renders a create button after the tabs. Clicking it invokes `_on.onCreate` and dispatches the\n * `create` DOM event — adding the new tab is up to the consumer.\n */\nexport type HasCreateButtonProp = SimpleProp<'hasCreateButton', boolean>;\nexport const hasCreateButtonProp = createPropDefinition<HasCreateButtonProp>('hasCreateButton', false, normalizeBoolean);\n","import type { SimpleProp } from './helpers/factory';\nimport { createPropDefinition } from './helpers/factory';\nimport { normalizeNumber } from './helpers/normalizers';\n\n/**\n * Index of the selected entry of a list-like component (e.g. the active tab).\n *\n * Only the type is checked here. Clamping into the list and skipping disabled entries depends on\n * the list itself, so the component resolves that after both values are known.\n */\nexport type SelectedProp = SimpleProp<'selected', number>;\nexport const selectedProp = createPropDefinition<SelectedProp>('selected', 0, normalizeNumber);\n","import type { TabBehaviorPropType } from '../../schema';\nimport type { SimpleProp } from './helpers/factory';\nimport { createPropDefinition } from './helpers/factory';\nimport { isEnumOption, normalizeString } from './helpers/normalizers';\n\nconst tabBehaviorOptions: readonly TabBehaviorPropType[] = ['select-automatic', 'select-manual'];\n\n/**\n * Keyboard behavior of a tab list.\n *\n * - `select-automatic`: arrow keys move the focus and activate the focused tab at once.\n * - `select-manual`: arrow keys only move the focus; Enter or Space activates the tab.\n *\n * Default: `select-automatic` — the behavior the predecessor applied whenever `_behavior` was\n * unset (it only checked for `select-manual`).\n *\n * @see https://www.w3.org/WAI/ARIA/apg/patterns/tabs/\n */\nexport type TabBehaviorProp = SimpleProp<'behavior', TabBehaviorPropType>;\n\nexport const tabBehaviorProp = createPropDefinition<TabBehaviorProp>(\n\t'behavior',\n\t'select-automatic',\n\t(value) => normalizeString(value) as TabBehaviorPropType,\n\t(v) => isEnumOption(v, tabBehaviorOptions),\n);\n","import type { Stringified, TabButtonProps } from '../../schema';\nimport { uiUxHintMillerscheZahl } from '../../schema/utils/a11y.tipps';\nimport type { Prop } from './helpers/factory';\nimport { createPropDefinition } from './helpers/factory';\nimport { normalizeArray } from './helpers/normalizers';\n\n/**\n * Tab buttons of `kol-tabs`.\n *\n * External type is `Stringified<TabButtonProps[]>` (JSON string when set via attribute, array\n * when set via property), internal type is the parsed array.\n *\n * Every entry must be an object with a non-empty string `_label`. One invalid entry rejects the\n * whole value and keeps the previously rendered tabs — the predecessor's `watchJsonArrayString`\n * behaved the same way.\n */\nexport type TabsProp = Prop<'tabs', Stringified<TabButtonProps[]>, TabButtonProps[]>;\n\nexport const tabsProp = createPropDefinition<TabsProp>(\n\t'tabs',\n\t[],\n\t(value) => normalizeArray(value) as TabButtonProps[],\n\t(items) => items.every((item) => typeof item === 'object' && item !== null && typeof item._label === 'string' && item._label.length > 0),\n\t{\n\t\thints: (_propName, items) => uiUxHintMillerscheZahl('KolTabs', items.length),\n\t},\n);\n","import type { KoliBriTabsCallbacks } from '../../schema';\nimport type { SimpleProp } from './helpers/factory';\nimport { createPropDefinition } from './helpers/factory';\nimport { normalizeCallbacksObject } from './helpers/normalizers';\n\nexport type TabsCallbacksProp = SimpleProp<'on', KoliBriTabsCallbacks>;\n\n/**\n * Callbacks of `kol-tabs`. Only `onCreate` and `onSelect` are kept, and only when they are\n * functions — the predecessor copied exactly these two into its state.\n */\nexport const tabsCallbacksProp = createPropDefinition<TabsCallbacksProp>('on', {}, (value) => {\n\tconst callbacks = normalizeCallbacksObject<KoliBriTabsCallbacks>(value);\n\tconst normalized: KoliBriTabsCallbacks = {};\n\tif (typeof callbacks.onCreate === 'function') {\n\t\tnormalized.onCreate = callbacks.onCreate;\n\t}\n\tif (typeof callbacks.onSelect === 'function') {\n\t\tnormalized.onSelect = callbacks.onSelect;\n\t}\n\treturn normalized;\n});\n","import type { KolFocusOptions } from '../../../schema';\nimport { alignProp, hasCreateButtonProp, labelWithExpertSlotProp, selectedProp, tabBehaviorProp, tabsCallbacksProp, tabsProp } from '../../props';\nimport type { ApiFromConfig, PropsConfigShape } from '../generic-types';\nimport type { TabsButton } from './button-item';\n\n/**\n * Props configuration for the tabs component.\n *\n * Notes on prop choices:\n * - `labelWithExpertSlotProp` (not `labelProp`): the predecessor's `validateLabel` accepted any\n * string; `labelProp` would reject one-character labels, a validation regression.\n * - `selectedProp` only checks the type. Clamping into the tab list and skipping disabled tabs\n * needs both `_selected` and `_tabs`, so the web component resolves it after applying either.\n * - `tabsCallbacksProp` and `tabBehaviorProp` are not rendered — the web component reads them in\n * its event handlers.\n */\nexport const tabsPropsConfig = {\n\trequired: [labelWithExpertSlotProp, tabsProp],\n\toptional: [alignProp, hasCreateButtonProp, selectedProp, tabBehaviorProp, tabsCallbacksProp],\n} as const satisfies PropsConfigShape;\n\nexport type TabsApi = ApiFromConfig<\n\ttypeof tabsPropsConfig,\n\t{\n\t\tCallbacks: {\n\t\t\t/** Blur handler of the tab list; resets the keyboard focus position. */\n\t\t\tblur: () => void;\n\t\t\t/** Keydown handler of the tab list: arrow keys move between tabs, Enter and Space activate. */\n\t\t\tkeyDown: (event: KeyboardEvent) => void;\n\t\t};\n\t\tMethods: {\n\t\t\tclick: () => void;\n\t\t\tfocus: (options?: KolFocusOptions) => void;\n\t\t};\n\t\tRefs: {\n\t\t\t/**\n\t\t\t * The tab panel container. The panels are created imperatively by the web component,\n\t\t\t * because every panel projects a light-DOM child through a named slot.\n\t\t\t */\n\t\t\tcontent: HTMLDivElement;\n\t\t\t/** The BEM root, used to look up a tab button by id when moving the focus. */\n\t\t\troot: HTMLDivElement;\n\t\t};\n\t\tStates: {\n\t\t\t/** The create button; rendered only when `hasCreateButton` is set. */\n\t\t\tcreateButton: TabsButton;\n\t\t\t/** One entry per tab, resolved per render pass against the selected tab. */\n\t\t\ttabButtons: TabsButton[];\n\t\t};\n\t}\n>;\n","import type { AlignPropType, InternalButtonProps, StencilUnknown } from '../../../schema';\nimport { setEventTarget } from '../../../schema';\nimport { nonce } from '../../../utils/dev.utils';\nimport { dispatchDomEvent, KolEvent } from '../../../utils/events';\nimport { BaseWebComponent } from '../base-web-component';\nimport type { ButtonApi } from '../button/api';\nimport type { ResolvedButtonProps } from '../button/resolve-props';\nimport { resolveButtonProps } from '../button/resolve-props';\nimport type { FunctionalComponentProps } from '../generic-types';\nimport { TooltipBehavior } from '../tooltip/behavior';\n\n/**\n * Everything `TabsFC` needs to render one embedded button: the resolved `ButtonFC` props and the\n * ref of the box around the button.\n */\nexport type TabsButton = {\n\tbuttonProps: FunctionalComponentProps<ButtonApi>;\n\t/**\n\t * The box stands where the predecessor's `kol-button-wc` element stood. It is the flex item of\n\t * the tab list — the `.kol-button` block inside claims `width: 100%` and would take a whole row\n\t * of its own otherwise — and the target of the `KolEvent` DOM events.\n\t */\n\trefBox: (element?: HTMLDivElement) => void;\n};\n\n/**\n * One orchestrated button of `kol-tabs` — a tab or the create button.\n *\n * `ButtonFC` is stateless, but a tab button is not: its tooltip behavior, its event handlers and\n * its element refs have to live somewhere. The predecessor rendered a `kol-button-wc` per button,\n * which owned exactly that; this item is that orchestration, minus the wrapper element. It is a\n * plain object with closures, like `popover-button/item.ts`, so `kol-tabs` composes one per button.\n *\n * Two pieces of the wrapper are deliberately absent:\n * - **Form association.** Tab buttons are `type=\"button\"` without `_name`, so there is no form\n * field to write the value into.\n * - **Submit/reset propagation.** Same reason: neither type is ever set.\n */\nexport type TabsButtonItem = {\n\t/**\n\t * Resolves the button props for the current render pass. Call once per render: the selected tab\n\t * changes the tab index, the variant and `aria-selected` of every tab.\n\t *\n\t * @param props - The button configuration, in the shape the predecessor handed `kol-button-wc`.\n\t * @param flagHost - Element the theme-scoped `buttonVariantDefault` feature flag is resolved against.\n\t */\n\tgetButton(props: InternalButtonProps, flagHost?: HTMLElement): TabsButton;\n\t/** The rendered `<button>`, once it is in the DOM. */\n\tgetButtonElement(): HTMLButtonElement | undefined;\n\t/** Re-registers the tooltip listeners. Call from `componentDidRender`. */\n\tsyncListeners(): void;\n\t/** Tears down the tooltip behavior. */\n\tdestroy(): void;\n};\n\nexport const createTabsButtonItem = (): TabsButtonItem => {\n\tconst tooltipBehavior = new TooltipBehavior(BaseWebComponent.stateLess);\n\tconst ariaDescriptionId = nonce();\n\tlet resolved: ResolvedButtonProps | undefined;\n\tlet value: StencilUnknown;\n\tlet boxElement: HTMLDivElement | undefined;\n\tlet buttonElement: HTMLButtonElement | undefined;\n\n\t// The events are dispatched on the box, not on the button: `KolEvent.click` and\n\t// `KolEvent.focus` share their type with the native events, so dispatching them on the button\n\t// would re-enter its own handlers.\n\tconst dispatch = (event: KolEvent, detail?: unknown): void => {\n\t\tif (boxElement) {\n\t\t\tdispatchDomEvent(boxElement, event, detail);\n\t\t}\n\t};\n\n\tconst handleClick = (event: MouseEvent): void => {\n\t\tevent.stopPropagation();\n\t\ttooltipBehavior.hideTooltip();\n\n\t\tconst onClick = resolved?.on.onClick;\n\t\tif (typeof onClick === 'function') {\n\t\t\tsetEventTarget(event, buttonElement);\n\t\t\tonClick(event, value);\n\t\t}\n\t\tdispatch(KolEvent.click, value);\n\t};\n\tconst handleMouseDown = (event: MouseEvent): void => {\n\t\tresolved?.on.onMouseDown?.(event);\n\t\tdispatch(KolEvent.mousedown);\n\t};\n\tconst handleFocus = (event: FocusEvent): void => {\n\t\tresolved?.on.onFocus?.(event);\n\t\tdispatch(KolEvent.focus);\n\t};\n\tconst handleBlur = (event: FocusEvent): void => {\n\t\tresolved?.on.onBlur?.(event);\n\t\tdispatch(KolEvent.blur);\n\t};\n\n\tconst refBox = (element?: HTMLDivElement): void => {\n\t\tboxElement = element;\n\t};\n\tconst refButton = (element?: HTMLButtonElement): void => {\n\t\tbuttonElement = element;\n\t};\n\n\treturn {\n\t\tgetButton: (props: InternalButtonProps, flagHost?: HTMLElement): TabsButton => {\n\t\t\tresolved = resolveButtonProps(props, flagHost);\n\t\t\tvalue = props._value;\n\n\t\t\ttooltipBehavior.componentWillLoad({\n\t\t\t\tlabel: resolved.label,\n\t\t\t\talign: resolved.tooltipAlign as AlignPropType,\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tbuttonProps: {\n\t\t\t\t\t...resolved,\n\t\t\t\t\tariaDescriptionId,\n\t\t\t\t\thandleBlur,\n\t\t\t\t\thandleClick,\n\t\t\t\t\thandleFocus,\n\t\t\t\t\thandleMouseDown,\n\t\t\t\t\trefButton,\n\t\t\t\t\trefTooltip: tooltipBehavior.setTooltipElementRef,\n\t\t\t\t},\n\t\t\t\trefBox,\n\t\t\t};\n\t\t},\n\t\tgetButtonElement: (): HTMLButtonElement | undefined => buttonElement,\n\t\tsyncListeners: (): void => {\n\t\t\tif (buttonElement) {\n\t\t\t\ttooltipBehavior.syncListeners(undefined, buttonElement, true);\n\t\t\t}\n\t\t},\n\t\tdestroy: (): void => {\n\t\t\ttooltipBehavior.destroy();\n\t\t},\n\t};\n};\n","import type { FunctionalComponent as FC } from '@stencil/core';\nimport { h } from '@stencil/core';\n\nimport { bem } from '../../../schema/bem-registry';\nimport { BemRootNodeFC } from '../bem-root-node/component';\nimport { ButtonFC } from '../button/component';\nimport type { FunctionalComponentProps } from '../generic-types';\nimport type { TabsApi } from './api';\n\nconst tabsBem = bem.forBlock('kol-tabs');\nconst BEM_CLASS_TABS__BUTTON_CREATE = tabsBem('button-create');\nconst BEM_CLASS_TABS__BUTTON_GROUP = tabsBem('button-group');\nconst BEM_CLASS_TABS__CONTENT = tabsBem('content');\nconst BEM_CLASS_TABS__TAB = tabsBem('tab');\nconst BEM_CLASS_TABS__TABLIST = tabsBem('tablist');\n\n/**\n * Renders the tab list, the optional create button and the empty panel container. The panels\n * themselves are managed by the web component (see `TabsApi` → `refContent`).\n *\n * The create button is a sibling of the `tablist` inside `__button-group`: a `tablist` may only\n * contain `tab` elements (ARIA `aria-required-children`), and arrow-key handling belongs to the\n * tabs alone.\n *\n * Every button sits in a box of its own rather than being a direct child of its container: the box\n * is the flex item that sizes the tab, and it keeps the embedded `.kol-button` block a descendant\n * of `__button-create`, which the base and theme styles rely on.\n */\nexport const TabsFC: FC<FunctionalComponentProps<TabsApi>> = (props) => {\n\tconst { align, class: hostClass, createButton, handleBlur, handleKeyDown, hasCreateButton, label, refContent, refRoot, tabButtons } = props;\n\n\treturn (\n\t\t<BemRootNodeFC block=\"kol-tabs\" modifiers={{ [`align-${align}`]: true }} class={hostClass} ref={refRoot}>\n\t\t\t<div class={BEM_CLASS_TABS__BUTTON_GROUP}>\n\t\t\t\t{/* The tab buttons inside are focusable; the tab list itself is not. */}\n\t\t\t\t{/* eslint-disable-next-line jsx-a11y/interactive-supports-focus */}\n\t\t\t\t<div aria-label={label} class={BEM_CLASS_TABS__TABLIST} role=\"tablist\" onKeyDown={handleKeyDown} onBlur={handleBlur}>\n\t\t\t\t\t{tabButtons.map(({ buttonProps, refBox }) => (\n\t\t\t\t\t\t<div class={BEM_CLASS_TABS__TAB} ref={refBox}>\n\t\t\t\t\t\t\t<ButtonFC {...buttonProps} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t\t{hasCreateButton && (\n\t\t\t\t\t<div class={BEM_CLASS_TABS__BUTTON_CREATE} ref={createButton.refBox}>\n\t\t\t\t\t\t<ButtonFC {...createButton.buttonProps} />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div class={BEM_CLASS_TABS__CONTENT} ref={refContent}></div>\n\t\t</BemRootNodeFC>\n\t);\n};\n","@use '../@shared/mixins' as *;\n@use '../@shared/global' as *;\n@use '../host-display-block' as *;\n@use '../tooltip/style.scss' as *;\n@use '../@shared/button.mixin' as *;\n@use '../@shared/icon.mixin' as *;\n\n@layer kol-component {\n\t@include kol-icon-styles();\n\t@include kol-embedded-button-box-styles('kol-button');\n\t.kol-tabs {\n\t\tdisplay: var(--display);\n\t\tgrid-template-columns: var(--grid-template-columns);\n\t\tgrid-template-rows: var(--grid-template-rows);\n\n\t\t&--align-right {\n\t\t\t--display: grid;\n\t\t\t--grid-template-columns: 1fr auto;\n\n\t\t\t--button-group-flex-direction: column;\n\t\t\t--button-group-order: 2;\n\t\t}\n\n\t\t&--align-left {\n\t\t\t--display: grid;\n\t\t\t--grid-template-columns: auto 1fr;\n\n\t\t\t--button-group-flex-direction: column;\n\t\t\t--button-group-order: 0;\n\t\t}\n\n\t\t&--align-bottom {\n\t\t\t--display: grid;\n\t\t\t--grid-template-rows: 1fr auto;\n\n\t\t\t--button-group-order: 2;\n\t\t}\n\n\t\t&__tabs-align-top {\n\t\t\t--display: grid;\n\t\t\t--grid-template-rows: auto 1fr;\n\n\t\t\t--button-group-order: 0;\n\t\t}\n\n\t\t&__button-group {\n\t\t\tdisplay: flex;\n\t\t\torder: var(--button-group-order);\n\n\t\t\tflex-direction: var(--button-group-flex-direction);\n\t\t\tflex-wrap: wrap;\n\n\t\t\t.kol-button {\n\t\t\t\tdisplay: block;\n\n\t\t\t\t/* The underline belongs to the interactive element — it carries the UA `medium`\n\t\t\t\t border-width from the shared wc-box styles, so the selected-tab underline keeps\n\t\t\t\t the exact box it had when the button element itself carried `kol-button`. */\n\t\t\t\t.kol-button__interactive-element {\n\t\t\t\t\tborder-bottom-color: transparent;\n\t\t\t\t\tborder-bottom-style: solid;\n\t\t\t\t}\n\n\t\t\t\t@media (forced-colors: active) {\n\t\t\t\t\t&.selected {\n\t\t\t\t\t\toutline: 3px solid Highlight;\n\t\t\t\t\t\toutline-offset: -3px;\n\n\t\t\t\t\t\t/* The outline sits on the wrapper, but only the inner button can receive focus.\n\t\t\t\t\t\t Matching `:focus-visible` on the wrapper itself would never fire, so the\n\t\t\t\t\t\t focused state has to be detected through the interactive element. */\n\t\t\t\t\t\t&:has(.kol-button__interactive-element:focus-visible) {\n\t\t\t\t\t\t\toutline-style: dashed;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&__tablist {\n\t\t\tdisplay: flex;\n\n\t\t\tflex-direction: var(--button-group-flex-direction);\n\t\t\tflex-wrap: wrap;\n\t\t}\n\n\t\t&__panel {\n\t\t\theight: 100%;\n\t\t}\n\t}\n}\n","import type { JSX } from '@stencil/core';\nimport { Component, Element, h, Host, Method, Prop, Watch } from '@stencil/core';\n\nimport { BaseWebComponent } from '../../internal/functional-components/base-web-component';\nimport type { WebComponentInterface } from '../../internal/functional-components/generic-types';\nimport type { TabsApi } from '../../internal/functional-components/tabs/api';\nimport { tabsPropsConfig } from '../../internal/functional-components/tabs/api';\nimport type { TabsButton, TabsButtonItem } from '../../internal/functional-components/tabs/button-item';\nimport { createTabsButtonItem } from '../../internal/functional-components/tabs/button-item';\nimport { TabsFC } from '../../internal/functional-components/tabs/component';\nimport { alignProp, hasCreateButtonProp, labelWithExpertSlotProp, selectedProp, tabBehaviorProp, tabsCallbacksProp, tabsProp } from '../../internal/props';\nimport type {\n\tAlignPropType,\n\tButtonCallbacksPropType,\n\tClickableElement,\n\tFocusableElement,\n\tKolFocusOptions,\n\tKoliBriTabsCallbacks,\n\tLabelPropType,\n\tStencilUnknown,\n\tStringified,\n\tTabBehaviorPropType,\n\tTabButtonProps,\n\tTabsProps,\n} from '../../schema';\nimport { devHint, koliBriQuerySelector } from '../../schema';\n\nimport { translate } from '../../i18n';\nimport { KeyboardKey } from '../../schema/enums';\nimport type { HasCreateButtonPropType } from '../../schema/props/has-create-button';\nimport { createUniqueId } from '../../utils/dev.utils';\nimport { createCtaRef, delegateClick, delegateFocus } from '../../utils/element-interaction';\nimport { dispatchDomEvent, KolEvent } from '../../utils/events';\n// https://www.w3.org/TR/wai-aria-practices-1.1/examples/tabs/tabs-2/tabs.html\n\n/**\n * The **Tabs** component is used to organize related content on the same page and navigate between them. Tabs ensure that large amounts of content can be more easily organized for users.\n */\n@Component({\n\ttag: 'kol-tabs',\n\tstyleUrls: {\n\t\tdefault: './style.scss',\n\t},\n\tshadow: true,\n})\nexport class KolTabs extends BaseWebComponent<TabsApi> implements ClickableElement, FocusableElement, TabsProps, WebComponentInterface<TabsApi> {\n\t@Element() protected readonly host?: HTMLKolTabsElement;\n\n\tprivate rootElement?: HTMLDivElement;\n\tprivate tabPanelHost?: HTMLDivElement;\n\tprivate readonly onCreateLabel = `${translate('kol-new')} …`;\n\tprivate currentFocusIndex: number | undefined;\n\n\t/** Points at the button of the selected tab; `focus()` and `click()` delegate to it. */\n\tprotected readonly ctaRef = createCtaRef<HTMLButtonElement>();\n\n\t/**\n\t * Instance-unique prefix for all tab button and tabpanel ids (`id`, `aria-controls`,\n\t * `aria-labelledby`, `focusTabById` selector). Must not be derived from `_label`:\n\t * label characters (e.g. commas, which split CSS selector lists) would break the\n\t * `button#...` lookup, and identical labels on multiple `<kol-tabs>` would collide.\n\t */\n\tprivate readonly id = createUniqueId('tabs');\n\n\t/** One orchestrated button per tab, rebuilt whenever `_tabs` changes. */\n\tprivate tabButtonItems: TabsButtonItem[] = [];\n\tprivate readonly createButtonItem = createTabsButtonItem();\n\n\t// --- Lifecycle ---\n\n\tpublic componentWillLoad(): void {\n\t\tthis.initRenderProps(tabsPropsConfig);\n\t\talignProp.apply(this._align, (v) => this.setRenderProp('align', v));\n\t\ttabBehaviorProp.apply(this._behavior, (v) => this.setRenderProp('behavior', v));\n\t\thasCreateButtonProp.apply(this._hasCreateButton, (v) => this.setRenderProp('hasCreateButton', v));\n\t\tlabelWithExpertSlotProp.apply(this._label, (v) => this.setRenderProp('label', v));\n\t\ttabsCallbacksProp.apply(this._on, (v) => this.setRenderProp('on', v));\n\t\tthis.applySelected(this._selected);\n\t\tthis.applyTabs(this._tabs);\n\t}\n\n\tpublic componentWillRender(): void {\n\t\tthis.resolveButtons();\n\t}\n\n\tpublic componentDidRender(): void {\n\t\tthis.ctaRef(this.tabButtonItems[this.getRenderProp('selected')]?.getButtonElement());\n\t\tthis.tabButtonItems.forEach((item) => item.syncListeners());\n\t\tthis.createButtonItem.syncListeners();\n\t\tthis.refreshTabPanels();\n\t}\n\n\tpublic disconnectedCallback(): void {\n\t\tthis.tabButtonItems.forEach((item) => item.destroy());\n\t\tthis.createButtonItem.destroy();\n\t}\n\n\t// --- Public methods ---\n\n\t/**\n\t * Sets focus on the current tab button.\n\t */\n\t@Method()\n\t@delegateFocus('ctaRef')\n\t// @ts-expect-error: options parameter will be implemented by the decorator.\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tpublic async focus(options?: KolFocusOptions): Promise<void> {}\n\n\t/**\n\t * Triggers a click on the currently selected tab.\n\t */\n\t@Method()\n\t@delegateClick('ctaRef')\n\tpublic async click(): Promise<void> {}\n\n\t// --- Selection ---\n\n\tprivate nextPossibleTabIndex = (tabs: TabButtonProps[], offset: number, step = 1): number => {\n\t\tconst nextOffset = offset + step;\n\t\treturn this.selectNextNotDisabledTab(nextOffset, tabs, true);\n\t};\n\n\tprivate prevPossibleTabIndex = (tabs: TabButtonProps[], offset: number, step = 1): number => {\n\t\tconst nextOffset = offset - step;\n\t\treturn this.selectNextNotDisabledTab(nextOffset, tabs, false);\n\t};\n\n\tprivate selectNextNotDisabledTab = (selected: number, tabs: TabButtonProps[], upOrDown = true, initialSelected?: number): number => {\n\t\tif (selected > tabs.length - 1) {\n\t\t\tselected = 0;\n\t\t}\n\t\tif (selected < 0) {\n\t\t\tselected = tabs.length - 1;\n\t\t}\n\n\t\tif (Array.isArray(tabs) && tabs[selected]) {\n\t\t\tif (tabs[selected]._disabled) {\n\t\t\t\tif (upOrDown === true) {\n\t\t\t\t\tif (selected < tabs.length - 1) {\n\t\t\t\t\t\treturn this.selectNextNotDisabledTab(selected + 1, tabs, true, initialSelected || selected);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tselected = initialSelected || selected;\n\t\t\t\t\t\tupOrDown = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (upOrDown === false) {\n\t\t\t\t\tif (selected > 0) {\n\t\t\t\t\t\treturn this.selectNextNotDisabledTab(selected - 1, tabs, false, initialSelected || selected);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdevHint(`[KolTabs] All tabs are disabled, and therefore no tab can be displayed.`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn selected;\n\t};\n\n\t/**\n\t * Moves the selection off a disabled or out-of-range tab. Runs after `_selected` and after\n\t * `_tabs`, because the result depends on both.\n\t */\n\tprivate syncSelected(): void {\n\t\tconst tabs = this.getRenderProp('tabs');\n\t\tif (tabs.length > 0) {\n\t\t\tthis.setRenderProp('selected', this.selectNextNotDisabledTab(this.getRenderProp('selected'), tabs));\n\t\t}\n\t}\n\n\t// --- Event handling ---\n\n\tprivate readonly handleKeyDown = (event: KeyboardEvent): void => {\n\t\tswitch (event.key as KeyboardKey) {\n\t\t\tcase KeyboardKey.ArrowRight:\n\t\t\t\tthis.goToNextTab(event);\n\t\t\t\tbreak;\n\t\t\tcase KeyboardKey.ArrowLeft:\n\t\t\t\tthis.goToPreviousTab(event);\n\t\t\t\tbreak;\n\t\t\tcase KeyboardKey.Space:\n\t\t\tcase KeyboardKey.Enter:\n\t\t\t\tthis.activateFocusedTab(event);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tprivate readonly handleBlur = (): void => {\n\t\tthis.currentFocusIndex = undefined;\n\t};\n\n\tprivate getCurrentFocusIndex(): number {\n\t\tif (typeof this.currentFocusIndex === 'number') {\n\t\t\treturn this.currentFocusIndex;\n\t\t}\n\n\t\treturn this.getRenderProp('selected');\n\t}\n\n\tprivate getKeyboardTabChangeMode(): 'selectFocusOnly' | 'activateCompletely' {\n\t\tif (this.getRenderProp('behavior') === 'select-manual') {\n\t\t\treturn 'selectFocusOnly';\n\t\t}\n\n\t\treturn 'activateCompletely';\n\t}\n\n\tprivate goToNextTab(event: KeyboardEvent) {\n\t\tconst nextFocusIndex = this.nextPossibleTabIndex(this.getRenderProp('tabs'), this.getCurrentFocusIndex());\n\t\tthis.selectNextTabEvent(event, nextFocusIndex, this.getKeyboardTabChangeMode());\n\t}\n\n\tprivate goToPreviousTab(event: KeyboardEvent) {\n\t\tconst nextFocusIndex = this.prevPossibleTabIndex(this.getRenderProp('tabs'), this.getCurrentFocusIndex());\n\t\tthis.selectNextTabEvent(event, nextFocusIndex, this.getKeyboardTabChangeMode());\n\t}\n\n\tprivate activateFocusedTab(event: KeyboardEvent) {\n\t\tif (typeof this.currentFocusIndex === 'number') {\n\t\t\tthis.onSelect(event, this.currentFocusIndex);\n\t\t}\n\t}\n\n\tprivate readonly onClickSelect = (event: MouseEvent, index: number): void => {\n\t\tthis.selectNextTabEvent(event, index);\n\t};\n\n\tprivate selectNextTabEvent(\n\t\tevent: KeyboardEvent | MouseEvent,\n\t\tnextTabIndex: number,\n\t\tchangeMode: 'selectFocusOnly' | 'activateCompletely' = 'activateCompletely',\n\t): void {\n\t\tthis.currentFocusIndex = nextTabIndex;\n\n\t\tthis.focusTabById(nextTabIndex);\n\n\t\tif (changeMode === 'activateCompletely') {\n\t\t\tthis._selected = nextTabIndex;\n\n\t\t\tconst tab = this.getRenderProp('tabs')[nextTabIndex];\n\t\t\ttab._on?.onSelect?.(event, nextTabIndex);\n\n\t\t\tthis.onSelect(event, nextTabIndex);\n\t\t}\n\t}\n\n\tprivate readonly onMouseDown = (event: Event): void => {\n\t\tevent.preventDefault();\n\t};\n\n\tprivate readonly tabButtonCallbacks: ButtonCallbacksPropType<number> = {\n\t\tonClick: this.onClickSelect,\n\t\tonMouseDown: this.onMouseDown,\n\t};\n\n\tprivate focusTabById(index: number): void {\n\t\tif (this.rootElement /* SSR instanceof HTMLElement */) {\n\t\t\tconst button: HTMLElement | null = koliBriQuerySelector(`button#${this.id}-tab-${index}`, this.rootElement);\n\t\t\tbutton?.focus();\n\t\t}\n\t}\n\n\tprivate onSelect(event: CustomEvent | KeyboardEvent | MouseEvent | PointerEvent, index: number): void {\n\t\tthis.getRenderProp('on').onSelect?.(event, index);\n\t\tif (this.host) {\n\t\t\tdispatchDomEvent(this.host, KolEvent.select, index);\n\t\t}\n\n\t\tthis.focusTabById(index);\n\t}\n\n\tprivate readonly onCreate = (event: Event): void => {\n\t\tevent.preventDefault();\n\t\tthis.getRenderProp('on').onCreate?.(event);\n\t\tif (this.host) {\n\t\t\tdispatchDomEvent(this.host, KolEvent.create);\n\t\t}\n\t};\n\n\t// --- Tab panels ---\n\n\tprivate readonly setRootRef = (element?: HTMLDivElement): void => {\n\t\tthis.rootElement = element;\n\t};\n\n\tprivate readonly setContentRef = (element?: HTMLDivElement): void => {\n\t\tthis.tabPanelHost = element;\n\t};\n\n\t/**\n\t * Recreates one panel per tab. Each panel projects the light-DOM child with the same index\n\t * through a named slot, which is why the panels are built imperatively rather than rendered.\n\t */\n\tprivate refreshTabPanels(): void {\n\t\tif (!this.tabPanelHost) return;\n\t\twhile (this.tabPanelHost.firstChild) {\n\t\t\tthis.tabPanelHost.removeChild(this.tabPanelHost.firstChild);\n\t\t}\n\t\tconst tabs = this.getRenderProp('tabs');\n\t\tfor (let i = 0; i < tabs.length; i++) {\n\t\t\tconst div = document.createElement('div');\n\t\t\tdiv.setAttribute('aria-labelledby', `${this.id}-tab-${i}`);\n\t\t\tdiv.setAttribute('id', `${this.id}-panel-${i}`);\n\t\t\tdiv.setAttribute('role', 'tabpanel');\n\t\t\tdiv.setAttribute('hidden', '');\n\t\t\t// Panels are not tabbable, see https://github.com/public-ui/kolibri/issues/10082\n\t\t\tconst slot = document.createElement('slot');\n\t\t\tslot.setAttribute('name', `tabpanel-slot-${i}`);\n\t\t\tdiv.appendChild(slot);\n\t\t\tthis.tabPanelHost.appendChild(div);\n\n\t\t\tif (typeof HTMLCollection !== 'undefined' && this.host?.children instanceof HTMLCollection && this.host?.children[i] /* SSR instanceof HTMLElement */) {\n\t\t\t\tthis.host.children[i].setAttribute('slot', `tabpanel-slot-${i}`);\n\t\t\t}\n\t\t}\n\t\tthis.updateVisiblePanel();\n\t}\n\n\tprivate updateVisiblePanel(): void {\n\t\tif (!this.tabPanelHost) return;\n\t\tconst selected = this.getRenderProp('selected');\n\t\tArray.from(this.tabPanelHost.children).forEach((child, i) => {\n\t\t\tif (i === selected) {\n\t\t\t\tchild.removeAttribute('hidden');\n\t\t\t} else {\n\t\t\t\tchild.setAttribute('hidden', '');\n\t\t\t}\n\t\t});\n\t}\n\n\t// --- Render ---\n\n\t/**\n\t * Resolves the embedded buttons against the current selection. The props are the ones the\n\t * predecessor handed its `kol-button-wc` elements.\n\t */\n\tprivate resolveButtons(): void {\n\t\tconst selected = this.getRenderProp('selected');\n\t\tconst tabs = this.getRenderProp('tabs');\n\n\t\tthis.tabButtons = this.tabButtonItems.map((item, index) => {\n\t\t\tconst tab = tabs[index];\n\t\t\tconst isSelected = selected === index;\n\t\t\treturn item.getButton(\n\t\t\t\t{\n\t\t\t\t\t_ariaControls: `${this.id}-panel-${index}`,\n\t\t\t\t\t_ariaSelected: isSelected,\n\t\t\t\t\t_customClass: isSelected ? 'selected' : '',\n\t\t\t\t\t_disabled: tab._disabled,\n\t\t\t\t\t_hideLabel: tab._hideLabel,\n\t\t\t\t\t_icons: tab._icons,\n\t\t\t\t\t_id: `${this.id}-tab-${index}`,\n\t\t\t\t\t_label: tab._label, // TODO: ariaLabel-Konzept prüfen\n\t\t\t\t\t_on: this.tabButtonCallbacks as ButtonCallbacksPropType<StencilUnknown>,\n\t\t\t\t\t_role: 'tab',\n\t\t\t\t\t_tabIndex: isSelected ? 0 : -1,\n\t\t\t\t\t_tooltipAlign: tab._tooltipAlign,\n\t\t\t\t\t_value: index,\n\t\t\t\t\t_variant: isSelected ? 'custom' : undefined,\n\t\t\t\t},\n\t\t\t\tthis.host,\n\t\t\t);\n\t\t});\n\n\t\tthis.createButton = this.createButtonItem.getButton(\n\t\t\t{\n\t\t\t\t_icons: 'kolicon-plus',\n\t\t\t\t_label: this.onCreateLabel,\n\t\t\t\t_on: { onClick: this.onCreate },\n\t\t\t},\n\t\t\tthis.host,\n\t\t);\n\t}\n\n\tpublic render(): JSX.Element {\n\t\treturn (\n\t\t\t<Host>\n\t\t\t\t<TabsFC\n\t\t\t\t\talign={this.getRenderProp('align')}\n\t\t\t\t\tbehavior={this.getRenderProp('behavior')}\n\t\t\t\t\tcreateButton={this.createButton}\n\t\t\t\t\thandleBlur={this.handleBlur}\n\t\t\t\t\thandleKeyDown={this.handleKeyDown}\n\t\t\t\t\thasCreateButton={this.getRenderProp('hasCreateButton')}\n\t\t\t\t\tlabel={this.getRenderProp('label')}\n\t\t\t\t\ton={this.getRenderProp('on')}\n\t\t\t\t\trefContent={this.setContentRef}\n\t\t\t\t\trefRoot={this.setRootRef}\n\t\t\t\t\tselected={this.getRenderProp('selected')}\n\t\t\t\t\ttabButtons={this.tabButtons}\n\t\t\t\t\ttabs={this.getRenderProp('tabs')}\n\t\t\t\t/>\n\t\t\t</Host>\n\t\t);\n\t}\n\n\t// --- Resolved per render pass (see `resolveButtons`) ---\n\n\t/**\n\t * Deliberately not `@State`: both are derived from props in `componentWillRender`, so a prop\n\t * change already schedules the render that refreshes them.\n\t */\n\tpublic createButton!: TabsButton;\n\tpublic tabButtons: TabsButton[] = [];\n\n\t// --- Props + Watchers ---\n\n\t/**\n\t * Defines the visual orientation of the component.\n\t */\n\t@Prop() public _align?: AlignPropType = 'top';\n\t@Watch('_align')\n\tpublic watchAlign(value?: AlignPropType): void {\n\t\talignProp.apply(value, (v) => this.setRenderProp('align', v));\n\t}\n\n\t/**\n\t * Defines which behavior is active.\n\t */\n\t@Prop() public _behavior?: TabBehaviorPropType;\n\t@Watch('_behavior')\n\tpublic watchBehavior(value?: TabBehaviorPropType): void {\n\t\ttabBehaviorProp.apply(value, (v) => this.setRenderProp('behavior', v));\n\t}\n\n\t/**\n\t * Defines whether the element has a create button.\n\t */\n\t@Prop() public _hasCreateButton?: HasCreateButtonPropType = false;\n\t@Watch('_hasCreateButton')\n\tpublic watchHasCreateButton(value?: HasCreateButtonPropType): void {\n\t\thasCreateButtonProp.apply(value, (v) => this.setRenderProp('hasCreateButton', v));\n\t}\n\n\t/**\n\t * Defines the visible or semantic label of the component (e.g. aria-label, label, headline, caption, summary, etc.).\n\t */\n\t@Prop() public _label!: LabelPropType;\n\t@Watch('_label')\n\tpublic watchLabel(value?: LabelPropType): void {\n\t\tlabelWithExpertSlotProp.apply(value, (v) => this.setRenderProp('label', v));\n\t}\n\n\t/**\n\t * Defines the callback functions for tabs events.\n\t */\n\t@Prop() public _on?: KoliBriTabsCallbacks;\n\t@Watch('_on')\n\tpublic watchOn(value?: KoliBriTabsCallbacks): void {\n\t\ttabsCallbacksProp.apply(value, (v) => this.setRenderProp('on', v));\n\t}\n\n\t/**\n\t * Defines which tab is active.\n\t */\n\t@Prop({ mutable: true, reflect: true }) public _selected?: number = 0;\n\t@Watch('_selected')\n\tpublic watchSelected(value?: number): void {\n\t\tthis.applySelected(value);\n\t}\n\n\t/**\n\t * Defines the tab captions.\n\t */\n\t@Prop() public _tabs!: Stringified<TabButtonProps[]>;\n\t@Watch('_tabs')\n\tpublic watchTabs(value?: Stringified<TabButtonProps[]>): void {\n\t\tthis.applyTabs(value);\n\t}\n\n\tprivate applySelected(value?: number): void {\n\t\tselectedProp.apply(value, (v) => {\n\t\t\tthis.setRenderProp('selected', v);\n\t\t\tthis.syncSelected();\n\t\t});\n\t}\n\n\tprivate applyTabs(value?: Stringified<TabButtonProps[]>): void {\n\t\ttabsProp.apply(value, (tabs) => {\n\t\t\tthis.setRenderProp('tabs', tabs);\n\t\t\tthis.tabButtonItems.forEach((item) => item.destroy());\n\t\t\tthis.tabButtonItems = tabs.map(() => createTabsButtonItem());\n\t\t\tthis.syncSelected();\n\t\t});\n\t}\n}\n"],"version":3}