@nanoporetech-digital/components 2.10.1 → 2.13.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 (441) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/dist/cjs/{date-utils-0ae9a12d.js → date-utils-b3af910d.js} +2 -2
  3. package/dist/cjs/date-utils-b3af910d.js.map +1 -0
  4. package/dist/cjs/{global-0d4f3b77.js → global-989678ec.js} +1 -8
  5. package/dist/cjs/global-989678ec.js.map +1 -0
  6. package/dist/cjs/index.cjs.js +2 -0
  7. package/dist/cjs/index.cjs.js.map +1 -1
  8. package/dist/cjs/loader.cjs.js +2 -2
  9. package/dist/cjs/nano-algolia.cjs.entry.js +5 -1
  10. package/dist/cjs/nano-algolia.cjs.entry.js.map +1 -1
  11. package/dist/cjs/nano-components.cjs.js +2 -2
  12. package/dist/cjs/nano-datalist_3.cjs.entry.js +3 -1
  13. package/dist/cjs/nano-datalist_3.cjs.entry.js.map +1 -1
  14. package/dist/cjs/nano-date-input.cjs.entry.js +16 -5
  15. package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
  16. package/dist/cjs/nano-date-picker.cjs.entry.js +2 -2
  17. package/dist/cjs/nano-date-picker.cjs.entry.js.map +1 -1
  18. package/dist/cjs/nano-details.cjs.entry.js +1 -2
  19. package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
  20. package/dist/cjs/nano-field-validator.cjs.entry.js +292 -96
  21. package/dist/cjs/nano-field-validator.cjs.entry.js.map +1 -1
  22. package/dist/cjs/nano-file-upload.cjs.entry.js +5 -2
  23. package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
  24. package/dist/cjs/nano-global-search-results.cjs.entry.js +21 -6
  25. package/dist/cjs/nano-global-search-results.cjs.entry.js.map +1 -1
  26. package/dist/cjs/nano-grid_3.cjs.entry.js +1 -2
  27. package/dist/cjs/nano-grid_3.cjs.entry.js.map +1 -1
  28. package/dist/cjs/nano-icon-button.cjs.entry.js +4 -0
  29. package/dist/cjs/nano-icon-button.cjs.entry.js.map +1 -1
  30. package/dist/cjs/nano-input.cjs.entry.js +16 -3
  31. package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
  32. package/dist/cjs/nano-nav-item_2.cjs.entry.js +2 -0
  33. package/dist/cjs/nano-nav-item_2.cjs.entry.js.map +1 -1
  34. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +1 -2
  35. package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
  36. package/dist/cjs/nano-slides.cjs.entry.js +1 -2
  37. package/dist/cjs/nano-slides.cjs.entry.js.map +1 -1
  38. package/dist/cjs/nano-sticker.cjs.entry.js +2 -3
  39. package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
  40. package/dist/cjs/nano-tab-group.cjs.entry.js +4 -2
  41. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  42. package/dist/cjs/nano-tab.cjs.entry.js +5 -1
  43. package/dist/cjs/nano-tab.cjs.entry.js.map +1 -1
  44. package/dist/cjs/nano-tooltip.cjs.entry.js +1 -1
  45. package/dist/cjs/nano-tooltip.cjs.entry.js.map +1 -1
  46. package/dist/collection/components/accordion/accordion.js +1 -1
  47. package/dist/collection/components/alert/alert.js +1 -1
  48. package/dist/collection/components/algolia/algolia-filter.js +2 -2
  49. package/dist/collection/components/algolia/algolia-input.js +5 -5
  50. package/dist/collection/components/algolia/algolia-results.js +1 -1
  51. package/dist/collection/components/algolia/algolia.js +12 -6
  52. package/dist/collection/components/algolia/algolia.js.map +1 -1
  53. package/dist/collection/components/checkbox/checkbox-group.js +2 -2
  54. package/dist/collection/components/checkbox/checkbox.js +3 -3
  55. package/dist/collection/components/datalist/datalist.js +4 -2
  56. package/dist/collection/components/datalist/datalist.js.map +1 -1
  57. package/dist/collection/components/date-input/date-input.js +65 -11
  58. package/dist/collection/components/date-input/date-input.js.map +1 -1
  59. package/dist/collection/components/date-picker/date-picker.css +1 -1
  60. package/dist/collection/components/date-picker/date-picker.js +5 -5
  61. package/dist/collection/components/details/details.js +1 -2
  62. package/dist/collection/components/details/details.js.map +1 -1
  63. package/dist/collection/components/dialog/dialog.js +1 -1
  64. package/dist/collection/components/dropdown/dropdown.js +1 -1
  65. package/dist/collection/components/field-validator/field-validator-interface.js +5 -0
  66. package/dist/collection/components/field-validator/field-validator-interface.js.map +1 -0
  67. package/dist/collection/components/field-validator/field-validator.js +434 -113
  68. package/dist/collection/components/field-validator/field-validator.js.map +1 -1
  69. package/dist/collection/components/file-upload/file-upload.css +0 -1
  70. package/dist/collection/components/file-upload/file-upload.js +10 -7
  71. package/dist/collection/components/file-upload/file-upload.js.map +1 -1
  72. package/dist/collection/components/global-nav/global-nav.js +4 -4
  73. package/dist/collection/components/global-search-results/global-search-results.css +7 -0
  74. package/dist/collection/components/global-search-results/global-search-results.js +19 -4
  75. package/dist/collection/components/global-search-results/global-search-results.js.map +1 -1
  76. package/dist/collection/components/grid/grid-item.js +1 -1
  77. package/dist/collection/components/grid/grid.js +0 -1
  78. package/dist/collection/components/grid/grid.js.map +1 -1
  79. package/dist/collection/components/icon/icon.js +1 -1
  80. package/dist/collection/components/icon-button/icon-button.js +23 -1
  81. package/dist/collection/components/icon-button/icon-button.js.map +1 -1
  82. package/dist/collection/components/input/input.js +37 -8
  83. package/dist/collection/components/input/input.js.map +1 -1
  84. package/dist/collection/components/nav-item/nav-item.js +4 -4
  85. package/dist/collection/components/range/range.js +4 -4
  86. package/dist/collection/components/resize-observe/resize-observe.js +1 -2
  87. package/dist/collection/components/resize-observe/resize-observe.js.map +1 -1
  88. package/dist/collection/components/select/select.js +9 -7
  89. package/dist/collection/components/select/select.js.map +1 -1
  90. package/dist/collection/components/slides/slides.js +7 -8
  91. package/dist/collection/components/slides/slides.js.map +1 -1
  92. package/dist/collection/components/sticker/sticker.js +0 -1
  93. package/dist/collection/components/sticker/sticker.js.map +1 -1
  94. package/dist/collection/components/tabs/tab-group.js +5 -3
  95. package/dist/collection/components/tabs/tab-group.js.map +1 -1
  96. package/dist/collection/components/tabs/tab.js +5 -1
  97. package/dist/collection/components/tabs/tab.js.map +1 -1
  98. package/dist/collection/components/tooltip/tooltip.css +0 -1
  99. package/dist/collection/global/script/global.js +0 -7
  100. package/dist/collection/global/script/global.js.map +1 -1
  101. package/dist/collection/index.js +1 -0
  102. package/dist/collection/index.js.map +1 -1
  103. package/dist/collection/utils/date-utils.js +1 -1
  104. package/dist/collection/utils/date-utils.js.map +1 -1
  105. package/dist/components/algolia.js +5 -1
  106. package/dist/components/algolia.js.map +1 -1
  107. package/dist/components/datalist.js +3 -1
  108. package/dist/components/datalist.js.map +1 -1
  109. package/dist/components/date-picker.js +2 -2
  110. package/dist/components/date-picker.js.map +1 -1
  111. package/dist/components/grid.js +1 -2
  112. package/dist/components/grid.js.map +1 -1
  113. package/dist/components/icon-button.js +6 -1
  114. package/dist/components/icon-button.js.map +1 -1
  115. package/dist/components/index.js +1 -7
  116. package/dist/components/index.js.map +1 -1
  117. package/dist/components/input.js +17 -3
  118. package/dist/components/input.js.map +1 -1
  119. package/dist/components/nano-date-input.js +17 -4
  120. package/dist/components/nano-date-input.js.map +1 -1
  121. package/dist/components/nano-details.js +1 -2
  122. package/dist/components/nano-details.js.map +1 -1
  123. package/dist/components/nano-field-validator.js +300 -99
  124. package/dist/components/nano-field-validator.js.map +1 -1
  125. package/dist/components/nano-file-upload.js +6 -3
  126. package/dist/components/nano-file-upload.js.map +1 -1
  127. package/dist/components/nano-global-search-results.js +21 -6
  128. package/dist/components/nano-global-search-results.js.map +1 -1
  129. package/dist/components/nano-slides.js +1 -2
  130. package/dist/components/nano-slides.js.map +1 -1
  131. package/dist/components/nano-tab-group.js +4 -2
  132. package/dist/components/nano-tab-group.js.map +1 -1
  133. package/dist/components/nano-tab.js +5 -1
  134. package/dist/components/nano-tab.js.map +1 -1
  135. package/dist/components/resize-observe.js +1 -2
  136. package/dist/components/resize-observe.js.map +1 -1
  137. package/dist/components/select.js +2 -0
  138. package/dist/components/select.js.map +1 -1
  139. package/dist/components/sticker.js +2 -3
  140. package/dist/components/sticker.js.map +1 -1
  141. package/dist/components/tooltip.js +1 -1
  142. package/dist/components/tooltip.js.map +1 -1
  143. package/dist/custom-elements/index.js +386 -2046
  144. package/dist/custom-elements/index.js.map +1 -1
  145. package/dist/esm/{date-utils-e4b757ff.js → date-utils-839cb010.js} +2 -2
  146. package/dist/esm/date-utils-839cb010.js.map +1 -0
  147. package/dist/esm/{global-d5ec4d53.js → global-8047b4ff.js} +1 -8
  148. package/dist/esm/global-8047b4ff.js.map +1 -0
  149. package/dist/esm/index.js +1 -0
  150. package/dist/esm/index.js.map +1 -1
  151. package/dist/esm/loader.js +2 -2
  152. package/dist/esm/nano-algolia.entry.js +5 -1
  153. package/dist/esm/nano-algolia.entry.js.map +1 -1
  154. package/dist/esm/nano-components.js +2 -2
  155. package/dist/esm/nano-datalist_3.entry.js +3 -1
  156. package/dist/esm/nano-datalist_3.entry.js.map +1 -1
  157. package/dist/esm/nano-date-input.entry.js +16 -5
  158. package/dist/esm/nano-date-input.entry.js.map +1 -1
  159. package/dist/esm/nano-date-picker.entry.js +2 -2
  160. package/dist/esm/nano-date-picker.entry.js.map +1 -1
  161. package/dist/esm/nano-details.entry.js +1 -2
  162. package/dist/esm/nano-details.entry.js.map +1 -1
  163. package/dist/esm/nano-field-validator.entry.js +292 -96
  164. package/dist/esm/nano-field-validator.entry.js.map +1 -1
  165. package/dist/esm/nano-file-upload.entry.js +5 -2
  166. package/dist/esm/nano-file-upload.entry.js.map +1 -1
  167. package/dist/esm/nano-global-search-results.entry.js +21 -6
  168. package/dist/esm/nano-global-search-results.entry.js.map +1 -1
  169. package/dist/esm/nano-grid_3.entry.js +1 -2
  170. package/dist/esm/nano-grid_3.entry.js.map +1 -1
  171. package/dist/esm/nano-icon-button.entry.js +4 -0
  172. package/dist/esm/nano-icon-button.entry.js.map +1 -1
  173. package/dist/esm/nano-input.entry.js +16 -3
  174. package/dist/esm/nano-input.entry.js.map +1 -1
  175. package/dist/esm/nano-nav-item_2.entry.js +2 -0
  176. package/dist/esm/nano-nav-item_2.entry.js.map +1 -1
  177. package/dist/esm/nano-resize-observe_2.entry.js +1 -2
  178. package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
  179. package/dist/esm/nano-slides.entry.js +1 -2
  180. package/dist/esm/nano-slides.entry.js.map +1 -1
  181. package/dist/esm/nano-sticker.entry.js +2 -3
  182. package/dist/esm/nano-sticker.entry.js.map +1 -1
  183. package/dist/esm/nano-tab-group.entry.js +4 -2
  184. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  185. package/dist/esm/nano-tab.entry.js +5 -1
  186. package/dist/esm/nano-tab.entry.js.map +1 -1
  187. package/dist/esm/nano-tooltip.entry.js +1 -1
  188. package/dist/esm/nano-tooltip.entry.js.map +1 -1
  189. package/dist/esm-es5/date-utils-839cb010.js +5 -0
  190. package/dist/esm-es5/date-utils-839cb010.js.map +1 -0
  191. package/dist/esm-es5/{global-d5ec4d53.js → global-8047b4ff.js} +2 -2
  192. package/dist/esm-es5/global-8047b4ff.js.map +1 -0
  193. package/dist/esm-es5/index.js +2 -2
  194. package/dist/esm-es5/index.js.map +1 -1
  195. package/dist/esm-es5/loader.js +1 -1
  196. package/dist/esm-es5/loader.js.map +1 -1
  197. package/dist/esm-es5/nano-algolia.entry.js +1 -1
  198. package/dist/esm-es5/nano-algolia.entry.js.map +1 -1
  199. package/dist/esm-es5/nano-components.js +1 -1
  200. package/dist/esm-es5/nano-components.js.map +1 -1
  201. package/dist/esm-es5/nano-datalist_3.entry.js +1 -1
  202. package/dist/esm-es5/nano-datalist_3.entry.js.map +1 -1
  203. package/dist/esm-es5/nano-date-input.entry.js +1 -1
  204. package/dist/esm-es5/nano-date-input.entry.js.map +1 -1
  205. package/dist/esm-es5/nano-date-picker.entry.js +1 -1
  206. package/dist/esm-es5/nano-date-picker.entry.js.map +1 -1
  207. package/dist/esm-es5/nano-details.entry.js +1 -1
  208. package/dist/esm-es5/nano-details.entry.js.map +1 -1
  209. package/dist/esm-es5/nano-field-validator.entry.js +2 -2
  210. package/dist/esm-es5/nano-field-validator.entry.js.map +1 -1
  211. package/dist/esm-es5/nano-file-upload.entry.js +1 -1
  212. package/dist/esm-es5/nano-file-upload.entry.js.map +1 -1
  213. package/dist/esm-es5/nano-global-search-results.entry.js +1 -1
  214. package/dist/esm-es5/nano-global-search-results.entry.js.map +1 -1
  215. package/dist/esm-es5/nano-grid_3.entry.js +1 -1
  216. package/dist/esm-es5/nano-grid_3.entry.js.map +1 -1
  217. package/dist/esm-es5/nano-icon-button.entry.js +2 -2
  218. package/dist/esm-es5/nano-icon-button.entry.js.map +1 -1
  219. package/dist/esm-es5/nano-input.entry.js +1 -1
  220. package/dist/esm-es5/nano-input.entry.js.map +1 -1
  221. package/dist/esm-es5/nano-nav-item_2.entry.js +1 -1
  222. package/dist/esm-es5/nano-nav-item_2.entry.js.map +1 -1
  223. package/dist/esm-es5/nano-resize-observe_2.entry.js +1 -1
  224. package/dist/esm-es5/nano-resize-observe_2.entry.js.map +1 -1
  225. package/dist/esm-es5/nano-slides.entry.js +2 -2
  226. package/dist/esm-es5/nano-slides.entry.js.map +1 -1
  227. package/dist/esm-es5/nano-sticker.entry.js +1 -1
  228. package/dist/esm-es5/nano-sticker.entry.js.map +1 -1
  229. package/dist/esm-es5/nano-tab-group.entry.js +2 -2
  230. package/dist/esm-es5/nano-tab-group.entry.js.map +1 -1
  231. package/dist/esm-es5/nano-tab.entry.js +2 -2
  232. package/dist/esm-es5/nano-tab.entry.js.map +1 -1
  233. package/dist/esm-es5/nano-tooltip.entry.js +1 -1
  234. package/dist/esm-es5/nano-tooltip.entry.js.map +1 -1
  235. package/dist/nano-components/index.esm.js +1 -1
  236. package/dist/nano-components/index.esm.js.map +1 -1
  237. package/dist/nano-components/nano-components.esm.js +1 -1
  238. package/dist/nano-components/nano-components.esm.js.map +1 -1
  239. package/dist/nano-components/nano-components.js +1 -1
  240. package/dist/nano-components/p-018b7047.entry.js +5 -0
  241. package/dist/nano-components/p-018b7047.entry.js.map +1 -0
  242. package/dist/nano-components/p-0193a282.entry.js +5 -0
  243. package/dist/nano-components/p-0193a282.entry.js.map +1 -0
  244. package/dist/nano-components/p-0320410c.entry.js +5 -0
  245. package/dist/nano-components/p-0320410c.entry.js.map +1 -0
  246. package/dist/nano-components/p-0d699368.system.js +5 -0
  247. package/dist/nano-components/{p-3258c568.system.js.map → p-0d699368.system.js.map} +1 -1
  248. package/dist/nano-components/p-18863670.system.entry.js +5 -0
  249. package/dist/nano-components/p-18863670.system.entry.js.map +1 -0
  250. package/dist/nano-components/p-32900c91.entry.js +5 -0
  251. package/dist/nano-components/p-32900c91.entry.js.map +1 -0
  252. package/dist/nano-components/p-33fce1a6.js +5 -0
  253. package/dist/nano-components/p-33fce1a6.js.map +1 -0
  254. package/dist/nano-components/p-371aebe7.system.entry.js +23 -0
  255. package/dist/nano-components/p-371aebe7.system.entry.js.map +1 -0
  256. package/dist/nano-components/p-41899a31.system.entry.js +5 -0
  257. package/dist/nano-components/p-41899a31.system.entry.js.map +1 -0
  258. package/dist/nano-components/p-53957ec6.system.js +5 -0
  259. package/dist/nano-components/{p-e7140887.system.js.map → p-53957ec6.system.js.map} +1 -1
  260. package/dist/nano-components/p-561500f0.system.entry.js +5 -0
  261. package/dist/nano-components/p-561500f0.system.entry.js.map +1 -0
  262. package/dist/nano-components/p-596c1711.system.entry.js +5 -0
  263. package/dist/nano-components/p-596c1711.system.entry.js.map +1 -0
  264. package/dist/nano-components/{p-01667573.entry.js → p-634a58f7.entry.js} +2 -2
  265. package/dist/nano-components/p-634a58f7.entry.js.map +1 -0
  266. package/dist/nano-components/p-6a949280.system.entry.js +5 -0
  267. package/dist/nano-components/p-6a949280.system.entry.js.map +1 -0
  268. package/dist/nano-components/{p-bf9aa89d.system.entry.js → p-6af10533.system.entry.js} +3 -3
  269. package/dist/nano-components/p-6af10533.system.entry.js.map +1 -0
  270. package/dist/nano-components/p-70272eae.js +5 -0
  271. package/dist/nano-components/p-70272eae.js.map +1 -0
  272. package/dist/nano-components/p-755d9227.entry.js +5 -0
  273. package/dist/nano-components/p-755d9227.entry.js.map +1 -0
  274. package/dist/nano-components/p-7bd25494.entry.js +5 -0
  275. package/dist/nano-components/p-7bd25494.entry.js.map +1 -0
  276. package/dist/nano-components/p-7c837460.entry.js +5 -0
  277. package/dist/nano-components/p-7c837460.entry.js.map +1 -0
  278. package/dist/nano-components/p-7f051c20.entry.js +5 -0
  279. package/dist/nano-components/p-7f051c20.entry.js.map +1 -0
  280. package/dist/nano-components/{p-93880c28.system.js → p-82e28afd.system.js} +2 -2
  281. package/dist/nano-components/p-82e28afd.system.js.map +1 -0
  282. package/dist/nano-components/p-8378428e.system.js +5 -0
  283. package/dist/nano-components/p-8378428e.system.js.map +1 -0
  284. package/dist/nano-components/p-8df4f125.system.entry.js +5 -0
  285. package/dist/nano-components/p-8df4f125.system.entry.js.map +1 -0
  286. package/dist/nano-components/{p-d0385948.system.entry.js → p-93596c3d.system.entry.js} +2 -2
  287. package/dist/nano-components/p-93596c3d.system.entry.js.map +1 -0
  288. package/dist/nano-components/{p-3e930ac7.entry.js → p-9d9b0b66.entry.js} +2 -2
  289. package/dist/nano-components/p-9d9b0b66.entry.js.map +1 -0
  290. package/dist/nano-components/p-9ffdf6cc.entry.js +5 -0
  291. package/dist/nano-components/{p-222d8095.entry.js.map → p-9ffdf6cc.entry.js.map} +1 -1
  292. package/dist/nano-components/p-a07cf44c.system.entry.js +5 -0
  293. package/dist/nano-components/p-a07cf44c.system.entry.js.map +1 -0
  294. package/dist/nano-components/p-a1444980.entry.js +5 -0
  295. package/dist/nano-components/p-a1444980.entry.js.map +1 -0
  296. package/dist/nano-components/p-aa84c727.system.entry.js +5 -0
  297. package/dist/nano-components/p-aa84c727.system.entry.js.map +1 -0
  298. package/dist/nano-components/p-ac5e3775.system.entry.js +5 -0
  299. package/dist/nano-components/p-ac5e3775.system.entry.js.map +1 -0
  300. package/dist/nano-components/p-b85cf493.system.entry.js +5 -0
  301. package/dist/nano-components/{p-e817ab4a.system.entry.js.map → p-b85cf493.system.entry.js.map} +1 -1
  302. package/dist/nano-components/{p-96d9b8b9.system.entry.js → p-c2bbf0fb.system.entry.js} +2 -2
  303. package/dist/nano-components/p-c2bbf0fb.system.entry.js.map +1 -0
  304. package/dist/nano-components/{p-f780d2f6.system.entry.js → p-cb512cff.system.entry.js} +2 -2
  305. package/dist/nano-components/p-cb512cff.system.entry.js.map +1 -0
  306. package/dist/nano-components/{p-4e2c0abb.entry.js → p-ccd6c206.entry.js} +2 -2
  307. package/dist/nano-components/p-ccd6c206.entry.js.map +1 -0
  308. package/dist/nano-components/{p-1030797a.entry.js → p-d37e1489.entry.js} +2 -2
  309. package/dist/nano-components/p-d37e1489.entry.js.map +1 -0
  310. package/dist/nano-components/p-da88981f.entry.js +23 -0
  311. package/dist/nano-components/p-da88981f.entry.js.map +1 -0
  312. package/dist/nano-components/p-e8a913ac.system.entry.js +5 -0
  313. package/dist/nano-components/p-e8a913ac.system.entry.js.map +1 -0
  314. package/dist/nano-components/p-e9fddc1a.entry.js +5 -0
  315. package/dist/nano-components/p-e9fddc1a.entry.js.map +1 -0
  316. package/dist/nano-components/p-ea54ee12.entry.js +5 -0
  317. package/dist/nano-components/p-ea54ee12.entry.js.map +1 -0
  318. package/dist/nano-components/{p-86bd5194.entry.js → p-ed0bdea9.entry.js} +2 -2
  319. package/dist/nano-components/p-ed0bdea9.entry.js.map +1 -0
  320. package/dist/nano-components/p-faba2fc1.system.entry.js +5 -0
  321. package/dist/nano-components/p-faba2fc1.system.entry.js.map +1 -0
  322. package/dist/nano-components/p-ff026352.system.entry.js +5 -0
  323. package/dist/nano-components/p-ff026352.system.entry.js.map +1 -0
  324. package/dist/themes/nanopore.css +1 -1
  325. package/dist/themes/nanopore.css.map +1 -1
  326. package/dist/types/components/algolia/algolia.d.ts +1 -0
  327. package/dist/types/components/date-input/date-input.d.ts +6 -1
  328. package/dist/types/components/field-validator/field-validator-interface.d.ts +19 -0
  329. package/dist/types/components/field-validator/field-validator.d.ts +77 -31
  330. package/dist/types/components/file-upload/file-upload.d.ts +2 -1
  331. package/dist/types/components/global-search-results/global-search-results.d.ts +1 -0
  332. package/dist/types/components/icon-button/icon-button.d.ts +2 -0
  333. package/dist/types/components/input/input.d.ts +6 -1
  334. package/dist/types/components/tabs/tab.d.ts +1 -0
  335. package/dist/types/components.d.ts +67 -12
  336. package/dist/types/index.d.ts +1 -0
  337. package/dist/types/interface.d.ts +1 -0
  338. package/docs-json.json +161 -13
  339. package/docs-vscode.json +6 -2
  340. package/package.json +2 -4
  341. package/dist/cjs/ResizeObserver.es-09b81a1b.js +0 -935
  342. package/dist/cjs/ResizeObserver.es-09b81a1b.js.map +0 -1
  343. package/dist/cjs/date-utils-0ae9a12d.js.map +0 -1
  344. package/dist/cjs/global-0d4f3b77.js.map +0 -1
  345. package/dist/cjs/intersection-observer-1822c787.js +0 -987
  346. package/dist/cjs/intersection-observer-1822c787.js.map +0 -1
  347. package/dist/components/ResizeObserver.es.js +0 -933
  348. package/dist/components/ResizeObserver.es.js.map +0 -1
  349. package/dist/components/intersection-observer.js +0 -985
  350. package/dist/components/intersection-observer.js.map +0 -1
  351. package/dist/esm/ResizeObserver.es-724af9fd.js +0 -933
  352. package/dist/esm/ResizeObserver.es-724af9fd.js.map +0 -1
  353. package/dist/esm/date-utils-e4b757ff.js.map +0 -1
  354. package/dist/esm/global-d5ec4d53.js.map +0 -1
  355. package/dist/esm/intersection-observer-dff9fb5b.js +0 -985
  356. package/dist/esm/intersection-observer-dff9fb5b.js.map +0 -1
  357. package/dist/esm-es5/ResizeObserver.es-724af9fd.js +0 -5
  358. package/dist/esm-es5/ResizeObserver.es-724af9fd.js.map +0 -1
  359. package/dist/esm-es5/date-utils-e4b757ff.js +0 -5
  360. package/dist/esm-es5/date-utils-e4b757ff.js.map +0 -1
  361. package/dist/esm-es5/global-d5ec4d53.js.map +0 -1
  362. package/dist/esm-es5/intersection-observer-dff9fb5b.js +0 -5
  363. package/dist/esm-es5/intersection-observer-dff9fb5b.js.map +0 -1
  364. package/dist/nano-components/p-00eaa36a.entry.js +0 -5
  365. package/dist/nano-components/p-00eaa36a.entry.js.map +0 -1
  366. package/dist/nano-components/p-01667573.entry.js.map +0 -1
  367. package/dist/nano-components/p-1030797a.entry.js.map +0 -1
  368. package/dist/nano-components/p-11a2dcce.js +0 -5
  369. package/dist/nano-components/p-11a2dcce.js.map +0 -1
  370. package/dist/nano-components/p-1a30dfdd.system.entry.js +0 -5
  371. package/dist/nano-components/p-1a30dfdd.system.entry.js.map +0 -1
  372. package/dist/nano-components/p-1b120f53.entry.js +0 -5
  373. package/dist/nano-components/p-1b120f53.entry.js.map +0 -1
  374. package/dist/nano-components/p-21d6d31e.system.entry.js +0 -5
  375. package/dist/nano-components/p-21d6d31e.system.entry.js.map +0 -1
  376. package/dist/nano-components/p-222d8095.entry.js +0 -5
  377. package/dist/nano-components/p-241d90eb.system.entry.js +0 -5
  378. package/dist/nano-components/p-241d90eb.system.entry.js.map +0 -1
  379. package/dist/nano-components/p-2c8d7273.entry.js +0 -5
  380. package/dist/nano-components/p-2c8d7273.entry.js.map +0 -1
  381. package/dist/nano-components/p-3093915f.entry.js +0 -5
  382. package/dist/nano-components/p-3093915f.entry.js.map +0 -1
  383. package/dist/nano-components/p-3258c568.system.js +0 -5
  384. package/dist/nano-components/p-325c1cad.entry.js +0 -5
  385. package/dist/nano-components/p-325c1cad.entry.js.map +0 -1
  386. package/dist/nano-components/p-32f396c0.system.entry.js +0 -5
  387. package/dist/nano-components/p-32f396c0.system.entry.js.map +0 -1
  388. package/dist/nano-components/p-35108e08.entry.js +0 -5
  389. package/dist/nano-components/p-35108e08.entry.js.map +0 -1
  390. package/dist/nano-components/p-3ccb176c.system.entry.js +0 -5
  391. package/dist/nano-components/p-3ccb176c.system.entry.js.map +0 -1
  392. package/dist/nano-components/p-3e930ac7.entry.js.map +0 -1
  393. package/dist/nano-components/p-42cebbfe.system.entry.js +0 -5
  394. package/dist/nano-components/p-42cebbfe.system.entry.js.map +0 -1
  395. package/dist/nano-components/p-4e2c0abb.entry.js.map +0 -1
  396. package/dist/nano-components/p-5d17cfbb.system.entry.js +0 -23
  397. package/dist/nano-components/p-5d17cfbb.system.entry.js.map +0 -1
  398. package/dist/nano-components/p-5d5ea4ab.system.entry.js +0 -5
  399. package/dist/nano-components/p-5d5ea4ab.system.entry.js.map +0 -1
  400. package/dist/nano-components/p-6722447c.entry.js +0 -5
  401. package/dist/nano-components/p-6722447c.entry.js.map +0 -1
  402. package/dist/nano-components/p-6d138abf.entry.js +0 -5
  403. package/dist/nano-components/p-6d138abf.entry.js.map +0 -1
  404. package/dist/nano-components/p-76d9d1d4.entry.js +0 -5
  405. package/dist/nano-components/p-76d9d1d4.entry.js.map +0 -1
  406. package/dist/nano-components/p-866f083f.system.entry.js +0 -5
  407. package/dist/nano-components/p-866f083f.system.entry.js.map +0 -1
  408. package/dist/nano-components/p-86bd5194.entry.js.map +0 -1
  409. package/dist/nano-components/p-88779174.system.entry.js +0 -5
  410. package/dist/nano-components/p-88779174.system.entry.js.map +0 -1
  411. package/dist/nano-components/p-93880c28.system.js.map +0 -1
  412. package/dist/nano-components/p-96d9b8b9.system.entry.js.map +0 -1
  413. package/dist/nano-components/p-97b13ad2.entry.js +0 -5
  414. package/dist/nano-components/p-97b13ad2.entry.js.map +0 -1
  415. package/dist/nano-components/p-b430a9b6.system.js +0 -5
  416. package/dist/nano-components/p-b430a9b6.system.js.map +0 -1
  417. package/dist/nano-components/p-bc394857.system.entry.js +0 -5
  418. package/dist/nano-components/p-bc394857.system.entry.js.map +0 -1
  419. package/dist/nano-components/p-bf9aa89d.system.entry.js.map +0 -1
  420. package/dist/nano-components/p-c3830c43.entry.js +0 -5
  421. package/dist/nano-components/p-c3830c43.entry.js.map +0 -1
  422. package/dist/nano-components/p-d0385948.system.entry.js.map +0 -1
  423. package/dist/nano-components/p-debd9efc.js +0 -5
  424. package/dist/nano-components/p-debd9efc.js.map +0 -1
  425. package/dist/nano-components/p-e195ab77.system.js +0 -5
  426. package/dist/nano-components/p-e195ab77.system.js.map +0 -1
  427. package/dist/nano-components/p-e7140887.system.js +0 -5
  428. package/dist/nano-components/p-e817ab4a.system.entry.js +0 -5
  429. package/dist/nano-components/p-f5d4d13b.system.js +0 -5
  430. package/dist/nano-components/p-f5d4d13b.system.js.map +0 -1
  431. package/dist/nano-components/p-f66958c1.js +0 -5
  432. package/dist/nano-components/p-f66958c1.js.map +0 -1
  433. package/dist/nano-components/p-f710c763.system.entry.js +0 -5
  434. package/dist/nano-components/p-f710c763.system.entry.js.map +0 -1
  435. package/dist/nano-components/p-f780d2f6.system.entry.js.map +0 -1
  436. package/dist/nano-components/p-f9c7d961.js +0 -5
  437. package/dist/nano-components/p-f9c7d961.js.map +0 -1
  438. package/dist/nano-components/p-ffc2063a.entry.js +0 -23
  439. package/dist/nano-components/p-ffc2063a.entry.js.map +0 -1
  440. package/dist/nano-components/p-fff27907.system.entry.js +0 -5
  441. package/dist/nano-components/p-fff27907.system.entry.js.map +0 -1
