@nanoporetech-digital/components 3.0.0 → 3.1.1
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.
- package/CHANGELOG.md +31 -0
- package/dist/cjs/index-41582c2a.js +8 -4
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/nano-checkbox-group.cjs.entry.js +12 -3
- package/dist/cjs/nano-checkbox-group.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-components.cjs.js +1 -1
- package/dist/cjs/nano-details.cjs.entry.js +2 -2
- package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-field-validator.cjs.entry.js +2 -0
- package/dist/cjs/nano-field-validator.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +3 -3
- package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-global-nav.cjs.entry.js +18 -20
- package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-input.cjs.entry.js +1 -1
- package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-menu-drawer.cjs.entry.js +1 -1
- package/dist/cjs/nano-menu-drawer.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-progress-bar.cjs.entry.js +33 -0
- package/dist/cjs/nano-progress-bar.cjs.entry.js.map +1 -0
- package/dist/cjs/nano-resize-observe_2.cjs.entry.js +2 -2
- package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-spinner.cjs.entry.js +1 -1
- package/dist/cjs/nano-spinner.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-tab-group.cjs.entry.js +1 -1
- package/dist/cjs/nano-tab.cjs.entry.js +1 -1
- package/dist/cjs/nano-tab.cjs.entry.js.map +1 -1
- package/dist/cjs/{nano-table-8a898621.js → nano-table-844394ad.js} +146 -58
- package/dist/cjs/nano-table-844394ad.js.map +1 -0
- package/dist/cjs/nano-table.cjs.entry.js +2 -1
- package/dist/cjs/nano-table.cjs.entry.js.map +1 -1
- package/dist/cjs/{table.worker-b0b0044a.js → table.worker-1bc19978.js} +3 -2
- package/dist/cjs/table.worker-1bc19978.js.map +1 -0
- package/dist/cjs/{transitions-d295a09e.js → transitions-5cd8f697.js} +10 -8
- package/dist/cjs/transitions-5cd8f697.js.map +1 -0
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/checkbox/checkbox-group.js +12 -3
- package/dist/collection/components/checkbox/checkbox-group.js.map +1 -1
- package/dist/collection/components/details/details.css +1 -0
- package/dist/collection/components/field-validator/field-validator.js +2 -0
- package/dist/collection/components/field-validator/field-validator.js.map +1 -1
- package/dist/collection/components/global-nav/assets/ont-logo.svg +89 -47
- package/dist/collection/components/global-nav/global-nav-interface.js.map +1 -1
- package/dist/collection/components/global-nav/global-nav.js +19 -21
- package/dist/collection/components/global-nav/global-nav.js.map +1 -1
- package/dist/collection/components/global-nav/{global-nav.css → style/global-nav.css} +465 -405
- package/dist/collection/components/input/input.css +2 -0
- package/dist/collection/components/menu-drawer/menu-drawer.css +1 -0
- package/dist/collection/components/nav-item/nav-item.css +6 -6
- package/dist/collection/components/progress-bar/progress-bar.css +84 -0
- package/dist/collection/components/progress-bar/progress-bar.js +106 -0
- package/dist/collection/components/progress-bar/progress-bar.js.map +1 -0
- package/dist/collection/components/select/select.css +4 -0
- package/dist/collection/components/skeleton/skeleton.css +8 -5
- package/dist/collection/components/skeleton/skeleton.js +1 -1
- package/dist/collection/components/skeleton/skeleton.js.map +1 -1
- package/dist/collection/components/spinner/spinner.css +5 -9
- package/dist/collection/components/table/table.children.js +43 -17
- package/dist/collection/components/table/table.children.js.map +1 -1
- package/dist/collection/components/table/table.css +97 -27
- package/dist/collection/components/table/table.js +143 -33
- package/dist/collection/components/table/table.js.map +1 -1
- package/dist/collection/components/table/table.service.js +1 -10
- package/dist/collection/components/table/table.service.js.map +1 -1
- package/dist/collection/components/table/table.store.js +11 -11
- package/dist/collection/components/table/table.store.js.map +1 -1
- package/dist/collection/components/tabs/tab.css +1 -0
- package/dist/collection/utils/transitions.js +9 -7
- package/dist/collection/utils/transitions.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/input.js +1 -1
- package/dist/components/input.js.map +1 -1
- package/dist/components/nano-checkbox-group.js +12 -3
- package/dist/components/nano-checkbox-group.js.map +1 -1
- package/dist/components/nano-details.js +1 -1
- package/dist/components/nano-details.js.map +1 -1
- package/dist/components/nano-field-validator.js +2 -0
- package/dist/components/nano-field-validator.js.map +1 -1
- package/dist/components/nano-global-nav.js +17 -19
- package/dist/components/nano-global-nav.js.map +1 -1
- package/dist/components/nano-menu-drawer.js +1 -1
- package/dist/components/nano-menu-drawer.js.map +1 -1
- package/dist/components/nano-progress-bar.d.ts +11 -0
- package/dist/components/nano-progress-bar.js +11 -0
- package/dist/components/nano-progress-bar.js.map +1 -0
- package/dist/components/nano-tab.js +1 -1
- package/dist/components/nano-tab.js.map +1 -1
- package/dist/components/nano-table.js +167 -58
- package/dist/components/nano-table.js.map +1 -1
- package/dist/components/nav-item.js +1 -1
- package/dist/components/nav-item.js.map +1 -1
- package/dist/components/progress-bar.js +48 -0
- package/dist/components/progress-bar.js.map +1 -0
- package/dist/components/select.js +1 -1
- package/dist/components/select.js.map +1 -1
- package/dist/components/skeleton.js +2 -2
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/spinner.js +1 -1
- package/dist/components/spinner.js.map +1 -1
- package/dist/components/transitions.js +9 -7
- package/dist/components/transitions.js.map +1 -1
- package/dist/custom-elements/index.d.ts +6 -0
- package/dist/custom-elements/index.js +219 -96
- package/dist/custom-elements/index.js.map +1 -1
- package/dist/esm/index-3c280603.js +8 -4
- package/dist/esm/loader.js +1 -1
- package/dist/esm/nano-checkbox-group.entry.js +12 -3
- package/dist/esm/nano-checkbox-group.entry.js.map +1 -1
- package/dist/esm/nano-components.js +1 -1
- package/dist/esm/nano-details.entry.js +2 -2
- package/dist/esm/nano-details.entry.js.map +1 -1
- package/dist/esm/nano-field-validator.entry.js +2 -0
- package/dist/esm/nano-field-validator.entry.js.map +1 -1
- package/dist/esm/nano-global-nav-user-profile_3.entry.js +3 -3
- package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
- package/dist/esm/nano-global-nav.entry.js +18 -20
- package/dist/esm/nano-global-nav.entry.js.map +1 -1
- package/dist/esm/nano-input.entry.js +1 -1
- package/dist/esm/nano-input.entry.js.map +1 -1
- package/dist/esm/nano-menu-drawer.entry.js +1 -1
- package/dist/esm/nano-menu-drawer.entry.js.map +1 -1
- package/dist/esm/nano-progress-bar.entry.js +29 -0
- package/dist/esm/nano-progress-bar.entry.js.map +1 -0
- package/dist/esm/nano-resize-observe_2.entry.js +2 -2
- package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
- package/dist/esm/nano-spinner.entry.js +1 -1
- package/dist/esm/nano-spinner.entry.js.map +1 -1
- package/dist/esm/nano-tab-group.entry.js +1 -1
- package/dist/esm/nano-tab.entry.js +1 -1
- package/dist/esm/nano-tab.entry.js.map +1 -1
- package/dist/esm/{nano-table-efdf3dba.js → nano-table-19d19d72.js} +146 -58
- package/dist/esm/nano-table-19d19d72.js.map +1 -0
- package/dist/esm/nano-table.entry.js +2 -1
- package/dist/esm/nano-table.entry.js.map +1 -1
- package/dist/esm/{table.worker-10ba1126.js → table.worker-c82cecdf.js} +3 -2
- package/dist/esm/table.worker-c82cecdf.js.map +1 -0
- package/dist/esm/{transitions-d75d242e.js → transitions-71cca3ed.js} +10 -8
- package/dist/esm/transitions-71cca3ed.js.map +1 -0
- package/dist/nano-components/assets/ont-logo.svg +89 -47
- package/dist/nano-components/nano-components.esm.js +1 -1
- package/dist/nano-components/nano-components.esm.js.map +1 -1
- package/dist/nano-components/p-02df1f62.entry.js +5 -0
- package/dist/nano-components/{p-9f8b091a.entry.js.map → p-02df1f62.entry.js.map} +1 -1
- package/dist/nano-components/p-167b9165.js +5 -0
- package/dist/nano-components/p-167b9165.js.map +1 -0
- package/dist/nano-components/p-1ae8c03e.entry.js +5 -0
- package/dist/nano-components/p-1ae8c03e.entry.js.map +1 -0
- package/dist/nano-components/p-28b43ee9.entry.js +5 -0
- package/dist/nano-components/{p-49a831a3.entry.js.map → p-28b43ee9.entry.js.map} +1 -1
- package/dist/nano-components/{p-8ef2363b.entry.js → p-6cd59e58.entry.js} +2 -2
- package/dist/nano-components/{p-8ef2363b.entry.js.map → p-6cd59e58.entry.js.map} +0 -0
- package/dist/nano-components/{p-687350a5.entry.js → p-701e8ebf.entry.js} +2 -2
- package/dist/nano-components/p-701e8ebf.entry.js.map +1 -0
- package/dist/nano-components/p-7ade1695.js +5 -0
- package/dist/nano-components/{p-8a6834ff.entry.js.map → p-7ade1695.js.map} +0 -0
- package/dist/nano-components/p-8a52a411.entry.js +5 -0
- package/dist/nano-components/{p-68b18b99.entry.js.map → p-8a52a411.entry.js.map} +1 -1
- package/dist/nano-components/p-a2d0d7b9.entry.js.map +1 -1
- package/dist/nano-components/p-b4a045a2.entry.js +5 -0
- package/dist/nano-components/{p-b7b06e04.js.map → p-b4a045a2.entry.js.map} +0 -0
- package/dist/nano-components/p-b7901427.entry.js +5 -0
- package/dist/nano-components/p-b7901427.entry.js.map +1 -0
- package/dist/nano-components/p-b83a8320.js +5 -0
- package/dist/nano-components/p-b83a8320.js.map +1 -0
- package/dist/nano-components/p-d8e8d7e3.entry.js +5 -0
- package/dist/nano-components/p-d8e8d7e3.entry.js.map +1 -0
- package/dist/nano-components/p-efa8c520.entry.js +5 -0
- package/dist/nano-components/{p-47bd0f5d.entry.js.map → p-efa8c520.entry.js.map} +1 -1
- package/dist/nano-components/p-f95a263c.entry.js +5 -0
- package/dist/nano-components/p-f95a263c.entry.js.map +1 -0
- package/dist/nano-components/p-fa2a6733.entry.js +5 -0
- package/dist/nano-components/p-fa2a6733.entry.js.map +1 -0
- package/dist/themes/london-calling.css.map +1 -1
- package/dist/themes/nanopore.css.map +1 -1
- package/dist/types/components/global-nav/global-nav-interface.d.ts +43 -0
- package/dist/types/components/global-nav/global-nav.d.ts +1 -1
- package/dist/types/components/progress-bar/progress-bar.d.ts +19 -0
- package/dist/types/components/table/table.children.d.ts +2 -1
- package/dist/types/components/table/table.d.ts +25 -7
- package/dist/types/components/table/table.service.d.ts +1 -7
- package/dist/types/components/table/table.store.d.ts +4 -2
- package/dist/types/components.d.ts +60 -5
- package/docs-json.json +274 -49
- package/docs-vscode.json +31 -2
- package/package.json +3 -3
- package/dist/cjs/nano-table-8a898621.js.map +0 -1
- package/dist/cjs/table.worker-b0b0044a.js.map +0 -1
- package/dist/cjs/transitions-d295a09e.js.map +0 -1
- package/dist/esm/nano-table-efdf3dba.js.map +0 -1
- package/dist/esm/table.worker-10ba1126.js.map +0 -1
- package/dist/esm/transitions-d75d242e.js.map +0 -1
- package/dist/nano-components/p-03402e69.entry.js +0 -5
- package/dist/nano-components/p-03402e69.entry.js.map +0 -1
- package/dist/nano-components/p-2382d5e9.entry.js +0 -5
- package/dist/nano-components/p-2382d5e9.entry.js.map +0 -1
- package/dist/nano-components/p-47bd0f5d.entry.js +0 -5
- package/dist/nano-components/p-49a831a3.entry.js +0 -5
- package/dist/nano-components/p-4c6ef60b.js +0 -5
- package/dist/nano-components/p-4c6ef60b.js.map +0 -1
- package/dist/nano-components/p-61bfb8b9.entry.js +0 -5
- package/dist/nano-components/p-61bfb8b9.entry.js.map +0 -1
- package/dist/nano-components/p-687350a5.entry.js.map +0 -1
- package/dist/nano-components/p-68b18b99.entry.js +0 -5
- package/dist/nano-components/p-82295d91.js +0 -5
- package/dist/nano-components/p-82295d91.js.map +0 -1
- package/dist/nano-components/p-8a6834ff.entry.js +0 -5
- package/dist/nano-components/p-9f2524d4.entry.js +0 -5
- package/dist/nano-components/p-9f2524d4.entry.js.map +0 -1
- package/dist/nano-components/p-9f8b091a.entry.js +0 -5
- package/dist/nano-components/p-b7b06e04.js +0 -5
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"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"],"names":["async","clientFetch","url","body","customConfig","headers","Accept","Access-Control-Allow-Origin","Content-Type","Cache","config","method","credentials","keepalive","mode","JSON","stringify","id","setTimeout","window","AbortController","controller","timeout","abort","signal","response","fetch","clearTimeout","ok","json","errorMessage","text","Error","globalNavCss","THRESHOLDBREAKS","search","about","main","login","icon","GlobalNav","this","currSize","thresholdsGoingUp","THRESHOLDLIMIT","Object","keys","length","autocompleteEles","currAIndex","isLoggedIn","myAccData","aboutNavItms","siteNavItms","loggedInNavItms","setResizingState","state","debounceSetResizingState","debounce","isResizing","onMenuBtnKeyDown","ev","key","modalOpen","menuClose","menuOpen","onMenuBtnClick","e","preventDefault","menuDiv","style","display","modalIsOpen","menuWrapDiv","addEventListener","focus","preventScroll","threshold","scrollHeight","innerHeight","document","overflow","menuFullScreen","overflowX","onMenuHidden","removeEventListener","activeElement","menuBtn","mainBarDiv","force","relatedTarget","closestElement","closest","secondaryMenuOpen","subMenuClose","target","open","onUserBtnClick","userMenuOpen","onUserBtnKeyDown","onUserMenuBlur","onSearchBtnClick","searchBarShown","searchbarShow","searchbarHide","onSearchBtnKeyDown","onSearchBarShown","searchBarEl","searchInput","setFocus","showAutocomplete","searchValInternal","onSearchBarHidden","height","onSearchInput","value","isSearchValSet","searchLoading","detail","type","onSearchChange","searchValue","autocompleteResults","nanoSearchReset","emit","currentIndex","currentSelectedIndex","processSearchResults","alogliaIndex","attributesToSnippet","hitsPerPage","filters","Math","floor","Date","now","console","error","scopeSearch","onSearchSubmit","showAutocompleteResults","algoliaSearchResults","queries","internalSearchIndeces","map","index","indexName","query","facets","algoliaClient","multipleQueries","nanoSearchError","results","result","i","name","selected","domain","domains","allGroup","nanoSearchResult","client","apiKey","searchApiKey","appId","searchAppId","onSearchIndexChange","indexStr","selectedIndex","find","searchIndex","switchIndexSubmit","onAutocompleteBlur","hits","onAutocompleteInteract","testIndex","el","shadowRoot","found","ele","setActiveElement","click","encodeURIComponent","location","href","protocol","host","[object Object]","env","userProfileUrl","getMyAccountData","remoteDataReady","ssoDataUrl","import","user","myAccountUser","processMyAccLinks","processMyAccData","foundIndex","algoliasearch","addAlgoliaIndeces","searchIndeces","forEach","initIndex","newThreshold","oldThreshold","intersectRatio","ratioChange","thresholdReady","siteContent","minHeight","barsDiv","clientHeight","menuItems","barItems","readTask","Array","from","querySelectorAll","push","writeTask","item","classList","add","remove","ready","attachIO","nanoIsReady","classes","innerWidth","secondaryMenu","stopPropagation","menuContentDiv","displayTransition","userLinkPanel","querySelector","hit","lookFor","_snippetResult","prop","matchLevel","title","substring","autocompleteEle","setAttribute","hasSiteSlot","hasLoggedinSlot","hasPromotionSlot","aboutSlotLen","iconSlotLen","mainSlotLen","overflowSlotLen","searchSlotLen","io","root","IntersectionObserver","data","slice","intersectionRatio","observe","debounceResize","onWindowResize","bind","initAlgoliaClient","ComponentStore","init","MutationObserver","mo","assessSlottedContent","childList","subtree","disconnect","undefined","getMyAccData","content","scrollingUp","currentScopeHits","scopeChangeSuggestions","scopeSuggestReducer","total","currentSuggestReducer","reduce","scopeSuggestions","h","class","role","ref","a","tabindex","innerHTML","autocompleteSnippet","button","onClick","onMouseDown","aria-expanded","hidden","onKeyDown","onSubmit","label","hideLabel","showInlineError","onNanoChange","mask","slot","aria-label","clear-input","placeholder","input","onNanoInput","aria-autocomplete","aria-activedescendant","aria-controls","onNanoFocus","search-icon","search-icon--search","search-icon--show","search-icon--loader","isRtl","ownerDocument","dir","searchWidget","autocompleteList","Host","thresholdClasses","join","search-bar-shown","search-auto-complete-shown","modal-open","resizing","global-nav","scrolling-down","gn-menu","has-promotion","menu-full-screen","secondary-open","div","activeMyAccountSections","includes","msgUrl","msgCount","cartUrl","cartCount","urls","ssoRedirect","link","address","small_avatar_url","forgot_password","logout","auto-resize","break-point-max","quietMode","w","btn","showLogo","logoUrl","src","getAssetPath","alt","showSearch","aria-owns","icon-btn","user-links-btn","search-bar","show","onTouchEnd","origin","dm","multiResults","singleResult","match","domainFor","indeces","api_key","app_id","cart","count","notifications","messages","links","area"],"mappings":"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","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 --menu-user-bg: #016d86;\n --menu-user-bg-mobile: #001a21;\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 inset-block-start: 0;\n inset-inline-start: 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 :host(.threshold-4) & {\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-block-end: 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 padding-inline-end: calc(var(--padding) / 2);\n display: flex;\n justify-content: space-between;\n\n &-counter {\n background: #d0021b;\n color: #fff;\n position: absolute;\n inset-block-end: 4px;\n inset-inline: auto 0;\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 margin-inline-end: auto;\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-block-end: 1px solid #33484d;\n padding-block-end: 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-block-end: 0;\n }\n }\n\n .back-btn {\n border-block-start: 1px solid #33484d;\n border-block-end: 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 margin-inline-end: 10px;\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 padding-inline: 7px var(--padding);\n padding-block: 9px;\n\n nano-icon {\n margin-inline-start: 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 margin-inline-start: 11px;\n margin-inline-end: auto;\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 inset-block-start: calc(100%);\n width: 100%;\n inset-inline-start: 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-block-start: calc(var(--padding) / 2);\n padding-inline-end: 0;\n padding-block-end: 1px;\n padding-inline-start: 0;\n z-index: 1;\n\n &-hit {\n padding-block-start: calc(var(--padding) / 4);\n padding-block-end: calc(var(--padding) / 4);\n padding-inline-start: var(--padding);\n padding-inline-end: var(--padding);\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: block;\n text-align: start;\n line-height: 1.5;\n cursor: pointer;\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-block-start: 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 inset-inline-start: 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.user-profile {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 2em;\n background-color: var(--menu-user-bg-mobile);\n\n .left {\n display: flex;\n align-items: center;\n }\n\n .avatar-container {\n position: relative;\n\n img.avatar {\n border-radius: 50px;\n }\n\n img.logo-small {\n position: absolute;\n height: 30px;\n width: 30px;\n inset-block-end: 0;\n inset-inline-end: 0;\n background-color: #27586e;\n border-radius: 10px;\n padding: 5px;\n }\n }\n\n .user-details {\n display: flex;\n flex-direction: column;\n margin: 0 1.25em;\n color: white;\n\n .name {\n font-size: 1.25em;\n }\n\n .bio {\n margin: 0.5em 0;\n }\n\n .kudos span {\n background-color: #81c7eb;\n color: #415958;\n padding: 0.25em;\n border-radius: 0.5em;\n font-weight: bold;\n }\n }\n\n .chevron-right {\n font-size: 1.5em;\n color: white;\n }\n}\n\n.main-bar {\n width: 100%;\n padding-inline: 0 var(--padding);\n padding-block: var(--padding);\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 margin-inline-start: 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 margin-block-start: 0;\n margin-block-end: 0;\n margin-inline-start: 6px;\n\n :host(.threshold-2) & {\n margin-block-start: 0;\n margin-block-end: 0;\n margin-inline-start: 11px;\n }\n }\n\n .menu-btn.icon-btn {\n margin: 0 !important;\n border-inline-end: 1.5px solid var(--bar-color-shade);\n }\n\n .user-links {\n position: relative;\n\n .icon-btn {\n padding-inline-end: 0;\n font-size: 0.93em;\n font-weight: 500;\n\n nano-icon {\n margin-inline-start: 5px;\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, 30px, 0);\n transition: transform 0.2s ease, opacity 0.2s ease;\n inset-inline-end: 0;\n font-size: 0.85em;\n min-width: 318px;\n z-index: 2;\n\n &:focus {\n outline: none;\n }\n\n &.show {\n opacity: 1;\n transform: translate3d(0, calc(var(--padding) + 1px), 0);\n }\n\n &-content {\n padding: 0 18px;\n display: flex;\n flex-direction: column;\n color: white;\n\n a {\n padding: 11px 0;\n border-block-end: #669dac 1px solid;\n\n &:hover,\n &:focus {\n color: map.get($colors, darkgrey);\n }\n\n &:last-child {\n border-block-end: 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 & .user-profile {\n background-color: var(--menu-user-bg);\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 margin-inline-end: auto;\n margin-inline-start: 0;\n padding-inline: 11px;\n display: flex;\n align-items: center;\n border: none;\n }\n\n .nav-links {\n font-size: 0.75rem;\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 8px;\n }\n\n &--main {\n justify-content: flex-start;\n letter-spacing: 0.33px;\n font-weight: 600;\n font-stretch: expanded;\n font-size: 0.8125rem;\n\n ::slotted(nano-nav-item) {\n --color: #fff;\n --padding-end: 3px;\n --padding-start: 0;\n }\n }\n\n &--sub {\n --color: var(--color, #e2e2e2);\n\n opacity: 0.9 !important;\n margin-inline-start: 6px;\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 inset-inline-start: auto;\n inset-block-end: auto;\n margin-inline: 11px 0;\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 max-width: 45em;\n margin-inline-start: auto;\n\n .search-widget {\n margin: 0;\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 inset-block-start: 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 inset-inline: 0;\n inset-block-start: 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 { closestElement } from '../../utils/dom';\nimport { clientFetch } from '../../utils/fetch';\nimport { ComponentStore } from '../../utils/store/component-store';\nimport { debounce } from '../../utils/throttle';\nimport { displayTransition } from '../../utils/transitions';\nimport type {\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';\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\n// the 'breakpoints' that different segments of content go into or out-of the burger / overflow menu\nconst THRESHOLDBREAKS = {\n search: 0,\n about: 1,\n main: 2,\n login: 3,\n icon: 4,\n};\n\n/**\n * Nanopore digital global navigation and search bar.\n * Incorporates MyAccount / SSO states (messages / cart / user name etc).\n * Incorporates Algolia search.\n * 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 private THRESHOLDLIMIT = Object.keys(THRESHOLDBREAKS).length;\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 // user profile link\n @State() userProfileUrl: string = '';\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 = this.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 * Alternatively, you can use the `ssoDataUrl` prop.\n */\n @Prop() env?: 'local' | 'dev' | 'test' | 'prod' = 'prod';\n\n /**\n * A base url to retrieve global nav / sso data.\n * `nav_bar_data.json` will be appended to this url.\n * An alternative to the pre-defined `env` urls\n */\n @Prop() ssoDataUrl?: string;\n\n /**\n * Where to take user after SSO login\n */\n @Prop() ssoRedirect: string = encodeURIComponent(window.location.href);\n\n /**\n * Whether to attempt to get global nav / sso data from MyAccount\n */\n @Prop() getMyAccountData: boolean = true;\n\n /**\n * Active MyAccount link sections. By default all will show.\n */\n @Prop() activeMyAccountSections: (\n | 'about'\n | 'loggedin'\n | 'sites'\n | 'icons'\n )[] = null;\n\n /**\n * Whether to show search functionality\n */\n @Prop() showSearch: boolean = true;\n\n /**\n * Whether to show Nanopore logo\n */\n @Prop() showLogo: boolean = true;\n\n /**\n * The link to put on the logo\n */\n @Prop() logoUrl: string = location.protocol + '//' + location.host;\n\n /**\n * An array of Algolia search indexes (and optional display names). Will be automatically populated from MyAccount\n */\n @Prop() searchIndeces: Array<SearchIndex> = [];\n\n /**\n * Logged in user details automatically populated from MyAccount\n */\n @Prop({ mutable: true }) myAccountUser: MyAccountUser = null;\n\n /**\n * An Algolia App ID key. Will be automatically populated from MyAccount\n */\n @Prop({ mutable: true }) searchAppId: string;\n\n /**\n * An Algolia API Key. Will be automatically populated from MyAccount\n */\n @Prop({ mutable: true }) searchApiKey: string;\n\n /**\n * A search value to passed to Algolia to 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('env')\n @Watch('ssoDataUrl')\n async getMyAccData() {\n switch (this.env) {\n case 'prod':\n this.userProfileUrl = 'https://community.nanoporetech.com/profile/me';\n case 'local':\n case 'dev':\n case 'test':\n default:\n this.userProfileUrl =\n 'https://community-test.nanoporetech.com/profile/me';\n break;\n }\n\n if (!this.getMyAccountData || this.myAccData) {\n this.remoteDataReady = true;\n return;\n }\n\n let url = this.ssoDataUrl;\n\n if (!url) {\n switch (this.env) {\n case 'dev':\n url = 'https://myaccount-dev.nanoporetech.com/';\n break;\n case 'test':\n url = 'https://myaccount-test.nanoporetech.com/';\n break;\n default:\n url = 'https://myaccount.nanoporetech.com/';\n break;\n }\n }\n\n const config = { timeout: 5000 };\n\n try {\n if (this.env === 'local') {\n this.myAccData = (await import(\n `./assets/local-my-account.json`\n )) as unknown as MyAccountData;\n } else {\n this.myAccData = await clientFetch(url + 'nav_bar_data.json', config);\n }\n if (this.myAccData.user.id) {\n this.isLoggedIn = true;\n this.myAccountUser = this.myAccData.user;\n }\n this.processMyAccLinks();\n this.processMyAccData();\n setTimeout(() => (this.remoteDataReady = true), 300);\n } catch (e) {\n console.error(e);\n this.remoteDataReady = true;\n }\n }\n\n @Watch('searchIndex')\n currentSelectedIndex() {\n if (!this.internalSearchIndeces.length) {\n return;\n }\n\n const 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\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 < this.THRESHOLDLIMIT - THRESHOLDBREAKS.icon)\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 < this.THRESHOLDLIMIT - THRESHOLDBREAKS.login)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"loggedin\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"loggedin\"]')\n )\n );\n\n if (this.threshold < this.THRESHOLDLIMIT - THRESHOLDBREAKS.main)\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 < this.THRESHOLDLIMIT - THRESHOLDBREAKS.about)\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 = this.THRESHOLDLIMIT;\n }\n\n // General classes for visuals\n\n private thresholdClasses() {\n const classes = [];\n let i = 0;\n for (i; i < this.threshold; i++) classes.push('threshold-' + (i + 1));\n return classes;\n }\n\n /**\n * provides 'isResizing' - we use this to fade content out on 'breakpoint' increase\n * (when the screen size increases). Otherwise the stepping through of\n * breakpoints to calculate if content currently fits shows on screen (looks ugly)\n */\n private setResizingState = (state: boolean = false) => {\n if (typeof this.debounceSetResizingState === 'undefined') {\n this.debounceSetResizingState = debounce(this.setResizingState, 600);\n }\n if (state) {\n this.isResizing = true;\n this.debounceSetResizingState();\n } else {\n this.isResizing = false;\n this.thresholdsGoingUp = false;\n }\n };\n\n // Global DOM Events\n\n private onWindowResize() {\n if (\n this.threshold < this.THRESHOLDLIMIT &&\n window.innerWidth > this.currSize\n ) {\n this.threshold = this.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 const 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 const lookFor = ['title']; // , 'body'\n if (hit._snippetResult) {\n const found = lookFor.find(\n (prop) =>\n hit._snippetResult[prop] &&\n hit._snippetResult[prop].matchLevel !== 'none'\n );\n\n if (found) {\n if (found !== 'title')\n return (\n (hit.title.length > 15\n ? hit.title.substring(0, 15) + ' ...'\n : hit.title) +\n ' ' +\n hit._snippetResult[found].value\n );\n else return hit._snippetResult['title'].value;\n }\n }\n return hit.title;\n }\n\n private onSearchInput = (ev: CustomEvent<InputEvent>) => {\n this.searchValInternal = this.searchInput.value;\n\n if (!this.isSearchValSet()) {\n this.searchLoading = false;\n return;\n }\n\n if (ev.detail.type === 'input') {\n this.showAutocomplete = false;\n this.searchLoading = true;\n }\n };\n\n 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 const 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 const ev = index as CustomEvent<SelectChangeEventDetail>;\n let indexStr = index as string;\n\n if (!this.currentIndex) this.currentSelectedIndex();\n\n if (ev.detail && ev.detail.value.length)\n indexStr = ev.detail.value as string;\n if (!indexStr || !indexStr.length) return;\n if (this.currentIndex.index === indexStr) return;\n\n const selectedIndex = this.internalSearchIndeces.find(\n (index) => index.index === indexStr\n );\n if (!selectedIndex || !selectedIndex.alogliaIndex) return;\n\n this.searchIndex = selectedIndex.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 const found = this.autocompleteEles.find((ele, i) => {\n if (ele === this.el.shadowRoot.activeElement) {\n this.currAIndex = i;\n return true;\n }\n });\n if (found) this.setActiveElement(found);\n else this.currAIndex = -1;\n }\n });\n break;\n case 'ArrowDown':\n case 'ArrowUp':\n if (ev.key === 'ArrowDown') testIndex++;\n else if (ev.key === 'ArrowUp') testIndex--;\n\n const found = this.autocompleteEles[testIndex];\n if (\n found ||\n testIndex < 0 ||\n testIndex > this.autocompleteEles.length - 1\n )\n ev.preventDefault();\n 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 const 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 const scopeSuggestReducer = (\n total: number,\n result: AlgoliaMultiResult\n ) => {\n return result.index !== this.currentIndex.index\n ? total + result.hits.length\n : total;\n };\n const currentSuggestReducer = (\n total: number,\n result: AlgoliaMultiResult\n ) => {\n return result.index === this.currentIndex.index\n ? total + result.hits.length\n : total;\n };\n\n if (this.scopeSearch) {\n scopeChangeSuggestions = this.scopeSearch.results.reduce(\n scopeSuggestReducer,\n 0\n );\n currentScopeHits = this.scopeSearch.results.reduce(\n currentSuggestReducer,\n 0\n );\n }\n\n if (\n (this.autocompleteResults && this.autocompleteResults.hits.length) ||\n (scopeChangeSuggestions && !currentScopeHits)\n ) {\n let scopeSuggestions = 0;\n\n content = (\n <div>\n {!currentScopeHits && (\n <div class=\"search-autocomplete-hit search-autocomplete-hit--no-result\">\n No results matching '{this.searchValInternal}' were found in{' '}\n <strong>{this.currentIndex.name}</strong>. Try another phrase.\n </div>\n )}\n {this.autocompleteResults && [\n this.autocompleteResults.hits.map((hit, i) => {\n return (\n <a\n role=\"option\"\n ref={(a) => this.autocompleteEles.push(a)}\n tabindex=\"-1\"\n id={'autocomplete-hit-' + i}\n href={hit.url}\n class=\"search-autocomplete-hit\"\n innerHTML={this.autocompleteSnippet(hit)}\n ></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 const isRtl = (this.el.ownerDocument as Document).dir === 'rtl';\n\n const searchWidget = this.searchWidget();\n searchWidget.push(this.autocompleteList());\n\n return (\n <Host\n class={{\n [this.thresholdClasses().join(' ')]: true,\n ready: this.ready,\n 'search-bar-shown': this.searchBarShown && this.scrollingUp,\n 'search-auto-complete-shown':\n this.showAutocomplete && this.scrollingUp,\n 'modal-open': this.modalIsOpen,\n resizing: this.isResizing,\n }}\n dir={isRtl ? 'rtl' : null}\n >\n <div\n class={{\n 'global-nav': true,\n 'scrolling-down': !this.scrollingUp,\n }}\n >\n {/* START BURGER / OVERFLOW MENU */}\n <nav\n id=\"global-nav-menu\"\n class={{\n 'gn-menu': true,\n open: this.modalOpen,\n 'has-promotion': this.hasPromotionSlot,\n 'menu-full-screen': this.menuFullScreen,\n 'secondary-open': this.secondaryMenuOpen,\n }}\n aria-expanded={this.modalOpen ? 'true' : 'false'}\n ref={(div) => (this.menuDiv = div)}\n >\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 < this.THRESHOLDLIMIT - 3 && (\n <nano-icon\n name=\"light/times\"\n aria-label=\"close menu\"\n ></nano-icon>\n )}\n {this.threshold >= this.THRESHOLDLIMIT - 3 && (\n <nano-icon\n name=\"light/bars\"\n aria-label=\"close menu\"\n ></nano-icon>\n )}\n </button>\n\n {this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.icon && [\n !!this.iconSlotLen && <slot name=\"icon\" />,\n this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('icons')) && [\n this.msgUrl && (\n <a href={this.msgUrl} class=\"icon-btn\">\n <nano-icon 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 <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.main &&\n !!this.mainSlotLen && <slot name=\"main\" />}\n </nav>\n\n {/* ABOUT AND SITE MENU IN BURGER */}\n {(((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.about) ||\n this.hasSiteSlot ||\n !!this.siteNavItms.length) && (\n <div>\n {(!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.about && [\n // About Menu as an open list (before more items are added to burger)\n (this.threshold >=\n this.THRESHOLDLIMIT - (THRESHOLDBREAKS.about + 1) ||\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 // About Menu as hidden list (when more items are added to burger)\n ((this.threshold <\n this.THRESHOLDLIMIT - (THRESHOLDBREAKS.about + 1) &&\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 {/* SITES MENU (Always in burger) */}\n {(this.hasSiteSlot || !!this.siteNavItms.length) && [\n (this.threshold >= this.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 < this.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 <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.login &&\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 {!!this.myAccountUser?.small_avatar_url && (\n <nano-global-nav-user-profile\n myAccountUser={this.myAccountUser}\n userProfileUrl={this.userProfileUrl}\n ></nano-global-nav-user-profile>\n )}\n <div class=\"content--sub\">\n <slot 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 {/* END BURGER / OVERFLOW MENU */}\n\n {/* START MAIN NAV BAR */}\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 <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.icon) ||\n (this.isLoggedIn &&\n (!!this.loggedInNavItms.length || this.hasLoggedinSlot) &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.login) ||\n (!!this.mainSlotLen &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.main) ||\n ((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.about) ||\n this.hasSiteSlot ||\n !!this.siteNavItms.length) && (\n <button\n class=\"menu-btn icon-btn\"\n onMouseDown={this.menuOpen}\n onKeyDown={this.onMenuBtnKeyDown}\n aria-expanded={this.modalOpen ? 'true' : 'false'}\n aria-controls=\"global-nav-menu\"\n ref={(btn) => (this.menuBtn = btn)}\n >\n <nano-icon\n name=\"light/bars\"\n aria-label=\"open menu\"\n ></nano-icon>\n </button>\n )}\n\n {this.showLogo && (\n <a href={this.logoUrl} class=\"logo-link\">\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 class=\"nav-links nav-links--main\">\n <slot name=\"main\" />\n </div>\n\n {this.threshold >=\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.search && [\n this.showSearch && !!this.internalSearchIndeces.length && (\n <div\n class=\"search-widget\"\n role=\"combobox\"\n aria-owns=\"autocomplete-results\"\n aria-expanded={\n this.showAutocomplete && this.autocompleteResults\n ? 'true'\n : 'false'\n }\n >\n {searchWidget}\n </div>\n ),\n (!this.showSearch || !this.myAccData) &&\n !!this.searchSlotLen && <slot name=\"search\" />,\n ]}\n\n {(!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold >=\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.about && (\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"About the company. Links\"\n >\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 </nav>\n )}\n\n {this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.search &&\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 >=\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.icon && [\n !!this.iconSlotLen && <slot name=\"icon\" />,\n this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('icons')) && [\n this.msgUrl && (\n <a href={this.msgUrl} class=\"icon-btn\">\n <nano-icon 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.activeMyAccountSections ||\n this.activeMyAccountSections.includes('loggedin')) &&\n this.threshold >=\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.login && [\n this.myAccData.urls.login && (\n <a\n href={this.myAccData.urls.login + this.ssoRedirect}\n class=\"login-btn\"\n >\n Login / Register\n </a>\n ),\n this.myAccountUser && (\n <div class=\"user-links\">\n <button\n class={{\n 'icon-btn': true,\n 'user-links-btn': true,\n open: this.userMenuOpen,\n }}\n onMouseDown={this.onUserBtnClick}\n onKeyDown={this.onUserBtnKeyDown}\n >\n {' '}\n {this.myAccountUser.name}\n <nano-icon 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 {!!this.myAccountUser?.small_avatar_url && (\n <nano-global-nav-user-profile\n myAccountUser={this.myAccountUser}\n userProfileUrl={this.userProfileUrl}\n ></nano-global-nav-user-profile>\n )}\n <div class=\"user-links-panel-content\">\n {this.loggedInNavItms.map((link) => {\n return (\n <a href={link.address} target={link.target}>\n {link.title}\n </a>\n );\n })}\n </div>\n <div class=\"user-links-panel-foot\">\n <a\n href={\n this.myAccData.urls.forgot_password +\n this.ssoRedirect\n }\n >\n Change Password\n </a>\n <a\n href={\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 <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.search && (\n <div\n id=\"global-nav-search-bar\"\n class={{\n 'search-bar': true,\n show: this.searchBarShown,\n }}\n aria-expanded={this.searchBarShown ? 'true' : 'false'}\n role=\"region\"\n tabindex=\"-1\"\n ref={(div) => (this.searchBarEl = div)}\n >\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 {/* END MAIN NAV BAR */}\n\n {(this.threshold < this.THRESHOLDLIMIT - 3 ||\n this.menuFullScreen) && (\n <div\n class={{\n mask: true,\n open: this.modalOpen,\n }}\n onClick={this.menuClose}\n onTouchEnd={this.menuClose}\n ></div>\n )}\n </div>\n <div class=\"site-content\" 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 const domain = this.myAccData.domains.find((dm) => dm.origin === origin);\n return domain ? domain.domain : '';\n }\n\n private processSearchResults(results: AlgoliaMultiResults | AlgoliaResults) {\n const multiResults = results as AlgoliaMultiResults;\n const singleResult = results as AlgoliaResults;\n\n if (multiResults.results) {\n multiResults.results.forEach((result, i) => {\n multiResults.results[i] = this.processSearchResults(\n result\n ) as AlgoliaResults;\n });\n return multiResults;\n } else {\n singleResult.hits.map((hit) => {\n if (hit.url && !hit.url.match(/^http/))\n hit.url =\n location.protocol + '//' + this.domainFor(hit.origin) + hit.url;\n });\n return singleResult;\n }\n }\n\n 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"]}
|
@@ -1,5 +0,0 @@
|
|
1
|
-
/*!
|
2
|
-
* Web Components for Nanopore digital Web Apps
|
3
|
-
*/
|
4
|
-
import{r as t,c as o,d as r,w as n,h as e,a as i,g as s}from"./p-1fe12320.js";import{c as a}from"./p-7b3638b7.js";import{d}from"./p-4c6ef60b.js";const c=':host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;--padding:1em;--btn-padding:var(--padding);--btn-bg-color:var(--nano-color-contrast, #dad6d3);--btn-bg-color--open:var(--nano-color-base, #dad6d3);--btn-bg-color--hover:var(--nano-color-tint, #f9f9fb);--btn-text-color:var(--nano-color-base, #455556);--btn-text-color--open:var(--nano-color-contrast, var(--btn-text-color));--btn-text-color--hover:var(--nano-color-contrast, var(--btn-text-color));--content-bg-color:transparent;--content-text-color:#455556;--content-transition:height 0.2s ease-out;--border-width:none;--border-color:none;--border-style:none;--border-radius:none;--box-shadow:none;--focus-style:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));display:block;border-style:var(--border-style);border-width:var(--border-width-dims);border-color:var(--border-color);border-radius:var(--border-radius-dims);-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}:host(:last-of-type){--border-width-dims:0 var(--border-width) var(--border-width);--border-radius-dims:0 0 var(--border-radius) var(--border-radius)}:host(:last-of-type) .open .content{border-radius:0 0 var(--border-radius) var(--border-radius)}:host(:first-of-type){--border-radius-dims:var(--border-radius) var(--border-radius) 0 0;--border-width-dims:var(--border-width)}:host(:first-of-type:last-of-type){--border-radius-dims:var(--border-radius);--border-width-dims:var(--border-width)}:host(:not(:last-of-type):not(:first-of-type)){--border-width-dims:0 var(--border-width) var(--border-width)}:host(.nano-color){--btn-bg-color:var(--nano-color-contrast, var(--nano-color-primary-contrast, #fff));--btn-bg-color--open:var(--nano-color-base, var(--nano-color-primary, #007495));--btn-bg-color--hover:var(--nano-color-tint, var(--nano-color-primary-tint, #2689a5));--btn-text-color:var(--nano-color-base, var(--nano-color-primary, #007495));--btn-text-color--open:var(\n --nano-color-contrast,\n var(--nano-color-primary-contrast, #fff)\n );--btn-text-color--hover:var(\n --nano-color-contrast,\n var(--nano-color-primary-contrast, #fff)\n )}button{inset-block:0;inset-inline:auto;margin:0;inline-size:100%;block-size:100%;border:0;background:transparent;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;padding:var(--btn-padding);text-align:inherit;position:relative;font-size:1em;margin:0;-webkit-transition:0.3s ease background, 0.3s ease color, 0.15s ease box-shadow;transition:0.3s ease background, 0.3s ease color, 0.15s ease box-shadow;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:var(--btn-bg-color);color:var(--btn-text-color);border-radius:var(--border-radius-dims)}button::-moz-focus-inner{border:0}button:focus{-webkit-box-shadow:var(--focus-style);box-shadow:var(--focus-style);outline:none;position:relative;z-index:1}:hover button{background:var(--btn-bg-color--hover);color:var(--btn-text-color--hover)}.open button{background:var(--btn-bg-color--open);color:var(--btn-text-color--open);border-end-end-radius:0;border-end-start-radius:0}button .label{width:100%;max-width:100%;max-height:100%;-webkit-box-flex:1;-ms-flex:1;flex:1;display:inline-block}button .icon{line-height:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;display:inline-block;color:currentColor;-webkit-transition:0.3s ease transform;transition:0.3s ease transform;-webkit-transform-origin:center;transform-origin:center}button .icon--start{margin-inline:0 var(--padding);margin-block:0}button .icon--end{margin-inline:var(--padding) 0;margin-block:0}button .icon ::slotted(nano-icon){--color:"currentColor"}.content{color:var(--content-text-color);background:var(--content-bg-color);height:0;overflow:hidden;-webkit-transition:0.2s ease border-radius;transition:0.2s ease border-radius;outline:none}.loaded .content{-webkit-transition:var(--content-transition), 0.2s ease border-radius;transition:var(--content-transition), 0.2s ease border-radius}.content>*{opacity:0;-webkit-transition:opacity 0.2s ease-out;transition:opacity 0.2s ease-out}.open .content>*{opacity:1}.content__area{padding:var(--padding)}';const l=class{constructor(r){t(this,r);this.nanoOpened=o(this,"nanoOpened",7);this.nanoClosed=o(this,"nanoClosed",7);this.slideId=`nano-details-${b++}`;this.stateChanging=false;this.onKeyDown=t=>{switch(t.key){case"Enter":case" ":this.open=!this.open;break}};this.onMouseDown=()=>{if(this.stateChanging)return;this.open=!this.open};this.isLoading=true;this.label="";this.open=false;this.noHandle=false;this.iconRotation=90;this.color=undefined}toggleClick(){this.stateChanging=true;if(this.open)this.show();else this.hide()}hide(){this.nanoClosed.emit(this.open);d(this.contentEl,"is-shown",false).then((()=>this.stateChanging=false));this.contentEl.style.height="0px"}show(){this.nanoOpened.emit();d(this.contentEl,"is-shown",true).then((()=>{this.stateChanging=false}));this.contentEl.style.height=this.contentArea.scrollHeight+"px"}resize(){if(!this.open||!this.contentArea||!this.contentEl||this.stateChanging)return;r((()=>{if(this.contentArea.scrollHeight>0){n((()=>{this.contentEl.style.height=this.contentArea.scrollHeight+"px"}))}}))}attachRO(){if(this.ro||!this.contentArea)return;const t=this.ro=new ResizeObserver((()=>this.resize()));t.observe(this.contentArea)}componentWillLoad(){this.hasStartSlot=!!this.el.querySelector('[slot="icon-start"]');this.hasEndSlot=!!this.el.querySelector('[slot="icon-end"]');setTimeout((()=>{this.isLoading=false}),100)}componentDidLoad(){if(this.open){setTimeout((()=>{this.show()}),0)}this.attachRO()}connectedCallback(){const t=this.mo=new MutationObserver((()=>this.resize()));t.observe(this.el,{childList:true,subtree:true,attributes:false});this.attachRO()}disconnectedCallback(){if(this.mo)this.mo.disconnect();if(this.ro)this.ro.disconnect()}render(){return e(i,{class:{...a(this.color)}},e("div",{class:{open:this.open,loaded:!this.isLoading}},e("button",{onKeyDown:this.onKeyDown,onMouseDown:this.onMouseDown,onTouchEnd:this.onMouseDown,"aria-controls":this.slideId,"aria-expanded":this.open?"true":"false",style:{display:this.noHandle?"none":""},part:"button"},this.hasStartSlot?e("span",{part:"icon--start",class:"icon icon--start",style:{transform:this.open?`rotate(${this.iconRotation}deg)`:""}},e("slot",{name:"icon-start"})):"",e("div",{class:"label",part:"label"},this.label?this.label:e("slot",{name:"label"})),this.hasEndSlot?e("span",{part:"icon--end",class:"icon icon--end",style:{transform:this.open?`rotate(${this.iconRotation}deg)`:""}},e("slot",{name:"icon-end"})):""),e("div",{class:"content",ref:t=>this.contentEl=t,tabindex:"-1",id:this.slideId,part:"content"},e("div",{ref:t=>this.contentArea=t,class:"content__area"},e("slot",null)))))}get el(){return s(this)}static get watchers(){return{open:["toggleClick"]}}};let b=0;l.style=c;export{l as nano_details};
|
5
|
-
//# sourceMappingURL=p-9f8b091a.entry.js.map
|
@@ -1,5 +0,0 @@
|
|
1
|
-
/*!
|
2
|
-
* Web Components for Nanopore digital Web Apps
|
3
|
-
*/
|
4
|
-
import{c as t}from"./p-82295d91.js";import"./p-1fe12320.js";import"./p-ee045579.js";import"./p-651b3264.js";const o="table.worker";const p="stencil.table.worker";const s=new URL("p-1fd13775.js",import.meta.url).href;const r=new Blob(['importScripts("'+s+'")'],{type:"text/javascript"});const e=URL.createObjectURL(r);const c=t(e,o,p);URL.revokeObjectURL(e);export{c as worker,p as workerMsgId,o as workerName,s as workerPath};
|
5
|
-
//# sourceMappingURL=p-b7b06e04.js.map
|