@duetds/components 4.34.1 → 4.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/hydrate/index.js +373 -25
  2. package/lib/cjs/duet-alert.cjs.entry.js +1 -1
  3. package/lib/cjs/duet-badge.cjs.entry.js +2 -2
  4. package/lib/cjs/duet-breadcrumb.cjs.entry.js +48 -0
  5. package/lib/cjs/duet-breadcrumbs.cjs.entry.js +68 -0
  6. package/lib/cjs/duet-button_2.cjs.entry.js +4 -3
  7. package/lib/cjs/duet-caption_4.cjs.entry.js +2 -2
  8. package/lib/cjs/duet-card.cjs.entry.js +1 -1
  9. package/lib/cjs/duet-checkbox.cjs.entry.js +1 -1
  10. package/lib/cjs/duet-choice_2.cjs.entry.js +2 -2
  11. package/lib/cjs/duet-collapsible.cjs.entry.js +1 -1
  12. package/lib/cjs/duet-cookie-consent.cjs.entry.js +1 -1
  13. package/lib/cjs/duet-date-picker.cjs.entry.js +2 -2
  14. package/lib/cjs/duet-divider_2.cjs.entry.js +1 -1
  15. package/lib/cjs/duet-editable-table-button.cjs.entry.js +1 -1
  16. package/lib/cjs/duet-editable-table_4.cjs.entry.js +10 -1
  17. package/lib/cjs/duet-empty-state.cjs.entry.js +1 -1
  18. package/lib/cjs/duet-fieldset.cjs.entry.js +1 -1
  19. package/lib/cjs/duet-footer.cjs.entry.js +2 -2
  20. package/lib/cjs/duet-grid_2.cjs.entry.js +1 -1
  21. package/lib/cjs/duet-header_2.cjs.entry.js +2 -2
  22. package/lib/cjs/duet-hero.cjs.entry.js +1 -1
  23. package/lib/cjs/duet-icon.cjs.entry.js +1 -1
  24. package/lib/cjs/duet-input_2.cjs.entry.js +1 -1
  25. package/lib/cjs/duet-layout.cjs.entry.js +1 -1
  26. package/lib/cjs/duet-list_2.cjs.entry.js +1 -1
  27. package/lib/cjs/duet-modal.cjs.entry.js +15 -3
  28. package/lib/cjs/duet-notification_2.cjs.entry.js +1 -1
  29. package/lib/cjs/duet-number-input.cjs.entry.js +1 -1
  30. package/lib/cjs/duet-progress.cjs.entry.js +1 -1
  31. package/lib/cjs/duet-radio_2.cjs.entry.js +1 -1
  32. package/lib/cjs/duet-range-slider.cjs.entry.js +1 -1
  33. package/lib/cjs/duet-scrollable_3.cjs.entry.js +406 -0
  34. package/lib/cjs/duet-select.cjs.entry.js +1 -1
  35. package/lib/cjs/duet-step_2.cjs.entry.js +1 -1
  36. package/lib/cjs/duet-textarea.cjs.entry.js +1 -1
  37. package/lib/cjs/duet-toggle.cjs.entry.js +1 -1
  38. package/lib/cjs/duet-tooltip.cjs.entry.js +1 -1
  39. package/lib/cjs/duet-tray.cjs.entry.js +1 -1
  40. package/lib/cjs/duet-upload-aria-status.cjs.entry.js +1 -1
  41. package/lib/cjs/duet-visually-hidden.cjs.entry.js +1 -1
  42. package/lib/cjs/duet.cjs.js +2 -2
  43. package/lib/cjs/{focus-utils-30f5dc06.js → focus-utils-adf0830f.js} +1 -1
  44. package/lib/cjs/{index-1c10bbfb.js → index-ebc216a6.js} +1 -1
  45. package/lib/cjs/loader.cjs.js +2 -2
  46. package/lib/collection/collection-manifest.json +10 -6
  47. package/lib/collection/components/duet-badge/duet-badge.js +1 -1
  48. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumb.css +57 -0
  49. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumb.js +131 -0
  50. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumbs.css +63 -0
  51. package/lib/collection/components/duet-breadcrumbs/duet-breadcrumbs.js +104 -0
  52. package/lib/collection/components/duet-button/duet-button.css +22 -4
  53. package/lib/collection/components/duet-button/duet-button.js +6 -2
  54. package/lib/collection/components/duet-footer/duet-footer.css +2 -1
  55. package/lib/collection/components/duet-header/duet-header.css +3 -9
  56. package/lib/collection/components/duet-link/duet-link.js +1 -1
  57. package/lib/collection/components/duet-modal/duet-modal.js +33 -3
  58. package/lib/collection/components/duet-scrollable/duet-scrollable.css +83 -0
  59. package/lib/collection/components/duet-scrollable/duet-scrollable.js +218 -0
  60. package/lib/collection/components/duet-tab/duet-tab.js +63 -1
  61. package/lib/collection/components/duet-tab-group/duet-tab-group.css +2 -3
  62. package/lib/collection/components/duet-tab-group/duet-tab-group.js +79 -16
  63. package/lib/collection/components/duet-upload/duet-upload.js +25 -0
  64. package/lib/custom-elements-bundle/index.d.ts +18 -0
  65. package/lib/custom-elements-bundle/index.js +348 -29
  66. package/lib/duet/duet.esm.js +1 -1
  67. package/lib/duet/duet.js +1 -1
  68. package/lib/duet/{p-571015b8.system.entry.js → p-00d1f654.system.entry.js} +1 -1
  69. package/lib/duet/{p-6dc026cf.system.entry.js → p-04e69095.system.entry.js} +1 -1
  70. package/lib/duet/{p-3e9fe1c7.system.entry.js → p-085226d4.system.entry.js} +1 -1
  71. package/lib/duet/{p-fe3806e2.system.entry.js → p-087794ce.system.entry.js} +1 -1
  72. package/lib/duet/{p-c85583d4.system.entry.js → p-0af5a8c0.system.entry.js} +1 -1
  73. package/lib/duet/{p-8fcaeb1b.entry.js → p-0c2f5442.entry.js} +1 -1
  74. package/lib/duet/{p-1a4204b7.entry.js → p-0e638e4d.entry.js} +1 -1
  75. package/lib/duet/{p-fd009368.entry.js → p-0ed5a97c.entry.js} +1 -1
  76. package/lib/duet/{p-9dad09a8.entry.js → p-0fa24ad5.entry.js} +1 -1
  77. package/lib/duet/p-10632ef8.entry.js +4 -0
  78. package/lib/duet/{p-6b1b2655.entry.js → p-14e42cd6.entry.js} +1 -1
  79. package/lib/duet/{p-f1dbb4ec.entry.js → p-17572919.entry.js} +1 -1
  80. package/lib/duet/{p-5d2ddf99.entry.js → p-1a30dc8e.entry.js} +1 -1
  81. package/lib/duet/{p-b1401fd8.system.entry.js → p-1bed3ddf.system.entry.js} +1 -1
  82. package/lib/duet/{p-8e478364.system.entry.js → p-1f736745.system.entry.js} +1 -1
  83. package/lib/duet/{p-39cd816e.entry.js → p-21faf286.entry.js} +1 -1
  84. package/lib/duet/{p-99cd16d8.system.entry.js → p-24481f5b.system.entry.js} +1 -1
  85. package/lib/duet/p-29dc9ba4.system.js +4 -0
  86. package/lib/duet/p-2a674d85.entry.js +4 -0
  87. package/lib/duet/p-2b3d4a87.entry.js +4 -0
  88. package/lib/duet/{p-ffcfbd7a.system.entry.js → p-3076d759.system.entry.js} +1 -1
  89. package/lib/duet/{p-e10f1828.entry.js → p-36a2d533.entry.js} +1 -1
  90. package/lib/duet/{p-8adcc2f9.system.entry.js → p-3b9a85ec.system.entry.js} +1 -1
  91. package/lib/duet/{p-ca68c8f0.entry.js → p-3cb4e5c0.entry.js} +1 -1
  92. package/lib/duet/p-3ccaf840.system.entry.js +4 -0
  93. package/lib/duet/{p-a4c0ce83.system.entry.js → p-407b0a9e.system.entry.js} +1 -1
  94. package/lib/duet/{p-580c57ea.entry.js → p-48cc1039.entry.js} +1 -1
  95. package/lib/duet/{p-af7685aa.system.entry.js → p-49f82fb6.system.entry.js} +1 -1
  96. package/lib/duet/{p-f55ea1cc.system.entry.js → p-50aa0600.system.entry.js} +1 -1
  97. package/lib/duet/{p-c04ca724.system.entry.js → p-59da6977.system.entry.js} +1 -1
  98. package/lib/duet/{p-fe1a2f0d.system.entry.js → p-5e1b47ae.system.entry.js} +1 -1
  99. package/lib/duet/p-5fe48b92.js +4 -0
  100. package/lib/duet/p-62ecba0c.entry.js +4 -0
  101. package/lib/duet/{p-97dc72c2.system.entry.js → p-6450fb96.system.entry.js} +1 -1
  102. package/lib/duet/{p-4b400f7d.system.entry.js → p-674df722.system.entry.js} +1 -1
  103. package/lib/duet/{p-80d40375.entry.js → p-684eca44.entry.js} +1 -1
  104. package/lib/duet/{p-cecdebf3.entry.js → p-6c7d2e78.entry.js} +1 -1
  105. package/lib/duet/{p-c0472744.system.entry.js → p-73ee8a98.system.entry.js} +1 -1
  106. package/lib/duet/{p-4b480fdc.entry.js → p-743a76fb.entry.js} +1 -1
  107. package/lib/duet/p-7471bf49.system.entry.js +4 -0
  108. package/lib/duet/{p-1d8d319c.system.entry.js → p-74f7726a.system.entry.js} +1 -1
  109. package/lib/duet/{p-1164a119.system.entry.js → p-777ea91c.system.entry.js} +1 -1
  110. package/lib/duet/{p-df37c5cd.entry.js → p-7983ec01.entry.js} +1 -1
  111. package/lib/duet/{p-dc27e127.system.entry.js → p-7c42729a.system.entry.js} +1 -1
  112. package/lib/duet/p-7e87870b.js +4 -0
  113. package/lib/duet/{p-2c89e016.system.entry.js → p-81d33c0d.system.entry.js} +1 -1
  114. package/lib/duet/{p-ca2b3f6a.system.entry.js → p-868cf1d0.system.entry.js} +1 -1
  115. package/lib/duet/{p-420c000b.entry.js → p-86cdd6ae.entry.js} +1 -1
  116. package/lib/duet/{p-95edfcb8.system.entry.js → p-8825b949.system.entry.js} +1 -1
  117. package/lib/duet/{p-a0129887.system.entry.js → p-8b046f32.system.entry.js} +1 -1
  118. package/lib/duet/{p-5cf1d847.entry.js → p-8d49cfce.entry.js} +1 -1
  119. package/lib/duet/{p-2b1707bd.system.entry.js → p-8d4c1df6.system.entry.js} +1 -1
  120. package/lib/duet/{p-e5120c30.entry.js → p-8dd65109.entry.js} +1 -1
  121. package/lib/duet/{p-5db0676e.system.entry.js → p-9628f617.system.entry.js} +1 -1
  122. package/lib/duet/p-98f7ed54.system.entry.js +4 -0
  123. package/lib/duet/{p-aa5ba0fd.entry.js → p-99ab3ae7.entry.js} +1 -1
  124. package/lib/duet/{p-15945ba7.system.entry.js → p-99dd842a.system.entry.js} +1 -1
  125. package/lib/duet/{p-8ad673ef.entry.js → p-9bdd6e13.entry.js} +1 -1
  126. package/lib/duet/{p-08498e46.entry.js → p-a69cec5c.entry.js} +1 -1
  127. package/lib/duet/{p-545dcb04.entry.js → p-ac3066a5.entry.js} +1 -1
  128. package/lib/duet/p-b252dd83.system.entry.js +4 -0
  129. package/lib/duet/{p-477c6c71.entry.js → p-b6914af6.entry.js} +1 -1
  130. package/lib/duet/{p-f7700f25.entry.js → p-b7e51d7d.entry.js} +1 -1
  131. package/lib/duet/{p-a9dc4dd9.system.entry.js → p-bae4038e.system.entry.js} +1 -1
  132. package/lib/duet/{p-30f15c84.system.entry.js → p-c14a82ed.system.entry.js} +1 -1
  133. package/lib/duet/{p-d1d6dc7a.entry.js → p-c16492e3.entry.js} +1 -1
  134. package/lib/duet/p-c4ccaaa2.system.js +4 -0
  135. package/lib/duet/{p-b71cbe4b.entry.js → p-cb35d64f.entry.js} +1 -1
  136. package/lib/duet/{p-87703af9.entry.js → p-cd2f9010.entry.js} +1 -1
  137. package/lib/duet/{p-6bb9a991.entry.js → p-d2d9c6ac.entry.js} +1 -1
  138. package/lib/duet/{p-b061516e.system.entry.js → p-d8189d01.system.entry.js} +1 -1
  139. package/lib/duet/{p-309f9094.entry.js → p-dd26cd81.entry.js} +1 -1
  140. package/lib/duet/{p-603a61dc.system.entry.js → p-de7025f9.system.entry.js} +1 -1
  141. package/lib/duet/p-e095b87c.entry.js +4 -0
  142. package/lib/duet/{p-13f72df0.entry.js → p-e510911a.entry.js} +1 -1
  143. package/lib/duet/{p-1842a4db.system.entry.js → p-e585efe8.system.entry.js} +1 -1
  144. package/lib/duet/p-e841a4f2.system.entry.js +4 -0
  145. package/lib/duet/{p-0bb75f62.system.entry.js → p-ed346e6c.system.entry.js} +1 -1
  146. package/lib/duet/{p-3d47d6d4.entry.js → p-edcc923f.entry.js} +1 -1
  147. package/lib/duet/{p-f1c7f166.system.entry.js → p-f485fdc9.system.entry.js} +1 -1
  148. package/lib/duet/{p-71261eb7.entry.js → p-f4d70bbf.entry.js} +1 -1
  149. package/lib/duet/p-fa082925.entry.js +4 -0
  150. package/lib/duet/{p-41938e76.system.js → p-fb116ef7.system.js} +1 -1
  151. package/lib/duet/{p-9db71699.entry.js → p-fb142d09.entry.js} +1 -1
  152. package/lib/duet/{p-93a51797.entry.js → p-fbef000c.entry.js} +1 -1
  153. package/lib/esm/duet-alert.entry.js +1 -1
  154. package/lib/esm/duet-badge.entry.js +2 -2
  155. package/lib/esm/duet-breadcrumb.entry.js +44 -0
  156. package/lib/esm/duet-breadcrumbs.entry.js +64 -0
  157. package/lib/esm/duet-button_2.entry.js +4 -3
  158. package/lib/esm/duet-caption_4.entry.js +2 -2
  159. package/lib/esm/duet-card.entry.js +1 -1
  160. package/lib/esm/duet-checkbox.entry.js +1 -1
  161. package/lib/esm/duet-choice_2.entry.js +2 -2
  162. package/lib/esm/duet-collapsible.entry.js +1 -1
  163. package/lib/esm/duet-cookie-consent.entry.js +1 -1
  164. package/lib/esm/duet-date-picker.entry.js +2 -2
  165. package/lib/esm/duet-divider_2.entry.js +1 -1
  166. package/lib/esm/duet-editable-table-button.entry.js +1 -1
  167. package/lib/esm/duet-editable-table_4.entry.js +10 -1
  168. package/lib/esm/duet-empty-state.entry.js +1 -1
  169. package/lib/esm/duet-fieldset.entry.js +1 -1
  170. package/lib/esm/duet-footer.entry.js +2 -2
  171. package/lib/esm/duet-grid_2.entry.js +1 -1
  172. package/lib/esm/duet-header_2.entry.js +2 -2
  173. package/lib/esm/duet-hero.entry.js +1 -1
  174. package/lib/esm/duet-icon.entry.js +1 -1
  175. package/lib/esm/duet-input_2.entry.js +1 -1
  176. package/lib/esm/duet-layout.entry.js +1 -1
  177. package/lib/esm/duet-list_2.entry.js +1 -1
  178. package/lib/esm/duet-modal.entry.js +15 -3
  179. package/lib/esm/duet-notification_2.entry.js +1 -1
  180. package/lib/esm/duet-number-input.entry.js +1 -1
  181. package/lib/esm/duet-progress.entry.js +1 -1
  182. package/lib/esm/duet-radio_2.entry.js +1 -1
  183. package/lib/esm/duet-range-slider.entry.js +1 -1
  184. package/lib/esm/duet-scrollable_3.entry.js +400 -0
  185. package/lib/esm/duet-select.entry.js +1 -1
  186. package/lib/esm/duet-step_2.entry.js +1 -1
  187. package/lib/esm/duet-textarea.entry.js +1 -1
  188. package/lib/esm/duet-toggle.entry.js +1 -1
  189. package/lib/esm/duet-tooltip.entry.js +1 -1
  190. package/lib/esm/duet-tray.entry.js +1 -1
  191. package/lib/esm/duet-upload-aria-status.entry.js +1 -1
  192. package/lib/esm/duet-visually-hidden.entry.js +1 -1
  193. package/lib/esm/duet.js +2 -2
  194. package/lib/esm/{focus-utils-bf7d1e80.js → focus-utils-6ed104b0.js} +1 -1
  195. package/lib/esm/{index-f813a624.js → index-b7694cc6.js} +1 -1
  196. package/lib/esm/loader.js +2 -2
  197. package/lib/esm-es5/duet-alert.entry.js +1 -1
  198. package/lib/esm-es5/duet-badge.entry.js +1 -1
  199. package/lib/esm-es5/duet-breadcrumb.entry.js +4 -0
  200. package/lib/esm-es5/duet-breadcrumbs.entry.js +4 -0
  201. package/lib/esm-es5/duet-button_2.entry.js +1 -1
  202. package/lib/esm-es5/duet-caption_4.entry.js +1 -1
  203. package/lib/esm-es5/duet-card.entry.js +1 -1
  204. package/lib/esm-es5/duet-checkbox.entry.js +1 -1
  205. package/lib/esm-es5/duet-choice_2.entry.js +1 -1
  206. package/lib/esm-es5/duet-collapsible.entry.js +1 -1
  207. package/lib/esm-es5/duet-cookie-consent.entry.js +1 -1
  208. package/lib/esm-es5/duet-date-picker.entry.js +1 -1
  209. package/lib/esm-es5/duet-divider_2.entry.js +1 -1
  210. package/lib/esm-es5/duet-editable-table-button.entry.js +1 -1
  211. package/lib/esm-es5/duet-editable-table_4.entry.js +1 -1
  212. package/lib/esm-es5/duet-empty-state.entry.js +1 -1
  213. package/lib/esm-es5/duet-fieldset.entry.js +1 -1
  214. package/lib/esm-es5/duet-footer.entry.js +1 -1
  215. package/lib/esm-es5/duet-grid_2.entry.js +1 -1
  216. package/lib/esm-es5/duet-header_2.entry.js +1 -1
  217. package/lib/esm-es5/duet-hero.entry.js +1 -1
  218. package/lib/esm-es5/duet-icon.entry.js +1 -1
  219. package/lib/esm-es5/duet-input_2.entry.js +1 -1
  220. package/lib/esm-es5/duet-layout.entry.js +1 -1
  221. package/lib/esm-es5/duet-list_2.entry.js +1 -1
  222. package/lib/esm-es5/duet-modal.entry.js +1 -1
  223. package/lib/esm-es5/duet-notification_2.entry.js +1 -1
  224. package/lib/esm-es5/duet-number-input.entry.js +1 -1
  225. package/lib/esm-es5/duet-progress.entry.js +1 -1
  226. package/lib/esm-es5/duet-radio_2.entry.js +1 -1
  227. package/lib/esm-es5/duet-range-slider.entry.js +1 -1
  228. package/lib/esm-es5/duet-scrollable_3.entry.js +4 -0
  229. package/lib/esm-es5/duet-select.entry.js +1 -1
  230. package/lib/esm-es5/duet-step_2.entry.js +1 -1
  231. package/lib/esm-es5/duet-textarea.entry.js +1 -1
  232. package/lib/esm-es5/duet-toggle.entry.js +1 -1
  233. package/lib/esm-es5/duet-tooltip.entry.js +1 -1
  234. package/lib/esm-es5/duet-tray.entry.js +1 -1
  235. package/lib/esm-es5/duet-upload-aria-status.entry.js +1 -1
  236. package/lib/esm-es5/duet-visually-hidden.entry.js +1 -1
  237. package/lib/esm-es5/duet.js +1 -1
  238. package/lib/esm-es5/{focus-utils-bf7d1e80.js → focus-utils-6ed104b0.js} +1 -1
  239. package/lib/esm-es5/index-b7694cc6.js +4 -0
  240. package/lib/esm-es5/loader.js +1 -1
  241. package/lib/html.html-data.json +128 -5
  242. package/lib/types/components/duet-badge/duet-badge.d.ts +1 -1
  243. package/lib/types/components/duet-breadcrumbs/duet-breadcrumb.d.ts +31 -0
  244. package/lib/types/components/duet-breadcrumbs/duet-breadcrumbs.d.ts +23 -0
  245. package/lib/types/components/duet-button/duet-button.d.ts +2 -1
  246. package/lib/types/components/duet-modal/duet-modal.d.ts +5 -1
  247. package/lib/types/components/duet-scrollable/duet-scrollable.d.ts +47 -0
  248. package/lib/types/components/duet-tab/duet-tab.d.ts +11 -0
  249. package/lib/types/components/duet-tab-group/duet-tab-group.d.ts +11 -0
  250. package/lib/types/components/duet-upload/duet-upload.d.ts +6 -0
  251. package/lib/types/components.d.ts +146 -1
  252. package/package.json +6 -5
  253. package/lib/cjs/duet-tab_2.cjs.entry.js +0 -213
  254. package/lib/duet/p-0d546cd6.system.entry.js +0 -4
  255. package/lib/duet/p-3ff50cee.entry.js +0 -4
  256. package/lib/duet/p-478d2995.entry.js +0 -4
  257. package/lib/duet/p-71a94fb9.system.entry.js +0 -4
  258. package/lib/duet/p-76b98e4d.system.js +0 -4
  259. package/lib/duet/p-80f90fef.js +0 -4
  260. package/lib/duet/p-9c3b48fc.entry.js +0 -4
  261. package/lib/duet/p-c33d1202.js +0 -4
  262. package/lib/duet/p-d9a93e45.entry.js +0 -4
  263. package/lib/duet/p-e54705b2.system.js +0 -4
  264. package/lib/duet/p-f3cd9499.system.entry.js +0 -4
  265. package/lib/esm/duet-tab_2.entry.js +0 -208
  266. package/lib/esm-es5/duet-tab_2.entry.js +0 -4
  267. package/lib/esm-es5/index-f813a624.js +0 -4
