@nanoporetech-digital/components 2.1.4 → 2.2.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 (184) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/dist/cjs/index-cb62df44.js +5 -0
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/nano-alert.cjs.entry.js.map +1 -1
  6. package/dist/cjs/nano-checkbox.cjs.entry.js.map +1 -1
  7. package/dist/cjs/nano-components.cjs.js +1 -1
  8. package/dist/cjs/nano-datalist_3.cjs.entry.js.map +1 -1
  9. package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
  10. package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
  11. package/dist/cjs/nano-dialog.cjs.entry.js.map +1 -1
  12. package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
  13. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  14. package/dist/cjs/nano-global-search-results.cjs.entry.js.map +1 -1
  15. package/dist/cjs/nano-hero.cjs.entry.js.map +1 -1
  16. package/dist/cjs/nano-icon-button.cjs.entry.js.map +1 -1
  17. package/dist/cjs/nano-menu-drawer.cjs.entry.js.map +1 -1
  18. package/dist/cjs/nano-rating.cjs.entry.js.map +1 -1
  19. package/dist/cjs/nano-split-pane.cjs.entry.js +284 -0
  20. package/dist/cjs/nano-split-pane.cjs.entry.js.map +1 -0
  21. package/dist/cjs/nano-tab-group.cjs.entry.js +1 -0
  22. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  23. package/dist/cjs/nano-tab.cjs.entry.js +1 -1
  24. package/dist/cjs/nano-tab.cjs.entry.js.map +1 -1
  25. package/dist/collection/collection-manifest.json +1 -0
  26. package/dist/collection/components/accordion/accordion.js +1 -1
  27. package/dist/collection/components/alert/alert.js +1 -1
  28. package/dist/collection/components/algolia/algolia-filter.js +2 -2
  29. package/dist/collection/components/algolia/algolia-input.js +5 -5
  30. package/dist/collection/components/algolia/algolia-results.js +1 -1
  31. package/dist/collection/components/algolia/algolia.js +6 -6
  32. package/dist/collection/components/checkbox/checkbox-group.js +2 -2
  33. package/dist/collection/components/checkbox/checkbox.js +3 -3
  34. package/dist/collection/components/datalist/datalist.css +1 -1
  35. package/dist/collection/components/datalist/datalist.js +1 -1
  36. package/dist/collection/components/date-input/date-input.js +7 -7
  37. package/dist/collection/components/date-picker/date-picker.js +5 -5
  38. package/dist/collection/components/details/details.js +1 -1
  39. package/dist/collection/components/dialog/dialog.js +1 -1
  40. package/dist/collection/components/file-upload/file-upload.js +4 -4
  41. package/dist/collection/components/global-nav/global-nav.js +4 -4
  42. package/dist/collection/components/grid/grid-item.js +1 -1
  43. package/dist/collection/components/icon/icon.js +1 -1
  44. package/dist/collection/components/input/input.js +5 -5
  45. package/dist/collection/components/nav-item/nav-item.js +4 -4
  46. package/dist/collection/components/range/range.js +4 -4
  47. package/dist/collection/components/resize-observe/resize-observe.js +1 -1
  48. package/dist/collection/components/select/select.js +7 -7
  49. package/dist/collection/components/slides/slides.js +7 -7
  50. package/dist/collection/components/split-pane/split-pane.css +104 -0
  51. package/dist/collection/components/split-pane/split-pane.js +479 -0
  52. package/dist/collection/components/split-pane/split-pane.js.map +1 -0
  53. package/dist/collection/components/tabs/tab-group.js +3 -2
  54. package/dist/collection/components/tabs/tab-group.js.map +1 -1
  55. package/dist/collection/components/tabs/tab.js +1 -1
  56. package/dist/collection/components/tabs/tab.js.map +1 -1
  57. package/dist/collection/utils/drag.js +21 -0
  58. package/dist/collection/utils/drag.js.map +1 -0
  59. package/dist/components/datalist.js.map +1 -1
  60. package/dist/components/icon-button.js.map +1 -1
  61. package/dist/components/menu.js.map +1 -1
  62. package/dist/components/nano-alert.js.map +1 -1
  63. package/dist/components/nano-checkbox.js.map +1 -1
  64. package/dist/components/nano-date-input.js.map +1 -1
  65. package/dist/components/nano-details.js.map +1 -1
  66. package/dist/components/nano-dialog.js.map +1 -1
  67. package/dist/components/nano-file-upload.js.map +1 -1
  68. package/dist/components/nano-global-nav.js.map +1 -1
  69. package/dist/components/nano-global-search-results.js.map +1 -1
  70. package/dist/components/nano-hero.js.map +1 -1
  71. package/dist/components/nano-menu-drawer.js.map +1 -1
  72. package/dist/components/nano-rating.js.map +1 -1
  73. package/dist/components/nano-split-pane.d.ts +11 -0
  74. package/dist/components/nano-split-pane.js +315 -0
  75. package/dist/components/nano-split-pane.js.map +1 -0
  76. package/dist/components/nano-tab-group.js +1 -0
  77. package/dist/components/nano-tab-group.js.map +1 -1
  78. package/dist/components/nano-tab.js +1 -1
  79. package/dist/components/nano-tab.js.map +1 -1
  80. package/dist/components/option.js.map +1 -1
  81. package/dist/custom-elements/index.d.ts +6 -0
  82. package/dist/custom-elements/index.js +280 -5
  83. package/dist/custom-elements/index.js.map +1 -1
  84. package/dist/esm/index-5f8d16e7.js +5 -0
  85. package/dist/esm/loader.js +1 -1
  86. package/dist/esm/nano-alert.entry.js.map +1 -1
  87. package/dist/esm/nano-checkbox.entry.js.map +1 -1
  88. package/dist/esm/nano-components.js +1 -1
  89. package/dist/esm/nano-datalist_3.entry.js.map +1 -1
  90. package/dist/esm/nano-date-input.entry.js.map +1 -1
  91. package/dist/esm/nano-details.entry.js.map +1 -1
  92. package/dist/esm/nano-dialog.entry.js.map +1 -1
  93. package/dist/esm/nano-file-upload.entry.js.map +1 -1
  94. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  95. package/dist/esm/nano-global-search-results.entry.js.map +1 -1
  96. package/dist/esm/nano-hero.entry.js.map +1 -1
  97. package/dist/esm/nano-icon-button.entry.js.map +1 -1
  98. package/dist/esm/nano-menu-drawer.entry.js.map +1 -1
  99. package/dist/esm/nano-rating.entry.js.map +1 -1
  100. package/dist/esm/nano-split-pane.entry.js +280 -0
  101. package/dist/esm/nano-split-pane.entry.js.map +1 -0
  102. package/dist/esm/nano-tab-group.entry.js +1 -0
  103. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  104. package/dist/esm/nano-tab.entry.js +1 -1
  105. package/dist/esm/nano-tab.entry.js.map +1 -1
  106. package/dist/esm-es5/index-5f8d16e7.js +1 -1
  107. package/dist/esm-es5/loader.js +1 -1
  108. package/dist/esm-es5/loader.js.map +1 -1
  109. package/dist/esm-es5/nano-alert.entry.js.map +1 -1
  110. package/dist/esm-es5/nano-checkbox.entry.js.map +1 -1
  111. package/dist/esm-es5/nano-components.js +1 -1
  112. package/dist/esm-es5/nano-components.js.map +1 -1
  113. package/dist/esm-es5/nano-datalist_3.entry.js.map +1 -1
  114. package/dist/esm-es5/nano-date-input.entry.js.map +1 -1
  115. package/dist/esm-es5/nano-details.entry.js.map +1 -1
  116. package/dist/esm-es5/nano-dialog.entry.js.map +1 -1
  117. package/dist/esm-es5/nano-file-upload.entry.js.map +1 -1
  118. package/dist/esm-es5/nano-global-nav.entry.js.map +1 -1
  119. package/dist/esm-es5/nano-global-search-results.entry.js.map +1 -1
  120. package/dist/esm-es5/nano-hero.entry.js.map +1 -1
  121. package/dist/esm-es5/nano-icon-button.entry.js.map +1 -1
  122. package/dist/esm-es5/nano-menu-drawer.entry.js.map +1 -1
  123. package/dist/esm-es5/nano-rating.entry.js.map +1 -1
  124. package/dist/esm-es5/nano-split-pane.entry.js +5 -0
  125. package/dist/esm-es5/nano-split-pane.entry.js.map +1 -0
  126. package/dist/esm-es5/nano-tab-group.entry.js +1 -1
  127. package/dist/esm-es5/nano-tab-group.entry.js.map +1 -1
  128. package/dist/esm-es5/nano-tab.entry.js +2 -2
  129. package/dist/esm-es5/nano-tab.entry.js.map +1 -1
  130. package/dist/nano-components/nano-components.css +1 -1
  131. package/dist/nano-components/nano-components.esm.js +1 -1
  132. package/dist/nano-components/nano-components.esm.js.map +1 -1
  133. package/dist/nano-components/{p-e35eac75.entry.js → p-08b43111.entry.js} +2 -2
  134. package/dist/nano-components/p-08b43111.entry.js.map +1 -0
  135. package/dist/nano-components/p-090f22a9.system.entry.js.map +1 -1
  136. package/dist/nano-components/p-096682d9.system.js +1 -1
  137. package/dist/nano-components/p-096682d9.system.js.map +1 -1
  138. package/dist/nano-components/{p-e6f8f9f7.system.entry.js → p-1238f0fc.system.entry.js} +2 -2
  139. package/dist/nano-components/p-1238f0fc.system.entry.js.map +1 -0
  140. package/dist/nano-components/p-1e974cad.entry.js.map +1 -1
  141. package/dist/nano-components/p-1ec44caf.entry.js.map +1 -1
  142. package/dist/nano-components/p-1f99d776.entry.js.map +1 -1
  143. package/dist/nano-components/p-20db18f3.entry.js.map +1 -1
  144. package/dist/nano-components/p-3456db01.entry.js.map +1 -1
  145. package/dist/nano-components/p-3ad1d5aa.system.entry.js.map +1 -1
  146. package/dist/nano-components/{p-3cf35ac4.system.entry.js → p-3f736fa2.system.entry.js} +2 -2
  147. package/dist/nano-components/p-3f736fa2.system.entry.js.map +1 -0
  148. package/dist/nano-components/p-4429caac.system.entry.js.map +1 -1
  149. package/dist/nano-components/p-531d5275.system.entry.js.map +1 -1
  150. package/dist/nano-components/p-56ba0d63.entry.js.map +1 -1
  151. package/dist/nano-components/p-58419bed.system.entry.js.map +1 -1
  152. package/dist/nano-components/p-5a476bba.system.entry.js.map +1 -1
  153. package/dist/nano-components/p-6afdb510.system.entry.js.map +1 -1
  154. package/dist/nano-components/p-71c26ace.entry.js.map +1 -1
  155. package/dist/nano-components/p-730f60ea.entry.js.map +1 -1
  156. package/dist/nano-components/p-7d2e2685.entry.js.map +1 -1
  157. package/dist/nano-components/p-8a8f893b.system.entry.js.map +1 -1
  158. package/dist/nano-components/p-93448bcd.system.entry.js.map +1 -1
  159. package/dist/nano-components/p-94593617.system.entry.js.map +1 -1
  160. package/dist/nano-components/{p-bbe6b7af.entry.js → p-ad0715d1.entry.js} +2 -2
  161. package/dist/nano-components/p-ad0715d1.entry.js.map +1 -0
  162. package/dist/nano-components/p-b59d2bd5.entry.js.map +1 -1
  163. package/dist/nano-components/p-c0ddb4c3.entry.js.map +1 -1
  164. package/dist/nano-components/p-d628547b.entry.js +5 -0
  165. package/dist/nano-components/p-d628547b.entry.js.map +1 -0
  166. package/dist/nano-components/p-d6569144.entry.js.map +1 -1
  167. package/dist/nano-components/p-d87ebf95.system.entry.js +5 -0
  168. package/dist/nano-components/p-d87ebf95.system.entry.js.map +1 -0
  169. package/dist/nano-components/p-e11bd40d.entry.js.map +1 -1
  170. package/dist/nano-components/p-e15be516.system.entry.js.map +1 -1
  171. package/dist/nano-components/p-ef4e0912.system.entry.js.map +1 -1
  172. package/dist/nano-components/p-f2e7d2f9.system.entry.js.map +1 -1
  173. package/dist/themes/nanopore.css +1 -1
  174. package/dist/themes/nanopore.css.map +1 -1
  175. package/dist/types/components/split-pane/split-pane.d.ts +76 -0
  176. package/dist/types/components.d.ts +89 -0
  177. package/dist/types/utils/drag.d.ts +1 -0
  178. package/docs-json.json +309 -2
  179. package/docs-vscode.json +53 -0
  180. package/package.json +8 -6
  181. package/dist/nano-components/p-3cf35ac4.system.entry.js.map +0 -1
  182. package/dist/nano-components/p-bbe6b7af.entry.js.map +0 -1
  183. package/dist/nano-components/p-e35eac75.entry.js.map +0 -1
  184. package/dist/nano-components/p-e6f8f9f7.system.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"file":"nano-global-nav.entry.js","mappings":"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","names":["algoliasearch"],"sources":["./src/utils/fetch.ts","./src/components/global-nav/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","@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/layers';\n\n:host {\n /**\n * @prop --padding: padding used for many elements. Defaults to '12px 0'.\n * @prop --padding-top: top padding used for many elements. Defaults to --padding.\n * @prop --padding-bottom: bottom padding used for many elements. Defaults to --padding.\n * @prop --padding-end: end (left on l2r / right on r2l) padding used for many elements. Defaulst to --padding.\n * @prop --padding-start: start (right on l2r / left on r2l) padding used for many elements. Defaults to --padding.\n * @prop --bar-background: Background of the bar element. Defaults to rgb(17, 85, 113).\n * @prop --bar-text-color: Text color within the bar element. Defaults to white.\n * @prop --bar-color-shade: Color variant used within the bar element. Defaults to rgb(40, 110, 133).\n * @prop --bar-color-tint: Color variant used within the bar element. Defaults to rgb(88, 140, 161).\n * @prop --bar-color-focus: Focus color of the form element within search. Defaults to #90c6e7;\n * @prop --bar-color-focus: Focus color of the form element within search. Defaults to #90c6e7;\n * @prop --menu-background: Background 'burger', menu element. Defaults to #001a21;\n * @prop --menu-text-color: Text color 'burger', menu element. Defaults to white;\n */\n --padding: 12px;\n --padding-top: var(--padding);\n --padding-end: var(--padding);\n --padding-bottom: var(--padding);\n --padding-start: var(--padding);\n --bar-background: #005c75;\n --bar-text-color: white;\n --bar-color-shade: rgb(19, 89, 111);\n --bar-color-tint: rgb(19, 89, 111);\n --bar-color-focus: #90c6e7;\n --menu-background: #001a21;\n --menu-text-color: white;\n --menu-dropdown-bg: #196c82;\n --menu-dropdown-color: white;\n\n display: block;\n position: relative;\n line-height: 1.5;\n height: 100%;\n\n * {\n box-sizing: inherit;\n }\n}\n\n// Common\n.global-nav {\n @include text-inherit();\n\n font-size: 0.88em;\n z-index: #{$layer-index-menubar};\n\n button {\n background: none;\n color: inherit;\n border: none;\n padding: 0;\n }\n\n .icon-btn {\n position: relative;\n background: none;\n color: inherit;\n border: none;\n align-self: normal;\n padding: 9px 7px;\n cursor: pointer;\n display: flex;\n align-items: center;\n\n nano-icon {\n width: 18px;\n height: 18px;\n }\n }\n\n ::slotted(nano-nav-item[slot='icon']) {\n --padding-top: 9px;\n --padding-bottom: 9px;\n --padding-start: 7px;\n --padding-end: 7px;\n --display: flex;\n\n font-size: 18px;\n }\n\n a {\n color: inherit;\n text-decoration: none;\n white-space: nowrap;\n }\n\n .nav-links {\n &_title {\n margin: 8px 0 3px;\n }\n\n ul {\n margin: 0;\n padding: 0;\n }\n\n li {\n list-style: none;\n }\n }\n\n .login-btn {\n display: flex;\n align-items: center;\n font-size: 0.94em;\n }\n\n .menu-btn {\n padding: 9px var(--padding) 9px var(--padding);\n }\n}\n\n// Popup / Slideout Menu\n.gn-menu {\n position: fixed;\n top: 0;\n left: 0;\n z-index: -1;\n display: none;\n transition: z-index 0.01s ease 0.2s;\n height: 100vh;\n width: 100vw;\n overflow-y: auto;\n\n @include rtl-host() {\n left: auto;\n right: 0;\n }\n\n :host(.threshold-2) & {\n position: absolute;\n width: calc(100vw - 20px);\n }\n\n &.menu-full-screen {\n width: 100vw !important;\n }\n\n // &.secondary-open {\n // overflow-y: hidden;\n // }\n\n &_wrap {\n max-width: 92vw;\n width: 335px;\n background: var(--menu-background);\n color: var(--menu-text-color);\n padding: var(--padding) 0;\n box-shadow: 0 0 36px 0 rgba(0, 0, 0, 0.8);\n position: relative;\n pointer-events: all;\n margin-bottom: 36px;\n opacity: 0;\n outline: none;\n transition: transform 0.2s ease, opacity 0.2s ease;\n\n &.has-promotion {\n padding: var(--padding) 0 0;\n }\n }\n\n &.open {\n z-index: #{$layer-index-dropdown};\n transition: z-index 0.01s ease;\n\n .gn-menu_wrap {\n opacity: 1;\n transform: translate3d(0, 0, 0) !important;\n transition: transform 0.2s ease 0.01s, opacity 0.2s ease 0.01s;\n }\n }\n\n &_actions {\n @include padding(null, calc(var(--padding) / 2), null, null);\n\n display: flex;\n justify-content: space-between;\n\n &-counter {\n background: #d0021b;\n color: #fff;\n position: absolute;\n bottom: 4px;\n right: 0;\n left: auto;\n font-size: 9px;\n height: 14px;\n line-height: 14px;\n width: auto;\n min-width: 14px;\n border-radius: 50%;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n text-align: center;\n text-indent: 0;\n }\n }\n\n .content {\n &-wrap {\n position: relative;\n overflow: hidden;\n transition: 0.2s ease min-height;\n min-height: 190px;\n }\n\n &--sub {\n padding: var(--padding) 0 var(--padding) 7px;\n }\n }\n\n .menu-btn {\n @include margin(null, auto, null, null);\n }\n\n .nav-links {\n display: flex;\n flex-wrap: wrap;\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n --icon-size: 14px;\n --display: inline-block;\n --secondary-bg-color: #001a21;\n --padding-top: 10px;\n --padding-bottom: 10px;\n --padding-end: calc(var(--padding) * 2);\n --padding-start: calc(var(--padding) + 3px);\n --color: white;\n --color-hover: #{$color-lightblue};\n --bg-color-hover: transparent;\n --bg-color-focus: #002530;\n --focus-outline: none;\n\n font-size: 0.99em;\n width: 100%;\n // margin: 0 0;\n }\n\n .user-nav {\n --bg-color: #193037;\n --padding-top: 9px;\n --padding-bottom: 9px;\n\n font-weight: bold;\n margin: 5px 0 0;\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n font-weight: 500;\n\n --bg-color: transparent;\n }\n }\n\n &_title {\n margin: 0 var(--padding) 4px;\n border-bottom: 1px solid #33484d;\n padding-bottom: 8px;\n font-size: 0.86em;\n text-transform: uppercase;\n color: $color-lightblue;\n letter-spacing: 1px;\n font-weight: 700;\n }\n\n &-wrap {\n margin: 18px 0;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n .back-btn {\n border-top: 1px solid #33484d;\n border-bottom: 1px solid #33484d;\n display: flex;\n align-items: center;\n padding: 10px 11px 10px 0;\n width: 100%;\n font-size: 12px;\n text-transform: uppercase;\n color: $color-lightblue;\n letter-spacing: 1px;\n font-weight: 700;\n\n nano-icon {\n @include margin(null, 10px, null, null);\n\n font-size: 12px;\n color: white;\n }\n }\n\n &--sub {\n display: flex;\n flex-wrap: wrap;\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n --border-bottom: none;\n --padding-end: var(--padding);\n --padding-start: var(--padding);\n --padding-top: 8px;\n --padding-bottom: 8px;\n\n margin: 0;\n width: 50%;\n line-height: 1.8;\n }\n }\n\n .content {\n padding: 8px var(--padding);\n }\n }\n\n .login-btn {\n @include padding(9px, var(--padding), 9px, 7px);\n\n nano-icon {\n @include margin(null, null, null, 10px);\n }\n }\n\n .logout-btn {\n justify-content: flex-end;\n\n a {\n padding: 0 5px;\n }\n }\n}\n\n// Main Bar\n.sticker-trigger {\n background: var(--bar-background);\n width: 100%;\n z-index: calc(#{$layer-index-menubar} + 1);\n}\n\n.bars {\n color: var(--bar-text-color);\n z-index: #{$layer-index-menubar};\n position: relative;\n max-width: 100%;\n min-width: 100%;\n box-shadow: none;\n transition: 0.2s ease box-shadow;\n\n [stuck] & {\n box-shadow: 0 1px 25px 0 rgba(0, 0, 0, 0.15);\n }\n\n &::before {\n content: '';\n width: 100%;\n height: 100%;\n z-index: -1;\n background: var(--bar-background);\n position: absolute;\n }\n\n .search {\n &-widget {\n @include margin(null, auto, null, 11px);\n\n position: relative;\n flex: 1 1 auto;\n max-width: 45vw;\n min-width: 269px;\n max-height: 36px;\n }\n\n &-inputs {\n display: flex;\n margin: 0;\n\n input[type='submit'] {\n display: none;\n }\n }\n\n &-autocomplete {\n position: absolute;\n top: calc(100% - 2px);\n width: 100%;\n left: 0;\n background: white;\n border: 2px solid var(--bar-color-tint);\n border-radius: 0 0 5px 5px;\n color: $color-black;\n font-size: 0.85em;\n padding: calc(var(--padding) / 2) 0 1px 0;\n z-index: 1;\n\n @include rtl-host() {\n left: auto;\n right: 0;\n }\n\n &-hit {\n padding:\n calc(var(--padding) / 4) var(--padding)\n calc(var(--padding) / 4) var(--padding);\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: block;\n text-align: left;\n line-height: 1.5;\n cursor: pointer;\n\n @include rtl-host() {\n text-align: right;\n }\n\n &-scope {\n font-size: 0.76em;\n // text-indent: 10px;\n color: rgb(167, 176, 179);\n font-weight: 600;\n }\n\n &:hover,\n &:focus {\n background-color: $color-lightgrey;\n }\n\n .search__highlight,\n em {\n font-weight: bold;\n font-style: normal;\n }\n\n &--no-result {\n &:hover,\n &:focus {\n background: none !important;\n }\n }\n }\n\n &-foot {\n margin: 7px 0 0;\n }\n\n &-submit {\n background: none;\n border: none;\n align-self: normal;\n padding: 9px var(--padding);\n cursor: pointer;\n display: flex;\n align-items: center;\n color: $color-blue;\n justify-content: flex-end;\n width: 100%;\n text-decoration: underline;\n border-top: 1px solid rgb(232, 234, 234);\n\n &:hover,\n &:focus {\n background-color: $color-lightgrey;\n }\n }\n }\n }\n\n .search-input {\n --input-border-style: solid 1px rgb(85, 140, 157);\n --input-border-style--focus: solid 1px var(--bar-color-focus, #90c6e7);\n --input-border-width: 1px;\n\n font-size: 0.9em;\n }\n\n nano-select.search-input {\n --input-bg-color: var(--bar-color-tint, rgb(88, 140, 161));\n --input-text-color: inherit;\n --input-border-radius: 5px 0 0 5px;\n\n flex: 0 1 auto;\n width: auto;\n display: flex;\n align-items: center;\n flex-direction: column;\n position: relative;\n left: 1px;\n\n @include rtl-host() {\n --input-border-radius: 0 5px 5px 0;\n }\n\n :host(:not(.ready)) & {\n overflow: hidden;\n max-height: 1em;\n }\n\n .down-arrow {\n font-size: 0.65em;\n }\n }\n\n nano-input.search-input {\n --input-text-color: inherit;\n --input-bg-color: var(--bar-color-shade, rgb(40, 110, 133));\n --clear-btn-color: #{$color-black};\n --input-border-radius: 0 5px 5px 0;\n --placeholder-color: white;\n\n width: 206px;\n display: flex;\n align-items: center;\n flex-direction: column;\n flex: 1;\n\n @include rtl-host() {\n --input-border-radius: 5px 0 0 5px;\n }\n\n :host(:not(.ready)) & {\n overflow: hidden;\n max-height: 1em;\n }\n\n &.has-value {\n --input-bg-color: #{$color-white};\n --input-text-color: #{$color-black};\n\n .search-icon {\n color: #{$color-black};\n }\n }\n\n .search-icon {\n background: none;\n color: white;\n padding: 0 8px;\n display: none;\n\n &--show {\n display: flex;\n }\n\n &--loader {\n animation: spin 1s linear infinite;\n\n @keyframes spin {\n 100% {\n transform: rotate(360deg);\n }\n }\n }\n\n nano-icon {\n height: 1.4em;\n }\n }\n }\n}\n\n.main-bar {\n width: 100%;\n\n @include padding(var(--padding), var(--padding), var(--padding), 0);\n\n display: flex;\n align-items: center;\n justify-content: space-between;\n overflow-x: hidden;\n\n &:focus {\n outline: none;\n }\n\n :host(.ready) & {\n overflow-x: visible;\n }\n\n > *,\n ::slotted(*) {\n transition: opacity 0.2s ease;\n\n :host(:not(.ready)) & {\n opacity: 0 !important;\n }\n\n :host(.ready) & {\n opacity: 1;\n }\n\n :host(.resizing) & {\n opacity: 0 !important;\n }\n }\n\n > * {\n flex: 0 0 auto;\n\n ::slotted(nano-nav-item[slot='icon']) {\n @include margin(null, null, null, 11px);\n }\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n --color-hover: #{$color-lightgrey};\n --secondary-bg-color: var(--menu-dropdown-bg);\n --secondary-color: var(--menu-dropdown-color);\n --bg-color-open: var(--bar-background);\n\n text-decoration: none !important;\n }\n }\n\n .icon-btn {\n @include margin(0, null, 0, 6px);\n\n :host(.threshold-2) & {\n @include margin(0, null, 0, 11px);\n }\n }\n\n .menu-btn.icon-btn {\n margin: 0 !important;\n\n @include ltr-host() {\n border-right: 1.5px solid var(--bar-color-shade);\n }\n\n @include rtl-host() {\n border-left: 1.5px solid var(--bar-color-shade);\n }\n }\n\n .user-links {\n position: relative;\n\n .icon-btn {\n @include padding(null, 0, null, null);\n\n font-size: 0.93em;\n font-weight: 500;\n\n nano-icon {\n @include margin(null, null, null, 5px);\n\n width: 16px;\n height: 16px;\n transform-origin: center;\n transition: transform 0.2s ease, color 0.2s ease;\n }\n\n &.open {\n nano-icon {\n transform: rotate(180deg);\n color: $color-blue;\n }\n }\n }\n\n &-panel {\n display: none;\n position: absolute;\n border-radius: 4px 0 4px 4px;\n box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.4);\n background-color: #568c9d;\n opacity: 0;\n transform: translate3d(0, 24px, 0);\n transition: transform 0.2s ease, opacity 0.2s ease;\n right: 0;\n font-size: 0.85em;\n min-width: 250px;\n z-index: 1;\n\n @include rtl-host() {\n right: auto;\n left: 0;\n }\n\n &:focus {\n outline: none;\n }\n\n &.show {\n opacity: 1;\n transform: translate3d(0, 4px, 0);\n }\n\n &-content {\n padding: 0 18px;\n display: flex;\n flex-direction: column;\n\n a {\n padding: 11px 0;\n border-bottom: #669dac 1px solid;\n\n &:hover,\n &:focus {\n color: $color-darkgrey;\n }\n\n &:last-child {\n border-bottom: none;\n }\n }\n }\n\n &-foot {\n background-color: #aac5cd;\n border-radius: 0 0 4px 4px;\n padding: var(--padding);\n color: #455556;\n display: flex;\n align-items: center;\n font-weight: 500;\n justify-content: space-between;\n\n a:hover {\n text-decoration: underline;\n }\n }\n }\n }\n\n .logo {\n height: 34px;\n width: auto;\n min-width: 196px;\n\n :host(:not(.threshold-1)) & {\n height: 30px;\n }\n }\n\n .logo-link {\n @include margin(null, auto, null, 0);\n @include padding(null, 11px, null, 11px);\n\n display: flex;\n align-items: center;\n border: none;\n }\n\n .nav-links {\n font-size: 0.86em;\n flex: 1 0 auto;\n display: flex;\n justify-content: space-around;\n\n ul {\n display: flex;\n justify-content: space-around;\n }\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n --padding-top: 7px;\n --padding-bottom: 7px;\n --padding-end: 2px;\n --padding-start: 2px;\n --margin: 0 11px;\n }\n\n &--main {\n font-weight: bold;\n justify-content: flex-start;\n\n ::slotted(nano-nav-item) {\n --color: white;\n --padding-end: 6px;\n --padding-start: 6px;\n }\n }\n\n &--sub {\n @include margin(null, null, null, 6px);\n\n --color: #e2e2e2;\n\n justify-content: flex-end;\n }\n }\n\n .login-btn {\n display: inline-block;\n border-radius: 4px;\n background-color: #17bb75;\n color: #fff;\n padding: 3px 10px;\n position: relative;\n left: auto;\n bottom: auto;\n\n @include margin(null, 0, null, 11px);\n }\n\n .measure-ele {\n min-width: 1px;\n display: block;\n margin: 0;\n padding: 0;\n }\n}\n\n.search-bar {\n height: 0;\n overflow: hidden;\n transition: 0.2s ease height;\n padding: 0 var(--padding);\n outline: none;\n\n .search-widget {\n @include margin(0, 0, 0, 0);\n\n overflow: inherit;\n max-width: none;\n max-height: none;\n padding: 0 0 var(--padding);\n }\n\n .search-inputs {\n padding: 0 0;\n margin: 0 0;\n }\n\n .search-autocomplete {\n top: calc(100% - (var(--padding) + 1px));\n }\n}\n\n.site-content {\n display: flex;\n transition: min-height 0.2s ease;\n min-height: calc(100% - 61px);\n position: relative;\n z-index: auto;\n align-items: stretch;\n}\n\n.mask {\n opacity: 0;\n background: rgba(0, 0, 0, 0.3);\n position: fixed;\n left: 0;\n right: 0;\n top: 0;\n height: 100vh;\n z-index: -1;\n transition:\n transform 0.2s ease,\n opacity 0.2s ease,\n visibility 0.01s ease 0.2s,\n z-index 0.01s ease 0.2s;\n visibility: hidden;\n\n &.open {\n opacity: 1;\n transition:\n z-index 0.01s ease,\n visibility 0.01s ease,\n transform 0.2s ease 0.01s,\n opacity 0.2s ease 0.01s;\n z-index: 3;\n visibility: visible;\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, { SearchClient as AlgoliaClient } from 'algoliasearch';\nimport { debounce, closestElement, displayTransition } from '../../utils';\nimport { clientFetch } from '../../utils/fetch';\nimport {\n InputChangeEventDetail,\n SelectChangeEventDetail,\n AlgoliaResults,\n SearchIndex,\n MyAccountLink,\n AloliaSearchResultDetail,\n AlgoliaMultiResult,\n MyAccountUser,\n NavItemEventDetail,\n AlgoliaResultHit,\n AlgoliaNetworkError,\n AlgoliaMultiResults,\n} from '../../interface';\nimport { ComponentStore } from '../../utils/store/component-store';\n\ninterface MyAccountData {\n user: MyAccountUser;\n cart: {\n count: number;\n url: string;\n };\n notifications: { count: number };\n hs: { lists?: Array<number> };\n registration: { next_url: string | null };\n links: null | MyAccountLink[];\n urls: {\n forgot_password: string | null;\n logout: string | null;\n login: string | null;\n messages: string | null;\n cart: string | null;\n };\n domains: [\n {\n origin: string;\n domain: string;\n }\n ];\n search: {\n app_id: string;\n api_key: string;\n indeces: [\n {\n index: string;\n name: string;\n domain: string;\n all_group?: boolean;\n filters?: [string];\n }\n ];\n };\n}\n\nconst THRESHOLDLIMIT = 5;\n/**\n * Nanopore digital global navigation and search bar.\n * Incorporates MyAccount / SSO states (messages / cart / user name etc).\n * Incorporates Algolia search.\n * GlobalNav is designed to be at the root of the `<body>`.\n * There should only be one <nano-global-nav> in the DOM.\n * The following demo uses static data.\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 */\n@Component({\n tag: 'nano-global-nav',\n styleUrl: 'global-nav.scss',\n shadow: true,\n assetsDirs: ['assets'],\n})\nexport class GlobalNav implements ComponentInterface {\n // position and dimension state\n private io: IntersectionObserver;\n private debounceResize: () => {};\n private debounceSetResizingState: () => {};\n private currSize: number = 0;\n private thresholdsGoingUp: boolean = false;\n\n // menu\n private menuDiv: HTMLElement;\n private menuBtn: HTMLButtonElement;\n private menuWrapDiv: HTMLDivElement;\n private menuContentDiv: HTMLDivElement;\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 barsDiv: HTMLDivElement;\n private siteContent: HTMLDivElement;\n private userLinkPanel: HTMLDivElement;\n private isLoggedIn: boolean = false;\n\n private myAccData: MyAccountData = null;\n\n // myaccount links\n private aboutNavItms: MyAccountLink[] = [];\n private siteNavItms: MyAccountLink[] = [];\n private loggedInNavItms: MyAccountLink[] = [];\n\n // has slot tests\n private mo?: MutationObserver;\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 @State() internalSearchIndeces: Array<SearchIndex> = [];\n @State() thresholdReady: boolean = false;\n @State() remoteDataReady: boolean = false;\n @State() ready: boolean = false;\n @State() isResizing: boolean = false;\n @State() intersectRatio: number;\n @State() threshold: number = THRESHOLDLIMIT;\n @State() modalOpen: boolean = false;\n @State() modalIsOpen: boolean = false;\n @State() searchBarShown: boolean = false;\n @State() scrollingUp: boolean = true;\n @State() searchLoading: boolean = false;\n @State() showAutocomplete: boolean = false;\n @State() secondaryMenuOpen: boolean = false;\n @State() userMenuOpen: boolean = false;\n @State() menuFullScreen: boolean = false;\n @State() searchValInternal: string = '';\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 */\n @Prop() env: 'local' | 'dev' | 'test' | 'prod' = 'prod';\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: {\n id: string | null;\n name: string | null;\n first_name: string | null;\n last_name: string | null;\n email: string | null;\n company: string | null;\n lifecycle_stage: string | null;\n indirect_customer: boolean;\n } = 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 programatically get or to preload search results\n */\n @Prop({ mutable: true }) searchValue: string = '';\n\n /**\n * Algolia search index to programatically set or to set an initial index\n */\n @Prop({ mutable: true }) searchIndex: string = 'all_prod_en';\n\n /**\n * MyAccount store cart count.\n */\n @Prop({ mutable: true }) cartCount: number = 0;\n\n /**\n * MyAccount undread 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<AloliaSearchResultDetail>;\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<AloliaSearchResultDetail>;\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 @Watch('searchIndex')\n currentSelectedIndex() {\n if (!this.internalSearchIndeces.length) {\n return;\n }\n\n let foundIndex = this.internalSearchIndeces.find(\n (index) => index.index === 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\n @Watch('searchIndeces')\n addIndeces() {\n this.internalSearchIndeces = [\n ...this.internalSearchIndeces,\n ...this.searchIndeces,\n ];\n }\n\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].index;\n }\n\n @Watch('threshold')\n thresholdChange(newThreshold, oldThreshold) {\n if (newThreshold > oldThreshold) {\n // we've resized to larger screen.\n this.thresholdsGoingUp = true;\n this.setResizingState(true);\n }\n }\n\n /**\n * Primary logic for resizing changes.\n * When content doesn't fit - we loop down through break points until it does\n */\n @Watch('intersectRatio')\n ratioChange() {\n if (this.intersectRatio < 1 && this.threshold > 0) {\n // content doesn't fit\n if (this.thresholdsGoingUp) this.setResizingState(true);\n this.threshold--;\n setTimeout(() => this.ratioChange(), 500);\n } else {\n this.thresholdReady = true;\n // content now fits so add / remove context classes\n // on nav-items depending on whether they're added to bar or burger.\n this.siteContent.style.minHeight = `calc(100% - ${\n this.barsDiv.clientHeight + 1\n }px)`;\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 - 4)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"icon\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"icon\"]')\n )\n );\n\n if (this.threshold < THRESHOLDLIMIT - 3)\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 - 2)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"main\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"main\"]')\n )\n );\n\n if (this.threshold < THRESHOLDLIMIT - 1)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"about\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"about\"]')\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\n @Watch('thresholdReady')\n @Watch('remoteDataReady')\n assessReady() {\n if (this.thresholdReady && this.remoteDataReady) {\n this.ready = true;\n }\n }\n\n @Watch('remoteDataReady')\n remoteReady() {\n this.attachIO();\n }\n\n @Watch('ready')\n isReady() {\n this.nanoIsReady.emit();\n }\n\n /**\n * Add / remove events when autocomplete results show / hide.\n */\n @Watch('showAutocomplete')\n setupAutocompleteBlur() {\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 /**\n * As relevant slotted items change, reset resizing breakpoints\n */\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 let 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 this.thresholdsGoingUp = false;\n }\n };\n\n // Global DOM Events\n\n private onWindowResize() {\n if (this.threshold < THRESHOLDLIMIT && window.innerWidth > this.currSize) {\n this.threshold = THRESHOLDLIMIT;\n }\n this.currSize = window.innerWidth;\n this.searchBarShown = false;\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) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n this.secondaryMenuOpen = true;\n this.menuContentDiv.style.minHeight =\n (ev.detail as NavItemEventDetail).secondaryMenu.scrollHeight + 'px';\n }\n\n @Listen('nanoClose')\n secondaryClose(ev: CustomEvent) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n this.secondaryMenuOpen = false;\n this.menuContentDiv.style.minHeight = '';\n }\n\n private onMenuBtnKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.modalOpen ? this.menuClose(ev, true) : 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.menuDiv.clientWidth; // force reflow\n\n this.modalOpen = true;\n this.modalIsOpen = true;\n this.menuWrapDiv.addEventListener('focusout', this.menuClose);\n\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\n private onMenuHidden = () => {\n this.menuDiv.removeEventListener('transitionend', this.onMenuHidden);\n this.menuWrapDiv.removeEventListener('focusout', this.menuClose);\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 private menuClose = (\n ev?: FocusEvent | MouseEvent | KeyboardEvent | TouchEvent,\n force: boolean = false\n ) => {\n if (!force) {\n let e = ev as FocusEvent;\n if (\n e &&\n e.relatedTarget &&\n closestElement('#global-nav-menu', e.relatedTarget as HTMLElement)\n )\n return;\n if (\n e &&\n e.relatedTarget &&\n (e.relatedTarget as HTMLElement).closest('#global-nav-menu')\n )\n return;\n if (\n e &&\n e.relatedTarget &&\n (e.relatedTarget as HTMLElement).closest('[slot=\"promotion\"]')\n )\n return;\n if (this.secondaryMenuOpen) return;\n }\n\n this.modalOpen = false;\n this.menuDiv.addEventListener('transitionend', this.onMenuHidden);\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, 'show', this.userMenuOpen);\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 (smaller screens / mobile)\n\n private onSearchBtnClick = (ev: MouseEvent) => {\n ev.preventDefault();\n if (!this.searchBarShown) this.searchbarShow();\n else this.searchbarHide();\n };\n\n private onSearchBtnKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.searchBarShown ? this.searchbarHide() : this.searchbarShow();\n break;\n }\n };\n\n private searchbarShow() {\n this.searchBarShown = true;\n this.searchBarEl.addEventListener('transitionend', this.onSearchBarShown);\n this.searchBarEl.style.display = 'block';\n\n setTimeout(() => {\n this.searchBarEl.style.height =\n this.searchBarEl.querySelector('.search-widget').scrollHeight + 'px';\n }, 50);\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 this.showAutocomplete = false;\n if (this.searchValInternal.length && ev) return;\n\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.removeEventListener(\n 'transitionend',\n this.onSearchBarHidden\n );\n this.searchBarEl.style.display = 'none';\n this.searchBarShown = false;\n };\n\n // Algolia search\n\n private autocompleteSnippet(hit: AlgoliaResultHit) {\n let lookFor = ['title']; // , 'body'\n if (hit._snippetResult) {\n let 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 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 try {\n this.autocompleteResults = this.processSearchResults(\n (await this.currentIndex.alogliaIndex.search(this.searchValInternal, {\n attributesToSnippet: ['body:5', 'title:8'],\n hitsPerPage: 5,\n filters: 'created > ' + Math.floor((Date.now() - 63115200000) / 1000), // only get last 2 years\n })) as any\n ) as AlgoliaResults;\n } catch (e) {\n console.error(e);\n }\n\n this.scopeSearch = null;\n this.scopeSearch = await this.onSearchSubmit(null, false);\n\n this.searchLoading = false;\n this.showAutocompleteResults();\n };\n\n private onSearchSubmit = async (ev?, emit: boolean = true) => {\n if (ev) ev.preventDefault();\n if (!this.isSearchValSet()) return;\n this.searchLoading = true;\n this.algoliaSearchResults = null;\n\n if (!this.currentIndex) this.currentSelectedIndex();\n\n let queries = this.internalSearchIndeces.map((index) => {\n return {\n indexName: index.index,\n query: this.searchValInternal,\n facets: index.filters,\n hitsPerPage: 10,\n filters: 'created > ' + Math.floor((Date.now() - 63115200000) / 1000), // only get last 2 years\n };\n });\n\n try {\n this.algoliaSearchResults = this.processSearchResults(\n (await this.algoliaClient.multipleQueries(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 });\n\n if (emit) {\n this.nanoSearchResult.emit({\n results: this.algoliaSearchResults.results,\n client: { apiKey: this.searchApiKey, appId: this.searchAppId },\n });\n this.showAutocomplete = false;\n }\n return this.algoliaSearchResults;\n };\n\n private onSearchIndexChange = async (\n index: CustomEvent<SelectChangeEventDetail> | string\n ) => {\n let 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 let selectedIndex = this.internalSearchIndeces.find(\n (index) => index.index === indexStr\n );\n if (!selectedIndex || !selectedIndex.alogliaIndex) return;\n\n this.searchIndex = selectedIndex.index;\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 let 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 let found = this.autocompleteEles[testIndex];\n if (\n found ||\n testIndex < 0 ||\n testIndex > this.autocompleteEles.length - 1\n )\n ev.preventDefault();\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 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 /**\n * Attach the IntersectionObserver - from which all threshold / breakpoint logic hinges\n */\n private attachIO() {\n if (this.io) return;\n let root = this.el.shadowRoot.querySelector('.global-nav .main-bar');\n if (\n Build.isBrowser &&\n typeof window !== 'undefined' &&\n (window as any).IntersectionObserver &&\n !!root\n ) {\n const io = (this.io = new (window as any).IntersectionObserver(\n (data: IntersectionObserverEntry[]) => {\n this.intersectRatio = data.slice(-1)[0].intersectionRatio;\n },\n { root, threshold: 1 }\n ));\n io.observe(root.querySelector('.measure-ele'));\n }\n }\n\n // Stencil Lifecycle / Rendering\n\n componentDidLoad() {\n if (Build.isBrowser) {\n this.debounceResize = debounce(this.onWindowResize.bind(this), 300);\n\n window.addEventListener('resize', this.debounceResize);\n this.currSize = window.innerWidth;\n }\n\n this.initAlgoliaClient();\n this.addAlgoliaIndeces();\n if (this.remoteDataReady) this.attachIO();\n }\n\n componentWillLoad() {\n ComponentStore.init(\n this,\n ['searchIndex', 'searchValue'],\n 'url-hash',\n 'gns'\n );\n\n if (\n Build.isBrowser &&\n typeof window !== 'undefined' &&\n (window as any).MutationObserver\n ) {\n const mo = (this.mo = new MutationObserver(() => {\n this.assessSlottedContent();\n }));\n mo.observe(this.el, { childList: true, subtree: false });\n }\n this.assessSlottedContent();\n }\n\n disconnectedCallback() {\n if (this.io) {\n this.io.disconnect();\n this.io = undefined;\n }\n if (this.mo) {\n this.mo.disconnect();\n this.mo = undefined;\n }\n if (Build.isBrowser)\n window.removeEventListener('resize', this.debounceResize);\n }\n\n async connectedCallback() {\n this.getMyAccData();\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 let scopeSuggestReducer = (total: number, result: AlgoliaMultiResult) => {\n return result.index !== this.currentIndex.index\n ? total + result.hits.length\n : total;\n };\n let 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 ></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={true}\n showInlineError={false}\n value={this.searchIndex}\n onNanoChange={this.onSearchIndexChange}\n mask={true}\n >\n {this.internalSearchIndeces.map((index) => {\n return (\n <nano-option\n selected={index.index === this.searchIndex}\n value={index.index}\n >\n {index.name || index.index}\n </nano-option>\n );\n })}\n <nano-icon\n name=\"solid/caret-down\"\n class=\"down-arrow\"\n slot=\"down-arrow\"\n ></nano-icon>\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={true}\n showInlineError={false}\n clear-input\n placeholder=\"Search...\"\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.searchValInternal.length,\n }}\n slot=\"end\"\n onMouseDown={(e) => {\n this.searchValInternal = this.searchInput.value;\n this.onSearchSubmit(e, true);\n }}\n >\n <nano-icon name=\"light/search\"></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 let isRtl = (this.el.ownerDocument as Document).dir === 'rtl';\n\n let 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 <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 >\n <div\n class=\"gn-menu_wrap\"\n ref={(div) => (this.menuWrapDiv = div)}\n tabindex=\"-1\"\n >\n <div class=\"gn-menu_actions\">\n <button\n class=\"menu-btn icon-btn icon-btn\"\n onMouseDown={this.onMenuBtnClick}\n onKeyDown={this.onMenuBtnKeyDown}\n >\n {this.threshold < THRESHOLDLIMIT - 3 && (\n <nano-icon\n name=\"light/times\"\n aria-label=\"close menu\"\n ></nano-icon>\n )}\n {this.threshold >= THRESHOLDLIMIT - 3 && (\n <nano-icon\n name=\"light/bars\"\n aria-label=\"close menu\"\n ></nano-icon>\n )}\n </button>\n\n {this.threshold < THRESHOLDLIMIT - 4 && [\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 name=\"light/bell\"></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 name=\"light/shopping-cart\"></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\">\n <nav class=\"nav-links nav-links--main\">\n <slot name=\"overflow\" />\n {this.threshold < THRESHOLDLIMIT - 2 &&\n !!this.mainSlotLen && <slot name=\"main\" />}\n </nav>\n\n {(((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold < THRESHOLDLIMIT) ||\n this.hasSiteSlot ||\n !!this.siteNavItms.length) && (\n <div>\n {(!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold < THRESHOLDLIMIT && [\n (this.threshold >= THRESHOLDLIMIT - 2 ||\n this.mainSlotLen < 2) &&\n this.overflowSlotLen < 2 && (\n <div class=\"nav-links-wrap\">\n {!!this.aboutNavItms.length && (\n <h4 class=\"nav-links_title\">About</h4>\n )}\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"About the company links\"\n >\n <slot name=\"about\" />\n\n {this.aboutNavItms.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=\"About the company links\"\n >\n {!this.aboutNavItms.length && (\n <slot name=\"about\" />\n )}\n {!!this.aboutNavItms.length && (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n Company\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 ></nano-icon>\n Company\n </button>\n <slot name=\"about\" />\n <div class=\"content--sub\">\n {this.aboutNavItms.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 )}\n </nav>\n ),\n ]}\n\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\">Sites</h4>\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"Different company site links\"\n >\n <slot name=\"site\" />\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 class=\"nano-global-nav nano-global-nav-menu\">\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 ></nano-icon>\n Sites\n </button>\n <div class=\"content--sub\">\n <slot name=\"site\" />\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 {this.isLoggedIn &&\n this.threshold < THRESHOLDLIMIT - 3 &&\n (this.loggedInNavItms.length || this.hasLoggedinSlot) && (\n <nav class=\"nav-links\" aria-label=\"Your user account links\">\n <nano-nav-item class=\"nano-global-nav user-nav nano-global-nav-menu\">\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 ></nano-icon>\n {this.myAccountUser.name}\n </button>\n <div class=\"content--sub\">\n <slot name=\"loggedin\" />\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 name=\"promotion\" />\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 <nano-sticker\n auto-resize=\"false\"\n break-point-max=\"800\"\n quietMode={{ h: 600, w: 800 }}\n >\n <div class=\"bars\" ref={(div) => (this.barsDiv = div)}>\n <nav\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 - 4) ||\n (this.isLoggedIn &&\n (!!this.loggedInNavItms.length || this.hasLoggedinSlot) &&\n this.threshold < THRESHOLDLIMIT - 3) ||\n (!!this.mainSlotLen && this.threshold < THRESHOLDLIMIT - 2) ||\n ((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold < THRESHOLDLIMIT) ||\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\">\n <img\n src={getAssetPath(`./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\" />\n </div>\n )}\n\n <div\n class=\"nav-links nav-links--main\"\n // hidden={\n // !(\n // this.threshold >= THRESHOLDLIMIT - 2 && !!this.mainSlotLen\n // )\n // }\n >\n <slot name=\"main\" />\n </div>\n\n {this.threshold >= THRESHOLDLIMIT - 1 && [\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 && <slot name=\"search\" />,\n ]}\n\n {(this.threshold >= THRESHOLDLIMIT - 1 ||\n !this.showSearch ||\n !this.internalSearchIndeces.length) && (\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"About the company links\"\n >\n {(!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold === THRESHOLDLIMIT && [\n <slot name=\"about\" />,\n this.aboutNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-bar\">\n <a href={link.address} target={link.target}>\n {link.title}\n </a>\n </nano-nav-item>\n );\n }),\n ]}\n </nav>\n )}\n\n {this.threshold < THRESHOLDLIMIT - 1 &&\n ((this.showSearch && !!this.internalSearchIndeces.length) ||\n !!this.searchSlotLen) && (\n <button\n class=\"icon-btn\"\n aria-controls=\"global-nav-search-bar\"\n aria-expanded={this.searchBarShown ? 'true' : 'false'}\n onMouseDown={this.onSearchBtnClick}\n onKeyDown={this.onSearchBtnKeyDown}\n >\n <nano-icon name=\"light/search\"></nano-icon>\n </button>\n )}\n\n {this.threshold >= THRESHOLDLIMIT - 4 && [\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 name=\"light/bell\"></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 name=\"light/shopping-cart\"></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 &&\n this.threshold >= THRESHOLDLIMIT - 3 && [\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 name=\"solid/caret-down\"></nano-icon>\n </button>\n <div\n class=\"user-links-panel\"\n tabindex=\"-1\"\n ref={(div) => (this.userLinkPanel = div)}\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={\n this.myAccData.urls.logout + this.ssoRedirect\n }\n >\n Logout\n </a>\n </div>\n </div>\n </div>\n ),\n ]}\n <span class=\"measure-ele\"></span>\n </nav>\n\n {this.threshold < THRESHOLDLIMIT - 1 && (\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 >\n <div class=\"search-widget\">\n {this.showSearch && !!this.internalSearchIndeces.length && (\n <div>{searchWidget}</div>\n )}\n {(!this.showSearch || !this.myAccData) &&\n !!this.searchSlotLen && <slot name=\"search\" />}\n </div>\n </div>\n )}\n </div>\n </nano-sticker>\n\n {(this.threshold < THRESHOLDLIMIT - 3 || 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\" ref={(div) => (this.siteContent = div)}>\n <slot />\n </div>\n </Host>\n );\n }\n\n // Data processing\n\n private domainFor(origin: string): string {\n if (!this.myAccData) return '';\n let domain = this.myAccData.domains.find((dm) => dm.origin === origin);\n return domain ? domain.domain : '';\n }\n\n private processSearchResults(results: AlgoliaMultiResults | AlgoliaResults) {\n let multiResults = results as AlgoliaMultiResults;\n let 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 private async getMyAccData() {\n if (!this.getMyAccountData || this.myAccData) {\n this.remoteDataReady = true;\n return;\n }\n\n let 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 var 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 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 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"],"version":3}
