@nanoporetech-digital/components 7.6.0 → 7.8.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 (680) hide show
  1. package/dist/cjs/{algolia-data-0447757c.js → algolia-data-ca9cd58e.js} +2 -2
  2. package/dist/cjs/{algolia-data-0447757c.js.map → algolia-data-ca9cd58e.js.map} +1 -1
  3. package/dist/cjs/app-globals-3e14cb71.js +41 -0
  4. package/dist/cjs/app-globals-3e14cb71.js.map +1 -0
  5. package/dist/cjs/{component-store-6a330cd1.js → component-store-b8d4bd91.js} +2 -2
  6. package/dist/cjs/{component-store-6a330cd1.js.map → component-store-b8d4bd91.js.map} +1 -1
  7. package/dist/cjs/{dom-756fcdac.js → dom-b99a1aec.js} +2 -2
  8. package/dist/cjs/{dom-756fcdac.js.map → dom-b99a1aec.js.map} +1 -1
  9. package/dist/cjs/{fade-2dd9dd8b.js → fade-6a5004f4.js} +4 -3
  10. package/dist/cjs/fade-6a5004f4.js.map +1 -0
  11. package/dist/cjs/form-control-5bb39cc2.js +82 -0
  12. package/dist/cjs/form-control-5bb39cc2.js.map +1 -0
  13. package/dist/cjs/{fullscreen-5d0422de.js → fullscreen-f5db9bbe.js} +4 -3
  14. package/dist/cjs/fullscreen-f5db9bbe.js.map +1 -0
  15. package/dist/cjs/{index-b6fa04fa.js → index-615cdb64.js} +4 -2
  16. package/dist/cjs/index-615cdb64.js.map +1 -0
  17. package/dist/cjs/{index-7795a8f6.js → index-a92a0379.js} +2 -2
  18. package/dist/cjs/{index-7795a8f6.js.map → index-a92a0379.js.map} +1 -1
  19. package/dist/cjs/index.cjs.js +20 -5
  20. package/dist/cjs/index.cjs.js.map +1 -1
  21. package/dist/cjs/{lazyload-f181cb37.js → lazyload-13d72e60.js} +4 -3
  22. package/dist/cjs/lazyload-13d72e60.js.map +1 -0
  23. package/dist/cjs/loader.cjs.js +2 -2
  24. package/dist/cjs/nano-accordion.cjs.entry.js +8 -6
  25. package/dist/cjs/nano-accordion.cjs.entry.js.map +1 -1
  26. package/dist/cjs/nano-alert.cjs.entry.js +12 -11
  27. package/dist/cjs/nano-alert.cjs.entry.js.map +1 -1
  28. package/dist/cjs/nano-algolia-filter.cjs.entry.js +7 -5
  29. package/dist/cjs/nano-algolia-filter.cjs.entry.js.map +1 -1
  30. package/dist/cjs/nano-algolia-pagination.cjs.entry.js +4 -4
  31. package/dist/cjs/nano-algolia-results.cjs.entry.js +6 -4
  32. package/dist/cjs/nano-algolia-results.cjs.entry.js.map +1 -1
  33. package/dist/cjs/nano-algolia.cjs.entry.js +14 -11
  34. package/dist/cjs/nano-algolia.cjs.entry.js.map +1 -1
  35. package/dist/cjs/nano-animation.cjs.entry.js +3 -2
  36. package/dist/cjs/nano-animation.cjs.entry.js.map +1 -1
  37. package/dist/cjs/nano-checkbox-group.cjs.entry.js +6 -4
  38. package/dist/cjs/nano-checkbox-group.cjs.entry.js.map +1 -1
  39. package/dist/cjs/nano-checkbox.cjs.entry.js +6 -5
  40. package/dist/cjs/nano-checkbox.cjs.entry.js.map +1 -1
  41. package/dist/cjs/nano-components.cjs.js +6 -3
  42. package/dist/cjs/nano-components.cjs.js.map +1 -1
  43. package/dist/cjs/nano-datalist_3.cjs.entry.js +30 -28
  44. package/dist/cjs/nano-datalist_3.cjs.entry.js.map +1 -1
  45. package/dist/cjs/nano-date-input.cjs.entry.js +7 -6
  46. package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
  47. package/dist/cjs/nano-date-picker.cjs.entry.js +16 -15
  48. package/dist/cjs/nano-date-picker.cjs.entry.js.map +1 -1
  49. package/dist/cjs/nano-details.cjs.entry.js +7 -6
  50. package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
  51. package/dist/cjs/nano-dialog.cjs.entry.js +7 -6
  52. package/dist/cjs/nano-dialog.cjs.entry.js.map +1 -1
  53. package/dist/cjs/nano-drawer.cjs.entry.js +9 -8
  54. package/dist/cjs/nano-drawer.cjs.entry.js.map +1 -1
  55. package/dist/cjs/nano-dropdown.cjs.entry.js +9 -7
  56. package/dist/cjs/nano-dropdown.cjs.entry.js.map +1 -1
  57. package/dist/cjs/nano-field-validator.cjs.entry.js +17 -15
  58. package/dist/cjs/nano-field-validator.cjs.entry.js.map +1 -1
  59. package/dist/cjs/nano-file-upload.cjs.entry.js +12 -11
  60. package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
  61. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +30 -27
  62. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
  63. package/dist/cjs/nano-global-nav.cjs.entry.js +68 -66
  64. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  65. package/dist/cjs/nano-global-search-results.cjs.entry.js +10 -6
  66. package/dist/cjs/nano-global-search-results.cjs.entry.js.map +1 -1
  67. package/dist/cjs/nano-grid-item.cjs.entry.js +2 -2
  68. package/dist/cjs/nano-grid_2.cjs.entry.js +6 -5
  69. package/dist/cjs/nano-grid_2.cjs.entry.js.map +1 -1
  70. package/dist/cjs/nano-hero.cjs.entry.js +11 -10
  71. package/dist/cjs/nano-hero.cjs.entry.js.map +1 -1
  72. package/dist/cjs/nano-icon-button_2.cjs.entry.js +6 -5
  73. package/dist/cjs/nano-icon-button_2.cjs.entry.js.map +1 -1
  74. package/dist/cjs/nano-icon.cjs.entry.js +5 -3
  75. package/dist/cjs/nano-icon.cjs.entry.js.map +1 -1
  76. package/dist/cjs/nano-input.cjs.entry.js +9 -7
  77. package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
  78. package/dist/cjs/nano-intersection-observe.cjs.entry.js +3 -2
  79. package/dist/cjs/nano-intersection-observe.cjs.entry.js.map +1 -1
  80. package/dist/cjs/nano-menu-drawer.cjs.entry.js +10 -8
  81. package/dist/cjs/nano-menu-drawer.cjs.entry.js.map +1 -1
  82. package/dist/cjs/nano-more-less.cjs.entry.js +5 -4
  83. package/dist/cjs/nano-more-less.cjs.entry.js.map +1 -1
  84. package/dist/cjs/nano-overflow-nav.cjs.entry.js +7 -6
  85. package/dist/cjs/nano-overflow-nav.cjs.entry.js.map +1 -1
  86. package/dist/cjs/nano-progress-bar.cjs.entry.js +7 -4
  87. package/dist/cjs/nano-progress-bar.cjs.entry.js.map +1 -1
  88. package/dist/cjs/nano-range.cjs.entry.js +9 -7
  89. package/dist/cjs/nano-range.cjs.entry.js.map +1 -1
  90. package/dist/cjs/nano-rating.cjs.entry.js +10 -9
  91. package/dist/cjs/nano-rating.cjs.entry.js.map +1 -1
  92. package/dist/cjs/nano-resize-observe_2.cjs.entry.js +7 -6
  93. package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
  94. package/dist/cjs/nano-slide.cjs.entry.js +3 -2
  95. package/dist/cjs/nano-slide.cjs.entry.js.map +1 -1
  96. package/dist/cjs/{nano-slides-612634dc.js → nano-slides-0a60315d.js} +15 -13
  97. package/dist/cjs/nano-slides-0a60315d.js.map +1 -0
  98. package/dist/cjs/nano-slides.cjs.entry.js +3 -2
  99. package/dist/cjs/nano-slides.cjs.entry.js.map +1 -1
  100. package/dist/cjs/nano-sortable.cjs.entry.js +3 -2
  101. package/dist/cjs/nano-sortable.cjs.entry.js.map +1 -1
  102. package/dist/cjs/nano-spinner.cjs.entry.js +3 -2
  103. package/dist/cjs/nano-spinner.cjs.entry.js.map +1 -1
  104. package/dist/cjs/nano-split-pane.cjs.entry.js +3 -2
  105. package/dist/cjs/nano-split-pane.cjs.entry.js.map +1 -1
  106. package/dist/cjs/nano-sticker.cjs.entry.js +6 -5
  107. package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
  108. package/dist/cjs/nano-tab-content.cjs.entry.js +5 -3
  109. package/dist/cjs/nano-tab-content.cjs.entry.js.map +1 -1
  110. package/dist/cjs/nano-tab-group.cjs.entry.js +16 -14
  111. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  112. package/dist/cjs/nano-tab.cjs.entry.js +4 -3
  113. package/dist/cjs/nano-tab.cjs.entry.js.map +1 -1
  114. package/dist/cjs/{nano-table-99d6a3cc.js → nano-table-43fc3d23.js} +42 -40
  115. package/dist/cjs/nano-table-43fc3d23.js.map +1 -0
  116. package/dist/cjs/nano-table.cjs.entry.js +4 -3
  117. package/dist/cjs/nano-table.cjs.entry.js.map +1 -1
  118. package/dist/cjs/{page-dots-99dd88f6.js → page-dots-ecdd64d1.js} +4 -3
  119. package/dist/cjs/page-dots-ecdd64d1.js.map +1 -0
  120. package/dist/cjs/renderer-cd8b6098.js +63 -0
  121. package/dist/cjs/renderer-cd8b6098.js.map +1 -0
  122. package/dist/cjs/{scroll-772f7d0d.js → scroll-a3e5c6c6.js} +2 -2
  123. package/dist/cjs/{scroll-772f7d0d.js.map → scroll-a3e5c6c6.js.map} +1 -1
  124. package/dist/cjs/{table.worker-263468df.js → table.worker-ad250672.js} +5 -4
  125. package/dist/cjs/table.worker-ad250672.js.map +1 -0
  126. package/dist/collection/components/accordion/accordion.js +7 -5
  127. package/dist/collection/components/accordion/accordion.js.map +1 -1
  128. package/dist/collection/components/alert/alert.helpers.js +3 -2
  129. package/dist/collection/components/alert/alert.helpers.js.map +1 -1
  130. package/dist/collection/components/alert/alert.js +8 -7
  131. package/dist/collection/components/alert/alert.js.map +1 -1
  132. package/dist/collection/components/algolia/algolia-filter.js +5 -3
  133. package/dist/collection/components/algolia/algolia-filter.js.map +1 -1
  134. package/dist/collection/components/algolia/algolia-pagination.js +2 -2
  135. package/dist/collection/components/algolia/algolia-results.js +5 -3
  136. package/dist/collection/components/algolia/algolia-results.js.map +1 -1
  137. package/dist/collection/components/algolia/algolia.js +11 -8
  138. package/dist/collection/components/algolia/algolia.js.map +1 -1
  139. package/dist/collection/components/animation/animation.js +3 -2
  140. package/dist/collection/components/animation/animation.js.map +1 -1
  141. package/dist/collection/components/checkbox/checkbox-group.js +6 -4
  142. package/dist/collection/components/checkbox/checkbox-group.js.map +1 -1
  143. package/dist/collection/components/checkbox/checkbox.js +6 -5
  144. package/dist/collection/components/checkbox/checkbox.js.map +1 -1
  145. package/dist/collection/components/datalist/datalist.css +1 -1
  146. package/dist/collection/components/datalist/datalist.js +14 -13
  147. package/dist/collection/components/datalist/datalist.js.map +1 -1
  148. package/dist/collection/components/date-input/date-input.css +3 -3
  149. package/dist/collection/components/date-input/date-input.js +6 -5
  150. package/dist/collection/components/date-input/date-input.js.map +1 -1
  151. package/dist/collection/components/date-picker/date-picker.css +3 -3
  152. package/dist/collection/components/date-picker/date-picker.js +5 -4
  153. package/dist/collection/components/date-picker/date-picker.js.map +1 -1
  154. package/dist/collection/components/date-picker/duet-date-picker/date-picker-day.js +1 -1
  155. package/dist/collection/components/date-picker/duet-date-picker/date-picker-day.js.map +1 -1
  156. package/dist/collection/components/date-picker/duet-date-picker/date-picker-month.js +1 -1
  157. package/dist/collection/components/date-picker/duet-date-picker/date-picker-month.js.map +1 -1
  158. package/dist/collection/components/details/details.css +1 -1
  159. package/dist/collection/components/details/details.js +6 -5
  160. package/dist/collection/components/details/details.js.map +1 -1
  161. package/dist/collection/components/dialog/dialog.helpers.js +2 -1
  162. package/dist/collection/components/dialog/dialog.helpers.js.map +1 -1
  163. package/dist/collection/components/dialog/dialog.js +4 -3
  164. package/dist/collection/components/dialog/dialog.js.map +1 -1
  165. package/dist/collection/components/drawer/drawer.css +1 -1
  166. package/dist/collection/components/drawer/drawer.js +5 -4
  167. package/dist/collection/components/drawer/drawer.js.map +1 -1
  168. package/dist/collection/components/dropdown/dropdown.css +1 -1
  169. package/dist/collection/components/dropdown/dropdown.js +8 -6
  170. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  171. package/dist/collection/components/field-validator/field-validator.js +16 -14
  172. package/dist/collection/components/field-validator/field-validator.js.map +1 -1
  173. package/dist/collection/components/file-upload/file-upload.css +1 -1
  174. package/dist/collection/components/file-upload/file-upload.js +3 -2
  175. package/dist/collection/components/file-upload/file-upload.js.map +1 -1
  176. package/dist/collection/components/form-control/form-control.js +1 -1
  177. package/dist/collection/components/form-control/form-control.js.map +1 -1
  178. package/dist/collection/components/global-nav/global-nav-user-profile.js +3 -2
  179. package/dist/collection/components/global-nav/global-nav-user-profile.js.map +1 -1
  180. package/dist/collection/components/global-nav/global-nav.js +50 -48
  181. package/dist/collection/components/global-nav/global-nav.js.map +1 -1
  182. package/dist/collection/components/global-nav/style/global-nav.css +33 -33
  183. package/dist/collection/components/global-search-results/global-search-results.css +11 -11
  184. package/dist/collection/components/global-search-results/global-search-results.js +9 -5
  185. package/dist/collection/components/global-search-results/global-search-results.js.map +1 -1
  186. package/dist/collection/components/grid/grid-item.js +1 -1
  187. package/dist/collection/components/grid/grid.js +3 -2
  188. package/dist/collection/components/grid/grid.js.map +1 -1
  189. package/dist/collection/components/hero/hero.css +2 -2
  190. package/dist/collection/components/hero/hero.js +6 -5
  191. package/dist/collection/components/hero/hero.js.map +1 -1
  192. package/dist/collection/components/icon/icon.js +4 -2
  193. package/dist/collection/components/icon/icon.js.map +1 -1
  194. package/dist/collection/components/icon-button/icon-button.js +2 -2
  195. package/dist/collection/components/icon-button/icon-button.js.map +1 -1
  196. package/dist/collection/components/img/img.js +5 -4
  197. package/dist/collection/components/img/img.js.map +1 -1
  198. package/dist/collection/components/input/input.js +7 -5
  199. package/dist/collection/components/input/input.js.map +1 -1
  200. package/dist/collection/components/intersection-observe/intersection-observe.js +3 -2
  201. package/dist/collection/components/intersection-observe/intersection-observe.js.map +1 -1
  202. package/dist/collection/components/menu/menu.css +1 -1
  203. package/dist/collection/components/menu/menu.js +12 -10
  204. package/dist/collection/components/menu/menu.js.map +1 -1
  205. package/dist/collection/components/menu-drawer/menu-drawer.css +3 -3
  206. package/dist/collection/components/menu-drawer/menu-drawer.js +8 -6
  207. package/dist/collection/components/menu-drawer/menu-drawer.js.map +1 -1
  208. package/dist/collection/components/more-less/more-less.js +4 -3
  209. package/dist/collection/components/more-less/more-less.js.map +1 -1
  210. package/dist/collection/components/nav-item/nav-item.css +12 -12
  211. package/dist/collection/components/nav-item/nav-item.js +11 -9
  212. package/dist/collection/components/nav-item/nav-item.js.map +1 -1
  213. package/dist/collection/components/option/option.css +2 -2
  214. package/dist/collection/components/option/option.js +4 -3
  215. package/dist/collection/components/option/option.js.map +1 -1
  216. package/dist/collection/components/overflow-nav/overflow-nav.css +4 -4
  217. package/dist/collection/components/overflow-nav/overflow-nav.js +5 -4
  218. package/dist/collection/components/overflow-nav/overflow-nav.js.map +1 -1
  219. package/dist/collection/components/progress-bar/progress-bar.js +7 -4
  220. package/dist/collection/components/progress-bar/progress-bar.js.map +1 -1
  221. package/dist/collection/components/range/range.js +3 -1
  222. package/dist/collection/components/range/range.js.map +1 -1
  223. package/dist/collection/components/rating/rating.css +1 -1
  224. package/dist/collection/components/rating/rating.js +6 -5
  225. package/dist/collection/components/rating/rating.js.map +1 -1
  226. package/dist/collection/components/resize-observe/resize-observe.js +3 -2
  227. package/dist/collection/components/resize-observe/resize-observe.js.map +1 -1
  228. package/dist/collection/components/select/select.css +1 -5
  229. package/dist/collection/components/select/select.js +9 -7
  230. package/dist/collection/components/select/select.js.map +1 -1
  231. package/dist/collection/components/skeleton/skeleton.js +4 -3
  232. package/dist/collection/components/skeleton/skeleton.js.map +1 -1
  233. package/dist/collection/components/slides/slide.js +3 -2
  234. package/dist/collection/components/slides/slide.js.map +1 -1
  235. package/dist/collection/components/slides/slides.js +10 -8
  236. package/dist/collection/components/slides/slides.js.map +1 -1
  237. package/dist/collection/components/sortable/sortable.js +3 -2
  238. package/dist/collection/components/sortable/sortable.js.map +1 -1
  239. package/dist/collection/components/spinner/spinner.js +3 -2
  240. package/dist/collection/components/spinner/spinner.js.map +1 -1
  241. package/dist/collection/components/split-pane/split-pane.js +3 -2
  242. package/dist/collection/components/split-pane/split-pane.js.map +1 -1
  243. package/dist/collection/components/sticker/sticker.js +5 -4
  244. package/dist/collection/components/sticker/sticker.js.map +1 -1
  245. package/dist/collection/components/table/table.cell.js +3 -1
  246. package/dist/collection/components/table/table.cell.js.map +1 -1
  247. package/dist/collection/components/table/table.css +2 -2
  248. package/dist/collection/components/table/table.header.js +2 -1
  249. package/dist/collection/components/table/table.header.js.map +1 -1
  250. package/dist/collection/components/table/table.js +9 -8
  251. package/dist/collection/components/table/table.js.map +1 -1
  252. package/dist/collection/components/table/table.row.js +1 -1
  253. package/dist/collection/components/table/table.row.js.map +1 -1
  254. package/dist/collection/components/tabs/tab-content.js +5 -3
  255. package/dist/collection/components/tabs/tab-content.js.map +1 -1
  256. package/dist/collection/components/tabs/tab-group.css +3 -3
  257. package/dist/collection/components/tabs/tab-group.js +12 -10
  258. package/dist/collection/components/tabs/tab-group.js.map +1 -1
  259. package/dist/collection/components/tabs/tab.js +4 -3
  260. package/dist/collection/components/tabs/tab.js.map +1 -1
  261. package/dist/collection/components/tooltip/tooltip.js +4 -3
  262. package/dist/collection/components/tooltip/tooltip.js.map +1 -1
  263. package/dist/collection/global/script/global.js +28 -23
  264. package/dist/collection/global/script/global.js.map +1 -1
  265. package/dist/collection/index.js +17 -2
  266. package/dist/collection/index.js.map +1 -1
  267. package/dist/collection/utils/renderer.js +54 -0
  268. package/dist/collection/utils/renderer.js.map +1 -0
  269. package/dist/components/algolia.js +11 -8
  270. package/dist/components/algolia.js.map +1 -1
  271. package/dist/components/datalist.js +19 -30
  272. package/dist/components/datalist.js.map +1 -1
  273. package/dist/components/date-picker.js +6 -5
  274. package/dist/components/date-picker.js.map +1 -1
  275. package/dist/components/dropdown.js +9 -7
  276. package/dist/components/dropdown.js.map +1 -1
  277. package/dist/components/form-control.js +1 -1
  278. package/dist/components/form-control.js.map +1 -1
  279. package/dist/components/global-nav-user-profile.js +3 -2
  280. package/dist/components/global-nav-user-profile.js.map +1 -1
  281. package/dist/components/grid.js +2 -1
  282. package/dist/components/grid.js.map +1 -1
  283. package/dist/components/icon-button.js +2 -2
  284. package/dist/components/icon-button.js.map +1 -1
  285. package/dist/components/icon.js +4 -2
  286. package/dist/components/icon.js.map +1 -1
  287. package/dist/components/img.js +5 -4
  288. package/dist/components/img.js.map +1 -1
  289. package/dist/components/index.js +48 -31
  290. package/dist/components/index.js.map +1 -1
  291. package/dist/components/input.js +7 -5
  292. package/dist/components/input.js.map +1 -1
  293. package/dist/components/menu.js +13 -11
  294. package/dist/components/menu.js.map +1 -1
  295. package/dist/components/nano-accordion.js +7 -5
  296. package/dist/components/nano-accordion.js.map +1 -1
  297. package/dist/components/nano-alert.js +8 -7
  298. package/dist/components/nano-alert.js.map +1 -1
  299. package/dist/components/nano-algolia-filter.js +5 -3
  300. package/dist/components/nano-algolia-filter.js.map +1 -1
  301. package/dist/components/nano-algolia-pagination.js +2 -2
  302. package/dist/components/nano-algolia-results.js +5 -3
  303. package/dist/components/nano-algolia-results.js.map +1 -1
  304. package/dist/components/nano-animation.js +3 -2
  305. package/dist/components/nano-animation.js.map +1 -1
  306. package/dist/components/nano-checkbox-group.js +6 -4
  307. package/dist/components/nano-checkbox-group.js.map +1 -1
  308. package/dist/components/nano-checkbox.js +6 -5
  309. package/dist/components/nano-checkbox.js.map +1 -1
  310. package/dist/components/nano-date-input.js +7 -6
  311. package/dist/components/nano-date-input.js.map +1 -1
  312. package/dist/components/nano-details.js +7 -6
  313. package/dist/components/nano-details.js.map +1 -1
  314. package/dist/components/nano-dialog.js +4 -3
  315. package/dist/components/nano-dialog.js.map +1 -1
  316. package/dist/components/nano-drawer.js +6 -5
  317. package/dist/components/nano-drawer.js.map +1 -1
  318. package/dist/components/nano-field-validator.js +16 -14
  319. package/dist/components/nano-field-validator.js.map +1 -1
  320. package/dist/components/nano-file-upload.js +4 -3
  321. package/dist/components/nano-file-upload.js.map +1 -1
  322. package/dist/components/nano-global-nav.js +51 -49
  323. package/dist/components/nano-global-nav.js.map +1 -1
  324. package/dist/components/nano-global-search-results.js +10 -6
  325. package/dist/components/nano-global-search-results.js.map +1 -1
  326. package/dist/components/nano-grid-item.js +1 -1
  327. package/dist/components/nano-hero.js +7 -6
  328. package/dist/components/nano-hero.js.map +1 -1
  329. package/dist/components/nano-intersection-observe.js +3 -2
  330. package/dist/components/nano-intersection-observe.js.map +1 -1
  331. package/dist/components/nano-menu-drawer.js +9 -7
  332. package/dist/components/nano-menu-drawer.js.map +1 -1
  333. package/dist/components/nano-more-less.js +4 -3
  334. package/dist/components/nano-more-less.js.map +1 -1
  335. package/dist/components/nano-overflow-nav.js +6 -5
  336. package/dist/components/nano-overflow-nav.js.map +1 -1
  337. package/dist/components/nano-range.js +3 -1
  338. package/dist/components/nano-range.js.map +1 -1
  339. package/dist/components/nano-rating.js +7 -6
  340. package/dist/components/nano-rating.js.map +1 -1
  341. package/dist/components/nano-slide.js +3 -2
  342. package/dist/components/nano-slide.js.map +1 -1
  343. package/dist/components/nano-slides.js +10 -8
  344. package/dist/components/nano-slides.js.map +1 -1
  345. package/dist/components/nano-sortable.js +3 -2
  346. package/dist/components/nano-sortable.js.map +1 -1
  347. package/dist/components/nano-split-pane.js +3 -2
  348. package/dist/components/nano-split-pane.js.map +1 -1
  349. package/dist/components/nano-tab-content.js +5 -3
  350. package/dist/components/nano-tab-content.js.map +1 -1
  351. package/dist/components/nano-tab-group.js +13 -11
  352. package/dist/components/nano-tab-group.js.map +1 -1
  353. package/dist/components/nano-tab.js +4 -3
  354. package/dist/components/nano-tab.js.map +1 -1
  355. package/dist/components/nano-table.js +38 -36
  356. package/dist/components/nano-table.js.map +1 -1
  357. package/dist/components/nav-item.js +12 -10
  358. package/dist/components/nav-item.js.map +1 -1
  359. package/dist/components/option.js +5 -4
  360. package/dist/components/option.js.map +1 -1
  361. package/dist/components/progress-bar.js +7 -4
  362. package/dist/components/progress-bar.js.map +1 -1
  363. package/dist/components/renderer.js +58 -0
  364. package/dist/components/renderer.js.map +1 -0
  365. package/dist/components/resize-observe.js +3 -2
  366. package/dist/components/resize-observe.js.map +1 -1
  367. package/dist/components/select.js +10 -8
  368. package/dist/components/select.js.map +1 -1
  369. package/dist/components/skeleton.js +4 -3
  370. package/dist/components/skeleton.js.map +1 -1
  371. package/dist/components/spinner.js +3 -2
  372. package/dist/components/spinner.js.map +1 -1
  373. package/dist/components/sticker.js +5 -4
  374. package/dist/components/sticker.js.map +1 -1
  375. package/dist/components/tooltip.js +4 -3
  376. package/dist/components/tooltip.js.map +1 -1
  377. package/dist/esm/{algolia-data-8fc24341.js → algolia-data-f0f72f1d.js} +2 -2
  378. package/dist/esm/{algolia-data-8fc24341.js.map → algolia-data-f0f72f1d.js.map} +1 -1
  379. package/dist/esm/app-globals-f0120bbe.js +39 -0
  380. package/dist/esm/app-globals-f0120bbe.js.map +1 -0
  381. package/dist/esm/{component-store-b798181b.js → component-store-199a9fd8.js} +2 -2
  382. package/dist/esm/{component-store-b798181b.js.map → component-store-199a9fd8.js.map} +1 -1
  383. package/dist/esm/{dom-d7f9f24c.js → dom-fafdec9a.js} +2 -2
  384. package/dist/esm/{dom-d7f9f24c.js.map → dom-fafdec9a.js.map} +1 -1
  385. package/dist/esm/{fade-4ff5d9de.js → fade-ce1a4958.js} +4 -3
  386. package/dist/esm/fade-ce1a4958.js.map +1 -0
  387. package/dist/esm/{form-control-812999d0.js → form-control-f48fa873.js} +2 -2
  388. package/dist/esm/form-control-f48fa873.js.map +1 -0
  389. package/dist/esm/{fullscreen-382d7890.js → fullscreen-52d62028.js} +4 -3
  390. package/dist/esm/fullscreen-52d62028.js.map +1 -0
  391. package/dist/esm/{index-3118109b.js → index-6cc72cd9.js} +3 -3
  392. package/dist/esm/index-6cc72cd9.js.map +1 -0
  393. package/dist/esm/{index-d7a4a150.js → index-f5f7b950.js} +2 -2
  394. package/dist/esm/{index-d7a4a150.js.map → index-f5f7b950.js.map} +1 -1
  395. package/dist/esm/index.js +19 -5
  396. package/dist/esm/index.js.map +1 -1
  397. package/dist/esm/{lazyload-49b745e4.js → lazyload-8ff69ba4.js} +4 -3
  398. package/dist/esm/lazyload-8ff69ba4.js.map +1 -0
  399. package/dist/esm/loader.js +3 -3
  400. package/dist/esm/nano-accordion.entry.js +8 -6
  401. package/dist/esm/nano-accordion.entry.js.map +1 -1
  402. package/dist/esm/nano-alert.entry.js +10 -9
  403. package/dist/esm/nano-alert.entry.js.map +1 -1
  404. package/dist/esm/nano-algolia-filter.entry.js +7 -5
  405. package/dist/esm/nano-algolia-filter.entry.js.map +1 -1
  406. package/dist/esm/nano-algolia-pagination.entry.js +4 -4
  407. package/dist/esm/nano-algolia-results.entry.js +6 -4
  408. package/dist/esm/nano-algolia-results.entry.js.map +1 -1
  409. package/dist/esm/nano-algolia.entry.js +14 -11
  410. package/dist/esm/nano-algolia.entry.js.map +1 -1
  411. package/dist/esm/nano-animation.entry.js +3 -2
  412. package/dist/esm/nano-animation.entry.js.map +1 -1
  413. package/dist/esm/nano-checkbox-group.entry.js +6 -4
  414. package/dist/esm/nano-checkbox-group.entry.js.map +1 -1
  415. package/dist/esm/nano-checkbox.entry.js +6 -5
  416. package/dist/esm/nano-checkbox.entry.js.map +1 -1
  417. package/dist/esm/nano-components.js +7 -4
  418. package/dist/esm/nano-components.js.map +1 -1
  419. package/dist/esm/nano-datalist_3.entry.js +30 -28
  420. package/dist/esm/nano-datalist_3.entry.js.map +1 -1
  421. package/dist/esm/nano-date-input.entry.js +7 -6
  422. package/dist/esm/nano-date-input.entry.js.map +1 -1
  423. package/dist/esm/nano-date-picker.entry.js +6 -5
  424. package/dist/esm/nano-date-picker.entry.js.map +1 -1
  425. package/dist/esm/nano-details.entry.js +7 -6
  426. package/dist/esm/nano-details.entry.js.map +1 -1
  427. package/dist/esm/nano-dialog.entry.js +7 -6
  428. package/dist/esm/nano-dialog.entry.js.map +1 -1
  429. package/dist/esm/nano-drawer.entry.js +9 -8
  430. package/dist/esm/nano-drawer.entry.js.map +1 -1
  431. package/dist/esm/nano-dropdown.entry.js +9 -7
  432. package/dist/esm/nano-dropdown.entry.js.map +1 -1
  433. package/dist/esm/nano-field-validator.entry.js +17 -15
  434. package/dist/esm/nano-field-validator.entry.js.map +1 -1
  435. package/dist/esm/nano-file-upload.entry.js +4 -3
  436. package/dist/esm/nano-file-upload.entry.js.map +1 -1
  437. package/dist/esm/nano-global-nav-user-profile_3.entry.js +23 -20
  438. package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
  439. package/dist/esm/nano-global-nav.entry.js +52 -50
  440. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  441. package/dist/esm/nano-global-search-results.entry.js +10 -6
  442. package/dist/esm/nano-global-search-results.entry.js.map +1 -1
  443. package/dist/esm/nano-grid-item.entry.js +2 -2
  444. package/dist/esm/nano-grid_2.entry.js +6 -5
  445. package/dist/esm/nano-grid_2.entry.js.map +1 -1
  446. package/dist/esm/nano-hero.entry.js +7 -6
  447. package/dist/esm/nano-hero.entry.js.map +1 -1
  448. package/dist/esm/nano-icon-button_2.entry.js +6 -5
  449. package/dist/esm/nano-icon-button_2.entry.js.map +1 -1
  450. package/dist/esm/nano-icon.entry.js +4 -2
  451. package/dist/esm/nano-icon.entry.js.map +1 -1
  452. package/dist/esm/nano-input.entry.js +9 -7
  453. package/dist/esm/nano-input.entry.js.map +1 -1
  454. package/dist/esm/nano-intersection-observe.entry.js +3 -2
  455. package/dist/esm/nano-intersection-observe.entry.js.map +1 -1
  456. package/dist/esm/nano-menu-drawer.entry.js +10 -8
  457. package/dist/esm/nano-menu-drawer.entry.js.map +1 -1
  458. package/dist/esm/nano-more-less.entry.js +4 -3
  459. package/dist/esm/nano-more-less.entry.js.map +1 -1
  460. package/dist/esm/nano-overflow-nav.entry.js +7 -6
  461. package/dist/esm/nano-overflow-nav.entry.js.map +1 -1
  462. package/dist/esm/nano-progress-bar.entry.js +7 -4
  463. package/dist/esm/nano-progress-bar.entry.js.map +1 -1
  464. package/dist/esm/nano-range.entry.js +3 -1
  465. package/dist/esm/nano-range.entry.js.map +1 -1
  466. package/dist/esm/nano-rating.entry.js +7 -6
  467. package/dist/esm/nano-rating.entry.js.map +1 -1
  468. package/dist/esm/nano-resize-observe_2.entry.js +5 -4
  469. package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
  470. package/dist/esm/nano-slide.entry.js +3 -2
  471. package/dist/esm/nano-slide.entry.js.map +1 -1
  472. package/dist/esm/{nano-slides-c3eb1afe.js → nano-slides-2715825b.js} +15 -13
  473. package/dist/esm/nano-slides-2715825b.js.map +1 -0
  474. package/dist/esm/nano-slides.entry.js +3 -2
  475. package/dist/esm/nano-slides.entry.js.map +1 -1
  476. package/dist/esm/nano-sortable.entry.js +3 -2
  477. package/dist/esm/nano-sortable.entry.js.map +1 -1
  478. package/dist/esm/nano-spinner.entry.js +3 -2
  479. package/dist/esm/nano-spinner.entry.js.map +1 -1
  480. package/dist/esm/nano-split-pane.entry.js +3 -2
  481. package/dist/esm/nano-split-pane.entry.js.map +1 -1
  482. package/dist/esm/nano-sticker.entry.js +6 -5
  483. package/dist/esm/nano-sticker.entry.js.map +1 -1
  484. package/dist/esm/nano-tab-content.entry.js +5 -3
  485. package/dist/esm/nano-tab-content.entry.js.map +1 -1
  486. package/dist/esm/nano-tab-group.entry.js +16 -14
  487. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  488. package/dist/esm/nano-tab.entry.js +4 -3
  489. package/dist/esm/nano-tab.entry.js.map +1 -1
  490. package/dist/esm/{nano-table-d15f6782.js → nano-table-4481d4e1.js} +42 -40
  491. package/dist/esm/nano-table-4481d4e1.js.map +1 -0
  492. package/dist/esm/nano-table.entry.js +4 -3
  493. package/dist/esm/nano-table.entry.js.map +1 -1
  494. package/dist/esm/{page-dots-986d3b32.js → page-dots-5b23db8c.js} +4 -3
  495. package/dist/esm/page-dots-5b23db8c.js.map +1 -0
  496. package/dist/esm/renderer-4bc3e2dc.js +58 -0
  497. package/dist/esm/renderer-4bc3e2dc.js.map +1 -0
  498. package/dist/esm/{scroll-f373a189.js → scroll-1afc6a4e.js} +2 -2
  499. package/dist/esm/{scroll-f373a189.js.map → scroll-1afc6a4e.js.map} +1 -1
  500. package/dist/esm/{table.worker-b7ee4edc.js → table.worker-1bc9c170.js} +5 -4
  501. package/dist/esm/table.worker-1bc9c170.js.map +1 -0
  502. package/dist/nano-components/{algolia-data-8fc24341.js → algolia-data-f0f72f1d.js} +2 -2
  503. package/dist/nano-components/app-globals-f0120bbe.js +5 -0
  504. package/dist/nano-components/app-globals-f0120bbe.js.map +1 -0
  505. package/dist/nano-components/{component-store-b798181b.js → component-store-199a9fd8.js} +2 -2
  506. package/dist/nano-components/{dom-d7f9f24c.js → dom-fafdec9a.js} +2 -2
  507. package/dist/nano-components/fade-ce1a4958.js +5 -0
  508. package/dist/nano-components/{fade-4ff5d9de.js.map → fade-ce1a4958.js.map} +1 -1
  509. package/dist/nano-components/form-control-f48fa873.js +5 -0
  510. package/dist/nano-components/form-control-f48fa873.js.map +1 -0
  511. package/dist/nano-components/fullscreen-52d62028.js +5 -0
  512. package/dist/nano-components/{fullscreen-382d7890.js.map → fullscreen-52d62028.js.map} +1 -1
  513. package/dist/nano-components/{index-3118109b.js → index-6cc72cd9.js} +3 -3
  514. package/dist/nano-components/index-6cc72cd9.js.map +1 -0
  515. package/dist/nano-components/{index-d7a4a150.js → index-f5f7b950.js} +2 -2
  516. package/dist/nano-components/index.esm.js +1 -1
  517. package/dist/nano-components/index.esm.js.map +1 -1
  518. package/dist/nano-components/lazyload-8ff69ba4.js +5 -0
  519. package/dist/nano-components/{lazyload-49b745e4.js.map → lazyload-8ff69ba4.js.map} +1 -1
  520. package/dist/nano-components/nano-accordion.entry.js +1 -1
  521. package/dist/nano-components/nano-accordion.entry.js.map +1 -1
  522. package/dist/nano-components/nano-alert.entry.js +1 -1
  523. package/dist/nano-components/nano-alert.entry.js.map +1 -1
  524. package/dist/nano-components/nano-algolia-filter.entry.js +1 -1
  525. package/dist/nano-components/nano-algolia-filter.entry.js.map +1 -1
  526. package/dist/nano-components/nano-algolia-pagination.entry.js +1 -1
  527. package/dist/nano-components/nano-algolia-results.entry.js +1 -1
  528. package/dist/nano-components/nano-algolia-results.entry.js.map +1 -1
  529. package/dist/nano-components/nano-algolia.entry.js +1 -1
  530. package/dist/nano-components/nano-algolia.entry.js.map +1 -1
  531. package/dist/nano-components/nano-animation.entry.js +1 -1
  532. package/dist/nano-components/nano-animation.entry.js.map +1 -1
  533. package/dist/nano-components/nano-checkbox-group.entry.js +1 -1
  534. package/dist/nano-components/nano-checkbox-group.entry.js.map +1 -1
  535. package/dist/nano-components/nano-checkbox.entry.js +1 -1
  536. package/dist/nano-components/nano-checkbox.entry.js.map +1 -1
  537. package/dist/nano-components/nano-components.esm.js +1 -1
  538. package/dist/nano-components/nano-components.esm.js.map +1 -1
  539. package/dist/nano-components/nano-datalist_3.entry.js +1 -1
  540. package/dist/nano-components/nano-datalist_3.entry.js.map +1 -1
  541. package/dist/nano-components/nano-date-input.entry.js +1 -1
  542. package/dist/nano-components/nano-date-input.entry.js.map +1 -1
  543. package/dist/nano-components/nano-date-picker.entry.js +1 -1
  544. package/dist/nano-components/nano-date-picker.entry.js.map +1 -1
  545. package/dist/nano-components/nano-details.entry.js +1 -1
  546. package/dist/nano-components/nano-details.entry.js.map +1 -1
  547. package/dist/nano-components/nano-dialog.entry.js +1 -1
  548. package/dist/nano-components/nano-dialog.entry.js.map +1 -1
  549. package/dist/nano-components/nano-drawer.entry.js +1 -1
  550. package/dist/nano-components/nano-drawer.entry.js.map +1 -1
  551. package/dist/nano-components/nano-dropdown.entry.js +1 -1
  552. package/dist/nano-components/nano-dropdown.entry.js.map +1 -1
  553. package/dist/nano-components/nano-field-validator.entry.js +1 -1
  554. package/dist/nano-components/nano-field-validator.entry.js.map +1 -1
  555. package/dist/nano-components/nano-file-upload.entry.js +1 -1
  556. package/dist/nano-components/nano-file-upload.entry.js.map +1 -1
  557. package/dist/nano-components/nano-global-nav-user-profile_3.entry.js +1 -1
  558. package/dist/nano-components/nano-global-nav-user-profile_3.entry.js.map +1 -1
  559. package/dist/nano-components/nano-global-nav.entry.js +1 -1
  560. package/dist/nano-components/nano-global-nav.entry.js.map +1 -1
  561. package/dist/nano-components/nano-global-search-results.entry.js +1 -1
  562. package/dist/nano-components/nano-global-search-results.entry.js.map +1 -1
  563. package/dist/nano-components/nano-grid-item.entry.js +1 -1
  564. package/dist/nano-components/nano-grid-item.entry.js.map +1 -1
  565. package/dist/nano-components/nano-grid_2.entry.js +1 -1
  566. package/dist/nano-components/nano-grid_2.entry.js.map +1 -1
  567. package/dist/nano-components/nano-hero.entry.js +1 -1
  568. package/dist/nano-components/nano-hero.entry.js.map +1 -1
  569. package/dist/nano-components/nano-icon-button_2.entry.js +1 -1
  570. package/dist/nano-components/nano-icon-button_2.entry.js.map +1 -1
  571. package/dist/nano-components/nano-icon.entry.js +1 -1
  572. package/dist/nano-components/nano-icon.entry.js.map +1 -1
  573. package/dist/nano-components/nano-input.entry.js +1 -1
  574. package/dist/nano-components/nano-input.entry.js.map +1 -1
  575. package/dist/nano-components/nano-intersection-observe.entry.js +1 -1
  576. package/dist/nano-components/nano-intersection-observe.entry.js.map +1 -1
  577. package/dist/nano-components/nano-menu-drawer.entry.js +1 -1
  578. package/dist/nano-components/nano-menu-drawer.entry.js.map +1 -1
  579. package/dist/nano-components/nano-more-less.entry.js +1 -1
  580. package/dist/nano-components/nano-more-less.entry.js.map +1 -1
  581. package/dist/nano-components/nano-overflow-nav.entry.js +1 -1
  582. package/dist/nano-components/nano-overflow-nav.entry.js.map +1 -1
  583. package/dist/nano-components/nano-progress-bar.entry.js +1 -1
  584. package/dist/nano-components/nano-progress-bar.entry.js.map +1 -1
  585. package/dist/nano-components/nano-range.entry.js +1 -1
  586. package/dist/nano-components/nano-range.entry.js.map +1 -1
  587. package/dist/nano-components/nano-rating.entry.js +1 -1
  588. package/dist/nano-components/nano-rating.entry.js.map +1 -1
  589. package/dist/nano-components/nano-resize-observe_2.entry.js +1 -1
  590. package/dist/nano-components/nano-resize-observe_2.entry.js.map +1 -1
  591. package/dist/nano-components/nano-slide.entry.js +1 -1
  592. package/dist/nano-components/nano-slide.entry.js.map +1 -1
  593. package/dist/nano-components/{nano-slides-c3eb1afe.js → nano-slides-2715825b.js} +5 -5
  594. package/dist/nano-components/nano-slides-2715825b.js.map +1 -0
  595. package/dist/nano-components/nano-slides.entry.js +1 -1
  596. package/dist/nano-components/nano-sortable.entry.js +1 -1
  597. package/dist/nano-components/nano-sortable.entry.js.map +1 -1
  598. package/dist/nano-components/nano-spinner.entry.js +1 -1
  599. package/dist/nano-components/nano-spinner.entry.js.map +1 -1
  600. package/dist/nano-components/nano-split-pane.entry.js +1 -1
  601. package/dist/nano-components/nano-split-pane.entry.js.map +1 -1
  602. package/dist/nano-components/nano-sticker.entry.js +1 -1
  603. package/dist/nano-components/nano-sticker.entry.js.map +1 -1
  604. package/dist/nano-components/nano-tab-content.entry.js +1 -1
  605. package/dist/nano-components/nano-tab-content.entry.js.map +1 -1
  606. package/dist/nano-components/nano-tab-group.entry.js +1 -1
  607. package/dist/nano-components/nano-tab-group.entry.js.map +1 -1
  608. package/dist/nano-components/nano-tab.entry.js +1 -1
  609. package/dist/nano-components/nano-tab.entry.js.map +1 -1
  610. package/dist/nano-components/nano-table-4481d4e1.js +5 -0
  611. package/dist/nano-components/nano-table-4481d4e1.js.map +1 -0
  612. package/dist/nano-components/nano-table.entry.js +1 -1
  613. package/dist/nano-components/page-dots-5b23db8c.js +5 -0
  614. package/dist/nano-components/{page-dots-986d3b32.js.map → page-dots-5b23db8c.js.map} +1 -1
  615. package/dist/nano-components/renderer-4bc3e2dc.js +5 -0
  616. package/dist/nano-components/renderer-4bc3e2dc.js.map +1 -0
  617. package/dist/nano-components/{scroll-f373a189.js → scroll-1afc6a4e.js} +2 -2
  618. package/dist/nano-components/table.worker-1bc9c170.js +5 -0
  619. package/dist/stencil.config.js +1 -0
  620. package/dist/stencil.config.js.map +1 -1
  621. package/dist/types/global/script/global.d.ts +2 -0
  622. package/dist/types/index.d.ts +3 -2
  623. package/dist/types/utils/renderer.d.ts +27 -0
  624. package/docs-json.json +1 -12
  625. package/hydrate/index.js +453 -393
  626. package/hydrate/index.mjs +453 -393
  627. package/package.json +1 -1
  628. package/dist/cjs/app-globals-93d8b419.js +0 -39
  629. package/dist/cjs/app-globals-93d8b419.js.map +0 -1
  630. package/dist/cjs/fade-2dd9dd8b.js.map +0 -1
  631. package/dist/cjs/form-control-2d88adb2.js +0 -82
  632. package/dist/cjs/form-control-2d88adb2.js.map +0 -1
  633. package/dist/cjs/fullscreen-5d0422de.js.map +0 -1
  634. package/dist/cjs/index-b6fa04fa.js.map +0 -1
  635. package/dist/cjs/lazyload-f181cb37.js.map +0 -1
  636. package/dist/cjs/nano-slides-612634dc.js.map +0 -1
  637. package/dist/cjs/nano-table-99d6a3cc.js.map +0 -1
  638. package/dist/cjs/page-dots-99dd88f6.js.map +0 -1
  639. package/dist/cjs/table.worker-263468df.js.map +0 -1
  640. package/dist/esm/app-globals-d4ab01f2.js +0 -37
  641. package/dist/esm/app-globals-d4ab01f2.js.map +0 -1
  642. package/dist/esm/fade-4ff5d9de.js.map +0 -1
  643. package/dist/esm/form-control-812999d0.js.map +0 -1
  644. package/dist/esm/fullscreen-382d7890.js.map +0 -1
  645. package/dist/esm/index-3118109b.js.map +0 -1
  646. package/dist/esm/lazyload-49b745e4.js.map +0 -1
  647. package/dist/esm/nano-slides-c3eb1afe.js.map +0 -1
  648. package/dist/esm/nano-table-d15f6782.js.map +0 -1
  649. package/dist/esm/page-dots-986d3b32.js.map +0 -1
  650. package/dist/esm/table.worker-b7ee4edc.js.map +0 -1
  651. package/dist/nano-components/app-globals-d4ab01f2.js +0 -5
  652. package/dist/nano-components/app-globals-d4ab01f2.js.map +0 -1
  653. package/dist/nano-components/fade-4ff5d9de.js +0 -5
  654. package/dist/nano-components/form-control-812999d0.js +0 -5
  655. package/dist/nano-components/form-control-812999d0.js.map +0 -1
  656. package/dist/nano-components/fullscreen-382d7890.js +0 -5
  657. package/dist/nano-components/index-3118109b.js.map +0 -1
  658. package/dist/nano-components/lazyload-49b745e4.js +0 -5
  659. package/dist/nano-components/nano-slides-c3eb1afe.js.map +0 -1
  660. package/dist/nano-components/nano-table-d15f6782.js +0 -5
  661. package/dist/nano-components/nano-table-d15f6782.js.map +0 -1
  662. package/dist/nano-components/page-dots-986d3b32.js +0 -5
  663. package/dist/nano-components/table.worker-b7ee4edc.js +0 -5
  664. /package/dist/nano-components/{algolia-data-8fc24341.js.map → algolia-data-f0f72f1d.js.map} +0 -0
  665. /package/dist/nano-components/{component-store-b798181b.js.map → component-store-199a9fd8.js.map} +0 -0
  666. /package/dist/nano-components/{dom-d7f9f24c.js.map → dom-fafdec9a.js.map} +0 -0
  667. /package/dist/nano-components/{index-d7a4a150.js.map → index-f5f7b950.js.map} +0 -0
  668. /package/dist/nano-components/{scroll-f373a189.js.map → scroll-1afc6a4e.js.map} +0 -0
  669. /package/dist/nano-components/{table.worker-b7ee4edc.js.map → table.worker-1bc9c170.js.map} +0 -0
  670. /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/generators/custom-element-doc-generator.d.ts +0 -0
  671. /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/generators/vue/generate-vue-component.d.ts +0 -0
  672. /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/generators/vue/index.d.ts +0 -0
  673. /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/generators/vue/output-vue.d.ts +0 -0
  674. /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/generators/vue/plugin.d.ts +0 -0
  675. /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/generators/vue/types.d.ts +0 -0
  676. /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/generators/vue/utils.d.ts +0 -0
  677. /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/stencil.config.d.ts +0 -0
  678. /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/stencil.config.prod.d.ts +0 -0
  679. /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/testing/mocks/intersection-observer.d.ts +0 -0
  680. /package/dist/types/builds/{6SyqsxUA → Te2fj7s-}/0/Digital/nano-components/packages/components/.stencil/wdio.conf.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"names":["async","clientFetch","url","body","customConfig","headers","Accept","Cache","config","method","credentials","keepalive","mode","JSON","stringify","id","setTimeout","window","AbortController","controller","timeout","abort","signal","response","fetch","clearTimeout","ok","json","errorMessage","text","Error","globalNavCss","NanoGlobalNavStyle0","THRESHOLDBREAKS","about","main","login","search","icon","THRESHOLDLIMIT","Object","keys","length","GlobalNav","debounceResize","debounceSetResizingState","currSize","menuDiv","menuBtn","menuWrapDiv","menuContentDiv","menuSelectedItems","searchBarEl","searchInput","algoliaClient","currentIndex","autocompleteResults","autocompleteEles","currAIndex","algoliaSearchResults","scopeSearch","mainBarDiv","userLinkPanel","isLoggedIn","myAccData","aboutNavItms","siteNavItms","loggedInNavItms","constructor","hostRef","this","assessSlottedContent","debounce","bind","handleBarResize","userProfileUrl","hasLoggedinSlot","hasSiteSlot","hasPromotionSlot","aboutSlotLen","iconSlotLen","mainSlotLen","overflowSlotLen","searchSlotLen","thresholdReady","remoteDataReady","ready","isResizing","threshold","modalOpen","modalIsOpen","searchBarShown","scrollingUp","showAutocomplete","secondaryMenuOpen","userMenuOpen","menuFullScreen","searchLoading","searchValInternal","internalSearchIndeces","env","ssoDataUrl","myAccountData","handleMyAccountData","user","links","myAccountUser","processMyAccLinks","processMyAccData","ssoRedirect","encodeURIComponent","location","href","getMyAccountData","activeMyAccountSections","showSearch","showLogo","logoUrl","protocol","host","searchIndeces","searchAppId","searchApiKey","searchValue","searchIndex","cartCount","msgCount","cartUrl","msgUrl","nanoIsReady","nanoSearchResult","nanoSearchError","nanoSearchReset","submitSearch","onSearchSubmit","toggleOverflowMenu","openClose","undefined","menuOpen","menuClose","getMyAccData","import","e","console","error","currentSelectedIndex","foundIndex","find","index","name","changeInternalSearchVal","initAlgoliaClient","algoliasearch","addAlgoliaIndeces","searchInsight","init","then","setUser","uuid","addIndeces","forEach","alogliaIndex","initIndex","thresholdChange","newThreshold","oldThreshold","setResizingState","assessReady","emit","requestAnimationFrame","searchbarShow","setupAutocompleteBlur","el","shadowRoot","addEventListener","onAutocompleteBlur","removeEventListener","closeSearchBar","searchbarHide","slotChange","thresholdClasses","classes","i","push","state","onWindowResize","innerWidth","secondaryOpen","ev","detail","secondaryMenu","stopPropagation","target","querySelectorAll","classList","remove","style","minHeight","scrollHeight","secondaryClose","add","onMenuBtnKeyDown","key","onMenuBtnClick","preventDefault","display","focus","preventScroll","innerHeight","document","overflow","overflowX","onMenuHidden","activeElement","force","composedPath","some","contains","subMenuClose","closest","open","onUserBtnClick","onUserBtnKeyDown","onUserMenuBlur","relatedTarget","handleUserMenu","displayTransition","className","show","onSearchBtnClick","onSearchBarHidden","onSearchBarShown","widgetHeight","Math","floor","querySelector","height","toString","setFocus","autocompleteSnippet","hit","lookFor","_snippetResult","found","prop","matchLevel","title","substring","value","onSearchInput","isSearchValSet","type","doAlgoliaSearch","queries","map","toReturn","clickAnalytics","attributesToSnippet","indexName","query","facets","filters","hitsPerPage","Date","now","processSearchResults","results","result","selected","domain","domains","allGroup","replicas","onSearchChange","algoliaHits","res","showAutocompleteResults","activeIndex","meta","indexTitle","client","apiKey","appId","onSearchIndexChange","indexStr","selectedIndex","switchIndexSubmit","resetHitFocus","hits","setActiveElement","autocompleteEle","ele","setAttribute","onAutocompleteInteract","testIndex","click","readTask","descreaseThreshold","Promise","resolve","scrollWidth","parentElement","clientWidth","menuItems","barItems","Array","from","writeTask","item","componentWillLoad","ComponentStore","connectedCallback","componentDidLoad","disconnectedCallback","autocompleteList","content","currentScopeHits","scopeChangeSuggestions","scopeSuggestReducer","total","currentSuggestReducer","reduce","scopeSuggestions","h","class","role","ref","a","tabindex","innerHTML","onClick","sendClick","eventName","queryID","objectIDs","objectID","positions","button","onMouseDown","hidden","onKeyDown","searchWidget","onSubmit","label","hideLabel","showInlineError","onNanoChange","mask","slot","placeholder","input","onNanoInput","onNanoFocus","ariaLabel","render","isRtl","ownerDocument","dir","Host","join","resizing","div","part","includes","urls","onSlotchange","link","address","closeOnBlur","small_avatar_url","forgot_password","logout","btn","src","getAssetPath","alt","onTouchEnd","domainFor","origin","dm","multiResults","singleResult","match","indeces","api_key","app_id","cart","count","notifications","messages","area"],"sources":["src/utils/fetch.ts","src/components/global-nav/style/global-nav.scss?tag=nano-global-nav&encapsulation=shadow","src/components/global-nav/global-nav.tsx"],"sourcesContent":["interface FetchInputConfig {\n body?: { [prop: string]: string };\n headers?: { [prop: string]: string };\n [prop: string]: any;\n}\n\nexport async function clientFetch(\n url: string,\n { body, ...customConfig }: FetchInputConfig = {}\n) {\n const headers: { [prop: string]: string } = {\n Accept: 'application/json, text/plain, */*',\n 'Access-Control-Allow-Origin': '*',\n 'Content-Type': 'application/json',\n Cache: 'no-cache',\n };\n const config: RequestInit = {\n method: body ? 'POST' : 'GET',\n credentials: 'include',\n keepalive: true,\n mode: 'cors',\n ...customConfig,\n headers: {\n ...headers,\n ...customConfig.headers,\n },\n };\n if (body) {\n config.body = JSON.stringify(body);\n }\n\n let id = setTimeout(() => {}, 0);\n if (window.AbortController) {\n const controller = new AbortController();\n const { timeout = 500 } = customConfig;\n id = setTimeout(() => controller.abort(), timeout);\n config.signal = controller.signal;\n }\n\n const response = await fetch(url, config);\n clearTimeout(id);\n\n if (response.ok) {\n return await response.json();\n } else {\n const errorMessage = await response.text();\n return new Error(errorMessage);\n }\n}\n","@use 'sass:map';\n@use '../../../global/style/nano-theme/tokens';\n\n// local\n@use 'setup';\n@use 'bar';\n@use 'burger';\n@use 'search';\n@use 'user';\n\n:host {\n /**\n * @prop --bar-vertical-padding: Defaults to 21px;\n * @prop --bar-item-spacing: Defaults to 16px;\n * @prop --bar-background: Defaults to white;\n * @prop --bar-text-color: Defaults to #{map.get(tokens.$colors, black)};\n * @prop --bar-color-shade: Defaults to #d8d8d8;\n * @prop --bar-color-tint: Defaults to rgb(19 89 111);\n * @prop --bar-color-focus: Defaults to #007fa9;\n * @prop --bar-user-panel-bg: Defaults to #016d86;\n * @prop --bar-dropdown-bg: Defaults to #196c82;\n * @prop --bar-dropdown-text: Defaults to white;\n * @prop --bar-search-focus: Defaults to #007FA9;\n\n * @prop --menu-background: Defaults to #001a21;\n * @prop --menu-text-color: Defaults to white;\n * @prop --menu-user-profile-bg: Defaults to #001a21;\n * @prop --menu-user-panel-bg: Defaults to #193037;\n * @prop --menu-padding: Defaults to 12px;\n * @prop --menu-hint-color: Defaults to #33484d;\n * @prop --menu-title-text: Defaults to #{map.get(tokens.$colors, lightblue)};\n * @prop --menu-icon-color: Defaults to white;\n\n * @prop --login-button-bg: Defaults to #17bb75;\n * @prop --login-button-text: Defaults to white;\n */\n\n --bar-vertical-padding: 19px;\n --bar-item-spacing: 13px;\n --bar-background: white;\n --bar-text-color: #{map.get(tokens.$colors, black)};\n --bar-color-shade: #d8d8d8;\n --bar-color-tint: rgb(19 89 111);\n --bar-color-focus: #007fa9;\n --bar-user-panel-bg: #016d86;\n --bar-dropdown-bg: #196c82;\n --bar-dropdown-text: white;\n --bar-search-focus: #007FA9; \n --menu-background: #001a21;\n --menu-text-color: white;\n --menu-user-profile-bg: #001a21;\n --menu-user-panel-bg: #193037;\n --menu-padding: 12px;\n --menu-hint-color: #33484d;\n --menu-title-text: #{map.get(tokens.$colors, lightblue)};\n --menu-icon-color: white;\n --login-button-bg: #007fa9;\n --login-button-text: white;\n\n // not sure if this required any more.\n --padding: 12px;\n --padding-top: var(--padding);\n --padding-end: var(--padding);\n --padding-bottom: var(--padding);\n --padding-start: var(--padding);\n\n display: flex;\n flex-direction: column;\n position: relative;\n line-height: 1.5;\n block-size: 100%;\n font-size: 0.9375em;\n font-size: clamp(0.77rem, 1vw, 0.9rem);\n\n input,\n select,\n button {\n font-family: inherit;\n appearance: none;\n font-size: inherit;\n }\n\n a,\n button {\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n box-shadow: #{tokens.$control-focus-style};\n }\n }\n}\n","import {\n Component,\n h,\n Host,\n Element,\n State,\n Watch,\n Event,\n EventEmitter,\n Prop,\n Listen,\n Build,\n getAssetPath,\n readTask,\n writeTask,\n Method,\n VNode,\n ComponentInterface,\n} from '@stencil/core';\nimport algoliasearch from 'algoliasearch/dist/algoliasearch-lite.esm.browser';\nimport { clientFetch } from '../../utils/fetch';\nimport { ComponentStore } from '../../utils/store/component-store';\nimport { debounce } from '../../utils/throttle';\nimport { displayTransition } from '../../utils/transitions';\nimport searchInsight from '../../utils/search-insights';\n\nimport {\n AlgoliaMultiResult,\n AlgoliaMultiResults,\n AlgoliaResultHit,\n AlgoliaResults,\n AlgoliaSearchResultDetail,\n SearchIndex,\n} from '../algolia/algolia-interface';\nimport { NavItemEventDetail } from '../nav-item/nav-item-interface';\nimport { InputChangeEventDetail } from '../input/input-interface';\nimport { SelectChangeEventDetail } from '../select/select-interface';\nimport {\n AlgoliaNetworkError,\n MyAccountData,\n MyAccountLink,\n MyAccountUser,\n} from './global-nav-interface';\nimport type { MultipleQueriesQuery } from '@algolia/client-search';\nimport type { SearchClient as AlgoliaClient } from 'algoliasearch/lite';\n\n// the 'breakpoints' where different segments of content go into or out-of the burger / overflow menu\nconst THRESHOLDBREAKS = {\n about: 0,\n main: 1,\n login: 2,\n search: 3,\n icon: 4,\n};\nconst THRESHOLDLIMIT = Object.keys(THRESHOLDBREAKS).length;\n\n/**\n * Nanopore digital global navigation and search bar.\n * Incorporates MyAccount / SSO states (messages / cart / user name etc).\n * Incorporates Algolia search.\n *\n * @slot main - main nav items. Should be used with nano-nav-item's\n * @slot icon - nano-nav-item's displayed alongside icon links that come from MyAccount\n * @slot loggedin - nano-nav-item's to display when users are signed in, alongside links from from MyAccount (within the overflow menu panel).\n * @slot about - nano-nav-item's to display with about links that come from MyAccount\n * @slot site - nano-nav-item's to display with site links that come from MyAccount\n * @slot overflow - items to always display in the overflow menu\n * @slot search - when not using myaccount search OR show-search=\"false\" you can utilise the search slot\n * @slot promotion - a free area for any promotional content, displayed within the overflow menu panel\n * @slot logo - when show-logo=\"false\" you can utilise the logo slot\n * @slot - if using search functionality, place a `<nano-search-results />` element in the default slot\n *\n * @part burger - the overflow / burger ui element\n * @part burger-menu - the overflow / burger menu\n * @part burger-actions-bar - the top bar of the overflow / burger menu\n * @part burger-content - the main content area of the overflow / burger menu\n * @part bars - the main wrapper around the `main-bar` and `search-bar` nav bars\n * @part main-bar - the main nav menu bar\n * @part logo-link - the link wrapping the logo\n * @part search-bar - the search bar that appears under the main nav menu bar\n */\n@Component({\n tag: 'nano-global-nav',\n styleUrl: 'style/global-nav.scss',\n shadow: true,\n assetsDirs: ['assets'],\n})\nexport class GlobalNav implements ComponentInterface {\n // position and dimension state\n private debounceResize: () => any;\n private debounceSetResizingState: () => any;\n private currSize: number = 0;\n\n // menu\n private menuDiv: HTMLElement;\n private menuBtn: HTMLButtonElement;\n private menuWrapDiv: HTMLDivElement;\n private menuContentDiv: HTMLDivElement;\n private menuSelectedItems: NodeListOf<HTMLNanoNavItemElement>;\n\n // search\n private searchBarEl: HTMLDivElement;\n private searchInput: HTMLNanoInputElement;\n private algoliaClient: AlgoliaClient;\n private currentIndex: SearchIndex;\n private autocompleteResults: AlgoliaResults | null;\n private autocompleteEles: Array<HTMLAnchorElement | HTMLButtonElement> = [];\n private currAIndex: number = -1;\n private algoliaSearchResults: AlgoliaMultiResults | null;\n private scopeSearch: AlgoliaMultiResults | null;\n\n // general\n private mainBarDiv: HTMLElement;\n private userLinkPanel: HTMLDivElement;\n private isLoggedIn: boolean = false;\n private myAccData: MyAccountData = null;\n\n // myaccount links\n private aboutNavItms: MyAccountLink[] = [];\n private siteNavItms: MyAccountLink[] = [];\n private loggedInNavItms: MyAccountLink[] = [];\n\n constructor() {\n this.assessSlottedContent = debounce(\n this.assessSlottedContent.bind(this),\n 10\n );\n this.handleBarResize = debounce(this.handleBarResize.bind(this), 200);\n }\n\n // user profile link\n @State() userProfileUrl: string = '';\n\n // has slot tests\n @State() hasLoggedinSlot: boolean = false;\n @State() hasSiteSlot: boolean = false;\n @State() hasPromotionSlot: boolean = false;\n\n // slot item number tests\n @State() aboutSlotLen: number = 0;\n @State() iconSlotLen: number = 0;\n @State() mainSlotLen: number = 0;\n @State() overflowSlotLen: number = 0;\n @State() searchSlotLen: number = 0;\n\n // threshold / sizing\n @State() thresholdReady: boolean = false;\n @State() remoteDataReady: boolean = false;\n @State() ready: boolean = false;\n @State() isResizing: boolean = false;\n @State() threshold: number = THRESHOLDLIMIT;\n\n // modals state\n @State() modalOpen: boolean = false;\n @State() modalIsOpen: boolean = false;\n @State() searchBarShown: boolean = false;\n @State() scrollingUp: boolean = true;\n @State() showAutocomplete: boolean = false;\n @State() secondaryMenuOpen: HTMLNanoNavItemElement = null;\n @State() userMenuOpen: boolean = false;\n @State() menuFullScreen: boolean = false;\n\n // search\n @State() searchLoading: boolean = false;\n @State() searchValInternal: string = '';\n @State() internalSearchIndeces: Array<SearchIndex> = [];\n\n @Element() private el: HTMLNanoGlobalNavElement;\n\n /**\n * Connect to local, dev, test or prod MyAccount\n * environments to retrieve global nav / sso data.\n * Alternatively, you can use the `ssoDataUrl` prop.\n */\n @Prop() env?: 'local' | 'dev' | 'test' | 'prod' = 'prod';\n\n /**\n * A base url to retrieve global nav / sso data.\n * `nav_bar_data.json` will be appended to this url.\n * An alternative to the pre-defined `env` urls\n */\n @Prop() ssoDataUrl?: string;\n\n /**\n * An alternative to both 'env' and 'ssoDataUrl'.\n * You can directly provide a JSON object of myaccount data.\n * (e.g. https://myaccount.nanoporetech.com/nav_bar_data.json)\n * This is useful for SSR\n */\n @Prop() myAccountData: MyAccountData | null;\n @Watch('myAccountData')\n handleMyAccountData() {\n if (!this.myAccountData) return;\n\n if (!this.myAccountData.user || !this.myAccountData.links) return;\n\n this.myAccData = this.myAccountData;\n if (this.myAccData.user.id) {\n this.isLoggedIn = true;\n this.myAccountUser = this.myAccData.user;\n }\n\n this.processMyAccLinks();\n this.processMyAccData();\n this.remoteDataReady = true;\n }\n\n /**\n * Where to take user after SSO login\n */\n @Prop() ssoRedirect: string = encodeURIComponent(window.location.href);\n\n /**\n * Whether to attempt to get global nav / sso data from MyAccount\n */\n @Prop() getMyAccountData: boolean = true;\n\n /**\n * Active MyAccount link sections. By default all will show.\n */\n @Prop() activeMyAccountSections: (\n | 'about'\n | 'loggedin'\n | 'sites'\n | 'icons'\n )[] = null;\n\n /**\n * Whether to show search functionality\n */\n @Prop() showSearch: boolean = true;\n\n /**\n * Whether to show Nanopore logo\n */\n @Prop() showLogo: boolean = true;\n\n /**\n * The link to put on the logo\n */\n @Prop() logoUrl: string = location.protocol + '//' + location.host;\n\n /**\n * An array of Algolia search indexes (and optional display names). Will be automatically populated from MyAccount\n */\n @Prop() searchIndeces: Array<SearchIndex> = [];\n\n /**\n * Logged in user details automatically populated from MyAccount\n */\n @Prop({ mutable: true }) myAccountUser: MyAccountUser = null;\n\n /**\n * An Algolia App ID key. Will be automatically populated from MyAccount\n */\n @Prop({ mutable: true }) searchAppId: string;\n\n /**\n * An Algolia API Key. Will be automatically populated from MyAccount\n */\n @Prop({ mutable: true }) searchApiKey: string;\n\n /**\n * A search value to passed to Algolia to programmatically get or to preload search results\n */\n @Prop({ mutable: true }) searchValue: string = '';\n\n /**\n * Algolia search index to programmatically set or to set an initial index\n */\n @Prop({ mutable: true }) searchIndex: string = 'All';\n\n /**\n * MyAccount store cart count.\n */\n @Prop({ mutable: true }) cartCount: number = 0;\n\n /**\n * MyAccount un-read message count.\n */\n @Prop({ mutable: true }) msgCount: number = 0;\n\n /**\n * Url to the Nanopore store cart. Will default to the url supplied by MyAccount\n */\n @Prop({ mutable: true }) cartUrl: string = null;\n\n /**\n * Url to the Nanopore message center. Will default to the url supplied by MyAccount\n */\n @Prop({ mutable: true }) msgUrl: string = null;\n\n /**\n * Emitted when the global nav is ready.\n */\n @Event() nanoIsReady!: EventEmitter<void>;\n\n /**\n * Emitted when search results are successfully returned from Algolia.\n */\n @Event() nanoSearchResult!: EventEmitter<AlgoliaSearchResultDetail>;\n\n /**\n * Emitted when algolia returns an error.\n */\n @Event() nanoSearchError!: EventEmitter<AlgoliaNetworkError>;\n\n /**\n * Emitted when search field is cleared.\n */\n @Event() nanoSearchReset!: EventEmitter<AlgoliaSearchResultDetail>;\n\n /**\n * Submit the search form (a search value must be present)\n */\n @Method()\n async submitSearch() {\n this.onSearchSubmit();\n this.showAutocomplete = false;\n return;\n }\n\n /**\n * Manually open or close the overflow (burger) menu\n * @param openClose - optionally force open (true) or close (false)\n */\n @Method()\n async toggleOverflowMenu(openClose?: boolean) {\n if (openClose === true || (openClose === undefined && !this.modalIsOpen)) {\n this.menuOpen();\n } else {\n this.menuClose(null, true);\n }\n }\n\n @Watch('env')\n @Watch('ssoDataUrl')\n async getMyAccData() {\n if (this.myAccData) return;\n\n switch (this.env) {\n case 'prod':\n this.userProfileUrl = 'https://myaccount.nanoporetech.com/';\n break;\n case 'local':\n case 'dev':\n case 'test':\n default:\n this.userProfileUrl = 'https://myaccount.nanoporetech.com/';\n break;\n }\n\n if (!this.getMyAccountData || this.myAccData) {\n this.remoteDataReady = true;\n return;\n }\n\n let url = this.ssoDataUrl;\n\n if (!url) {\n switch (this.env) {\n case 'dev':\n url = 'https://myaccount-dev.nanoporetech.com/';\n break;\n case 'test':\n url = 'https://myaccount-test.nanoporetech.com/';\n break;\n default:\n url = 'https://myaccount.nanoporetech.com/';\n break;\n }\n }\n\n const config = { timeout: 5000 };\n\n try {\n if (this.env === 'local') {\n this.myAccData = (await import(\n `./assets/local-my-account.json`\n )) as unknown as MyAccountData;\n } else {\n this.myAccData = await clientFetch(url + 'nav_bar_data.json', config);\n }\n if (this.myAccData.user.id) {\n this.isLoggedIn = true;\n this.myAccountUser = this.myAccData.user;\n }\n this.processMyAccLinks();\n this.processMyAccData();\n setTimeout(() => (this.remoteDataReady = true), 300);\n } catch (e) {\n console.error(e);\n this.remoteDataReady = true;\n }\n }\n\n @Watch('searchIndex')\n currentSelectedIndex() {\n if (!this.internalSearchIndeces.length) {\n return;\n }\n if (!this.searchIndex) return this.internalSearchIndeces[0];\n\n const foundIndex = this.internalSearchIndeces.find(\n (index) => index.name === this.searchIndex\n );\n\n if (!foundIndex) {\n this.currentIndex = this.internalSearchIndeces[0];\n console.error('index not found');\n return;\n }\n\n this.currentIndex = foundIndex;\n return foundIndex;\n }\n\n @Watch('searchValInternal')\n changeInternalSearchVal() {\n if (this.searchValInternal !== this.searchValue)\n this.searchValue = this.searchValInternal;\n }\n\n @Watch('searchApiKey')\n @Watch('searchAppId')\n initAlgoliaClient() {\n if (!this.searchAppId || !this.searchApiKey) return;\n\n this.algoliaClient = algoliasearch(this.searchAppId, this.searchApiKey);\n this.addAlgoliaIndeces();\n\n // setup algolia analytics\n searchInsight.init(this.searchAppId, this.searchApiKey).then(() => {\n if (this.myAccountUser) searchInsight.setUser(this.myAccountUser.uuid);\n });\n }\n\n /** Public facing set of Algolia indices. Add to any indices we may already have (e.g. from MyAccount) */\n @Watch('searchIndeces')\n addIndeces() {\n this.internalSearchIndeces = [\n ...this.internalSearchIndeces,\n ...this.searchIndeces,\n ];\n }\n\n /** Internal set of of Algolia indices. Includes public & private (e.g. from MyAccount) */\n @Watch('internalSearchIndeces')\n addAlgoliaIndeces() {\n if (!this.algoliaClient || !this.internalSearchIndeces.length) return;\n\n this.internalSearchIndeces.forEach((searchIndex) => {\n searchIndex.alogliaIndex = this.algoliaClient.initIndex(\n searchIndex.index\n );\n });\n if (!this.searchIndex) {\n this.searchIndex = this.internalSearchIndeces[0].name;\n }\n }\n\n /** Current content breakpoint. If it goes up, things can look wonky for a second so we temporarily hide stuff */\n @Watch('threshold')\n thresholdChange(newThreshold: number, oldThreshold: number) {\n if (newThreshold > oldThreshold) {\n // we've resized to larger screen.\n this.setResizingState(true);\n }\n }\n\n /* Check if data and item placement is ready */\n @Watch('thresholdReady')\n @Watch('remoteDataReady')\n assessReady() {\n if (this.thresholdReady && this.remoteDataReady) {\n this.ready = true;\n this.nanoIsReady.emit();\n\n if (this.searchValue) requestAnimationFrame(() => this.searchbarShow());\n }\n }\n\n /**\n * Add / remove events when autocomplete results show / hide.\n */\n @Watch('showAutocomplete')\n setupAutocompleteBlur() {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.searchInput.clientWidth; // force reflow\n if (this.showAutocomplete) {\n this.el.shadowRoot.addEventListener('click', this.onAutocompleteBlur);\n } else {\n this.el.shadowRoot.removeEventListener('click', this.onAutocompleteBlur);\n }\n }\n\n @Watch('secondaryMenuOpen')\n closeSearchBar() {\n if (!!this.secondaryMenuOpen && this.searchBarShown) this.searchbarHide();\n }\n\n /** As relevant slotted items change, reset resizing breakpoints */\n @Watch('aboutSlotLen')\n @Watch('iconSlotLen')\n @Watch('mainSlotLen')\n @Watch('overflowSlotLen')\n @Watch('searchSlotLen')\n slotChange() {\n this.threshold = THRESHOLDLIMIT;\n }\n\n // General classes for visuals\n\n private thresholdClasses() {\n const classes = [];\n let i = 0;\n for (i; i < this.threshold; i++) classes.push('threshold-' + (i + 1));\n return classes;\n }\n\n /**\n * provides 'isResizing' - we use this to fade content out on 'breakpoint' increase\n * (when the screen size increases). Otherwise the stepping through of\n * breakpoints to calculate if content currently fits shows on screen (looks ugly)\n */\n private setResizingState = (state: boolean = false) => {\n if (typeof this.debounceSetResizingState === 'undefined') {\n this.debounceSetResizingState = debounce(this.setResizingState, 600);\n }\n if (state) {\n this.isResizing = true;\n this.debounceSetResizingState();\n } else {\n this.isResizing = false;\n }\n };\n\n // Global DOM Events\n\n /**\n * 1) Reset threshold (item fit breakpoint) when screen is bigger than before.\n * 2) Assess the all threshold / breakpoints to see if content fits\n * 3) Hide search bar whenever we resize\n */\n private onWindowResize() {\n if (this.threshold < THRESHOLDLIMIT && window.innerWidth > this.currSize) {\n this.threshold = THRESHOLDLIMIT;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.mainBarDiv.clientWidth; // force reflow\n }\n this.currSize = window.innerWidth;\n this.searchbarHide();\n this.handleBarResize();\n }\n\n // Burger / Overflow Menu\n\n /* listen to nav-item secondary open / close events primarily for resizing the menu */\n @Listen('nanoOpen')\n secondaryOpen(ev: CustomEvent & { target: HTMLNanoNavItemElement }) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n this.secondaryMenuOpen = ev.target;\n\n if (!this.menuSelectedItems) {\n this.menuSelectedItems = this.el.querySelectorAll(\n 'nano-nav-item[selected]'\n );\n this.menuSelectedItems.forEach((i) => i.classList.remove('selected'));\n }\n\n this.menuContentDiv.style.minHeight =\n (ev.detail as NavItemEventDetail).secondaryMenu.scrollHeight + 'px';\n }\n\n @Listen('nanoClose')\n secondaryClose(ev: CustomEvent & { target: HTMLNanoNavItemElement }) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n\n if (this.secondaryMenuOpen === ev.target && this.menuSelectedItems) {\n this.secondaryMenuOpen = null;\n this.menuContentDiv.style.minHeight = '';\n this.menuSelectedItems = null;\n this.el\n .querySelectorAll('nano-nav-item[selected]')\n .forEach((i) => i.classList.add('selected'));\n }\n }\n\n private onMenuBtnKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n if (this.modalOpen) this.menuClose(ev, true);\n else this.menuOpen();\n break;\n }\n };\n\n private onMenuBtnClick = (ev: MouseEvent) => {\n this.menuClose(ev, true);\n };\n\n private menuOpen = (e?: MouseEvent) => {\n if (e) e.preventDefault();\n\n this.menuDiv.style.display = 'block';\n // need to open menu in stages\n // wait for re-flow after changing display\n // wait for repaint after animate, then focus\n\n this.modalOpen = true;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.menuDiv.clientWidth; // force reflow\n\n this.menuWrapDiv.focus({ preventScroll: true });\n if (\n this.threshold < 2 ||\n this.menuWrapDiv.scrollHeight > window.innerHeight\n ) {\n document.body.style.overflow = 'hidden';\n this.menuFullScreen = true;\n } else document.body.style.overflowX = 'hidden';\n\n setTimeout(() => (this.modalIsOpen = true), 300);\n };\n\n private onMenuHidden = () => {\n this.menuDiv.removeEventListener('transitionend', this.onMenuHidden);\n\n document.body.style.overflow = '';\n this.menuDiv.style.display = 'none';\n this.modalIsOpen = false;\n this.menuFullScreen = false;\n\n setTimeout(() => {\n if (document.activeElement === document.body && this.menuBtn)\n this.mainBarDiv.focus({ preventScroll: true });\n }, 50);\n };\n\n @Listen('click', { target: 'body' })\n menuClose(\n ev?: FocusEvent | MouseEvent | KeyboardEvent | TouchEvent,\n force: boolean = false\n ) {\n if (!this.modalIsOpen) return;\n\n if (force) {\n this.modalOpen = false;\n this.menuDiv.addEventListener('transitionend', this.onMenuHidden);\n return;\n }\n\n if (\n !ev\n .composedPath()\n .some(\n (el) =>\n el === this.menuContentDiv ||\n (el as Element).classList?.contains('gn-menu_actions')\n )\n ) {\n requestAnimationFrame(() => {\n if (this.secondaryMenuOpen) return;\n\n this.modalOpen = false;\n this.menuDiv.addEventListener('transitionend', this.onMenuHidden);\n });\n }\n }\n\n private subMenuClose = (ev?: MouseEvent) => {\n ev.preventDefault();\n (ev.target as HTMLNanoNavItemElement).closest('nano-nav-item').open = false;\n };\n\n // User profile menu\n\n private onUserBtnClick = (ev: MouseEvent) => {\n ev.preventDefault();\n this.userMenuOpen = !this.userMenuOpen;\n };\n\n private onUserBtnKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.userMenuOpen = !this.userMenuOpen;\n break;\n }\n };\n\n private onUserMenuBlur = (ev: FocusEvent) => {\n if (!ev.relatedTarget) {\n this.userMenuOpen = false;\n return;\n }\n if ((ev.relatedTarget as HTMLElement).closest('.user-links-panel'))\n return false;\n this.userMenuOpen = false;\n };\n\n @Watch('userMenuOpen')\n async handleUserMenu() {\n await displayTransition(this.userLinkPanel, {\n className: 'show',\n show: this.userMenuOpen,\n });\n if (this.userMenuOpen) {\n this.userLinkPanel.focus();\n this.userLinkPanel.addEventListener('focusout', this.onUserMenuBlur);\n } else {\n this.userLinkPanel.removeEventListener('focusout', this.onUserMenuBlur);\n this.el.focus();\n }\n }\n\n // Search bar open / closed\n\n private onSearchBtnClick = (ev: MouseEvent) => {\n ev.preventDefault();\n if (this.searchBarShown) this.searchbarHide();\n else this.searchbarShow();\n };\n\n private async searchbarShow() {\n if (!this.searchBarEl) return;\n this.searchBarShown = true;\n\n this.searchBarEl.removeEventListener(\n 'transitionend',\n this.onSearchBarHidden\n );\n this.searchBarEl.addEventListener('transitionend', this.onSearchBarShown);\n this.searchBarEl.style.display = 'block';\n\n requestAnimationFrame(() => {\n const widgetHeight =\n Math.floor(\n this.searchBarEl.querySelector('.search-widget').scrollHeight\n ) - 1;\n this.searchBarEl.style.height = widgetHeight.toString() + 'px';\n });\n }\n\n private onSearchBarShown = () => {\n this.searchBarEl.removeEventListener(\n 'transitionend',\n this.onSearchBarShown\n );\n if (this.searchInput) this.searchInput.setFocus();\n this.searchBarEl.style.overflow = 'visible';\n };\n\n private searchbarHide = (ev?: FocusEvent) => {\n if (\n ev &&\n ev.relatedTarget &&\n (ev.relatedTarget as HTMLElement).closest('#global-nav-search-bar')\n ) {\n return;\n }\n this.showAutocomplete = this.searchBarShown = false;\n if (this.searchValInternal.length && ev) return;\n\n if (!this.searchBarEl) return;\n this.searchBarEl.addEventListener('transitionend', this.onSearchBarHidden);\n this.searchBarEl.style.overflow = 'hidden';\n this.searchBarEl.style.height = '0px';\n };\n\n private onSearchBarHidden = () => {\n this.searchBarEl.style.display = 'none';\n };\n\n // Algolia search\n\n private autocompleteSnippet(hit: AlgoliaResultHit) {\n const lookFor = ['title']; // , 'body'\n if (hit._snippetResult) {\n const found = lookFor.find(\n (prop) =>\n hit._snippetResult[prop] &&\n hit._snippetResult[prop].matchLevel !== 'none'\n );\n\n if (found) {\n if (found !== 'title')\n return (\n (hit.title.length > 15\n ? hit.title.substring(0, 15) + ' ...'\n : hit.title) +\n ' ' +\n hit._snippetResult[found].value\n );\n else return hit._snippetResult['title'].value;\n }\n }\n return hit.title;\n }\n\n private onSearchInput = (ev: CustomEvent<InputEvent>) => {\n this.searchValInternal = this.searchInput.value;\n\n if (!this.isSearchValSet()) {\n this.searchLoading = false;\n return;\n }\n\n if (ev.detail.type === 'input') {\n this.showAutocomplete = false;\n this.searchLoading = true;\n }\n };\n\n /**\n * Constructs a multi-search query for all set search indices\n * (which are normally controlled via the myAccount payload) then sends to Algolia.\n * Post-processes results, adding correct domains to url fields.\n * @returns formatted algolia results\n */\n private async doAlgoliaSearch() {\n this.algoliaSearchResults = null;\n\n const queries: MultipleQueriesQuery[] = this.internalSearchIndeces.map(\n (index) => {\n const toReturn = {\n clickAnalytics: true,\n attributesToSnippet: ['body:5', 'title:8'],\n indexName: index.index,\n query: this.searchValInternal,\n facets: index.filters,\n hitsPerPage: 5,\n filters: '',\n };\n if (index.name === 'Community') {\n toReturn.filters =\n 'created > ' + Math.floor((Date.now() - 63115200000) / 1000); // only get last 2 years\n }\n return toReturn;\n }\n );\n\n try {\n this.algoliaSearchResults = this.processSearchResults(\n (await this.algoliaClient.search(queries)) as any\n ) as AlgoliaMultiResults;\n } catch (e) {\n this.nanoSearchError.emit(e as AlgoliaNetworkError);\n }\n this.searchLoading = false;\n if (!this.algoliaSearchResults) return;\n\n this.algoliaSearchResults.results.map((result, i) => {\n result.indexName = this.internalSearchIndeces[i].name;\n result.selected =\n this.currentIndex.name === this.internalSearchIndeces[i].name;\n result.domain = this.currentIndex.domain || null;\n result.domains = this.myAccData.domains || null;\n result.allGroup = !!this.internalSearchIndeces[i].allGroup;\n result.filters = this.internalSearchIndeces[i].filters;\n result.replicas = this.currentIndex.replicas;\n });\n\n return this.algoliaSearchResults;\n }\n\n /**\n * Called whenever the search input value changes.\n * Performs Algolia search and shows autocomplete results.\n * @param ev optional input change event\n */\n private onSearchChange = async (ev?: CustomEvent<InputChangeEventDetail>) => {\n this.searchValInternal = this.searchValue = ev\n ? ev.detail.value\n : this.searchValInternal;\n this.showAutocomplete = false;\n this.autocompleteResults = null;\n\n if (!this.isSearchValSet()) {\n if (!this.searchValInternal.length) {\n this.nanoSearchReset.emit();\n }\n this.searchLoading = false;\n return;\n }\n if (!this.currentIndex) this.currentSelectedIndex();\n\n // start search\n this.searchLoading = true;\n const algoliaHits = await this.doAlgoliaSearch();\n\n this.scopeSearch = null;\n this.scopeSearch = algoliaHits;\n\n // set / show autocomplete results\n this.autocompleteResults = algoliaHits.results.find((res) => res.selected);\n this.showAutocompleteResults();\n\n this.searchLoading = false;\n };\n\n /**\n * Called whenever the search form is submitted (but can also be called manually).\n * Fires event which will activate / display `nano-global-search-results`\n *\n * @param ev optional form submit event\n * @returns Algolia search results\n */\n private onSearchSubmit = async (ev?) => {\n if (ev) ev.preventDefault();\n if (!this.isSearchValSet()) return;\n\n if (!this.currentIndex) this.currentSelectedIndex();\n if (!this.algoliaSearchResults) await this.doAlgoliaSearch();\n\n const activeIndex = this.algoliaSearchResults.results.find(\n (res) => res.selected\n );\n const { index, domain, filters, query, replicas } = activeIndex;\n\n this.nanoSearchResult.emit({\n meta: {\n indexTitle: activeIndex.indexName,\n index,\n domain,\n filters,\n query,\n replicas,\n },\n client: { apiKey: this.searchApiKey, appId: this.searchAppId },\n });\n this.showAutocomplete = false;\n return this.algoliaSearchResults;\n };\n\n private onSearchIndexChange = async (\n index: CustomEvent<SelectChangeEventDetail> | string\n ) => {\n const ev = index as CustomEvent<SelectChangeEventDetail>;\n let indexStr = index as string;\n\n if (!this.currentIndex) this.currentSelectedIndex();\n\n if (ev.detail && ev.detail.value.length)\n indexStr = ev.detail.value as string;\n if (!indexStr || !indexStr.length) return;\n if (this.currentIndex.index === indexStr) return;\n\n const selectedIndex = this.internalSearchIndeces.find(\n (index) => index.index === indexStr\n );\n if (!selectedIndex || !selectedIndex.alogliaIndex) return;\n\n this.searchIndex = selectedIndex.name;\n if (this.isSearchValSet()) await this.onSearchChange();\n };\n\n private isSearchValSet() {\n if (this.searchValInternal.length < 3) return false;\n return true;\n }\n\n private switchIndexSubmit = async (index: string) => {\n if (this.isSearchValSet()) {\n await this.onSearchIndexChange(index);\n this.onSearchSubmit();\n } else this.onSearchIndexChange(index);\n };\n\n // Autocomplete\n\n @Watch('showAutocomplete')\n resetHitFocus() {\n this.currAIndex = -1;\n }\n\n private onAutocompleteBlur = (ev: MouseEvent) => {\n if (!this.showAutocomplete || !this.autocompleteResults) return;\n if (ev && ev.target && (ev.target as HTMLElement).closest('.search-widget'))\n return;\n this.showAutocomplete = false;\n };\n\n private showAutocompleteResults = () => {\n if (!this.autocompleteResults || !this.autocompleteResults.hits) return;\n this.showAutocomplete = true;\n };\n\n private setActiveElement(\n autocompleteEle: HTMLAnchorElement | HTMLButtonElement\n ) {\n this.autocompleteEles.map((ele) =>\n ele.setAttribute('aria-selected', 'false')\n );\n autocompleteEle.focus({ preventScroll: true });\n autocompleteEle.setAttribute('aria-selected', 'true');\n }\n\n private onAutocompleteInteract = (ev: KeyboardEvent) => {\n // list open, navigate items with arrows\n if (!this.showAutocomplete || !this.autocompleteResults) return;\n let testIndex = this.currAIndex;\n\n switch (ev.key) {\n case 'Tab':\n setTimeout(() => {\n if (\n !this.el.shadowRoot.activeElement ||\n !this.el.shadowRoot.activeElement.closest('.search-widget')\n ) {\n this.showAutocomplete = false;\n return;\n } else {\n const found = this.autocompleteEles.find((ele, i) => {\n if (ele === this.el.shadowRoot.activeElement) {\n this.currAIndex = i;\n return true;\n }\n });\n if (found) this.setActiveElement(found);\n else this.currAIndex = -1;\n }\n });\n break;\n case 'ArrowDown':\n case 'ArrowUp': {\n if (ev.key === 'ArrowDown') testIndex++;\n else if (ev.key === 'ArrowUp') testIndex--;\n\n const found = this.autocompleteEles[testIndex];\n if (\n found ||\n testIndex < 0 ||\n testIndex > this.autocompleteEles.length - 1\n ) {\n ev.preventDefault();\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.searchInput.clientWidth; // force reflow\n\n if (found) {\n this.setActiveElement(found);\n this.currAIndex = testIndex;\n } else if (testIndex < 0) {\n this.searchInput.setFocus();\n this.currAIndex = -1;\n }\n break;\n }\n case 'Enter':\n case ' ':\n if (this.autocompleteEles[this.currAIndex]) {\n this.autocompleteEles[this.currAIndex].click();\n }\n break;\n }\n };\n\n // Various.\n\n /**\n * Assesses what content is present in which slots\n */\n private assessSlottedContent = () => {\n readTask(() => {\n this.hasSiteSlot = !!this.el.querySelectorAll('[slot=\"site\"]').length;\n this.hasLoggedinSlot =\n !!this.el.querySelectorAll('[slot=\"loggedin\"]').length;\n this.hasPromotionSlot =\n !!this.el.querySelectorAll('[slot=\"promotion\"]').length;\n\n this.aboutSlotLen = this.el.querySelectorAll('[slot=\"about\"]').length;\n this.iconSlotLen = this.el.querySelectorAll('[slot=\"icon\"]').length;\n this.mainSlotLen = this.el.querySelectorAll('[slot=\"main\"]').length;\n this.overflowSlotLen =\n this.el.querySelectorAll('[slot=\"overflow\"]').length;\n this.searchSlotLen = this.el.querySelectorAll('[slot=\"search\"]').length;\n });\n };\n\n private async handleBarResize() {\n const descreaseThreshold = () => {\n return new Promise<void>((resolve) => {\n this.threshold--;\n\n setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.mainBarDiv.clientWidth; // force reflow\n resolve();\n }, 200);\n });\n };\n\n // Decrease the threshold until content fits\n while (this.threshold > 0) {\n if (\n this.mainBarDiv.scrollWidth <= this.mainBarDiv.parentElement.clientWidth\n )\n break;\n await descreaseThreshold();\n }\n\n /* content now fits so add / remove context classes\n on nav-items depending on whether they're added to bar or burger. */\n\n this.thresholdReady = true;\n\n let menuItems: Array<Element>, barItems: Array<Element>;\n readTask(() => {\n menuItems = [\n ...Array.from(this.el.querySelectorAll('nano-nav-item[slot=\"site\"]')),\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"overflow\"]')\n ),\n ];\n barItems = [];\n\n if (this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.icon)\n menuItems.push(\n ...Array.from(this.el.querySelectorAll('nano-nav-item[slot=\"icon\"]'))\n );\n else\n barItems.push(\n ...Array.from(this.el.querySelectorAll('nano-nav-item[slot=\"icon\"]'))\n );\n\n if (this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.login)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"loggedin\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"loggedin\"]')\n )\n );\n\n if (this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.main)\n menuItems.push(\n ...Array.from(this.el.querySelectorAll('nano-nav-item[slot=\"main\"]'))\n );\n else\n barItems.push(\n ...Array.from(this.el.querySelectorAll('nano-nav-item[slot=\"main\"]'))\n );\n\n if (this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.about)\n menuItems.push(\n ...Array.from(this.el.querySelectorAll('nano-nav-item[slot=\"about\"]'))\n );\n else\n barItems.push(\n ...Array.from(this.el.querySelectorAll('nano-nav-item[slot=\"about\"]'))\n );\n });\n\n writeTask(() => {\n menuItems.forEach((item) => {\n item.classList.add('nano-global-nav-menu');\n item.classList.remove('nano-global-nav-bar');\n });\n barItems.forEach((item) => {\n item.classList.remove('nano-global-nav-menu');\n item.classList.add('nano-global-nav-bar');\n });\n });\n }\n\n // Stencil Lifecycle / Rendering\n\n componentWillLoad() {\n ComponentStore.init(\n this,\n ['searchIndex', 'searchValue'],\n 'url-hash',\n 'gns'\n );\n\n this.assessSlottedContent();\n }\n\n connectedCallback() {\n this.handleMyAccountData();\n this.getMyAccData();\n }\n\n componentDidLoad() {\n if (Build.isBrowser) {\n this.debounceResize = debounce(this.onWindowResize.bind(this), 200);\n window.addEventListener('resize', this.debounceResize);\n this.currSize = window.innerWidth;\n }\n\n this.initAlgoliaClient();\n this.addAlgoliaIndeces();\n requestAnimationFrame(() => this.handleBarResize());\n }\n\n disconnectedCallback() {\n if (Build.isBrowser)\n window.removeEventListener('resize', this.debounceResize);\n }\n\n // Render output\n\n private autocompleteList(): VNode {\n let content;\n if (this.showAutocomplete && this.scrollingUp) {\n let currentScopeHits = 0;\n let scopeChangeSuggestions = 0;\n\n const scopeSuggestReducer = (\n total: number,\n result: AlgoliaMultiResult\n ) => {\n return result.index !== this.currentIndex.index\n ? total + result.hits.length\n : total;\n };\n const currentSuggestReducer = (\n total: number,\n result: AlgoliaMultiResult\n ) => {\n return result.index === this.currentIndex.index\n ? total + result.hits.length\n : total;\n };\n\n if (this.scopeSearch) {\n scopeChangeSuggestions = this.scopeSearch.results.reduce(\n scopeSuggestReducer,\n 0\n );\n currentScopeHits = this.scopeSearch.results.reduce(\n currentSuggestReducer,\n 0\n );\n }\n\n if (\n (this.autocompleteResults && this.autocompleteResults.hits.length) ||\n (scopeChangeSuggestions && !currentScopeHits)\n ) {\n let scopeSuggestions = 0;\n\n content = (\n <div>\n {!currentScopeHits && (\n <div class=\"search-autocomplete-hit search-autocomplete-hit--no-result\">\n No results matching '{this.searchValInternal}' were found in{' '}\n <strong>{this.currentIndex.name}</strong>. Try another phrase.\n </div>\n )}\n {this.autocompleteResults && [\n this.autocompleteResults.hits.map((hit, i) => {\n return (\n <a\n role=\"option\"\n ref={(a) => this.autocompleteEles.push(a)}\n tabindex=\"-1\"\n id={'autocomplete-hit-' + i}\n href={hit.url}\n class=\"search-autocomplete-hit\"\n innerHTML={this.autocompleteSnippet(hit)}\n onClick={() => {\n searchInsight.sendClick({\n index: this.currentIndex.index,\n eventName:\n 'Global nav quick search - search result clicked',\n queryID: this.autocompleteResults.queryID,\n objectIDs: [hit.objectID],\n positions: [i + 1],\n });\n }}\n ></a>\n );\n }),\n ]}\n {(!currentScopeHits || this.currentIndex.allGroup) &&\n this.scopeSearch &&\n this.scopeSearch.results && [\n this.scopeSearch.results.map((result, i) => {\n if (\n !result.hits.length ||\n result.index === this.currentIndex.index ||\n scopeSuggestions > 1\n )\n return;\n scopeSuggestions++;\n return (\n <button\n role=\"option\"\n ref={(button) => this.autocompleteEles.push(button)}\n tabindex=\"-1\"\n id={'autocomplete-scope-' + i}\n class=\"search-autocomplete-hit\"\n onClick={() => this.switchIndexSubmit(result.index)}\n onMouseDown={() => this.switchIndexSubmit(result.index)}\n >\n \"{this.searchValInternal}\"{' '}\n <div class=\"search-autocomplete-hit-scope\">\n in {result.indexName}\n </div>\n </button>\n );\n }),\n ]}\n {!!currentScopeHits && (\n <div class=\"search-autocomplete-foot\">\n <button\n role=\"option\"\n class=\"search-autocomplete-submit\"\n ref={(button) => this.autocompleteEles.push(button)}\n id={'autocomplete-foot'}\n onClick={this.onSearchSubmit}\n onMouseDown={this.onSearchSubmit}\n >\n View all results\n </button>\n </div>\n )}\n </div>\n );\n } else if (!currentScopeHits) {\n content = (\n <div class=\"search-autocomplete-hit search-autocomplete-hit--no-result\">\n No results matching '{this.searchValInternal}' were found. Try\n another phrase.\n </div>\n );\n }\n }\n\n return (\n <div\n class=\"search-autocomplete\"\n role=\"listbox\"\n id=\"autocomplete-results\"\n aria-expanded={this.showAutocomplete ? 'true' : 'false'}\n hidden={!this.showAutocomplete}\n onKeyDown={this.onAutocompleteInteract}\n >\n {content}\n </div>\n );\n }\n\n private searchWidget(): VNode[] {\n return [\n <form\n class=\"search-inputs\"\n onSubmit={this.onSearchSubmit}\n id=\"global-nav-search\"\n >\n <nano-select\n class=\"search-input\"\n label=\"Which area of content would you like to search?\"\n hideLabel\n showInlineError={false}\n value={this.currentSelectedIndex()?.index}\n onNanoChange={this.onSearchIndexChange}\n mask\n >\n {this.internalSearchIndeces.map((index) => {\n return (\n <nano-option\n selected={index.name === this.searchIndex}\n value={index.index}\n >\n {index.name || index.index}\n </nano-option>\n );\n })}\n <nano-icon\n name=\"light/chevron-down\"\n class=\"select-input__arrow\"\n slot=\"down-arrow\"\n />\n </nano-select>\n <nano-input\n class=\"search-input\"\n label=\"What would you like to search for?\"\n aria-label=\"What would you like to search for\"\n hideLabel\n showInlineError={false}\n clear-input\n placeholder=\"Search Nanopore\"\n type=\"text\"\n ref={(input) => (this.searchInput = input)}\n onNanoChange={this.onSearchChange}\n onNanoInput={this.onSearchInput}\n onKeyDown={this.onAutocompleteInteract}\n debounce={500}\n aria-autocomplete=\"list\"\n aria-activedescendant={\n this.autocompleteEles[this.currAIndex]\n ? this.autocompleteEles[this.currAIndex].id\n : false\n }\n aria-controls=\"autocomplete-results\"\n onNanoFocus={this.showAutocompleteResults}\n value={this.searchValue}\n role=\"textbox\"\n >\n <button\n class={{\n 'search-icon': true,\n 'search-icon--search': true,\n 'search-icon--show': !!this.searchValue && !this.searchLoading,\n }}\n slot=\"end\"\n onClick={(e) => {\n this.searchValInternal = this.searchInput.value;\n this.onSearchSubmit(e);\n }}\n >\n <nano-icon\n name=\"light/magnifying-glass\"\n role=\"img\"\n ariaLabel=\"Search now\"\n ></nano-icon>\n </button>\n <span\n class={{\n 'search-icon': true,\n 'search-icon--loader': true,\n 'search-icon--show': this.searchLoading,\n }}\n slot=\"end\"\n >\n <nano-icon name=\"light/spinner-third\"></nano-icon>\n </span>\n </nano-input>\n <input type=\"submit\" />\n </form>,\n ];\n }\n\n render() {\n this.autocompleteEles = [];\n const isRtl = this.el.ownerDocument.dir === 'rtl';\n\n const searchWidget = this.searchWidget();\n searchWidget.push(this.autocompleteList());\n\n return (\n <Host\n class={{\n [this.thresholdClasses().join(' ')]: true,\n ready: this.ready,\n 'search-bar-shown': this.searchBarShown && this.scrollingUp,\n 'search-auto-complete-shown':\n this.showAutocomplete && this.scrollingUp,\n 'modal-open': this.modalIsOpen,\n resizing: this.isResizing,\n }}\n dir={isRtl ? 'rtl' : null}\n >\n <div\n class={{\n 'global-nav': true,\n 'scrolling-down': !this.scrollingUp,\n }}\n >\n {/* START BURGER / OVERFLOW MENU */}\n <nav\n id=\"global-nav-menu\"\n class={{\n 'gn-menu': true,\n open: this.modalOpen,\n 'has-promotion': this.hasPromotionSlot,\n 'menu-full-screen': this.menuFullScreen,\n 'secondary-open': !!this.secondaryMenuOpen,\n }}\n aria-expanded={this.modalOpen ? 'true' : 'false'}\n ref={(div) => (this.menuDiv = div)}\n part=\"burger\"\n >\n <div\n class=\"gn-menu_wrap\"\n ref={(div) => (this.menuWrapDiv = div)}\n tabindex=\"-1\"\n part=\"burger-menu\"\n >\n <div class=\"gn-menu_actions\" part=\"burger-actions-bar\">\n <button\n class=\"menu-btn icon-btn icon-btn\"\n onMouseDown={this.onMenuBtnClick}\n onKeyDown={this.onMenuBtnKeyDown}\n >\n {this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.login && (\n <nano-icon\n name=\"light/xmark\"\n aria-label=\"close menu\"\n role=\"img\"\n ></nano-icon>\n )}\n {this.threshold >= THRESHOLDLIMIT - THRESHOLDBREAKS.login && (\n <nano-icon\n name=\"light/bars\"\n aria-label=\"close menu\"\n role=\"img\"\n ></nano-icon>\n )}\n </button>\n\n {this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.icon && [\n !!this.iconSlotLen && <slot name=\"icon\" />,\n this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('icons')) && [\n this.msgUrl && (\n <a href={this.msgUrl} class=\"icon-btn\">\n <nano-icon\n name=\"light/bell\"\n role=\"img\"\n ariaLabel=\"Check notifications\"\n ></nano-icon>\n {this.msgCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.msgCount}\n </span>\n )}\n </a>\n ),\n this.cartUrl && (\n <a href={this.cartUrl} class=\"icon-btn\">\n <nano-icon\n name=\"light/cart-shopping\"\n role=\"img\"\n ariaLabel=\"Go to cart\"\n ></nano-icon>\n {this.cartCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.cartCount}\n </span>\n )}\n </a>\n ),\n ],\n ]}\n\n {this.myAccData && this.myAccData.urls.login && (\n <a\n href={this.myAccData.urls.login + this.ssoRedirect}\n class=\"login-btn\"\n >\n Login / Register{' '}\n <nano-icon name=\"solid/chevron-right\"></nano-icon>\n </a>\n )}\n </div>\n\n <div\n class=\"content-wrap\"\n ref={(div) => (this.menuContentDiv = div)}\n >\n <div class=\"content\" part=\"burger-content\">\n <nav class=\"nav-links nav-links--main\" role=\"menu\">\n <slot\n name=\"overflow\"\n onSlotchange={this.assessSlottedContent}\n />\n {this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.main &&\n !!this.mainSlotLen && (\n <slot\n name=\"main\"\n onSlotchange={this.assessSlottedContent}\n />\n )}\n </nav>\n\n {/* ABOUT AND SITE MENU IN BURGER */}\n {(((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.hasSiteSlot) ||\n !!this.siteNavItms.length) && (\n <div>\n {/* SITES MENU (Always in burger) */}\n {(this.hasSiteSlot || !!this.siteNavItms.length) && [\n (this.threshold >= THRESHOLDLIMIT - 2 ||\n this.mainSlotLen < 2) &&\n this.overflowSlotLen < 2 && (\n <div class=\"nav-links-wrap\">\n <h4 class=\"nav-links_title nav-links_title--sites\">\n Sites\n </h4>\n <nav\n class=\"nav-links nav-links--sub nav-links--sites\"\n aria-label=\"Different company site links\"\n >\n <slot\n name=\"site\"\n onSlotchange={this.assessSlottedContent}\n />\n {this.siteNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={link.address}\n target={link.target}\n >\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n </nav>\n </div>\n ),\n ((this.threshold < THRESHOLDLIMIT - 2 &&\n this.mainSlotLen >= 2) ||\n this.overflowSlotLen >= 2) && (\n <nav\n class=\"nav-links\"\n aria-label=\"Different company site links\"\n >\n <nano-nav-item\n class=\"nano-global-nav nano-global-nav-menu\"\n closeOnBlur={false}\n >\n Sites\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-right\"\n ></nano-icon>\n <div slot=\"secondary\">\n <div class=\"content\">\n <button\n class=\"back-btn\"\n onClick={this.subMenuClose}\n >\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-left\"\n aria-label=\"go back\"\n role=\"img\"\n ></nano-icon>\n Sites\n </button>\n <div class=\"content--sub\">\n <slot\n name=\"site\"\n onSlotchange={this.assessSlottedContent}\n />\n {this.siteNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={link.address}\n target={link.target}\n >\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n </div>\n </div>\n </div>\n </nano-nav-item>\n </nav>\n ),\n ]}\n </div>\n )}\n </div>\n\n {/* USER PROFILE IN BURGER */}\n {this.isLoggedIn &&\n this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.login &&\n (this.loggedInNavItms.length || this.hasLoggedinSlot) && (\n <nav class=\"nav-links\" aria-label=\"Your user account links\">\n <nano-nav-item\n class=\"nano-global-nav user-nav nano-global-nav-menu\"\n closeOnBlur={false}\n >\n {this.myAccountUser.name}\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-right\"\n ></nano-icon>\n <div slot=\"secondary\">\n <div class=\"content\">\n <button\n class=\"back-btn\"\n onClick={this.subMenuClose}\n >\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-left\"\n aria-label=\"go back\"\n role=\"img\"\n ></nano-icon>\n {this.myAccountUser.name}\n </button>\n {!!this.myAccountUser?.small_avatar_url && (\n <nano-global-nav-user-profile\n myAccountUser={this.myAccountUser}\n userProfileUrl={this.userProfileUrl}\n ></nano-global-nav-user-profile>\n )}\n <div class=\"content--sub\">\n <slot\n name=\"loggedin\"\n onSlotchange={this.assessSlottedContent}\n />\n {this.loggedInNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a href={link.address} target={link.target}>\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={\n this.myAccData.urls.forgot_password +\n this.ssoRedirect\n }\n >\n Change Password\n </a>\n </nano-nav-item>\n </div>\n </div>\n </div>\n </nano-nav-item>\n </nav>\n )}\n\n <slot\n name=\"promotion\"\n onSlotchange={this.assessSlottedContent}\n />\n\n {this.myAccData && this.myAccData.urls.logout && (\n <div class=\"login-btn logout-btn\">\n <a href={this.myAccData.urls.logout + this.ssoRedirect}>\n Logout\n </a>\n </div>\n )}\n </div>\n </div>\n </nav>\n {/* END BURGER / OVERFLOW MENU */}\n\n {/* START MAIN NAV BAR */}\n <div class=\"bars\" part=\"bars\">\n <nav\n part=\"main-bar\"\n class=\"main-bar\"\n aria-label=\"Main site navigation\"\n tabindex=\"-1\"\n ref={(div) => (this.mainBarDiv = div)}\n >\n {(this.hasPromotionSlot ||\n !!this.overflowSlotLen ||\n ((this.myAccData || !!this.iconSlotLen) &&\n this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.icon) ||\n (this.isLoggedIn &&\n (!!this.loggedInNavItms.length || this.hasLoggedinSlot) &&\n this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.login) ||\n (!!this.mainSlotLen &&\n this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.main) ||\n ((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.about) ||\n this.hasSiteSlot ||\n !!this.siteNavItms.length) && (\n <button\n class=\"menu-btn icon-btn\"\n onMouseDown={this.menuOpen}\n onKeyDown={this.onMenuBtnKeyDown}\n aria-expanded={this.modalOpen ? 'true' : 'false'}\n aria-controls=\"global-nav-menu\"\n ref={(btn) => (this.menuBtn = btn)}\n >\n <nano-icon\n name=\"light/bars\"\n aria-label=\"Open menu\"\n ></nano-icon>\n </button>\n )}\n\n {this.showLogo && (\n <a href={this.logoUrl} class=\"logo-link\" part=\"logo-link\">\n <img\n src={getAssetPath(`../nano-assets/ont-logo.svg`)}\n alt=\"Oxford Nanopore Technologies Logo\"\n class=\"logo\"\n />\n </a>\n )}\n {!this.showLogo && (\n <div class=\"logo-link\">\n <slot name=\"logo\" onSlotchange={this.assessSlottedContent} />\n </div>\n )}\n\n <div class=\"nav-links nav-links--main\">\n <slot name=\"main\" onSlotchange={this.assessSlottedContent} />\n </div>\n\n {/* search widget displayed in the bar (there is enough space to show it) */}\n {this.mainSlotLen === 0 &&\n this.threshold >= THRESHOLDLIMIT - THRESHOLDBREAKS.search && [\n this.showSearch && !!this.internalSearchIndeces.length && (\n <div\n class=\"search-widget\"\n role=\"combobox\"\n aria-owns=\"autocomplete-results\"\n aria-expanded={\n this.showAutocomplete && this.autocompleteResults\n ? 'true'\n : 'false'\n }\n >\n {searchWidget}\n </div>\n ),\n (!this.showSearch || !this.myAccData) &&\n !!this.searchSlotLen && (\n <slot\n name=\"search\"\n onSlotchange={this.assessSlottedContent}\n />\n ),\n ]}\n\n {/* Bar Icon buttons */}\n\n {/* Bar search icon button (when not enough to show search in bar) */}\n {(this.mainSlotLen > 0 ||\n this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.search) &&\n ((this.showSearch && !!this.internalSearchIndeces.length) ||\n !!this.searchSlotLen) && (\n <button\n class={{\n 'icon-btn': true,\n 'search-btn': true,\n 'search-btn--open': this.searchBarShown,\n }}\n aria-controls=\"global-nav-search-bar\"\n aria-expanded={this.searchBarShown ? 'true' : 'false'}\n onClick={this.onSearchBtnClick}\n >\n <nano-icon\n name=\"light/magnifying-glass\"\n role=\"img\"\n ariaLabel=\"Search Oxford Nanopore\"\n ></nano-icon>\n </button>\n )}\n\n {/* Bar cart and notifications */}\n {this.threshold >= THRESHOLDLIMIT - THRESHOLDBREAKS.icon && [\n !!this.iconSlotLen && <slot name=\"icon\" />,\n this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('icons')) && [\n this.msgUrl && (\n <a href={this.msgUrl} class=\"icon-btn\">\n <nano-icon\n name=\"light/bell\"\n ariaLabel=\"View your notifications\"\n ></nano-icon>\n {this.msgCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.msgCount}\n </span>\n )}\n </a>\n ),\n this.cartUrl && (\n <a href={this.cartUrl} class=\"icon-btn\">\n <nano-icon\n name=\"light/cart-shopping\"\n ariaLabel=\"View your shopping cart\"\n ></nano-icon>\n {this.cartCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.cartCount}\n </span>\n )}\n </a>\n ),\n ],\n ]}\n\n {/* Bar about links */}\n {(!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold >= THRESHOLDLIMIT - THRESHOLDBREAKS.about && (\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"About the company. Links\"\n role=\"menu\"\n >\n <slot\n name=\"about\"\n onSlotchange={this.assessSlottedContent}\n />\n {!!this.aboutNavItms.length && (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-bar\">\n <a\n href={this.aboutNavItms[0].address}\n target={this.aboutNavItms[0].target}\n >\n {this.aboutNavItms[0].title}\n </a>\n </nano-nav-item>\n )}\n </nav>\n )}\n\n {/* Bar login button / User panel */}\n {this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('loggedin')) &&\n this.threshold >= THRESHOLDLIMIT - THRESHOLDBREAKS.login && [\n this.myAccData.urls.login && (\n <a\n href={this.myAccData.urls.login + this.ssoRedirect}\n class=\"login-btn\"\n >\n Login / Register\n </a>\n ),\n this.myAccountUser && (\n <div class=\"user-links\">\n <button\n class={{\n 'icon-btn': true,\n 'user-links-btn': true,\n open: this.userMenuOpen,\n }}\n onMouseDown={this.onUserBtnClick}\n onKeyDown={this.onUserBtnKeyDown}\n >\n {' '}\n {this.myAccountUser.name}\n <nano-icon\n name=\"solid/caret-down\"\n ariaLabel=\"View your account links\"\n ></nano-icon>\n </button>\n <div\n class=\"user-links-panel\"\n tabindex=\"-1\"\n ref={(div) => (this.userLinkPanel = div)}\n >\n {!!this.myAccountUser?.small_avatar_url && (\n <nano-global-nav-user-profile\n myAccountUser={this.myAccountUser}\n userProfileUrl={this.userProfileUrl}\n ></nano-global-nav-user-profile>\n )}\n <div class=\"user-links-panel-content\">\n {this.loggedInNavItms.map((link) => {\n return (\n <a href={link.address} target={link.target}>\n {link.title}\n </a>\n );\n })}\n </div>\n <div class=\"user-links-panel-foot\">\n <a\n href={\n this.myAccData.urls.forgot_password +\n this.ssoRedirect\n }\n >\n Change Password\n </a>\n <a\n href={this.myAccData.urls.logout + this.ssoRedirect}\n >\n Logout\n </a>\n </div>\n </div>\n </div>\n ),\n ]}\n </nav>\n\n {/* Search widget shown in bar underneath main bar when there is not enough space */}\n {(this.mainSlotLen > 0 ||\n this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.search) && (\n <div\n id=\"global-nav-search-bar\"\n class={{\n 'search-bar': true,\n show: this.searchBarShown,\n }}\n aria-expanded={this.searchBarShown ? 'true' : 'false'}\n role=\"region\"\n tabindex=\"-1\"\n ref={(div) => (this.searchBarEl = div)}\n part=\"search-bar\"\n >\n <div class=\"search-widget\">\n {this.showSearch && !!this.internalSearchIndeces.length && (\n <div>{searchWidget}</div>\n )}\n {(!this.showSearch || !this.myAccData) &&\n !!this.searchSlotLen && (\n <slot\n name=\"search\"\n onSlotchange={this.assessSlottedContent}\n />\n )}\n </div>\n </div>\n )}\n </div>\n {/* END MAIN NAV BAR */}\n\n {/* BURGER MENU MOBILE MASK */}\n {(this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.login ||\n this.menuFullScreen) && (\n <div\n class={{\n mask: true,\n open: this.modalOpen,\n }}\n onClick={this.menuClose}\n onTouchEnd={this.menuClose}\n ></div>\n )}\n </div>\n <div class=\"site-content\">\n <slot />\n </div>\n </Host>\n );\n }\n\n // Data processing\n\n /**\n * Finds a correct domain (as defined by myAccount data) for a given origin\n * @returns a domain string for this origin\n */\n private domainFor(origin: string): string {\n if (!this.myAccData) return '';\n const domain = this.myAccData.domains.find((dm) => dm.origin === origin);\n return domain ? domain.domain : '';\n }\n\n /**\n * process a set, or multiple sets of algolia results\n * and applies correct domain names / http protocol to each result's url\n * @returns results where partial paths are turned to full urls\n */\n private processSearchResults(results: AlgoliaMultiResults | AlgoliaResults) {\n const multiResults = results as AlgoliaMultiResults;\n const singleResult = results as AlgoliaResults;\n\n if (multiResults.results) {\n multiResults.results.forEach((result, i) => {\n multiResults.results[i] = this.processSearchResults(\n result\n ) as AlgoliaResults;\n });\n return multiResults;\n } else {\n singleResult.hits.map((hit) => {\n if (hit.url && !hit.url.match(/^http/))\n hit.url =\n location.protocol + '//' + this.domainFor(hit.origin) + hit.url;\n });\n return singleResult;\n }\n }\n\n /**\n * Ingests the data blob from myAccount; turns prescient fields to internal state\n */\n private processMyAccData() {\n if (!this.myAccData || !this.myAccData.search.indeces.length) return;\n\n if (this.myAccData.search.api_key)\n this.searchApiKey = this.myAccData.search.api_key;\n if (this.myAccData.search.app_id)\n this.searchAppId = this.myAccData.search.app_id;\n\n if (this.myAccData.cart.count) this.cartCount = this.myAccData.cart.count;\n if (this.myAccData.notifications.count)\n this.msgCount = this.myAccData.notifications.count;\n\n if (!this.searchAppId || !this.searchApiKey) return;\n this.internalSearchIndeces = [\n ...this.myAccData.search.indeces,\n ...this.searchIndeces,\n ];\n\n if (this.myAccData.urls.cart && !this.cartUrl)\n this.cartUrl = this.myAccData.urls.cart;\n if (this.myAccData.urls.messages && !this.msgUrl)\n this.msgUrl = this.myAccData.urls.messages;\n }\n\n /**\n * Ingests the data blob from myAccount links; applies prescient fields to internal state\n */\n private processMyAccLinks() {\n if (!this.myAccData.links || !this.myAccData.links.length) return;\n\n this.myAccData.links.forEach((link) => {\n switch (link.area) {\n case 'left-side-logged-in':\n case 'left-side-logged-out':\n if (\n this.activeMyAccountSections &&\n !this.activeMyAccountSections.includes('sites')\n )\n break;\n if (this.isLoggedIn && link.area === 'left-side-logged-in')\n this.siteNavItms.push(link);\n else if (!this.isLoggedIn && link.area === 'left-side-logged-out')\n this.siteNavItms.push(link);\n break;\n case 'right-side-logged-in':\n case 'right-side-logged-out':\n if (\n this.activeMyAccountSections &&\n !this.activeMyAccountSections.includes('about')\n )\n break;\n if (this.isLoggedIn && link.area === 'right-side-logged-in')\n this.aboutNavItms.push(link);\n else if (!this.isLoggedIn && link.area === 'right-side-logged-out')\n this.aboutNavItms.push(link);\n break;\n case 'profile-panel-list':\n if (\n this.activeMyAccountSections &&\n !this.activeMyAccountSections.includes('loggedin')\n )\n break;\n this.loggedInNavItms.push(link);\n break;\n }\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["async","clientFetch","url","body","customConfig","headers","Accept","Cache","config","method","credentials","keepalive","mode","JSON","stringify","id","setTimeout","window","AbortController","controller","timeout","abort","signal","response","fetch","clearTimeout","ok","json","errorMessage","text","Error","globalNavCss","NanoGlobalNavStyle0","THRESHOLDBREAKS","about","main","login","search","icon","THRESHOLDLIMIT","Object","keys","length","GlobalNav","debounceResize","debounceSetResizingState","currSize","menuDiv","menuBtn","menuWrapDiv","menuContentDiv","menuSelectedItems","searchBarEl","searchInput","algoliaClient","currentIndex","autocompleteResults","autocompleteEles","currAIndex","algoliaSearchResults","scopeSearch","mainBarDiv","userLinkPanel","isLoggedIn","myAccData","aboutNavItms","siteNavItms","loggedInNavItms","constructor","hostRef","this","assessSlottedContent","debounce","bind","handleBarResize","userProfileUrl","hasLoggedinSlot","hasSiteSlot","hasPromotionSlot","aboutSlotLen","iconSlotLen","mainSlotLen","overflowSlotLen","searchSlotLen","thresholdReady","remoteDataReady","ready","isResizing","threshold","modalOpen","modalIsOpen","searchBarShown","scrollingUp","showAutocomplete","secondaryMenuOpen","userMenuOpen","menuFullScreen","searchLoading","searchValInternal","internalSearchIndeces","env","ssoDataUrl","myAccountData","handleMyAccountData","user","links","myAccountUser","processMyAccLinks","processMyAccData","ssoRedirect","encodeURIComponent","location","href","getMyAccountData","activeMyAccountSections","showSearch","showLogo","logoUrl","protocol","host","searchIndeces","searchAppId","searchApiKey","searchValue","searchIndex","cartCount","msgCount","cartUrl","msgUrl","nanoIsReady","nanoSearchResult","nanoSearchError","nanoSearchReset","submitSearch","onSearchSubmit","toggleOverflowMenu","openClose","undefined","menuOpen","menuClose","getMyAccData","import","e","console","error","currentSelectedIndex","foundIndex","find","index","name","changeInternalSearchVal","initAlgoliaClient","algoliasearch","addAlgoliaIndeces","searchInsight","init","then","setUser","uuid","addIndeces","forEach","alogliaIndex","initIndex","thresholdChange","newThreshold","oldThreshold","setResizingState","assessReady","emit","requestAnimationFrame","searchbarShow","setupAutocompleteBlur","el","shadowRoot","addEventListener","onAutocompleteBlur","removeEventListener","closeSearchBar","searchbarHide","slotChange","thresholdClasses","classes","i","push","state","onWindowResize","innerWidth","secondaryOpen","ev","detail","secondaryMenu","stopPropagation","target","querySelectorAll","transformTag","classList","remove","style","minHeight","scrollHeight","secondaryClose","add","onMenuBtnKeyDown","key","onMenuBtnClick","preventDefault","display","focus","preventScroll","innerHeight","document","overflow","overflowX","onMenuHidden","activeElement","force","composedPath","some","contains","subMenuClose","closest","open","onUserBtnClick","onUserBtnKeyDown","onUserMenuBlur","relatedTarget","handleUserMenu","displayTransition","className","show","onSearchBtnClick","onSearchBarHidden","onSearchBarShown","widgetHeight","Math","floor","querySelector","height","toString","setFocus","autocompleteSnippet","hit","lookFor","_snippetResult","found","prop","matchLevel","title","substring","value","onSearchInput","isSearchValSet","type","doAlgoliaSearch","queries","map","toReturn","clickAnalytics","attributesToSnippet","indexName","query","facets","filters","hitsPerPage","Date","now","processSearchResults","results","result","selected","domain","domains","allGroup","replicas","onSearchChange","algoliaHits","res","showAutocompleteResults","activeIndex","meta","indexTitle","client","apiKey","appId","onSearchIndexChange","indexStr","selectedIndex","switchIndexSubmit","resetHitFocus","hits","setActiveElement","autocompleteEle","ele","setAttribute","onAutocompleteInteract","testIndex","click","readTask","descreaseThreshold","Promise","resolve","scrollWidth","parentElement","clientWidth","menuItems","barItems","Array","from","writeTask","item","componentWillLoad","ComponentStore","connectedCallback","componentDidLoad","disconnectedCallback","autocompleteList","content","currentScopeHits","scopeChangeSuggestions","scopeSuggestReducer","total","currentSuggestReducer","reduce","scopeSuggestions","h","class","role","ref","a","tabindex","innerHTML","onClick","sendClick","eventName","queryID","objectIDs","objectID","positions","button","onMouseDown","hidden","onKeyDown","searchWidget","onSubmit","label","hideLabel","showInlineError","onNanoChange","mask","slot","placeholder","input","onNanoInput","onNanoFocus","ariaLabel","render","isRtl","ownerDocument","dir","Host","join","resizing","div","part","includes","urls","onSlotchange","link","address","closeOnBlur","small_avatar_url","forgot_password","logout","btn","src","getAssetPath","alt","onTouchEnd","domainFor","origin","dm","multiResults","singleResult","match","indeces","api_key","app_id","cart","count","notifications","messages","area"],"sources":["src/utils/fetch.ts","src/components/global-nav/style/global-nav.scss?tag=nano-global-nav&encapsulation=shadow","src/components/global-nav/global-nav.tsx"],"sourcesContent":["interface FetchInputConfig {\n body?: { [prop: string]: string };\n headers?: { [prop: string]: string };\n [prop: string]: any;\n}\n\nexport async function clientFetch(\n url: string,\n { body, ...customConfig }: FetchInputConfig = {}\n) {\n const headers: { [prop: string]: string } = {\n Accept: 'application/json, text/plain, */*',\n 'Access-Control-Allow-Origin': '*',\n 'Content-Type': 'application/json',\n Cache: 'no-cache',\n };\n const config: RequestInit = {\n method: body ? 'POST' : 'GET',\n credentials: 'include',\n keepalive: true,\n mode: 'cors',\n ...customConfig,\n headers: {\n ...headers,\n ...customConfig.headers,\n },\n };\n if (body) {\n config.body = JSON.stringify(body);\n }\n\n let id = setTimeout(() => {}, 0);\n if (window.AbortController) {\n const controller = new AbortController();\n const { timeout = 500 } = customConfig;\n id = setTimeout(() => controller.abort(), timeout);\n config.signal = controller.signal;\n }\n\n const response = await fetch(url, config);\n clearTimeout(id);\n\n if (response.ok) {\n return await response.json();\n } else {\n const errorMessage = await response.text();\n return new Error(errorMessage);\n }\n}\n","@use 'sass:map';\n@use '../../../global/style/nano-theme/tokens';\n\n// local\n@use 'setup';\n@use 'bar';\n@use 'burger';\n@use 'search';\n@use 'user';\n\n:host {\n /**\n * @prop --bar-vertical-padding: Defaults to 21px;\n * @prop --bar-item-spacing: Defaults to 16px;\n * @prop --bar-background: Defaults to white;\n * @prop --bar-text-color: Defaults to #{map.get(tokens.$colors, black)};\n * @prop --bar-color-shade: Defaults to #d8d8d8;\n * @prop --bar-color-tint: Defaults to rgb(19 89 111);\n * @prop --bar-color-focus: Defaults to #007fa9;\n * @prop --bar-user-panel-bg: Defaults to #016d86;\n * @prop --bar-dropdown-bg: Defaults to #196c82;\n * @prop --bar-dropdown-text: Defaults to white;\n * @prop --bar-search-focus: Defaults to #007FA9;\n\n * @prop --menu-background: Defaults to #001a21;\n * @prop --menu-text-color: Defaults to white;\n * @prop --menu-user-profile-bg: Defaults to #001a21;\n * @prop --menu-user-panel-bg: Defaults to #193037;\n * @prop --menu-padding: Defaults to 12px;\n * @prop --menu-hint-color: Defaults to #33484d;\n * @prop --menu-title-text: Defaults to #{map.get(tokens.$colors, lightblue)};\n * @prop --menu-icon-color: Defaults to white;\n\n * @prop --login-button-bg: Defaults to #17bb75;\n * @prop --login-button-text: Defaults to white;\n */\n\n --bar-vertical-padding: 19px;\n --bar-item-spacing: 13px;\n --bar-background: white;\n --bar-text-color: #{map.get(tokens.$colors, black)};\n --bar-color-shade: #d8d8d8;\n --bar-color-tint: rgb(19 89 111);\n --bar-color-focus: #007fa9;\n --bar-user-panel-bg: #016d86;\n --bar-dropdown-bg: #196c82;\n --bar-dropdown-text: white;\n --bar-search-focus: #007FA9; \n --menu-background: #001a21;\n --menu-text-color: white;\n --menu-user-profile-bg: #001a21;\n --menu-user-panel-bg: #193037;\n --menu-padding: 12px;\n --menu-hint-color: #33484d;\n --menu-title-text: #{map.get(tokens.$colors, lightblue)};\n --menu-icon-color: white;\n --login-button-bg: #007fa9;\n --login-button-text: white;\n\n // not sure if this required any more.\n --padding: 12px;\n --padding-top: var(--padding);\n --padding-end: var(--padding);\n --padding-bottom: var(--padding);\n --padding-start: var(--padding);\n\n display: flex;\n flex-direction: column;\n position: relative;\n line-height: 1.5;\n block-size: 100%;\n font-size: 0.9375em;\n font-size: clamp(0.77rem, 1vw, 0.9rem);\n\n input,\n select,\n button {\n font-family: inherit;\n appearance: none;\n font-size: inherit;\n }\n\n a,\n button {\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n box-shadow: #{tokens.$control-focus-style};\n }\n }\n}\n","import {\n Component,\n Host,\n Element,\n State,\n Watch,\n Event,\n EventEmitter,\n Prop,\n Listen,\n Build,\n getAssetPath,\n readTask,\n writeTask,\n Method,\n VNode,\n ComponentInterface,\n} from '@stencil/core';\nimport algoliasearch from 'algoliasearch/dist/algoliasearch-lite.esm.browser';\nimport { clientFetch } from '../../utils/fetch';\nimport { ComponentStore } from '../../utils/store/component-store';\nimport { debounce } from '../../utils/throttle';\nimport { displayTransition } from '../../utils/transitions';\nimport searchInsight from '../../utils/search-insights';\n\nimport {\n AlgoliaMultiResult,\n AlgoliaMultiResults,\n AlgoliaResultHit,\n AlgoliaResults,\n AlgoliaSearchResultDetail,\n SearchIndex,\n} from '../algolia/algolia-interface';\nimport { NavItemEventDetail } from '../nav-item/nav-item-interface';\nimport { InputChangeEventDetail } from '../input/input-interface';\nimport { SelectChangeEventDetail } from '../select/select-interface';\nimport { transformTag, h } from '../../utils/renderer';\nimport {\n AlgoliaNetworkError,\n MyAccountData,\n MyAccountLink,\n MyAccountUser,\n} from './global-nav-interface';\nimport type { MultipleQueriesQuery } from '@algolia/client-search';\nimport type { SearchClient as AlgoliaClient } from 'algoliasearch/lite';\n\n// the 'breakpoints' where different segments of content go into or out-of the burger / overflow menu\nconst THRESHOLDBREAKS = {\n about: 0,\n main: 1,\n login: 2,\n search: 3,\n icon: 4,\n};\nconst THRESHOLDLIMIT = Object.keys(THRESHOLDBREAKS).length;\n\n/**\n * Nanopore digital global navigation and search bar.\n * Incorporates MyAccount / SSO states (messages / cart / user name etc).\n * Incorporates Algolia search.\n *\n * @slot main - main nav items. Should be used with nano-nav-item's\n * @slot icon - nano-nav-item's displayed alongside icon links that come from MyAccount\n * @slot loggedin - nano-nav-item's to display when users are signed in, alongside links from from MyAccount (within the overflow menu panel).\n * @slot about - nano-nav-item's to display with about links that come from MyAccount\n * @slot site - nano-nav-item's to display with site links that come from MyAccount\n * @slot overflow - items to always display in the overflow menu\n * @slot search - when not using myaccount search OR show-search=\"false\" you can utilise the search slot\n * @slot promotion - a free area for any promotional content, displayed within the overflow menu panel\n * @slot logo - when show-logo=\"false\" you can utilise the logo slot\n * @slot - if using search functionality, place a `<nano-search-results />` element in the default slot\n *\n * @part burger - the overflow / burger ui element\n * @part burger-menu - the overflow / burger menu\n * @part burger-actions-bar - the top bar of the overflow / burger menu\n * @part burger-content - the main content area of the overflow / burger menu\n * @part bars - the main wrapper around the `main-bar` and `search-bar` nav bars\n * @part main-bar - the main nav menu bar\n * @part logo-link - the link wrapping the logo\n * @part search-bar - the search bar that appears under the main nav menu bar\n */\n@Component({\n tag: 'nano-global-nav',\n styleUrl: 'style/global-nav.scss',\n shadow: true,\n assetsDirs: ['assets'],\n})\nexport class GlobalNav implements ComponentInterface {\n // position and dimension state\n private debounceResize: () => any;\n private debounceSetResizingState: () => any;\n private currSize: number = 0;\n\n // menu\n private menuDiv: HTMLElement;\n private menuBtn: HTMLButtonElement;\n private menuWrapDiv: HTMLDivElement;\n private menuContentDiv: HTMLDivElement;\n private menuSelectedItems: NodeListOf<HTMLNanoNavItemElement>;\n\n // search\n private searchBarEl: HTMLDivElement;\n private searchInput: HTMLNanoInputElement;\n private algoliaClient: AlgoliaClient;\n private currentIndex: SearchIndex;\n private autocompleteResults: AlgoliaResults | null;\n private autocompleteEles: Array<HTMLAnchorElement | HTMLButtonElement> = [];\n private currAIndex: number = -1;\n private algoliaSearchResults: AlgoliaMultiResults | null;\n private scopeSearch: AlgoliaMultiResults | null;\n\n // general\n private mainBarDiv: HTMLElement;\n private userLinkPanel: HTMLDivElement;\n private isLoggedIn: boolean = false;\n private myAccData: MyAccountData = null;\n\n // myaccount links\n private aboutNavItms: MyAccountLink[] = [];\n private siteNavItms: MyAccountLink[] = [];\n private loggedInNavItms: MyAccountLink[] = [];\n\n constructor() {\n this.assessSlottedContent = debounce(\n this.assessSlottedContent.bind(this),\n 10\n );\n this.handleBarResize = debounce(this.handleBarResize.bind(this), 200);\n }\n\n // user profile link\n @State() userProfileUrl: string = '';\n\n // has slot tests\n @State() hasLoggedinSlot: boolean = false;\n @State() hasSiteSlot: boolean = false;\n @State() hasPromotionSlot: boolean = false;\n\n // slot item number tests\n @State() aboutSlotLen: number = 0;\n @State() iconSlotLen: number = 0;\n @State() mainSlotLen: number = 0;\n @State() overflowSlotLen: number = 0;\n @State() searchSlotLen: number = 0;\n\n // threshold / sizing\n @State() thresholdReady: boolean = false;\n @State() remoteDataReady: boolean = false;\n @State() ready: boolean = false;\n @State() isResizing: boolean = false;\n @State() threshold: number = THRESHOLDLIMIT;\n\n // modals state\n @State() modalOpen: boolean = false;\n @State() modalIsOpen: boolean = false;\n @State() searchBarShown: boolean = false;\n @State() scrollingUp: boolean = true;\n @State() showAutocomplete: boolean = false;\n @State() secondaryMenuOpen: HTMLNanoNavItemElement = null;\n @State() userMenuOpen: boolean = false;\n @State() menuFullScreen: boolean = false;\n\n // search\n @State() searchLoading: boolean = false;\n @State() searchValInternal: string = '';\n @State() internalSearchIndeces: Array<SearchIndex> = [];\n\n @Element() private el: HTMLNanoGlobalNavElement;\n\n /**\n * Connect to local, dev, test or prod MyAccount\n * environments to retrieve global nav / sso data.\n * Alternatively, you can use the `ssoDataUrl` prop.\n */\n @Prop() env?: 'local' | 'dev' | 'test' | 'prod' = 'prod';\n\n /**\n * A base url to retrieve global nav / sso data.\n * `nav_bar_data.json` will be appended to this url.\n * An alternative to the pre-defined `env` urls\n */\n @Prop() ssoDataUrl?: string;\n\n /**\n * An alternative to both 'env' and 'ssoDataUrl'.\n * You can directly provide a JSON object of myaccount data.\n * (e.g. https://myaccount.nanoporetech.com/nav_bar_data.json)\n * This is useful for SSR\n */\n @Prop() myAccountData: MyAccountData | null;\n @Watch('myAccountData')\n handleMyAccountData() {\n if (!this.myAccountData) return;\n\n if (!this.myAccountData.user || !this.myAccountData.links) return;\n\n this.myAccData = this.myAccountData;\n if (this.myAccData.user.id) {\n this.isLoggedIn = true;\n this.myAccountUser = this.myAccData.user;\n }\n\n this.processMyAccLinks();\n this.processMyAccData();\n this.remoteDataReady = true;\n }\n\n /**\n * Where to take user after SSO login\n */\n @Prop() ssoRedirect: string = encodeURIComponent(window.location.href);\n\n /**\n * Whether to attempt to get global nav / sso data from MyAccount\n */\n @Prop() getMyAccountData: boolean = true;\n\n /**\n * Active MyAccount link sections. By default all will show.\n */\n @Prop() activeMyAccountSections: (\n | 'about'\n | 'loggedin'\n | 'sites'\n | 'icons'\n )[] = null;\n\n /**\n * Whether to show search functionality\n */\n @Prop() showSearch: boolean = true;\n\n /**\n * Whether to show Nanopore logo\n */\n @Prop() showLogo: boolean = true;\n\n /**\n * The link to put on the logo\n */\n @Prop() logoUrl: string = location.protocol + '//' + location.host;\n\n /**\n * An array of Algolia search indexes (and optional display names). Will be automatically populated from MyAccount\n */\n @Prop() searchIndeces: Array<SearchIndex> = [];\n\n /**\n * Logged in user details automatically populated from MyAccount\n */\n @Prop({ mutable: true }) myAccountUser: MyAccountUser = null;\n\n /**\n * An Algolia App ID key. Will be automatically populated from MyAccount\n */\n @Prop({ mutable: true }) searchAppId: string;\n\n /**\n * An Algolia API Key. Will be automatically populated from MyAccount\n */\n @Prop({ mutable: true }) searchApiKey: string;\n\n /**\n * A search value to passed to Algolia to programmatically get or to preload search results\n */\n @Prop({ mutable: true }) searchValue: string = '';\n\n /**\n * Algolia search index to programmatically set or to set an initial index\n */\n @Prop({ mutable: true }) searchIndex: string = 'All';\n\n /**\n * MyAccount store cart count.\n */\n @Prop({ mutable: true }) cartCount: number = 0;\n\n /**\n * MyAccount un-read message count.\n */\n @Prop({ mutable: true }) msgCount: number = 0;\n\n /**\n * Url to the Nanopore store cart. Will default to the url supplied by MyAccount\n */\n @Prop({ mutable: true }) cartUrl: string = null;\n\n /**\n * Url to the Nanopore message center. Will default to the url supplied by MyAccount\n */\n @Prop({ mutable: true }) msgUrl: string = null;\n\n /**\n * Emitted when the global nav is ready.\n */\n @Event() nanoIsReady!: EventEmitter<void>;\n\n /**\n * Emitted when search results are successfully returned from Algolia.\n */\n @Event() nanoSearchResult!: EventEmitter<AlgoliaSearchResultDetail>;\n\n /**\n * Emitted when algolia returns an error.\n */\n @Event() nanoSearchError!: EventEmitter<AlgoliaNetworkError>;\n\n /**\n * Emitted when search field is cleared.\n */\n @Event() nanoSearchReset!: EventEmitter<AlgoliaSearchResultDetail>;\n\n /**\n * Submit the search form (a search value must be present)\n */\n @Method()\n async submitSearch() {\n this.onSearchSubmit();\n this.showAutocomplete = false;\n return;\n }\n\n /**\n * Manually open or close the overflow (burger) menu\n * @param openClose - optionally force open (true) or close (false)\n */\n @Method()\n async toggleOverflowMenu(openClose?: boolean) {\n if (openClose === true || (openClose === undefined && !this.modalIsOpen)) {\n this.menuOpen();\n } else {\n this.menuClose(null, true);\n }\n }\n\n @Watch('env')\n @Watch('ssoDataUrl')\n async getMyAccData() {\n if (this.myAccData) return;\n\n switch (this.env) {\n case 'prod':\n this.userProfileUrl = 'https://myaccount.nanoporetech.com/';\n break;\n case 'local':\n case 'dev':\n case 'test':\n default:\n this.userProfileUrl = 'https://myaccount.nanoporetech.com/';\n break;\n }\n\n if (!this.getMyAccountData || this.myAccData) {\n this.remoteDataReady = true;\n return;\n }\n\n let url = this.ssoDataUrl;\n\n if (!url) {\n switch (this.env) {\n case 'dev':\n url = 'https://myaccount-dev.nanoporetech.com/';\n break;\n case 'test':\n url = 'https://myaccount-test.nanoporetech.com/';\n break;\n default:\n url = 'https://myaccount.nanoporetech.com/';\n break;\n }\n }\n\n const config = { timeout: 5000 };\n\n try {\n if (this.env === 'local') {\n this.myAccData = (await import(\n `./assets/local-my-account.json`\n )) as unknown as MyAccountData;\n } else {\n this.myAccData = await clientFetch(url + 'nav_bar_data.json', config);\n }\n if (this.myAccData.user.id) {\n this.isLoggedIn = true;\n this.myAccountUser = this.myAccData.user;\n }\n this.processMyAccLinks();\n this.processMyAccData();\n setTimeout(() => (this.remoteDataReady = true), 300);\n } catch (e) {\n console.error(e);\n this.remoteDataReady = true;\n }\n }\n\n @Watch('searchIndex')\n currentSelectedIndex() {\n if (!this.internalSearchIndeces.length) {\n return;\n }\n if (!this.searchIndex) return this.internalSearchIndeces[0];\n\n const foundIndex = this.internalSearchIndeces.find(\n (index) => index.name === this.searchIndex\n );\n\n if (!foundIndex) {\n this.currentIndex = this.internalSearchIndeces[0];\n console.error('index not found');\n return;\n }\n\n this.currentIndex = foundIndex;\n return foundIndex;\n }\n\n @Watch('searchValInternal')\n changeInternalSearchVal() {\n if (this.searchValInternal !== this.searchValue)\n this.searchValue = this.searchValInternal;\n }\n\n @Watch('searchApiKey')\n @Watch('searchAppId')\n initAlgoliaClient() {\n if (!this.searchAppId || !this.searchApiKey) return;\n\n this.algoliaClient = algoliasearch(this.searchAppId, this.searchApiKey);\n this.addAlgoliaIndeces();\n\n // setup algolia analytics\n searchInsight.init(this.searchAppId, this.searchApiKey).then(() => {\n if (this.myAccountUser) searchInsight.setUser(this.myAccountUser.uuid);\n });\n }\n\n /** Public facing set of Algolia indices. Add to any indices we may already have (e.g. from MyAccount) */\n @Watch('searchIndeces')\n addIndeces() {\n this.internalSearchIndeces = [\n ...this.internalSearchIndeces,\n ...this.searchIndeces,\n ];\n }\n\n /** Internal set of of Algolia indices. Includes public & private (e.g. from MyAccount) */\n @Watch('internalSearchIndeces')\n addAlgoliaIndeces() {\n if (!this.algoliaClient || !this.internalSearchIndeces.length) return;\n\n this.internalSearchIndeces.forEach((searchIndex) => {\n searchIndex.alogliaIndex = this.algoliaClient.initIndex(\n searchIndex.index\n );\n });\n if (!this.searchIndex) {\n this.searchIndex = this.internalSearchIndeces[0].name;\n }\n }\n\n /** Current content breakpoint. If it goes up, things can look wonky for a second so we temporarily hide stuff */\n @Watch('threshold')\n thresholdChange(newThreshold: number, oldThreshold: number) {\n if (newThreshold > oldThreshold) {\n // we've resized to larger screen.\n this.setResizingState(true);\n }\n }\n\n /* Check if data and item placement is ready */\n @Watch('thresholdReady')\n @Watch('remoteDataReady')\n assessReady() {\n if (this.thresholdReady && this.remoteDataReady) {\n this.ready = true;\n this.nanoIsReady.emit();\n\n if (this.searchValue) requestAnimationFrame(() => this.searchbarShow());\n }\n }\n\n /**\n * Add / remove events when autocomplete results show / hide.\n */\n @Watch('showAutocomplete')\n setupAutocompleteBlur() {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.searchInput.clientWidth; // force reflow\n if (this.showAutocomplete) {\n this.el.shadowRoot.addEventListener('click', this.onAutocompleteBlur);\n } else {\n this.el.shadowRoot.removeEventListener('click', this.onAutocompleteBlur);\n }\n }\n\n @Watch('secondaryMenuOpen')\n closeSearchBar() {\n if (!!this.secondaryMenuOpen && this.searchBarShown) this.searchbarHide();\n }\n\n /** As relevant slotted items change, reset resizing breakpoints */\n @Watch('aboutSlotLen')\n @Watch('iconSlotLen')\n @Watch('mainSlotLen')\n @Watch('overflowSlotLen')\n @Watch('searchSlotLen')\n slotChange() {\n this.threshold = THRESHOLDLIMIT;\n }\n\n // General classes for visuals\n\n private thresholdClasses() {\n const classes = [];\n let i = 0;\n for (i; i < this.threshold; i++) classes.push('threshold-' + (i + 1));\n return classes;\n }\n\n /**\n * provides 'isResizing' - we use this to fade content out on 'breakpoint' increase\n * (when the screen size increases). Otherwise the stepping through of\n * breakpoints to calculate if content currently fits shows on screen (looks ugly)\n */\n private setResizingState = (state: boolean = false) => {\n if (typeof this.debounceSetResizingState === 'undefined') {\n this.debounceSetResizingState = debounce(this.setResizingState, 600);\n }\n if (state) {\n this.isResizing = true;\n this.debounceSetResizingState();\n } else {\n this.isResizing = false;\n }\n };\n\n // Global DOM Events\n\n /**\n * 1) Reset threshold (item fit breakpoint) when screen is bigger than before.\n * 2) Assess the all threshold / breakpoints to see if content fits\n * 3) Hide search bar whenever we resize\n */\n private onWindowResize() {\n if (this.threshold < THRESHOLDLIMIT && window.innerWidth > this.currSize) {\n this.threshold = THRESHOLDLIMIT;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.mainBarDiv.clientWidth; // force reflow\n }\n this.currSize = window.innerWidth;\n this.searchbarHide();\n this.handleBarResize();\n }\n\n // Burger / Overflow Menu\n\n /* listen to nav-item secondary open / close events primarily for resizing the menu */\n @Listen('nanoOpen')\n secondaryOpen(ev: CustomEvent & { target: HTMLNanoNavItemElement }) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n this.secondaryMenuOpen = ev.target;\n\n if (!this.menuSelectedItems) {\n this.menuSelectedItems = this.el.querySelectorAll(\n `${transformTag('nano-nav-item')}[selected]`\n );\n this.menuSelectedItems.forEach((i) => i.classList.remove('selected'));\n }\n\n this.menuContentDiv.style.minHeight =\n (ev.detail as NavItemEventDetail).secondaryMenu.scrollHeight + 'px';\n }\n\n @Listen('nanoClose')\n secondaryClose(ev: CustomEvent & { target: HTMLNanoNavItemElement }) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n\n if (this.secondaryMenuOpen === ev.target && this.menuSelectedItems) {\n this.secondaryMenuOpen = null;\n this.menuContentDiv.style.minHeight = '';\n this.menuSelectedItems = null;\n this.el\n .querySelectorAll(`${transformTag('nano-nav-item')}[selected]`)\n .forEach((i) => i.classList.add('selected'));\n }\n }\n\n private onMenuBtnKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n if (this.modalOpen) this.menuClose(ev, true);\n else this.menuOpen();\n break;\n }\n };\n\n private onMenuBtnClick = (ev: MouseEvent) => {\n this.menuClose(ev, true);\n };\n\n private menuOpen = (e?: MouseEvent) => {\n if (e) e.preventDefault();\n\n this.menuDiv.style.display = 'block';\n // need to open menu in stages\n // wait for re-flow after changing display\n // wait for repaint after animate, then focus\n\n this.modalOpen = true;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.menuDiv.clientWidth; // force reflow\n\n this.menuWrapDiv.focus({ preventScroll: true });\n if (\n this.threshold < 2 ||\n this.menuWrapDiv.scrollHeight > window.innerHeight\n ) {\n document.body.style.overflow = 'hidden';\n this.menuFullScreen = true;\n } else document.body.style.overflowX = 'hidden';\n\n setTimeout(() => (this.modalIsOpen = true), 300);\n };\n\n private onMenuHidden = () => {\n this.menuDiv.removeEventListener('transitionend', this.onMenuHidden);\n\n document.body.style.overflow = '';\n this.menuDiv.style.display = 'none';\n this.modalIsOpen = false;\n this.menuFullScreen = false;\n\n setTimeout(() => {\n if (document.activeElement === document.body && this.menuBtn)\n this.mainBarDiv.focus({ preventScroll: true });\n }, 50);\n };\n\n @Listen('click', { target: 'body' })\n menuClose(\n ev?: FocusEvent | MouseEvent | KeyboardEvent | TouchEvent,\n force: boolean = false\n ) {\n if (!this.modalIsOpen) return;\n\n if (force) {\n this.modalOpen = false;\n this.menuDiv.addEventListener('transitionend', this.onMenuHidden);\n return;\n }\n\n if (\n !ev\n .composedPath()\n .some(\n (el) =>\n el === this.menuContentDiv ||\n (el as Element).classList?.contains('gn-menu_actions')\n )\n ) {\n requestAnimationFrame(() => {\n if (this.secondaryMenuOpen) return;\n\n this.modalOpen = false;\n this.menuDiv.addEventListener('transitionend', this.onMenuHidden);\n });\n }\n }\n\n private subMenuClose = (ev?: MouseEvent) => {\n ev.preventDefault();\n (ev.target as HTMLNanoNavItemElement).closest<HTMLNanoNavItemElement>(\n transformTag('nano-nav-item')\n ).open = false;\n };\n\n // User profile menu\n\n private onUserBtnClick = (ev: MouseEvent) => {\n ev.preventDefault();\n this.userMenuOpen = !this.userMenuOpen;\n };\n\n private onUserBtnKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.userMenuOpen = !this.userMenuOpen;\n break;\n }\n };\n\n private onUserMenuBlur = (ev: FocusEvent) => {\n if (!ev.relatedTarget) {\n this.userMenuOpen = false;\n return;\n }\n if ((ev.relatedTarget as HTMLElement).closest('.user-links-panel'))\n return false;\n this.userMenuOpen = false;\n };\n\n @Watch('userMenuOpen')\n async handleUserMenu() {\n await displayTransition(this.userLinkPanel, {\n className: 'show',\n show: this.userMenuOpen,\n });\n if (this.userMenuOpen) {\n this.userLinkPanel.focus();\n this.userLinkPanel.addEventListener('focusout', this.onUserMenuBlur);\n } else {\n this.userLinkPanel.removeEventListener('focusout', this.onUserMenuBlur);\n this.el.focus();\n }\n }\n\n // Search bar open / closed\n\n private onSearchBtnClick = (ev: MouseEvent) => {\n ev.preventDefault();\n if (this.searchBarShown) this.searchbarHide();\n else this.searchbarShow();\n };\n\n private async searchbarShow() {\n if (!this.searchBarEl) return;\n this.searchBarShown = true;\n\n this.searchBarEl.removeEventListener(\n 'transitionend',\n this.onSearchBarHidden\n );\n this.searchBarEl.addEventListener('transitionend', this.onSearchBarShown);\n this.searchBarEl.style.display = 'block';\n\n requestAnimationFrame(() => {\n const widgetHeight =\n Math.floor(\n this.searchBarEl.querySelector('.search-widget').scrollHeight\n ) - 1;\n this.searchBarEl.style.height = widgetHeight.toString() + 'px';\n });\n }\n\n private onSearchBarShown = () => {\n this.searchBarEl.removeEventListener(\n 'transitionend',\n this.onSearchBarShown\n );\n if (this.searchInput) this.searchInput.setFocus();\n this.searchBarEl.style.overflow = 'visible';\n };\n\n private searchbarHide = (ev?: FocusEvent) => {\n if (\n ev &&\n ev.relatedTarget &&\n (ev.relatedTarget as HTMLElement).closest('#global-nav-search-bar')\n ) {\n return;\n }\n this.showAutocomplete = this.searchBarShown = false;\n if (this.searchValInternal.length && ev) return;\n\n if (!this.searchBarEl) return;\n this.searchBarEl.addEventListener('transitionend', this.onSearchBarHidden);\n this.searchBarEl.style.overflow = 'hidden';\n this.searchBarEl.style.height = '0px';\n };\n\n private onSearchBarHidden = () => {\n this.searchBarEl.style.display = 'none';\n };\n\n // Algolia search\n\n private autocompleteSnippet(hit: AlgoliaResultHit) {\n const lookFor = ['title']; // , 'body'\n if (hit._snippetResult) {\n const found = lookFor.find(\n (prop) =>\n hit._snippetResult[prop] &&\n hit._snippetResult[prop].matchLevel !== 'none'\n );\n\n if (found) {\n if (found !== 'title')\n return (\n (hit.title.length > 15\n ? hit.title.substring(0, 15) + ' ...'\n : hit.title) +\n ' ' +\n hit._snippetResult[found].value\n );\n else return hit._snippetResult['title'].value;\n }\n }\n return hit.title;\n }\n\n private onSearchInput = (ev: CustomEvent<InputEvent>) => {\n this.searchValInternal = this.searchInput.value;\n\n if (!this.isSearchValSet()) {\n this.searchLoading = false;\n return;\n }\n\n if (ev.detail.type === 'input') {\n this.showAutocomplete = false;\n this.searchLoading = true;\n }\n };\n\n /**\n * Constructs a multi-search query for all set search indices\n * (which are normally controlled via the myAccount payload) then sends to Algolia.\n * Post-processes results, adding correct domains to url fields.\n * @returns formatted algolia results\n */\n private async doAlgoliaSearch() {\n this.algoliaSearchResults = null;\n\n const queries: MultipleQueriesQuery[] = this.internalSearchIndeces.map(\n (index) => {\n const toReturn = {\n clickAnalytics: true,\n attributesToSnippet: ['body:5', 'title:8'],\n indexName: index.index,\n query: this.searchValInternal,\n facets: index.filters,\n hitsPerPage: 5,\n filters: '',\n };\n if (index.name === 'Community') {\n toReturn.filters =\n 'created > ' + Math.floor((Date.now() - 63115200000) / 1000); // only get last 2 years\n }\n return toReturn;\n }\n );\n\n try {\n this.algoliaSearchResults = this.processSearchResults(\n (await this.algoliaClient.search(queries)) as any\n ) as AlgoliaMultiResults;\n } catch (e) {\n this.nanoSearchError.emit(e as AlgoliaNetworkError);\n }\n this.searchLoading = false;\n if (!this.algoliaSearchResults) return;\n\n this.algoliaSearchResults.results.map((result, i) => {\n result.indexName = this.internalSearchIndeces[i].name;\n result.selected =\n this.currentIndex.name === this.internalSearchIndeces[i].name;\n result.domain = this.currentIndex.domain || null;\n result.domains = this.myAccData.domains || null;\n result.allGroup = !!this.internalSearchIndeces[i].allGroup;\n result.filters = this.internalSearchIndeces[i].filters;\n result.replicas = this.currentIndex.replicas;\n });\n\n return this.algoliaSearchResults;\n }\n\n /**\n * Called whenever the search input value changes.\n * Performs Algolia search and shows autocomplete results.\n * @param ev optional input change event\n */\n private onSearchChange = async (ev?: CustomEvent<InputChangeEventDetail>) => {\n this.searchValInternal = this.searchValue = ev\n ? ev.detail.value\n : this.searchValInternal;\n this.showAutocomplete = false;\n this.autocompleteResults = null;\n\n if (!this.isSearchValSet()) {\n if (!this.searchValInternal.length) {\n this.nanoSearchReset.emit();\n }\n this.searchLoading = false;\n return;\n }\n if (!this.currentIndex) this.currentSelectedIndex();\n\n // start search\n this.searchLoading = true;\n const algoliaHits = await this.doAlgoliaSearch();\n\n this.scopeSearch = null;\n this.scopeSearch = algoliaHits;\n\n // set / show autocomplete results\n this.autocompleteResults = algoliaHits.results.find((res) => res.selected);\n this.showAutocompleteResults();\n\n this.searchLoading = false;\n };\n\n /**\n * Called whenever the search form is submitted (but can also be called manually).\n * Fires event which will activate / display `nano-global-search-results`\n *\n * @param ev optional form submit event\n * @returns Algolia search results\n */\n private onSearchSubmit = async (ev?) => {\n if (ev) ev.preventDefault();\n if (!this.isSearchValSet()) return;\n\n if (!this.currentIndex) this.currentSelectedIndex();\n if (!this.algoliaSearchResults) await this.doAlgoliaSearch();\n\n const activeIndex = this.algoliaSearchResults.results.find(\n (res) => res.selected\n );\n const { index, domain, filters, query, replicas } = activeIndex;\n\n this.nanoSearchResult.emit({\n meta: {\n indexTitle: activeIndex.indexName,\n index,\n domain,\n filters,\n query,\n replicas,\n },\n client: { apiKey: this.searchApiKey, appId: this.searchAppId },\n });\n this.showAutocomplete = false;\n return this.algoliaSearchResults;\n };\n\n private onSearchIndexChange = async (\n index: CustomEvent<SelectChangeEventDetail> | string\n ) => {\n const ev = index as CustomEvent<SelectChangeEventDetail>;\n let indexStr = index as string;\n\n if (!this.currentIndex) this.currentSelectedIndex();\n\n if (ev.detail && ev.detail.value.length)\n indexStr = ev.detail.value as string;\n if (!indexStr || !indexStr.length) return;\n if (this.currentIndex.index === indexStr) return;\n\n const selectedIndex = this.internalSearchIndeces.find(\n (index) => index.index === indexStr\n );\n if (!selectedIndex || !selectedIndex.alogliaIndex) return;\n\n this.searchIndex = selectedIndex.name;\n if (this.isSearchValSet()) await this.onSearchChange();\n };\n\n private isSearchValSet() {\n if (this.searchValInternal.length < 3) return false;\n return true;\n }\n\n private switchIndexSubmit = async (index: string) => {\n if (this.isSearchValSet()) {\n await this.onSearchIndexChange(index);\n this.onSearchSubmit();\n } else this.onSearchIndexChange(index);\n };\n\n // Autocomplete\n\n @Watch('showAutocomplete')\n resetHitFocus() {\n this.currAIndex = -1;\n }\n\n private onAutocompleteBlur = (ev: MouseEvent) => {\n if (!this.showAutocomplete || !this.autocompleteResults) return;\n if (ev && ev.target && (ev.target as HTMLElement).closest('.search-widget'))\n return;\n this.showAutocomplete = false;\n };\n\n private showAutocompleteResults = () => {\n if (!this.autocompleteResults || !this.autocompleteResults.hits) return;\n this.showAutocomplete = true;\n };\n\n private setActiveElement(\n autocompleteEle: HTMLAnchorElement | HTMLButtonElement\n ) {\n this.autocompleteEles.map((ele) =>\n ele.setAttribute('aria-selected', 'false')\n );\n autocompleteEle.focus({ preventScroll: true });\n autocompleteEle.setAttribute('aria-selected', 'true');\n }\n\n private onAutocompleteInteract = (ev: KeyboardEvent) => {\n // list open, navigate items with arrows\n if (!this.showAutocomplete || !this.autocompleteResults) return;\n let testIndex = this.currAIndex;\n\n switch (ev.key) {\n case 'Tab':\n setTimeout(() => {\n if (\n !this.el.shadowRoot.activeElement ||\n !this.el.shadowRoot.activeElement.closest('.search-widget')\n ) {\n this.showAutocomplete = false;\n return;\n } else {\n const found = this.autocompleteEles.find((ele, i) => {\n if (ele === this.el.shadowRoot.activeElement) {\n this.currAIndex = i;\n return true;\n }\n });\n if (found) this.setActiveElement(found);\n else this.currAIndex = -1;\n }\n });\n break;\n case 'ArrowDown':\n case 'ArrowUp': {\n if (ev.key === 'ArrowDown') testIndex++;\n else if (ev.key === 'ArrowUp') testIndex--;\n\n const found = this.autocompleteEles[testIndex];\n if (\n found ||\n testIndex < 0 ||\n testIndex > this.autocompleteEles.length - 1\n ) {\n ev.preventDefault();\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.searchInput.clientWidth; // force reflow\n\n if (found) {\n this.setActiveElement(found);\n this.currAIndex = testIndex;\n } else if (testIndex < 0) {\n this.searchInput.setFocus();\n this.currAIndex = -1;\n }\n break;\n }\n case 'Enter':\n case ' ':\n if (this.autocompleteEles[this.currAIndex]) {\n this.autocompleteEles[this.currAIndex].click();\n }\n break;\n }\n };\n\n // Various.\n\n /**\n * Assesses what content is present in which slots\n */\n private assessSlottedContent = () => {\n readTask(() => {\n this.hasSiteSlot = !!this.el.querySelectorAll('[slot=\"site\"]').length;\n this.hasLoggedinSlot =\n !!this.el.querySelectorAll('[slot=\"loggedin\"]').length;\n this.hasPromotionSlot =\n !!this.el.querySelectorAll('[slot=\"promotion\"]').length;\n\n this.aboutSlotLen = this.el.querySelectorAll('[slot=\"about\"]').length;\n this.iconSlotLen = this.el.querySelectorAll('[slot=\"icon\"]').length;\n this.mainSlotLen = this.el.querySelectorAll('[slot=\"main\"]').length;\n this.overflowSlotLen =\n this.el.querySelectorAll('[slot=\"overflow\"]').length;\n this.searchSlotLen = this.el.querySelectorAll('[slot=\"search\"]').length;\n });\n };\n\n private async handleBarResize() {\n const descreaseThreshold = () => {\n return new Promise<void>((resolve) => {\n this.threshold--;\n\n setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n this.mainBarDiv.clientWidth; // force reflow\n resolve();\n }, 200);\n });\n };\n\n // Decrease the threshold until content fits\n while (this.threshold > 0) {\n if (\n this.mainBarDiv.scrollWidth <= this.mainBarDiv.parentElement.clientWidth\n )\n break;\n await descreaseThreshold();\n }\n\n /* content now fits so add / remove context classes\n on nav-items depending on whether they're added to bar or burger. */\n\n this.thresholdReady = true;\n\n let menuItems: Array<Element>, barItems: Array<Element>;\n readTask(() => {\n menuItems = [\n ...Array.from(\n this.el.querySelectorAll(\n `${transformTag('nano-nav-item')}[slot=\"site\"]`\n )\n ),\n ...Array.from(\n this.el.querySelectorAll(\n `${transformTag('nano-nav-item')}[slot=\"overflow\"]`\n )\n ),\n ];\n barItems = [];\n\n if (this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.icon)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll(\n `${transformTag('nano-nav-item')}[slot=\"icon\"]`\n )\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll(\n `${transformTag('nano-nav-item')}[slot=\"icon\"]`\n )\n )\n );\n\n if (this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.login)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll(\n `${transformTag('nano-nav-item')}[slot=\"loggedin\"]`\n )\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll(\n `${transformTag('nano-nav-item')}[slot=\"loggedin\"]`\n )\n )\n );\n\n if (this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.main)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll(\n `${transformTag('nano-nav-item')}[slot=\"main\"]`\n )\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll(\n `${transformTag('nano-nav-item')}[slot=\"main\"]`\n )\n )\n );\n\n if (this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.about)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll(\n `${transformTag('nano-nav-item')}[slot=\"about\"]`\n )\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll(\n `${transformTag('nano-nav-item')}[slot=\"about\"]`\n )\n )\n );\n });\n\n writeTask(() => {\n menuItems.forEach((item) => {\n item.classList.add('nano-global-nav-menu');\n item.classList.remove('nano-global-nav-bar');\n });\n barItems.forEach((item) => {\n item.classList.remove('nano-global-nav-menu');\n item.classList.add('nano-global-nav-bar');\n });\n });\n }\n\n // Stencil Lifecycle / Rendering\n\n componentWillLoad() {\n ComponentStore.init(\n this,\n ['searchIndex', 'searchValue'],\n 'url-hash',\n 'gns'\n );\n\n this.assessSlottedContent();\n }\n\n connectedCallback() {\n this.handleMyAccountData();\n this.getMyAccData();\n }\n\n componentDidLoad() {\n if (Build.isBrowser) {\n this.debounceResize = debounce(this.onWindowResize.bind(this), 200);\n window.addEventListener('resize', this.debounceResize);\n this.currSize = window.innerWidth;\n }\n\n this.initAlgoliaClient();\n this.addAlgoliaIndeces();\n requestAnimationFrame(() => this.handleBarResize());\n }\n\n disconnectedCallback() {\n if (Build.isBrowser)\n window.removeEventListener('resize', this.debounceResize);\n }\n\n // Render output\n\n private autocompleteList(): VNode {\n let content;\n if (this.showAutocomplete && this.scrollingUp) {\n let currentScopeHits = 0;\n let scopeChangeSuggestions = 0;\n\n const scopeSuggestReducer = (\n total: number,\n result: AlgoliaMultiResult\n ) => {\n return result.index !== this.currentIndex.index\n ? total + result.hits.length\n : total;\n };\n const currentSuggestReducer = (\n total: number,\n result: AlgoliaMultiResult\n ) => {\n return result.index === this.currentIndex.index\n ? total + result.hits.length\n : total;\n };\n\n if (this.scopeSearch) {\n scopeChangeSuggestions = this.scopeSearch.results.reduce(\n scopeSuggestReducer,\n 0\n );\n currentScopeHits = this.scopeSearch.results.reduce(\n currentSuggestReducer,\n 0\n );\n }\n\n if (\n (this.autocompleteResults && this.autocompleteResults.hits.length) ||\n (scopeChangeSuggestions && !currentScopeHits)\n ) {\n let scopeSuggestions = 0;\n\n content = (\n <div>\n {!currentScopeHits && (\n <div class=\"search-autocomplete-hit search-autocomplete-hit--no-result\">\n No results matching '{this.searchValInternal}' were found in{' '}\n <strong>{this.currentIndex.name}</strong>. Try another phrase.\n </div>\n )}\n {this.autocompleteResults && [\n this.autocompleteResults.hits.map((hit, i) => {\n return (\n <a\n role=\"option\"\n ref={(a) => this.autocompleteEles.push(a)}\n tabindex=\"-1\"\n id={'autocomplete-hit-' + i}\n href={hit.url}\n class=\"search-autocomplete-hit\"\n innerHTML={this.autocompleteSnippet(hit)}\n onClick={() => {\n searchInsight.sendClick({\n index: this.currentIndex.index,\n eventName:\n 'Global nav quick search - search result clicked',\n queryID: this.autocompleteResults.queryID,\n objectIDs: [hit.objectID],\n positions: [i + 1],\n });\n }}\n ></a>\n );\n }),\n ]}\n {(!currentScopeHits || this.currentIndex.allGroup) &&\n this.scopeSearch &&\n this.scopeSearch.results && [\n this.scopeSearch.results.map((result, i) => {\n if (\n !result.hits.length ||\n result.index === this.currentIndex.index ||\n scopeSuggestions > 1\n )\n return;\n scopeSuggestions++;\n return (\n <button\n role=\"option\"\n ref={(button) => this.autocompleteEles.push(button)}\n tabindex=\"-1\"\n id={'autocomplete-scope-' + i}\n class=\"search-autocomplete-hit\"\n onClick={() => this.switchIndexSubmit(result.index)}\n onMouseDown={() => this.switchIndexSubmit(result.index)}\n >\n \"{this.searchValInternal}\"{' '}\n <div class=\"search-autocomplete-hit-scope\">\n in {result.indexName}\n </div>\n </button>\n );\n }),\n ]}\n {!!currentScopeHits && (\n <div class=\"search-autocomplete-foot\">\n <button\n role=\"option\"\n class=\"search-autocomplete-submit\"\n ref={(button) => this.autocompleteEles.push(button)}\n id={'autocomplete-foot'}\n onClick={this.onSearchSubmit}\n onMouseDown={this.onSearchSubmit}\n >\n View all results\n </button>\n </div>\n )}\n </div>\n );\n } else if (!currentScopeHits) {\n content = (\n <div class=\"search-autocomplete-hit search-autocomplete-hit--no-result\">\n No results matching '{this.searchValInternal}' were found. Try\n another phrase.\n </div>\n );\n }\n }\n\n return (\n <div\n class=\"search-autocomplete\"\n role=\"listbox\"\n id=\"autocomplete-results\"\n aria-expanded={this.showAutocomplete ? 'true' : 'false'}\n hidden={!this.showAutocomplete}\n onKeyDown={this.onAutocompleteInteract}\n >\n {content}\n </div>\n );\n }\n\n private searchWidget(): VNode[] {\n return [\n <form\n class=\"search-inputs\"\n onSubmit={this.onSearchSubmit}\n id=\"global-nav-search\"\n >\n <nano-select\n class=\"search-input\"\n label=\"Which area of content would you like to search?\"\n hideLabel\n showInlineError={false}\n value={this.currentSelectedIndex()?.index}\n onNanoChange={this.onSearchIndexChange}\n mask\n >\n {this.internalSearchIndeces.map((index) => {\n return (\n <nano-option\n selected={index.name === this.searchIndex}\n value={index.index}\n >\n {index.name || index.index}\n </nano-option>\n );\n })}\n <nano-icon\n name=\"light/chevron-down\"\n class=\"select-input__arrow\"\n slot=\"down-arrow\"\n />\n </nano-select>\n <nano-input\n class=\"search-input\"\n label=\"What would you like to search for?\"\n aria-label=\"What would you like to search for\"\n hideLabel\n showInlineError={false}\n clear-input\n placeholder=\"Search Nanopore\"\n type=\"text\"\n ref={(input) => (this.searchInput = input)}\n onNanoChange={this.onSearchChange}\n onNanoInput={this.onSearchInput}\n onKeyDown={this.onAutocompleteInteract}\n debounce={500}\n aria-autocomplete=\"list\"\n aria-activedescendant={\n this.autocompleteEles[this.currAIndex]\n ? this.autocompleteEles[this.currAIndex].id\n : false\n }\n aria-controls=\"autocomplete-results\"\n onNanoFocus={this.showAutocompleteResults}\n value={this.searchValue}\n role=\"textbox\"\n >\n <button\n class={{\n 'search-icon': true,\n 'search-icon--search': true,\n 'search-icon--show': !!this.searchValue && !this.searchLoading,\n }}\n slot=\"end\"\n onClick={(e) => {\n this.searchValInternal = this.searchInput.value;\n this.onSearchSubmit(e);\n }}\n >\n <nano-icon\n name=\"light/magnifying-glass\"\n role=\"img\"\n ariaLabel=\"Search now\"\n ></nano-icon>\n </button>\n <span\n class={{\n 'search-icon': true,\n 'search-icon--loader': true,\n 'search-icon--show': this.searchLoading,\n }}\n slot=\"end\"\n >\n <nano-icon name=\"light/spinner-third\"></nano-icon>\n </span>\n </nano-input>\n <input type=\"submit\" />\n </form>,\n ];\n }\n\n render() {\n this.autocompleteEles = [];\n const isRtl = this.el.ownerDocument.dir === 'rtl';\n\n const searchWidget = this.searchWidget();\n searchWidget.push(this.autocompleteList());\n\n return (\n <Host\n class={{\n [this.thresholdClasses().join(' ')]: true,\n ready: this.ready,\n 'search-bar-shown': this.searchBarShown && this.scrollingUp,\n 'search-auto-complete-shown':\n this.showAutocomplete && this.scrollingUp,\n 'modal-open': this.modalIsOpen,\n resizing: this.isResizing,\n 'nano-global-nav': true,\n }}\n dir={isRtl ? 'rtl' : null}\n >\n <div\n class={{\n 'global-nav': true,\n 'scrolling-down': !this.scrollingUp,\n }}\n >\n {/* START BURGER / OVERFLOW MENU */}\n <nav\n id=\"global-nav-menu\"\n class={{\n 'gn-menu': true,\n open: this.modalOpen,\n 'has-promotion': this.hasPromotionSlot,\n 'menu-full-screen': this.menuFullScreen,\n 'secondary-open': !!this.secondaryMenuOpen,\n }}\n aria-expanded={this.modalOpen ? 'true' : 'false'}\n ref={(div) => (this.menuDiv = div)}\n part=\"burger\"\n >\n <div\n class=\"gn-menu_wrap\"\n ref={(div) => (this.menuWrapDiv = div)}\n tabindex=\"-1\"\n part=\"burger-menu\"\n >\n <div class=\"gn-menu_actions\" part=\"burger-actions-bar\">\n <button\n class=\"menu-btn icon-btn icon-btn\"\n onMouseDown={this.onMenuBtnClick}\n onKeyDown={this.onMenuBtnKeyDown}\n >\n {this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.login && (\n <nano-icon\n name=\"light/xmark\"\n aria-label=\"close menu\"\n role=\"img\"\n ></nano-icon>\n )}\n {this.threshold >= THRESHOLDLIMIT - THRESHOLDBREAKS.login && (\n <nano-icon\n name=\"light/bars\"\n aria-label=\"close menu\"\n role=\"img\"\n ></nano-icon>\n )}\n </button>\n\n {this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.icon && [\n !!this.iconSlotLen && <slot name=\"icon\" />,\n this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('icons')) && [\n this.msgUrl && (\n <a href={this.msgUrl} class=\"icon-btn\">\n <nano-icon\n name=\"light/bell\"\n role=\"img\"\n ariaLabel=\"Check notifications\"\n ></nano-icon>\n {this.msgCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.msgCount}\n </span>\n )}\n </a>\n ),\n this.cartUrl && (\n <a href={this.cartUrl} class=\"icon-btn\">\n <nano-icon\n name=\"light/cart-shopping\"\n role=\"img\"\n ariaLabel=\"Go to cart\"\n ></nano-icon>\n {this.cartCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.cartCount}\n </span>\n )}\n </a>\n ),\n ],\n ]}\n\n {this.myAccData && this.myAccData.urls.login && (\n <a\n href={this.myAccData.urls.login + this.ssoRedirect}\n class=\"login-btn\"\n >\n Login / Register{' '}\n <nano-icon name=\"solid/chevron-right\"></nano-icon>\n </a>\n )}\n </div>\n\n <div\n class=\"content-wrap\"\n ref={(div) => (this.menuContentDiv = div)}\n >\n <div class=\"content\" part=\"burger-content\">\n <nav class=\"nav-links nav-links--main\" role=\"menu\">\n <slot\n name=\"overflow\"\n onSlotchange={this.assessSlottedContent}\n />\n {this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.main &&\n !!this.mainSlotLen && (\n <slot\n name=\"main\"\n onSlotchange={this.assessSlottedContent}\n />\n )}\n </nav>\n\n {/* ABOUT AND SITE MENU IN BURGER */}\n {(((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.hasSiteSlot) ||\n !!this.siteNavItms.length) && (\n <div>\n {/* SITES MENU (Always in burger) */}\n {(this.hasSiteSlot || !!this.siteNavItms.length) && [\n (this.threshold >= THRESHOLDLIMIT - 2 ||\n this.mainSlotLen < 2) &&\n this.overflowSlotLen < 2 && (\n <div class=\"nav-links-wrap\">\n <h4 class=\"nav-links_title nav-links_title--sites\">\n Sites\n </h4>\n <nav\n class=\"nav-links nav-links--sub nav-links--sites\"\n aria-label=\"Different company site links\"\n >\n <slot\n name=\"site\"\n onSlotchange={this.assessSlottedContent}\n />\n {this.siteNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={link.address}\n target={link.target}\n >\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n </nav>\n </div>\n ),\n ((this.threshold < THRESHOLDLIMIT - 2 &&\n this.mainSlotLen >= 2) ||\n this.overflowSlotLen >= 2) && (\n <nav\n class=\"nav-links\"\n aria-label=\"Different company site links\"\n >\n <nano-nav-item\n class=\"nano-global-nav nano-global-nav-menu\"\n closeOnBlur={false}\n >\n Sites\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-right\"\n ></nano-icon>\n <div slot=\"secondary\">\n <div class=\"content\">\n <button\n class=\"back-btn\"\n onClick={this.subMenuClose}\n >\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-left\"\n aria-label=\"go back\"\n role=\"img\"\n ></nano-icon>\n Sites\n </button>\n <div class=\"content--sub\">\n <slot\n name=\"site\"\n onSlotchange={this.assessSlottedContent}\n />\n {this.siteNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={link.address}\n target={link.target}\n >\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n </div>\n </div>\n </div>\n </nano-nav-item>\n </nav>\n ),\n ]}\n </div>\n )}\n </div>\n\n {/* USER PROFILE IN BURGER */}\n {this.isLoggedIn &&\n this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.login &&\n (this.loggedInNavItms.length || this.hasLoggedinSlot) && (\n <nav class=\"nav-links\" aria-label=\"Your user account links\">\n <nano-nav-item\n class=\"nano-global-nav user-nav nano-global-nav-menu\"\n closeOnBlur={false}\n >\n {this.myAccountUser.name}\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-right\"\n ></nano-icon>\n <div slot=\"secondary\">\n <div class=\"content\">\n <button\n class=\"back-btn\"\n onClick={this.subMenuClose}\n >\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-left\"\n aria-label=\"go back\"\n role=\"img\"\n ></nano-icon>\n {this.myAccountUser.name}\n </button>\n {!!this.myAccountUser?.small_avatar_url && (\n <nano-global-nav-user-profile\n myAccountUser={this.myAccountUser}\n userProfileUrl={this.userProfileUrl}\n ></nano-global-nav-user-profile>\n )}\n <div class=\"content--sub\">\n <slot\n name=\"loggedin\"\n onSlotchange={this.assessSlottedContent}\n />\n {this.loggedInNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a href={link.address} target={link.target}>\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={\n this.myAccData.urls.forgot_password +\n this.ssoRedirect\n }\n >\n Change Password\n </a>\n </nano-nav-item>\n </div>\n </div>\n </div>\n </nano-nav-item>\n </nav>\n )}\n\n <slot\n name=\"promotion\"\n onSlotchange={this.assessSlottedContent}\n />\n\n {this.myAccData && this.myAccData.urls.logout && (\n <div class=\"login-btn logout-btn\">\n <a href={this.myAccData.urls.logout + this.ssoRedirect}>\n Logout\n </a>\n </div>\n )}\n </div>\n </div>\n </nav>\n {/* END BURGER / OVERFLOW MENU */}\n\n {/* START MAIN NAV BAR */}\n <div class=\"bars\" part=\"bars\">\n <nav\n part=\"main-bar\"\n class=\"main-bar\"\n aria-label=\"Main site navigation\"\n tabindex=\"-1\"\n ref={(div) => (this.mainBarDiv = div)}\n >\n {(this.hasPromotionSlot ||\n !!this.overflowSlotLen ||\n ((this.myAccData || !!this.iconSlotLen) &&\n this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.icon) ||\n (this.isLoggedIn &&\n (!!this.loggedInNavItms.length || this.hasLoggedinSlot) &&\n this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.login) ||\n (!!this.mainSlotLen &&\n this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.main) ||\n ((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.about) ||\n this.hasSiteSlot ||\n !!this.siteNavItms.length) && (\n <button\n class=\"menu-btn icon-btn\"\n onMouseDown={this.menuOpen}\n onKeyDown={this.onMenuBtnKeyDown}\n aria-expanded={this.modalOpen ? 'true' : 'false'}\n aria-controls=\"global-nav-menu\"\n ref={(btn) => (this.menuBtn = btn)}\n >\n <nano-icon\n name=\"light/bars\"\n aria-label=\"Open menu\"\n ></nano-icon>\n </button>\n )}\n\n {this.showLogo && (\n <a href={this.logoUrl} class=\"logo-link\" part=\"logo-link\">\n <img\n src={getAssetPath(`../nano-assets/ont-logo.svg`)}\n alt=\"Oxford Nanopore Technologies Logo\"\n class=\"logo\"\n />\n </a>\n )}\n {!this.showLogo && (\n <div class=\"logo-link\">\n <slot name=\"logo\" onSlotchange={this.assessSlottedContent} />\n </div>\n )}\n\n <div class=\"nav-links nav-links--main\">\n <slot name=\"main\" onSlotchange={this.assessSlottedContent} />\n </div>\n\n {/* search widget displayed in the bar (there is enough space to show it) */}\n {this.mainSlotLen === 0 &&\n this.threshold >= THRESHOLDLIMIT - THRESHOLDBREAKS.search && [\n this.showSearch && !!this.internalSearchIndeces.length && (\n <div\n class=\"search-widget\"\n role=\"combobox\"\n aria-owns=\"autocomplete-results\"\n aria-expanded={\n this.showAutocomplete && this.autocompleteResults\n ? 'true'\n : 'false'\n }\n >\n {searchWidget}\n </div>\n ),\n (!this.showSearch || !this.myAccData) &&\n !!this.searchSlotLen && (\n <slot\n name=\"search\"\n onSlotchange={this.assessSlottedContent}\n />\n ),\n ]}\n\n {/* Bar Icon buttons */}\n\n {/* Bar search icon button (when not enough to show search in bar) */}\n {(this.mainSlotLen > 0 ||\n this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.search) &&\n ((this.showSearch && !!this.internalSearchIndeces.length) ||\n !!this.searchSlotLen) && (\n <button\n class={{\n 'icon-btn': true,\n 'search-btn': true,\n 'search-btn--open': this.searchBarShown,\n }}\n aria-controls=\"global-nav-search-bar\"\n aria-expanded={this.searchBarShown ? 'true' : 'false'}\n onClick={this.onSearchBtnClick}\n >\n <nano-icon\n name=\"light/magnifying-glass\"\n role=\"img\"\n ariaLabel=\"Search Oxford Nanopore\"\n ></nano-icon>\n </button>\n )}\n\n {/* Bar cart and notifications */}\n {this.threshold >= THRESHOLDLIMIT - THRESHOLDBREAKS.icon && [\n !!this.iconSlotLen && <slot name=\"icon\" />,\n this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('icons')) && [\n this.msgUrl && (\n <a href={this.msgUrl} class=\"icon-btn\">\n <nano-icon\n name=\"light/bell\"\n ariaLabel=\"View your notifications\"\n ></nano-icon>\n {this.msgCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.msgCount}\n </span>\n )}\n </a>\n ),\n this.cartUrl && (\n <a href={this.cartUrl} class=\"icon-btn\">\n <nano-icon\n name=\"light/cart-shopping\"\n ariaLabel=\"View your shopping cart\"\n ></nano-icon>\n {this.cartCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.cartCount}\n </span>\n )}\n </a>\n ),\n ],\n ]}\n\n {/* Bar about links */}\n {(!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold >= THRESHOLDLIMIT - THRESHOLDBREAKS.about && (\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"About the company. Links\"\n role=\"menu\"\n >\n <slot\n name=\"about\"\n onSlotchange={this.assessSlottedContent}\n />\n {!!this.aboutNavItms.length && (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-bar\">\n <a\n href={this.aboutNavItms[0].address}\n target={this.aboutNavItms[0].target}\n >\n {this.aboutNavItms[0].title}\n </a>\n </nano-nav-item>\n )}\n </nav>\n )}\n\n {/* Bar login button / User panel */}\n {this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('loggedin')) &&\n this.threshold >= THRESHOLDLIMIT - THRESHOLDBREAKS.login && [\n this.myAccData.urls.login && (\n <a\n href={this.myAccData.urls.login + this.ssoRedirect}\n class=\"login-btn\"\n >\n Login / Register\n </a>\n ),\n this.myAccountUser && (\n <div class=\"user-links\">\n <button\n class={{\n 'icon-btn': true,\n 'user-links-btn': true,\n open: this.userMenuOpen,\n }}\n onMouseDown={this.onUserBtnClick}\n onKeyDown={this.onUserBtnKeyDown}\n >\n {' '}\n {this.myAccountUser.name}\n <nano-icon\n name=\"solid/caret-down\"\n ariaLabel=\"View your account links\"\n ></nano-icon>\n </button>\n <div\n class=\"user-links-panel\"\n tabindex=\"-1\"\n ref={(div) => (this.userLinkPanel = div)}\n >\n {!!this.myAccountUser?.small_avatar_url && (\n <nano-global-nav-user-profile\n myAccountUser={this.myAccountUser}\n userProfileUrl={this.userProfileUrl}\n ></nano-global-nav-user-profile>\n )}\n <div class=\"user-links-panel-content\">\n {this.loggedInNavItms.map((link) => {\n return (\n <a href={link.address} target={link.target}>\n {link.title}\n </a>\n );\n })}\n </div>\n <div class=\"user-links-panel-foot\">\n <a\n href={\n this.myAccData.urls.forgot_password +\n this.ssoRedirect\n }\n >\n Change Password\n </a>\n <a\n href={this.myAccData.urls.logout + this.ssoRedirect}\n >\n Logout\n </a>\n </div>\n </div>\n </div>\n ),\n ]}\n </nav>\n\n {/* Search widget shown in bar underneath main bar when there is not enough space */}\n {(this.mainSlotLen > 0 ||\n this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.search) && (\n <div\n id=\"global-nav-search-bar\"\n class={{\n 'search-bar': true,\n show: this.searchBarShown,\n }}\n aria-expanded={this.searchBarShown ? 'true' : 'false'}\n role=\"region\"\n tabindex=\"-1\"\n ref={(div) => (this.searchBarEl = div)}\n part=\"search-bar\"\n >\n <div class=\"search-widget\">\n {this.showSearch && !!this.internalSearchIndeces.length && (\n <div>{searchWidget}</div>\n )}\n {(!this.showSearch || !this.myAccData) &&\n !!this.searchSlotLen && (\n <slot\n name=\"search\"\n onSlotchange={this.assessSlottedContent}\n />\n )}\n </div>\n </div>\n )}\n </div>\n {/* END MAIN NAV BAR */}\n\n {/* BURGER MENU MOBILE MASK */}\n {(this.threshold < THRESHOLDLIMIT - THRESHOLDBREAKS.login ||\n this.menuFullScreen) && (\n <div\n class={{\n mask: true,\n open: this.modalOpen,\n }}\n onClick={this.menuClose}\n onTouchEnd={this.menuClose}\n ></div>\n )}\n </div>\n <div class=\"site-content\">\n <slot />\n </div>\n </Host>\n );\n }\n\n // Data processing\n\n /**\n * Finds a correct domain (as defined by myAccount data) for a given origin\n * @returns a domain string for this origin\n */\n private domainFor(origin: string): string {\n if (!this.myAccData) return '';\n const domain = this.myAccData.domains.find((dm) => dm.origin === origin);\n return domain ? domain.domain : '';\n }\n\n /**\n * process a set, or multiple sets of algolia results\n * and applies correct domain names / http protocol to each result's url\n * @returns results where partial paths are turned to full urls\n */\n private processSearchResults(results: AlgoliaMultiResults | AlgoliaResults) {\n const multiResults = results as AlgoliaMultiResults;\n const singleResult = results as AlgoliaResults;\n\n if (multiResults.results) {\n multiResults.results.forEach((result, i) => {\n multiResults.results[i] = this.processSearchResults(\n result\n ) as AlgoliaResults;\n });\n return multiResults;\n } else {\n singleResult.hits.map((hit) => {\n if (hit.url && !hit.url.match(/^http/))\n hit.url =\n location.protocol + '//' + this.domainFor(hit.origin) + hit.url;\n });\n return singleResult;\n }\n }\n\n /**\n * Ingests the data blob from myAccount; turns prescient fields to internal state\n */\n private processMyAccData() {\n if (!this.myAccData || !this.myAccData.search.indeces.length) return;\n\n if (this.myAccData.search.api_key)\n this.searchApiKey = this.myAccData.search.api_key;\n if (this.myAccData.search.app_id)\n this.searchAppId = this.myAccData.search.app_id;\n\n if (this.myAccData.cart.count) this.cartCount = this.myAccData.cart.count;\n if (this.myAccData.notifications.count)\n this.msgCount = this.myAccData.notifications.count;\n\n if (!this.searchAppId || !this.searchApiKey) return;\n this.internalSearchIndeces = [\n ...this.myAccData.search.indeces,\n ...this.searchIndeces,\n ];\n\n if (this.myAccData.urls.cart && !this.cartUrl)\n this.cartUrl = this.myAccData.urls.cart;\n if (this.myAccData.urls.messages && !this.msgUrl)\n this.msgUrl = this.myAccData.urls.messages;\n }\n\n /**\n * Ingests the data blob from myAccount links; applies prescient fields to internal state\n */\n private processMyAccLinks() {\n if (!this.myAccData.links || !this.myAccData.links.length) return;\n\n this.myAccData.links.forEach((link) => {\n switch (link.area) {\n case 'left-side-logged-in':\n case 'left-side-logged-out':\n if (\n this.activeMyAccountSections &&\n !this.activeMyAccountSections.includes('sites')\n )\n break;\n if (this.isLoggedIn && link.area === 'left-side-logged-in')\n this.siteNavItms.push(link);\n else if (!this.isLoggedIn && link.area === 'left-side-logged-out')\n this.siteNavItms.push(link);\n break;\n case 'right-side-logged-in':\n case 'right-side-logged-out':\n if (\n this.activeMyAccountSections &&\n !this.activeMyAccountSections.includes('about')\n )\n break;\n if (this.isLoggedIn && link.area === 'right-side-logged-in')\n this.aboutNavItms.push(link);\n else if (!this.isLoggedIn && link.area === 'right-side-logged-out')\n this.aboutNavItms.push(link);\n break;\n case 'profile-panel-list':\n if (\n this.activeMyAccountSections &&\n !this.activeMyAccountSections.includes('loggedin')\n )\n break;\n this.loggedInNavItms.push(link);\n break;\n }\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}