@duetds/components 5.2.0 → 5.2.3

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 (270) hide show
  1. package/hydrate/index.js +186 -100
  2. package/lib/cjs/{dom-66424ef2.js → dom-96576bce.js} +1 -1
  3. package/lib/cjs/duet-action-button.cjs.entry.js +1 -1
  4. package/lib/cjs/duet-alert.cjs.entry.js +1 -1
  5. package/lib/cjs/duet-badge.cjs.entry.js +1 -1
  6. package/lib/cjs/duet-breadcrumb.cjs.entry.js +1 -1
  7. package/lib/cjs/duet-breadcrumbs.cjs.entry.js +1 -1
  8. package/lib/cjs/duet-button_2.cjs.entry.js +1 -1
  9. package/lib/cjs/duet-caption_4.cjs.entry.js +1 -1
  10. package/lib/cjs/duet-card.cjs.entry.js +1 -1
  11. package/lib/cjs/duet-checkbox.cjs.entry.js +1 -1
  12. package/lib/cjs/duet-choice_2.cjs.entry.js +2 -2
  13. package/lib/cjs/duet-collapsible.cjs.entry.js +1 -1
  14. package/lib/cjs/duet-combobox.cjs.entry.js +1 -1
  15. package/lib/cjs/duet-cookie-consent.cjs.entry.js +1 -1
  16. package/lib/cjs/duet-date-picker.cjs.entry.js +2 -2
  17. package/lib/cjs/duet-divider_2.cjs.entry.js +1 -1
  18. package/lib/cjs/duet-editable-table_3.cjs.entry.js +4 -3
  19. package/lib/cjs/duet-empty-state.cjs.entry.js +1 -1
  20. package/lib/cjs/duet-fieldset.cjs.entry.js +1 -1
  21. package/lib/cjs/duet-footer.cjs.entry.js +1 -1
  22. package/lib/cjs/duet-grid_2.cjs.entry.js +1 -1
  23. package/lib/cjs/duet-header_2.cjs.entry.js +1 -1
  24. package/lib/cjs/duet-hero.cjs.entry.js +1 -1
  25. package/lib/cjs/duet-icon.cjs.entry.js +1 -1
  26. package/lib/cjs/duet-input_2.cjs.entry.js +1 -1
  27. package/lib/cjs/duet-layout.cjs.entry.js +1 -1
  28. package/lib/cjs/duet-list_2.cjs.entry.js +1 -1
  29. package/lib/cjs/duet-modal.cjs.entry.js +2 -2
  30. package/lib/cjs/duet-notification_2.cjs.entry.js +1 -1
  31. package/lib/cjs/duet-number-input.cjs.entry.js +92 -47
  32. package/lib/cjs/duet-pagination_2.cjs.entry.js +39 -17
  33. package/lib/cjs/duet-progress.cjs.entry.js +1 -1
  34. package/lib/cjs/duet-radio_2.cjs.entry.js +1 -1
  35. package/lib/cjs/duet-range-slider.cjs.entry.js +1 -1
  36. package/lib/cjs/duet-scrollable_3.cjs.entry.js +1 -1
  37. package/lib/cjs/duet-select.cjs.entry.js +1 -1
  38. package/lib/cjs/duet-step_2.cjs.entry.js +1 -1
  39. package/lib/cjs/duet-textarea.cjs.entry.js +1 -1
  40. package/lib/cjs/duet-toggle.cjs.entry.js +1 -1
  41. package/lib/cjs/duet-tooltip.cjs.entry.js +1 -1
  42. package/lib/cjs/duet-tray.cjs.entry.js +1 -1
  43. package/lib/cjs/duet-upload-aria-status.cjs.entry.js +1 -1
  44. package/lib/cjs/duet-visually-hidden.cjs.entry.js +1 -1
  45. package/lib/cjs/duet.cjs.js +4 -4
  46. package/lib/cjs/{focus-utils-bfb10d32.js → focus-utils-12f0a2cb.js} +1 -1
  47. package/lib/cjs/{index-a4844346.js → index-ba78fa3c.js} +11 -9
  48. package/lib/cjs/loader.cjs.js +3 -3
  49. package/lib/cjs/{shadow-css-1ff2f74f.js → shadow-css-38b9e725.js} +2 -3
  50. package/lib/collection/collection-manifest.json +1 -1
  51. package/lib/collection/components/duet-editable-table/duet-editable-table.js +2 -1
  52. package/lib/collection/components/duet-number-input/duet-number-input.js +22 -27
  53. package/lib/collection/components/duet-pagination/duet-pagination.js +18 -13
  54. package/lib/collection/components/duet-range-stepper/duet-range-stepper.js +28 -11
  55. package/lib/collection/components/duet-table/duet-table.css +30 -18
  56. package/lib/collection/utils/math.utils.js +76 -0
  57. package/lib/custom-elements-bundle/index.js +145 -78
  58. package/lib/duet/duet.esm.js +1 -1
  59. package/lib/duet/duet.js +1 -1
  60. package/lib/duet/{p-285714dd.entry.js → p-0146f86f.entry.js} +1 -1
  61. package/lib/duet/{p-b0a4dc6d.entry.js → p-02fdca38.entry.js} +1 -1
  62. package/lib/duet/{p-99fe93c6.system.entry.js → p-034aa5af.system.entry.js} +1 -1
  63. package/lib/duet/{p-f5613315.system.entry.js → p-072a20bb.system.entry.js} +1 -1
  64. package/lib/duet/{p-b35d6368.system.entry.js → p-07970e02.system.entry.js} +1 -1
  65. package/lib/duet/{p-fbec1a47.entry.js → p-119b3a75.entry.js} +1 -1
  66. package/lib/duet/{p-423d4211.system.entry.js → p-12eb57c0.system.entry.js} +1 -1
  67. package/lib/duet/{p-78de93b3.entry.js → p-17d0567c.entry.js} +1 -1
  68. package/lib/duet/p-1919ea71.system.entry.js +4 -0
  69. package/lib/duet/{p-97f1e254.entry.js → p-1b03c0b0.entry.js} +1 -1
  70. package/lib/duet/p-1d3fe5c7.js +5 -0
  71. package/lib/duet/{p-b4ca3864.system.entry.js → p-1d557ffa.system.entry.js} +1 -1
  72. package/lib/duet/{p-6a843f9e.entry.js → p-1e124cda.entry.js} +1 -1
  73. package/lib/duet/p-28ed49f6.entry.js +4 -0
  74. package/lib/duet/{p-e8f8374b.system.entry.js → p-2b1098f7.system.entry.js} +1 -1
  75. package/lib/duet/{p-271107d8.entry.js → p-30c2a422.entry.js} +1 -1
  76. package/lib/duet/{p-b16befbc.system.entry.js → p-36ad89c8.system.entry.js} +1 -1
  77. package/lib/duet/{p-fef3a403.system.entry.js → p-38d81ea7.system.entry.js} +1 -1
  78. package/lib/duet/{p-e7b761c5.system.js → p-392d3906.system.js} +1 -1
  79. package/lib/duet/{p-00bf0bb9.system.entry.js → p-3a1bcb33.system.entry.js} +1 -1
  80. package/lib/duet/{p-fa59ebf4.js → p-3b31184e.js} +0 -0
  81. package/lib/duet/{p-360f8fff.system.entry.js → p-3dcf6143.system.entry.js} +1 -1
  82. package/lib/duet/{p-ec6d63fc.entry.js → p-45fce3bd.entry.js} +1 -1
  83. package/lib/duet/{p-bf87d801.entry.js → p-4d661df0.entry.js} +1 -1
  84. package/lib/duet/{p-41cc3490.entry.js → p-4d6b63bd.entry.js} +1 -1
  85. package/lib/duet/{p-c0aca70c.entry.js → p-4dfd691c.entry.js} +1 -1
  86. package/lib/duet/{p-7a4764db.system.entry.js → p-4e1342e8.system.entry.js} +1 -1
  87. package/lib/duet/{p-d4dba079.system.entry.js → p-506d7234.system.entry.js} +1 -1
  88. package/lib/duet/{p-bb4d8e7b.entry.js → p-518d507a.entry.js} +1 -1
  89. package/lib/duet/{p-437fe50b.system.entry.js → p-532a7563.system.entry.js} +1 -1
  90. package/lib/duet/{p-790ee851.entry.js → p-5de61303.entry.js} +1 -1
  91. package/lib/duet/{p-a2fa0049.entry.js → p-62635fbd.entry.js} +1 -1
  92. package/lib/duet/p-63536b2d.entry.js +4 -0
  93. package/lib/duet/{p-01478a01.system.entry.js → p-64469525.system.entry.js} +1 -1
  94. package/lib/duet/{p-53ad61ed.entry.js → p-65527b10.entry.js} +1 -1
  95. package/lib/duet/{p-98039227.system.entry.js → p-68b86cf3.system.entry.js} +1 -1
  96. package/lib/duet/{p-c1d55269.system.entry.js → p-6a4e52a8.system.entry.js} +1 -1
  97. package/lib/duet/{p-fd0a3ab7.entry.js → p-6b7706d1.entry.js} +1 -1
  98. package/lib/duet/{p-1ff51ad8.system.entry.js → p-6e7f309d.system.entry.js} +1 -1
  99. package/lib/duet/p-6e853c11.system.entry.js +4 -0
  100. package/lib/duet/{p-9920ad3b.entry.js → p-70a3b04a.entry.js} +1 -1
  101. package/lib/duet/{p-cb8ebdd7.entry.js → p-72975917.entry.js} +1 -1
  102. package/lib/duet/{p-ee97a406.system.entry.js → p-73c4e3a3.system.entry.js} +1 -1
  103. package/lib/duet/{p-f91e88e3.system.entry.js → p-78627725.system.entry.js} +1 -1
  104. package/lib/duet/{p-641edb93.system.entry.js → p-7adfeba7.system.entry.js} +1 -1
  105. package/lib/duet/{p-88ffd1cc.entry.js → p-82492a56.entry.js} +1 -1
  106. package/lib/duet/p-835fbc11.js +4 -0
  107. package/lib/duet/{p-10585f06.system.entry.js → p-84a7b980.system.entry.js} +1 -1
  108. package/lib/duet/{p-9406ee60.entry.js → p-856b4648.entry.js} +1 -1
  109. package/lib/duet/{p-04061cef.entry.js → p-89fa490e.entry.js} +1 -1
  110. package/lib/duet/{p-72739cec.entry.js → p-8bc46a6e.entry.js} +1 -1
  111. package/lib/duet/{p-24721182.system.entry.js → p-8bd8f3b9.system.entry.js} +1 -1
  112. package/lib/duet/{p-05e069d8.entry.js → p-8e2ec8a1.entry.js} +1 -1
  113. package/lib/duet/{p-56d3e64f.entry.js → p-8eeccac4.entry.js} +1 -1
  114. package/lib/duet/{p-95a0db46.entry.js → p-92ab9288.entry.js} +1 -1
  115. package/lib/duet/{p-030e20d7.entry.js → p-96d1c0b2.entry.js} +1 -1
  116. package/lib/duet/{p-7021d0c6.system.entry.js → p-97a5f165.system.entry.js} +1 -1
  117. package/lib/duet/{p-071ebe1d.system.entry.js → p-9c850ee8.system.entry.js} +1 -1
  118. package/lib/duet/{p-0bee3151.system.entry.js → p-9fb0854f.system.entry.js} +1 -1
  119. package/lib/duet/{p-afd34b6b.system.entry.js → p-a2f3f08d.system.entry.js} +1 -1
  120. package/lib/duet/p-a81531cf.system.js +4 -0
  121. package/lib/duet/{p-08eb2200.entry.js → p-a9f17642.entry.js} +1 -1
  122. package/lib/duet/{p-d33b5ac5.system.entry.js → p-ab1cda11.system.entry.js} +1 -1
  123. package/lib/duet/{p-64685397.entry.js → p-ae7e7fbf.entry.js} +1 -1
  124. package/lib/duet/{p-76e38bb2.system.entry.js → p-b3dba7d7.system.entry.js} +1 -1
  125. package/lib/duet/{p-542af014.system.js → p-b668b67c.system.js} +0 -0
  126. package/lib/duet/{p-c7657242.entry.js → p-baf2428d.entry.js} +1 -1
  127. package/lib/duet/p-bb65d334.system.entry.js +4 -0
  128. package/lib/duet/{p-03b6ce80.entry.js → p-bbf4391c.entry.js} +1 -1
  129. package/lib/duet/{p-a509cc2b.system.entry.js → p-c54d7981.system.entry.js} +1 -1
  130. package/lib/duet/p-c6791e18.system.js +5 -0
  131. package/lib/duet/{p-e75c7aa8.system.entry.js → p-c6d4025f.system.entry.js} +1 -1
  132. package/lib/duet/{p-73cd4f03.system.entry.js → p-c6d99598.system.entry.js} +1 -1
  133. package/lib/duet/{p-19100783.system.entry.js → p-c75db094.system.entry.js} +1 -1
  134. package/lib/duet/{p-b08bb1fd.entry.js → p-c9c6d840.entry.js} +1 -1
  135. package/lib/duet/{p-495a1326.system.entry.js → p-cfcb5990.system.entry.js} +1 -1
  136. package/lib/duet/{p-95e1a336.entry.js → p-d16b2352.entry.js} +1 -1
  137. package/lib/duet/{p-5f009925.system.entry.js → p-d1f678be.system.entry.js} +1 -1
  138. package/lib/duet/{p-27d238c5.js → p-d4c234ed.js} +1 -1
  139. package/lib/duet/{p-7fe67436.system.entry.js → p-d506da98.system.entry.js} +1 -1
  140. package/lib/duet/{p-b8623ab8.entry.js → p-d96432a0.entry.js} +1 -1
  141. package/lib/duet/{p-5b1cbe5b.entry.js → p-dc5971bf.entry.js} +1 -1
  142. package/lib/duet/{p-3260eef0.entry.js → p-de6e8bfb.entry.js} +1 -1
  143. package/lib/duet/{p-30e901f2.system.entry.js → p-dfff5f16.system.entry.js} +1 -1
  144. package/lib/duet/{p-0ae816ee.entry.js → p-e27f1382.entry.js} +1 -1
  145. package/lib/duet/{p-68cbc3b7.entry.js → p-e2cc3eb4.entry.js} +1 -1
  146. package/lib/duet/{p-9496d6d4.entry.js → p-e575b990.entry.js} +1 -1
  147. package/lib/duet/{p-a843e579.system.entry.js → p-ee6352cf.system.entry.js} +1 -1
  148. package/lib/duet/{p-4a7f290f.entry.js → p-f66e69a0.entry.js} +1 -1
  149. package/lib/duet/p-f80195fa.entry.js +4 -0
  150. package/lib/duet/{p-b51928dc.system.entry.js → p-fd8ac2e7.system.entry.js} +1 -1
  151. package/lib/duet/{p-33388bf3.system.entry.js → p-febd0192.system.entry.js} +1 -1
  152. package/lib/duet/p-ff46ec81.system.js +16 -0
  153. package/lib/esm/{dom-3c479050.js → dom-3dbcb0d8.js} +1 -1
  154. package/lib/esm/duet-action-button.entry.js +1 -1
  155. package/lib/esm/duet-alert.entry.js +1 -1
  156. package/lib/esm/duet-badge.entry.js +1 -1
  157. package/lib/esm/duet-breadcrumb.entry.js +1 -1
  158. package/lib/esm/duet-breadcrumbs.entry.js +1 -1
  159. package/lib/esm/duet-button_2.entry.js +1 -1
  160. package/lib/esm/duet-caption_4.entry.js +1 -1
  161. package/lib/esm/duet-card.entry.js +1 -1
  162. package/lib/esm/duet-checkbox.entry.js +1 -1
  163. package/lib/esm/duet-choice_2.entry.js +2 -2
  164. package/lib/esm/duet-collapsible.entry.js +1 -1
  165. package/lib/esm/duet-combobox.entry.js +1 -1
  166. package/lib/esm/duet-cookie-consent.entry.js +1 -1
  167. package/lib/esm/duet-date-picker.entry.js +2 -2
  168. package/lib/esm/duet-divider_2.entry.js +1 -1
  169. package/lib/esm/duet-editable-table_3.entry.js +4 -3
  170. package/lib/esm/duet-empty-state.entry.js +1 -1
  171. package/lib/esm/duet-fieldset.entry.js +1 -1
  172. package/lib/esm/duet-footer.entry.js +1 -1
  173. package/lib/esm/duet-grid_2.entry.js +1 -1
  174. package/lib/esm/duet-header_2.entry.js +1 -1
  175. package/lib/esm/duet-hero.entry.js +1 -1
  176. package/lib/esm/duet-icon.entry.js +1 -1
  177. package/lib/esm/duet-input_2.entry.js +1 -1
  178. package/lib/esm/duet-layout.entry.js +1 -1
  179. package/lib/esm/duet-list_2.entry.js +1 -1
  180. package/lib/esm/duet-modal.entry.js +2 -2
  181. package/lib/esm/duet-notification_2.entry.js +1 -1
  182. package/lib/esm/duet-number-input.entry.js +92 -47
  183. package/lib/esm/duet-pagination_2.entry.js +39 -17
  184. package/lib/esm/duet-progress.entry.js +1 -1
  185. package/lib/esm/duet-radio_2.entry.js +1 -1
  186. package/lib/esm/duet-range-slider.entry.js +1 -1
  187. package/lib/esm/duet-scrollable_3.entry.js +1 -1
  188. package/lib/esm/duet-select.entry.js +1 -1
  189. package/lib/esm/duet-step_2.entry.js +1 -1
  190. package/lib/esm/duet-textarea.entry.js +1 -1
  191. package/lib/esm/duet-toggle.entry.js +1 -1
  192. package/lib/esm/duet-tooltip.entry.js +1 -1
  193. package/lib/esm/duet-tray.entry.js +1 -1
  194. package/lib/esm/duet-upload-aria-status.entry.js +1 -1
  195. package/lib/esm/duet-visually-hidden.entry.js +1 -1
  196. package/lib/esm/duet.js +4 -4
  197. package/lib/esm/{focus-utils-3af074ea.js → focus-utils-3769afc3.js} +1 -1
  198. package/lib/esm/{index-ab2bfa68.js → index-374256c8.js} +11 -9
  199. package/lib/esm/loader.js +3 -3
  200. package/lib/esm/polyfills/css-shim.js +1 -1
  201. package/lib/esm/{shadow-css-fbe49d20.js → shadow-css-501eda9a.js} +2 -3
  202. package/lib/esm-es5/{dom-3c479050.js → dom-3dbcb0d8.js} +0 -0
  203. package/lib/esm-es5/duet-action-button.entry.js +1 -1
  204. package/lib/esm-es5/duet-alert.entry.js +1 -1
  205. package/lib/esm-es5/duet-badge.entry.js +1 -1
  206. package/lib/esm-es5/duet-breadcrumb.entry.js +1 -1
  207. package/lib/esm-es5/duet-breadcrumbs.entry.js +1 -1
  208. package/lib/esm-es5/duet-button_2.entry.js +1 -1
  209. package/lib/esm-es5/duet-caption_4.entry.js +1 -1
  210. package/lib/esm-es5/duet-card.entry.js +1 -1
  211. package/lib/esm-es5/duet-checkbox.entry.js +1 -1
  212. package/lib/esm-es5/duet-choice_2.entry.js +2 -2
  213. package/lib/esm-es5/duet-collapsible.entry.js +1 -1
  214. package/lib/esm-es5/duet-combobox.entry.js +1 -1
  215. package/lib/esm-es5/duet-cookie-consent.entry.js +1 -1
  216. package/lib/esm-es5/duet-date-picker.entry.js +1 -1
  217. package/lib/esm-es5/duet-divider_2.entry.js +1 -1
  218. package/lib/esm-es5/duet-editable-table_3.entry.js +2 -2
  219. package/lib/esm-es5/duet-empty-state.entry.js +1 -1
  220. package/lib/esm-es5/duet-fieldset.entry.js +1 -1
  221. package/lib/esm-es5/duet-footer.entry.js +1 -1
  222. package/lib/esm-es5/duet-grid_2.entry.js +1 -1
  223. package/lib/esm-es5/duet-header_2.entry.js +1 -1
  224. package/lib/esm-es5/duet-hero.entry.js +1 -1
  225. package/lib/esm-es5/duet-icon.entry.js +1 -1
  226. package/lib/esm-es5/duet-input_2.entry.js +1 -1
  227. package/lib/esm-es5/duet-layout.entry.js +1 -1
  228. package/lib/esm-es5/duet-list_2.entry.js +1 -1
  229. package/lib/esm-es5/duet-modal.entry.js +1 -1
  230. package/lib/esm-es5/duet-notification_2.entry.js +1 -1
  231. package/lib/esm-es5/duet-number-input.entry.js +2 -2
  232. package/lib/esm-es5/duet-pagination_2.entry.js +1 -1
  233. package/lib/esm-es5/duet-progress.entry.js +1 -1
  234. package/lib/esm-es5/duet-radio_2.entry.js +1 -1
  235. package/lib/esm-es5/duet-range-slider.entry.js +1 -1
  236. package/lib/esm-es5/duet-scrollable_3.entry.js +1 -1
  237. package/lib/esm-es5/duet-select.entry.js +1 -1
  238. package/lib/esm-es5/duet-step_2.entry.js +1 -1
  239. package/lib/esm-es5/duet-textarea.entry.js +1 -1
  240. package/lib/esm-es5/duet-toggle.entry.js +1 -1
  241. package/lib/esm-es5/duet-tooltip.entry.js +1 -1
  242. package/lib/esm-es5/duet-tray.entry.js +1 -1
  243. package/lib/esm-es5/duet-upload-aria-status.entry.js +1 -1
  244. package/lib/esm-es5/duet-visually-hidden.entry.js +1 -1
  245. package/lib/esm-es5/duet.js +1 -1
  246. package/lib/esm-es5/{focus-utils-3af074ea.js → focus-utils-3769afc3.js} +1 -1
  247. package/lib/esm-es5/index-374256c8.js +5 -0
  248. package/lib/esm-es5/loader.js +1 -1
  249. package/lib/esm-es5/shadow-css-501eda9a.js +15 -0
  250. package/lib/types/components/duet-number-input/duet-number-input.d.ts +0 -1
  251. package/lib/types/components/duet-pagination/duet-pagination.d.ts +1 -1
  252. package/lib/types/components/duet-range-stepper/duet-range-stepper.d.ts +3 -1
  253. package/lib/types/components.d.ts +192 -80
  254. package/lib/types/utils/math.utils.d.ts +11 -0
  255. package/package.json +6 -6
  256. package/lib/collection/components/duet-number-input/number-input-utils.js +0 -26
  257. package/lib/duet/p-12c89686.system.js +0 -4
  258. package/lib/duet/p-37dc064c.js +0 -4
  259. package/lib/duet/p-4972c76e.system.js +0 -4
  260. package/lib/duet/p-5a5d8fb1.entry.js +0 -4
  261. package/lib/duet/p-66536958.system.entry.js +0 -4
  262. package/lib/duet/p-92a25fb5.system.js +0 -16
  263. package/lib/duet/p-971f42d6.system.entry.js +0 -4
  264. package/lib/duet/p-98a9556f.js +0 -4
  265. package/lib/duet/p-a76bf729.entry.js +0 -4
  266. package/lib/duet/p-b7462f8c.system.entry.js +0 -4
  267. package/lib/duet/p-fe99b9cb.entry.js +0 -4
  268. package/lib/esm-es5/index-ab2bfa68.js +0 -4
  269. package/lib/esm-es5/shadow-css-fbe49d20.js +0 -15
  270. package/lib/types/components/duet-number-input/number-input-utils.d.ts +0 -4