@@ -2272,7 +2272,7 @@ const debounce$2 = (callback, wait = 0) => {
2272
2272
  * @param delay how long to delay before calling the function
2273
2273
  * @returns a throttled function to call as often as required
2274
2274
  */
2275
- function throttle$1(callback, delay) {
2275
+ function throttle(callback, delay) {
2276
2276
  let isThrottled = false;
2277
2277
  let args;
2278
2278
  let context;
@@ -4160,12 +4160,6 @@ const writeTask = /*@__PURE__*/ queueTask(queueDomWrites, true);
4160
4160
  }
4161
4161
  })();
4162
4162
 
4163
- // Intersection observer
4164
- if (!('IntersectionObserver' in window) ||
4165
- !('IntersectionObserverEntry' in window) ||
4166
- !('intersectionRatio' in window.IntersectionObserverEntry.prototype)) {
4167
- Promise.resolve().then(function () { return intersectionObserver; });
4168
- }
4169
4163
  // scroll-behaviour
4170
4164
  if (!('scrollBehavior' in document.documentElement.style)) {
4171
4165
  setTimeout((_) => {
@@ -7441,6 +7435,9 @@ let Algolia = class extends H {
7441
7435
  });
7442
7436
  }
7443
7437
  }
7438
+ handleFilterpropChange() {
7439
+ this.algoliaSearch(SearchChangeEvent.Init);
7440
+ }
7444
7441
  // Internal methods
7445
7442
  fixDomain(results) {
7446
7443
  if (!this.searchIndex || !this.searchIndex.domain)
@@ -7666,7 +7663,8 @@ let Algolia = class extends H {
7666
7663
  "apiKey": ["initAlgoliaClient"],
7667
7664
  "appId": ["initAlgoliaClient"],
7668
7665
  "searchIndex": ["initAlgoliaIndex"],
7669
- "showResults": ["showResultsChange"]
7666
+ "showResults": ["showResultsChange"],
7667
+ "filters": ["handleFilterpropChange"]
7670
7668
  }; }
7671
7669
  static get style() { return algoliaCss; }
7672
7670
  };
@@ -9025,8 +9023,10 @@ let DataList = class extends H {
9025
9023
  this.shouldOpen = true;
9026
9024
  // open dropdown if possible
9027
9025
  this.manageDropdownDisplay();
9028
- if (['ArrowDown', 'ArrowUp'].includes(e.key))
9026
+ if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
9027
+ e.preventDefault();
9029
9028
  this.shouldFocus = true;
9029
+ }
9030
9030
  };
9031
9031
  // handles key down on options. Either 'picks'
9032
9032
  // an option or passes event back to input for search / filter
@@ -9413,7 +9413,7 @@ let DataList = class extends H {
9413
9413
  static get style() { return datalistCss; }
9414
9414
  };
9415
9415
 
9416
- const ISO_DATE_FORMAT = /^(\d{4})-(\d{2})-(\d{2})$/;
9416
+ const ISO_DATE_FORMAT = /^(\d{4})-(\d{2})-(\d{2})/;
9417
9417
  var DaysOfWeek$1;