1
+ {"file":"nano-global-nav.entry.js","mappings":"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","names":["algoliasearch"],"sources":["./src/utils/fetch.ts","./src/components/global-nav/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 'sass:list';\n\n@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/colours';\n@import '../../global/style/nano-theme/layers';\n\n:host {\n /**\n * @prop --padding: padding used for many elements. Defaults to '12px 0'.\n * @prop --padding-top: top padding used for many elements. Defaults to --padding.\n * @prop --padding-bottom: bottom padding used for many elements. Defaults to --padding.\n * @prop --padding-end: end (left on l2r / right on r2l) padding used for many elements. Defaulst to --padding.\n * @prop --padding-start: start (right on l2r / left on r2l) padding used for many elements. Defaults to --padding.\n * @prop --bar-background: Background of the bar element. Defaults to rgb(17, 85, 113).\n * @prop --bar-text-color: Text color within the bar element. Defaults to white.\n * @prop --bar-color-shade: Color variant used within the bar element. Defaults to rgb(40, 110, 133).\n * @prop --bar-color-tint: Color variant used within the bar element. Defaults to rgb(88, 140, 161).\n * @prop --bar-color-focus: Focus color of the form element within search. Defaults to #90c6e7;\n * @prop --bar-color-focus: Focus color of the form element within search. Defaults to #90c6e7;\n * @prop --menu-background: Background 'burger', menu element. Defaults to #001a21;\n * @prop --menu-text-color: Text color 'burger', menu element. Defaults to white;\n */\n --padding: 12px;\n --padding-top: var(--padding);\n --padding-end: var(--padding);\n --padding-bottom: var(--padding);\n --padding-start: var(--padding);\n --bar-background: #005c75;\n --bar-text-color: white;\n --bar-color-shade: rgb(19, 89, 111);\n --bar-color-tint: rgb(19, 89, 111);\n --bar-color-focus: #90c6e7;\n --menu-background: #001a21;\n --menu-text-color: white;\n --menu-dropdown-bg: #196c82;\n --menu-dropdown-color: white;\n\n display: block;\n position: relative;\n line-height: 1.5;\n height: 100%;\n\n * {\n box-sizing: inherit;\n }\n}\n\n// Common\n.global-nav {\n @include text-inherit();\n\n font-size: 0.88em;\n z-index: #{$layer-index-menubar};\n\n button {\n background: none;\n color: inherit;\n border: none;\n padding: 0;\n }\n\n .icon-btn {\n position: relative;\n background: none;\n color: inherit;\n border: none;\n align-self: normal;\n padding: 9px 7px;\n cursor: pointer;\n display: flex;\n align-items: center;\n\n nano-icon {\n width: 18px;\n height: 18px;\n }\n }\n\n ::slotted(nano-nav-item[slot='icon']) {\n --padding-top: 9px;\n --padding-bottom: 9px;\n --padding-start: 7px;\n --padding-end: 7px;\n --display: flex;\n\n font-size: 18px;\n }\n\n a {\n color: inherit;\n text-decoration: none;\n white-space: nowrap;\n }\n\n .nav-links {\n &_title {\n margin: 8px 0 3px;\n }\n\n ul {\n margin: 0;\n padding: 0;\n }\n\n li {\n list-style: none;\n }\n }\n\n .login-btn {\n display: flex;\n align-items: center;\n font-size: 0.94em;\n }\n\n .menu-btn {\n padding: 9px var(--padding) 9px var(--padding);\n }\n}\n\n// Popup / Slideout Menu\n.gn-menu {\n position: fixed;\n top: 0;\n left: 0;\n z-index: -1;\n display: none;\n transition: z-index 0.01s ease 0.2s;\n height: 100vh;\n width: 100vw;\n overflow-y: auto;\n\n @include rtl-host() {\n left: auto;\n right: 0;\n }\n\n :host(.threshold-2) & {\n position: absolute;\n width: calc(100vw - 20px);\n }\n\n &.menu-full-screen {\n width: 100vw !important;\n }\n\n // &.secondary-open {\n // overflow-y: hidden;\n // }\n\n &_wrap {\n max-width: 92vw;\n width: 335px;\n background: var(--menu-background);\n color: var(--menu-text-color);\n padding: var(--padding) 0;\n box-shadow: 0 0 36px 0 rgba(0, 0, 0, 0.8);\n position: relative;\n pointer-events: all;\n margin-bottom: 36px;\n opacity: 0;\n outline: none;\n transition: transform 0.2s ease, opacity 0.2s ease;\n\n &.has-promotion {\n padding: var(--padding) 0 0;\n }\n }\n\n &.open {\n z-index: #{$layer-index-dropdown};\n transition: z-index 0.01s ease;\n\n .gn-menu_wrap {\n opacity: 1;\n transform: translate3d(0, 0, 0) !important;\n transition: transform 0.2s ease 0.01s, opacity 0.2s ease 0.01s;\n }\n }\n\n &_actions {\n @include padding(null, calc(var(--padding) / 2), null, null);\n\n display: flex;\n justify-content: space-between;\n\n &-counter {\n background: #d0021b;\n color: #fff;\n position: absolute;\n bottom: 4px;\n right: 0;\n left: auto;\n font-size: 9px;\n height: 14px;\n line-height: 14px;\n width: auto;\n min-width: 14px;\n border-radius: 50%;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n text-align: center;\n text-indent: 0;\n }\n }\n\n .content {\n &-wrap {\n position: relative;\n overflow: hidden;\n transition: 0.2s ease min-height;\n min-height: 190px;\n }\n\n &--sub {\n padding: var(--padding) 0 var(--padding) 7px;\n }\n }\n\n .menu-btn {\n @include margin(null, auto, null, null);\n }\n\n .nav-links {\n display: flex;\n flex-wrap: wrap;\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n --icon-size: 14px;\n --display: inline-block;\n --secondary-bg-color: #001a21;\n --padding-top: 10px;\n --padding-bottom: 10px;\n --padding-end: calc(var(--padding) * 2);\n --padding-start: calc(var(--padding) + 3px);\n --color: white;\n --color-hover: #{map.get($colors, lightblue)};\n --bg-color-hover: transparent;\n --bg-color-focus: #002530;\n --focus-outline: none;\n\n font-size: 0.99em;\n width: 100%;\n // margin: 0 0;\n }\n\n .user-nav {\n --bg-color: #193037;\n --padding-top: 9px;\n --padding-bottom: 9px;\n\n font-weight: bold;\n margin: 5px 0 0;\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n font-weight: 500;\n\n --bg-color: transparent;\n }\n }\n\n &_title {\n margin: 0 var(--padding) 4px;\n border-bottom: 1px solid #33484d;\n padding-bottom: 8px;\n font-size: 0.86em;\n text-transform: uppercase;\n color: map.get($colors, lightblue);\n letter-spacing: 1px;\n font-weight: 700;\n }\n\n &-wrap {\n margin: 18px 0;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n .back-btn {\n border-top: 1px solid #33484d;\n border-bottom: 1px solid #33484d;\n display: flex;\n align-items: center;\n padding: 10px 11px 10px 0;\n width: 100%;\n font-size: 12px;\n text-transform: uppercase;\n color: map.get($colors, lightblue);\n letter-spacing: 1px;\n font-weight: 700;\n\n nano-icon {\n @include margin(null, 10px, null, null);\n\n font-size: 12px;\n color: white;\n }\n }\n\n &--sub {\n display: flex;\n flex-wrap: wrap;\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n --border-bottom: none;\n --padding-end: var(--padding);\n --padding-start: var(--padding);\n --padding-top: 8px;\n --padding-bottom: 8px;\n\n margin: 0;\n width: 50%;\n line-height: 1.8;\n }\n }\n\n .content {\n padding: 8px var(--padding);\n }\n }\n\n .login-btn {\n @include padding(9px, var(--padding), 9px, 7px);\n\n nano-icon {\n @include margin(null, null, null, 10px);\n }\n }\n\n .logout-btn {\n justify-content: flex-end;\n\n a {\n padding: 0 5px;\n }\n }\n}\n\n// Main Bar\n.sticker-trigger {\n background: var(--bar-background);\n width: 100%;\n z-index: calc(#{$layer-index-menubar} + 1);\n}\n\n.bars {\n color: var(--bar-text-color);\n z-index: #{$layer-index-menubar};\n position: relative;\n max-width: 100%;\n min-width: 100%;\n box-shadow: none;\n transition: 0.2s ease box-shadow;\n\n [stuck] & {\n box-shadow: 0 1px 25px 0 rgba(0, 0, 0, 0.15);\n }\n\n &::before {\n content: '';\n width: 100%;\n height: 100%;\n z-index: -1;\n background: var(--bar-background);\n position: absolute;\n }\n\n .search {\n &-widget {\n @include margin(null, auto, null, 11px);\n\n position: relative;\n flex: 1 1 auto;\n max-width: 45vw;\n min-width: 269px;\n max-height: 36px;\n }\n\n &-inputs {\n display: flex;\n margin: 0;\n\n input[type='submit'] {\n display: none;\n }\n }\n\n &-autocomplete {\n position: absolute;\n top: calc(100% - 2px);\n width: 100%;\n left: 0;\n background: white;\n border: 2px solid var(--bar-color-tint);\n border-radius: 0 0 5px 5px;\n color: map.get($colors, black);\n font-size: 0.85em;\n padding: calc(var(--padding) / 2) 0 1px 0;\n z-index: 1;\n\n @include rtl-host() {\n left: auto;\n right: 0;\n }\n\n &-hit {\n padding:\n calc(var(--padding) / 4) var(--padding)\n calc(var(--padding) / 4) var(--padding);\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: block;\n text-align: left;\n line-height: 1.5;\n cursor: pointer;\n\n @include rtl-host() {\n text-align: right;\n }\n\n &-scope {\n font-size: 0.76em;\n // text-indent: 10px;\n color: rgb(167, 176, 179);\n font-weight: 600;\n }\n\n &:hover,\n &:focus {\n background-color: map.get($colors, lightgrey);\n }\n\n .search__highlight,\n em {\n font-weight: bold;\n font-style: normal;\n }\n\n &--no-result {\n &:hover,\n &:focus {\n background: none !important;\n }\n }\n }\n\n &-foot {\n margin: 7px 0 0;\n }\n\n &-submit {\n background: none;\n border: none;\n align-self: normal;\n padding: 9px var(--padding);\n cursor: pointer;\n display: flex;\n align-items: center;\n color: map.get($colors, blue);\n justify-content: flex-end;\n width: 100%;\n text-decoration: underline;\n border-top: 1px solid rgb(232, 234, 234);\n\n &:hover,\n &:focus {\n background-color: map.get($colors, lightgrey);\n }\n }\n }\n }\n\n .search-input {\n --input-border-style: solid 1px rgb(85, 140, 157);\n --input-border-style--focus: solid 1px var(--bar-color-focus, #90c6e7);\n --input-border-width: 1px;\n\n font-size: 0.9em;\n }\n\n nano-select.search-input {\n --input-bg-color: var(--bar-color-tint, rgb(88, 140, 161));\n --input-text-color: inherit;\n --input-border-radius: 5px 0 0 5px;\n\n flex: 0 1 auto;\n width: auto;\n display: flex;\n align-items: center;\n flex-direction: column;\n position: relative;\n left: 1px;\n\n @include rtl-host() {\n --input-border-radius: 0 5px 5px 0;\n }\n\n :host(:not(.ready)) & {\n overflow: hidden;\n max-height: 1em;\n }\n\n .down-arrow {\n font-size: 0.65em;\n }\n }\n\n nano-input.search-input {\n --input-text-color: inherit;\n --input-bg-color: var(--bar-color-shade, rgb(40, 110, 133));\n --clear-btn-color: #{map.get($colors, black)};\n --input-border-radius: 0 5px 5px 0;\n --placeholder-color: white;\n\n width: 206px;\n display: flex;\n align-items: center;\n flex-direction: column;\n flex: 1;\n\n @include rtl-host() {\n --input-border-radius: 5px 0 0 5px;\n }\n\n :host(:not(.ready)) & {\n overflow: hidden;\n max-height: 1em;\n }\n\n &.has-value {\n --input-bg-color: #{map.get($colors, white)};\n --input-text-color: #{map.get($colors, black)};\n\n .search-icon {\n color: #{map.get($colors, black)};\n }\n }\n\n .search-icon {\n background: none;\n color: white;\n padding: 0 8px;\n display: none;\n\n &--show {\n display: flex;\n }\n\n &--loader {\n animation: spin 1s linear infinite;\n\n @keyframes spin {\n 100% {\n transform: rotate(360deg);\n }\n }\n }\n\n nano-icon {\n height: 1.4em;\n }\n }\n }\n}\n\n.main-bar {\n width: 100%;\n\n @include padding(var(--padding), var(--padding), var(--padding), 0);\n\n display: flex;\n align-items: center;\n justify-content: space-between;\n overflow-x: hidden;\n\n &:focus {\n outline: none;\n }\n\n :host(.ready) & {\n overflow-x: visible;\n }\n\n > *,\n ::slotted(*) {\n transition: opacity 0.2s ease;\n\n :host(:not(.ready)) & {\n opacity: 0 !important;\n }\n\n :host(.ready) & {\n opacity: 1;\n }\n\n :host(.resizing) & {\n opacity: 0 !important;\n }\n }\n\n > * {\n flex: 0 0 auto;\n\n ::slotted(nano-nav-item[slot='icon']) {\n @include margin(null, null, null, 11px);\n }\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n --color-hover: #{map.get($colors, lightgrey)};\n --secondary-bg-color: var(--menu-dropdown-bg);\n --secondary-color: var(--menu-dropdown-color);\n --bg-color-open: var(--bar-background);\n\n text-decoration: none !important;\n }\n }\n\n .icon-btn {\n @include margin(0, null, 0, 6px);\n\n :host(.threshold-2) & {\n @include margin(0, null, 0, 11px);\n }\n }\n\n .menu-btn.icon-btn {\n margin: 0 !important;\n\n @include ltr-host() {\n border-right: 1.5px solid var(--bar-color-shade);\n }\n\n @include rtl-host() {\n border-left: 1.5px solid var(--bar-color-shade);\n }\n }\n\n .user-links {\n position: relative;\n\n .icon-btn {\n @include padding(null, 0, null, null);\n\n font-size: 0.93em;\n font-weight: 500;\n\n nano-icon {\n @include margin(null, null, null, 5px);\n\n width: 16px;\n height: 16px;\n transform-origin: center;\n transition: transform 0.2s ease, color 0.2s ease;\n }\n\n &.open {\n nano-icon {\n transform: rotate(180deg);\n color: map.get($colors, blue);\n }\n }\n }\n\n &-panel {\n display: none;\n position: absolute;\n border-radius: 4px 0 4px 4px;\n box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.4);\n background-color: #568c9d;\n opacity: 0;\n transform: translate3d(0, 24px, 0);\n transition: transform 0.2s ease, opacity 0.2s ease;\n right: 0;\n font-size: 0.85em;\n min-width: 250px;\n z-index: 1;\n\n @include rtl-host() {\n right: auto;\n left: 0;\n }\n\n &:focus {\n outline: none;\n }\n\n &.show {\n opacity: 1;\n transform: translate3d(0, 4px, 0);\n }\n\n &-content {\n padding: 0 18px;\n display: flex;\n flex-direction: column;\n\n a {\n padding: 11px 0;\n border-bottom: #669dac 1px solid;\n\n &:hover,\n &:focus {\n color: map.get($colors, darkgrey);\n }\n\n &:last-child {\n border-bottom: none;\n }\n }\n }\n\n &-foot {\n background-color: #aac5cd;\n border-radius: 0 0 4px 4px;\n padding: var(--padding);\n color: #455556;\n display: flex;\n align-items: center;\n font-weight: 500;\n justify-content: space-between;\n\n a:hover {\n text-decoration: underline;\n }\n }\n }\n }\n\n .logo {\n height: 34px;\n width: auto;\n min-width: 196px;\n\n :host(:not(.threshold-1)) & {\n height: 30px;\n }\n }\n\n .logo-link {\n @include margin(null, auto, null, 0);\n @include padding(null, 11px, null, 11px);\n\n display: flex;\n align-items: center;\n border: none;\n }\n\n .nav-links {\n font-size: 0.86em;\n flex: 1 0 auto;\n display: flex;\n justify-content: space-around;\n\n ul {\n display: flex;\n justify-content: space-around;\n }\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n --padding-top: 7px;\n --padding-bottom: 7px;\n --padding-end: 2px;\n --padding-start: 2px;\n --margin: 0 11px;\n }\n\n &--main {\n font-weight: bold;\n justify-content: flex-start;\n\n ::slotted(nano-nav-item) {\n --color: white;\n --padding-end: 6px;\n --padding-start: 6px;\n }\n }\n\n &--sub {\n @include margin(null, null, null, 6px);\n\n --color: #e2e2e2;\n\n justify-content: flex-end;\n }\n }\n\n .login-btn {\n display: inline-block;\n border-radius: 4px;\n background-color: #17bb75;\n color: #fff;\n padding: 3px 10px;\n position: relative;\n left: auto;\n bottom: auto;\n\n @include margin(null, 0, null, 11px);\n }\n\n .measure-ele {\n min-width: 1px;\n display: block;\n margin: 0;\n padding: 0;\n }\n}\n\n.search-bar {\n height: 0;\n overflow: hidden;\n transition: 0.2s ease height;\n padding: 0 var(--padding);\n outline: none;\n\n .search-widget {\n @include margin(0, 0, 0, 0);\n\n overflow: inherit;\n max-width: none;\n max-height: none;\n padding: 0 0 var(--padding);\n }\n\n .search-inputs {\n padding: 0 0;\n margin: 0 0;\n }\n\n .search-autocomplete {\n top: calc(100% - (var(--padding) + 1px));\n }\n}\n\n.site-content {\n display: flex;\n transition: min-height 0.2s ease;\n min-height: calc(100% - 61px);\n position: relative;\n z-index: auto;\n align-items: stretch;\n}\n\n.mask {\n opacity: 0;\n background: rgba(0, 0, 0, 0.3);\n position: fixed;\n left: 0;\n right: 0;\n top: 0;\n height: 100vh;\n z-index: -1;\n transition:\n transform 0.2s ease,\n opacity 0.2s ease,\n visibility 0.01s ease 0.2s,\n z-index 0.01s ease 0.2s;\n visibility: hidden;\n\n &.open {\n opacity: 1;\n transition:\n z-index 0.01s ease,\n visibility 0.01s ease,\n transform 0.2s ease 0.01s,\n opacity 0.2s ease 0.01s;\n z-index: 3;\n visibility: visible;\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, { SearchClient as AlgoliaClient } from 'algoliasearch';\nimport { debounce, closestElement, displayTransition } from '../../utils';\nimport { clientFetch } from '../../utils/fetch';\nimport {\n InputChangeEventDetail,\n SelectChangeEventDetail,\n AlgoliaResults,\n SearchIndex,\n MyAccountLink,\n AloliaSearchResultDetail,\n AlgoliaMultiResult,\n MyAccountUser,\n NavItemEventDetail,\n AlgoliaResultHit,\n AlgoliaNetworkError,\n AlgoliaMultiResults,\n} from '../../interface';\nimport { ComponentStore } from '../../utils/store/component-store';\n\ninterface MyAccountData {\n user: MyAccountUser;\n cart: {\n count: number;\n url: string;\n };\n notifications: { count: number };\n hs: { lists?: Array<number> };\n registration: { next_url: string | null };\n links: null | MyAccountLink[];\n urls: {\n forgot_password: string | null;\n logout: string | null;\n login: string | null;\n messages: string | null;\n cart: string | null;\n };\n domains: [\n {\n origin: string;\n domain: string;\n }\n ];\n search: {\n app_id: string;\n api_key: string;\n indeces: [\n {\n index: string;\n name: string;\n domain: string;\n all_group?: boolean;\n filters?: [string];\n }\n ];\n };\n}\n\nconst THRESHOLDLIMIT = 5;\n/**\n * Nanopore digital global navigation and search bar.\n * Incorporates MyAccount / SSO states (messages / cart / user name etc).\n * Incorporates Algolia search.\n * GlobalNav is designed to be at the root of the `<body>`.\n * There should only be one <nano-global-nav> in the DOM.\n * The following demo uses static data.\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 */\n@Component({\n tag: 'nano-global-nav',\n styleUrl: 'global-nav.scss',\n shadow: true,\n assetsDirs: ['assets'],\n})\nexport class GlobalNav implements ComponentInterface {\n // position and dimension state\n private io: IntersectionObserver;\n private debounceResize: () => {};\n private debounceSetResizingState: () => {};\n private currSize: number = 0;\n private thresholdsGoingUp: boolean = false;\n\n // menu\n private menuDiv: HTMLElement;\n private menuBtn: HTMLButtonElement;\n private menuWrapDiv: HTMLDivElement;\n private menuContentDiv: HTMLDivElement;\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 barsDiv: HTMLDivElement;\n private siteContent: HTMLDivElement;\n private userLinkPanel: HTMLDivElement;\n private isLoggedIn: boolean = false;\n\n private myAccData: MyAccountData = null;\n\n // myaccount links\n private aboutNavItms: MyAccountLink[] = [];\n private siteNavItms: MyAccountLink[] = [];\n private loggedInNavItms: MyAccountLink[] = [];\n\n // has slot tests\n private mo?: MutationObserver;\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 @State() internalSearchIndeces: Array<SearchIndex> = [];\n @State() thresholdReady: boolean = false;\n @State() remoteDataReady: boolean = false;\n @State() ready: boolean = false;\n @State() isResizing: boolean = false;\n @State() intersectRatio: number;\n @State() threshold: number = THRESHOLDLIMIT;\n @State() modalOpen: boolean = false;\n @State() modalIsOpen: boolean = false;\n @State() searchBarShown: boolean = false;\n @State() scrollingUp: boolean = true;\n @State() searchLoading: boolean = false;\n @State() showAutocomplete: boolean = false;\n @State() secondaryMenuOpen: boolean = false;\n @State() userMenuOpen: boolean = false;\n @State() menuFullScreen: boolean = false;\n @State() searchValInternal: string = '';\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 */\n @Prop() env: 'local' | 'dev' | 'test' | 'prod' = 'prod';\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: {\n id: string | null;\n name: string | null;\n first_name: string | null;\n last_name: string | null;\n email: string | null;\n company: string | null;\n lifecycle_stage: string | null;\n indirect_customer: boolean;\n } = 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 programatically get or to preload search results\n */\n @Prop({ mutable: true }) searchValue: string = '';\n\n /**\n * Algolia search index to programatically set or to set an initial index\n */\n @Prop({ mutable: true }) searchIndex: string = 'all_prod_en';\n\n /**\n * MyAccount store cart count.\n */\n @Prop({ mutable: true }) cartCount: number = 0;\n\n /**\n * MyAccount undread 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<AloliaSearchResultDetail>;\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<AloliaSearchResultDetail>;\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 @Watch('searchIndex')\n currentSelectedIndex() {\n if (!this.internalSearchIndeces.length) {\n return;\n }\n\n let foundIndex = this.internalSearchIndeces.find(\n (index) => index.index === 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\n @Watch('searchIndeces')\n addIndeces() {\n this.internalSearchIndeces = [\n ...this.internalSearchIndeces,\n ...this.searchIndeces,\n ];\n }\n\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].index;\n }\n\n @Watch('threshold')\n thresholdChange(newThreshold, oldThreshold) {\n if (newThreshold > oldThreshold) {\n // we've resized to larger screen.\n this.thresholdsGoingUp = true;\n this.setResizingState(true);\n }\n }\n\n /**\n * Primary logic for resizing changes.\n * When content doesn't fit - we loop down through break points until it does\n */\n @Watch('intersectRatio')\n ratioChange() {\n if (this.intersectRatio < 1 && this.threshold > 0) {\n // content doesn't fit\n if (this.thresholdsGoingUp) this.setResizingState(true);\n this.threshold--;\n setTimeout(() => this.ratioChange(), 500);\n } else {\n this.thresholdReady = true;\n // content now fits so add / remove context classes\n // on nav-items depending on whether they're added to bar or burger.\n this.siteContent.style.minHeight = `calc(100% - ${\n this.barsDiv.clientHeight + 1\n }px)`;\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 - 4)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"icon\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"icon\"]')\n )\n );\n\n if (this.threshold < THRESHOLDLIMIT - 3)\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 - 2)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"main\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"main\"]')\n )\n );\n\n if (this.threshold < THRESHOLDLIMIT - 1)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"about\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"about\"]')\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\n @Watch('thresholdReady')\n @Watch('remoteDataReady')\n assessReady() {\n if (this.thresholdReady && this.remoteDataReady) {\n this.ready = true;\n }\n }\n\n @Watch('remoteDataReady')\n remoteReady() {\n this.attachIO();\n }\n\n @Watch('ready')\n isReady() {\n this.nanoIsReady.emit();\n }\n\n /**\n * Add / remove events when autocomplete results show / hide.\n */\n @Watch('showAutocomplete')\n setupAutocompleteBlur() {\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 /**\n * As relevant slotted items change, reset resizing breakpoints\n */\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 let 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 this.thresholdsGoingUp = false;\n }\n };\n\n // Global DOM Events\n\n private onWindowResize() {\n if (this.threshold < THRESHOLDLIMIT && window.innerWidth > this.currSize) {\n this.threshold = THRESHOLDLIMIT;\n }\n this.currSize = window.innerWidth;\n this.searchBarShown = false;\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) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n this.secondaryMenuOpen = true;\n this.menuContentDiv.style.minHeight =\n (ev.detail as NavItemEventDetail).secondaryMenu.scrollHeight + 'px';\n }\n\n @Listen('nanoClose')\n secondaryClose(ev: CustomEvent) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n this.secondaryMenuOpen = false;\n this.menuContentDiv.style.minHeight = '';\n }\n\n private onMenuBtnKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.modalOpen ? this.menuClose(ev, true) : 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.menuDiv.clientWidth; // force reflow\n\n this.modalOpen = true;\n this.modalIsOpen = true;\n this.menuWrapDiv.addEventListener('focusout', this.menuClose);\n\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\n private onMenuHidden = () => {\n this.menuDiv.removeEventListener('transitionend', this.onMenuHidden);\n this.menuWrapDiv.removeEventListener('focusout', this.menuClose);\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 private menuClose = (\n ev?: FocusEvent | MouseEvent | KeyboardEvent | TouchEvent,\n force: boolean = false\n ) => {\n if (!force) {\n let e = ev as FocusEvent;\n if (\n e &&\n e.relatedTarget &&\n closestElement('#global-nav-menu', e.relatedTarget as HTMLElement)\n )\n return;\n if (\n e &&\n e.relatedTarget &&\n (e.relatedTarget as HTMLElement).closest('#global-nav-menu')\n )\n return;\n if (\n e &&\n e.relatedTarget &&\n (e.relatedTarget as HTMLElement).closest('[slot=\"promotion\"]')\n )\n return;\n if (this.secondaryMenuOpen) return;\n }\n\n this.modalOpen = false;\n this.menuDiv.addEventListener('transitionend', this.onMenuHidden);\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, 'show', this.userMenuOpen);\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 (smaller screens / mobile)\n\n private onSearchBtnClick = (ev: MouseEvent) => {\n ev.preventDefault();\n if (!this.searchBarShown) this.searchbarShow();\n else this.searchbarHide();\n };\n\n private onSearchBtnKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.searchBarShown ? this.searchbarHide() : this.searchbarShow();\n break;\n }\n };\n\n private searchbarShow() {\n this.searchBarShown = true;\n this.searchBarEl.addEventListener('transitionend', this.onSearchBarShown);\n this.searchBarEl.style.display = 'block';\n\n setTimeout(() => {\n this.searchBarEl.style.height =\n this.searchBarEl.querySelector('.search-widget').scrollHeight + 'px';\n }, 50);\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 this.showAutocomplete = false;\n if (this.searchValInternal.length && ev) return;\n\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.removeEventListener(\n 'transitionend',\n this.onSearchBarHidden\n );\n this.searchBarEl.style.display = 'none';\n this.searchBarShown = false;\n };\n\n // Algolia search\n\n private autocompleteSnippet(hit: AlgoliaResultHit) {\n let lookFor = ['title']; // , 'body'\n if (hit._snippetResult) {\n let 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 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 try {\n this.autocompleteResults = this.processSearchResults(\n (await this.currentIndex.alogliaIndex.search(this.searchValInternal, {\n attributesToSnippet: ['body:5', 'title:8'],\n hitsPerPage: 5,\n filters: 'created > ' + Math.floor((Date.now() - 63115200000) / 1000), // only get last 2 years\n })) as any\n ) as AlgoliaResults;\n } catch (e) {\n console.error(e);\n }\n\n this.scopeSearch = null;\n this.scopeSearch = await this.onSearchSubmit(null, false);\n\n this.searchLoading = false;\n this.showAutocompleteResults();\n };\n\n private onSearchSubmit = async (ev?, emit: boolean = true) => {\n if (ev) ev.preventDefault();\n if (!this.isSearchValSet()) return;\n this.searchLoading = true;\n this.algoliaSearchResults = null;\n\n if (!this.currentIndex) this.currentSelectedIndex();\n\n let queries = this.internalSearchIndeces.map((index) => {\n return {\n indexName: index.index,\n query: this.searchValInternal,\n facets: index.filters,\n hitsPerPage: 10,\n filters: 'created > ' + Math.floor((Date.now() - 63115200000) / 1000), // only get last 2 years\n };\n });\n\n try {\n this.algoliaSearchResults = this.processSearchResults(\n (await this.algoliaClient.multipleQueries(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 });\n\n if (emit) {\n this.nanoSearchResult.emit({\n results: this.algoliaSearchResults.results,\n client: { apiKey: this.searchApiKey, appId: this.searchAppId },\n });\n this.showAutocomplete = false;\n }\n return this.algoliaSearchResults;\n };\n\n private onSearchIndexChange = async (\n index: CustomEvent<SelectChangeEventDetail> | string\n ) => {\n let 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 let selectedIndex = this.internalSearchIndeces.find(\n (index) => index.index === indexStr\n );\n if (!selectedIndex || !selectedIndex.alogliaIndex) return;\n\n this.searchIndex = selectedIndex.index;\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 let 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 let found = this.autocompleteEles[testIndex];\n if (\n found ||\n testIndex < 0 ||\n testIndex > this.autocompleteEles.length - 1\n )\n ev.preventDefault();\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 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 /**\n * Attach the IntersectionObserver - from which all threshold / breakpoint logic hinges\n */\n private attachIO() {\n if (this.io) return;\n let root = this.el.shadowRoot.querySelector('.global-nav .main-bar');\n if (\n Build.isBrowser &&\n typeof window !== 'undefined' &&\n (window as any).IntersectionObserver &&\n !!root\n ) {\n const io = (this.io = new (window as any).IntersectionObserver(\n (data: IntersectionObserverEntry[]) => {\n this.intersectRatio = data.slice(-1)[0].intersectionRatio;\n },\n { root, threshold: 1 }\n ));\n io.observe(root.querySelector('.measure-ele'));\n }\n }\n\n // Stencil Lifecycle / Rendering\n\n componentDidLoad() {\n if (Build.isBrowser) {\n this.debounceResize = debounce(this.onWindowResize.bind(this), 300);\n\n window.addEventListener('resize', this.debounceResize);\n this.currSize = window.innerWidth;\n }\n\n this.initAlgoliaClient();\n this.addAlgoliaIndeces();\n if (this.remoteDataReady) this.attachIO();\n }\n\n componentWillLoad() {\n ComponentStore.init(\n this,\n ['searchIndex', 'searchValue'],\n 'url-hash',\n 'gns'\n );\n\n if (\n Build.isBrowser &&\n typeof window !== 'undefined' &&\n (window as any).MutationObserver\n ) {\n const mo = (this.mo = new MutationObserver(() => {\n this.assessSlottedContent();\n }));\n mo.observe(this.el, { childList: true, subtree: false });\n }\n this.assessSlottedContent();\n }\n\n disconnectedCallback() {\n if (this.io) {\n this.io.disconnect();\n this.io = undefined;\n }\n if (this.mo) {\n this.mo.disconnect();\n this.mo = undefined;\n }\n if (Build.isBrowser)\n window.removeEventListener('resize', this.debounceResize);\n }\n\n async connectedCallback() {\n this.getMyAccData();\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 let scopeSuggestReducer = (total: number, result: AlgoliaMultiResult) => {\n return result.index !== this.currentIndex.index\n ? total + result.hits.length\n : total;\n };\n let 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 ></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={true}\n showInlineError={false}\n value={this.searchIndex}\n onNanoChange={this.onSearchIndexChange}\n mask={true}\n >\n {this.internalSearchIndeces.map((index) => {\n return (\n <nano-option\n selected={index.index === this.searchIndex}\n value={index.index}\n >\n {index.name || index.index}\n </nano-option>\n );\n })}\n <nano-icon\n name=\"solid/caret-down\"\n class=\"down-arrow\"\n slot=\"down-arrow\"\n ></nano-icon>\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={true}\n showInlineError={false}\n clear-input\n placeholder=\"Search...\"\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.searchValInternal.length,\n }}\n slot=\"end\"\n onMouseDown={(e) => {\n this.searchValInternal = this.searchInput.value;\n this.onSearchSubmit(e, true);\n }}\n >\n <nano-icon name=\"light/search\"></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 let isRtl = (this.el.ownerDocument as Document).dir === 'rtl';\n\n let 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 <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 >\n <div\n class=\"gn-menu_wrap\"\n ref={(div) => (this.menuWrapDiv = div)}\n tabindex=\"-1\"\n >\n <div class=\"gn-menu_actions\">\n <button\n class=\"menu-btn icon-btn icon-btn\"\n onMouseDown={this.onMenuBtnClick}\n onKeyDown={this.onMenuBtnKeyDown}\n >\n {this.threshold < THRESHOLDLIMIT - 3 && (\n <nano-icon\n name=\"light/times\"\n aria-label=\"close menu\"\n ></nano-icon>\n )}\n {this.threshold >= THRESHOLDLIMIT - 3 && (\n <nano-icon\n name=\"light/bars\"\n aria-label=\"close menu\"\n ></nano-icon>\n )}\n </button>\n\n {this.threshold < THRESHOLDLIMIT - 4 && [\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 name=\"light/bell\"></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 name=\"light/shopping-cart\"></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\">\n <nav class=\"nav-links nav-links--main\">\n <slot name=\"overflow\" />\n {this.threshold < THRESHOLDLIMIT - 2 &&\n !!this.mainSlotLen && <slot name=\"main\" />}\n </nav>\n\n {(((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold < THRESHOLDLIMIT) ||\n this.hasSiteSlot ||\n !!this.siteNavItms.length) && (\n <div>\n {(!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold < THRESHOLDLIMIT && [\n (this.threshold >= THRESHOLDLIMIT - 2 ||\n this.mainSlotLen < 2) &&\n this.overflowSlotLen < 2 && (\n <div class=\"nav-links-wrap\">\n {!!this.aboutNavItms.length && (\n <h4 class=\"nav-links_title\">About</h4>\n )}\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"About the company links\"\n >\n <slot name=\"about\" />\n\n {this.aboutNavItms.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=\"About the company links\"\n >\n {!this.aboutNavItms.length && (\n <slot name=\"about\" />\n )}\n {!!this.aboutNavItms.length && (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n Company\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 ></nano-icon>\n Company\n </button>\n <slot name=\"about\" />\n <div class=\"content--sub\">\n {this.aboutNavItms.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 )}\n </nav>\n ),\n ]}\n\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\">Sites</h4>\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"Different company site links\"\n >\n <slot name=\"site\" />\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 class=\"nano-global-nav nano-global-nav-menu\">\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 ></nano-icon>\n Sites\n </button>\n <div class=\"content--sub\">\n <slot name=\"site\" />\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 {this.isLoggedIn &&\n this.threshold < THRESHOLDLIMIT - 3 &&\n (this.loggedInNavItms.length || this.hasLoggedinSlot) && (\n <nav class=\"nav-links\" aria-label=\"Your user account links\">\n <nano-nav-item class=\"nano-global-nav user-nav nano-global-nav-menu\">\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 ></nano-icon>\n {this.myAccountUser.name}\n </button>\n <div class=\"content--sub\">\n <slot name=\"loggedin\" />\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 name=\"promotion\" />\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 <nano-sticker\n auto-resize=\"false\"\n break-point-max=\"800\"\n quietMode={{ h: 600, w: 800 }}\n >\n <div class=\"bars\" ref={(div) => (this.barsDiv = div)}>\n <nav\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 - 4) ||\n (this.isLoggedIn &&\n (!!this.loggedInNavItms.length || this.hasLoggedinSlot) &&\n this.threshold < THRESHOLDLIMIT - 3) ||\n (!!this.mainSlotLen && this.threshold < THRESHOLDLIMIT - 2) ||\n ((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold < THRESHOLDLIMIT) ||\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\">\n <img\n src={getAssetPath(`./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\" />\n </div>\n )}\n\n <div\n class=\"nav-links nav-links--main\"\n // hidden={\n // !(\n // this.threshold >= THRESHOLDLIMIT - 2 && !!this.mainSlotLen\n // )\n // }\n >\n <slot name=\"main\" />\n </div>\n\n {this.threshold >= THRESHOLDLIMIT - 1 && [\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 && <slot name=\"search\" />,\n ]}\n\n {(this.threshold >= THRESHOLDLIMIT - 1 ||\n !this.showSearch ||\n !this.internalSearchIndeces.length) && (\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"About the company links\"\n >\n {(!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold === THRESHOLDLIMIT && [\n <slot name=\"about\" />,\n this.aboutNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-bar\">\n <a href={link.address} target={link.target}>\n {link.title}\n </a>\n </nano-nav-item>\n );\n }),\n ]}\n </nav>\n )}\n\n {this.threshold < THRESHOLDLIMIT - 1 &&\n ((this.showSearch && !!this.internalSearchIndeces.length) ||\n !!this.searchSlotLen) && (\n <button\n class=\"icon-btn\"\n aria-controls=\"global-nav-search-bar\"\n aria-expanded={this.searchBarShown ? 'true' : 'false'}\n onMouseDown={this.onSearchBtnClick}\n onKeyDown={this.onSearchBtnKeyDown}\n >\n <nano-icon name=\"light/search\"></nano-icon>\n </button>\n )}\n\n {this.threshold >= THRESHOLDLIMIT - 4 && [\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 name=\"light/bell\"></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 name=\"light/shopping-cart\"></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 &&\n this.threshold >= THRESHOLDLIMIT - 3 && [\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 name=\"solid/caret-down\"></nano-icon>\n </button>\n <div\n class=\"user-links-panel\"\n tabindex=\"-1\"\n ref={(div) => (this.userLinkPanel = div)}\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={\n this.myAccData.urls.logout + this.ssoRedirect\n }\n >\n Logout\n </a>\n </div>\n </div>\n </div>\n ),\n ]}\n <span class=\"measure-ele\"></span>\n </nav>\n\n {this.threshold < THRESHOLDLIMIT - 1 && (\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 >\n <div class=\"search-widget\">\n {this.showSearch && !!this.internalSearchIndeces.length && (\n <div>{searchWidget}</div>\n )}\n {(!this.showSearch || !this.myAccData) &&\n !!this.searchSlotLen && <slot name=\"search\" />}\n </div>\n </div>\n )}\n </div>\n </nano-sticker>\n\n {(this.threshold < THRESHOLDLIMIT - 3 || 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\" ref={(div) => (this.siteContent = div)}>\n <slot />\n </div>\n </Host>\n );\n }\n\n // Data processing\n\n private domainFor(origin: string): string {\n if (!this.myAccData) return '';\n let domain = this.myAccData.domains.find((dm) => dm.origin === origin);\n return domain ? domain.domain : '';\n }\n\n private processSearchResults(results: AlgoliaMultiResults | AlgoliaResults) {\n let multiResults = results as AlgoliaMultiResults;\n let 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 private async getMyAccData() {\n if (!this.getMyAccountData || this.myAccData) {\n this.remoteDataReady = true;\n return;\n }\n\n let 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 var 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 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 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"],"version":3}