@@ -0,0 +1,63 @@
1
+ *,
2
+ *::after,
3
+ *::before {
4
+ box-sizing: border-box;
5
+ padding: 0;
6
+ margin: 0;
7
+ background: transparent;
8
+ border: 0;
9
+ -moz-appearance: none;
10
+ -webkit-appearance: none;
11
+ appearance: none;
12
+ }
13
+
14
+ :host {
15
+ box-sizing: border-box;
16
+ padding: 0;
17
+ margin: 0;
18
+ background: transparent;
19
+ border: 0;
20
+ -moz-appearance: none;
21
+ -webkit-appearance: none;
22
+ appearance: none;
23
+ display: block;
24
+ }
25
+
26
+ .duet-breadcrumbs {
27
+ font-family: "localtapiola-sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
28
+ }
29
+ .duet-breadcrumbs ol {
30
+ display: flex;
31
+ flex-direction: row;
32
+ flex-wrap: wrap;
33
+ gap: 8px;
34
+ align-items: center;
35
+ justify-content: flex-start;
36
+ padding: 10px 16px;
37
+ color: #00294d;
38
+ list-style: none;
39
+ background: #f3f9fc;
40
+ border-bottom: 1px solid #e1e3e6;
41
+ }
42
+ @media (min-width: 62em) {
43
+ .duet-breadcrumbs ol {
44
+ padding: 10px 36px;
45
+ }
46
+ }
47
+ .duet-breadcrumbs.duet-theme-turva {
48
+ font-family: "turva-sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
49
+ }
50
+ .duet-breadcrumbs.duet-theme-turva ol {
51
+ color: #171c3a;
52
+ background: #fcf3f4;
53
+ }
54
+ .duet-breadcrumbs .duet-breadrumbs-arrow {
55
+ display: inherit;
56
+ align-items: center;
57
+ justify-content: center;
58
+ width: 0.375rem;
59
+ height: 0.375rem;
60
+ }
61
+ .duet-breadcrumbs .hide {
62
+ display: none;
63
+ }
@@ -0,0 +1,104 @@
1
+ /*!
2
+ * Built with Duet Design System
3
+ */
4
+ import arrowRightSmallIcon from "@duetds/icons/lib/assets/action-arrow-right-small";
5
+ import { Build, Component, Element, Fragment, h, Host, Prop, State } from "@stencil/core";
6
+ import { getLocaleString } from "../../utils/language-utils";
7
+ import { inheritGlobalTheme } from "../../utils/themeable-component";
8
+ export class DuetBreadcrumbs {
9
+ constructor() {
10
+ this.observers = [];
11
+ this.breadcrumbsAriaLabel = getLocaleString({
12
+ fi: "Murupolku",
13
+ sv: "Ströbröd",
14
+ en: "Breadcrumbs",
15
+ });
16
+ /**
17
+ * Theme
18
+ */
19
+ this.theme = "";
20
+ }
21
+ /**
22
+ * Component lifecycle events.
23
+ */
24
+ componentWillLoad() {
25
+ inheritGlobalTheme(this);
26
+ this.children = Array.from(this.element.children);
27
+ }
28
+ connectedCallback() {
29
+ if (Build.isServer) {
30
+ return;
31
+ }
32
+ Array.from(this.element.children).forEach(child => {
33
+ const observer = new MutationObserver(() => (this.children = Array.from(this.element.children)));
34
+ observer.observe(child, {
35
+ childList: true,
36
+ subtree: true,
37
+ attributes: true,
38
+ characterData: true,
39
+ });
40
+ this.observers = [...this.observers, observer];
41
+ });
42
+ }
43
+ disconnectedCallback() {
44
+ if (Build.isServer) {
45
+ return;
46
+ }
47
+ this.observers.forEach(observer => observer.disconnect());
48
+ this.observers = [];
49
+ }
50
+ /**
51
+ * render() function
52
+ * Always the last one in the class.
53
+ */
54
+ render() {
55
+ return (h(Host, null,
56
+ h("nav", { "aria-label": this.breadcrumbsAriaLabel, class: {
57
+ "duet-breadcrumbs": true,
58
+ "duet-theme-turva": this.theme === "turva",
59
+ } },
60
+ h("ol", null, this.children.map((child, index) => (h(Fragment, null,
61
+ index > 0 && (h("li", { "aria-hidden": "true" },
62
+ h("duet-icon", { class: "duet-breadrumbs-arrow", size: "auto", icon: arrowRightSmallIcon.svg, margin: "none", color: "currentColor" }))),
63
+ h("li", { innerHTML: child.outerHTML }),
64
+ h("div", { class: "hide" },
65
+ h("slot", null)))))))));
66
+ }
67
+ static get is() { return "duet-breadcrumbs"; }
68
+ static get encapsulation() { return "shadow"; }
69
+ static get originalStyleUrls() { return {
70
+ "$": ["duet-breadcrumbs.scss"]
71
+ }; }
72
+ static get styleUrls() { return {
73
+ "$": ["duet-breadcrumbs.css"]
74
+ }; }
75
+ static get properties() { return {
76
+ "theme": {
77
+ "type": "string",
78
+ "mutable": true,
79
+ "complexType": {
80
+ "original": "DuetTheme",
81
+ "resolved": "\"\" | \"default\" | \"turva\"",
82
+ "references": {
83
+ "DuetTheme": {
84
+ "location": "import",
85
+ "path": "../../common-types"
86
+ }
87
+ }
88
+ },
89
+ "required": false,
90
+ "optional": false,
91
+ "docs": {
92
+ "tags": [],
93
+ "text": "Theme"
94
+ },
95
+ "attribute": "theme",
96
+ "reflect": false,
97
+ "defaultValue": "\"\""
98
+ }
99
+ }; }
100
+ static get states() { return {
101
+ "children": {}
102
+ }; }
103
+ static get elementRef() { return "element"; }
104
+ }
@@ -318,22 +318,40 @@
318
318
  .duet-theme-turva .duet-button.negative:focus {
319
319
  box-shadow: 0 0 0 1px #171c3a, 0 0 0 4px rgba(255, 255, 255, 0.7);
320
320
  }