package/hydrate/index.js CHANGED
@@ -6,7 +6,7 @@
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
8
  /*!
9
- Stencil Mock Doc v2.15.0 | MIT Licensed | https://stenciljs.com
9
+ Stencil Mock Doc v2.16.0 | MIT Licensed | https://stenciljs.com
10
10
  */
11
11
  const CONTENT_REF_ID = 'r';
12
12
  const ORG_LOCATION_ID = 'o';
@@ -385,7 +385,7 @@ function toDataAttribute(str) {
385
385
  .toLowerCase());
386
386
  }
387
387
  function dashToPascalCase(str) {
388
- str = String(str).substr(5);
388
+ str = String(str).slice(5);
389
389
  return str
390
390
  .split('-')
391
391
  .map((segment, index) => {
@@ -589,7 +589,7 @@ function cssCaseToJsCase(str) {
589
589
  .split('-')
590
590
  .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))
591
591
  .join('');
592
- str = str.substr(0, 1).toLowerCase() + str.substr(1);
592
+ str = str.slice(0, 1).toLowerCase() + str.slice(1);
593
593
  }
594
594
  return str;
595
595
  }
@@ -1532,7 +1532,11 @@ class MockNode {
1532
1532
  if (otherNode === this) {
1533
1533
  return true;
1534
1534
  }
1535
- return this.childNodes.includes(otherNode);
1535
+ const childNodes = Array.from(this.childNodes);
1536
+ if (childNodes.includes(otherNode)) {
1537
+ return true;
1538
+ }
1539
+ return childNodes.some((node) => this.contains.bind(node)(otherNode));
1536
1540
  }