9418
9418
  (function (DaysOfWeek) {
9419
9419
  DaysOfWeek[DaysOfWeek["Sunday"] = 0] = "Sunday";
@@ -9638,6 +9638,9 @@ let DateInput = class extends H {
9638
9638
  */
9639
9639
  this.closeAfterPicked = true;
9640
9640
  this._dropDownConfig = {};
9641
+ /** Controls which days are disabled and therefore disallowed.
9642
+ * For example, this can be used to disallow selection of weekends. */
9643
+ this.isDateDisabled = () => false;
9641
9644
  // Event handlers
9642
9645
  this.onInputChange = (e) => {
9643
9646
  e.stopPropagation();
@@ -9740,13 +9743,14 @@ let DateInput = class extends H {
9740
9743
  'Date below the minimum: ' +
9741
9744
  min.toLocaleDateString(this.locale, this.helperTextFormat);
9742
9745
  }
9743
- else if (this.max &&
9744
- (max = parseISODate(this.max)) &&
9745
- valueDate > max) {
9746
+ if (this.max && (max = parseISODate(this.max)) && valueDate > max) {
9746
9747
  error =
9747
9748
  'Date above the maximum: ' +
9748
9749
  max.toLocaleDateString(this.locale, this.helperTextFormat);
9749
9750
  }
9751
+ if (this.isDateDisabled(valueDate)) {
9752
+ error = 'Date selected is disabled.';
9753
+ }
9750
9754
  }
9751
9755
  requestAnimationFrame(async (_) => {
9752
9756
  if (!this.input)
@@ -9770,6 +9774,10 @@ let DateInput = class extends H {
9770
9774
  set dropDownConfig(ddc) {
9771
9775
  this._dropDownConfig = Object.assign(Object.assign({}, this._dropDownConfig), ddc);
9772
9776
  }
9777
+ /** @readonly get the value as a `Date` */
9778
+ get dateValue() {
9779
+ return parseISODate(this.value);
9780
+ }
9773
9781
  // Methods
9774
9782
  /**
9775
9783
  * Get the current state of the control.
@@ -9777,6 +9785,9 @@ let DateInput = class extends H {
9777
9785
  * @returns `{ isValid: boolean, errorMessage: string }`
9778
9786
  */
9779
9787
  async reportValidity(validateFirst) {
9788
+ const initValidity = await this.input.reportValidity(validateFirst);
9789
+ if (initValidity.isValid && validateFirst)
9790
+ this.testDateValidity();
9780
9791
  return await this.input.reportValidity(validateFirst);
9781
9792
  }
9782
9793
  /**
@@ -9874,7 +9885,7 @@ let DateInput = class extends H {
9874
9885
  const hasHelperSlot = !!this.host.querySelector('[slot="helper"]');
9875
9886
  return (h$1(Host$1, { class: Object.assign({}, createColorClasses(this.color)) }, h$1("div", { class: "date-field" }, h$1("nano-input", { class: "date-field__input", slot: "trigger", required: this.required || undefined, showInlineError: this.showInlineError, validateOn: this.validateOn, placeholder: this.placeholder !== 'false' ? this.placeholder : undefined, pattern: this.pattern, label: this.label, disabled: this.disabled || undefined, color: this.color || undefined, autofocus: this.autofocus || undefined, clearInput: this.clearInput || undefined, onNanoChange: this.onInputChange, onNanoInput: this.onInputKey, onNanoValidate: this.onInputValidate, name: "", form: this.form || undefined, size: this.size || undefined, readonly: this.readonly, value: this.inputValue, ref: (input) => (this.input = input), floatLabel: this.floatLabel, hideLabel: this.hideLabel, inputmode: 'numeric', part: "input" }, h$1("slot", { name: "start", slot: "start" }), h$1("slot", { name: "label" }), h$1("slot", { name: "end", slot: "end" }), this.picker && [
9876
9887
  h$1("button", { slot: "end", class: "date-field__open", type: "button", onKeyDown: this.onTriggerKey, onClick: this.onTriggerClick, ref: (trigger) => (this.trigger = trigger), disabled: this.disabled || this.readonly }, h$1("nano-icon", { name: "light/calendar-alt" })),
9877
- h$1("nano-dropdown", Object.assign({ slot: "end", onNanoHide: this.onDropdownHide, onNanoShow: this.onDropdownShow, dialogTitle: "Choose a date", class: "date-field__dropdown", ref: (dropdown) => (this.dropdown = dropdown) }, this.dropDownConfig, { part: "dropdown" }), h$1("div", null, h$1("div", { class: "date-field__close-bar" }, h$1("button", { class: "date-field__close", type: "button", onMouseDown: this.onCloseClick, onKeyDown: this.onCloseKeyDown, ref: (pickerClose) => (this.pickerCloseBtn = pickerClose) }, h$1("nano-icon", { name: "light/times" }), h$1("span", { class: "vhidden" }, "Close window"))), h$1("nano-date-picker", { onNanoDatePicked: this.onDatePicked, min: this.min || undefined, max: this.max || undefined, "is-modal": true, ref: (picker) => (this.pickerEle = picker), localization: this.localization, selectedDate: this.value || this.initialPickerDate, firstDayOfWeek: this.firstDayOfWeek, color: this.color || undefined, part: "date-picker" }))),
9888
+ h$1("nano-dropdown", Object.assign({ slot: "end", onNanoHide: this.onDropdownHide, onNanoShow: this.onDropdownShow, dialogTitle: "Choose a date", class: "date-field__dropdown", ref: (dropdown) => (this.dropdown = dropdown) }, this.dropDownConfig, { part: "dropdown" }), h$1("div", null, h$1("div", { class: "date-field__close-bar" }, h$1("button", { class: "date-field__close", type: "button", onMouseDown: this.onCloseClick, onKeyDown: this.onCloseKeyDown, ref: (pickerClose) => (this.pickerCloseBtn = pickerClose) }, h$1("nano-icon", { name: "light/times" }), h$1("span", { class: "vhidden" }, "Close window"))), h$1("nano-date-picker", { isDateDisabled: this.isDateDisabled, onNanoDatePicked: this.onDatePicked, min: this.min || undefined, max: this.max || undefined, "is-modal": true, ref: (picker) => (this.pickerEle = picker), localization: this.localization, selectedDate: this.value || this.initialPickerDate, firstDayOfWeek: this.firstDayOfWeek, color: this.color || undefined, part: "date-picker" }))),
9878
9889
  ], (hasHelperSlot || this.helperText || this.showInlineError) && (h$1("span", { slot: "helper" }, h$1("span", { class: { vhidden: !!this.value.length } }, h$1("slot", { name: "helper" })), this.helperText && !!valueDate && (h$1("span", null, valueDate.toLocaleDateString(this.locale, this.helperTextFormat)))))), h$1("input", { type: "hidden", value: this.value, name: this.name }))));
9879
9890
  }
9880
9891
  get host() { return this; }
@@ -10078,7 +10089,7 @@ const localization = {
10078
10089
  ],
10079
10090
  };
10080
10091
 
10081
- const datePickerCss = ":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none !important}:host{--background:var(--nano-layer-bg, #fff);--active-color:var(--nano-color-base, var(--nano-color-primary, #007495));--active-text-color:var(\n --nano-color-contrast,\n var(--nano-color-primary-contrast, #fff)\n );--focus-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));--inactive-color:var(--nano-button-color, #f0efed);display:block;font-size:16px}:host(.nano-color){--active-color:var(--nano-color-base, var(--nano-color-primary, #007495));--active-text-color:var(--nano-color-contrast);--focus-shadow:0 0 0 0.1875rem rgba(var(--nano-color-tint-rgb), 0.56)}.duet-date *,.duet-date *::before,.duet-date *::after{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0}.duet-date{-webkit-box-sizing:border-box;box-sizing:border-box;color:currentColor;display:block;margin:0;position:relative;text-align:left;width:100%}.duet-date__dialog{display:-webkit-box;display:-ms-flexbox;display:flex;top:100%;max-width:100%;width:100%}.duet-date__dialog.is-left{left:auto;right:0;width:auto}.duet-date__dialog-content{background:var(--background);min-width:290px;padding:16px 16px 20px;position:relative;-webkit-transform:none;transform:none;max-width:100%;width:100%}.duet-date__table{border-collapse:collapse;border-spacing:0;font-size:1em;line-height:1.25;text-align:center;width:100%}.duet-date__table-header{font-size:0.75em;font-weight:600;letter-spacing:1px;line-height:1.25;padding-bottom:8px;text-decoration:none;text-transform:uppercase}.duet-date__cell{text-align:center}.duet-date__day{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:transparent;border:0;border-radius:50%;cursor:pointer;display:inline-block;font-size:0.875em;font-variant-numeric:tabular-nums;line-height:1.25;position:relative;text-align:center;vertical-align:middle;z-index:1;-webkit-transition:0.15s ease all;transition:0.15s ease all;height:2.5em;width:2.5em}.duet-date__day.is-today{-webkit-box-shadow:0 0 0 1px var(--active-color);box-shadow:0 0 0 1px var(--active-color);position:relative}.duet-date__day:hover::before,.duet-date__day.is-today::before{content:\"\";background:var(--active-color);border-radius:50%;bottom:0;left:0;opacity:0.16;position:absolute;right:0;top:0}[aria-selected=true] .duet-date__day{background:var(--active-color);color:var(--active-text-color);-webkit-box-shadow:none;box-shadow:none;outline:0}.duet-date__day:active{background:var(--active-color);-webkit-box-shadow:var(--focus-shadow);box-shadow:var(--focus-shadow);color:var(--active-text-color)}.duet-date__day:focus{-webkit-box-shadow:var(--focus-shadow);box-shadow:var(--focus-shadow);outline:0}.duet-date__day.is-disabled{background:transparent;-webkit-box-shadow:none;box-shadow:none;cursor:default;opacity:0.5}.duet-date__day.is-disabled::before{display:none}.duet-date__day.is-outside{background:var(--inactive-color);-webkit-box-shadow:none;box-shadow:none;cursor:default;opacity:0.6;pointer-events:none}.duet-date__day.is-outside::before{display:none}.duet-date__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:16px;width:100%}.duet-date__nav{white-space:nowrap}.duet-date__prev,.duet-date__next{background:var(--inactive-color);-moz-appearance:none;-webkit-appearance:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;appearance:none;border:0;border-radius:50%;cursor:pointer;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:distribute;justify-content:space-around;margin-left:8px;padding:0;-webkit-transition:background-color 300ms ease;transition:background-color 300ms ease;font-size:0.9em;height:2.2em;width:2.2em}.duet-date__prev:focus,.duet-date__next:focus{-webkit-box-shadow:var(--focus-shadow);box-shadow:var(--focus-shadow);outline:0}.duet-date__prev:active:focus,.duet-date__next:active:focus{-webkit-box-shadow:none;box-shadow:none}.duet-date__prev:disabled,.duet-date__next:disabled{cursor:default;opacity:0.5}.duet-date__prev nano-icon,.duet-date__next nano-icon{margin:0 auto}.duet-date__select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-top:4px;position:relative}.duet-date__select span{margin-right:4px}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.duet-date__select span{margin-right:unset;-webkit-margin-end:4px;margin-inline-end:4px}}.duet-date__select select{cursor:pointer;font-size:1em;height:100%;left:0;opacity:0;position:absolute;top:0;width:100%;z-index:2}.duet-date__select select.focus-visible:focus+.duet-date__select-label{-webkit-box-shadow:var(--focus-shadow);box-shadow:var(--focus-shadow)}.duet-date__select-label{-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:4px;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:1.25em;font-weight:600;line-height:1.25;padding:0 4px 0 8px;pointer-events:none;position:relative;width:100%;z-index:1}.duet-date__select-label nano-icon{font-size:0.55em}.duet-date__vhidden{border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;padding:0;position:absolute;top:0;width:1px}";
10092
+ const datePickerCss = ":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none !important}:host{--background:var(--nano-layer-bg, #fff);--active-color:var(--nano-color-base, var(--nano-color-primary, #007495));--active-text-color:var(\n --nano-color-contrast,\n var(--nano-color-primary-contrast, #fff)\n );--focus-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));--inactive-color:var(--nano-button-color, #f0efed);display:block;font-size:16px}:host(.nano-color){--active-color:var(--nano-color-base, var(--nano-color-primary, #007495));--active-text-color:var(--nano-color-contrast);--focus-shadow:0 0 0 0.1875rem rgba(var(--nano-color-tint-rgb), 0.56)}.duet-date *,.duet-date *::before,.duet-date *::after{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0}.duet-date{-webkit-box-sizing:border-box;box-sizing:border-box;color:currentColor;display:block;margin:0;position:relative;text-align:left;width:100%}.duet-date__dialog{display:-webkit-box;display:-ms-flexbox;display:flex;top:100%;max-width:100%;width:100%}.duet-date__dialog.is-left{left:auto;right:0;width:auto}.duet-date__dialog-content{background:var(--background);min-width:290px;padding:16px 16px 20px;position:relative;-webkit-transform:none;transform:none;max-width:100%;width:100%}.duet-date__table{border-collapse:collapse;border-spacing:0;font-size:1em;line-height:1.25;text-align:center;width:100%}.duet-date__table-header{font-size:0.75em;font-weight:600;letter-spacing:1px;line-height:1.25;padding-bottom:8px;text-decoration:none;text-transform:uppercase}.duet-date__cell{text-align:center}.duet-date__day{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:transparent;border:0;border-radius:50%;cursor:pointer;display:inline-block;font-size:0.875em;font-variant-numeric:tabular-nums;line-height:1.25;position:relative;text-align:center;vertical-align:middle;z-index:1;-webkit-transition:0.15s ease all;transition:0.15s ease all;height:2.5em;width:2.5em}.duet-date__day.is-today{-webkit-box-shadow:0 0 0 1px var(--active-color);box-shadow:0 0 0 1px var(--active-color);position:relative}.duet-date__day:hover::before,.duet-date__day.is-today::before{content:\"\";background:var(--active-color);border-radius:50%;bottom:0;left:0;opacity:0.16;position:absolute;right:0;top:0}[aria-selected=true] .duet-date__day{background:var(--active-color) !important;color:var(--active-text-color);-webkit-box-shadow:none;box-shadow:none;outline:0}.duet-date__day:active{background:var(--active-color);-webkit-box-shadow:var(--focus-shadow);box-shadow:var(--focus-shadow);color:var(--active-text-color)}.duet-date__day:focus{-webkit-box-shadow:var(--focus-shadow);box-shadow:var(--focus-shadow);outline:0}.duet-date__day.is-disabled{background:transparent;-webkit-box-shadow:none;box-shadow:none;cursor:default;opacity:0.5}.duet-date__day.is-disabled::before{display:none}.duet-date__day.is-outside{background:var(--inactive-color);-webkit-box-shadow:none;box-shadow:none;cursor:default;opacity:0.6;pointer-events:none}.duet-date__day.is-outside::before{display:none}.duet-date__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:16px;width:100%}.duet-date__nav{white-space:nowrap}.duet-date__prev,.duet-date__next{background:var(--inactive-color);-moz-appearance:none;-webkit-appearance:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;appearance:none;border:0;border-radius:50%;cursor:pointer;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:distribute;justify-content:space-around;margin-left:8px;padding:0;-webkit-transition:background-color 300ms ease;transition:background-color 300ms ease;font-size:0.9em;height:2.2em;width:2.2em}.duet-date__prev:focus,.duet-date__next:focus{-webkit-box-shadow:var(--focus-shadow);box-shadow:var(--focus-shadow);outline:0}.duet-date__prev:active:focus,.duet-date__next:active:focus{-webkit-box-shadow:none;box-shadow:none}.duet-date__prev:disabled,.duet-date__next:disabled{cursor:default;opacity:0.5}.duet-date__prev nano-icon,.duet-date__next nano-icon{margin:0 auto}.duet-date__select{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-top:4px;position:relative}.duet-date__select span{margin-right:4px}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.duet-date__select span{margin-right:unset;-webkit-margin-end:4px;margin-inline-end:4px}}.duet-date__select select{cursor:pointer;font-size:1em;height:100%;left:0;opacity:0;position:absolute;top:0;width:100%;z-index:2}.duet-date__select select.focus-visible:focus+.duet-date__select-label{-webkit-box-shadow:var(--focus-shadow);box-shadow:var(--focus-shadow)}.duet-date__select-label{-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:4px;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:1.25em;font-weight:600;line-height:1.25;padding:0 4px 0 8px;pointer-events:none;position:relative;width:100%;z-index:1}.duet-date__select-label nano-icon{font-size:0.55em}.duet-date__vhidden{border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;overflow:hidden;padding:0;position:absolute;top:0;width:1px}";
10082
10093
 
10083
10094
  function range(from, to) {
10084
10095
  var result = [];
@@ -10341,933 +10352,6 @@ let DatePicker = class extends H {
10341
10352
  static get style() { return datePickerCss; }
10342
10353
  };
10343
10354
 
10344
- /**
10345
- * A collection of shims that provide minimal functionality of the ES6 collections.
10346
- *
10347
- * These implementations are not meant to be used outside of the ResizeObserver
10348
- * modules as they cover only a limited range of use cases.
10349
- */
10350
- /* eslint-disable require-jsdoc, valid-jsdoc */
10351
- var MapShim = (function () {
10352
- if (typeof Map !== 'undefined') {
10353
- return Map;
10354
- }
10355
- /**
10356
- * Returns index in provided array that matches the specified key.
10357
- *
10358
- * @param {Array<Array>} arr
10359
- * @param {*} key
10360
- * @returns {number}
10361
- */
10362
- function getIndex(arr, key) {
10363
- var result = -1;
10364
- arr.some(function (entry, index) {
10365
- if (entry[0] === key) {
10366
- result = index;
10367
- return true;
10368
- }
10369
- return false;
10370
- });
10371
- return result;
10372
- }
10373
- return /** @class */ (function () {
10374
- function class_1() {
10375
- this.__entries__ = [];
10376
- }
10377
- Object.defineProperty(class_1.prototype, "size", {
10378
- /**
10379
- * @returns {boolean}
10380
- */
10381
- get: function () {
10382
- return this.__entries__.length;
10383
- },
10384
- enumerable: true,
10385
- configurable: true
10386
- });
10387
- /**
10388
- * @param {*} key
10389
- * @returns {*}
10390
- */
10391
- class_1.prototype.get = function (key) {
10392
- var index = getIndex(this.__entries__, key);
10393
- var entry = this.__entries__[index];
10394
- return entry && entry[1];
10395
- };
10396
- /**
10397
- * @param {*} key
10398
- * @param {*} value
10399
- * @returns {void}
10400
- */
10401
- class_1.prototype.set = function (key, value) {
10402
- var index = getIndex(this.__entries__, key);
10403
- if (~index) {
10404
- this.__entries__[index][1] = value;
10405
- }
10406
- else {
10407
- this.__entries__.push([key, value]);
10408
- }
10409
- };
10410
- /**
10411
- * @param {*} key
10412
- * @returns {void}
10413
- */
10414
- class_1.prototype.delete = function (key) {
10415
- var entries = this.__entries__;
10416
- var index = getIndex(entries, key);
10417
- if (~index) {
10418
- entries.splice(index, 1);
10419
- }
10420
- };
10421
- /**
10422
- * @param {*} key
10423
- * @returns {void}
10424
- */
10425
- class_1.prototype.has = function (key) {
10426
- return !!~getIndex(this.__entries__, key);
10427
- };
10428
- /**
10429
- * @returns {void}
10430
- */
10431
- class_1.prototype.clear = function () {
10432
- this.__entries__.splice(0);
10433
- };
10434
- /**
10435
- * @param {Function} callback
10436
- * @param {*} [ctx=null]
10437
- * @returns {void}
10438
- */
10439
- class_1.prototype.forEach = function (callback, ctx) {
10440
- if (ctx === void 0) { ctx = null; }
10441
- for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {
10442
- var entry = _a[_i];
10443
- callback.call(ctx, entry[1], entry[0]);
10444
- }
10445
- };
10446
- return class_1;
10447
- }());
10448
- })();
10449
-
10450
- /**
10451
- * Detects whether window and document objects are available in current environment.
10452
- */
10453
- var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;
10454
-
10455
- // Returns global object of a current environment.
10456
- var global$1 = (function () {
10457
- if (typeof global !== 'undefined' && global.Math === Math) {
10458
- return global;
10459
- }
10460
- if (typeof self !== 'undefined' && self.Math === Math) {
10461
- return self;
10462
- }
10463
- if (typeof window !== 'undefined' && window.Math === Math) {
10464
- return window;
10465
- }
10466
- // eslint-disable-next-line no-new-func
10467
- return Function('return this')();
10468
- })();
10469
-
10470
- /**
10471
- * A shim for the requestAnimationFrame which falls back to the setTimeout if
10472
- * first one is not supported.
10473
- *
10474
- * @returns {number} Requests' identifier.
10475
- */
10476
- var requestAnimationFrame$1 = (function () {
10477
- if (typeof requestAnimationFrame === 'function') {
10478
- // It's required to use a bounded function because IE sometimes throws
10479
- // an "Invalid calling object" error if rAF is invoked without the global
10480
- // object on the left hand side.
10481
- return requestAnimationFrame.bind(global$1);
10482
- }
10483
- return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };
10484
- })();
10485
-
10486
- // Defines minimum timeout before adding a trailing call.
10487
- var trailingTimeout = 2;
10488
- /**
10489
- * Creates a wrapper function which ensures that provided callback will be
10490
- * invoked only once during the specified delay period.
10491
- *
10492
- * @param {Function} callback - Function to be invoked after the delay period.
10493
- * @param {number} delay - Delay after which to invoke callback.
10494
- * @returns {Function}
10495
- */
10496
- function throttle (callback, delay) {
10497
- var leadingCall = false, trailingCall = false, lastCallTime = 0;
10498
- /**
10499
- * Invokes the original callback function and schedules new invocation if
10500
- * the "proxy" was called during current request.
10501
- *
10502
- * @returns {void}
10503
- */
10504
- function resolvePending() {
10505
- if (leadingCall) {
10506
- leadingCall = false;
10507
- callback();
10508
- }
10509
- if (trailingCall) {
10510
- proxy();
10511
- }
10512
- }
10513
- /**
10514
- * Callback invoked after the specified delay. It will further postpone
10515
- * invocation of the original function delegating it to the
10516
- * requestAnimationFrame.
10517
- *
10518
- * @returns {void}
10519
- */
10520
- function timeoutCallback() {
10521
- requestAnimationFrame$1(resolvePending);
10522
- }
10523
- /**
10524
- * Schedules invocation of the original function.
10525
- *
10526
- * @returns {void}
10527
- */
10528
- function proxy() {
10529
- var timeStamp = Date.now();
10530
- if (leadingCall) {
10531
- // Reject immediately following calls.
10532
- if (timeStamp - lastCallTime < trailingTimeout) {
10533
- return;
10534
- }
10535
- // Schedule new call to be in invoked when the pending one is resolved.
10536
- // This is important for "transitions" which never actually start
10537
- // immediately so there is a chance that we might miss one if change
10538
- // happens amids the pending invocation.
10539
- trailingCall = true;
10540
- }
10541
- else {
10542
- leadingCall = true;
10543
- trailingCall = false;
10544
- setTimeout(timeoutCallback, delay);
10545
- }
10546
- lastCallTime = timeStamp;
10547
- }
10548
- return proxy;
10549
- }
10550
-
10551
- // Minimum delay before invoking the update of observers.
10552
- var REFRESH_DELAY = 20;
10553
- // A list of substrings of CSS properties used to find transition events that
10554
- // might affect dimensions of observed elements.
10555
- var transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];
10556
- // Check if MutationObserver is available.
10557
- var mutationObserverSupported = typeof MutationObserver !== 'undefined';
10558
- /**
10559
- * Singleton controller class which handles updates of ResizeObserver instances.
10560
- */
10561
- var ResizeObserverController = /** @class */ (function () {
10562
- /**
10563
- * Creates a new instance of ResizeObserverController.
10564
- *
10565
- * @private
10566
- */
10567
- function ResizeObserverController() {
10568
- /**
10569
- * Indicates whether DOM listeners have been added.
10570
- *
10571
- * @private {boolean}
10572
- */
10573
- this.connected_ = false;
10574
- /**
10575
- * Tells that controller has subscribed for Mutation Events.
10576
- *
10577
- * @private {boolean}
10578
- */
10579
- this.mutationEventsAdded_ = false;
10580
- /**
10581
- * Keeps reference to the instance of MutationObserver.
10582
- *
10583
- * @private {MutationObserver}
10584
- */
10585
- this.mutationsObserver_ = null;
10586
- /**
10587
- * A list of connected observers.
10588
- *
10589
- * @private {Array<ResizeObserverSPI>}
10590
- */
10591
- this.observers_ = [];
10592
- this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);
10593
- this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);
10594
- }
10595
- /**
10596
- * Adds observer to observers list.
10597
- *
10598
- * @param {ResizeObserverSPI} observer - Observer to be added.
10599
- * @returns {void}
10600
- */
10601
- ResizeObserverController.prototype.addObserver = function (observer) {
10602
- if (!~this.observers_.indexOf(observer)) {
10603
- this.observers_.push(observer);
10604
- }
10605
- // Add listeners if they haven't been added yet.
10606
- if (!this.connected_) {
10607
- this.connect_();
10608
- }
10609
- };
10610
- /**
10611
- * Removes observer from observers list.
10612
- *
10613
- * @param {ResizeObserverSPI} observer - Observer to be removed.
10614
- * @returns {void}
10615
- */
10616
- ResizeObserverController.prototype.removeObserver = function (observer) {
10617
- var observers = this.observers_;
10618
- var index = observers.indexOf(observer);
10619
- // Remove observer if it's present in registry.
10620
- if (~index) {
10621
- observers.splice(index, 1);
10622
- }
10623
- // Remove listeners if controller has no connected observers.
10624
- if (!observers.length && this.connected_) {
10625
- this.disconnect_();
10626
- }
10627
- };
10628
- /**
10629
- * Invokes the update of observers. It will continue running updates insofar
10630
- * it detects changes.
10631
- *
10632
- * @returns {void}
10633
- */
10634
- ResizeObserverController.prototype.refresh = function () {
10635
- var changesDetected = this.updateObservers_();
10636
- // Continue running updates if changes have been detected as there might
10637
- // be future ones caused by CSS transitions.
10638
- if (changesDetected) {
10639
- this.refresh();
10640
- }
10641
- };
10642
- /**
10643
- * Updates every observer from observers list and notifies them of queued
10644
- * entries.
10645
- *
10646
- * @private
10647
- * @returns {boolean} Returns "true" if any observer has detected changes in
10648
- * dimensions of it's elements.
10649
- */
10650
- ResizeObserverController.prototype.updateObservers_ = function () {
10651
- // Collect observers that have active observations.
10652
- var activeObservers = this.observers_.filter(function (observer) {
10653
- return observer.gatherActive(), observer.hasActive();
10654
- });
10655
- // Deliver notifications in a separate cycle in order to avoid any
10656
- // collisions between observers, e.g. when multiple instances of
10657
- // ResizeObserver are tracking the same element and the callback of one
10658
- // of them changes content dimensions of the observed target. Sometimes
10659
- // this may result in notifications being blocked for the rest of observers.
10660
- activeObservers.forEach(function (observer) { return observer.broadcastActive(); });
10661
- return activeObservers.length > 0;
10662
- };
10663
- /**
10664
- * Initializes DOM listeners.
10665
- *
10666
- * @private
10667
- * @returns {void}
10668
- */
10669
- ResizeObserverController.prototype.connect_ = function () {
10670
- // Do nothing if running in a non-browser environment or if listeners
10671
- // have been already added.
10672
- if (!isBrowser || this.connected_) {
10673
- return;
10674
- }
10675
- // Subscription to the "Transitionend" event is used as a workaround for
10676
- // delayed transitions. This way it's possible to capture at least the
10677
- // final state of an element.
10678
- document.addEventListener('transitionend', this.onTransitionEnd_);
10679
- window.addEventListener('resize', this.refresh);
10680
- if (mutationObserverSupported) {
10681
- this.mutationsObserver_ = new MutationObserver(this.refresh);
10682
- this.mutationsObserver_.observe(document, {
10683
- attributes: true,
10684
- childList: true,
10685
- characterData: true,
10686
- subtree: true
10687
- });
10688
- }
10689
- else {
10690
- document.addEventListener('DOMSubtreeModified', this.refresh);
10691
- this.mutationEventsAdded_ = true;
10692
- }
10693
- this.connected_ = true;
10694
- };
10695
- /**
10696
- * Removes DOM listeners.
10697
- *
10698
- * @private
10699
- * @returns {void}
10700
- */
10701
- ResizeObserverController.prototype.disconnect_ = function () {
10702
- // Do nothing if running in a non-browser environment or if listeners
10703
- // have been already removed.
10704
- if (!isBrowser || !this.connected_) {
10705
- return;
10706
- }
10707
- document.removeEventListener('transitionend', this.onTransitionEnd_);
10708
- window.removeEventListener('resize', this.refresh);
10709
- if (this.mutationsObserver_) {
10710
- this.mutationsObserver_.disconnect();
10711
- }
10712
- if (this.mutationEventsAdded_) {
10713
- document.removeEventListener('DOMSubtreeModified', this.refresh);
10714
- }
10715
- this.mutationsObserver_ = null;
10716
- this.mutationEventsAdded_ = false;
10717
- this.connected_ = false;
10718
- };
10719
- /**
10720
- * "Transitionend" event handler.
10721
- *
10722
- * @private
10723
- * @param {TransitionEvent} event
10724
- * @returns {void}
10725
- */
10726
- ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {
10727
- var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;
10728
- // Detect whether transition may affect dimensions of an element.
10729
- var isReflowProperty = transitionKeys.some(function (key) {
10730
- return !!~propertyName.indexOf(key);
10731
- });
10732
- if (isReflowProperty) {
10733
- this.refresh();
10734
- }
10735
- };
10736
- /**
10737
- * Returns instance of the ResizeObserverController.
10738
- *
10739
- * @returns {ResizeObserverController}
10740
- */
10741
- ResizeObserverController.getInstance = function () {
10742
- if (!this.instance_) {
10743
- this.instance_ = new ResizeObserverController();
10744
- }
10745
- return this.instance_;
10746
- };
10747
- /**
10748
- * Holds reference to the controller's instance.
10749
- *
10750
- * @private {ResizeObserverController}
10751
- */
10752
- ResizeObserverController.instance_ = null;
10753
- return ResizeObserverController;
10754
- }());
10755
-
10756
- /**
10757
- * Defines non-writable/enumerable properties of the provided target object.
10758
- *
10759
- * @param {Object} target - Object for which to define properties.
10760
- * @param {Object} props - Properties to be defined.
10761
- * @returns {Object} Target object.
10762
- */
10763
- var defineConfigurable = (function (target, props) {
10764
- for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {
10765
- var key = _a[_i];
10766
- Object.defineProperty(target, key, {
10767
- value: props[key],
10768
- enumerable: false,
10769
- writable: false,
10770
- configurable: true
10771
- });
10772
- }
10773
- return target;
10774
- });
10775
-
10776
- /**
10777
- * Returns the global object associated with provided element.
10778
- *
10779
- * @param {Object} target
10780
- * @returns {Object}
10781
- */
10782
- var getWindowOf = (function (target) {
10783
- // Assume that the element is an instance of Node, which means that it
10784
- // has the "ownerDocument" property from which we can retrieve a
10785
- // corresponding global object.
10786
- var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;
10787
- // Return the local global object if it's not possible extract one from
10788
- // provided element.
10789
- return ownerGlobal || global$1;
10790
- });
10791
-
10792
- // Placeholder of an empty content rectangle.
10793
- var emptyRect = createRectInit(0, 0, 0, 0);
10794
- /**
10795
- * Converts provided string to a number.
10796
- *
10797
- * @param {number|string} value
10798
- * @returns {number}
10799
- */
10800
- function toFloat(value) {
10801
- return parseFloat(value) || 0;
10802
- }
10803
- /**
10804
- * Extracts borders size from provided styles.
10805
- *
10806
- * @param {CSSStyleDeclaration} styles
10807
- * @param {...string} positions - Borders positions (top, right, ...)
10808
- * @returns {number}
10809
- */
10810
- function getBordersSize(styles) {
10811
- var positions = [];
10812
- for (var _i = 1; _i < arguments.length; _i++) {
10813
- positions[_i - 1] = arguments[_i];
10814
- }
10815
- return positions.reduce(function (size, position) {
10816
- var value = styles['border-' + position + '-width'];
10817
- return size + toFloat(value);
10818
- }, 0);
10819
- }
10820
- /**
10821
- * Extracts paddings sizes from provided styles.
10822
- *
10823
- * @param {CSSStyleDeclaration} styles
10824
- * @returns {Object} Paddings box.
10825
- */
10826
- function getPaddings(styles) {
10827
- var positions = ['top', 'right', 'bottom', 'left'];
10828
- var paddings = {};
10829
- for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {
10830
- var position = positions_1[_i];
10831
- var value = styles['padding-' + position];
10832
- paddings[position] = toFloat(value);
10833
- }
10834
- return paddings;
10835
- }
10836
- /**
10837
- * Calculates content rectangle of provided SVG element.
10838
- *
10839
- * @param {SVGGraphicsElement} target - Element content rectangle of which needs
10840
- * to be calculated.
10841
- * @returns {DOMRectInit}
10842
- */
10843
- function getSVGContentRect(target) {
10844
- var bbox = target.getBBox();
10845
- return createRectInit(0, 0, bbox.width, bbox.height);
10846
- }
10847
- /**
10848
- * Calculates content rectangle of provided HTMLElement.
10849
- *
10850
- * @param {HTMLElement} target - Element for which to calculate the content rectangle.
10851
- * @returns {DOMRectInit}
10852
- */
10853
- function getHTMLElementContentRect(target) {
10854
- // Client width & height properties can't be
10855
- // used exclusively as they provide rounded values.
10856
- var clientWidth = target.clientWidth, clientHeight = target.clientHeight;
10857
- // By this condition we can catch all non-replaced inline, hidden and
10858
- // detached elements. Though elements with width & height properties less
10859
- // than 0.5 will be discarded as well.
10860
- //
10861
- // Without it we would need to implement separate methods for each of
10862
- // those cases and it's not possible to perform a precise and performance
10863
- // effective test for hidden elements. E.g. even jQuery's ':visible' filter
10864
- // gives wrong results for elements with width & height less than 0.5.
10865
- if (!clientWidth && !clientHeight) {
10866
- return emptyRect;
10867
- }
10868
- var styles = getWindowOf(target).getComputedStyle(target);
10869
- var paddings = getPaddings(styles);
10870
- var horizPad = paddings.left + paddings.right;
10871
- var vertPad = paddings.top + paddings.bottom;
10872
- // Computed styles of width & height are being used because they are the
10873
- // only dimensions available to JS that contain non-rounded values. It could
10874
- // be possible to utilize the getBoundingClientRect if only it's data wasn't
10875
- // affected by CSS transformations let alone paddings, borders and scroll bars.
10876
- var width = toFloat(styles.width), height = toFloat(styles.height);
10877
- // Width & height include paddings and borders when the 'border-box' box
10878
- // model is applied (except for IE).
10879
- if (styles.boxSizing === 'border-box') {
10880
- // Following conditions are required to handle Internet Explorer which
10881
- // doesn't include paddings and borders to computed CSS dimensions.
10882
- //
10883
- // We can say that if CSS dimensions + paddings are equal to the "client"
10884
- // properties then it's either IE, and thus we don't need to subtract
10885
- // anything, or an element merely doesn't have paddings/borders styles.
10886
- if (Math.round(width + horizPad) !== clientWidth) {
10887
- width -= getBordersSize(styles, 'left', 'right') + horizPad;
10888
- }
10889
- if (Math.round(height + vertPad) !== clientHeight) {
10890
- height -= getBordersSize(styles, 'top', 'bottom') + vertPad;
10891
- }
10892
- }
10893
- // Following steps can't be applied to the document's root element as its
10894
- // client[Width/Height] properties represent viewport area of the window.
10895
- // Besides, it's as well not necessary as the <html> itself neither has
10896
- // rendered scroll bars nor it can be clipped.
10897
- if (!isDocumentElement(target)) {
10898
- // In some browsers (only in Firefox, actually) CSS width & height
10899
- // include scroll bars size which can be removed at this step as scroll
10900
- // bars are the only difference between rounded dimensions + paddings
10901
- // and "client" properties, though that is not always true in Chrome.
10902
- var vertScrollbar = Math.round(width + horizPad) - clientWidth;
10903
- var horizScrollbar = Math.round(height + vertPad) - clientHeight;
10904
- // Chrome has a rather weird rounding of "client" properties.
10905
- // E.g. for an element with content width of 314.2px it sometimes gives
10906
- // the client width of 315px and for the width of 314.7px it may give
10907
- // 314px. And it doesn't happen all the time. So just ignore this delta
10908
- // as a non-relevant.
10909
- if (Math.abs(vertScrollbar) !== 1) {
10910
- width -= vertScrollbar;
10911
- }
10912
- if (Math.abs(horizScrollbar) !== 1) {
10913
- height -= horizScrollbar;
10914
- }
10915
- }
10916
- return createRectInit(paddings.left, paddings.top, width, height);
10917
- }
10918
- /**
10919
- * Checks whether provided element is an instance of the SVGGraphicsElement.
10920
- *
10921
- * @param {Element} target - Element to be checked.
10922
- * @returns {boolean}
10923
- */
10924
- var isSVGGraphicsElement = (function () {
10925
- // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement
10926
- // interface.
10927
- if (typeof SVGGraphicsElement !== 'undefined') {
10928
- return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };
10929
- }
10930
- // If it's so, then check that element is at least an instance of the
10931
- // SVGElement and that it has the "getBBox" method.
10932
- // eslint-disable-next-line no-extra-parens
10933
- return function (target) { return (target instanceof getWindowOf(target).SVGElement &&
10934
- typeof target.getBBox === 'function'); };
10935
- })();
10936
- /**
10937
- * Checks whether provided element is a document element (<html>).
10938
- *
10939
- * @param {Element} target - Element to be checked.
10940
- * @returns {boolean}
10941
- */
10942
- function isDocumentElement(target) {
10943
- return target === getWindowOf(target).document.documentElement;
10944
- }
10945
- /**
10946
- * Calculates an appropriate content rectangle for provided html or svg element.
10947
- *
10948
- * @param {Element} target - Element content rectangle of which needs to be calculated.
10949
- * @returns {DOMRectInit}
10950
- */
10951
- function getContentRect(target) {
10952
- if (!isBrowser) {
10953
- return emptyRect;
10954
- }
10955
- if (isSVGGraphicsElement(target)) {
10956
- return getSVGContentRect(target);
10957
- }
10958
- return getHTMLElementContentRect(target);
10959
- }
10960
- /**
10961
- * Creates rectangle with an interface of the DOMRectReadOnly.
10962
- * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly
10963
- *
10964
- * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.
10965
- * @returns {DOMRectReadOnly}
10966
- */
10967
- function createReadOnlyRect(_a) {
10968
- var x = _a.x, y = _a.y, width = _a.width, height = _a.height;
10969
- // If DOMRectReadOnly is available use it as a prototype for the rectangle.
10970
- var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;
10971
- var rect = Object.create(Constr.prototype);
10972
- // Rectangle's properties are not writable and non-enumerable.
10973
- defineConfigurable(rect, {
10974
- x: x, y: y, width: width, height: height,
10975
- top: y,
10976
- right: x + width,
10977
- bottom: height + y,
10978
- left: x
10979
- });
10980
- return rect;
10981
- }
10982
- /**
10983
- * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.
10984
- * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit
10985
- *
10986
- * @param {number} x - X coordinate.
10987
- * @param {number} y - Y coordinate.
10988
- * @param {number} width - Rectangle's width.
10989
- * @param {number} height - Rectangle's height.
10990
- * @returns {DOMRectInit}
10991
- */
10992
- function createRectInit(x, y, width, height) {
10993
- return { x: x, y: y, width: width, height: height };
10994
- }
10995
-
10996
- /**
10997
- * Class that is responsible for computations of the content rectangle of
10998
- * provided DOM element and for keeping track of it's changes.
10999
- */
11000
- var ResizeObservation = /** @class */ (function () {
11001
- /**
11002
- * Creates an instance of ResizeObservation.
11003
- *
11004
- * @param {Element} target - Element to be observed.
11005
- */
11006
- function ResizeObservation(target) {
11007
- /**
11008
- * Broadcasted width of content rectangle.
11009
- *
11010
- * @type {number}
11011
- */
11012
- this.broadcastWidth = 0;
11013
- /**
11014
- * Broadcasted height of content rectangle.
11015
- *
11016
- * @type {number}
11017
- */
11018
- this.broadcastHeight = 0;
11019
- /**
11020
- * Reference to the last observed content rectangle.
11021
- *
11022
- * @private {DOMRectInit}
11023
- */
11024
- this.contentRect_ = createRectInit(0, 0, 0, 0);
11025
- this.target = target;
11026
- }
11027
- /**
11028
- * Updates content rectangle and tells whether it's width or height properties
11029
- * have changed since the last broadcast.
11030
- *
11031
- * @returns {boolean}
11032
- */
11033
- ResizeObservation.prototype.isActive = function () {
11034
- var rect = getContentRect(this.target);
11035
- this.contentRect_ = rect;
11036
- return (rect.width !== this.broadcastWidth ||
11037
- rect.height !== this.broadcastHeight);
11038
- };
11039
- /**
11040
- * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data
11041
- * from the corresponding properties of the last observed content rectangle.
11042
- *
11043
- * @returns {DOMRectInit} Last observed content rectangle.
11044
- */
11045
- ResizeObservation.prototype.broadcastRect = function () {
11046
- var rect = this.contentRect_;
11047
- this.broadcastWidth = rect.width;
11048
- this.broadcastHeight = rect.height;
11049
- return rect;
11050
- };
11051
- return ResizeObservation;
11052
- }());
11053
-
11054
- var ResizeObserverEntry = /** @class */ (function () {
11055
- /**
11056
- * Creates an instance of ResizeObserverEntry.
11057
- *
11058
- * @param {Element} target - Element that is being observed.
11059
- * @param {DOMRectInit} rectInit - Data of the element's content rectangle.
11060
- */
11061
- function ResizeObserverEntry(target, rectInit) {
11062
- var contentRect = createReadOnlyRect(rectInit);
11063
- // According to the specification following properties are not writable
11064
- // and are also not enumerable in the native implementation.
11065
- //
11066
- // Property accessors are not being used as they'd require to define a
11067
- // private WeakMap storage which may cause memory leaks in browsers that
11068
- // don't support this type of collections.
11069
- defineConfigurable(this, { target: target, contentRect: contentRect });
11070
- }
11071
- return ResizeObserverEntry;
11072
- }());
11073
-
11074
- var ResizeObserverSPI = /** @class */ (function () {
11075
- /**
11076
- * Creates a new instance of ResizeObserver.
11077
- *
11078
- * @param {ResizeObserverCallback} callback - Callback function that is invoked
11079
- * when one of the observed elements changes it's content dimensions.
11080
- * @param {ResizeObserverController} controller - Controller instance which
11081
- * is responsible for the updates of observer.
11082
- * @param {ResizeObserver} callbackCtx - Reference to the public
11083
- * ResizeObserver instance which will be passed to callback function.
11084
- */
11085
- function ResizeObserverSPI(callback, controller, callbackCtx) {
11086
- /**
11087
- * Collection of resize observations that have detected changes in dimensions
11088
- * of elements.
11089
- *
11090
- * @private {Array<ResizeObservation>}
11091
- */
11092
- this.activeObservations_ = [];
11093
- /**
11094
- * Registry of the ResizeObservation instances.
11095
- *
11096
- * @private {Map<Element, ResizeObservation>}
11097
- */
11098
- this.observations_ = new MapShim();
11099
- if (typeof callback !== 'function') {
11100
- throw new TypeError('The callback provided as parameter 1 is not a function.');
11101
- }
11102
- this.callback_ = callback;
11103
- this.controller_ = controller;
11104
- this.callbackCtx_ = callbackCtx;
11105
- }
11106
- /**
11107
- * Starts observing provided element.
11108
- *
11109
- * @param {Element} target - Element to be observed.
11110
- * @returns {void}
11111
- */
11112
- ResizeObserverSPI.prototype.observe = function (target) {
11113
- if (!arguments.length) {
11114
- throw new TypeError('1 argument required, but only 0 present.');
11115
- }
11116
- // Do nothing if current environment doesn't have the Element interface.
11117
- if (typeof Element === 'undefined' || !(Element instanceof Object)) {
11118
- return;
11119
- }
11120
- if (!(target instanceof getWindowOf(target).Element)) {
11121
- throw new TypeError('parameter 1 is not of type "Element".');
11122
- }
11123
- var observations = this.observations_;
11124
- // Do nothing if element is already being observed.
11125
- if (observations.has(target)) {
11126
- return;
11127
- }
11128
- observations.set(target, new ResizeObservation(target));
11129
- this.controller_.addObserver(this);
11130
- // Force the update of observations.
11131
- this.controller_.refresh();
11132
- };
11133
- /**
11134
- * Stops observing provided element.
11135
- *
11136
- * @param {Element} target - Element to stop observing.
11137
- * @returns {void}
11138
- */
11139
- ResizeObserverSPI.prototype.unobserve = function (target) {
11140
- if (!arguments.length) {
11141
- throw new TypeError('1 argument required, but only 0 present.');
11142
- }
11143
- // Do nothing if current environment doesn't have the Element interface.
11144
- if (typeof Element === 'undefined' || !(Element instanceof Object)) {
11145
- return;
11146
- }
11147
- if (!(target instanceof getWindowOf(target).Element)) {
11148
- throw new TypeError('parameter 1 is not of type "Element".');
11149
- }
11150
- var observations = this.observations_;
11151
- // Do nothing if element is not being observed.
11152
- if (!observations.has(target)) {
11153
- return;
11154
- }
11155
- observations.delete(target);
11156
- if (!observations.size) {
11157
- this.controller_.removeObserver(this);
11158
- }
11159
- };
11160
- /**
11161
- * Stops observing all elements.
11162
- *
11163
- * @returns {void}
11164
- */
11165
- ResizeObserverSPI.prototype.disconnect = function () {
11166
- this.clearActive();
11167
- this.observations_.clear();
11168
- this.controller_.removeObserver(this);
11169
- };
11170
- /**
11171
- * Collects observation instances the associated element of which has changed
11172
- * it's content rectangle.
11173
- *
11174
- * @returns {void}
11175
- */
11176
- ResizeObserverSPI.prototype.gatherActive = function () {
11177
- var _this = this;
11178
- this.clearActive();
11179
- this.observations_.forEach(function (observation) {
11180
- if (observation.isActive()) {
11181
- _this.activeObservations_.push(observation);
11182
- }
11183
- });
11184
- };
11185
- /**
11186
- * Invokes initial callback function with a list of ResizeObserverEntry
11187
- * instances collected from active resize observations.
11188
- *
11189
- * @returns {void}
11190
- */
11191
- ResizeObserverSPI.prototype.broadcastActive = function () {
11192
- // Do nothing if observer doesn't have active observations.
11193
- if (!this.hasActive()) {
11194
- return;
11195
- }
11196
- var ctx = this.callbackCtx_;
11197
- // Create ResizeObserverEntry instance for every active observation.
11198
- var entries = this.activeObservations_.map(function (observation) {
11199
- return new ResizeObserverEntry(observation.target, observation.broadcastRect());
11200
- });
11201
- this.callback_.call(ctx, entries, ctx);
11202
- this.clearActive();
11203
- };
11204
- /**
11205
- * Clears the collection of active observations.
11206
- *
11207
- * @returns {void}
11208
- */
11209
- ResizeObserverSPI.prototype.clearActive = function () {
11210
- this.activeObservations_.splice(0);
11211
- };
11212
- /**
11213
- * Tells whether observer has active observations.
11214
- *
11215
- * @returns {boolean}
11216
- */
11217
- ResizeObserverSPI.prototype.hasActive = function () {
11218
- return this.activeObservations_.length > 0;
11219
- };
11220
- return ResizeObserverSPI;
11221
- }());
11222
-
11223
- // Registry of internal observers. If WeakMap is not available use current shim
11224
- // for the Map collection as it has all required methods and because WeakMap
11225
- // can't be fully polyfilled anyway.
11226
- var observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();
11227
- /**
11228
- * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation
11229
- * exposing only those methods and properties that are defined in the spec.
11230
- */
11231
- var ResizeObserver$1 = /** @class */ (function () {
11232
- /**
11233
- * Creates a new instance of ResizeObserver.
11234
- *
11235
- * @param {ResizeObserverCallback} callback - Callback that is invoked when
11236
- * dimensions of the observed elements change.
11237
- */
11238
- function ResizeObserver(callback) {
11239
- if (!(this instanceof ResizeObserver)) {
11240
- throw new TypeError('Cannot call a class as a function.');
11241
- }
11242
- if (!arguments.length) {
11243
- throw new TypeError('1 argument required, but only 0 present.');
11244
- }
11245
- var controller = ResizeObserverController.getInstance();
11246
- var observer = new ResizeObserverSPI(callback, controller, this);
11247
- observers.set(this, observer);
11248
- }
11249
- return ResizeObserver;
11250
- }());
11251
- // Expose public methods of ResizeObserver.
11252
- [
11253
- 'observe',
11254
- 'unobserve',
11255
- 'disconnect'
11256
- ].forEach(function (method) {
11257
- ResizeObserver$1.prototype[method] = function () {
11258
- var _a;
11259
- return (_a = observers.get(this))[method].apply(_a, arguments);
11260
- };
11261
- });
11262
-
11263
- var index$2 = (function () {
11264
- // Export existing implementation if available.
11265
- if (typeof global$1.ResizeObserver !== 'undefined') {
11266
- return global$1.ResizeObserver;
11267
- }
11268
- return ResizeObserver$1;
11269
- })();
11270
-
11271
10355
  const detailsCss = ":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none !important}:host{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;--padding:1em;--btn-padding:var(--padding);--btn-bg-color:var(--nano-color-contrast, #dad6d3);--btn-bg-color--open:var(--nano-color-base, #dad6d3);--btn-bg-color--hover:var(--nano-color-tint, #f9f9fb);--btn-text-color:var(--nano-color-base, #455556);--btn-text-color--open:var(--nano-color-contrast, var(--btn-text-color));--btn-text-color--hover:var(--nano-color-contrast, var(--btn-text-color));--content-bg-color:transparent;--content-text-color:#455556;--content-transition:height 0.2s ease-out;--border-width:none;--border-color:none;--border-style:none;--border-radius:none;--box-shadow:none;--focus-style:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));display:block;border-style:var(--border-style);border-width:var(--border-width-dims);border-color:var(--border-color);border-radius:var(--border-radius-dims);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}:host(:last-of-type){--border-width-dims:0 var(--border-width) var(--border-width);--border-radius-dims:0 0 var(--border-radius) var(--border-radius)}:host(:last-of-type) .open .content{border-radius:0 0 var(--border-radius) var(--border-radius)}:host(:first-of-type){--border-radius-dims:var(--border-radius) var(--border-radius) 0 0;--border-width-dims:var(--border-width)}:host(:first-of-type:last-of-type){--border-radius-dims:var(--border-radius);--border-width-dims:var(--border-width)}:host(:not(:last-of-type):not(:first-of-type)){--border-width-dims:0 var(--border-width) var(--border-width)}:host(.nano-color){--btn-bg-color:var(--nano-color-contrast, var(--nano-color-primary-contrast, #fff));--btn-bg-color--open:var(--nano-color-base, var(--nano-color-primary, #007495));--btn-bg-color--hover:var(--nano-color-tint, var(--nano-color-primary-tint, #2689a5));--btn-text-color:var(--nano-color-base, var(--nano-color-primary, #007495));--btn-text-color--open:var(\n --nano-color-contrast,\n var(--nano-color-primary-contrast, #fff)\n );--btn-text-color--hover:var(\n --nano-color-contrast,\n var(--nano-color-primary-contrast, #fff)\n )}button{left:0;top:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;width:100%;height:100%;border:0;background:transparent;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;padding:var(--btn-padding);text-align:inherit;position:relative;font-size:1em;margin:0;-webkit-transition:0.3s ease background, 0.3s ease color, 0.15s ease box-shadow;transition:0.3s ease background, 0.3s ease color, 0.15s ease box-shadow;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:var(--btn-bg-color);color:var(--btn-text-color);border-radius:var(--border-radius-dims)}button[dir=rtl]{left:unset;right:unset;right:0}button::-moz-focus-inner{border:0}button:focus{-webkit-box-shadow:var(--focus-style);box-shadow:var(--focus-style);outline:none;position:relative;z-index:1}:hover button{background:var(--btn-bg-color--hover);color:var(--btn-text-color--hover)}.open button{background:var(--btn-bg-color--open);color:var(--btn-text-color--open);border-bottom-right-radius:0;border-bottom-left-radius:0}button .label{width:100%;max-width:100%;max-height:100%;-webkit-box-flex:1;-ms-flex:1;flex:1;display:inline-block}button .icon{line-height:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;display:inline-block;color:currentColor;-webkit-transition:0.3s ease transform;transition:0.3s ease transform;-webkit-transform-origin:center;transform-origin:center}button .icon--start{margin-left:0;margin-right:var(--padding);margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){button .icon--start{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:var(--padding);margin-inline-end:var(--padding)}}button .icon--end{margin-left:var(--padding);margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){button .icon--end{margin-left:unset;margin-right:unset;-webkit-margin-start:var(--padding);margin-inline-start:var(--padding);-webkit-margin-end:0;margin-inline-end:0}}button .icon ::slotted(nano-icon){--color:\"currentColor\"}.content{color:var(--content-text-color);background:var(--content-bg-color);height:0;overflow:hidden;-webkit-transition:0.2s ease border-radius;transition:0.2s ease border-radius;outline:none}.loaded .content{-webkit-transition:var(--content-transition), 0.2s ease border-radius;transition:var(--content-transition), 0.2s ease border-radius}.content>*{opacity:0;-webkit-transition:opacity 0.2s ease-out;transition:opacity 0.2s ease-out}.open .content>*{opacity:1}.content__area{padding:var(--padding)}";
11272
10356
 
11273
10357
  let Details = class extends H {
@@ -11347,7 +10431,7 @@ let Details = class extends H {
11347
10431
  attachRO() {
11348
10432
  if (this.ro || !this.contentArea)
11349
10433
  return;
11350
- const ro = (this.ro = new index$2(() => this.resize()));
10434
+ const ro = (this.ro = new ResizeObserver(() => this.resize()));
11351
10435
  ro.observe(this.contentArea);
11352
10436
  }
11353
10437
  componentWillLoad() {
@@ -14141,8 +13225,15 @@ let FieldValidator = class extends H {
14141
13225
  this.nanoSubmit = createEvent(this, "nanoSubmit", 7);
14142
13226
  this.nanoInvalid = createEvent(this, "nanoInvalid", 7);
14143
13227
  this.submitted = false;
14144
- this.fields = [];
14145
- // annoyingly, whenever we attempt to checkValidty it fires `invalid` events.
13228
+ this.allFields = [];
13229
+ this.nanoFieldSelector = `
13230
+ nano-input,
13231
+ nano-select,
13232
+ nano-file-upload,
13233
+ nano-date-input,
13234
+ nano-checkbox
13235
+ `;
13236
+ // annoyingly, whenever we attempt to `checkValidty()` it fires `invalid` events.
14146
13237
  // this is used to prevent infinite loops / multiple calls
14147
13238
  this.internalValidate = false;
14148
13239
  // Public API
@@ -14151,39 +13242,80 @@ let FieldValidator = class extends H {
14151
13242
  /** Tries to scroll to the first invalid field on submit */
14152
13243
  this.scrollToInvalid = true;
14153
13244
  this._dirty = false;
13245
+ /** By default, `nano-field-validator` will also track all native form field elements.
13246
+ * You can add extra web-component form fields to listen to
13247
+ * (as long as they match the standard form field spec) by using the `fieldSelector` prop.
13248
+ */
13249
+ this.extraFieldSelector = 'input, select, textarea';
14154
13250
  // Event handlers
14155
- /** Fired whenever store values change and potentially checks validity */
14156
- this.handleStoreChange = async (_key, _newVal) => {
13251
+ /**
13252
+ * Fired whenever store values change and potentially checks validity
13253
+ * @param key - the key of the store that's just changed
13254
+ * @param newVal - the incoming, new value
13255
+ */
13256
+ this.handleStoreChange = async (key, newVal) => {
13257
+ const found = this.allFields.find((field) => field.name === key);
13258
+ // field update has come programmatically (not from ui),
13259
+ // so let's update the underlying ui field
13260
+ if ((found &&
13261
+ found.tagName === 'NANO-FILE-UPLOAD' &&
13262
+ !this.fileStateEqual(key, found)) ||
13263
+ (found.tagName !== 'NANO-FILE-UPLOAD' && found.value !== newVal)) {
13264
+ this.storeToFields([found]);
13265
+ }
14157
13266
  if (this.validateOn === 'dirty' && this.dirty) {
14158
13267
  this.internalValidate = true;
14159
13268
  await this.validateAllFields();
14160
13269
  this._valid = this.activeForm.checkValidity();
14161
13270
  this.internalValidate = false;
14162
13271
  }
14163
- this.nanoPayloadChange.emit(this.store.state);
13272
+ this.nanoPayloadChange.emit(this._store.state);
14164
13273
  };
14165
- /** Handles field value changes and passes to store */
13274
+ /**
13275
+ * Handles nano field value changes and passes to store
13276
+ * @param ev - the incoming change event
13277
+ */
14166
13278
  this.handleFieldChange = (ev) => {
13279
+ if (!this.nanoFields.includes(ev.target))
13280
+ return;
14167
13281
  this._dirty = true;
14168
- this.setFieldValue([ev.target]);
13282
+ this.fieldsToStore([ev.target]);
13283
+ };
13284
+ /**
13285
+ * Handles non-nano field value changes and passes to store
13286
+ * @param ev - the incoming change event
13287
+ */
13288
+ this.handlePlainFieldChange = (ev) => {
13289
+ if (!this.plainFields.includes(ev.target))
13290
+ return;
13291
+ this.fieldsToStore([ev.target]);
14169
13292
  };
14170
- /** Handles default field validation events */
13293
+ /**
13294
+ * Handles default field validation events
13295
+ * @param ev - the invalid event
13296
+ */
14171
13297
  this.handleFormInvalid = async (ev) => {
14172
- ev.preventDefault();
13298
+ // if it's a non-nano field, we'll let default html5 validation do it's thing
13299
+ if (!this.plainFields.includes(ev.target)) {
13300
+ ev.preventDefault();
13301
+ }
14173
13302
  this._valid = false;
13303
+ // whenever `checkValidity` is called, this handler is in-turn called.
13304
+ // this flag is used to stop infinite loops
14174
13305
  if (this.internalValidate)
14175
13306
  return;
13307
+ // a submit must have happened to if 'submitThenDirty' turn on 'dirty' checking now
14176
13308
  if (this.validateOn === 'submitThenDirty')
14177
13309
  this.validateOn = 'dirty';
14178
13310
  this.submitted = true;
14179
13311
  await this.validateAllFields();
13312
+ this.internalValidate = true;
13313
+ this._valid = this.activeForm.checkValidity();
13314
+ this.internalValidate = false;
14180
13315
  // kinda insane...but if we're only validating on submit, then if the form is currently
14181
13316
  // in an invalid state, when submitting, it will fire an invalid event and not
14182
13317
  // submit the form. So let's test to make sure it is really invalid, and submit if not
14183
13318
  if (this.validateOn === 'submit') {
14184
- this.internalValidate = true;
14185
- this._valid = this.activeForm.checkValidity();
14186
- this.internalValidate = false;
14187
13319
  if (this._valid) {
14188
13320
  this.submitForm();
14189
13321
  return;
@@ -14192,7 +13324,10 @@ let FieldValidator = class extends H {
14192
13324
  this.scrollToFirstInvalid();
14193
13325
  this.nanoInvalid.emit();
14194
13326
  };
14195
- /** stops default form submission, checks if valid, then submits manually */
13327
+ /**
13328
+ * stops default form submission, checks if valid, then submits manually
13329
+ * @param e - a submit event from the nested form element
13330
+ */
14196
13331
  this.handleSubmit = async (e) => {
14197
13332
  e.preventDefault();
14198
13333
  if (this.validateOn === 'submitThenDirty')
@@ -14217,15 +13352,18 @@ let FieldValidator = class extends H {
14217
13352
  return this._activeForm;
14218
13353
  }
14219
13354
  set activeForm(form) {
14220
- if (this._activeForm)
13355
+ // manages event listners on whatever form is used (slotted on created here)
13356
+ if (!form)
13357
+ return;
13358
+ if (this._activeForm) {
14221
13359
  this._activeForm.removeEventListener('invalid', this.handleFormInvalid, true);
14222
- if (form)
14223
- form.addEventListener('invalid', this.handleFormInvalid, true);
13360
+ }
13361
+ form.addEventListener('invalid', this.handleFormInvalid, true);
14224
13362
  this._activeForm = form;
14225
13363
  }
14226
13364
  /** Sync up validateOn with all fields */
14227
13365
  validateOnChange() {
14228
- this.fields.forEach((field) => {
13366
+ this.nanoFields.forEach((field) => {
14229
13367
  if (field.tagName === 'NANO-CHECKBOX') {
14230
13368
  const cbg = field.closest('nano-checkbox-group');
14231
13369
  if (cbg)
@@ -14245,11 +13383,15 @@ let FieldValidator = class extends H {
14245
13383
  get valid() {
14246
13384
  return this._valid;
14247
13385
  }
14248
- /** The current form payload as a reactive store. @readonly */
13386
+ /** The current form state as a stencil store. */
13387
+ get store() {
13388
+ return this._store;
13389
+ }
13390
+ /** The current form payload as a reactive proxy. @readonly */
14249
13391
  get payload() {
14250
- return this.store.state;
13392
+ return this._store.state;
14251
13393
  }
14252
- /** Returns true if validation errors will be displayed to the user */
13394
+ /** Returns true if validation errors will be displayed to the user. @readonly */
14253
13395
  get showValidation() {
14254
13396
  return (this.validateOn === 'dirty' && this.dirty) || this.submitted;
14255
13397
  }
@@ -14266,37 +13408,94 @@ let FieldValidator = class extends H {
14266
13408
  ```
14267
13409
  */
14268
13410
  get validationState() {
13411
+ // TODO - migrate nano-fields away from using proprietary methods in a bid to be closer to the spec
13412
+ // this is big and ugly.
13413
+ // why? Cos' it must unify checking validity state for both
13414
+ // `nano-...` and plain form fields.
14269
13415
  const validationState = [];
14270
- this.fields.forEach(async (field) => {
13416
+ this.allFields.forEach(async (field) => {
14271
13417
  const found = validationState.find((v) => v.name === field.name);
13418
+ let pf;
13419
+ let nf;
14272
13420
  if (found) {
14273
- found.validityMessage = field.validityMessage.length
14274
- ? field.validityMessage
14275
- : found.validityMessage;
13421
+ if (field.validationMessage) {
13422
+ pf = field;
13423
+ found.validityMessage = pf.validationMessage.length
13424
+ ? pf.validationMessage
13425
+ : found.validityMessage;
13426
+ this.internalValidate = true;
13427
+ if (found.valid && !pf.checkValidity())
13428
+ found.valid = false;
13429
+ this.internalValidate = false;
13430
+ }
13431
+ else if (field.validityMessage) {
13432
+ nf = field;
13433
+ found.validityMessage = nf.validityMessage.length
13434
+ ? nf.validityMessage
13435
+ : nf.validityMessage;
13436
+ if (found.valid && nf.invalid)
13437
+ found.valid = false;
13438
+ }
14276
13439
  if (!found.fields.find((f) => f === field))
14277
13440
  found.fields.push(field);
14278
- if (found.valid && field.invalid)
14279
- found.valid = false;
14280
- return;
13441
+ }
13442
+ let valid;
13443
+ let validityMessage;
13444
+ if (field.checkValidity) {
13445
+ pf = field;
13446
+ this.internalValidate = true;
13447
+ valid = pf.checkValidity();
13448
+ this.internalValidate = false;
13449
+ validityMessage = pf.validationMessage;
13450
+ }
13451
+ else {
13452
+ nf = field;
13453
+ valid = !nf.invalid;
13454
+ validityMessage = nf.validityMessage;
14281
13455
  }
14282
13456
  validationState.push({
14283
13457
  fields: [field],
14284
13458
  name: field.name,
14285
- valid: !field.invalid,
14286
- value: this.store.state[field.name],
13459
+ value: this._store.state[field.name],
14287
13460
  dirty: false,
14288
- validityMessage: field.validityMessage,
13461
+ valid,
13462
+ validityMessage,
14289
13463
  });
14290
13464
  });
14291
13465
  return validationState;
14292
13466
  }
13467
+ /**
13468
+ * Sets the state of the form using an object of key / value pairs.
13469
+ * @param state - the state to load in the store
13470
+ */
13471
+ async setStore(state) {
13472
+ Object.entries(state).forEach(([key, val]) => (this.store.state[key] = val));
13473
+ }
13474
+ /**
13475
+ * Sets custom validity for all / some form fields.
13476
+ * @param validity - a validity object of `{fieldName: errorString}` pairs. Set as an empty string to clear the error.
13477
+ */
13478
+ async setCustomValidity(validity) {
13479
+ return await Promise.all(Object.entries(validity).map(async ([key, err]) => {
13480
+ const field = this.allFields.find((f) => f.name === key);
13481
+ if (!!field)
13482
+ await this.setFieldError(field, err);
13483
+ }));
13484
+ }
13485
+ /**
13486
+ * Clear all custom validation.
13487
+ * @param validity
13488
+ */
13489
+ async resetValidity() {
13490
+ return await Promise.all(this.allFields.map(async (field) => await this.setFieldError(field, '')));
13491
+ }
14293
13492
  // private methods
14294
13493
  attachSlotObserver() {
14295
13494
  if (!!this.mo)
14296
13495
  return;
14297
13496
  const mo = (this.mo = new MutationObserver((_entries) => {
14298
13497
  const form = this.host.querySelector('form');
14299
- if (form !== this.activeForm)
13498
+ if (form && form !== this.activeForm)
14300
13499
  this.activeForm = form;
14301
13500
  this.setupFields();
14302
13501
  }));
@@ -14309,95 +13508,177 @@ let FieldValidator = class extends H {
14309
13508
  }
14310
13509
  /** Checks for new `nano-...` fields and adds them to our watch array and value store */
14311
13510
  setupFields() {
14312
- let fields = Array.from(this.host.querySelectorAll(`
14313
- nano-input,
14314
- nano-select,
14315
- nano-file-upload,
14316
- nano-date-input,
14317
- nano-checkbox
14318
- `));
14319
- fields = fields.filter((f) => !!f.name && !!f.name.length);
13511
+ let nanoFields = Array.from(this.host.querySelectorAll(this.nanoFieldSelector));
13512
+ let plainFields = Array.from(this.host.querySelectorAll(this.extraFieldSelector)).filter((e) => !e.closest(this.nanoFieldSelector));
13513
+ nanoFields = nanoFields.filter((f) => !!f.name && !!f.name.length);
13514
+ plainFields = plainFields.filter((f) => !!f.name && !!f.name.length);
14320
13515
  // do we have any currently un-watched fields?
14321
- if (!fields.filter((f) => !this.fields.includes(f)).length)
13516
+ if (![...nanoFields, ...plainFields].filter((f) => !this.allFields.includes(f)).length)
14322
13517
  return;
14323
13518
  // setup the initial store state / refresh on new fields
14324
- this.fields = fields;
13519
+ this.nanoFields = nanoFields;
13520
+ this.plainFields = plainFields;
13521
+ this.allFields = [...nanoFields, ...plainFields];
13522
+ this.storeToFields(this.allFields);
14325
13523
  this.validateOnChange();
14326
- this.setFieldValue(this.fields);
14327
- this.nanoPayloadChange.emit(this.store.state);
13524
+ this.fieldsToStore(this.allFields);
13525
+ this.nanoPayloadChange.emit(this._store.state);
13526
+ }
13527
+ storeToFields(fields) {
13528
+ fields.forEach((field) => {
13529
+ var _a;
13530
+ const fieldName = field.name;
13531
+ if (!fieldName.length ||
13532
+ typeof this._store.state[fieldName] === 'undefined')
13533
+ return;
13534
+ if (field.tagName === 'NANO-CHECKBOX' ||
13535
+ ['radio', 'checkbox'].includes(field.type)) {
13536
+ let cb = field;
13537
+ if (cb.type === 'radio' ||
13538
+ cb.type === 'segment' ||
13539
+ cb.type === 'segment-pill') {
13540
+ // single radio type control
13541
+ if (this._store.state[fieldName] === cb.value)
13542
+ cb.checked = true;
13543
+ else
13544
+ cb.checked = false;
13545
+ }
13546
+ else if (Array.isArray(this._store.state[fieldName])) {
13547
+ // multiple checkbox like controls
13548
+ if (this._store.state[fieldName].includes(cb.value))
13549
+ cb.checked = true;
13550
+ else
13551
+ cb.checked = false;
13552
+ }
13553
+ else {
13554
+ // single checkbox like control
13555
+ if (this._store.state[fieldName] === cb.value)
13556
+ cb.checked = true;
13557
+ else
13558
+ cb.checked = false;
13559
+ }
13560
+ return;
13561
+ }
13562
+ if (field.tagName === 'NANO-FILE-UPLOAD') {
13563
+ const ff = field;
13564
+ // this can only work if the field is empty rn... a one-time deal
13565
+ if (!((_a = ff.files) === null || _a === void 0 ? void 0 : _a.length))
13566
+ ff.files = this._store.state[fieldName];
13567
+ return;
13568
+ }
13569
+ // default
13570
+ field.value = this._store.state[fieldName];
13571
+ });
14328
13572
  }
14329
13573
  /** Loops through all `nano-...` fields and extracts their values into our store */
14330
- setFieldValue(fields) {
13574
+ fieldsToStore(fields) {
14331
13575
  fields.forEach((field) => {
14332
13576
  const fieldName = field.name;
14333
13577
  if (!fieldName.length)
14334
13578
  return;
14335
- switch (field.tagName) {
14336
- case 'NANO-CHECKBOX':
14337
- let cb = field;
14338
- if (cb.type === 'radio' ||
14339
- cb.type === 'segment' ||
14340
- cb.type === 'segment-pill') {
14341
- if (cb.checked)
14342
- this.store.state[fieldName] = cb.value;
14343
- else if (!cb.checked &&
14344
- (cb.value === this.store.state[fieldName] ||
14345
- !this.store.state[fieldName]))
14346
- this.store.state[fieldName] = '';
14347
- }
14348
- else if (this.fields.filter((f) => f.name === fieldName && f.tagName === 'NANO-CHECKBOX').length > 1) {
14349
- const currentArr = Array.isArray(this.store.state[fieldName])
14350
- ? this.store.state[fieldName]
14351
- : [];
14352
- if (cb.checked) {
14353
- if (!this.store.state[fieldName].includes(cb.value)) {
14354
- this.store.state[fieldName] = [...currentArr, cb.value];
14355
- }
14356
- }
14357
- else {
14358
- this.store.state[fieldName] = currentArr.filter((v) => v !== cb.value);
13579
+ if (field.tagName === 'NANO-CHECKBOX' ||
13580
+ ['radio', 'checkbox'].includes(field.type)) {
13581
+ let cb = field;
13582
+ if (cb.type === 'radio' ||
13583
+ cb.type === 'segment' ||
13584
+ cb.type === 'segment-pill') {
13585
+ // radio type control - only one can be checked
13586
+ if (cb.checked)
13587
+ this._store.state[fieldName] = cb.value;
13588
+ }
13589
+ else if (this.allFields.filter((f) => f.name === fieldName &&
13590
+ (f.tagName === 'NANO-CHECKBOX' ||
13591
+ f.type === 'checkbox')).length > 1) {
13592
+ // multiple checkbox type control
13593
+ const currentArr = Array.isArray(this._store.state[fieldName])
13594
+ ? this._store.state[fieldName]
13595
+ : [];
13596
+ if (cb.checked) {
13597
+ // checked
13598
+ if (!this._store.state[fieldName].includes(cb.value)) {
13599
+ this._store.state[fieldName] = [...currentArr, cb.value];
14359
13600
  }
14360
13601
  }
13602
+ else {
13603
+ // unchecked
13604
+ this._store.state[fieldName] = currentArr.filter((v) => v !== cb.value);
13605
+ }
13606
+ }
13607
+ else {
13608
+ // single checkbox - on or off
13609
+ if (cb.checked)
13610
+ this._store.state[fieldName] = cb.value;
14361
13611
  else
14362
- this.store.state[fieldName] = cb.value;
14363
- break;
14364
- case 'NANO-FILE-UPLOAD':
14365
- this.store.state[fieldName] = field.files;
14366
- break;
14367
- default:
14368
- this.store.state[fieldName] = field.value;
14369
- break;
13612
+ this._store.state[fieldName] = '';
13613
+ }
13614
+ return;
13615
+ }
13616
+ if (field.tagName === 'NANO-FILE-UPLOAD') {
13617
+ const ff = field;
13618
+ if (!this.fileStateEqual(fieldName, ff))
13619
+ this._store.state[fieldName] = ff.files;
13620
+ return;
14370
13621
  }
13622
+ // default
13623
+ this._store.state[fieldName] = field.value;
14371
13624
  });
14372
13625
  }
14373
- /** Checks for user defined validations */
13626
+ /**
13627
+ * Tries to ascertain whether the current model
13628
+ * value is the same as the `nano-file-upload` value
13629
+ * @param fieldName - the key to access from the data store
13630
+ * @param field - the nano-file-upload field to assess against
13631
+ * @returns true for equal, false for not equal
13632
+ */
13633
+ fileStateEqual(fieldName, field) {
13634
+ return (JSON.stringify(this._store.state[fieldName]) ===
13635
+ JSON.stringify(field.files) ||
13636
+ this._store.state[fieldName] == field.files);
13637
+ }
13638
+ /**
13639
+ * Checks for user defined validations
13640
+ * @param key - current key of the data model to validate
13641
+ * @param newVal - the newly set, incoming value to validate
13642
+ */
14374
13643
  async validate(key, newVal) {
14375
13644
  if (!this.validation)
14376
13645
  return;
14377
- const res = this.validation(key, newVal, this.store.state);
13646
+ const res = this.validation(key, newVal, this._store.state);
14378
13647
  // no nothing - return
14379
13648
  if (!res)
14380
13649
  return;
14381
13650
  // stencil public methods are async
14382
- // so we must to coerce our validation
13651
+ // so we must coerce our validation
14383
13652
  // collection loop into a promise
14384
13653
  await Promise.all(Object.entries(res).map(async ([key, o]) => {
14385
13654
  // switch on/off validation messages
14386
- const field = this.fields.find((f) => f.name === key);
13655
+ const field = this.allFields.find((f) => f.name === key);
14387
13656
  let validityTarget = field;
14388
13657
  if (field.tagName === 'NANO-CHECKBOX') {
13658
+ // if we have a checkbox-group, set the validation message there
14389
13659
  const cbg = field.closest('nano-checkbox-group');
14390
13660
  validityTarget = cbg || field;
14391
13661
  }
14392
- // status is now valid - clear the error
14393
- if (validityTarget.validityMessage === o.msg && o.valid)
13662
+ if ((validityTarget.validityMessage ||
13663
+ validityTarget.validationMessage) === o.msg &&
13664
+ o.valid) {
13665
+ // status is now valid - clear the error
14394
13666
  await this.setFieldError(validityTarget, '');
14395
- // status is invalid. Set the error
13667
+ }
14396
13668
  else if (!o.valid) {
13669
+ // status is invalid. Set the error
14397
13670
  await this.setFieldError(validityTarget, o.msg);
14398
13671
  }
14399
13672
  }));
14400
13673
  }
13674
+ /** Loops through all store entries and checks custom validation */
13675
+ async validateAllFields() {
13676
+ // This forces our loop to `await` and finish sequentially ... silly async stencil methods
13677
+ await Object.entries(this._store.state).reduce(async (memo, [key, value]) => {
13678
+ await memo;
13679
+ await this.validate(key, value);
13680
+ }, undefined);
13681
+ }
14401
13682
  /**
14402
13683
  * Utility to smooth out setting error messages
14403
13684
  * (it's a different method on `nano-checkbox` 'cos they don't show errors themselves)
@@ -14407,16 +13688,10 @@ let FieldValidator = class extends H {
14407
13688
  async setFieldError(field, msg) {
14408
13689
  if (field['showError'])
14409
13690
  await field.showError(msg);
14410
- else
13691
+ else if (field['setError'])
14411
13692
  await field.setError(msg);
14412
- }
14413
- /** Loops through all store entries and checks field validity */
14414
- async validateAllFields() {
14415
- // This forces our loop to `await` and finish sequentially ... silly async stencil methods
14416
- await Object.entries(this.store.state).reduce(async (memo, [key, value]) => {
14417
- await memo;
14418
- await this.validate(key, value);
14419
- }, undefined);
13693
+ else
13694
+ field.setCustomValidity(msg);
14420
13695
  }
14421
13696
  scrollToFirstInvalid() {
14422
13697
  if (!this.scrollToInvalid)
@@ -14439,23 +13714,27 @@ let FieldValidator = class extends H {
14439
13714
  }
14440
13715
  connectedCallback() {
14441
13716
  this.userForm = this.host.querySelector('form');
13717
+ this._store = createStore({});
14442
13718
  }
14443
13719
  componentDidLoad() {
14444
13720
  requestAnimationFrame(() => {
14445
- this.store = createStore({});
14446
13721
  this.setupFields();
14447
13722
  this.attachSlotObserver();
14448
- this.store.on('set', (key, value) => this.handleStoreChange(key, value));
14449
13723
  this.host.addEventListener('nanoChange', this.handleFieldChange);
13724
+ this.host.addEventListener('input', this.handlePlainFieldChange);
13725
+ this.host.addEventListener('change', this.handlePlainFieldChange);
14450
13726
  this.host.addEventListener('submit', this.handleSubmit);
13727
+ this._store.on('set', this.handleStoreChange);
14451
13728
  });
14452
13729
  }
14453
13730
  disconnectedCallback() {
14454
13731
  if (this.mo)
14455
13732
  this.mo.disconnect();
14456
- this.store.dispose();
14457
13733
  this.host.removeEventListener('nanoChange', this.handleFieldChange);
13734
+ this.host.removeEventListener('input', this.handlePlainFieldChange);
13735
+ this.host.removeEventListener('change', this.handlePlainFieldChange);
14458
13736
  this.host.removeEventListener('submit', this.handleSubmit);
13737
+ this._store.reset();
14459
13738
  if (this.activeForm)
14460
13739
  this.activeForm.removeEventListener('invalid', this.handleFormInvalid, true);
14461
13740
  }
@@ -14465,11 +13744,12 @@ let FieldValidator = class extends H {
14465
13744
  get host() { return this; }
14466
13745
  static get watchers() { return {
14467
13746
  "userForm": ["userFormChange"],
14468
- "validateOn": ["validateOnChange"]
13747
+ "validateOn": ["validateOnChange"],
13748
+ "extraFieldSelector": ["attachSlotObserver"]
14469
13749
  }; }
14470
13750
  };
14471
13751
 
14472
- const fileUploadCss = ".sc-nano-file-upload-h{-webkit-box-sizing:border-box;box-sizing:border-box}*.sc-nano-file-upload,*.sc-nano-file-upload::before,*.sc-nano-file-upload::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden].sc-nano-file-upload{display:none !important}.sc-nano-file-upload-h{min-height:1rem;display:block;--invalid-msg-color:var(--nano-color-danger, #ef4135);--invalid-msg-font-size:var(--nano-input-help-font-size, 0.75em);--help-msg-color:var(--nano-input-help-color, #616d6e);--label-color:var(--nano-input-label-color, \"currentColor\");--label-font-size:var(--nano-input-label-color, 1em);--label-padding:var(--nano-input-padding-bottom, var(--nano-input-padding, 6px));--label-color--invalid:var(--nano-input-label-color-invalid, \"currentColor\");--drop-bg:#f2f7f9;--drop-text:#756f6a;--drop-height:3.5em;--drop-border-tint:var(--nano-color-primary-rgb, 0, 116, 149);--drop-border-width:2px;--drop-border-radius:5px;--drop-bg--invalid:var(--nano-input-background-color, white);--drop-border--invalid:var(--nano-color-danger-rgb, 239, 65, 53);--btn-bg:var(--nano-color-primary, #007495);--btn-text:var(--nano-color-primary-contrast, #fff);--btn-icon-size:var(--nano-btn-icon-size, 1.4em);--btn-padding-top:var(--nano-btn-padding-top, 0.5em);--btn-padding-bottom:var(--nano-btn-padding-bottom, 0.5em);--btn-padding-start:var(--nano-btn-padding-start, 1em);--btn-padding-end:var(--nano-btn-padding-end, 1em)}[disabled].sc-nano-file-upload-h:not([disabled=false]){opacity:0.7}[disabled].sc-nano-file-upload-h:not([disabled=false]) *.sc-nano-file-upload{pointer-events:none !important}.file-upload__label.sc-nano-file-upload{font-size:var(--label-font-size);padding:0 0 var(--label-padding);margin:0;line-height:1}[invalid].sc-nano-file-upload-h:not([invalid=false]) .file-upload__label.sc-nano-file-upload{color:var(--label-color--invalid)}.file-upload__input.sc-nano-file-upload{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.file-upload__error.sc-nano-file-upload,.file-upload__help.sc-nano-file-upload,.file-upload__more.sc-nano-file-upload,.file-upload__label.sc-nano-file-upload{display:block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.file-upload__more.sc-nano-file-upload{height:1em;margin-left:3px;margin-right:0;margin-top:calc(var(--label-padding) / 2);margin-bottom:var(--label-padding);position:relative}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__more.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:3px;margin-inline-start:3px;-webkit-margin-end:0;margin-inline-end:0}}.file-upload__error.sc-nano-file-upload,.file-upload__help.sc-nano-file-upload{top:0;left:0;position:absolute;font-size:var(--invalid-msg-font-size);line-height:1.2;-webkit-transition:0.3s ease-out opacity;transition:0.3s ease-out opacity}.file-upload--invalid.sc-nano-file-upload .file-upload__error.sc-nano-file-upload,.file-upload--invalid.sc-nano-file-upload .file-upload__help.sc-nano-file-upload{opacity:1}.file-upload__error.sc-nano-file-upload{color:var(--invalid-msg-color);font-stretch:condensed;opacity:0}.file-upload--invalid.sc-nano-file-upload .file-upload__error.sc-nano-file-upload{opacity:1}.file-upload__help.sc-nano-file-upload{font-style:italic;opacity:1;color:var(--help-msg-color)}.file-upload--invalid.sc-nano-file-upload .file-upload__help.sc-nano-file-upload{opacity:0}.file-upload__drop.sc-nano-file-upload{position:relative;width:100%;display:inline-block}.file-upload__drop-area.sc-nano-file-upload{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background-color:var(--drop-bg);color:var(--drop-text);min-height:var(--drop-height);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:0.9em;position:relative;-webkit-transition:background-color 0.15s ease-in-out;transition:background-color 0.15s ease-in-out;padding:0.5rem}[disabled].sc-nano-file-upload-h:not([disabled=false]) .file-upload__drop-area.sc-nano-file-upload{opacity:0.7}.file-upload--invalid.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload{background-color:var(--drop-bg--invalid)}.file-upload--dragging.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload{background-color:#fff}.file-upload__drop-area.sc-nano-file-upload::after{content:\"\";position:absolute;border-radius:var(--drop-border-radius);border-width:var(--drop-border-width);border-color:rgba(var(--drop-border-tint), 0.5);border-style:dashed;top:0;bottom:0;left:0;right:0;-webkit-transition:top 0.1s ease-in-out, bottom 0.1s ease-in-out, left 0.1s ease-in-out, right 0.1s ease-in-out;transition:top 0.1s ease-in-out, bottom 0.1s ease-in-out, left 0.1s ease-in-out, right 0.1s ease-in-out}.file-upload--invalid.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload::after{border-color:rgba(var(--drop-border--invalid), 1)}.file-upload--dragging.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload::after{top:5px;bottom:5px;left:5px;right:5px}.file-upload__drop-area.sc-nano-file-upload span.sc-nano-file-upload{color:rgba(var(--drop-border-tint), 1);text-decoration:underline;border-radius:2px;z-index:1;cursor:pointer;position:relative}.file-upload--focus.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload span.sc-nano-file-upload{-webkit-box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)))}.file-upload__list.sc-nano-file-upload{list-style:none;margin:0;padding:0}.file-upload__list-wrap.sc-nano-file-upload{position:relative;top:-4px}.file-upload__list-item.sc-nano-file-upload{width:100%;margin:0 0 2px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-animation:hideListItem 0.3s ease-in-out forwards;animation:hideListItem 0.3s ease-in-out forwards}@-webkit-keyframes hideListItem{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes hideListItem{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}}.file-upload__list-item--active.sc-nano-file-upload{-webkit-animation:showListItem 0.3s ease-in-out forwards;animation:showListItem 0.3s ease-in-out forwards}@-webkit-keyframes showListItem{0%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes showListItem{0%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}}.file-upload__list.sc-nano-file-upload .list-title.sc-nano-file-upload{background:var(--nano-color-blue--faded);border-radius:5px;padding:5px 5px;margin-right:2px;display:block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:0.9em;color:var(--help-msg-color)}.file-upload__list.sc-nano-file-upload .list-button.sc-nano-file-upload{background:var(--nano-color-blue--faded);border-radius:5px;margin:2px}.file-upload__list.sc-nano-file-upload .list-error.sc-nano-file-upload{--color:rgba(var(--drop-border--invalid), 1)}.file-upload__button.sc-nano-file-upload{margin:0;padding:0;border:none;background-color:transparent;font:inherit;-webkit-box-align:center;text-decoration:none;color:inherit;-webkit-transition:background-color 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out, -webkit-box-shadow 100ms ease-in-out;transition:background-color 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out, -webkit-box-shadow 100ms ease-in-out;transition:background-color 100ms ease-in-out, box-shadow 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out;transition:background-color 100ms ease-in-out, box-shadow 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out, -webkit-box-shadow 100ms ease-in-out;padding-left:var(--nano-btn-padding-start, 1rem);padding-right:var(--nano-btn-padding-end, 1rem);padding-top:var(--nano-btn-padding-top, 0.5rem);padding-bottom:var(--nano-btn-padding-bottom, 0.5rem);-webkit-box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2));box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2));display:inline-block;border-radius:var(--nano-btn-border-radius, 5px);line-height:var(--nano-btn-line-height, 1.5rem);font-weight:500;cursor:pointer;background:rgba(0, 0, 0, 0.02);background-color:var(--btn-bg);color:var(--btn-text);--nano-btn-icon-size:var(--btn-icon-size);--nano-btn-line-height:var(--btn-icon-size);--nano-btn-padding-top:var(--btn-padding-top);--nano-btn-padding-bottom:var(--btn-padding-bottom);--nano-btn-padding-start:var(--btn-padding-start);--nano-btn-padding-end:var(--btn-padding-end);max-width:100%;font-size:0.9em}.file-upload__button.sc-nano-file-upload::-moz-focus-inner{border:0;padding:0}.file-upload__button.sc-nano-file-upload:hover,.file-upload__button.sc-nano-file-upload:focus{text-decoration:none;color:inherit}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.sc-nano-file-upload{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--nano-btn-padding-start, 1rem);padding-inline-start:var(--nano-btn-padding-start, 1rem);-webkit-padding-end:var(--nano-btn-padding-end, 1rem);padding-inline-end:var(--nano-btn-padding-end, 1rem)}}@media print{.file-upload__button.sc-nano-file-upload{display:none}}.file-upload__button.sc-nano-file-upload:focus,.file-upload__button.button--focus.sc-nano-file-upload{outline:none;-webkit-box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)))}.file-upload__button.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:0.5rem;margin-right:0;font-size:var(--nano-btn-icon-size, 1rem);vertical-align:middle;margin-top:-0.188rem;display:inline-block}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:0.5rem;margin-inline-start:0.5rem;-webkit-margin-end:0;margin-inline-end:0}}.file-upload__button.button--icon-start.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:0;margin-right:0.5rem}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.button--icon-start.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0.5rem;margin-inline-end:0.5rem}}.file-upload__button.sc-nano-file-upload:hover:not(.file-upload__button--disabled){-webkit-box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.2));box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.2))}.file-upload__button.sc-nano-file-upload:active:not(.button--disabled):not(:disabled){-webkit-box-shadow:none;box-shadow:none}.file-upload__button--disabled.sc-nano-file-upload,.file-upload__button.sc-nano-file-upload:disabled{opacity:0.6}.file-upload__button--disabled.sc-nano-file-upload:hover,.file-upload__button.sc-nano-file-upload:disabled:hover{cursor:default}.file-upload__button.sc-nano-file-upload:hover:not(.button--disabled):not(:disabled),.file-upload__button.button--active.sc-nano-file-upload{background-color:var(--nano-color-primary-shade, #00637f);color:var(--btn-text)}.file-upload__button.sc-nano-file-upload:hover:not(.button--disabled):not(:disabled).button--keyline,.file-upload__button.button--active.button--keyline.sc-nano-file-upload{background-color:var(--btn-bg);color:var(--btn-text)}.file-upload__button.sc-nano-file-upload:focus{color:var(--btn-text)}.file-upload__button.button--keyline.sc-nano-file-upload{background:transparent;border-style:var(--nano-btn-border-style, solid);border-width:var(--nano-btn-border-width, 2px);border-radius:var(--nano-btn-border-radius, 5px);color:var(--btn-bg);border-color:var(--btn-bg)}.file-upload__button.button--keyline.sc-nano-file-upload:hover:not(.button--disabled):not(:disabled),.file-upload__button.button--keyline.sc-nano-file-upload:not(.button--focus),.file-upload__button.button--keyline.button--active.sc-nano-file-upload{-webkit-box-shadow:none;box-shadow:none}[disabled].sc-nano-file-upload-h:not([disabled=false]) .file-upload__button.sc-nano-file-upload{opacity:0.4}.file-upload--dragging.sc-nano-file-upload .file-upload__button.sc-nano-file-upload{--nano-btn-border-style:dashed}.file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;font-size:inherit;padding:0;border:0;outline:none;background-color:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:auto;color:var(--clear-btn-color)}.is-invalid.sc-nano-file-upload-h .file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload{color:var(--clear-btn-color--invalid)}.file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:0.4rem;margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:0.4rem;margin-inline-start:0.4rem;-webkit-margin-end:0;margin-inline-end:0}}.file-upload__button.sc-nano-file-upload .file-upload__btn-content.sc-nano-file-upload{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.file-upload__button.sc-nano-file-upload .file-upload__btn-content.sc-nano-file-upload span.sc-nano-file-upload{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}";
13752
+ const fileUploadCss = ".sc-nano-file-upload-h{-webkit-box-sizing:border-box;box-sizing:border-box}*.sc-nano-file-upload,*.sc-nano-file-upload::before,*.sc-nano-file-upload::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden].sc-nano-file-upload{display:none !important}.sc-nano-file-upload-h{min-height:1rem;display:block;--invalid-msg-color:var(--nano-color-danger, #ef4135);--invalid-msg-font-size:var(--nano-input-help-font-size, 0.75em);--help-msg-color:var(--nano-input-help-color, #616d6e);--label-color:var(--nano-input-label-color, \"currentColor\");--label-font-size:var(--nano-input-label-color, 1em);--label-padding:var(--nano-input-padding-bottom, var(--nano-input-padding, 6px));--label-color--invalid:var(--nano-input-label-color-invalid, \"currentColor\");--drop-bg:#f2f7f9;--drop-text:#756f6a;--drop-height:3.5em;--drop-border-tint:var(--nano-color-primary-rgb, 0, 116, 149);--drop-border-width:2px;--drop-border-radius:5px;--drop-bg--invalid:var(--nano-input-background-color, white);--drop-border--invalid:var(--nano-color-danger-rgb, 239, 65, 53);--btn-bg:var(--nano-color-primary, #007495);--btn-text:var(--nano-color-primary-contrast, #fff);--btn-icon-size:var(--nano-btn-icon-size, 1.4em);--btn-padding-top:var(--nano-btn-padding-top, 0.5em);--btn-padding-bottom:var(--nano-btn-padding-bottom, 0.5em);--btn-padding-start:var(--nano-btn-padding-start, 1em);--btn-padding-end:var(--nano-btn-padding-end, 1em)}[disabled].sc-nano-file-upload-h:not([disabled=false]){opacity:0.7}[disabled].sc-nano-file-upload-h:not([disabled=false]) *.sc-nano-file-upload{pointer-events:none !important}.file-upload__label.sc-nano-file-upload{font-size:var(--label-font-size);padding:0 0 var(--label-padding);margin:0;line-height:1}[invalid].sc-nano-file-upload-h:not([invalid=false]) .file-upload__label.sc-nano-file-upload{color:var(--label-color--invalid)}.file-upload__input.sc-nano-file-upload{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.file-upload__error.sc-nano-file-upload,.file-upload__help.sc-nano-file-upload,.file-upload__more.sc-nano-file-upload,.file-upload__label.sc-nano-file-upload{display:block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.file-upload__more.sc-nano-file-upload{height:1em;margin-left:3px;margin-right:0;margin-top:calc(var(--label-padding) / 2);margin-bottom:var(--label-padding);position:relative}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__more.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:3px;margin-inline-start:3px;-webkit-margin-end:0;margin-inline-end:0}}.file-upload__error.sc-nano-file-upload,.file-upload__help.sc-nano-file-upload{top:0;left:0;position:absolute;font-size:var(--invalid-msg-font-size);line-height:1.2;-webkit-transition:0.3s ease-out opacity;transition:0.3s ease-out opacity}.file-upload--invalid.sc-nano-file-upload .file-upload__error.sc-nano-file-upload,.file-upload--invalid.sc-nano-file-upload .file-upload__help.sc-nano-file-upload{opacity:1}.file-upload__error.sc-nano-file-upload{color:var(--invalid-msg-color);font-stretch:condensed;opacity:0}.file-upload--invalid.sc-nano-file-upload .file-upload__error.sc-nano-file-upload{opacity:1}.file-upload__help.sc-nano-file-upload{font-style:italic;opacity:1;color:var(--help-msg-color)}.file-upload--invalid.sc-nano-file-upload .file-upload__help.sc-nano-file-upload{opacity:0}.file-upload__drop.sc-nano-file-upload{position:relative;width:100%;display:inline-block}.file-upload__drop-area.sc-nano-file-upload{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background-color:var(--drop-bg);color:var(--drop-text);min-height:var(--drop-height);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:0.9em;position:relative;-webkit-transition:background-color 0.15s ease-in-out;transition:background-color 0.15s ease-in-out;padding:0.5rem}[disabled].sc-nano-file-upload-h:not([disabled=false]) .file-upload__drop-area.sc-nano-file-upload{opacity:0.7}.file-upload--invalid.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload{background-color:var(--drop-bg--invalid)}.file-upload--dragging.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload{background-color:#fff}.file-upload__drop-area.sc-nano-file-upload::after{content:\"\";position:absolute;border-radius:var(--drop-border-radius);border-width:var(--drop-border-width);border-color:rgba(var(--drop-border-tint), 0.5);border-style:dashed;top:0;bottom:0;left:0;right:0;-webkit-transition:top 0.1s ease-in-out, bottom 0.1s ease-in-out, left 0.1s ease-in-out, right 0.1s ease-in-out;transition:top 0.1s ease-in-out, bottom 0.1s ease-in-out, left 0.1s ease-in-out, right 0.1s ease-in-out}.file-upload--invalid.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload::after{border-color:rgba(var(--drop-border--invalid), 1)}.file-upload--dragging.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload::after{top:5px;bottom:5px;left:5px;right:5px}.file-upload__drop-area.sc-nano-file-upload span.sc-nano-file-upload{color:rgba(var(--drop-border-tint), 1);text-decoration:underline;border-radius:2px;z-index:1;cursor:pointer;position:relative}.file-upload--focus.sc-nano-file-upload .file-upload__drop-area.sc-nano-file-upload span.sc-nano-file-upload{-webkit-box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)))}.file-upload__list.sc-nano-file-upload{list-style:none;margin:0;padding:0}.file-upload__list-wrap.sc-nano-file-upload{position:relative;top:-4px}.file-upload__list-item.sc-nano-file-upload{width:100%;margin:0 0 2px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-animation:hideListItem 0.3s ease-in-out forwards;animation:hideListItem 0.3s ease-in-out forwards}@-webkit-keyframes hideListItem{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes hideListItem{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}}.file-upload__list-item--active.sc-nano-file-upload{-webkit-animation:showListItem 0.3s ease-in-out forwards;animation:showListItem 0.3s ease-in-out forwards}@-webkit-keyframes showListItem{0%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes showListItem{0%{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform:translateZ(0);transform:translateZ(0)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform:translateZ(0);transform:translateZ(0)}}.file-upload__list.sc-nano-file-upload .list-title.sc-nano-file-upload{background:var(--nano-color-blue--faded);border-radius:5px;padding:5px 5px;margin-right:2px;display:block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:0.9em;color:var(--help-msg-color)}.file-upload__list.sc-nano-file-upload .list-button.sc-nano-file-upload{background:var(--nano-color-blue--faded);border-radius:5px;margin:2px}.file-upload__list.sc-nano-file-upload .list-error.sc-nano-file-upload{--color:rgba(var(--drop-border--invalid), 1)}.file-upload__button.sc-nano-file-upload{padding:0;border:none;background-color:transparent;font:inherit;-webkit-box-align:center;text-decoration:none;color:inherit;-webkit-transition:background-color 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out, -webkit-box-shadow 100ms ease-in-out;transition:background-color 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out, -webkit-box-shadow 100ms ease-in-out;transition:background-color 100ms ease-in-out, box-shadow 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out;transition:background-color 100ms ease-in-out, box-shadow 100ms ease-in-out, border-color 100ms ease-in-out, color 100ms ease-in-out, -webkit-box-shadow 100ms ease-in-out;padding-left:var(--nano-btn-padding-start, 1rem);padding-right:var(--nano-btn-padding-end, 1rem);padding-top:var(--nano-btn-padding-top, 0.5rem);padding-bottom:var(--nano-btn-padding-bottom, 0.5rem);-webkit-box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2));box-shadow:var(--nano-layer-shadow-medium, 0 2px 4px rgba(0, 0, 0, 0.2));display:inline-block;border-radius:var(--nano-btn-border-radius, 5px);line-height:var(--nano-btn-line-height, 1.5rem);font-weight:500;cursor:pointer;background:rgba(0, 0, 0, 0.02);background-color:var(--btn-bg);color:var(--btn-text);--nano-btn-icon-size:var(--btn-icon-size);--nano-btn-line-height:var(--btn-icon-size);--nano-btn-padding-top:var(--btn-padding-top);--nano-btn-padding-bottom:var(--btn-padding-bottom);--nano-btn-padding-start:var(--btn-padding-start);--nano-btn-padding-end:var(--btn-padding-end);max-width:100%;font-size:0.9em}.file-upload__button.sc-nano-file-upload::-moz-focus-inner{border:0;padding:0}.file-upload__button.sc-nano-file-upload:hover,.file-upload__button.sc-nano-file-upload:focus{text-decoration:none;color:inherit}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.sc-nano-file-upload{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--nano-btn-padding-start, 1rem);padding-inline-start:var(--nano-btn-padding-start, 1rem);-webkit-padding-end:var(--nano-btn-padding-end, 1rem);padding-inline-end:var(--nano-btn-padding-end, 1rem)}}@media print{.file-upload__button.sc-nano-file-upload{display:none}}.file-upload__button.sc-nano-file-upload:focus,.file-upload__button.button--focus.sc-nano-file-upload{outline:none;-webkit-box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)))}.file-upload__button.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:0.5rem;margin-right:0;font-size:var(--nano-btn-icon-size, 1rem);vertical-align:middle;margin-top:-0.188rem;display:inline-block}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:0.5rem;margin-inline-start:0.5rem;-webkit-margin-end:0;margin-inline-end:0}}.file-upload__button.button--icon-start.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:0;margin-right:0.5rem}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.button--icon-start.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0.5rem;margin-inline-end:0.5rem}}.file-upload__button.sc-nano-file-upload:hover:not(.file-upload__button--disabled){-webkit-box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.2));box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.2))}.file-upload__button.sc-nano-file-upload:active:not(.button--disabled):not(:disabled){-webkit-box-shadow:none;box-shadow:none}.file-upload__button--disabled.sc-nano-file-upload,.file-upload__button.sc-nano-file-upload:disabled{opacity:0.6}.file-upload__button--disabled.sc-nano-file-upload:hover,.file-upload__button.sc-nano-file-upload:disabled:hover{cursor:default}.file-upload__button.sc-nano-file-upload:hover:not(.button--disabled):not(:disabled),.file-upload__button.button--active.sc-nano-file-upload{background-color:var(--nano-color-primary-shade, #00637f);color:var(--btn-text)}.file-upload__button.sc-nano-file-upload:hover:not(.button--disabled):not(:disabled).button--keyline,.file-upload__button.button--active.button--keyline.sc-nano-file-upload{background-color:var(--btn-bg);color:var(--btn-text)}.file-upload__button.sc-nano-file-upload:focus{color:var(--btn-text)}.file-upload__button.button--keyline.sc-nano-file-upload{background:transparent;border-style:var(--nano-btn-border-style, solid);border-width:var(--nano-btn-border-width, 2px);border-radius:var(--nano-btn-border-radius, 5px);color:var(--btn-bg);border-color:var(--btn-bg)}.file-upload__button.button--keyline.sc-nano-file-upload:hover:not(.button--disabled):not(:disabled),.file-upload__button.button--keyline.sc-nano-file-upload:not(.button--focus),.file-upload__button.button--keyline.button--active.sc-nano-file-upload{-webkit-box-shadow:none;box-shadow:none}[disabled].sc-nano-file-upload-h:not([disabled=false]) .file-upload__button.sc-nano-file-upload{opacity:0.4}.file-upload--dragging.sc-nano-file-upload .file-upload__button.sc-nano-file-upload{--nano-btn-border-style:dashed}.file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;font-size:inherit;padding:0;border:0;outline:none;background-color:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:auto;color:var(--clear-btn-color)}.is-invalid.sc-nano-file-upload-h .file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload{color:var(--clear-btn-color--invalid)}.file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:0.4rem;margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.file-upload__button.sc-nano-file-upload .file-upload__clear-btn.sc-nano-file-upload nano-icon.sc-nano-file-upload{margin-left:unset;margin-right:unset;-webkit-margin-start:0.4rem;margin-inline-start:0.4rem;-webkit-margin-end:0;margin-inline-end:0}}.file-upload__button.sc-nano-file-upload .file-upload__btn-content.sc-nano-file-upload{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.file-upload__button.sc-nano-file-upload .file-upload__btn-content.sc-nano-file-upload span.sc-nano-file-upload{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}";
14473
13753
 
14474
13754
  let fileInputIds = 0;
14475
13755
  let getDataTransfer = () => new DataTransfer();
@@ -14677,7 +13957,7 @@ let FileUpload = class extends H {
14677
13957
  /** A File array that lists every selected file.
14678
13958
  * Has an added `objectURL` property returning a `DOMString`
14679
13959
  * containing an object URL that can be used to reference the contents of the specified source
14680
- * This list has no more than one member unless the multiple attribute is specified. @readonly */
13960
+ * This list has no more than one member unless the multiple attribute is specified */
14681
13961
  get files() {
14682
13962
  return this.inputEl
14683
13963
  ? Array.from(this.inputEl.files).map((file) => {
@@ -14686,6 +13966,9 @@ let FileUpload = class extends H {
14686
13966
  })
14687
13967
  : [];
14688
13968
  }
13969
+ set files(fs) {
13970
+ this.addNewFiles(this.arrToFileList(fs));
13971
+ }
14689
13972
  /** A file input's value attribute contains a DOMString that represents the path to the selected file(s).
14690
13973
  * If the user selected multiple files, the value represents the first file in the list of files they selected.
14691
13974
  * You can reset the file-upload control by setting the value to an emptry string e.g. `var input.value = ''` */
@@ -15964,8 +15247,9 @@ let GlobalNav = class extends H {
15964
15247
  static get style() { return globalNavCss; }
15965
15248
  };
15966
15249
 
15967
- const globalSearchResultsCss = ":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none !important}:host{display:block;-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%}.main-search{display:-webkit-box;display:-ms-flexbox;display:flex;background:white;font-size:14px;min-height:calc(100vh - 63px);-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.main-search__wrap{display:contents;height:100%}.main-search ul{margin:0;padding:0;list-style:none}.main-search li{margin:0;padding:0}.main-search button:not(.result__tags-tag){-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;background:none;position:relative;top:-2px}.main-search .icon-button{color:inherit;-ms-flex-item-align:normal;-ms-grid-row-align:normal;align-self:normal;padding:9px 7px;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.main-search__topbar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1em}.main-search__topbar::after{content:\"\";width:calc(100% - 30px);left:30px;position:relative;border-bottom:1px solid #e5eef1;padding-top:0.9em}.main-search__applied-filters{border:solid 1px #e4e6e8;text-transform:uppercase;border-radius:3px;font-weight:bold;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:0.9;padding:5px 5px 0 5px;letter-spacing:2px;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:0.5rem}.main-search__applied-filters span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}:host(.small) .main-search__applied-filters{display:none}.main-search__applied-nofilter{margin-left:0;margin-right:5px;margin-top:0;margin-bottom:3px;padding-left:7px;padding-right:7px;padding-top:10px;padding-bottom:10px;font-size:12px;color:rgba(69, 85, 86, 0.85)}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search__applied-nofilter{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:5px;margin-inline-end:5px}}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search__applied-nofilter{padding-left:unset;padding-right:unset;-webkit-padding-start:7px;padding-inline-start:7px;-webkit-padding-end:7px;padding-inline-end:7px}}.main-search__applied-filter{padding-left:8px;padding-right:2px;padding-top:5px;padding-bottom:3px;margin-left:0;margin-right:5px;margin-top:0;margin-bottom:5px;color:#455556;font-size:11px;border-radius:2px;border:solid 1px rgba(0, 132, 169, 0.5);background-color:rgba(0, 132, 169, 0.2);line-height:1}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search__applied-filter{padding-left:unset;padding-right:unset;-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:2px;padding-inline-end:2px}}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search__applied-filter{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:5px;margin-inline-end:5px}}.main-search__applied-filter .icon-button{padding-left:10px;padding-right:4px;padding-top:2px;padding-bottom:1px}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search__applied-filter .icon-button{padding-left:unset;padding-right:unset;-webkit-padding-start:10px;padding-inline-start:10px;-webkit-padding-end:4px;padding-inline-end:4px}}.main-search__applied-filter .icon-button nano-icon{pointer-events:none}.main-search .topbar__bkbtn{position:relative;left:-7px}:host(.small) .main-search .topbar__query{display:none}.main-search .topbar__filtering{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-left:1em;margin-right:0;margin-top:0;margin-bottom:0;-webkit-box-flex:1;-ms-flex:1;flex:1}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search .topbar__filtering{margin-left:unset;margin-right:unset;-webkit-margin-start:1em;margin-inline-start:1em;-webkit-margin-end:0;margin-inline-end:0}}.main-search .topbar__order{min-width:175px;max-width:200px;margin-left:auto;margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search .topbar__order{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:0;margin-inline-end:0}}:host(.small) .main-search .topbar__order{max-width:300px}.main-search .topbar nano-select{opacity:1;-webkit-transition:0.1s ease opacity;transition:0.1s ease opacity}.main-search .topbar nano-select:not(.hydrated){opacity:0}.main-search .topbar__show-filters{margin-left:0.5em;margin-right:0;margin-top:0;margin-bottom:0;text-transform:uppercase;display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search .topbar__show-filters{margin-left:unset;margin-right:unset;-webkit-margin-start:0.5em;margin-inline-start:0.5em;-webkit-margin-end:0;margin-inline-end:0}}.main-search .topbar__show-filters nano-icon{font-size:20px}:host(.small) .main-search .topbar__show-filters{display:-webkit-box;display:-ms-flexbox;display:flex}.main-search .topbar__filter-count{width:12px;height:12px;-webkit-box-shadow:inset 0 3px 4px 0 rgba(0, 0, 0, 0.2);box-shadow:inset 0 3px 4px 0 rgba(0, 0, 0, 0.2);border:solid 1px #005c76;background-color:#005c76;color:white;font-size:7px;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;line-height:1;margin-bottom:3px}.main-search__results{font-size:14px;padding:1em 40px;color:rgba(69, 85, 86, 0.85);width:70%;height:100%}@media (max-width: 576px){.main-search__results{padding:1em 20px}}:host(.small) .main-search__results{width:100%}.main-search__filters{outline:none;padding-left:0;padding-right:40px;padding-top:1.8em;padding-bottom:1em;-webkit-box-flex:1;-ms-flex:1 1 30%;flex:1 1 30%;-webkit-box-sizing:border-box;box-sizing:border-box}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search__filters{padding-left:unset;padding-right:unset;-webkit-padding-start:0;padding-inline-start:0;-webkit-padding-end:40px;padding-inline-end:40px}}@media (max-width: 576px){.main-search__filters{padding-right:20px}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search__filters{padding-right:unset;-webkit-padding-end:20px;padding-inline-end:20px}}}:host(:not(.small)) .main-search__filters{max-width:350px;min-width:220px}.filters{color:#455556;background:white;font-size:14px}:host(.small) .filters{position:fixed;width:0;height:0;z-index:10;top:0;right:0;-webkit-transition:all 0s ease 0.5s;transition:all 0s ease 0.5s;background:none}:host(.small) .filters.show{height:100vh;width:100vw;-webkit-transition:all 0s ease 0s;transition:all 0s ease 0s}:host(.small) .filters.show::after{opacity:1}:host(.small) .filters::after{content:\"\";background:rgba(0, 0, 0, 0.5);position:absolute;left:0;top:0;right:0;bottom:0;z-index:-1;opacity:0;-webkit-transition:0.1s ease opacity;transition:0.1s ease opacity}.filters__close-filters{display:none !important;font-size:1.4em}:host(.small) .filters__close-filters{display:inline-block !important;margin-left:auto;margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host(.small) .filters__close-filters{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:0;margin-inline-end:0}}:host(.small) .filters-wrap{position:absolute;top:0;right:0;background:#f7f6f6;-webkit-transform:translateX(100%);transform:translateX(100%);width:300px;min-width:200px;max-width:80vw;-webkit-transition:-webkit-transform 0.3s ease;transition:-webkit-transform 0.3s ease;transition:transform 0.3s ease;transition:transform 0.3s ease, -webkit-transform 0.3s ease;padding:1em;color:black;overflow:auto;height:100vh}:host(.small) .filters.show .filters-wrap{-webkit-transform:translateX(0%);transform:translateX(0%);-webkit-box-shadow:-3px -3px 7px rgba(0, 0, 0, 0.1);box-shadow:-3px -3px 7px rgba(0, 0, 0, 0.1)}.filters ul{margin:0;padding:0;list-style:none}.filters li{margin:0;padding:0}.filters nano-details{--padding:0.8em;margin:0.8em 0}.filters nano-details strong[slot]{display:block;padding-left:calc(20px - 0.8em)}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.filters nano-details strong[slot]{padding-left:unset;-webkit-padding-start:calc(20px - 0.8em);padding-inline-start:calc(20px - 0.8em);}}.filters nano-details nano-icon[slot=icon-end]{padding-left:calc(20px - 0.8em);padding-right:calc(20px - 0.8em)}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.filters nano-details nano-icon[slot=icon-end]{padding-left:unset;padding-right:unset;-webkit-padding-start:calc(20px - 0.8em);padding-inline-start:calc(20px - 0.8em);-webkit-padding-end:calc(20px - 0.8em);padding-inline-end:calc(20px - 0.8em)}}.filters li:last-child .filter-label{margin-bottom:0}.filters .filter-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;margin:0.5em 0;line-height:1.4;z-index:0}.filters .filter-label::before{margin-left:0;margin-right:1em;margin-top:0;margin-bottom:0;content:\"\";border:1px solid #007495;background:#fff;border-radius:3px;height:1em;width:1em;min-width:1em;min-height:1em;display:inline-block}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.filters .filter-label::before{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:1em;margin-inline-end:1em}}.filters .filter-label::after{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='%23ffffff'%20d='M173.898%20439.404l-166.4-166.4c-9.997-9.997-9.997-26.206%200-36.204l36.203-36.204c9.997-9.998%2026.207-9.998%2036.204%200L192%20312.69%20432.095%2072.596c9.997-9.997%2026.207-9.997%2036.204%200l36.203%2036.204c9.997%209.997%209.997%2026.206%200%2036.204l-294.4%20294.401c-9.998%209.997-26.207%209.997-36.204-.001z'/></svg>\");content:\"\";height:0.7em;width:0.7em;position:absolute;left:2px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:1;display:block;background-size:100%;background-position:center center;background-repeat:no-repeat}:host([dir=rtl]) .filters .filter-label::after{right:1px;left:auto}.filters .filter-cb{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.filters .filter-cb:checked+.filter-label::before{background:#245a6f}.filters .filter-cb:focus+.filter-label::before{-webkit-box-shadow:0 0 0 1px rgba(0, 0, 0, 0.7);box-shadow:0 0 0 1px rgba(0, 0, 0, 0.7)}.filters-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.filters-reset{color:#007495;font-size:12px;text-decoration:underline;margin-left:auto;margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.filters-reset{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:0;margin-inline-end:0}}:host(.small) .filters-reset{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.filters-title{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;text-transform:uppercase;color:rgba(69, 85, 86, 0.85);font-weight:bold;font-size:14px}:host(.small) .filters-title{display:none}.result{text-decoration:none;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:14px;border-bottom:1px solid #90c6e7}.result *{word-wrap:break-word;word-break:break-word}.result__title{margin:1em 0 0.5em 0;width:70%;display:-webkit-box;display:-ms-flexbox;display:flex}.result__title a{color:#0084a9;font-size:14px;line-height:1.43;text-decoration:none;font-weight:600}.result__title nano-icon{margin-left:0;margin-right:0.5em;margin-top:0;margin-bottom:0;min-width:20px;min-height:20px;opacity:0.8}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.result__title nano-icon{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0.5em;margin-inline-end:0.5em}}@media (max-width: 992px){.result__title{width:100%}}.result__body{color:#455556;font-size:13px;width:70%;text-decoration:none}@media (max-width: 992px){.result__body{width:100%}}.result__pdf{display:inline-block;-webkit-margin-start:0.5rem;margin-inline-start:0.5rem;color:#b5aea7}.result__meta{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;color:#455556;font-size:11px;line-height:13px;width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.result__meta>*{margin-top:0.5rem}.result__meta>*:not(:last-child){-webkit-padding-end:0;padding-inline-end:0}.result__meta>*:not(:last-child)::after{content:\"\";height:1rem;width:1px;background:#90c6e7;display:inline-block;-webkit-margin-start:0.7rem;margin-inline-start:0.7rem;-webkit-margin-end:0.7rem;margin-inline-end:0.7rem}@media (max-width: 576px){.result__meta>*:not(:last-child)::after{display:none}}@media (max-width: 576px){.result__meta{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}}.result__tags{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}@media (max-width: 576px){.result__tags{-webkit-padding-start:0;padding-inline-start:0}}.result__tags-tag{color:#455556;display:inline-block;font-size:0.4375rem;letter-spacing:1.4px;background:#fff;border-radius:2px;text-transform:uppercase;padding:0 4px 1px 5px;font-weight:600;margin:3px 0.25rem 0.25rem 0;border:1px solid #b5aea7;white-space:nowrap;line-height:13px}.result__type{font-weight:600;text-transform:capitalize;white-space:nowrap;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.result__date{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#455556}.result__source{color:#455556;-webkit-padding-end:0.75rem;padding-inline-end:0.75rem}.result__authors{font-size:12px;color:#455556;margin-bottom:0.25rem;text-decoration:none;width:70%}.result__buttons{width:70%;margin-bottom:0.5rem}.result__buttons-button{background-color:#007495;color:#fff;padding:5px 8px 1px;border-radius:4px;display:inline-block;font-size:11px;text-decoration:none;border:none}.result__promo{width:70%;margin-bottom:0.5rem;text-decoration:none;color:#455556}.result__promo-box{width:300px;background-color:#e3eef1;padding:12px 12px 8px 4px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;margin-top:1rem}.result__promo-bigdate{-webkit-box-flex:0;-ms-flex:0 1 60px;flex:0 1 60px;text-align:center;font-weight:600;color:#007495;text-transform:uppercase;line-height:1.25;letter-spacing:1.5px}@media (max-width: 992px){.result__promo-bigdate{width:100%}}.result__promo-bigdate span{color:#455556;display:block}.result__promo-bigdate~div{-webkit-padding-start:1rem;padding-inline-start:1rem;-webkit-border-start:1px solid #c5dbe1;border-inline-start:1px solid #c5dbe1}.result__promo-date{font-size:12px}.result__promo-venue{font-size:12px}.result__promo nano-icon{color:#007495;position:relative;top:1px;-webkit-padding-end:2px;padding-inline-end:2px}.result__image{display:block;background-size:cover;background-repeat:no-repeat;background-position:center;border-radius:4px;position:relative;width:100%;height:150px;margin-bottom:0.5rem}@media (min-width: 576px){.result__image{width:142px;height:80px}}.result__image nano-icon{position:absolute;top:calc(50% - 0.75rem);left:calc(50% - 0.75rem);font-size:1.5rem;color:#0084a9;--primary-color:#fff;--secondary-color:#0084a9;--primary-opacity:1}@media (max-width: 576px){.result__image nano-icon{font-size:3rem;top:calc(50% - 1.5rem);left:calc(50% - 1.5rem)}}.result__video-body{width:70%;text-decoration:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}@media (max-width: 992px){.result__video-body{width:100%}}@media (max-width: 576px){.result__video-body{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}}.result__video-body .result__body{-webkit-padding-start:1rem;padding-inline-start:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-bottom:0;-webkit-box-flex:1;-ms-flex:1;flex:1}@media (max-width: 576px){.result__video-body .result__body{-webkit-padding-start:0;padding-inline-start:0}}.result__video-body .result__body p{display:inline;margin:0}.result__video-body .result__body u,.result__video-body .result__body li,.result__video-body .result__body a{text-decoration:none}.result__video-body .result__body .result__meta{margin-top:0.5rem}.result__video-body .result__body .result__description{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto}.search-empty{padding:3rem 0;text-align:center;border-top:1px solid #e5eef1}.search-empty h2{color:#455556;font-size:1.125rem;margin-bottom:0.5rem}.search-empty-icon{font-size:7rem;--icon-color:#e4e6e8;margin-bottom:2rem}.search__highlight{background:#fbffbf;font-style:normal}";
15250
+ const globalSearchResultsCss = ":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none !important}:host{display:block;-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%}.main-search{display:-webkit-box;display:-ms-flexbox;display:flex;background:white;font-size:14px;min-height:calc(100vh - 63px);-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.main-search__wrap{display:contents;height:100%}.main-search ul{margin:0;padding:0;list-style:none}.main-search li{margin:0;padding:0}.main-search button:not(.result__tags-tag){-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;background:none;position:relative;top:-2px}.main-search .icon-button{color:inherit;-ms-flex-item-align:normal;-ms-grid-row-align:normal;align-self:normal;padding:9px 7px;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.main-search__topbar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1em}.main-search__topbar::after{content:\"\";width:calc(100% - 30px);left:30px;position:relative;border-bottom:1px solid #e5eef1;padding-top:0.9em}.main-search__applied-filters{border:solid 1px #e4e6e8;text-transform:uppercase;border-radius:3px;font-weight:bold;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:0.9;padding:5px 5px 0 5px;letter-spacing:2px;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:0.5rem}.main-search__applied-filters span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}:host(.small) .main-search__applied-filters{display:none}.main-search__applied-nofilter{margin-left:0;margin-right:5px;margin-top:0;margin-bottom:3px;padding-left:7px;padding-right:7px;padding-top:10px;padding-bottom:10px;font-size:12px;color:rgba(69, 85, 86, 0.85)}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search__applied-nofilter{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:5px;margin-inline-end:5px}}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search__applied-nofilter{padding-left:unset;padding-right:unset;-webkit-padding-start:7px;padding-inline-start:7px;-webkit-padding-end:7px;padding-inline-end:7px}}.main-search__applied-filter{padding-left:8px;padding-right:2px;padding-top:5px;padding-bottom:3px;margin-left:0;margin-right:5px;margin-top:0;margin-bottom:5px;color:#455556;font-size:11px;border-radius:2px;border:solid 1px rgba(0, 132, 169, 0.5);background-color:rgba(0, 132, 169, 0.2);line-height:1}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search__applied-filter{padding-left:unset;padding-right:unset;-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:2px;padding-inline-end:2px}}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search__applied-filter{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:5px;margin-inline-end:5px}}.main-search__applied-filter .icon-button{padding-left:10px;padding-right:4px;padding-top:2px;padding-bottom:1px}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search__applied-filter .icon-button{padding-left:unset;padding-right:unset;-webkit-padding-start:10px;padding-inline-start:10px;-webkit-padding-end:4px;padding-inline-end:4px}}.main-search__applied-filter .icon-button nano-icon{pointer-events:none}.main-search .topbar__bkbtn{position:relative;left:-7px}:host(.small) .main-search .topbar__query{display:none}.main-search .topbar__filtering{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-left:1em;margin-right:0;margin-top:0;margin-bottom:0;-webkit-box-flex:1;-ms-flex:1;flex:1}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search .topbar__filtering{margin-left:unset;margin-right:unset;-webkit-margin-start:1em;margin-inline-start:1em;-webkit-margin-end:0;margin-inline-end:0}}.main-search .topbar__order{min-width:175px;max-width:200px;margin-left:auto;margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search .topbar__order{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:0;margin-inline-end:0}}:host(.small) .main-search .topbar__order{max-width:300px}.main-search .topbar nano-select{opacity:1;-webkit-transition:0.1s ease opacity;transition:0.1s ease opacity}.main-search .topbar nano-select:not(.hydrated){opacity:0}.main-search .topbar__show-filters{margin-left:0.5em;margin-right:0;margin-top:0;margin-bottom:0;text-transform:uppercase;display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search .topbar__show-filters{margin-left:unset;margin-right:unset;-webkit-margin-start:0.5em;margin-inline-start:0.5em;-webkit-margin-end:0;margin-inline-end:0}}.main-search .topbar__show-filters nano-icon{font-size:20px}:host(.small) .main-search .topbar__show-filters{display:-webkit-box;display:-ms-flexbox;display:flex}.main-search .topbar__filter-count{width:12px;height:12px;-webkit-box-shadow:inset 0 3px 4px 0 rgba(0, 0, 0, 0.2);box-shadow:inset 0 3px 4px 0 rgba(0, 0, 0, 0.2);border:solid 1px #005c76;background-color:#005c76;color:white;font-size:7px;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;line-height:1;margin-bottom:3px}.main-search__results{font-size:14px;padding:1em 40px;color:rgba(69, 85, 86, 0.85);width:70%;height:100%}@media (max-width: 576px){.main-search__results{padding:1em 20px}}:host(.small) .main-search__results{width:100%}.main-search__filters{outline:none;padding-left:0;padding-right:40px;padding-top:1.8em;padding-bottom:1em;-webkit-box-flex:1;-ms-flex:1 1 30%;flex:1 1 30%;-webkit-box-sizing:border-box;box-sizing:border-box}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search__filters{padding-left:unset;padding-right:unset;-webkit-padding-start:0;padding-inline-start:0;-webkit-padding-end:40px;padding-inline-end:40px}}@media (max-width: 576px){.main-search__filters{padding-right:20px}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.main-search__filters{padding-right:unset;-webkit-padding-end:20px;padding-inline-end:20px}}}:host(:not(.small)) .main-search__filters{max-width:350px;min-width:220px}.filters{color:#455556;background:white;font-size:14px}:host(.small) .filters{position:fixed;width:0;height:0;z-index:10;top:0;right:0;-webkit-transition:all 0s ease 0.5s;transition:all 0s ease 0.5s;background:none}:host(.small) .filters.show{height:100vh;width:100vw;-webkit-transition:all 0s ease 0s;transition:all 0s ease 0s}:host(.small) .filters.show::after{opacity:1}:host(.small) .filters::after{content:\"\";background:rgba(0, 0, 0, 0.5);position:absolute;left:0;top:0;right:0;bottom:0;z-index:-1;opacity:0;-webkit-transition:0.1s ease opacity;transition:0.1s ease opacity}.filters__close-filters{display:none !important;font-size:1.4em}:host(.small) .filters__close-filters{display:inline-block !important;margin-left:auto;margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host(.small) .filters__close-filters{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:0;margin-inline-end:0}}.filters__old-posts{-webkit-margin-start:1rem;margin-inline-start:1rem}:host(.small) .filters-wrap{position:absolute;top:0;right:0;background:#f7f6f6;-webkit-transform:translateX(100%);transform:translateX(100%);width:300px;min-width:200px;max-width:80vw;-webkit-transition:-webkit-transform 0.3s ease;transition:-webkit-transform 0.3s ease;transition:transform 0.3s ease;transition:transform 0.3s ease, -webkit-transform 0.3s ease;padding:1em;color:black;overflow:auto;height:100vh}:host(.small) .filters.show .filters-wrap{-webkit-transform:translateX(0%);transform:translateX(0%);-webkit-box-shadow:-3px -3px 7px rgba(0, 0, 0, 0.1);box-shadow:-3px -3px 7px rgba(0, 0, 0, 0.1)}.filters ul{margin:0;padding:0;list-style:none}.filters li{margin:0;padding:0}.filters nano-details{--padding:0.8em;margin:0.8em 0}.filters nano-details strong[slot]{display:block;padding-left:calc(20px - 0.8em)}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.filters nano-details strong[slot]{padding-left:unset;-webkit-padding-start:calc(20px - 0.8em);padding-inline-start:calc(20px - 0.8em);}}.filters nano-details nano-icon[slot=icon-end]{padding-left:calc(20px - 0.8em);padding-right:calc(20px - 0.8em)}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.filters nano-details nano-icon[slot=icon-end]{padding-left:unset;padding-right:unset;-webkit-padding-start:calc(20px - 0.8em);padding-inline-start:calc(20px - 0.8em);-webkit-padding-end:calc(20px - 0.8em);padding-inline-end:calc(20px - 0.8em)}}.filters li:last-child .filter-label{margin-bottom:0}.filters .filter-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;margin:0.5em 0;line-height:1.4;z-index:0}.filters .filter-label::before{margin-left:0;margin-right:1em;margin-top:0;margin-bottom:0;content:\"\";border:1px solid #007495;background:#fff;border-radius:3px;height:1em;width:1em;min-width:1em;min-height:1em;display:inline-block}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.filters .filter-label::before{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:1em;margin-inline-end:1em}}.filters .filter-label::after{background-image:url(\"data:image/svg+xml;charset=utf-8,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20512%20512'><path%20fill='%23ffffff'%20d='M173.898%20439.404l-166.4-166.4c-9.997-9.997-9.997-26.206%200-36.204l36.203-36.204c9.997-9.998%2026.207-9.998%2036.204%200L192%20312.69%20432.095%2072.596c9.997-9.997%2026.207-9.997%2036.204%200l36.203%2036.204c9.997%209.997%209.997%2026.206%200%2036.204l-294.4%20294.401c-9.998%209.997-26.207%209.997-36.204-.001z'/></svg>\");content:\"\";height:0.7em;width:0.7em;position:absolute;left:2px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);z-index:1;display:block;background-size:100%;background-position:center center;background-repeat:no-repeat}:host([dir=rtl]) .filters .filter-label::after{right:1px;left:auto}.filters .filter-cb{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.filters .filter-cb:checked+.filter-label::before{background:#245a6f}.filters .filter-cb:focus+.filter-label::before{-webkit-box-shadow:0 0 0 1px rgba(0, 0, 0, 0.7);box-shadow:0 0 0 1px rgba(0, 0, 0, 0.7)}.filters-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #90c6e7;padding-bottom:0.5rem;margin-bottom:0.5rem}.filters-reset{color:#007495;font-size:12px;text-decoration:underline;margin-left:auto;margin-right:0;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.filters-reset{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:0;margin-inline-end:0}}:host(.small) .filters-reset{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.filters-title{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;text-transform:uppercase;color:rgba(69, 85, 86, 0.85);font-weight:bold;font-size:14px}:host(.small) .filters-title{display:none}.result{text-decoration:none;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;padding-bottom:14px;border-bottom:1px solid #90c6e7}.result *{word-wrap:break-word;word-break:break-word}.result__title{margin:1em 0 0.5em 0;width:70%;display:-webkit-box;display:-ms-flexbox;display:flex}.result__title a{color:#0084a9;font-size:14px;line-height:1.43;text-decoration:none;font-weight:600}.result__title nano-icon{margin-left:0;margin-right:0.5em;margin-top:0;margin-bottom:0;min-width:20px;min-height:20px;opacity:0.8}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.result__title nano-icon{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0.5em;margin-inline-end:0.5em}}@media (max-width: 992px){.result__title{width:100%}}.result__body{color:#455556;font-size:13px;width:70%;text-decoration:none}@media (max-width: 992px){.result__body{width:100%}}.result__pdf{display:inline-block;-webkit-margin-start:0.5rem;margin-inline-start:0.5rem;color:#b5aea7}.result__meta{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;color:#455556;font-size:11px;line-height:13px;width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.result__meta>*{margin-top:0.5rem}.result__meta>*:not(:last-child){-webkit-padding-end:0;padding-inline-end:0}.result__meta>*:not(:last-child)::after{content:\"\";height:1rem;width:1px;background:#90c6e7;display:inline-block;-webkit-margin-start:0.7rem;margin-inline-start:0.7rem;-webkit-margin-end:0.7rem;margin-inline-end:0.7rem}@media (max-width: 576px){.result__meta>*:not(:last-child)::after{display:none}}@media (max-width: 576px){.result__meta{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}}.result__tags{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}@media (max-width: 576px){.result__tags{-webkit-padding-start:0;padding-inline-start:0}}.result__tags-tag{color:#455556;display:inline-block;font-size:0.4375rem;letter-spacing:1.4px;background:#fff;border-radius:2px;text-transform:uppercase;padding:0 4px 1px 5px;font-weight:600;margin:3px 0.25rem 0.25rem 0;border:1px solid #b5aea7;white-space:nowrap;line-height:13px}.result__type{font-weight:600;text-transform:capitalize;white-space:nowrap;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.result__date{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#455556}.result__source{color:#455556;-webkit-padding-end:0.75rem;padding-inline-end:0.75rem}.result__authors{font-size:12px;color:#455556;margin-bottom:0.25rem;text-decoration:none;width:70%}.result__buttons{width:70%;margin-bottom:0.5rem}.result__buttons-button{background-color:#007495;color:#fff;padding:5px 8px 1px;border-radius:4px;display:inline-block;font-size:11px;text-decoration:none;border:none}.result__promo{width:70%;margin-bottom:0.5rem;text-decoration:none;color:#455556}.result__promo-box{width:300px;background-color:#e3eef1;padding:12px 12px 8px 4px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;margin-top:1rem}.result__promo-bigdate{-webkit-box-flex:0;-ms-flex:0 1 60px;flex:0 1 60px;text-align:center;font-weight:600;color:#007495;text-transform:uppercase;line-height:1.25;letter-spacing:1.5px}@media (max-width: 992px){.result__promo-bigdate{width:100%}}.result__promo-bigdate span{color:#455556;display:block}.result__promo-bigdate~div{-webkit-padding-start:1rem;padding-inline-start:1rem;-webkit-border-start:1px solid #c5dbe1;border-inline-start:1px solid #c5dbe1}.result__promo-date{font-size:12px}.result__promo-venue{font-size:12px}.result__promo nano-icon{color:#007495;position:relative;top:1px;-webkit-padding-end:2px;padding-inline-end:2px}.result__image{display:block;background-size:cover;background-repeat:no-repeat;background-position:center;border-radius:4px;position:relative;width:100%;height:150px;margin-bottom:0.5rem}@media (min-width: 576px){.result__image{width:142px;height:80px}}.result__image nano-icon{position:absolute;top:calc(50% - 0.75rem);left:calc(50% - 0.75rem);font-size:1.5rem;color:#0084a9;--primary-color:#fff;--secondary-color:#0084a9;--primary-opacity:1}@media (max-width: 576px){.result__image nano-icon{font-size:3rem;top:calc(50% - 1.5rem);left:calc(50% - 1.5rem)}}.result__video-body{width:70%;text-decoration:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}@media (max-width: 992px){.result__video-body{width:100%}}@media (max-width: 576px){.result__video-body{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}}.result__video-body .result__body{-webkit-padding-start:1rem;padding-inline-start:1rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin-bottom:0;-webkit-box-flex:1;-ms-flex:1;flex:1}@media (max-width: 576px){.result__video-body .result__body{-webkit-padding-start:0;padding-inline-start:0}}.result__video-body .result__body p{display:inline;margin:0}.result__video-body .result__body u,.result__video-body .result__body li,.result__video-body .result__body a{text-decoration:none}.result__video-body .result__body .result__meta{margin-top:0.5rem}.result__video-body .result__body .result__description{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto}.search-empty{padding:3rem 0;text-align:center;border-top:1px solid #e5eef1}.search-empty h2{color:#455556;font-size:1.125rem;margin-bottom:0.5rem}.search-empty-icon{font-size:7rem;--icon-color:#e4e6e8;margin-bottom:2rem}.search__highlight{background:#fbffbf;font-style:normal}";
15968
15251
 
15252
+ const filterOldPosts = 'created > ' + Math.floor((Date.now() - 63115200000) / 1000);
15969
15253
  let GlobalSearchResults = class extends H {
15970
15254
  constructor() {
15971
15255
  super();
@@ -16047,6 +15331,12 @@ let GlobalSearchResults = class extends H {
16047
15331
  });
16048
15332
  }
16049
15333
  this.filtersDiv = this.algoliaEle.querySelector('#main-search-filters');
15334
+ let oldResults = this.algoliaEle.querySelector('.old-posts');
15335
+ if (oldResults) {
15336
+ oldResults.addEventListener('change', (e) => {
15337
+ this.toggleOldResults(e.target.checked);
15338
+ });
15339
+ }
16050
15340
  }
16051
15341
  attachResultListeners(e) {
16052
15342
  if (e && e.composedPath().find((el) => el === this.algoliaEle)) {
@@ -16105,8 +15395,15 @@ let GlobalSearchResults = class extends H {
16105
15395
  document.body.style.overflow = '';
16106
15396
  setTimeout(() => this.openFilterBtn.focus(), 20);
16107
15397
  }
15398
+ toggleOldResults(show) {
15399
+ if (show)
15400
+ this.algoliaEle.filters = this.algoliaEle.filters.filter((f) => !f.startsWith('created > '));
15401
+ else
15402
+ this.algoliaEle.filters = [...this.algoliaEle.filters, filterOldPosts];
15403
+ console.log(this.algoliaEle.filters);
15404
+ }
16108
15405
  componentDidLoad() {
16109
- this.ro = new index$2((entries) => {
15406
+ this.ro = new ResizeObserver((entries) => {
16110
15407
  for (const entry of entries) {
16111
15408
  if (!entry.contentRect.width)
16112
15409
  return;
@@ -16114,9 +15411,7 @@ let GlobalSearchResults = class extends H {
16114
15411
  }
16115
15412
  });
16116
15413
  this.ro.observe(this.el);
16117
- this.algoliaEle.filters = [
16118
- 'created > ' + Math.floor((Date.now() - 63115200000) / 1000),
16119
- ]; // only get last 2 years
15414
+ this.algoliaEle.filters = [filterOldPosts]; // only get last 2 years
16120
15415
  }
16121
15416
  render() {
16122
15417
  return (h$1(Host$1, { class: { small: this.currentWidth < 677 }, dir: this.el.ownerDocument.dir === 'rtl' ? 'rtl' : false }, h$1("nano-algolia", { "store-id": "searchq", "store-method": "url-hash-push", class: "main-search__wrap sc-nano-global-search-results", ref: (ele) => raf(() => (this.algoliaEle = ele)), id: "main-search" }, h$1("script", { type: "text/template", slot: "template" }, `<div class="main-search sc-nano-global-search-results">
@@ -16415,6 +15710,10 @@ let GlobalSearchResults = class extends H {
16415
15710
  {{ /if }}
16416
15711
 
16417
15712
  <div>
15713
+ <input class="sc-nano-global-search-results filter-cb old-posts filters__old-posts" type="checkbox" name="old-posts" id="old-posts" value="nice" />
15714
+ <label class="sc-nano-global-search-results filter-label" for="old-posts">
15715
+ <span>Include posts older than 2 years</span>
15716
+ </label>
16418
15717
  {{ @if(it.origFilters['type']) }}
16419
15718
  <nano-details class="sc-nano-global-search-results" open={true} icon-rotation="180">
16420
15719
  <strong slot="label">Type</strong>
@@ -16726,7 +16025,7 @@ let Grid = class extends H {
16726
16025
  });
16727
16026
  }
16728
16027
  componentDidLoad() {
16729
- this.ro = new index$2((entries) => {
16028
+ this.ro = new ResizeObserver((entries) => {
16730
16029
  for (const entry of entries) {
16731
16030
  if (!entry.contentRect.width)
16732
16031
  return;
@@ -17216,6 +16515,10 @@ let IconButton = class extends H {
17216
16515
  /** Set to true to disable the button. */
17217
16516
  this.disabled = false;
17218
16517
  }
16518
+ /** Sets focus on the internal button */
16519
+ async setFocus() {
16520
+ this.button.focus();
16521
+ }
17219
16522
  componentDidLoad() {
17220
16523
  focusVisible.observe(this.button);
17221
16524
  }
@@ -17612,6 +16915,7 @@ let Input = class extends H {
17612
16915
  this.nativeInput.dispatchEvent(event);
17613
16916
  };
17614
16917
  this.validate = debounce$2(this.validate, 50);
16918
+ this.handleBlur = this.handleBlur.bind(this);
17615
16919
  }
17616
16920
  get nativeInputWrap() {
17617
16921
  return this._nativeInputWrap;
@@ -17697,6 +17001,15 @@ let Input = class extends H {
17697
17001
  this.nativeInput.click();
17698
17002
  }
17699
17003
  }
17004
+ /**
17005
+ * Sets focus and select the text on the specified `nano-input`. Use this method instead of the global
17006
+ * `input.select()`.
17007
+ */
17008
+ async select() {
17009
+ if (this.nativeInput) {
17010
+ this.nativeInput.select();
17011
+ }
17012
+ }
17700
17013
  /**
17701
17014
  * Returns the native `<input>` element used under the hood.
17702
17015
  */
@@ -17726,11 +17039,14 @@ let Input = class extends H {
17726
17039
  const kev = e;
17727
17040
  let target;
17728
17041
  raf(() => {
17729
- if (kev.key) {
17042
+ if (e instanceof KeyboardEvent && kev.key) {
17730
17043
  if (kev.key !== 'Tab')
17731
17044
  return;
17732
17045
  target = document.activeElement;
17733
17046
  }
17047
+ else if (e instanceof FocusEvent) {
17048
+ target = document.activeElement;
17049
+ }
17734
17050
  else
17735
17051
  target = e.target;
17736
17052
  if (closestElement(this.el.tagName.toLowerCase(), target) !== this.el) {
@@ -17833,10 +17149,10 @@ let Input = class extends H {
17833
17149
  disabled,
17834
17150
  clearControl: this.clearInput,
17835
17151
  }))(this);
17836
- return (h$1(Host$1, { "aria-disabled": this.disabled ? 'true' : null, dir: this.rtl ? 'rtl' : null, class: Object.assign(Object.assign({}, createColorClasses(this.color)), { 'has-value': this.hasValue(), 'has-focus': this.hasFocus, 'is-invalid': this._invalid }) }, h$1(FormControlWrap, Object.assign({}, wrapOptions), h$1(FormControl, Object.assign({}, controlOptions, { onClearText: this.clearTextInput, control: this.el, ref: (el) => (this.nativeInputWrap = el) }), this.type !== 'textarea' && (h$1("input", { id: this.inputId, class: "input__native-ctrl", ref: (input) => (this.nativeInput = input), "aria-labelledby": labelId + ' ' + moreId + ' ' + helperEndId, disabled: this.disabled, accept: this.accept, autoCapitalize: this.autocapitalise, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, inputMode: this.inputmode, form: this.form, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder, readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, size: this.size, type: this.type, value: value, onInput: this.onInput, onChange: this.onInput, onFocus: this.onFocus, onKeyDown: this.onKeydown, onInvalid: this.validate })), this.type === 'textarea' && (h$1("textarea", { rows: this.floatLabel ? 1 : this.rows, id: this.inputId, class: {
17152
+ return (h$1(Host$1, { "aria-disabled": this.disabled ? 'true' : null, dir: this.rtl ? 'rtl' : null, class: Object.assign(Object.assign({}, createColorClasses(this.color)), { 'has-value': this.hasValue(), 'has-focus': this.hasFocus, 'is-invalid': this._invalid }) }, h$1(FormControlWrap, Object.assign({}, wrapOptions), h$1(FormControl, Object.assign({}, controlOptions, { onClearText: this.clearTextInput, control: this.el, ref: (el) => (this.nativeInputWrap = el) }), this.type !== 'textarea' && (h$1("input", { id: this.inputId, class: "input__native-ctrl", ref: (input) => (this.nativeInput = input), "aria-labelledby": labelId + ' ' + moreId + ' ' + helperEndId, disabled: this.disabled, accept: this.accept, autoCapitalize: this.autocapitalise, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, inputMode: this.inputmode, form: this.form, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder, readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, size: this.size, type: this.type, value: value, onInput: this.onInput, onChange: this.onInput, onFocus: this.onFocus, onBlur: this.handleBlur, onKeyDown: this.onKeydown, onInvalid: this.validate })), this.type === 'textarea' && (h$1("textarea", { rows: this.floatLabel ? 1 : this.rows, id: this.inputId, class: {
17837
17153
  'input__native-ctrl': true,
17838
17154
  input__resizable: this.resize === 'true',
17839
- }, ref: (input) => (this.nativeInput = input), "aria-labelledby": labelId + ' ' + moreId + ' ' + helperEndId, disabled: this.disabled, autoCapitalize: this.autocapitalise, autoCorrect: this.autocorrect, autoFocus: this.autofocus, inputMode: this.inputmode, form: this.form, minLength: this.minlength, maxLength: this.maxlength, name: this.name, placeholder: this.placeholder, readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, value: value, onInput: this.onInput, onChange: this.onInput, onFocus: this.onFocus, onKeyDown: this.onKeydown, onInvalid: this.validate }))), h$1("slot", null))));
17155
+ }, ref: (input) => (this.nativeInput = input), "aria-labelledby": labelId + ' ' + moreId + ' ' + helperEndId, disabled: this.disabled, autoCapitalize: this.autocapitalise, autoCorrect: this.autocorrect, autoFocus: this.autofocus, inputMode: this.inputmode, form: this.form, minLength: this.minlength, maxLength: this.maxlength, name: this.name, placeholder: this.placeholder, readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, value: value, onInput: this.onInput, onChange: this.onInput, onFocus: this.onFocus, onKeyDown: this.onKeydown, onInvalid: this.validate, onBlur: this.handleBlur }))), h$1("slot", null))));
17840
17156
  }
17841
17157
  get el() { return this; }
17842
17158
  static get watchers() { return {
@@ -19294,7 +18610,7 @@ let ResizeObserve = class extends H {
19294
18610
  return retObj;
19295
18611
  }
19296
18612
  attachRO() {
19297
- this.ro = new index$2((entries) => {
18613
+ this.ro = new ResizeObserver((entries) => {
19298
18614
  for (const entry of entries) {
19299
18615
  this.currentWidth = entry.contentRect.width;
19300
18616
  this.currentHeight = entry.contentRect.height;
@@ -19512,6 +18828,7 @@ let Select = class extends H {
19512
18828
  const { value, selected, label, filterMeta } = ao;
19513
18829
  return { value, selected, label, filterMeta };
19514
18830
  });
18831
+ this.customValidate();
19515
18832
  };
19516
18833
  this.handleDocumentKeyDown = (ev) => {
19517
18834
  if (!this.multiple || !this.hasFocus)
@@ -19720,6 +19037,7 @@ let Select = class extends H {
19720
19037
  */
19721
19038
  // eslint-disable-next-line @stencil/no-unused-watch
19722
19039
  valueChanged() {
19040
+ this.customValidate();
19723
19041
  if (this.onInit) {
19724
19042
  if (this.multiple)
19725
19043
  this.currInsertIndex = this.value.length - 1;
@@ -24154,7 +23472,7 @@ let Slides = class extends H {
24154
23472
  // the slideshow has been initialised without any dimensions - let's add a one show
24155
23473
  // resize observer to kick it off when it gets some dimensions
24156
23474
  if (!this.host.getBoundingClientRect().height) {
24157
- const ro = (this.resizeO = new index$2(() => {
23475
+ const ro = (this.resizeO = new ResizeObserver(() => {
24158
23476
  flick.resize();
24159
23477
  this.resizeO.disconnect();
24160
23478
  }));
@@ -24647,7 +23965,7 @@ let Sticker = class extends H {
24647
23965
  this.parentSizeObserver.disconnect();
24648
23966
  this.parentSizeObserver = undefined;
24649
23967
  }
24650
- this.parentSizeObserver = new index$2((entries) => {
23968
+ this.parentSizeObserver = new ResizeObserver((entries) => {
24651
23969
  for (const entry of entries) {
24652
23970
  let height, width;
24653
23971
  if (entry.contentRect.height)
@@ -24827,7 +24145,7 @@ let Sticker = class extends H {
24827
24145
  this.contentSizeObserver.disconnect();
24828
24146
  this.contentSizeObserver = undefined;
24829
24147
  }
24830
- this.contentSizeObserver = new index$2((entries) => {
24148
+ this.contentSizeObserver = new ResizeObserver((entries) => {
24831
24149
  for (const entry of entries) {
24832
24150
  if (this.pauseResizeWatcher)
24833
24151
  return;
@@ -25209,6 +24527,10 @@ let Tab = class extends H {
25209
24527
  this.handleCloseClick = () => {
25210
24528
  this.nanoTabClose.emit();
25211
24529
  };
24530
+ this.handleCloseKeydown = (e) => {
24531
+ if (e.key === ' ')
24532
+ this.handleCloseClick();
24533
+ };
25212
24534
  }
25213
24535
  /** Sets focus to the tab. */
25214
24536
  async setFocus() {
@@ -25224,7 +24546,7 @@ let Tab = class extends H {
25224
24546
  'nanotab--active': this.active,
25225
24547
  'nanotab--disabled': this.disabled,
25226
24548
  'nanotab--closable': this.closable,
25227
- }, role: "tab", "aria-disabled": this.disabled ? 'true' : 'false', "aria-selected": this.active ? 'true' : 'false', tabindex: this.disabled || !this.active ? '-1' : '0' }, h$1("slot", null), this.closable && (h$1("nano-icon-button", { label: "Close this tab", iconName: "light/times", class: "nanotab__close-button", onClick: this.handleCloseClick, tabIndex: -1 })))));
24549
+ }, role: "tab", "aria-disabled": this.disabled ? 'true' : 'false', "aria-selected": this.active ? 'true' : 'false', tabindex: this.disabled || !this.active ? '-1' : '0' }, h$1("slot", null), this.closable && (h$1("nano-icon-button", { label: "Close this tab", iconName: "light/times", class: "nanotab__close-button", onClick: this.handleCloseClick, onKeyDown: this.handleCloseKeydown, tabIndex: -1 })))));
25228
24550
  }
25229
24551
  get host() { return this; }
25230
24552
  static get style() { return tabCss; }
@@ -25340,6 +24662,9 @@ let TabGroup = class extends H {
25340
24662
  if (['top'].includes(this.placement)) {
25341
24663
  scrollIntoView(tabs[index], this.nav, 'horizontal', 'center');
25342
24664
  }
24665
+ // need to stop bubbling otherwise it will focus on parent tabs if nested
24666
+ event.stopPropagation();
24667
+ // stop the browser moving about
25343
24668
  event.preventDefault();
25344
24669
  }
25345
24670
  }
@@ -25626,7 +24951,7 @@ let TabGroup = class extends H {
25626
24951
  focusVisible.observe(this.leftBtn);
25627
24952
  focusVisible.observe(this.rightBtn);
25628
24953
  }
25629
- this.resizeObserver = new index$2(() => {
24954
+ this.resizeObserver = new ResizeObserver(() => {
25630
24955
  setTimeout(() => {
25631
24956
  this.updateScrollControls();
25632
24957
  this.syncActiveTabIndicator();
@@ -25679,7 +25004,7 @@ let TabGroup = class extends H {
25679
25004
  static get style() { return tabGroupCss; }
25680
25005
  };
25681
25006
 
25682
- const tooltipCss = ":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none !important}:host{--max-width:20rem;--hide-delay:0s;--hide-duration:0.125s;--hide-timing-function:ease;--show-delay:0.125s;--show-duration:0.125s;--show-timing-function:ease;display:contents}.tooltip{max-width:var(--max-width);border-radius:var(--nano-tooltip-border-radius, var(--nano-border-radius-small, 2px));background-color:black;font-size:var(--nano-fontsize-small, 0.875rem);line-height:1.5;color:white;opacity:0;padding:var(--nano-tooltip-padding, var(--nano-spacing-xsmall, 4px) var(--nano-spacing-small, 8px));-webkit-transform:translateY(10px) translateZ(0);transform:translateY(10px) translateZ(0);-webkit-transform-origin:bottom;transform-origin:bottom;-webkit-transition-property:opacity, -webkit-transform;transition-property:opacity, -webkit-transform;transition-property:opacity, transform;transition-property:opacity, transform, -webkit-transform;-webkit-transition-delay:var(--hide-delay);transition-delay:var(--hide-delay);-webkit-transition-duration:var(--hide-duration);transition-duration:var(--hide-duration);-webkit-transition-timing-function:var(--hide-timing-function);transition-timing-function:var(--hide-timing-function);white-space:normal}.tooltip-arrow{content:\"\";position:absolute;width:0;height:0;color:black;-webkit-transition:0.2s ease transform;transition:0.2s ease transform}.tooltip-positioner{position:absolute;z-index:var(--nano-layer-index-tooltip, 1000);pointer-events:none}.tooltip-positioner[data-popper-placement^=top] .tooltip{-webkit-transform-origin:bottom;transform-origin:bottom;-webkit-transform:translateY(-10px) translateZ(0);transform:translateY(-10px) translateZ(0)}.tooltip-positioner[data-popper-placement^=bottom] .tooltip{-webkit-transform-origin:top;transform-origin:top}.tooltip-positioner[data-popper-placement^=left] .tooltip{-webkit-transform-origin:right;transform-origin:right}.tooltip-positioner[data-popper-placement^=right] .tooltip{-webkit-transform-origin:left;transform-origin:left}.tooltip-positioner.popover-visible .tooltip{opacity:1;-webkit-transform:none;transform:none;-webkit-transition-delay:var(--show-delay);transition-delay:var(--show-delay);-webkit-transition-duration:var(--show-duration);transition-duration:var(--show-duration);-webkit-transition-timing-function:var(--show-timing-function);transition-timing-function:var(--show-timing-function)}.tooltip-positioner[data-popper-placement^=bottom] .tooltip-arrow{bottom:100%;left:calc(50% - 5px);border-bottom:5px solid;border-left:5px solid transparent;border-right:5px solid transparent}.tooltip-positioner[data-popper-placement=bottom-start] .tooltip-arrow{left:5px}.tooltip-positioner[data-popper-placement=bottom-end] .tooltip-arrow{right:5px;left:auto}.tooltip-positioner[data-popper-placement^=top] .tooltip-arrow{top:100%;left:calc(50% - 5px);border-top:5px solid;border-left:5px solid transparent;border-right:5px solid transparent}.tooltip-positioner[data-popper-placement=top-start] .tooltip-arrow{left:5px}.tooltip-positioner[data-popper-placement=top-end] .tooltip-arrow{right:5px;left:auto}.tooltip-positioner[data-popper-placement^=left] .tooltip-arrow{top:calc(50% - 5px);left:100%;border-left:5px solid;border-top:5px solid transparent;border-bottom:5px solid transparent}.tooltip-positioner[data-popper-placement=left-start] .tooltip-arrow{top:5px}.tooltip-positioner[data-popper-placement=left-end] .tooltip-arrow{top:auto;bottom:5px}.tooltip-positioner[data-popper-placement^=right] .tooltip-arrow{top:calc(50% - 5px);right:100%;border-right:5px solid;border-top:5px solid transparent;border-bottom:5px solid transparent}.tooltip-positioner[data-popper-placement=right-start] .tooltip-arrow{top:5px}.tooltip-positioner[data-popper-placement=right-end] .tooltip-arrow{top:auto;bottom:5px}";
25007
+ const tooltipCss = ":host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none !important}:host{--max-width:20rem;--hide-delay:0s;--hide-duration:0.125s;--hide-timing-function:ease;--show-delay:0.125s;--show-duration:0.125s;--show-timing-function:ease;display:contents}.tooltip{max-width:var(--max-width);border-radius:var(--nano-tooltip-border-radius, var(--nano-border-radius-small, 2px));background-color:black;font-size:var(--nano-fontsize-small, 0.875rem);line-height:1.5;color:white;opacity:0;padding:var(--nano-tooltip-padding, var(--nano-spacing-xsmall, 4px) var(--nano-spacing-small, 8px));-webkit-transform:translateY(10px) translateZ(0);transform:translateY(10px) translateZ(0);-webkit-transform-origin:bottom;transform-origin:bottom;-webkit-transition-property:opacity, -webkit-transform;transition-property:opacity, -webkit-transform;transition-property:opacity, transform;transition-property:opacity, transform, -webkit-transform;-webkit-transition-delay:var(--hide-delay);transition-delay:var(--hide-delay);-webkit-transition-duration:var(--hide-duration);transition-duration:var(--hide-duration);-webkit-transition-timing-function:var(--hide-timing-function);transition-timing-function:var(--hide-timing-function);white-space:normal}.tooltip-arrow{content:\"\";position:absolute;width:0;height:0;color:black;-webkit-transition:0.2s ease transform;transition:0.2s ease transform}.tooltip-positioner{position:absolute;z-index:var(--nano-layer-index-tooltip, 1000)}.tooltip-positioner[data-popper-placement^=top] .tooltip{-webkit-transform-origin:bottom;transform-origin:bottom;-webkit-transform:translateY(-10px) translateZ(0);transform:translateY(-10px) translateZ(0)}.tooltip-positioner[data-popper-placement^=bottom] .tooltip{-webkit-transform-origin:top;transform-origin:top}.tooltip-positioner[data-popper-placement^=left] .tooltip{-webkit-transform-origin:right;transform-origin:right}.tooltip-positioner[data-popper-placement^=right] .tooltip{-webkit-transform-origin:left;transform-origin:left}.tooltip-positioner.popover-visible .tooltip{opacity:1;-webkit-transform:none;transform:none;-webkit-transition-delay:var(--show-delay);transition-delay:var(--show-delay);-webkit-transition-duration:var(--show-duration);transition-duration:var(--show-duration);-webkit-transition-timing-function:var(--show-timing-function);transition-timing-function:var(--show-timing-function)}.tooltip-positioner[data-popper-placement^=bottom] .tooltip-arrow{bottom:100%;left:calc(50% - 5px);border-bottom:5px solid;border-left:5px solid transparent;border-right:5px solid transparent}.tooltip-positioner[data-popper-placement=bottom-start] .tooltip-arrow{left:5px}.tooltip-positioner[data-popper-placement=bottom-end] .tooltip-arrow{right:5px;left:auto}.tooltip-positioner[data-popper-placement^=top] .tooltip-arrow{top:100%;left:calc(50% - 5px);border-top:5px solid;border-left:5px solid transparent;border-right:5px solid transparent}.tooltip-positioner[data-popper-placement=top-start] .tooltip-arrow{left:5px}.tooltip-positioner[data-popper-placement=top-end] .tooltip-arrow{right:5px;left:auto}.tooltip-positioner[data-popper-placement^=left] .tooltip-arrow{top:calc(50% - 5px);left:100%;border-left:5px solid;border-top:5px solid transparent;border-bottom:5px solid transparent}.tooltip-positioner[data-popper-placement=left-start] .tooltip-arrow{top:5px}.tooltip-positioner[data-popper-placement=left-end] .tooltip-arrow{top:auto;bottom:5px}.tooltip-positioner[data-popper-placement^=right] .tooltip-arrow{top:calc(50% - 5px);right:100%;border-right:5px solid;border-top:5px solid transparent;border-bottom:5px solid transparent}.tooltip-positioner[data-popper-placement=right-start] .tooltip-arrow{top:5px}.tooltip-positioner[data-popper-placement=right-end] .tooltip-arrow{top:auto;bottom:5px}";
25683
25008
 
25684
25009
  let id = 0;
25685
25010
  let Tooltip = class extends H {
@@ -25873,14 +25198,14 @@ const NanoAspectRatio = /*@__PURE__*/proxyCustomElement(AspectRatio, [1,"nano-as
25873
25198
  const NanoCheckbox = /*@__PURE__*/proxyCustomElement(Checkbox, [6,"nano-checkbox",{"hasFocus":[1540,"has-focus"],"checked":[1540],"disabled":[516],"value":[513],"name":[513],"required":[516],"type":[513],"label":[1],"indeterminate":[1540],"invalid":[2564],"validityMessage":[2049,"validity-message"],"color":[1],"form":[1],"inputType":[32],"_invalid":[32]},[[16,"reset","onReset"]]]);
25874
25199
  const NanoCheckboxGroup = /*@__PURE__*/proxyCustomElement(CheckboxGroup, [6,"nano-checkbox-group",{"validateOn":[1025,"validate-on"],"showInlineError":[4,"show-inline-error"],"min":[2],"max":[2],"disabled":[516],"legend":[1],"invalid":[2564],"validityMessage":[2049,"validity-message"],"checkboxes":[32],"nativeCbs":[32],"errorMessage":[32],"showErrorMsg":[32],"hasHelperSlot":[32],"_invalid":[32]},[[0,"nanoChange","handleCbChange"]]]);
25875
25200
  const NanoDatalist = /*@__PURE__*/proxyCustomElement(DataList, [1,"nano-datalist",{"selected":[1040],"dropDownConfig":[6160],"options":[16],"input":[1],"type":[1],"activeOptions":[2064],"open":[1028],"disableFilter":[4,"disable-filter"],"disabled":[4],"actvOptEles":[32],"connectedInput":[32],"inputLabel":[32],"hasNoResult":[32],"shouldOpen":[32],"canOpen":[32],"optionIds":[32]}]);
25876
- const NanoDateInput = /*@__PURE__*/proxyCustomElement(DateInput, [6,"nano-date-input",{"invalid":[2564],"validityMessage":[2049,"validity-message"],"helperText":[4,"helper-text"],"helperTextFormat":[16],"floatLabel":[4,"float-label"],"name":[1],"readonly":[4],"size":[2],"form":[1],"firstDayOfWeek":[2,"first-day-of-week"],"localization":[16],"disabled":[4],"color":[1],"autofocus":[4],"clearInput":[4,"clear-input"],"label":[1],"placeholder":[1025],"value":[1537],"validateOn":[1,"validate-on"],"showInlineError":[516,"show-inline-error"],"dateOrder":[1,"date-order"],"required":[4],"min":[1],"max":[1],"hideLabel":[4,"hide-label"],"picker":[4],"initialPickerDate":[1,"initial-picker-date"],"pickerOpen":[1540,"picker-open"],"closeAfterPicked":[4,"close-after-picked"],"dropDownConfig":[6160],"pattern":[32],"inputValue":[32],"_invalid":[32]}]);
25201
+ const NanoDateInput = /*@__PURE__*/proxyCustomElement(DateInput, [6,"nano-date-input",{"invalid":[2564],"validityMessage":[2049,"validity-message"],"helperText":[4,"helper-text"],"helperTextFormat":[16],"floatLabel":[4,"float-label"],"name":[1],"readonly":[4],"size":[2],"form":[1],"firstDayOfWeek":[2,"first-day-of-week"],"localization":[16],"disabled":[4],"color":[1],"autofocus":[4],"clearInput":[4,"clear-input"],"label":[1],"placeholder":[1025],"value":[1537],"validateOn":[1,"validate-on"],"showInlineError":[516,"show-inline-error"],"dateOrder":[1,"date-order"],"required":[4],"min":[1],"max":[1],"hideLabel":[4,"hide-label"],"picker":[4],"initialPickerDate":[1,"initial-picker-date"],"pickerOpen":[1540,"picker-open"],"closeAfterPicked":[4,"close-after-picked"],"dropDownConfig":[6160],"dateValue":[2064],"isDateDisabled":[16],"pattern":[32],"inputValue":[32],"_invalid":[32]}]);
25877
25202
  const NanoDatePicker = /*@__PURE__*/proxyCustomElement(DatePicker, [1,"nano-date-picker",{"selectedDate":[1025,"selected-date"],"min":[1],"max":[1],"firstDayOfWeek":[2,"first-day-of-week"],"localization":[16],"color":[1],"isDateDisabled":[16],"isModal":[4,"is-modal"],"firstFocusEle":[16],"activeFocus":[32],"focusedDay":[32]}]);
25878
25203
  const NanoDetails = /*@__PURE__*/proxyCustomElement(Details, [1,"nano-details",{"label":[1],"open":[1540],"noHandle":[4,"no-handle"],"iconRotation":[2,"icon-rotation"],"color":[1],"isLoading":[32]}]);
25879
25204
  const NanoDialog = /*@__PURE__*/proxyCustomElement(Dialog, [1,"nano-dialog",{"showRibbon":[4,"show-ribbon"],"open":[1540],"label":[1],"noHeader":[4,"no-header"],"noFooter":[4,"no-footer"],"noUserDismiss":[4,"no-user-dismiss"],"storeId":[1,"store-id"],"storeMethod":[1,"store-method"],"hoist":[4],"isVisible":[32],"noDismiss":[32],"hasFooter":[32]}]);
25880
25205
  const NanoDrawer = /*@__PURE__*/proxyCustomElement(Drawer, [1,"nano-drawer",{"open":[1540],"label":[1],"placement":[1],"contained":[4],"noHeader":[4,"no-header"],"type":[1],"contentSelector":[1,"content-selector"],"hasFooter":[32],"isVisible":[32]}]);
25881
25206
  const NanoDropdown = /*@__PURE__*/proxyCustomElement(Dropdown, [1,"nano-dropdown",{"autoOpen":[4,"auto-open"],"open":[1540],"closeOnSelect":[4,"close-on-select"],"containingElement":[1040],"tetherTo":[16],"placement":[1],"distance":[2],"skidding":[2],"hoist":[4],"dialogTitle":[1,"dialog-title"]},[[0,"nanoOpen","secondaryOpen"],[0,"nanoClose","secondaryClose"],[0,"nanoSelect","handlePanelSelect"]]]);
25882
- const NanoFieldValidator = /*@__PURE__*/proxyCustomElement(FieldValidator, [4,"nano-field-validator",{"validateOn":[1025,"validate-on"],"scrollToInvalid":[4,"scroll-to-invalid"],"dirty":[2564],"valid":[2564],"payload":[2064],"showValidation":[2052,"show-validation"],"validationState":[2064],"validation":[16],"store":[32],"userForm":[32],"submitted":[32],"_dirty":[32],"_valid":[32]}]);
25883
- const NanoFileUpload = /*@__PURE__*/proxyCustomElement(FileUpload, [6,"nano-file-upload",{"name":[1],"accept":[1],"capture":[1],"maxFileSize":[2,"max-file-size"],"maxFiles":[2,"max-files"],"label":[1],"placeholder":[1],"hideLabel":[4,"hide-label"],"required":[4],"disabled":[516],"clearInput":[4,"clear-input"],"showInlineError":[516,"show-inline-error"],"validateOn":[1025,"validate-on"],"form":[1],"invalid":[2564],"validityMessage":[2049,"validity-message"],"files":[2064],"value":[6145],"hasHelperSlot":[32],"hasLabelSlot":[32],"errorMessage":[32],"isDragging":[32],"fileList":[32],"hasFocus":[32],"_invalid":[32]},[[8,"click","globalClickHandler"],[8,"keydown","globalKeydownHandler"],[16,"reset","onReset"]]]);
25207
+ const NanoFieldValidator = /*@__PURE__*/proxyCustomElement(FieldValidator, [4,"nano-field-validator",{"validateOn":[1025,"validate-on"],"scrollToInvalid":[4,"scroll-to-invalid"],"dirty":[2564],"valid":[2564],"store":[2064],"payload":[2064],"showValidation":[2052,"show-validation"],"validationState":[2064],"extraFieldSelector":[1,"extra-field-selector"],"validation":[16],"submitted":[32],"userForm":[32],"_dirty":[32],"_valid":[32],"_store":[32]}]);
25208
+ const NanoFileUpload = /*@__PURE__*/proxyCustomElement(FileUpload, [6,"nano-file-upload",{"name":[1],"accept":[1],"capture":[1],"maxFileSize":[2,"max-file-size"],"maxFiles":[2,"max-files"],"label":[1],"placeholder":[1],"hideLabel":[4,"hide-label"],"required":[4],"disabled":[516],"clearInput":[4,"clear-input"],"showInlineError":[516,"show-inline-error"],"validateOn":[1025,"validate-on"],"form":[1],"invalid":[2564],"validityMessage":[2049,"validity-message"],"files":[6160],"value":[6145],"hasHelperSlot":[32],"hasLabelSlot":[32],"errorMessage":[32],"isDragging":[32],"fileList":[32],"hasFocus":[32],"_invalid":[32]},[[8,"click","globalClickHandler"],[8,"keydown","globalKeydownHandler"],[16,"reset","onReset"]]]);
25884
25209
  const NanoGlobalNav = /*@__PURE__*/proxyCustomElement(GlobalNav, [1,"nano-global-nav",{"env":[1],"ssoDataUrl":[1,"sso-data-url"],"ssoRedirect":[1,"sso-redirect"],"getMyAccountData":[4,"get-my-account-data"],"activeMyAccountSections":[16],"showSearch":[4,"show-search"],"showLogo":[4,"show-logo"],"logoUrl":[1,"logo-url"],"searchIndeces":[16],"myAccountUser":[1040],"searchAppId":[1025,"search-app-id"],"searchApiKey":[1025,"search-api-key"],"searchValue":[1025,"search-value"],"searchIndex":[1025,"search-index"],"cartCount":[1026,"cart-count"],"msgCount":[1026,"msg-count"],"cartUrl":[1025,"cart-url"],"msgUrl":[1025,"msg-url"],"hasLoggedinSlot":[32],"hasSiteSlot":[32],"hasPromotionSlot":[32],"aboutSlotLen":[32],"iconSlotLen":[32],"mainSlotLen":[32],"overflowSlotLen":[32],"searchSlotLen":[32],"internalSearchIndeces":[32],"thresholdReady":[32],"remoteDataReady":[32],"ready":[32],"isResizing":[32],"intersectRatio":[32],"threshold":[32],"modalOpen":[32],"modalIsOpen":[32],"searchBarShown":[32],"scrollingUp":[32],"searchLoading":[32],"showAutocomplete":[32],"secondaryMenuOpen":[32],"userMenuOpen":[32],"menuFullScreen":[32],"searchValInternal":[32]},[[0,"nanoOpen","secondaryOpen"],[0,"nanoClose","secondaryClose"]]]);
25885
25210
  const NanoGlobalSearchResults = /*@__PURE__*/proxyCustomElement(GlobalSearchResults, [1,"nano-global-search-results",{"algoliaEle":[32],"currentWidth":[32],"apiKey":[32],"appId":[32],"index":[32]},[[16,"nanoSearchReset","handleGlobalNavReset"],[16,"nanoSearchResult","handleGlobalNavSearch"],[0,"nanoChange","handleReorder"],[0,"nanoResultsShown","attachListeners"],[16,"nanoNewResults","attachResultListeners"]]]);
25886
25211
  const NanoGrid = /*@__PURE__*/proxyCustomElement(Grid, [1,"nano-grid",{"sSize":[2,"s-size"],"mSize":[2,"m-size"],"lSize":[2,"l-size"],"xlSize":[2,"xl-size"],"sCols":[2,"s-cols"],"mCols":[2,"m-cols"],"lCols":[2,"l-cols"],"xlCols":[2,"xl-cols"],"xxlCols":[2,"xxl-cols"],"showHelper":[516,"show-helper"],"contentPanel":[516,"content-panel"],"fullHeight":[516,"full-height"],"ready":[32],"isSmall":[32],"isMedium":[32],"isLarge":[32],"isXL":[32],"isXXL":[32]}]);
@@ -26357,991 +25682,6 @@ const shadowCss = /*#__PURE__*/Object.freeze({
26357
25682
  scopeCss: scopeCss
26358
25683
  });
26359
25684
 
26360
- /**
26361
- * Copyright 2016 Google Inc. All Rights Reserved.
26362
- *
26363
- * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.
26364
- *
26365
- * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document
26366
- *
26367
- */
26368
- (function() {
26369
-
26370
- // Exit early if we're not running in a browser.
26371
- if (typeof window !== 'object') {
26372
- return;
26373
- }
26374
-
26375
- // Exit early if all IntersectionObserver and IntersectionObserverEntry
26376
- // features are natively supported.
26377
- if ('IntersectionObserver' in window &&
26378
- 'IntersectionObserverEntry' in window &&
26379
- 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {
26380
-
26381
- // Minimal polyfill for Edge 15's lack of `isIntersecting`
26382
- // See: https://github.com/w3c/IntersectionObserver/issues/211
26383
- if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {
26384
- Object.defineProperty(window.IntersectionObserverEntry.prototype,
26385
- 'isIntersecting', {
26386
- get: function () {
26387
- return this.intersectionRatio > 0;
26388
- }
26389
- });
26390
- }
26391
- return;
26392
- }
26393
-
26394
-
26395
- /**
26396
- * A local reference to the document.
26397
- */
26398
- var document = window.document;
26399
-
26400
-
26401
- /**
26402
- * An IntersectionObserver registry. This registry exists to hold a strong
26403
- * reference to IntersectionObserver instances currently observing a target
26404
- * element. Without this registry, instances without another reference may be
26405
- * garbage collected.
26406
- */
26407
- var registry = [];
26408
-
26409
- /**
26410
- * The signal updater for cross-origin intersection. When not null, it means
26411
- * that the polyfill is configured to work in a cross-origin mode.
26412
- * @type {function(DOMRect|ClientRect, DOMRect|ClientRect)}
26413
- */
26414
- var crossOriginUpdater = null;
26415
-
26416
- /**
26417
- * The current cross-origin intersection. Only used in the cross-origin mode.
26418
- * @type {DOMRect|ClientRect}
26419
- */
26420
- var crossOriginRect = null;
26421
-
26422
-
26423
- /**
26424
- * Creates the global IntersectionObserverEntry constructor.
26425
- * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry
26426
- * @param {Object} entry A dictionary of instance properties.
26427
- * @constructor
26428
- */
26429
- function IntersectionObserverEntry(entry) {
26430
- this.time = entry.time;
26431
- this.target = entry.target;
26432
- this.rootBounds = ensureDOMRect(entry.rootBounds);
26433
- this.boundingClientRect = ensureDOMRect(entry.boundingClientRect);
26434
- this.intersectionRect = ensureDOMRect(entry.intersectionRect || getEmptyRect());
26435
- this.isIntersecting = !!entry.intersectionRect;
26436
-
26437
- // Calculates the intersection ratio.
26438
- var targetRect = this.boundingClientRect;
26439
- var targetArea = targetRect.width * targetRect.height;
26440
- var intersectionRect = this.intersectionRect;
26441
- var intersectionArea = intersectionRect.width * intersectionRect.height;
26442
-
26443
- // Sets intersection ratio.
26444
- if (targetArea) {
26445
- // Round the intersection ratio to avoid floating point math issues:
26446
- // https://github.com/w3c/IntersectionObserver/issues/324
26447
- this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));
26448
- } else {
26449
- // If area is zero and is intersecting, sets to 1, otherwise to 0
26450
- this.intersectionRatio = this.isIntersecting ? 1 : 0;
26451
- }
26452
- }
26453
-
26454
-
26455
- /**
26456
- * Creates the global IntersectionObserver constructor.
26457
- * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface
26458
- * @param {Function} callback The function to be invoked after intersection
26459
- * changes have queued. The function is not invoked if the queue has
26460
- * been emptied by calling the `takeRecords` method.
26461
- * @param {Object=} opt_options Optional configuration options.
26462
- * @constructor
26463
- */
26464
- function IntersectionObserver(callback, opt_options) {
26465
-
26466
- var options = opt_options || {};
26467
-
26468
- if (typeof callback != 'function') {
26469
- throw new Error('callback must be a function');
26470
- }
26471
-
26472
- if (options.root && options.root.nodeType != 1) {
26473
- throw new Error('root must be an Element');
26474
- }
26475
-
26476
- // Binds and throttles `this._checkForIntersections`.
26477
- this._checkForIntersections = throttle(
26478
- this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);
26479
-
26480
- // Private properties.
26481
- this._callback = callback;
26482
- this._observationTargets = [];
26483
- this._queuedEntries = [];
26484
- this._rootMarginValues = this._parseRootMargin(options.rootMargin);
26485
-
26486
- // Public properties.
26487
- this.thresholds = this._initThresholds(options.threshold);
26488
- this.root = options.root || null;
26489
- this.rootMargin = this._rootMarginValues.map(function(margin) {
26490
- return margin.value + margin.unit;
26491
- }).join(' ');
26492
-
26493
- /** @private @const {!Array<!Document>} */
26494
- this._monitoringDocuments = [];
26495
- /** @private @const {!Array<function()>} */
26496
- this._monitoringUnsubscribes = [];
26497
- }
26498
-
26499
-
26500
- /**
26501
- * The minimum interval within which the document will be checked for
26502
- * intersection changes.
26503
- */
26504
- IntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;
26505
-
26506
-
26507
- /**
26508
- * The frequency in which the polyfill polls for intersection changes.
26509
- * this can be updated on a per instance basis and must be set prior to
26510
- * calling `observe` on the first target.
26511
- */
26512
- IntersectionObserver.prototype.POLL_INTERVAL = null;
26513
-
26514
- /**
26515
- * Use a mutation observer on the root element
26516
- * to detect intersection changes.
26517
- */
26518
- IntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;
26519
-
26520
-
26521
- /**
26522
- * Sets up the polyfill in the cross-origin mode. The result is the
26523
- * updater function that accepts two arguments: `boundingClientRect` and
26524
- * `intersectionRect` - just as these fields would be available to the
26525
- * parent via `IntersectionObserverEntry`. This function should be called
26526
- * each time the iframe receives intersection information from the parent
26527
- * window, e.g. via messaging.
26528
- * @return {function(DOMRect|ClientRect, DOMRect|ClientRect)}
26529
- */
26530
- IntersectionObserver._setupCrossOriginUpdater = function() {
26531
- if (!crossOriginUpdater) {
26532
- /**
26533
- * @param {DOMRect|ClientRect} boundingClientRect
26534
- * @param {DOMRect|ClientRect} intersectionRect
26535
- */
26536
- crossOriginUpdater = function(boundingClientRect, intersectionRect) {
26537
- if (!boundingClientRect || !intersectionRect) {
26538
- crossOriginRect = getEmptyRect();
26539
- } else {
26540
- crossOriginRect = convertFromParentRect(boundingClientRect, intersectionRect);
26541
- }
26542
- registry.forEach(function(observer) {
26543
- observer._checkForIntersections();
26544
- });
26545
- };
26546
- }
26547
- return crossOriginUpdater;
26548
- };
26549
-
26550
-
26551
- /**
26552
- * Resets the cross-origin mode.
26553
- */
26554
- IntersectionObserver._resetCrossOriginUpdater = function() {
26555
- crossOriginUpdater = null;
26556
- crossOriginRect = null;
26557
- };
26558
-
26559
-
26560
- /**
26561
- * Starts observing a target element for intersection changes based on
26562
- * the thresholds values.
26563
- * @param {Element} target The DOM element to observe.
26564
- */
26565
- IntersectionObserver.prototype.observe = function(target) {
26566
- var isTargetAlreadyObserved = this._observationTargets.some(function(item) {
26567
- return item.element == target;
26568
- });
26569
-
26570
- if (isTargetAlreadyObserved) {
26571
- return;
26572
- }
26573
-
26574
- if (!(target && target.nodeType == 1)) {
26575
- throw new Error('target must be an Element');
26576
- }
26577
-
26578
- this._registerInstance();
26579
- this._observationTargets.push({element: target, entry: null});
26580
- this._monitorIntersections(target.ownerDocument);
26581
- this._checkForIntersections();
26582
- };
26583
-
26584
-
26585
- /**
26586
- * Stops observing a target element for intersection changes.
26587
- * @param {Element} target The DOM element to observe.
26588
- */
26589
- IntersectionObserver.prototype.unobserve = function(target) {
26590
- this._observationTargets =
26591
- this._observationTargets.filter(function(item) {
26592
- return item.element != target;
26593
- });
26594
- this._unmonitorIntersections(target.ownerDocument);
26595
- if (this._observationTargets.length == 0) {
26596
- this._unregisterInstance();
26597
- }
26598
- };
26599
-
26600
-
26601
- /**
26602
- * Stops observing all target elements for intersection changes.
26603
- */
26604
- IntersectionObserver.prototype.disconnect = function() {
26605
- this._observationTargets = [];
26606
- this._unmonitorAllIntersections();
26607
- this._unregisterInstance();
26608
- };
26609
-
26610
-
26611
- /**
26612
- * Returns any queue entries that have not yet been reported to the
26613
- * callback and clears the queue. This can be used in conjunction with the
26614
- * callback to obtain the absolute most up-to-date intersection information.
26615
- * @return {Array} The currently queued entries.
26616
- */
26617
- IntersectionObserver.prototype.takeRecords = function() {
26618
- var records = this._queuedEntries.slice();
26619
- this._queuedEntries = [];
26620
- return records;
26621
- };
26622
-
26623
-
26624
- /**
26625
- * Accepts the threshold value from the user configuration object and
26626
- * returns a sorted array of unique threshold values. If a value is not
26627
- * between 0 and 1 and error is thrown.
26628
- * @private
26629
- * @param {Array|number=} opt_threshold An optional threshold value or
26630
- * a list of threshold values, defaulting to [0].
26631
- * @return {Array} A sorted list of unique and valid threshold values.
26632
- */
26633
- IntersectionObserver.prototype._initThresholds = function(opt_threshold) {
26634
- var threshold = opt_threshold || [0];
26635
- if (!Array.isArray(threshold)) threshold = [threshold];
26636
-
26637
- return threshold.sort().filter(function(t, i, a) {
26638
- if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {
26639
- throw new Error('threshold must be a number between 0 and 1 inclusively');
26640
- }
26641
- return t !== a[i - 1];
26642
- });
26643
- };
26644
-
26645
-
26646
- /**
26647
- * Accepts the rootMargin value from the user configuration object
26648
- * and returns an array of the four margin values as an object containing
26649
- * the value and unit properties. If any of the values are not properly
26650
- * formatted or use a unit other than px or %, and error is thrown.
26651
- * @private
26652
- * @param {string=} opt_rootMargin An optional rootMargin value,
26653
- * defaulting to '0px'.
26654
- * @return {Array<Object>} An array of margin objects with the keys
26655
- * value and unit.
26656
- */
26657
- IntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {
26658
- var marginString = opt_rootMargin || '0px';
26659
- var margins = marginString.split(/\s+/).map(function(margin) {
26660
- var parts = /^(-?\d*\.?\d+)(px|%)$/.exec(margin);
26661
- if (!parts) {
26662
- throw new Error('rootMargin must be specified in pixels or percent');
26663
- }
26664
- return {value: parseFloat(parts[1]), unit: parts[2]};
26665
- });
26666
-
26667
- // Handles shorthand.
26668
- margins[1] = margins[1] || margins[0];
26669
- margins[2] = margins[2] || margins[0];
26670
- margins[3] = margins[3] || margins[1];
26671
-
26672
- return margins;
26673
- };
26674
-
26675
-
26676
- /**
26677
- * Starts polling for intersection changes if the polling is not already
26678
- * happening, and if the page's visibility state is visible.
26679
- * @param {!Document} doc
26680
- * @private
26681
- */
26682
- IntersectionObserver.prototype._monitorIntersections = function(doc) {
26683
- var win = doc.defaultView;
26684
- if (!win) {
26685
- // Already destroyed.
26686
- return;
26687
- }
26688
- if (this._monitoringDocuments.indexOf(doc) != -1) {
26689
- // Already monitoring.
26690
- return;
26691
- }
26692
-
26693
- // Private state for monitoring.
26694
- var callback = this._checkForIntersections;
26695
- var monitoringInterval = null;
26696
- var domObserver = null;
26697
-
26698
- // If a poll interval is set, use polling instead of listening to
26699
- // resize and scroll events or DOM mutations.
26700
- if (this.POLL_INTERVAL) {
26701
- monitoringInterval = win.setInterval(callback, this.POLL_INTERVAL);
26702
- } else {
26703
- addEvent(win, 'resize', callback, true);
26704
- addEvent(doc, 'scroll', callback, true);
26705
- if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in win) {
26706
- domObserver = new win.MutationObserver(callback);
26707
- domObserver.observe(doc, {
26708
- attributes: true,
26709
- childList: true,
26710
- characterData: true,
26711
- subtree: true
26712
- });
26713
- }
26714
- }
26715
-
26716
- this._monitoringDocuments.push(doc);
26717
- this._monitoringUnsubscribes.push(function() {
26718
- // Get the window object again. When a friendly iframe is destroyed, it
26719
- // will be null.
26720
- var win = doc.defaultView;
26721
-
26722
- if (win) {
26723
- if (monitoringInterval) {
26724
- win.clearInterval(monitoringInterval);
26725
- }
26726
- removeEvent(win, 'resize', callback, true);
26727
- }
26728
-
26729
- removeEvent(doc, 'scroll', callback, true);
26730
- if (domObserver) {
26731
- domObserver.disconnect();
26732
- }
26733
- });
26734
-
26735
- // Also monitor the parent.
26736
- if (doc != (this.root && this.root.ownerDocument || document)) {
26737
- var frame = getFrameElement(doc);
26738
- if (frame) {
26739
- this._monitorIntersections(frame.ownerDocument);
26740
- }
26741
- }
26742
- };
26743
-
26744
-
26745
- /**
26746
- * Stops polling for intersection changes.
26747
- * @param {!Document} doc
26748
- * @private
26749
- */
26750
- IntersectionObserver.prototype._unmonitorIntersections = function(doc) {
26751
- var index = this._monitoringDocuments.indexOf(doc);
26752
- if (index == -1) {
26753
- return;
26754
- }
26755
-
26756
- var rootDoc = (this.root && this.root.ownerDocument || document);
26757
-
26758
- // Check if any dependent targets are still remaining.
26759
- var hasDependentTargets =
26760
- this._observationTargets.some(function(item) {
26761
- var itemDoc = item.element.ownerDocument;
26762
- // Target is in this context.
26763
- if (itemDoc == doc) {
26764
- return true;
26765
- }
26766
- // Target is nested in this context.
26767
- while (itemDoc && itemDoc != rootDoc) {
26768
- var frame = getFrameElement(itemDoc);
26769
- itemDoc = frame && frame.ownerDocument;
26770
- if (itemDoc == doc) {
26771
- return true;
26772
- }
26773
- }
26774
- return false;
26775
- });
26776
- if (hasDependentTargets) {
26777
- return;
26778
- }
26779
-
26780
- // Unsubscribe.
26781
- var unsubscribe = this._monitoringUnsubscribes[index];
26782
- this._monitoringDocuments.splice(index, 1);
26783
- this._monitoringUnsubscribes.splice(index, 1);
26784
- unsubscribe();
26785
-
26786
- // Also unmonitor the parent.
26787
- if (doc != rootDoc) {
26788
- var frame = getFrameElement(doc);
26789
- if (frame) {
26790
- this._unmonitorIntersections(frame.ownerDocument);
26791
- }
26792
- }
26793
- };
26794
-
26795
-
26796
- /**
26797
- * Stops polling for intersection changes.
26798
- * @param {!Document} doc
26799
- * @private
26800
- */
26801
- IntersectionObserver.prototype._unmonitorAllIntersections = function() {
26802
- var unsubscribes = this._monitoringUnsubscribes.slice(0);
26803
- this._monitoringDocuments.length = 0;
26804
- this._monitoringUnsubscribes.length = 0;
26805
- for (var i = 0; i < unsubscribes.length; i++) {
26806
- unsubscribes[i]();
26807
- }
26808
- };
26809
-
26810
-
26811
- /**
26812
- * Scans each observation target for intersection changes and adds them
26813
- * to the internal entries queue. If new entries are found, it
26814
- * schedules the callback to be invoked.
26815
- * @private
26816
- */
26817
- IntersectionObserver.prototype._checkForIntersections = function() {
26818
- if (!this.root && crossOriginUpdater && !crossOriginRect) {
26819
- // Cross origin monitoring, but no initial data available yet.
26820
- return;
26821
- }
26822
-
26823
- var rootIsInDom = this._rootIsInDom();
26824
- var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();
26825
-
26826
- this._observationTargets.forEach(function(item) {
26827
- var target = item.element;
26828
- var targetRect = getBoundingClientRect(target);
26829
- var rootContainsTarget = this._rootContainsTarget(target);
26830
- var oldEntry = item.entry;
26831
- var intersectionRect = rootIsInDom && rootContainsTarget &&
26832
- this._computeTargetAndRootIntersection(target, targetRect, rootRect);
26833
-
26834
- var newEntry = item.entry = new IntersectionObserverEntry({
26835
- time: now(),
26836
- target: target,
26837
- boundingClientRect: targetRect,
26838
- rootBounds: crossOriginUpdater && !this.root ? null : rootRect,
26839
- intersectionRect: intersectionRect
26840
- });
26841
-
26842
- if (!oldEntry) {
26843
- this._queuedEntries.push(newEntry);
26844
- } else if (rootIsInDom && rootContainsTarget) {
26845
- // If the new entry intersection ratio has crossed any of the
26846
- // thresholds, add a new entry.
26847
- if (this._hasCrossedThreshold(oldEntry, newEntry)) {
26848
- this._queuedEntries.push(newEntry);
26849
- }
26850
- } else {
26851
- // If the root is not in the DOM or target is not contained within
26852
- // root but the previous entry for this target had an intersection,
26853
- // add a new record indicating removal.
26854
- if (oldEntry && oldEntry.isIntersecting) {
26855
- this._queuedEntries.push(newEntry);
26856
- }
26857
- }
26858
- }, this);
26859
-
26860
- if (this._queuedEntries.length) {
26861
- this._callback(this.takeRecords(), this);
26862
- }
26863
- };
26864
-
26865
-
26866
- /**
26867
- * Accepts a target and root rect computes the intersection between then
26868
- * following the algorithm in the spec.
26869
- * TODO(philipwalton): at this time clip-path is not considered.
26870
- * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo
26871
- * @param {Element} target The target DOM element
26872
- * @param {Object} targetRect The bounding rect of the target.
26873
- * @param {Object} rootRect The bounding rect of the root after being
26874
- * expanded by the rootMargin value.
26875
- * @return {?Object} The final intersection rect object or undefined if no
26876
- * intersection is found.
26877
- * @private
26878
- */
26879
- IntersectionObserver.prototype._computeTargetAndRootIntersection =
26880
- function(target, targetRect, rootRect) {
26881
- // If the element isn't displayed, an intersection can't happen.
26882
- if (window.getComputedStyle(target).display == 'none') return;
26883
-
26884
- var intersectionRect = targetRect;
26885
- var parent = getParentNode(target);
26886
- var atRoot = false;
26887
-
26888
- while (!atRoot && parent) {
26889
- var parentRect = null;
26890
- var parentComputedStyle = parent.nodeType == 1 ?
26891
- window.getComputedStyle(parent) : {};
26892
-
26893
- // If the parent isn't displayed, an intersection can't happen.
26894
- if (parentComputedStyle.display == 'none') return null;
26895
-
26896
- if (parent == this.root || parent.nodeType == /* DOCUMENT */ 9) {
26897
- atRoot = true;
26898
- if (parent == this.root || parent == document) {
26899
- if (crossOriginUpdater && !this.root) {
26900
- if (!crossOriginRect ||
26901
- crossOriginRect.width == 0 && crossOriginRect.height == 0) {
26902
- // A 0-size cross-origin intersection means no-intersection.
26903
- parent = null;
26904
- parentRect = null;
26905
- intersectionRect = null;
26906
- } else {
26907
- parentRect = crossOriginRect;
26908
- }
26909
- } else {
26910
- parentRect = rootRect;
26911
- }
26912
- } else {
26913
- // Check if there's a frame that can be navigated to.
26914
- var frame = getParentNode(parent);
26915
- var frameRect = frame && getBoundingClientRect(frame);
26916
- var frameIntersect =
26917
- frame &&
26918
- this._computeTargetAndRootIntersection(frame, frameRect, rootRect);
26919
- if (frameRect && frameIntersect) {
26920
- parent = frame;
26921
- parentRect = convertFromParentRect(frameRect, frameIntersect);
26922
- } else {
26923
- parent = null;
26924
- intersectionRect = null;
26925
- }
26926
- }
26927
- } else {
26928
- // If the element has a non-visible overflow, and it's not the <body>
26929
- // or <html> element, update the intersection rect.
26930
- // Note: <body> and <html> cannot be clipped to a rect that's not also
26931
- // the document rect, so no need to compute a new intersection.
26932
- var doc = parent.ownerDocument;
26933
- if (parent != doc.body &&
26934
- parent != doc.documentElement &&
26935
- parentComputedStyle.overflow != 'visible') {
26936
- parentRect = getBoundingClientRect(parent);
26937
- }
26938
- }
26939
-
26940
- // If either of the above conditionals set a new parentRect,
26941
- // calculate new intersection data.
26942
- if (parentRect) {
26943
- intersectionRect = computeRectIntersection(parentRect, intersectionRect);
26944
- }
26945
- if (!intersectionRect) break;
26946
- parent = parent && getParentNode(parent);
26947
- }
26948
- return intersectionRect;
26949
- };
26950
-
26951
-
26952
- /**
26953
- * Returns the root rect after being expanded by the rootMargin value.
26954
- * @return {ClientRect} The expanded root rect.
26955
- * @private
26956
- */
26957
- IntersectionObserver.prototype._getRootRect = function() {
26958
- var rootRect;
26959
- if (this.root) {
26960
- rootRect = getBoundingClientRect(this.root);
26961
- } else {
26962
- // Use <html>/<body> instead of window since scroll bars affect size.
26963
- var html = document.documentElement;
26964
- var body = document.body;
26965
- rootRect = {
26966
- top: 0,
26967
- left: 0,
26968
- right: html.clientWidth || body.clientWidth,
26969
- width: html.clientWidth || body.clientWidth,
26970
- bottom: html.clientHeight || body.clientHeight,
26971
- height: html.clientHeight || body.clientHeight
26972
- };
26973
- }
26974
- return this._expandRectByRootMargin(rootRect);
26975
- };
26976
-
26977
-
26978
- /**
26979
- * Accepts a rect and expands it by the rootMargin value.
26980
- * @param {DOMRect|ClientRect} rect The rect object to expand.
26981
- * @return {ClientRect} The expanded rect.
26982
- * @private
26983
- */
26984
- IntersectionObserver.prototype._expandRectByRootMargin = function(rect) {
26985
- var margins = this._rootMarginValues.map(function(margin, i) {
26986
- return margin.unit == 'px' ? margin.value :
26987
- margin.value * (i % 2 ? rect.width : rect.height) / 100;
26988
- });
26989
- var newRect = {
26990
- top: rect.top - margins[0],
26991
- right: rect.right + margins[1],
26992
- bottom: rect.bottom + margins[2],
26993
- left: rect.left - margins[3]
26994
- };
26995
- newRect.width = newRect.right - newRect.left;
26996
- newRect.height = newRect.bottom - newRect.top;
26997
-
26998
- return newRect;
26999
- };
27000
-
27001
-
27002
- /**
27003
- * Accepts an old and new entry and returns true if at least one of the
27004
- * threshold values has been crossed.
27005
- * @param {?IntersectionObserverEntry} oldEntry The previous entry for a
27006
- * particular target element or null if no previous entry exists.
27007
- * @param {IntersectionObserverEntry} newEntry The current entry for a
27008
- * particular target element.
27009
- * @return {boolean} Returns true if a any threshold has been crossed.
27010
- * @private
27011
- */
27012
- IntersectionObserver.prototype._hasCrossedThreshold =
27013
- function(oldEntry, newEntry) {
27014
-
27015
- // To make comparing easier, an entry that has a ratio of 0
27016
- // but does not actually intersect is given a value of -1
27017
- var oldRatio = oldEntry && oldEntry.isIntersecting ?
27018
- oldEntry.intersectionRatio || 0 : -1;
27019
- var newRatio = newEntry.isIntersecting ?
27020
- newEntry.intersectionRatio || 0 : -1;
27021
-
27022
- // Ignore unchanged ratios
27023
- if (oldRatio === newRatio) return;
27024
-
27025
- for (var i = 0; i < this.thresholds.length; i++) {
27026
- var threshold = this.thresholds[i];
27027
-
27028
- // Return true if an entry matches a threshold or if the new ratio
27029
- // and the old ratio are on the opposite sides of a threshold.
27030
- if (threshold == oldRatio || threshold == newRatio ||
27031
- threshold < oldRatio !== threshold < newRatio) {
27032
- return true;
27033
- }
27034
- }
27035
- };
27036
-
27037
-
27038
- /**
27039
- * Returns whether or not the root element is an element and is in the DOM.
27040
- * @return {boolean} True if the root element is an element and is in the DOM.
27041
- * @private
27042
- */
27043
- IntersectionObserver.prototype._rootIsInDom = function() {
27044
- return !this.root || containsDeep(document, this.root);
27045
- };
27046
-
27047
-
27048
- /**
27049
- * Returns whether or not the target element is a child of root.
27050
- * @param {Element} target The target element to check.
27051
- * @return {boolean} True if the target element is a child of root.
27052
- * @private
27053
- */
27054
- IntersectionObserver.prototype._rootContainsTarget = function(target) {
27055
- return containsDeep(this.root || document, target) &&
27056
- (!this.root || this.root.ownerDocument == target.ownerDocument);
27057
- };
27058
-
27059
-
27060
- /**
27061
- * Adds the instance to the global IntersectionObserver registry if it isn't
27062
- * already present.
27063
- * @private
27064
- */
27065
- IntersectionObserver.prototype._registerInstance = function() {
27066
- if (registry.indexOf(this) < 0) {
27067
- registry.push(this);
27068
- }
27069
- };
27070
-
27071
-
27072
- /**
27073
- * Removes the instance from the global IntersectionObserver registry.
27074
- * @private
27075
- */
27076
- IntersectionObserver.prototype._unregisterInstance = function() {
27077
- var index = registry.indexOf(this);
27078
- if (index != -1) registry.splice(index, 1);
27079
- };
27080
-
27081
-
27082
- /**
27083
- * Returns the result of the performance.now() method or null in browsers
27084
- * that don't support the API.
27085
- * @return {number} The elapsed time since the page was requested.
27086
- */
27087
- function now() {
27088
- return window.performance && performance.now && performance.now();
27089
- }
27090
-
27091
-
27092
- /**
27093
- * Throttles a function and delays its execution, so it's only called at most
27094
- * once within a given time period.
27095
- * @param {Function} fn The function to throttle.
27096
- * @param {number} timeout The amount of time that must pass before the
27097
- * function can be called again.
27098
- * @return {Function} The throttled function.
27099
- */
27100
- function throttle(fn, timeout) {
27101
- var timer = null;
27102
- return function () {
27103
- if (!timer) {
27104
- timer = setTimeout(function() {
27105
- fn();
27106
- timer = null;
27107
- }, timeout);
27108
- }
27109
- };
27110
- }
27111
-
27112
-
27113
- /**
27114
- * Adds an event handler to a DOM node ensuring cross-browser compatibility.
27115
- * @param {Node} node The DOM node to add the event handler to.
27116
- * @param {string} event The event name.
27117
- * @param {Function} fn The event handler to add.
27118
- * @param {boolean} opt_useCapture Optionally adds the even to the capture
27119
- * phase. Note: this only works in modern browsers.
27120
- */
27121
- function addEvent(node, event, fn, opt_useCapture) {
27122
- if (typeof node.addEventListener == 'function') {
27123
- node.addEventListener(event, fn, opt_useCapture || false);
27124
- }
27125
- else if (typeof node.attachEvent == 'function') {
27126
- node.attachEvent('on' + event, fn);
27127
- }
27128
- }
27129
-
27130
-
27131
- /**
27132
- * Removes a previously added event handler from a DOM node.
27133
- * @param {Node} node The DOM node to remove the event handler from.
27134
- * @param {string} event The event name.
27135
- * @param {Function} fn The event handler to remove.
27136
- * @param {boolean} opt_useCapture If the event handler was added with this
27137
- * flag set to true, it should be set to true here in order to remove it.
27138
- */
27139
- function removeEvent(node, event, fn, opt_useCapture) {
27140
- if (typeof node.removeEventListener == 'function') {
27141
- node.removeEventListener(event, fn, opt_useCapture || false);
27142
- }
27143
- else if (typeof node.detatchEvent == 'function') {
27144
- node.detatchEvent('on' + event, fn);
27145
- }
27146
- }
27147
-
27148
-
27149
- /**
27150
- * Returns the intersection between two rect objects.
27151
- * @param {Object} rect1 The first rect.
27152
- * @param {Object} rect2 The second rect.
27153
- * @return {?Object|?ClientRect} The intersection rect or undefined if no
27154
- * intersection is found.
27155
- */
27156
- function computeRectIntersection(rect1, rect2) {
27157
- var top = Math.max(rect1.top, rect2.top);
27158
- var bottom = Math.min(rect1.bottom, rect2.bottom);
27159
- var left = Math.max(rect1.left, rect2.left);
27160
- var right = Math.min(rect1.right, rect2.right);
27161
- var width = right - left;
27162
- var height = bottom - top;
27163
-
27164
- return (width >= 0 && height >= 0) && {
27165
- top: top,
27166
- bottom: bottom,
27167
- left: left,
27168
- right: right,
27169
- width: width,
27170
- height: height
27171
- } || null;
27172
- }
27173
-
27174
-
27175
- /**
27176
- * Shims the native getBoundingClientRect for compatibility with older IE.
27177
- * @param {Element} el The element whose bounding rect to get.
27178
- * @return {DOMRect|ClientRect} The (possibly shimmed) rect of the element.
27179
- */
27180
- function getBoundingClientRect(el) {
27181
- var rect;
27182
-
27183
- try {
27184
- rect = el.getBoundingClientRect();
27185
- } catch (err) {
27186
- // Ignore Windows 7 IE11 "Unspecified error"
27187
- // https://github.com/w3c/IntersectionObserver/pull/205
27188
- }
27189
-
27190
- if (!rect) return getEmptyRect();
27191
-
27192
- // Older IE
27193
- if (!(rect.width && rect.height)) {
27194
- rect = {
27195
- top: rect.top,
27196
- right: rect.right,
27197
- bottom: rect.bottom,
27198
- left: rect.left,
27199
- width: rect.right - rect.left,
27200
- height: rect.bottom - rect.top
27201
- };
27202
- }
27203
- return rect;
27204
- }
27205
-
27206
-
27207
- /**
27208
- * Returns an empty rect object. An empty rect is returned when an element
27209
- * is not in the DOM.
27210
- * @return {ClientRect} The empty rect.
27211
- */
27212
- function getEmptyRect() {
27213
- return {
27214
- top: 0,
27215
- bottom: 0,
27216
- left: 0,
27217
- right: 0,
27218
- width: 0,
27219
- height: 0
27220
- };
27221
- }
27222
-
27223
-
27224
- /**
27225
- * Ensure that the result has all of the necessary fields of the DOMRect.
27226
- * Specifically this ensures that `x` and `y` fields are set.
27227
- *
27228
- * @param {?DOMRect|?ClientRect} rect
27229
- * @return {?DOMRect}
27230
- */
27231
- function ensureDOMRect(rect) {
27232
- // A `DOMRect` object has `x` and `y` fields.
27233
- if (!rect || 'x' in rect) {
27234
- return rect;
27235
- }
27236
- // A IE's `ClientRect` type does not have `x` and `y`. The same is the case
27237
- // for internally calculated Rect objects. For the purposes of
27238
- // `IntersectionObserver`, it's sufficient to simply mirror `left` and `top`
27239
- // for these fields.
27240
- return {
27241
- top: rect.top,
27242
- y: rect.top,
27243
- bottom: rect.bottom,
27244
- left: rect.left,
27245
- x: rect.left,
27246
- right: rect.right,
27247
- width: rect.width,
27248
- height: rect.height
27249
- };
27250
- }
27251
-
27252
-
27253
- /**
27254
- * Inverts the intersection and bounding rect from the parent (frame) BCR to
27255
- * the local BCR space.
27256
- * @param {DOMRect|ClientRect} parentBoundingRect The parent's bound client rect.
27257
- * @param {DOMRect|ClientRect} parentIntersectionRect The parent's own intersection rect.
27258
- * @return {ClientRect} The local root bounding rect for the parent's children.
27259
- */
27260
- function convertFromParentRect(parentBoundingRect, parentIntersectionRect) {
27261
- var top = parentIntersectionRect.top - parentBoundingRect.top;
27262
- var left = parentIntersectionRect.left - parentBoundingRect.left;
27263
- return {
27264
- top: top,
27265
- left: left,
27266
- height: parentIntersectionRect.height,
27267
- width: parentIntersectionRect.width,
27268
- bottom: top + parentIntersectionRect.height,
27269
- right: left + parentIntersectionRect.width
27270
- };
27271
- }
27272
-
27273
-
27274
- /**
27275
- * Checks to see if a parent element contains a child element (including inside
27276
- * shadow DOM).
27277
- * @param {Node} parent The parent element.
27278
- * @param {Node} child The child element.
27279
- * @return {boolean} True if the parent node contains the child node.
27280
- */
27281
- function containsDeep(parent, child) {
27282
- var node = child;
27283
- while (node) {
27284
- if (node == parent) return true;
27285
-
27286
- node = getParentNode(node);
27287
- }
27288
- return false;
27289
- }
27290
-
27291
-
27292
- /**
27293
- * Gets the parent node of an element or its host element if the parent node
27294
- * is a shadow root.
27295
- * @param {Node} node The node whose parent to get.
27296
- * @return {Node|null} The parent node or null if no parent exists.
27297
- */
27298
- function getParentNode(node) {
27299
- var parent = node.parentNode;
27300
-
27301
- if (node.nodeType == /* DOCUMENT */ 9 && node != document) {
27302
- // If this node is a document node, look for the embedding frame.
27303
- return getFrameElement(node);
27304
- }
27305
-
27306
- if (parent && parent.nodeType == 11 && parent.host) {
27307
- // If the parent is a shadow root, return the host element.
27308
- return parent.host;
27309
- }
27310
-
27311
- if (parent && parent.assignedSlot) {
27312
- // If the parent is distributed in a <slot>, return the parent of a slot.
27313
- return parent.assignedSlot.parentNode;
27314
- }
27315
-
27316
- return parent;
27317
- }
27318
-
27319
-
27320
- /**
27321
- * Returns the embedding frame element, if any.
27322
- * @param {!Document} doc
27323
- * @return {!Element}
27324
- */
27325
- function getFrameElement(doc) {
27326
- try {
27327
- return doc.defaultView && doc.defaultView.frameElement || null;
27328
- } catch (e) {
27329
- // Ignore the error.
27330
- return null;
27331
- }
27332
- }
27333
-
27334
-
27335
- // Exposes the constructors globally.
27336
- window.IntersectionObserver = IntersectionObserver;
27337
- window.IntersectionObserverEntry = IntersectionObserverEntry;
27338
-
27339
- }());
27340
-
27341
- const intersectionObserver = /*#__PURE__*/Object.freeze({
27342
- __proto__: null
27343
- });
27344
-
27345
25685
  (function () {
27346
25686
 
27347
25687
  var UNSUPPORTED_ENVIRONMENT = typeof window === "undefined";
@@ -29412,6 +27752,6 @@ const index = /*#__PURE__*/Object.freeze({
29412
27752
  GESTURE_CONTROLLER: GESTURE_CONTROLLER
29413
27753
  });
29414
27754
 
29415
- export { NanoAccordion, NanoAlert, NanoAlgolia, NanoAlgoliaFilter, NanoAlgoliaInput, NanoAlgoliaPagination, NanoAlgoliaResults, NanoAspectRatio, NanoCheckbox, NanoCheckboxGroup, NanoDatalist, NanoDateInput, NanoDatePicker, NanoDetails, NanoDialog, NanoDrawer, NanoDropdown, NanoFieldValidator, NanoFileUpload, NanoGlobalNav, NanoGlobalSearchResults, NanoGrid, NanoGridItem, NanoHero, NanoIcon, NanoIconButton, NanoImg, NanoInput, NanoMenu, NanoMenuDrawer, NanoNavItem, NanoOption, NanoRange, NanoRating, NanoResizeObserve, NanoSelect, NanoSkeleton, NanoSlide, NanoSlides, NanoSpinner, NanoSplitPane, NanoSticker, NanoTab, NanoTabContent, NanoTabGroup, NanoTooltip, defineCustomElements, nanoCreateDialog, debounce$2 as nanoDebounce, raf as nanoRaf, nanoShowAlert, nanoShowToast, throttle$1 as nanoThrottle, setAssetPath, setPlatformOptions };
27755
+ export { NanoAccordion, NanoAlert, NanoAlgolia, NanoAlgoliaFilter, NanoAlgoliaInput, NanoAlgoliaPagination, NanoAlgoliaResults, NanoAspectRatio, NanoCheckbox, NanoCheckboxGroup, NanoDatalist, NanoDateInput, NanoDatePicker, NanoDetails, NanoDialog, NanoDrawer, NanoDropdown, NanoFieldValidator, NanoFileUpload, NanoGlobalNav, NanoGlobalSearchResults, NanoGrid, NanoGridItem, NanoHero, NanoIcon, NanoIconButton, NanoImg, NanoInput, NanoMenu, NanoMenuDrawer, NanoNavItem, NanoOption, NanoRange, NanoRating, NanoResizeObserve, NanoSelect, NanoSkeleton, NanoSlide, NanoSlides, NanoSpinner, NanoSplitPane, NanoSticker, NanoTab, NanoTabContent, NanoTabGroup, NanoTooltip, defineCustomElements, nanoCreateDialog, debounce$2 as nanoDebounce, getTabbableElements as nanoGetTabElements, raf as nanoRaf, nanoShowAlert, nanoShowToast, throttle as nanoThrottle, setAssetPath, setPlatformOptions };
29416
27756
 
29417
27757
  //# sourceMappingURL=index.js.map