321
- .duet-button.destructive {
321
+ .duet-button.destructive-primary {
322
+ color: white !important;
323
+ background: #de2362;
324
+ border-color: #de2362;
325
+ }
326
+ .duet-theme-turva .duet-button.destructive-primary {
327
+ color: white !important;
328
+ background: #e02a0d;
329
+ border-color: #e02a0d;
330
+ }
331
+ .duet-button.destructive-primary:hover {
332
+ background: #b21c4e;
333
+ border-color: #b21c4e;
334
+ box-shadow: 0 4px 20px rgba(34, 34, 34, 0.1);
335
+ }
336
+ .duet-theme-turva .duet-button.destructive-primary:hover {
337
+ background: #b3220a;
338
+ }
339
+ .duet-button.destructive, .duet-button.destructive-secondary {
322
340
  color: #de2362 !important;
323
341
  background: white;
324
342
  border-color: #de2362;
325
343
  }
326
- .duet-theme-turva .duet-button.destructive {
344
+ .duet-theme-turva .duet-button.destructive, .duet-theme-turva .duet-button.destructive-secondary {
327
345
  color: #e02a0d !important;
328
346
  background: white;
329
347
  border-color: #e02a0d;
330
348
  }
331
- .duet-button.destructive:hover {
349
+ .duet-button.destructive:hover, .duet-button.destructive-secondary:hover {
332
350
  color: white !important;
333
351
  background: #b21c4e;
334
352
  border-color: #b21c4e;
335
353
  }
336
- .duet-theme-turva .duet-button.destructive:hover {
354
+ .duet-theme-turva .duet-button.destructive:hover, .duet-theme-turva .duet-button.destructive-secondary:hover {
337
355
  color: white !important;
338
356
  background: #b3220a;
339
357
  border-color: #b3220a;
@@ -15,6 +15,7 @@ export class DuetButton {
15
15
  /**
16
16
  * Style variation of the button.
17
17
  * @negative - value is deprecated and should be used in combination with negative prop in the future
18
+ * @destructive - value is deprecated and should be replace with destructive-secondary
18
19
  */
19
20
  this.variation = "default";
20
21
  /**
@@ -227,7 +228,7 @@ export class DuetButton {
227
228
  "duet-button-negative": this.negative || this.variation === "negative",
228
229
  [this.variation]: true,
229
230
  } },
230
- this.url ? (h("a", Object.assign({}, commonProps, { href: this.url, target: this.external ? "_blank" : "_self" }),
231
+ this.url ? (h("a", Object.assign({}, commonProps, { href: this.url, target: this.external ? "_blank" : "_self", rel: this.external ? "noopener" : undefined }),
231
232
  commonChildren,
232
233
  this.external && h("duet-visually-hidden", null,
233
234
  ", ",
@@ -385,7 +386,7 @@ export class DuetButton {
385
386
  "mutable": false,
386
387
  "complexType": {
387
388
  "original": "DuetButtonVariation",
388
- "resolved": "\"default\" | \"destructive\" | \"negative\" | \"plain\" | \"primary\" | \"secondary\"",
389
+ "resolved": "\"default\" | \"destructive\" | \"destructive-primary\" | \"destructive-secondary\" | \"negative\" | \"plain\" | \"primary\" | \"secondary\"",
389
390
  "references": {
390
391
  "DuetButtonVariation": {
391
392
  "location": "local"
@@ -398,6 +399,9 @@ export class DuetButton {
398
399
  "tags": [{
399
400
  "name": "negative",
400
401
  "text": "- value is deprecated and should be used in combination with negative prop in the future"
402
+ }, {
403
+ "name": "destructive",
404
+ "text": "- value is deprecated and should be replace with destructive-secondary"
401
405
  }],
402
406
  "text": "Style variation of the button."
403
407
  },
@@ -248,8 +248,9 @@ a:hover .duet-footer-arrow {
248
248
  }
249
249
  }
250
250
  .duet-footer-menu a {
251
+ display: inline-block;
251
252
  text-decoration: none;
252
- white-space: nowrap;
253
+ word-break: break-all;
253
254
  }
254
255
  .duet-footer-menu a:hover, .duet-footer-menu a:focus {
255
256
  text-decoration: underline;
@@ -38,15 +38,9 @@
38
38
  }
39
39
  }
40
40
 
41
- @supports (position: -webkit-sticky) {
42
- :host(.duet-header-multi-level-desktop-variation) {
43
- top: 0;
44
- }
45
- }
46
- @supports (position: sticky) {
47
- :host(.duet-header-multi-level-desktop-variation) {
48
- top: 0;
49
- }
41
+ :host(.duet-header-multi-level-desktop-variation) {
42
+ position: static;
43
+ top: 0;
50
44
  }
51
45
 
52
46
  .duet-header-reserved-space {
@@ -64,7 +64,7 @@ export class DuetLink {
64
64
  "duet-link": true,
65
65
  "duet-link-is-external": this.external,
66
66
  "duet-theme-turva": this.theme === "turva",
67
- }, target: this.external ? "_blank" : "_self", "aria-label": this.accessibleLabel, id: this.identifier, ref: el => (this.nativeLink = el), part: "duet-link" },
67
+ }, target: this.external ? "_blank" : "_self", "aria-label": this.accessibleLabel, id: this.identifier, ref: el => (this.nativeLink = el), part: "duet-link", rel: this.external ? "noopener" : undefined },
68
68
  h("slot", null),
69
69
  Build.isBrowser && this.external && (h(Fragment, null,
70
70
  h("duet-visually-hidden", null, this.accessibleLabelExternal),
@@ -103,6 +103,10 @@ export class DuetModal {
103
103
  * Use this property when you need to have the modal dialog initially active.
104
104
  */
105
105
  this.active = false;
106
+ /**
107
+ * Use this property when you want the modal to close when clicked outside of modal.
108
+ */
109
+ this.closeOnBlur = false;
106
110
  }
107
111
  openChanged() {
108
112
  if (this.open) {
@@ -217,8 +221,16 @@ export class DuetModal {
217
221
  h("div", { class: {
218
222
  "duet-modal-inner": true,
219
223
  "duet-modal-large": this.size === "large",
220
- }, role: "document" },
221
- h("div", { class: { "duet-modal": true, [this.size]: true } },
224
+ }, role: "document", onClick: e => {
225
+ if (this.closeOnBlur) {
226
+ this.closeModal(e);
227
+ }
228
+ } },
229
+ h("div", { class: { "duet-modal": true, [this.size]: true }, onClick: e => {
230
+ if (this.closeOnBlur) {
231
+ e.stopPropagation();
232
+ }
233
+ } },
222
234
  h("duet-spacer", null),
223
235
  h("div", { class: "duet-modal-close" },
224
236
  h("duet-button", { ref: button => (this.buttonEl = button), variation: "plain", accessibleLabel: this.accessibleCloseLabel, color: closeColor, iconSize: "large", icon: "navigation-close", iconOnly: true, margin: "none", theme: this.theme, onClick: ev => this.closeModal(ev), fixed: true })),
@@ -493,6 +505,24 @@ export class DuetModal {
493
505
  "attribute": "active",
494
506
  "reflect": true,
495
507
  "defaultValue": "false"
508
+ },
509
+ "closeOnBlur": {
510
+ "type": "boolean",
511
+ "mutable": true,
512
+ "complexType": {
513
+ "original": "boolean",
514
+ "resolved": "boolean",
515
+ "references": {}
516
+ },
517
+ "required": false,
518
+ "optional": false,
519
+ "docs": {
520
+ "tags": [],
521
+ "text": "Use this property when you want the modal to close when clicked outside of modal."
522
+ },
523
+ "attribute": "close-on-blur",
524
+ "reflect": false,
525
+ "defaultValue": "false"
496
526
  }
497
527
  }; }
498
528
  static get states() { return {
@@ -536,7 +566,7 @@ export class DuetModal {
536
566
  "composed": true,
537
567
  "docs": {
538
568
  "tags": [],
539
- "text": "Emitted when the close button or esc is hit, but before the modal is closed. To prevent the modal from actually closing, use ev.detail.originalEvent.preventDefault()."
569
+ "text": "Emitted before the modal is closed. To prevent the modal from actually closing, use ev.detail.originalEvent.preventDefault()."
540
570
  },
541
571
  "complexType": {
542
572
  "original": "DuetModalCloseEvent",
@@ -0,0 +1,83 @@
1
+ *,
2
+ *::after,
3
+ *::before {
4
+ box-sizing: border-box;
5
+ padding: 0;
6
+ margin: 0;
7
+ background: transparent;
8
+ border: 0;
9
+ -moz-appearance: none;
10
+ -webkit-appearance: none;
11
+ appearance: none;
12
+ }
13
+
14
+ :host {
15
+ box-sizing: border-box;
16
+ padding: 0;
17
+ margin: 0;
18
+ background: transparent;
19
+ border: 0;
20
+ -moz-appearance: none;
21
+ -webkit-appearance: none;
22
+ appearance: none;
23
+ -webkit-tap-highlight-color: transparent;
24
+ }
25
+
26
+ :host {
27
+ position: relative !important;
28
+ }
29
+ :host .duet-scrollable-items {
30
+ display: flex;
31
+ }
32
+ :host .duet-scrollable-items .duet-scrollable-button {
33
+ position: relative;
34
+ flex: 0 0 auto;
35
+ flex-basis: 40px;
36
+ padding: 10px;
37
+ cursor: pointer;
38
+ }
39
+ :host .duet-scrollable-items .duet-scrollable-button:active {
40
+ transform: scale(0.8);
41
+ }
42
+ :host .duet-scrollable-items .duet-scrollable-button--left {
43
+ left: -12px;
44
+ }
45
+ :host .duet-scrollable-items .duet-scrollable-button--right {
46
+ right: -12px;
47
+ }
48
+ :host .duet-scrollable-items .duet-scrollable-button--occluded {
49
+ display: none;
50
+ }
51
+ :host .duet-scrollable-items .duet-scrollable-list {
52
+ display: flex;
53
+ flex-wrap: nowrap;
54
+ gap: 20px;
55
+ padding-top: 2px;
56
+ /* Make this scrollable when needed */
57
+ overflow-x: auto;
58
+ /* We don't want vertical scrolling */
59
+ overflow-y: hidden;
60
+ /* We don't want internal inline elements to wrap */
61
+ white-space: nowrap;
62
+ scroll-snap-type: x mandatory;
63
+ scroll-behavior: smooth;
64
+ /* Add margin at ends to make visual appearance better */
65
+ scroll-margin: 0 20px;
66
+ /* Make an auto-hiding scroller for the 3 people using a IE */
67
+ -ms-overflow-style: -ms-autohiding-scrollbar;
68
+ /* For WebKit implementations, provide inertia scrolling */
69
+ -webkit-overflow-scrolling: touch;
70
+ /* Remove the default scrollbar for WebKit implementations */
71
+ }
72
+ :host .duet-scrollable-items .duet-scrollable-list::-webkit-scrollbar {
73
+ display: none;
74
+ }
75
+
76
+ ::slotted(*) {
77
+ scroll-snap-align: center;
78
+ margin-left: 0;
79
+ -webkit-transition: -webkit-transform 0.2s ease-in-out;
80
+ transition: -webkit-transform 0.2s ease-in-out;
81
+ transition: transform 0.2s ease-in-out;
82
+ transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;
83
+ }
@@ -0,0 +1,218 @@
1
+ /*!
2
+ * Built with Duet Design System
3
+ */
4
+ import { Component, Element, h, Host, Prop, State, Watch } from "@stencil/core";
5
+ import { inheritGlobalTheme } from "../../utils/themeable-component";
6
+ export class DuetScrollable {
7
+ constructor() {
8
+ /**
9
+ * Private variables and constants index
10
+ */
11
+ this.currentIndex = 0;
12
+ this.tabListElement = undefined;
13
+ this.tabListClass = "duet-scrollable-list";
14
+ this.tablistAtStart = true;
15
+ this.isTabContentSmallerThanWrapper = false;
16
+ this.tablistAtEnd = false;
17
+ this.childrenData = {};
18
+ this.resizeObserver = new ResizeObserver(entries => {
19
+ var _a, _b, _c, _d;
20
+ // otherwise, something is wrong, expecting 1 element only
21
+ if ((entries === null || entries === void 0 ? void 0 : entries.length) === 1) {
22
+ const currentWidth = (_b = (_a = entries[0]) === null || _a === void 0 ? void 0 : _a.target) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect().width;
23
+ const scrollWidth = (_d = (_c = entries[0]) === null || _c === void 0 ? void 0 : _c.target) === null || _d === void 0 ? void 0 : _d.scrollWidth;
24
+ // in order to avoid state "jumping" on the boundary condition we add a few pixels to the comparison
25
+ this.isTabContentSmallerThanWrapper = scrollWidth > currentWidth + 5;
26
+ }
27
+ });
28
+ /**
29
+ * Theme of duet-tab-scrollable. When used this will override the color setting and
30
+ * use "primary" or "primary-turva" as the color depending on which theme
31
+ * is chosen.
32
+ */
33
+ this.theme = "";
34
+ /**
35
+ * Selected element
36
+ */
37
+ this.selected = 0;
38
+ }
39
+ watchPropHandler(newValue) {
40
+ this.scrollToTab(newValue, "center");
41
+ }
42
+ /**
43
+ * Component lifecycle events.
44
+ */
45
+ componentWillLoad() {
46
+ inheritGlobalTheme(this);
47
+ const slotted = this.host.children;
48
+ this.childrenData = { hasChildren: slotted && slotted.length > 0, numberOfChildren: slotted && slotted.length };
49
+ }
50
+ componentDidLoad() {
51
+ this.resizeObserver.observe(this.tabListElement);
52
+ }
53
+ disconnectedCallback() {
54
+ this.resizeObserver.disconnect();
55
+ }
56
+ /**
57
+ * Private methods.
58
+ */
59
+ getLastVisibleElement() {
60
+ const clientWidth = this.tabListElement.clientWidth;
61
+ const xValues = Array.from(this.host.querySelectorAll("button")).findIndex(element => element.getBoundingClientRect().x > clientWidth);
62
+ return xValues;
63
+ }
64
+ getFirstVisibleElement() {
65
+ const buttonCollection = this.host.querySelectorAll("button");
66
+ // reverse the array because we want the first invisible element form the middle, not the first in the list
67
+ const arrayOfXValues = Array.from(buttonCollection).map(el => el.getBoundingClientRect().x - el.getBoundingClientRect().width);
68
+ const xValues = arrayOfXValues.findIndex(element => {
69
+ return element > 0;
70
+ });
71
+ return xValues;
72
+ }
73
+ updateScrollButtons(container = this.tabListElement) {
74
+ if (container.scrollLeft <= 0) {
75
+ this.tablistAtStart = true;
76
+ }
77
+ else if (container.scrollLeft > 0) {
78
+ this.tablistAtStart = false;
79
+ }
80
+ if (container.clientWidth + container.scrollLeft + 10 >= container.scrollWidth) {
81
+ this.tablistAtEnd = true;
82
+ }
83
+ else if (container.clientWidth + container.scrollLeft + 10 < container.scrollWidth) {
84
+ this.tablistAtEnd = false;
85
+ }
86
+ }
87
+ scrollToTab(index = this.currentIndex, inline) {
88
+ if (!this.childrenData.hasChildren) {
89
+ return;
90
+ }
91
+ if (index + 1 >= this.childrenData.numberOfChildren) {
92
+ index = this.childrenData.numberOfChildren - 1;
93
+ }
94
+ if (index < 0) {
95
+ index = 0;
96
+ }
97
+ const buttons = this.host.querySelectorAll("button");
98
+ // store previous position
99
+ let prevPosition = buttons[0].getBoundingClientRect().x;
100
+ // iterations to run
101
+ let ticksWhereScrollDidNotHappen = 5;
102
+ const getAnimationFrame = () => {
103
+ // if we get the same value enter the logic loop
104
+ if (buttons[0].getBoundingClientRect().x === prevPosition) {
105
+ ticksWhereScrollDidNotHappen--;
106
+ // When iteration is not complete run the calculation again
107
+ if (ticksWhereScrollDidNotHappen !== 0) {
108
+ window.requestAnimationFrame(getAnimationFrame);
109
+ return;
110
+ }
111
+ this.updateScrollButtons();
112
+ }
113
+ else {
114
+ window.requestAnimationFrame(getAnimationFrame);
115
+ prevPosition = buttons[0].getBoundingClientRect().x;
116
+ }
117
+ };
118
+ buttons[index].scrollIntoView({ behavior: "smooth", inline });
119
+ window.requestAnimationFrame(getAnimationFrame);
120
+ }
121
+ scrollLeft() {
122
+ this.tablistAtEnd = false;
123
+ const first = this.getFirstVisibleElement() - 1;
124
+ this.scrollToTab(first, "center");
125
+ }
126
+ scrollRight() {
127
+ this.tablistAtStart = false;
128
+ const last = this.getLastVisibleElement() + 1;
129
+ this.scrollToTab(last, "center");
130
+ }
131
+ /**
132
+ * render() function
133
+ * Always the last one in the class.
134
+ */
135
+ render() {
136
+ return (h(Host, { class: {
137
+ "duet-theme-turva": this.theme === "turva",
138
+ "duet-theme-default": this.theme === "default",
139
+ } },
140
+ h("div", { class: "duet-scrollable-items" },
141
+ h("button", { "aria-hidden": "true", class: {
142
+ "duet-scrollable-button": true,
143
+ "duet-scrollable-button--left": true,
144
+ "duet-scrollable-button--occluded": !this.isTabContentSmallerThanWrapper,
145
+ }, onClick: () => this.scrollLeft(), disabled: this.tablistAtStart, tabindex: "-1" },
146
+ h("duet-icon", { name: "action-arrow-left-small", size: "small", margin: "none" })),
147
+ h("div", { class: this.tabListClass, onScroll: () => this.updateScrollButtons(), ref: element => (this.tabListElement = element) },
148
+ h("slot", null)),
149
+ h("button", { "aria-hidden": "true", class: {
150
+ "duet-scrollable-button": true,
151
+ "duet-scrollable-button--right": true,
152
+ "duet-scrollable-button--occluded": !this.isTabContentSmallerThanWrapper,
153
+ }, onClick: () => this.scrollRight(), disabled: this.tablistAtEnd, tabindex: "-1" },
154
+ h("duet-icon", { name: "action-arrow-right-small", size: "small", margin: "none" })))));
155
+ }
156
+ static get is() { return "duet-scrollable"; }
157
+ static get encapsulation() { return "shadow"; }
158
+ static get originalStyleUrls() { return {
159
+ "$": ["duet-scrollable.scss"]
160
+ }; }
161
+ static get styleUrls() { return {
162
+ "$": ["duet-scrollable.css"]
163
+ }; }
164
+ static get properties() { return {
165
+ "theme": {
166
+ "type": "string",
167
+ "mutable": true,
168
+ "complexType": {
169
+ "original": "DuetTheme",
170
+ "resolved": "\"\" | \"default\" | \"turva\"",
171
+ "references": {
172
+ "DuetTheme": {
173
+ "location": "import",
174
+ "path": "../../common-types"
175
+ }
176
+ }
177
+ },
178
+ "required": false,
179
+ "optional": false,
180
+ "docs": {
181
+ "tags": [],
182
+ "text": "Theme of duet-tab-scrollable. When used this will override the color setting and\nuse \"primary\" or \"primary-turva\" as the color depending on which theme\nis chosen."
183
+ },
184
+ "attribute": "theme",
185
+ "reflect": false,
186
+ "defaultValue": "\"\""
187
+ },
188
+ "selected": {
189
+ "type": "number",
190
+ "mutable": true,
191
+ "complexType": {
192
+ "original": "number",
193
+ "resolved": "number",
194
+ "references": {}
195
+ },
196
+ "required": false,
197
+ "optional": false,
198
+ "docs": {
199
+ "tags": [],
200
+ "text": "Selected element"
201
+ },
202
+ "attribute": "selected",
203
+ "reflect": false,
204
+ "defaultValue": "0"
205
+ }
206
+ }; }
207
+ static get states() { return {
208
+ "tablistAtStart": {},
209
+ "isTabContentSmallerThanWrapper": {},
210
+ "tablistAtEnd": {},
211
+ "childrenData": {}
212
+ }; }
213
+ static get elementRef() { return "host"; }
214
+ static get watchers() { return [{
215
+ "propName": "selected",
216
+ "methodName": "watchPropHandler"
217
+ }]; }
218
+ }