1537
1541
  removeChild(childNode) {
1538
1542
  const index = this.childNodes.indexOf(childNode);
@@ -3169,6 +3173,15 @@ class MockResponse {
3169
3173
  }
3170
3174
  }
3171
3175
 
3176
+ class MockDOMParser {
3177
+ parseFromString(htmlToParse, mimeType) {
3178
+ if (mimeType !== 'text/html') {
3179
+ console.error('XML parsing not implemented yet, continuing as html');
3180
+ }
3181
+ return parseHtmlToDocument(htmlToParse);
3182
+ }
3183
+ }
3184
+
3172
3185
  function setupGlobal(gbl) {
3173
3186
  if (gbl.window == null) {
3174
3187
  const win = (gbl.window = new MockWindow());
@@ -3298,6 +3311,7 @@ const GLOBAL_CONSTRUCTORS = [
3298
3311
  ['MouseEvent', MockMouseEvent],
3299
3312
  ['Request', MockRequest],
3300
3313
  ['Response', MockResponse],
3314
+ ['DOMParser', MockDOMParser],
3301
3315
  ['HTMLAnchorElement', MockAnchorElement],
3302
3316
  ['HTMLBaseElement', MockBaseElement],
3303
3317
  ['HTMLButtonElement', MockButtonElement],
@@ -4963,7 +4977,8 @@ const createTime = (e, t = "") => {
4963
4977
  let n = styles.get(e);
4964
4978
  n = t, styles.set(e, n);
4965
4979
  }, addStyle = (e, t, o, n) => {
4966
- let s = getScopeId(t), l = styles.get(s);
4980
+ let s = getScopeId(t);
4981
+ const l = styles.get(s);
4967
4982
  if (e = 11 === e.nodeType ? e : doc, l) if ("string" == typeof l) {
4968
4983
  e = e.head || e;
4969
4984
  let o, a = rootAppliedStyles.get(e);
@@ -4983,8 +4998,8 @@ const createTime = (e, t = "") => {
4983
4998
  o.classList.add(l + "-h"), 2 & n && o.classList.add(l + "-s")),
4984
4999
  s();
4985
5000
  }, getScopeId = (e, t) => "sc-" + (e.$tagName$), EMPTY_OBJ = {}, isComplexType = e => "object" == (e = typeof e) || "function" === e, isPromise = e => !!e && ("object" == typeof e || "function" == typeof e) && "function" == typeof e.then, h = (e, t, ...o) => {
4986
- let n = null, s = null, l = null, a = !1, r = !1, i = [];
4987
- const d = t => {
5001
+ let n = null, s = null, l = null, a = !1, r = !1;
5002
+ const i = [], d = t => {
4988
5003
  for (let o = 0; o < t.length; o++) n = t[o], Array.isArray(n) ? d(n) : null != n && "boolean" != typeof n && ((a = "function" != typeof e && !isComplexType(n)) ? n = String(n) : BUILD.isDev ,
4989
5004
  a && r ? i[i.length - 1].$text$ += n : i.push(a ? newVNode(null, n) : n), r = a);
4990
5005
  };
@@ -5041,7 +5056,7 @@ const createTime = (e, t = "") => {
5041
5056
  const i = isComplexType(n);
5042
5057
  if ((a || i && null !== n) && !s) try {
5043
5058
  if (e.tagName.includes("-")) e[t] = n; else {
5044
- let s = null == n ? "" : n;
5059
+ const s = null == n ? "" : n;
5045
5060
  "list" === t ? a = !1 : null != o && e[t] == s || (e[t] = s);
5046
5061
  }
5047
5062
  } catch (e) {}
@@ -5061,20 +5076,21 @@ const createTime = (e, t = "") => {
5061
5076
  let scopeId, contentRef, hostTagName, useNativeShadowDom = !1, checkSlotFallbackVisibility = !1, checkSlotRelocate = !1, isSvgMode = !1;
5062
5077
 
5063
5078
  const createElm = (e, t, o, n) => {
5064
- let s, l, a, r = t.$children$[o], i = 0;
5065
- if (!useNativeShadowDom && (checkSlotRelocate = !0, "slot" === r.$tag$ && (scopeId && n.classList.add(scopeId + "-s"),
5066
- r.$flags$ |= r.$children$ ? 2 : 1)), null !== r.$text$) s = r.$elm$ = doc.createTextNode(r.$text$); else if (1 & r.$flags$) s = r.$elm$ = slotReferenceDebugNode(r) ; else {
5067
- if (!isSvgMode && (isSvgMode = "svg" === r.$tag$), s = r.$elm$ = doc.createElementNS(isSvgMode ? "http://www.w3.org/2000/svg" : "http://www.w3.org/1999/xhtml", 2 & r.$flags$ ? "slot-fb" : r.$tag$) ,
5068
- isSvgMode && "foreignObject" === r.$tag$ && (isSvgMode = !1), updateElement(null, r, isSvgMode),
5069
- null != scopeId && s["s-si"] !== scopeId && s.classList.add(s["s-si"] = scopeId),
5070
- r.$children$) for (i = 0; i < r.$children$.length; ++i) l = createElm(e, r, i, s),
5071
- l && s.appendChild(l);
5072
- ("svg" === r.$tag$ ? isSvgMode = !1 : "foreignObject" === s.tagName && (isSvgMode = !0));
5079
+ const s = t.$children$[o];
5080
+ let l, a, r, i = 0;
5081
+ if (!useNativeShadowDom && (checkSlotRelocate = !0, "slot" === s.$tag$ && (scopeId && n.classList.add(scopeId + "-s"),
5082
+ s.$flags$ |= s.$children$ ? 2 : 1)), null !== s.$text$) l = s.$elm$ = doc.createTextNode(s.$text$); else if (1 & s.$flags$) l = s.$elm$ = slotReferenceDebugNode(s) ; else {
5083
+ if (!isSvgMode && (isSvgMode = "svg" === s.$tag$), l = s.$elm$ = doc.createElementNS(isSvgMode ? "http://www.w3.org/2000/svg" : "http://www.w3.org/1999/xhtml", 2 & s.$flags$ ? "slot-fb" : s.$tag$) ,
5084
+ isSvgMode && "foreignObject" === s.$tag$ && (isSvgMode = !1), updateElement(null, s, isSvgMode),
5085
+ null != scopeId && l["s-si"] !== scopeId && l.classList.add(l["s-si"] = scopeId),
5086
+ s.$children$) for (i = 0; i < s.$children$.length; ++i) a = createElm(e, s, i, l),
5087
+ a && l.appendChild(a);
5088
+ ("svg" === s.$tag$ ? isSvgMode = !1 : "foreignObject" === l.tagName && (isSvgMode = !0));
5073
5089
  }
5074
- return (s["s-hn"] = hostTagName, 3 & r.$flags$ && (s["s-sr"] = !0,
5075
- s["s-cr"] = contentRef, s["s-sn"] = r.$name$ || "", a = e && e.$children$ && e.$children$[o],
5076
- a && a.$tag$ === r.$tag$ && e.$elm$ && putBackInOriginalLocation(e.$elm$, !1))),
5077
- s;
5090
+ return (l["s-hn"] = hostTagName, 3 & s.$flags$ && (l["s-sr"] = !0,
5091
+ l["s-cr"] = contentRef, l["s-sn"] = s.$name$ || "", r = e && e.$children$ && e.$children$[o],
5092
+ r && r.$tag$ === s.$tag$ && e.$elm$ && putBackInOriginalLocation(e.$elm$, !1))),
5093
+ l;
5078
5094
  }, putBackInOriginalLocation = (e, t) => {
5079
5095
  plt.$flags$ |= 1;
5080
5096
  const o = e.childNodes;
@@ -5115,22 +5131,24 @@ const createElm = (e, t, o, n) => {
5115
5131
  addVnodes(o, null, t, s, 0, s.length - 1)) : null !== n && removeVnodes(n, 0, n.length - 1),
5116
5132
  isSvgMode && "svg" === l && (isSvgMode = !1));
5117
5133
  }, updateFallbackSlotVisibility = e => {
5118
- let t, o, n, s, l, a, r = e.childNodes;
5119
- for (o = 0, n = r.length; o < n; o++) if (t = r[o], 1 === t.nodeType) {
5120
- if (t["s-sr"]) for (l = t["s-sn"], t.hidden = !1, s = 0; s < n; s++) if (a = r[s].nodeType,
5121
- r[s]["s-hn"] !== t["s-hn"] || "" !== l) {
5122
- if (1 === a && l === r[s].getAttribute("slot")) {
5123
- t.hidden = !0;
5134
+ const t = e.childNodes;
5135
+ let o, n, s, l, a, r;
5136
+ for (n = 0, s = t.length; n < s; n++) if (o = t[n], 1 === o.nodeType) {
5137
+ if (o["s-sr"]) for (a = o["s-sn"], o.hidden = !1, l = 0; l < s; l++) if (r = t[l].nodeType,
5138
+ t[l]["s-hn"] !== o["s-hn"] || "" !== a) {
5139
+ if (1 === r && a === t[l].getAttribute("slot")) {
5140
+ o.hidden = !0;
5124
5141
  break;
5125
5142
  }
5126
- } else if (1 === a || 3 === a && "" !== r[s].textContent.trim()) {
5127
- t.hidden = !0;
5143
+ } else if (1 === r || 3 === r && "" !== t[l].textContent.trim()) {
5144
+ o.hidden = !0;
5128
5145
  break;
5129
5146
  }
5130
- updateFallbackSlotVisibility(t);
5147
+ updateFallbackSlotVisibility(o);
5131
5148
  }
5132
5149
  }, relocateNodes = [], relocateSlotContent = e => {
5133
- let t, o, n, s, l, a, r = 0, i = e.childNodes, d = i.length;
5150
+ let t, o, n, s, l, a, r = 0;
5151
+ const i = e.childNodes, d = i.length;
5134
5152
  for (;r < d; r++) {
5135
5153
  if (t = i[r], t["s-sr"] && (o = t["s-cr"]) && o.parentNode) for (n = o.parentNode.childNodes,
5136
5154
  s = t["s-sn"], a = n.length - 1; a >= 0; a--) o = n[a], o["s-cn"] || o["s-nr"] || o["s-hn"] === t["s-hn"] || (isNodeLocatedInSlot(o, s) ? (l = relocateNodes.find((e => e.$nodeToRelocate$ === o)),
@@ -10020,6 +10038,7 @@ class DuetEditableTable {
10020
10038
  render() {
10021
10039
  return (hAsync(Host, { class: {
10022
10040
  [`duet-editable-table-${this.variation}`]: true,
10041
+ "duet-editable-table": true,
10023
10042
  [`duet-editable-table-${this.theme}`]: true,
10024
10043
  // sticky only valid when in regular table layout
10025
10044
  "duet-editable-table-scrollable": this.breakpoint === "none-scrollable",
@@ -10027,7 +10046,7 @@ class DuetEditableTable {
10027
10046
  "duet-editable-table-actions": !!this.actions,
10028
10047
  "duet-m-0": this.margin === "none",
10029
10048
  "duet-theme-turva": this.theme === "turva",
10030
- } }, hAsync("duet-table", { sticky: this.sticky, stickyDistance: this.stickyDistance, margin: this.margin, theme: this.theme, variation: this.variation, breakpoint: this.breakpoint }, hAsync("table", { role: this.accessibleRole }, hAsync("caption", null, hAsync("slot", { name: "tcaption" })), hAsync("thead", null, hAsync("tr", null, hAsync("td", { class: "duet-editable-table-actions-menu", colSpan: 99 }, hAsync("slot", { name: "thead-first" }))), this.renderTableHeader(), hAsync("tr", null, hAsync("td", { class: "duet-editable-table-actions-menu", colSpan: 99 }, hAsync("slot", { name: "thead-last" })))), hAsync("tbody", null, this.renderTableBody()), hAsync("tfoot", null, hAsync("tr", null, hAsync("th", { class: "duet-editable-table-footer-menu", colSpan: 99 }, hAsync("slot", { name: "tfoot" }))))))));
10049
+ } }, hAsync("duet-table", { class: "duet-editable-table-table", sticky: this.sticky, stickyDistance: this.stickyDistance, margin: this.margin, theme: this.theme, variation: this.variation, breakpoint: this.breakpoint }, hAsync("table", { role: this.accessibleRole }, hAsync("caption", null, hAsync("slot", { name: "tcaption" })), hAsync("thead", null, hAsync("tr", null, hAsync("td", { class: "duet-editable-table-actions-menu", colSpan: 99 }, hAsync("slot", { name: "thead-first" }))), this.renderTableHeader(), hAsync("tr", null, hAsync("td", { class: "duet-editable-table-actions-menu", colSpan: 99 }, hAsync("slot", { name: "thead-last" })))), hAsync("tbody", null, this.renderTableBody()), hAsync("tfoot", null, hAsync("tr", null, hAsync("th", { class: "duet-editable-table-footer-menu", colSpan: 99 }, hAsync("slot", { name: "tfoot" }))))))));
10031
10050
  }
10032
10051
  get element() { return getElement(this); }
10033
10052
  static get style() { return duetEditableTableCss; }
@@ -13373,27 +13392,77 @@ var actionAdd={"title":"action-add","tags":"action add plus","svg":"<svg fill=\"
13373
13392
 
13374
13393
  var actionSubtract={"title":"action-subtract","tags":"action subtract minus remove delete cancel","svg":"<svg fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" role=\"img\"><path d=\"M.75 12.788a.75.75 0 0 1 0-1.5h22.5a.75.75 0 0 1 0 1.5z\"/></svg>"};
13375
13394
 
13376
- const parseLocaleFloat = (str, locale) => {
13377
- // remove spaces and non-numeric characters
13378
- // "12 345,67€" -> "12345,67"
13379
- // "12,345.67€" -> "12,345.67"
13380
- str = str.replace(/\s+/g, "").replace(/[^0-9\.,]+/g, "");
13381
- switch (locale) {
13382
- case "fi-FI":
13383
- case "sv-SE":
13384
- // "12345,67" -> "12345.67"
13385
- str = str.replace(",", ".");
13386
- break;
13387
- case "en-US":
13388
- case "en-GB":
13389
- // "12,345.67" -> "12345.67"
13390
- str = str.replace(/,/g, "");
13391
- break;
13392
- default:
13393
- throw new TypeError(`Unrecognised locale: ${locale}`);
13394
- }
13395
- return parseFloat(str);
13396
- };
13395
+ /**
13396
+ * function that takes a string value or number and looks for any character resembling a minus,
13397
+ * it will then replace it with a hypen-minus and return the parseFloat value of that string
13398
+ * it will string / number cast the value to a number and return that number
13399
+ * known issues: if a negative number is indicated with other characters than a "minus like" character, it will throw
13400
+ * - an example is that some locales use (number) as an indicator for negative values instead of -number
13401
+ */
13402
+ function SafeParseFloat(value, locale) {
13403
+ let results;
13404
+ if (typeof value === "string") {
13405
+ //the minuses are NOT the same characters, they differ in unicode for some languages
13406
+ // "", "−", "–", and "—"
13407
+ let convertedMinus = value.replace("−", "-").replace("‐", "-").replace("−", "-").replace("–", "-").replace("—", "-");
13408
+ if (locale) {
13409
+ convertedMinus = ConvertToEnUS(convertedMinus, locale, false);
13410
+ }
13411
+ // replace all possible spaces from the string
13412
+ convertedMinus = convertedMinus.replace(/\s+/g, "");
13413
+ convertedMinus = convertedMinus.replace(/(?!^-?\d*\.{0,1}\d+$)/g, "");
13414
+ /*
13415
+ example: https://regex101.com/r/np7FqS/1
13416
+ /(?!^-?\d*\.{0,1}\d+$)/g
13417
+ Negative Lookahead (?!^-?\d*\.{0,1}\d+$)
13418
+ Assert that the Regex below does not match
13419
+ ^ asserts position at start of a line
13420
+ - matches the character - with index 4510 (2D16 or 558) literally (case sensitive)
13421
+ ? matches the previous token between zero and one times, as many times as possible, giving back as needed (greedy)
13422
+ \d matches a digit (equivalent to [0-9])
13423
+ * matches the previous token between zero and unlimited times, as many times as possible, giving back as needed (greedy)
13424
+ \. matches the character . with index 4610 (2E16 or 568) literally (case sensitive)
13425
+ {0,1} matches the previous token between zero and one times, as many times as possible, giving back as needed (greedy)
13426
+ \d matches a digit (equivalent to [0-9])
13427
+ + matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)
13428
+ $ asserts position at the end of a line
13429
+ Global pattern flags
13430
+ g modifier: global. All matches (don't return after first match)
13431
+ m modifier: multi line. Causes ^ and $ to match the begin/end of each line (not only begin/end of string)
13432
+ */
13433
+ results = parseFloat(convertedMinus);
13434
+ }
13435
+ if (typeof value === "number") {
13436
+ results = parseFloat(String(value));
13437
+ }
13438
+ if (!isNaN(Number(results))) {
13439
+ return Number(results);
13440
+ }
13441
+ if (value === null || value === undefined) {
13442
+ return null;
13443
+ }
13444
+ throw new Error("Invalid value passed to SafeParseFloat");
13445
+ }
13446
+ // string conversion function that takes a locale and coverts decimal indicator to en-US indicator
13447
+ // and takes the thousand separator for the given locale and transforms that to the en-US separator
13448
+ function ConvertToEnUS(value, locale, replaceThousands = false) {
13449
+ let replacedValue;
13450
+ const localeSeparator = new Intl.NumberFormat(locale).format(1 / 2).replace(/[0-9]/g, "");
13451
+ const enUSSeparator = new Intl.NumberFormat("en-US").format(1 / 2).replace(/[0-9]/g, "");
13452
+ const thousandSeparator = new Intl.NumberFormat(locale).format(1000).replace(/[0-9]/g, "");
13453
+ const enUSThousandSeparator = new Intl.NumberFormat("en-US").format(1000).replace(/[0-9]/g, "");
13454
+ // double conversions to avoid ,->. and .->, at the same time resulting in a double conversion
13455
+ replacedValue = value.replace(localeSeparator, "DECIMALSEPARATOR");
13456
+ if (replaceThousands) {
13457
+ replacedValue = replacedValue.replace(thousandSeparator, "THOUSANDSEPARATOR");
13458
+ }
13459
+ else {
13460
+ replacedValue = replacedValue.replace(thousandSeparator, "");
13461
+ }
13462
+ replacedValue = replacedValue.replace("DECIMALSEPARATOR", enUSSeparator);
13463
+ replacedValue = replacedValue.replace("THOUSANDSEPARATOR", enUSThousandSeparator);
13464
+ return replacedValue;
13465
+ }
13397
13466
  const roundTo = (val, multiple) => Math.round(val / multiple) * multiple;
13398
13467
  const clamp = (val, min, max) => Math.min(Math.max(val, min), max);
13399
13468
 
@@ -13569,7 +13638,7 @@ class DuetNumberInput {
13569
13638
  this.handleChange = (ev) => {
13570
13639
  const input = ev.target;
13571
13640
  if (input && input.value) {
13572
- let value = this.cleanValue(input.value);
13641
+ let value = SafeParseFloat(input.value, this.locale);
13573
13642
  // Make sure that everything works if the user clears the input and
13574
13643
  // starts typing non-numeric characters.
13575
13644
  if (isNaN(value) || value == null) {
@@ -13579,7 +13648,7 @@ class DuetNumberInput {
13579
13648
  this.duetInput.emit({
13580
13649
  component: "duet-number-input",
13581
13650
  originalEvent: ev,
13582
- value: this.cleanValue(this.value).toString(),
13651
+ value: SafeParseFloat(this.value, this.locale).toString(),
13583
13652
  valueAsNumber: value,
13584
13653
  });
13585
13654
  }
@@ -13600,30 +13669,29 @@ class DuetNumberInput {
13600
13669
  if (input.value) {
13601
13670
  // On blur we want to make sure that the user input is between the min and max values,
13602
13671
  // and also round it up or down to the nearest step.
13603
- let value = this.cleanValue(input.value);
13672
+ let value = SafeParseFloat(input.value, this.locale);
13604
13673
  if (this.rounding) {
13605
13674
  value = roundTo(value, this.step);
13606
13675
  }
13607
13676
  value = clamp(value, this.min, this.max);
13608
- if (value !== this.cleanValue(this.value) || value !== this.cleanValue(this.focusedValue)) {
13677
+ if (value !== SafeParseFloat(this.value, this.locale) ||
13678
+ value !== SafeParseFloat(this.focusedValue, this.locale)) {
13609
13679
  this.setValue(value);
13610
13680
  this.emitChange(ev);
13611
13681
  }
13612
13682
  }
13613
- else {
13614
- this.duetChange.emit({
13615
- originalEvent: ev,
13616
- value: null,
13617
- valueAsNumber: null,
13618
- component: "duet-number-input",
13619
- });
13620
- }
13683
+ this.duetChange.emit({
13684
+ originalEvent: ev,
13685
+ value: null,
13686
+ valueAsNumber: null,
13687
+ component: "duet-number-input",
13688
+ });
13621
13689
  };
13622
13690
  /**
13623
13691
  * Local methods.
13624
13692
  */
13625
13693
  this.emitChange = (ev) => {
13626
- const currentValue = this.cleanValue(this.value);
13694
+ const currentValue = SafeParseFloat(this.value, this.locale);
13627
13695
  this.duetChange.emit({
13628
13696
  originalEvent: ev,
13629
13697
  value: currentValue.toString(),
@@ -13631,10 +13699,6 @@ class DuetNumberInput {
13631
13699
  component: "duet-number-input",
13632
13700
  });
13633
13701
  };
13634
- this.cleanValue = (value) => {
13635
- // Returns a number that can be used in calculations.
13636
- return value ? parseLocaleFloat(value, this.locale) : null;
13637
- };
13638
13702
  this.localizeValue = (value) => {
13639
13703
  // Returns a localized string that can be used as input value.
13640
13704
  return value.toLocaleString(this.locale);
@@ -13651,13 +13715,13 @@ class DuetNumberInput {
13651
13715
  if (ev) {
13652
13716
  ev.preventDefault();
13653
13717
  }
13654
- const currentValue = this.cleanValue(this.value);
13718
+ const cleanedValue = SafeParseFloat(this.value, this.locale);
13655
13719
  // Only fire change event when necessary
13656
- if (currentValue === this.max) {
13720
+ if (cleanedValue === this.max) {
13657
13721
  return;
13658
13722
  }
13659
13723
  // in cases where no value set, incrementing should go to min
13660
- let newValue = currentValue == null ? this.min : currentValue + this.step;
13724
+ let newValue = cleanedValue == null ? this.min : cleanedValue + this.step;
13661
13725
  // handle cases where value is not multiple of step
13662
13726
  // e.g. if someone enters 199, with a step of 100, add should go to 200
13663
13727
  // and if someone enters 101, add should also go to 200
@@ -13665,8 +13729,8 @@ class DuetNumberInput {
13665
13729
  const adjustment = newValue % this.step;
13666
13730
  newValue -= adjustment;
13667
13731
  }
13668
- newValue = clamp(newValue, this.min, this.max);
13669
- this.value = this.localizeValue(newValue);
13732
+ const clampedValue = clamp(newValue, this.min, this.max);
13733
+ this.value = this.localizeValue(clampedValue);
13670
13734
  this.emitChange(ev);
13671
13735
  };
13672
13736
  this.subtract = (ev) => {
@@ -13675,7 +13739,7 @@ class DuetNumberInput {
13675
13739
  if (ev) {
13676
13740
  ev.preventDefault();
13677
13741
  }
13678
- const currentValue = this.cleanValue(this.value);
13742
+ const currentValue = SafeParseFloat(this.value, this.locale);
13679
13743
  // Only fire change event when necessary.
13680
13744
  if (currentValue === this.min) {
13681
13745
  return;
@@ -13700,7 +13764,7 @@ class DuetNumberInput {
13700
13764
  inheritGlobalTheme(this);
13701
13765
  // Format the number value to a localeString initially.
13702
13766
  if (this.value) {
13703
- this.value = this.localizeValue(parseLocaleFloat(this.value, this.locale));
13767
+ this.value = this.localizeValue(SafeParseFloat(this.value, this.locale));
13704
13768
  }
13705
13769
  }
13706
13770
  /**
@@ -13715,7 +13779,7 @@ class DuetNumberInput {
13715
13779
  this.duetInputElement.value = "";
13716
13780
  }
13717
13781
  formatAnnouncement() {
13718
- const current = this.cleanValue(this.value);
13782
+ const current = SafeParseFloat(this.value, this.locale);
13719
13783
  if (current == null) {
13720
13784
  return "";
13721
13785
  }
@@ -13728,7 +13792,7 @@ class DuetNumberInput {
13728
13792
  render() {
13729
13793
  const identifier = this.identifier || this.inputId;
13730
13794
  const maxlength = `${this.localizeValue(this.max)} ${this.unit}`.length;
13731
- const cleanedValue = this.cleanValue(this.value);
13795
+ const cleanedValue = SafeParseFloat(this.value, this.locale);
13732
13796
  return (hAsync(Host, { class: {
13733
13797
  "duet-theme-turva": this.theme === "turva",
13734
13798
  "duet-expand": this.expand,
@@ -13918,6 +13982,7 @@ class DuetPagination {
13918
13982
  await this.setFocus();
13919
13983
  }
13920
13984
  }
13985
+ return true;
13921
13986
  };
13922
13987
  //helper to emit relevant page events
13923
13988
  this.emitPageEvent = debounce((ev, passedPage) => {
@@ -13931,7 +13996,7 @@ class DuetPagination {
13931
13996
  type: "page",
13932
13997
  originalEvent: ev,
13933
13998
  });
13934
- }, 500);
13999
+ }, 100);
13935
14000
  // this will return the entered number, or the current page if the user presses enter
13936
14001
  this.getEnteredNumber = debounce(ev => {
13937
14002
  this.emitPageEvent(ev, this.numbersStore);
@@ -13949,7 +14014,7 @@ class DuetPagination {
13949
14014
  }, 500);
13950
14015
  }
13951
14016
  watchStateHandler(newValue, oldValue) {
13952
- this.actionChain(newValue, oldValue);
14017
+ return this.actionChain(newValue, oldValue);
13953
14018
  }
13954
14019
  /**
13955
14020
  * Component lifecycle events.
@@ -13977,6 +14042,7 @@ class DuetPagination {
13977
14042
  e.preventDefault();
13978
14043
  e.stopPropagation();
13979
14044
  this.current = this.current + dir;
14045
+ this.emitPageEvent(e);
13980
14046
  }
13981
14047
  //handle a11y keyboard navigation events
13982
14048
  async onKeyboardDown(e) {
@@ -14019,8 +14085,9 @@ class DuetPagination {
14019
14085
  sectionClickHandler(e, direction) {
14020
14086
  e.preventDefault();
14021
14087
  let next = this.internalSectionIndex + direction;
14022
- if (next >= this.totalPages / this.take) {
14023
- next = this.totalPages / this.take - 1;
14088
+ const takePerVisibleItems = this.take * this.visibleItems;
14089
+ if (next * takePerVisibleItems > this.total) {
14090
+ next = this.internalSectionIndex;
14024
14091
  }
14025
14092
  const newSection = next;
14026
14093
  this.internalSectionIndex = newSection >= 0 ? newSection : 0;
@@ -14030,12 +14097,14 @@ class DuetPagination {
14030
14097
  e.preventDefault();
14031
14098
  this.internalSectionIndex = 0;
14032
14099
  this.current = 1;
14100
+ this.emitPageEvent(e);
14033
14101
  }
14034
14102
  //handles click on the jump (total) button
14035
14103
  jumpToEnd(e) {
14036
14104
  e.preventDefault();
14037
- this.internalSectionIndex = this.totalPages / this.take - 1;
14105
+ this.internalSectionIndex = Math.ceil(this.totalPages / this.take - 1);
14038
14106
  this.current = this.totalPages;
14107
+ this.emitPageEvent(e);
14039
14108
  }
14040
14109
  // render the individual page numbers
14041
14110
  renderPageNumbers() {
@@ -14075,7 +14144,7 @@ class DuetPagination {
14075
14144
  }, role: "menubar", "aria-label": this.accessibleLabels.pagination_label, "aria-description": this.accessibleLabels.description }, hAsync("li", { class: {
14076
14145
  "duet-pagination-page-button": true,
14077
14146
  "duet-pagination-button-first": true,
14078
- }, role: "menuitem", part: "navigation-arrow" }, hAsync("duet-action-button", { disabled: this.internalSectionIndex === 0 && this.current <= 1, "data-direction": "back", onClick: e => this.onMouseHandler(e, -1), "aria-label": this.accessibleLabels.previous_page, "icon-name": "action-arrow-left-small" })), this.internalSectionIndex !== 0 && this.shouldDisplayNavigation() && (hAsync(Fragment, null, hAsync("li", { class: "duet-pagination-item", role: "menuitem", part: "navigation-jump" }, hAsync("duet-button", { class: "duet-pagination-link", "center-text": "true", variation: "plain", color: "secondary", margin: "none", accessibleLabel: this.accessibleLabels.first_page, onClick: e => this.jumpToStart(e) }, hAsync("div", { class: "duet-pagination-page-number" }, "1"))), hAsync("li", { class: "duet-pagination-item", role: "menuitem", part: "navigation-section" }, hAsync("duet-button", { class: "duet-pagination-link", "center-text": "true", color: "secondary", variation: "plain", margin: "none", accessibleLabel: this.accessibleLabels.prev_section.replace("{0}", `${this.visibleItems}`), onClick: e => this.sectionClickHandler(e, -1) }, hAsync("div", { class: "duet-pagination-page-number", "aria-hidden": "true" }, "..."))))), this.renderPageNumbers(), this.internalSectionIndex !== this.totalPages / this.visibleItems - 1 && this.shouldDisplayNavigation() && (hAsync(Fragment, null, hAsync("li", { class: "duet-pagination-item", role: "menuitem", part: "navigation-section" }, hAsync("duet-button", { class: "duet-pagination-link", "center-text": "true", color: "secondary", variation: "plain", margin: "none", accessibleLabel: this.accessibleLabels.next_section.replace("{0}", `${this.visibleItems}`), onClick: e => this.sectionClickHandler(e, 1) }, hAsync("div", { class: "duet-pagination-page-number", "aria-hidden": "true" }, "..."))), hAsync("li", { class: "duet-pagination-item", role: "menuitem", part: "navigation-jump" }, hAsync("duet-button", { class: "duet-pagination-link", "center-text": "true", color: "secondary", variation: "plain", margin: "none", accessibleLabel: this.accessibleLabels.last_page, onClick: e => this.jumpToEnd(e) }, hAsync("div", { class: "duet-pagination-page-number" }, this.totalPages))))), hAsync("li", { class: {
14147
+ }, role: "menuitem", part: "navigation-arrow" }, hAsync("duet-action-button", { disabled: this.internalSectionIndex === 0 && this.current <= 1, "data-direction": "back", onClick: e => this.onMouseHandler(e, -1), "aria-label": this.accessibleLabels.previous_page, "icon-name": "action-arrow-left-small" })), this.internalSectionIndex !== 0 && this.shouldDisplayNavigation() && (hAsync(Fragment, null, hAsync("li", { class: "duet-pagination-item", role: "menuitem", part: "navigation-jump" }, hAsync("duet-button", { class: "duet-pagination-link duet-pagination-link-jump-back", "center-text": "true", variation: "plain", color: "secondary", margin: "none", accessibleLabel: this.accessibleLabels.first_page, onClick: e => this.jumpToStart(e) }, hAsync("div", { class: "duet-pagination-page-number" }, "1"))), hAsync("li", { class: "duet-pagination-item", role: "menuitem", part: "navigation-section" }, hAsync("duet-button", { class: "duet-pagination-link duet-pagination-link-dots-back", "center-text": "true", color: "secondary", variation: "plain", margin: "none", accessibleLabel: this.accessibleLabels.prev_section.replace("{0}", `${this.visibleItems}`), onClick: e => this.sectionClickHandler(e, -1) }, hAsync("div", { class: "duet-pagination-page-number", "aria-hidden": "true" }, "..."))))), this.renderPageNumbers(), this.internalSectionIndex * (this.visibleItems + 2) < this.totalPages && this.shouldDisplayNavigation() && (hAsync(Fragment, null, hAsync("li", { class: "duet-pagination-item", role: "menuitem", part: "navigation-section" }, hAsync("duet-button", { class: "duet-pagination-link duet-pagination-link-dots-forward", "center-text": "true", color: "secondary", variation: "plain", margin: "none", accessibleLabel: this.accessibleLabels.next_section.replace("{0}", `${this.visibleItems}`), onClick: e => this.sectionClickHandler(e, 1) }, hAsync("div", { class: "duet-pagination-page-number", "aria-hidden": "true" }, "..."))), hAsync("li", { class: "duet-pagination-item", role: "menuitem", part: "navigation-jump" }, hAsync("duet-button", { class: "duet-pagination-link duet-pagination-link-jump-forward", "center-text": "true", color: "secondary", variation: "plain", margin: "none", accessibleLabel: this.accessibleLabels.last_page, onClick: e => this.jumpToEnd(e) }, hAsync("div", { class: "duet-pagination-page-number" }, this.totalPages))))), hAsync("li", { class: {
14079
14148
  "duet-pagination-page-button": true,
14080
14149
  "duet-pagination-button-last": true,
14081
14150
  }, role: "menuitem", part: "navigation-arrow" }, hAsync("duet-action-button", { disabled: this.current === this.totalPages &&
@@ -14099,9 +14168,9 @@ class DuetPagination {
14099
14168
  "accessibleDescription": [1, "accessible-description"],
14100
14169
  "accessibleLabelsDefaults": [16],
14101
14170
  "accessibleLabels": [16],
14102
- "take": [1026],
14103
- "visibleItems": [1026, "visible-items"],
14104
- "total": [1026],
14171
+ "take": [2],
14172
+ "visibleItems": [2, "visible-items"],
14173
+ "total": [2],
14105
14174
  "ariaControls": [1, "accessible-controls"],
14106
14175
  "current": [1026],
14107
14176
  "numbersStore": [32],
@@ -14846,15 +14915,15 @@ class DuetRangeStepper {
14846
14915
  this.handleStepClick(e);
14847
14916
  };
14848
14917
  }
14849
- watchStateHandler(newValue) {
14850
- if (newValue === 1) {
14918
+ watchStepIndexStateHandler(newValue) {
14919
+ if (newValue <= 1) {
14851
14920
  this.leftBnRef.setAttribute("disabled", "");
14852
14921
  this.rightBnRef.focus();
14853
14922
  }
14854
14923
  else {
14855
14924
  this.leftBnRef.removeAttribute("disabled");
14856
14925
  }
14857
- if (newValue === this.total / this.stepSize) {
14926
+ if (newValue >= this.total / this.stepSize) {
14858
14927
  this.rightBnRef.setAttribute("disabled", "");
14859
14928
  this.leftBnRef.focus();
14860
14929
  }
@@ -14862,12 +14931,20 @@ class DuetRangeStepper {
14862
14931
  this.rightBnRef.removeAttribute("disabled");
14863
14932
  }
14864
14933
  }
14934
+ watchStepSizeStateHandler(newValue, oldValue) {
14935
+ if (newValue !== oldValue) {
14936
+ if (this.stepIndex * newValue > this.total) {
14937
+ this.stepIndex = this.total / newValue;
14938
+ }
14939
+ }
14940
+ }
14865
14941
  handleStepClick(e) {
14942
+ const from = this.stepIndex * this.stepSize - this.stepSize;
14866
14943
  this.duetRangeStepUpdate.emit({
14867
14944
  originalEvent: e,
14868
14945
  component: "duet-range-stepper",
14869
- from: this.stepIndex * this.stepSize - this.stepSize,
14870
- to: this.stepIndex * this.stepSize,
14946
+ from: from,
14947
+ to: this.getTo(),
14871
14948
  index: this.stepIndex,
14872
14949
  });
14873
14950
  }
@@ -14875,7 +14952,7 @@ class DuetRangeStepper {
14875
14952
  inheritGlobalTheme(this);
14876
14953
  }
14877
14954
  componentDidLoad() {
14878
- this.watchStateHandler(this.stepIndex);
14955
+ this.watchStepIndexStateHandler(this.stepIndex);
14879
14956
  }
14880
14957
  increment(direction) {
14881
14958
  const newIndex = this.stepIndex + direction;
@@ -14883,20 +14960,28 @@ class DuetRangeStepper {
14883
14960
  this.stepIndex = 1;
14884
14961
  }
14885
14962
  else {
14886
- if (newIndex * this.stepSize <= this.total) {
14963
+ if (newIndex * this.stepSize < this.total + this.stepSize) {
14887
14964
  this.stepIndex = newIndex;
14888
14965
  }
14966
+ else if (newIndex * this.stepSize > this.total + this.stepSize) {
14967
+ this.stepIndex = Math.floor(this.total / this.stepSize);
14968
+ }
14889
14969
  }
14890
14970
  }
14971
+ getTo() {
14972
+ const to = this.stepIndex * this.stepSize;
14973
+ const result = to > this.total ? this.total : to;
14974
+ return result;
14975
+ }
14891
14976
  generateStepSize() {
14892
14977
  // this function uses this.stepIndex and this.range to generate a range of number like 1-100
14893
14978
  // this is used to generate the step size
14894
- let start = (this.stepIndex - 1) * this.stepSize;
14979
+ let start = Math.floor((this.stepIndex - 1) * this.stepSize);
14895
14980
  //easy fix for starting position
14896
14981
  if (start === 0) {
14897
14982
  start = 1;
14898
14983
  }
14899
- const end = this.stepIndex * this.stepSize;
14984
+ const end = Math.floor(this.stepIndex * this.stepSize);
14900
14985
  return this.ariaLabels.x_of_y
14901
14986
  .replace("{0}", String(start))
14902
14987
  .replace("{1}", String(end))
@@ -14934,7 +15019,8 @@ class DuetRangeStepper {
14934
15019
  }
14935
15020
  get element() { return getElement(this); }
14936
15021
  static get watchers() { return {
14937
- "stepIndex": ["watchStateHandler"]
15022
+ "stepIndex": ["watchStepIndexStateHandler"],
15023
+ "stepSize": ["watchStepSizeStateHandler"]
14938
15024
  }; }
14939
15025
  static get style() { return duetRangeStepperCss; }
14940
15026
  static get cmpMeta() { return {
@@ -16003,7 +16089,7 @@ class DuetTabGroup {
16003
16089
  }; }
16004
16090
  }
16005
16091
 
16006
- const duetTableCss = "duet-table{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;margin-bottom:20px !important;display:block;font-variant-numeric:tabular-nums}duet-table table,duet-table thead,duet-table tbody,duet-table tfoot,duet-table th,duet-table td,duet-table tr{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}duet-table.duet-m-0{margin:0 !important}duet-table table{width:100%;font-family:\"localtapiola-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";font-size:1rem;text-align:left;border-spacing:0;border-collapse:separate}duet-table.duet-theme-turva table{font-family:\"turva-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"}duet-table td{-webkit-hyphens:auto;hyphens:auto;color:#00294d}duet-table.duet-theme-turva td{color:#171c3a}duet-table th{font-weight:600;line-height:1.25;color:#657787;text-align:left}duet-table.duet-theme-turva th{color:#747475}duet-table tbody th{font-weight:600;color:#00294d}duet-table.duet-theme-turva tbody th{color:#171c3a}duet-table .duet-table-action-row td:last-child{justify-self:end;padding-right:20px !important;white-space:nowrap}.duet-table-flattened tbody tr{display:grid;grid-template-columns:repeat(2, 1fr);grid-auto-rows:auto;gap:10px}.duet-table-flattened tbody tr.duet-table-action-row td:last-child::before{padding:0;content:\"\"}.duet-table-flattened thead tr{position:absolute !important;top:0;width:1px !important;height:1px !important;padding:0 !important;overflow:hidden !important;clip:rect(1px, 1px, 1px, 1px) !important;border:0 !important}.duet-table-flattened td{grid-column:1/2;line-height:1.25}.duet-table-flattened td:not(:last-child){margin-bottom:16px !important}.duet-table-flattened td:first-child{grid-row:1;grid-column:1}.duet-table-flattened td:last-child{grid-row:1;grid-column:2}.duet-table-flattened tbody td,.duet-table-flattened tbody th,.duet-table-flattened tfoot td{padding:0 !important;text-align:left !important}.duet-table-flattened tbody th{font-weight:600;line-height:1.25;color:#657787;text-align:left}.duet-table-flattened td[data-heading]::before{margin-bottom:4px !important;display:block;font-size:1rem;font-weight:600;color:#00294d;content:attr(data-heading)}.duet-table-flattened.duet-theme-turva td[data-heading]::before{color:#171c3a}.duet-table-sticky thead th{position:sticky;top:0;background:white}.duet-table-striped td,.duet-table-striped th{padding:20px !important}@media (max-width: 35.9375em){.duet-table-striped td,.duet-table-striped th{padding:20px 12px !important}}.duet-table-striped tbody th{background:white}.duet-table-striped.duet-table-sticky thead th{border-bottom:1px solid #e1e3e6}.duet-table-striped.duet-table-sticky.duet-theme-turva thead th{border-bottom-color:#e4e4e6}.duet-table-striped tbody:not(:first-of-type) th{padding-top:40px !important}.duet-table-striped tbody:only-of-type tr:nth-of-type(odd){background:rgba(0, 80, 128, 0.04)}.duet-table-striped.duet-theme-turva tbody:only-of-type tr:nth-of-type(odd){background:rgba(23, 28, 58, 0.04)}.duet-table-striped tbody:not(:only-of-type) tr:nth-of-type(even){background:rgba(0, 80, 128, 0.04)}.duet-table-striped.duet-theme-turva tbody:not(:only-of-type) tr:nth-of-type(even){background:rgba(23, 28, 58, 0.04)}.duet-table-striped tfoot td{border-top:1px solid #e1e3e6}.duet-table-striped.duet-theme-turva tfoot td{border-top-color:#e4e4e6}.duet-table-striped.duet-table-flattened tbody:not(:first-of-type) th{padding-top:20px !important}.duet-table-striped.duet-table-flattened tr{padding:20px !important}.duet-table-striped.duet-table-flattened tfoot td{border-top:0}.duet-table-striped.duet-table-flattened tfoot tr{border-top:1px solid #e1e3e6}.duet-table-striped.duet-table-flattened.duet-theme-turva tfoot tr{border-top-color:#e4e4e6}.duet-table-fixed th,.duet-table-minimal th,.duet-table-plain th{padding:16px !important;border-bottom:1px solid #657787}.duet-table-fixed th:first-child,.duet-table-minimal th:first-child,.duet-table-plain th:first-child{padding-left:0 !important}.duet-table-fixed th:last-child,.duet-table-minimal th:last-child,.duet-table-plain th:last-child{padding-right:0 !important}.duet-theme-turva.duet-table-fixed th,.duet-theme-turva.duet-table-minimal th,.duet-theme-turva.duet-table-plain th{border-bottom-color:#444445}.duet-table-fixed tbody th,.duet-table-minimal tbody th,.duet-table-plain tbody th{padding-top:40px !important;border-bottom-color:#e1e3e6}.duet-theme-turva.duet-table-fixed tbody th,.duet-theme-turva.duet-table-minimal tbody th,.duet-theme-turva.duet-table-plain tbody th{border-bottom-color:#e4e4e6}.duet-table-fixed td,.duet-table-minimal td,.duet-table-plain td{padding:16px !important}.duet-table-fixed td:first-child,.duet-table-minimal td:first-child,.duet-table-plain td:first-child{padding-left:0 !important}.duet-table-fixed td:last-child,.duet-table-minimal td:last-child,.duet-table-plain td:last-child{padding-right:0 !important}.duet-table-fixed tbody td,.duet-table-minimal tbody td,.duet-table-plain tbody td{border-bottom:1px solid #e1e3e6}.duet-theme-turva.duet-table-fixed tbody td,.duet-theme-turva.duet-table-minimal tbody td,.duet-theme-turva.duet-table-plain tbody td{border-bottom-color:#e4e4e6}.duet-table-flattened.duet-table-fixed tbody:first-of-type th,.duet-table-flattened.duet-table-minimal tbody:first-of-type th,.duet-table-flattened.duet-table-plain tbody:first-of-type th{padding-top:0 !important}.duet-table-flattened.duet-table-fixed td,.duet-table-flattened.duet-table-minimal td,.duet-table-flattened.duet-table-plain td,.duet-table-flattened.duet-table-fixed tbody th,.duet-table-flattened.duet-table-minimal tbody th,.duet-table-flattened.duet-table-plain tbody th{border-bottom:0}.duet-table-flattened.duet-table-fixed tr,.duet-table-flattened.duet-table-minimal tr,.duet-table-flattened.duet-table-plain tr{padding:20px 0 !important}.duet-table-flattened.duet-table-fixed tbody th,.duet-table-flattened.duet-table-minimal tbody th,.duet-table-flattened.duet-table-plain tbody th{padding-top:20px !important}.duet-table-flattened.duet-table-fixed tfoot td,.duet-table-flattened.duet-table-minimal tfoot td,.duet-table-flattened.duet-table-plain tfoot td{margin-bottom:4px !important}.duet-table-flattened.duet-table-fixed tbody:not(:only-of-type) tr:first-child,.duet-table-flattened.duet-table-minimal tbody:not(:only-of-type) tr:first-child,.duet-table-flattened.duet-table-plain tbody:not(:only-of-type) tr:first-child{border-bottom:0}.duet-table-plain.duet-table-flattened tbody tr{border-bottom:1px solid #e1e3e6}.duet-table-plain.duet-table-flattened.duet-theme-turva tbody tr{border-bottom-color:#e4e4e6}.duet-table-minimal tbody tr,.duet-table-minimal tbody tr td{vertical-align:top;border-bottom:0 none}.duet-table-minimal tbody tr:last-of-type,.duet-table-minimal tbody tr:last-of-type td{border-bottom:1px solid #e1e3e6}.duet-table-minimal.duet-table-flattened tbody tr,.duet-table-minimal.duet-table-flattened tbody tr td{border-bottom:0 none}.duet-table-minimal.duet-table-flattened tbody tr td[data-heading]::before{display:none}.duet-table-minimal.duet-table-flattened tfoot{border-top:1px solid #e1e3e6}.duet-table-minimal.duet-table-flattened.duet-theme-turva tfoot{border-top-color:#e4e4e6}.duet-table-fixed table{table-layout:fixed}.duet-table-fixed tbody tr,.duet-table-fixed tbody tr td,.duet-table-fixed tbody tr td:first-child{padding:4px !important;vertical-align:text-bottom;border-bottom:0 none}.duet-table-fixed thead{display:none}.duet-table-fixed tbody tr,.duet-table-fixed tbody tr td{border-bottom:0 none}.duet-table-fixed:not(.duet-table-flattened) tfoot{border-top:1px solid #e1e3e6}.duet-table-fixed:not(.duet-table-flattened).duet-theme-turva tfoot{border-top-color:#e4e4e6}.duet-table-scrollable{position:relative;width:100%;overflow-x:auto;background:linear-gradient(90deg, #fff 0%, rgba(255, 255, 255, 0)), linear-gradient(-90deg, #fff 0%, rgba(255, 255, 255, 0)) 100% 0, radial-gradient(farthest-side at 0% 50%, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0)), radial-gradient(farthest-side at 100% 50%, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0)) 100% 0%;background-repeat:no-repeat;background-attachment:local, local, scroll, scroll;background-size:100px 100%, 100px 100%, 12px 100%, 12px 100%}.duet-table-selected-column{background:rgba(0, 119, 179, 0.08)}.duet-theme-turva .duet-table-selected-column{background:rgba(68, 68, 69, 0.08)}.duet-table-sortable tbody tr td:first-child,.duet-table-sortable thead tr th:first-child{padding:20px}.duet-table-sortable:not(.duet-table-flattened) tfoot{border-top:1px solid #e1e3e6}.duet-table-sortable:not(.duet-table-flattened).duet-theme-turva tfoot{border-top-color:#e4e4e6}.duet-table-actions table{table-layout:auto}.duet-table-actions thead th:last-child{width:1px;white-space:nowrap}";
16092
+ const duetTableCss = "duet-table{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none;margin-bottom:20px !important;display:block;font-variant-numeric:tabular-nums}duet-table table,duet-table thead,duet-table tbody,duet-table tfoot,duet-table th,duet-table td,duet-table tr{box-sizing:border-box;padding:0;margin:0;background:transparent;border:0;-moz-appearance:none;-webkit-appearance:none;appearance:none}duet-table.duet-m-0{margin:0 !important}duet-table table{width:100%;font-family:\"localtapiola-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";font-size:1rem;text-align:left;border-spacing:0;border-collapse:separate}duet-table.duet-theme-turva table{font-family:\"turva-sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"}duet-table td{-webkit-hyphens:auto;hyphens:auto;color:#00294d}duet-table.duet-theme-turva td{color:#171c3a}duet-table th{font-weight:600;line-height:1.25;color:#657787;text-align:left}duet-table.duet-theme-turva th{color:#747475}duet-table tbody th{font-weight:600;color:#00294d}duet-table.duet-theme-turva tbody th{color:#171c3a}duet-table .duet-table-action-row td:last-child{justify-self:end;padding-right:20px !important;white-space:nowrap}.duet-table-flattened table,.duet-table-flattened thead,.duet-table-flattened tbody,.duet-table-flattened tfoot,.duet-table-flattened th,.duet-table-flattened td,.duet-table-flattened tr{display:block}.duet-table-flattened thead tr{position:absolute !important;top:0;width:1px !important;height:1px !important;padding:0 !important;overflow:hidden !important;clip:rect(1px, 1px, 1px, 1px) !important;border:0 !important}.duet-table-flattened td{line-height:1.25}.duet-table-flattened td:not(:last-child){margin-bottom:16px !important}.duet-table-flattened tbody td,.duet-table-flattened tbody th,.duet-table-flattened tfoot td{padding:0 !important;text-align:left !important}.duet-table-flattened tbody th{font-weight:600;line-height:1.25;color:#657787;text-align:left}.duet-table-flattened td[data-heading]::before{margin-bottom:4px !important;display:block;font-size:1rem;font-weight:600;color:#00294d;content:attr(data-heading)}.duet-table-flattened.duet-theme-turva td[data-heading]::before{color:#171c3a}.duet-table-sticky thead th{position:sticky;top:0;background:white}.duet-table-striped td,.duet-table-striped th{padding:20px !important}@media (max-width: 35.9375em){.duet-table-striped td,.duet-table-striped th{padding:20px 12px !important}}.duet-table-striped tbody th{background:white}.duet-table-striped.duet-table-sticky thead th{border-bottom:1px solid #e1e3e6}.duet-table-striped.duet-table-sticky.duet-theme-turva thead th{border-bottom-color:#e4e4e6}.duet-table-striped tbody:not(:first-of-type) th{padding-top:40px !important}.duet-table-striped tbody:only-of-type tr:nth-of-type(odd){background:rgba(0, 80, 128, 0.04)}.duet-table-striped.duet-theme-turva tbody:only-of-type tr:nth-of-type(odd){background:rgba(23, 28, 58, 0.04)}.duet-table-striped tbody:not(:only-of-type) tr:nth-of-type(even){background:rgba(0, 80, 128, 0.04)}.duet-table-striped.duet-theme-turva tbody:not(:only-of-type) tr:nth-of-type(even){background:rgba(23, 28, 58, 0.04)}.duet-table-striped tfoot td{border-top:1px solid #e1e3e6}.duet-table-striped.duet-theme-turva tfoot td{border-top-color:#e4e4e6}.duet-table-striped.duet-table-flattened tbody:not(:first-of-type) th{padding-top:20px !important}.duet-table-striped.duet-table-flattened tr{padding:20px !important}.duet-table-striped.duet-table-flattened tfoot td{border-top:0}.duet-table-striped.duet-table-flattened tfoot tr{border-top:1px solid #e1e3e6}.duet-table-striped.duet-table-flattened.duet-theme-turva tfoot tr{border-top-color:#e4e4e6}.duet-table-fixed th,.duet-table-minimal th,.duet-table-plain th{padding:16px !important;border-bottom:1px solid #657787}.duet-table-fixed th:first-child,.duet-table-minimal th:first-child,.duet-table-plain th:first-child{padding-left:0 !important}.duet-table-fixed th:last-child,.duet-table-minimal th:last-child,.duet-table-plain th:last-child{padding-right:0 !important}.duet-theme-turva.duet-table-fixed th,.duet-theme-turva.duet-table-minimal th,.duet-theme-turva.duet-table-plain th{border-bottom-color:#444445}.duet-table-fixed tbody th,.duet-table-minimal tbody th,.duet-table-plain tbody th{padding-top:40px !important;border-bottom-color:#e1e3e6}.duet-theme-turva.duet-table-fixed tbody th,.duet-theme-turva.duet-table-minimal tbody th,.duet-theme-turva.duet-table-plain tbody th{border-bottom-color:#e4e4e6}.duet-table-fixed td,.duet-table-minimal td,.duet-table-plain td{padding:16px !important}.duet-table-fixed td:first-child,.duet-table-minimal td:first-child,.duet-table-plain td:first-child{padding-left:0 !important}.duet-table-fixed td:last-child,.duet-table-minimal td:last-child,.duet-table-plain td:last-child{padding-right:0 !important}.duet-table-fixed tbody td,.duet-table-minimal tbody td,.duet-table-plain tbody td{border-bottom:1px solid #e1e3e6}.duet-theme-turva.duet-table-fixed tbody td,.duet-theme-turva.duet-table-minimal tbody td,.duet-theme-turva.duet-table-plain tbody td{border-bottom-color:#e4e4e6}.duet-table-flattened.duet-table-fixed tbody:first-of-type th,.duet-table-flattened.duet-table-minimal tbody:first-of-type th,.duet-table-flattened.duet-table-plain tbody:first-of-type th{padding-top:0 !important}.duet-table-flattened.duet-table-fixed td,.duet-table-flattened.duet-table-minimal td,.duet-table-flattened.duet-table-plain td,.duet-table-flattened.duet-table-fixed tbody th,.duet-table-flattened.duet-table-minimal tbody th,.duet-table-flattened.duet-table-plain tbody th{border-bottom:0}.duet-table-flattened.duet-table-fixed tr,.duet-table-flattened.duet-table-minimal tr,.duet-table-flattened.duet-table-plain tr{padding:20px 0 !important}.duet-table-flattened.duet-table-fixed tbody th,.duet-table-flattened.duet-table-minimal tbody th,.duet-table-flattened.duet-table-plain tbody th{padding-top:20px !important}.duet-table-flattened.duet-table-fixed tfoot td,.duet-table-flattened.duet-table-minimal tfoot td,.duet-table-flattened.duet-table-plain tfoot td{margin-bottom:4px !important}.duet-table-flattened.duet-table-fixed tbody:not(:only-of-type) tr:first-child,.duet-table-flattened.duet-table-minimal tbody:not(:only-of-type) tr:first-child,.duet-table-flattened.duet-table-plain tbody:not(:only-of-type) tr:first-child{border-bottom:0}.duet-table-plain.duet-table-flattened tbody tr{border-bottom:1px solid #e1e3e6}.duet-table-plain.duet-table-flattened.duet-theme-turva tbody tr{border-bottom-color:#e4e4e6}.duet-table-minimal tbody tr,.duet-table-minimal tbody tr td{vertical-align:top;border-bottom:0 none}.duet-table-minimal tbody tr:last-of-type,.duet-table-minimal tbody tr:last-of-type td{border-bottom:1px solid #e1e3e6}.duet-table-minimal.duet-table-flattened tbody tr,.duet-table-minimal.duet-table-flattened tbody tr td{border-bottom:0 none}.duet-table-minimal.duet-table-flattened tbody tr td[data-heading]::before{display:none}.duet-table-minimal.duet-table-flattened tfoot{border-top:1px solid #e1e3e6}.duet-table-minimal.duet-table-flattened.duet-theme-turva tfoot{border-top-color:#e4e4e6}.duet-table-fixed table{table-layout:fixed}.duet-table-fixed tbody tr,.duet-table-fixed tbody tr td,.duet-table-fixed tbody tr td:first-child{padding:4px !important;vertical-align:text-bottom;border-bottom:0 none}.duet-table-fixed thead{display:none}.duet-table-fixed tbody tr,.duet-table-fixed tbody tr td{border-bottom:0 none}.duet-table-fixed:not(.duet-table-flattened) tfoot{border-top:1px solid #e1e3e6}.duet-table-fixed:not(.duet-table-flattened).duet-theme-turva tfoot{border-top-color:#e4e4e6}.duet-table-scrollable{position:relative;width:100%;overflow-x:auto;background:linear-gradient(90deg, #fff 0%, rgba(255, 255, 255, 0)), linear-gradient(-90deg, #fff 0%, rgba(255, 255, 255, 0)) 100% 0, radial-gradient(farthest-side at 0% 50%, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0)), radial-gradient(farthest-side at 100% 50%, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0)) 100% 0%;background-repeat:no-repeat;background-attachment:local, local, scroll, scroll;background-size:100px 100%, 100px 100%, 12px 100%, 12px 100%}.duet-table-selected-column{background:rgba(0, 119, 179, 0.08)}.duet-theme-turva .duet-table-selected-column{background:rgba(68, 68, 69, 0.08)}.duet-table-sortable tbody tr td:first-child,.duet-table-sortable thead tr th:first-child{padding:20px}.duet-table-sortable:not(.duet-table-flattened) tfoot{border-top:1px solid #e1e3e6}.duet-table-sortable:not(.duet-table-flattened).duet-theme-turva tfoot{border-top-color:#e4e4e6}.duet-table-actions table{table-layout:auto}.duet-table-actions thead th:last-child{width:1px;white-space:nowrap}.duet-editable-table-table.duet-table-flattened tr{display:grid;grid-template-columns:repeat(2, 1fr);grid-auto-rows:auto;gap:10px}.duet-editable-table-table.duet-table-flattened tr.duet-table-action-row td:last-child::before{padding:0;content:\"\"}.duet-editable-table-table.duet-table-flattened td{grid-column:1/2}.duet-editable-table-table.duet-table-flattened td:first-child{grid-row:1;grid-column:1}.duet-editable-table-table.duet-table-flattened td:last-child{grid-row:1;grid-column:2}";
16007
16093
 
16008
16094
  // remove wrapping speech marks.
16009
16095
  // media query tokens are wrapped in speech marks,
@@ -19109,7 +19195,7 @@ const templateWindows = new Map, createHydrateBuildId = () => {
19109
19195
  }, commentre = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//g, getCssSelectors = e => {
19110
19196
  SELECTORS.all.length = SELECTORS.tags.length = SELECTORS.classNames.length = SELECTORS.ids.length = SELECTORS.attrs.length = 0;
19111
19197
  const t = (e = e.replace(/\./g, " .").replace(/\#/g, " #").replace(/\[/g, " [").replace(/\>/g, " > ").replace(/\+/g, " + ").replace(/\~/g, " ~ ").replace(/\*/g, " * ").replace(/\:not\((.*?)\)/g, " ")).split(" ");
19112
- for (let e = 0, r = t.length; e < r; e++) t[e] = t[e].split(":")[0], 0 !== t[e].length && ("." === t[e].charAt(0) ? SELECTORS.classNames.push(t[e].substr(1)) : "#" === t[e].charAt(0) ? SELECTORS.ids.push(t[e].substr(1)) : "[" === t[e].charAt(0) ? (t[e] = t[e].substr(1).split("=")[0].split("]")[0].trim(),
19198
+ for (let e = 0, r = t.length; e < r; e++) t[e] = t[e].split(":")[0], 0 !== t[e].length && ("." === t[e].charAt(0) ? SELECTORS.classNames.push(t[e].slice(1)) : "#" === t[e].charAt(0) ? SELECTORS.ids.push(t[e].slice(1)) : "[" === t[e].charAt(0) ? (t[e] = t[e].slice(1).split("=")[0].split("]")[0].trim(),
19113
19199
  SELECTORS.attrs.push(t[e].toLowerCase())) : /[a-z]/g.test(t[e].charAt(0)) && SELECTORS.tags.push(t[e].toLowerCase()));
19114
19200
  return SELECTORS.classNames = SELECTORS.classNames.sort(((e, t) => e.length < t.length ? -1 : e.length > t.length ? 1 : 0)),
19115
19201
  SELECTORS;