@nanoporetech-digital/components 2.2.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/dist/cjs/nano-dropdown.cjs.entry.js +2 -1
- package/dist/cjs/nano-dropdown.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-global-nav.cjs.entry.js +62 -33
- package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-nav-item_2.cjs.entry.js +1 -1
- package/dist/cjs/nano-nav-item_2.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-tab-group.cjs.entry.js +1 -1
- package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-tooltip.cjs.entry.js +2 -1
- package/dist/cjs/nano-tooltip.cjs.entry.js.map +1 -1
- package/dist/cjs/{popover-55c687c2.js → popover-848d73ea.js} +4 -2
- package/dist/cjs/popover-848d73ea.js.map +1 -0
- package/dist/collection/components/accordion/accordion.js +1 -1
- package/dist/collection/components/alert/alert.js +1 -1
- package/dist/collection/components/algolia/algolia-filter.js +2 -2
- package/dist/collection/components/algolia/algolia-input.js +5 -5
- package/dist/collection/components/algolia/algolia-results.js +1 -1
- package/dist/collection/components/algolia/algolia.js +6 -6
- package/dist/collection/components/checkbox/checkbox-group.js +2 -2
- package/dist/collection/components/checkbox/checkbox.js +3 -3
- package/dist/collection/components/datalist/datalist.js +1 -1
- package/dist/collection/components/date-input/date-input.js +7 -7
- package/dist/collection/components/date-picker/date-picker.js +5 -5
- package/dist/collection/components/details/details.js +1 -1
- package/dist/collection/components/dialog/dialog.js +1 -1
- package/dist/collection/components/file-upload/file-upload.js +4 -4
- package/dist/collection/components/global-nav/global-nav.css +11 -6
- package/dist/collection/components/global-nav/global-nav.js +67 -38
- package/dist/collection/components/global-nav/global-nav.js.map +1 -1
- package/dist/collection/components/grid/grid-item.js +1 -1
- package/dist/collection/components/icon/icon.js +1 -1
- package/dist/collection/components/input/input.js +5 -5
- package/dist/collection/components/nav-item/nav-item.css +4 -1
- package/dist/collection/components/nav-item/nav-item.js +4 -4
- package/dist/collection/components/range/range.js +4 -4
- package/dist/collection/components/resize-observe/resize-observe.js +1 -1
- package/dist/collection/components/select/select.js +7 -7
- package/dist/collection/components/slides/slides.js +7 -7
- package/dist/collection/components/tabs/tab-group.css +6 -4
- package/dist/collection/components/tabs/tab-group.js +2 -2
- package/dist/collection/utils/popover.js +2 -1
- package/dist/collection/utils/popover.js.map +1 -1
- package/dist/components/nano-global-nav.js +62 -33
- package/dist/components/nano-global-nav.js.map +1 -1
- package/dist/components/nano-tab-group.js +1 -1
- package/dist/components/nano-tab-group.js.map +1 -1
- package/dist/components/nav-item.js +1 -1
- package/dist/components/nav-item.js.map +1 -1
- package/dist/components/popover.js +3 -1
- package/dist/components/popover.js.map +1 -1
- package/dist/custom-elements/index.js +65 -36
- package/dist/custom-elements/index.js.map +1 -1
- package/dist/esm/nano-dropdown.entry.js +2 -1
- package/dist/esm/nano-dropdown.entry.js.map +1 -1
- package/dist/esm/nano-global-nav.entry.js +62 -33
- package/dist/esm/nano-global-nav.entry.js.map +1 -1
- package/dist/esm/nano-nav-item_2.entry.js +1 -1
- package/dist/esm/nano-nav-item_2.entry.js.map +1 -1
- package/dist/esm/nano-tab-group.entry.js +1 -1
- package/dist/esm/nano-tab-group.entry.js.map +1 -1
- package/dist/esm/nano-tooltip.entry.js +2 -1
- package/dist/esm/nano-tooltip.entry.js.map +1 -1
- package/dist/esm/{popover-d9dc8e13.js → popover-46b5193d.js} +4 -2
- package/dist/{nano-components/p-3c3e9fec.system.js.map → esm/popover-46b5193d.js.map} +1 -1
- package/dist/esm-es5/nano-dropdown.entry.js +1 -1
- package/dist/esm-es5/nano-dropdown.entry.js.map +1 -1
- package/dist/esm-es5/nano-global-nav.entry.js +1 -1
- package/dist/esm-es5/nano-global-nav.entry.js.map +1 -1
- package/dist/esm-es5/nano-nav-item_2.entry.js +1 -1
- package/dist/esm-es5/nano-nav-item_2.entry.js.map +1 -1
- package/dist/esm-es5/nano-tab-group.entry.js +2 -2
- package/dist/esm-es5/nano-tab-group.entry.js.map +1 -1
- package/dist/esm-es5/nano-tooltip.entry.js +1 -1
- package/dist/esm-es5/nano-tooltip.entry.js.map +1 -1
- package/dist/esm-es5/popover-46b5193d.js +5 -0
- package/dist/esm-es5/popover-46b5193d.js.map +1 -0
- package/dist/nano-components/nano-components.esm.js +1 -1
- package/dist/nano-components/p-094ab6f8.entry.js +5 -0
- package/dist/nano-components/{p-a0515a0f.entry.js.map → p-094ab6f8.entry.js.map} +1 -1
- package/dist/nano-components/p-096682d9.system.js +1 -1
- package/dist/nano-components/p-12f70017.system.entry.js +5 -0
- package/dist/nano-components/p-12f70017.system.entry.js.map +1 -0
- package/dist/nano-components/p-4b7cd30c.js +5 -0
- package/dist/nano-components/p-4b7cd30c.js.map +1 -0
- package/dist/nano-components/p-6dd58c39.entry.js +5 -0
- package/dist/nano-components/p-6dd58c39.entry.js.map +1 -0
- package/dist/nano-components/p-8b3ee91b.system.entry.js +5 -0
- package/dist/nano-components/{p-ca466250.system.entry.js.map → p-8b3ee91b.system.entry.js.map} +1 -1
- package/dist/nano-components/p-8de6e276.entry.js +5 -0
- package/dist/nano-components/p-8de6e276.entry.js.map +1 -0
- package/dist/nano-components/p-bcd69559.entry.js +5 -0
- package/dist/nano-components/p-bcd69559.entry.js.map +1 -0
- package/dist/nano-components/p-d35d468b.system.js +5 -0
- package/dist/{cjs/popover-55c687c2.js.map → nano-components/p-d35d468b.system.js.map} +1 -1
- package/dist/nano-components/p-e01adaa3.entry.js +5 -0
- package/dist/nano-components/{p-17bf76c4.entry.js.map → p-e01adaa3.entry.js.map} +1 -1
- package/dist/nano-components/p-ec39b143.system.entry.js +5 -0
- package/dist/nano-components/p-ec39b143.system.entry.js.map +1 -0
- package/dist/nano-components/p-f9e30f31.system.entry.js +5 -0
- package/dist/nano-components/p-f9e30f31.system.entry.js.map +1 -0
- package/dist/nano-components/p-fd1a86d2.system.entry.js +5 -0
- package/dist/nano-components/{p-7fcbc27f.system.entry.js.map → p-fd1a86d2.system.entry.js.map} +1 -1
- package/dist/types/components/global-nav/global-nav.d.ts +1 -0
- package/docs-json.json +6 -1
- package/package.json +2 -2
- package/dist/esm/popover-d9dc8e13.js.map +0 -1
- package/dist/esm-es5/popover-d9dc8e13.js +0 -5
- package/dist/esm-es5/popover-d9dc8e13.js.map +0 -1
- package/dist/nano-components/p-17bf76c4.entry.js +0 -5
- package/dist/nano-components/p-1ec44caf.entry.js +0 -5
- package/dist/nano-components/p-1ec44caf.entry.js.map +0 -1
- package/dist/nano-components/p-3c3e9fec.system.js +0 -5
- package/dist/nano-components/p-3f736fa2.system.entry.js +0 -5
- package/dist/nano-components/p-3f736fa2.system.entry.js.map +0 -1
- package/dist/nano-components/p-58419bed.system.entry.js +0 -5
- package/dist/nano-components/p-58419bed.system.entry.js.map +0 -1
- package/dist/nano-components/p-625d3733.js +0 -5
- package/dist/nano-components/p-625d3733.js.map +0 -1
- package/dist/nano-components/p-7fcbc27f.system.entry.js +0 -5
- package/dist/nano-components/p-a0515a0f.entry.js +0 -5
- package/dist/nano-components/p-ad0715d1.entry.js +0 -5
- package/dist/nano-components/p-ad0715d1.entry.js.map +0 -1
- package/dist/nano-components/p-b19e0775.system.entry.js +0 -5
- package/dist/nano-components/p-b19e0775.system.entry.js.map +0 -1
- package/dist/nano-components/p-c954c040.entry.js +0 -5
- package/dist/nano-components/p-c954c040.entry.js.map +0 -1
- package/dist/nano-components/p-ca466250.system.entry.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","_a","body","customConfig","__rest","headers","Accept","Access-Control-Allow-Origin","Content-Type","Cache","config","Object","assign","method","credentials","keepalive","mode","JSON","stringify","id","setTimeout","window","AbortController","controller","timeout","abort","signal","response","fetch","clearTimeout","ok","json","errorMessage","text","Error","globalNavCss","THRESHOLDLIMIT","GlobalNav","[object Object]","hostRef","this","currSize","thresholdsGoingUp","autocompleteEles","currAIndex","isLoggedIn","myAccData","aboutNavItms","siteNavItms","loggedInNavItms","hasLoggedinSlot","hasSiteSlot","hasPromotionSlot","aboutSlotLen","iconSlotLen","mainSlotLen","overflowSlotLen","searchSlotLen","internalSearchIndeces","thresholdReady","remoteDataReady","ready","isResizing","threshold","modalOpen","modalIsOpen","searchBarShown","scrollingUp","searchLoading","showAutocomplete","secondaryMenuOpen","userMenuOpen","menuFullScreen","searchValInternal","env","ssoRedirect","encodeURIComponent","location","href","getMyAccountData","activeMyAccountSections","showSearch","showLogo","logoUrl","protocol","host","searchIndeces","myAccountUser","searchValue","searchIndex","cartCount","msgCount","cartUrl","msgUrl","setResizingState","state","debounceSetResizingState","debounce","onMenuBtnKeyDown","ev","key","menuClose","menuOpen","onMenuBtnClick","e","preventDefault","menuDiv","style","display","menuWrapDiv","addEventListener","focus","preventScroll","scrollHeight","innerHeight","document","overflow","overflowX","onMenuHidden","removeEventListener","activeElement","menuBtn","mainBarDiv","force","relatedTarget","closestElement","closest","subMenuClose","target","open","onUserBtnClick","onUserBtnKeyDown","onUserMenuBlur","onSearchBtnClick","searchbarShow","searchbarHide","onSearchBtnKeyDown","onSearchBarShown","searchBarEl","searchInput","setFocus","length","onSearchBarHidden","height","onSearchInput","value","isSearchValSet","detail","type","onSearchChange","autocompleteResults","nanoSearchReset","emit","currentIndex","currentSelectedIndex","processSearchResults","alogliaIndex","search","attributesToSnippet","hitsPerPage","filters","Math","floor","Date","now","console","error","scopeSearch","onSearchSubmit","showAutocompleteResults","algoliaSearchResults","queries","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","switchIndexSubmit","onAutocompleteBlur","hits","onAutocompleteInteract","testIndex","el","shadowRoot","found","ele","setActiveElement","click","foundIndex","algoliasearch","addAlgoliaIndeces","forEach","initIndex","newThreshold","oldThreshold","intersectRatio","ratioChange","siteContent","minHeight","barsDiv","clientHeight","menuItems","barItems","readTask","Array","from","querySelectorAll","push","writeTask","item","classList","add","remove","attachIO","nanoIsReady","classes","innerWidth","secondaryMenu","stopPropagation","menuContentDiv","displayTransition","userLinkPanel","querySelector","hit","lookFor","_snippetResult","prop","matchLevel","title","substring","autocompleteEle","setAttribute","io","root","IntersectionObserver","data","slice","intersectionRatio","observe","debounceResize","onWindowResize","bind","initAlgoliaClient","ComponentStore","init","MutationObserver","mo","assessSlottedContent","childList","subtree","disconnect","undefined","getMyAccData","content","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","includes","urls","login","link","address","forgot_password","logout","auto-resize","break-point-max","quietMode","w","btn","src","getAssetPath","alt","aria-owns","icon-btn","user-links-btn","search-bar","show","onTouchEnd","origin","dm","multiResults","singleResult","match","domainFor","__sc_import_nano_components","user","processMyAccLinks","processMyAccData","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\n display: block;\n position: relative;\n line-height: 1.5;\n height: 100%;\n\n * {\n box-sizing: inherit;\n }\n}\n\n// Common\n.global-nav {\n @include text-inherit();\n\n font-size: 0.88em;\n z-index: #{$layer-index-menubar};\n\n button {\n background: none;\n color: inherit;\n border: none;\n padding: 0;\n }\n\n .icon-btn {\n position: relative;\n background: none;\n color: inherit;\n border: none;\n align-self: normal;\n padding: 9px 7px;\n cursor: pointer;\n display: flex;\n align-items: center;\n\n nano-icon {\n width: 18px;\n height: 18px;\n }\n }\n\n ::slotted(nano-nav-item[slot='icon']) {\n --padding-top: 9px;\n --padding-bottom: 9px;\n --padding-start: 7px;\n --padding-end: 7px;\n --display: flex;\n\n font-size: 18px;\n }\n\n a {\n color: inherit;\n text-decoration: none;\n white-space: nowrap;\n }\n\n .nav-links {\n &_title {\n margin: 8px 0 3px;\n }\n\n ul {\n margin: 0;\n padding: 0;\n }\n\n li {\n list-style: none;\n }\n }\n\n .login-btn {\n display: flex;\n align-items: center;\n font-size: 0.94em;\n }\n\n .menu-btn {\n padding: 9px var(--padding) 9px var(--padding);\n }\n}\n\n// Popup / Slideout Menu\n.gn-menu {\n position: fixed;\n top: 0;\n left: 0;\n z-index: -1;\n display: none;\n transition: z-index 0.01s ease 0.2s;\n height: 100vh;\n width: 100vw;\n overflow-y: auto;\n\n @include rtl-host() {\n left: auto;\n right: 0;\n }\n\n :host(.threshold-2) & {\n position: absolute;\n width: calc(100vw - 20px);\n }\n\n &.menu-full-screen {\n width: 100vw !important;\n }\n\n // &.secondary-open {\n // overflow-y: hidden;\n // }\n\n &_wrap {\n max-width: 92vw;\n width: 335px;\n background: var(--menu-background);\n color: var(--menu-text-color);\n padding: var(--padding) 0;\n box-shadow: 0 0 36px 0 rgba(0, 0, 0, 0.8);\n position: relative;\n pointer-events: all;\n margin-bottom: 36px;\n opacity: 0;\n outline: none;\n transition: transform 0.2s ease, opacity 0.2s ease;\n\n &.has-promotion {\n padding: var(--padding) 0 0;\n }\n }\n\n &.open {\n z-index: #{$layer-index-dropdown};\n transition: z-index 0.01s ease;\n\n .gn-menu_wrap {\n opacity: 1;\n transform: translate3d(0, 0, 0) !important;\n transition: transform 0.2s ease 0.01s, opacity 0.2s ease 0.01s;\n }\n }\n\n &_actions {\n @include padding(null, calc(var(--padding) / 2), null, null);\n\n display: flex;\n justify-content: space-between;\n\n &-counter {\n background: #d0021b;\n color: #fff;\n position: absolute;\n bottom: 4px;\n right: 0;\n left: auto;\n font-size: 9px;\n height: 14px;\n line-height: 14px;\n width: auto;\n min-width: 14px;\n border-radius: 50%;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n text-align: center;\n text-indent: 0;\n }\n }\n\n .content {\n &-wrap {\n position: relative;\n overflow: hidden;\n transition: 0.2s ease min-height;\n min-height: 190px;\n }\n\n &--sub {\n padding: var(--padding) 0 var(--padding) 7px;\n }\n }\n\n .menu-btn {\n @include margin(null, auto, null, null);\n }\n\n .nav-links {\n display: flex;\n flex-wrap: wrap;\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n --icon-size: 14px;\n --display: inline-block;\n --secondary-bg-color: #001a21;\n --padding-top: 10px;\n --padding-bottom: 10px;\n --padding-end: calc(var(--padding) * 2);\n --padding-start: calc(var(--padding) + 3px);\n --color: white;\n --color-hover: #{map.get($colors, lightblue)};\n --bg-color-hover: transparent;\n --bg-color-focus: #002530;\n --focus-outline: none;\n\n font-size: 0.99em;\n width: 100%;\n // margin: 0 0;\n }\n\n .user-nav {\n --bg-color: #193037;\n --padding-top: 9px;\n --padding-bottom: 9px;\n\n font-weight: bold;\n margin: 5px 0 0;\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n font-weight: 500;\n\n --bg-color: transparent;\n }\n }\n\n &_title {\n margin: 0 var(--padding) 4px;\n border-bottom: 1px solid #33484d;\n padding-bottom: 8px;\n font-size: 0.86em;\n text-transform: uppercase;\n color: map.get($colors, lightblue);\n letter-spacing: 1px;\n font-weight: 700;\n }\n\n &-wrap {\n margin: 18px 0;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n .back-btn {\n border-top: 1px solid #33484d;\n border-bottom: 1px solid #33484d;\n display: flex;\n align-items: center;\n padding: 10px 11px 10px 0;\n width: 100%;\n font-size: 12px;\n text-transform: uppercase;\n color: map.get($colors, lightblue);\n letter-spacing: 1px;\n font-weight: 700;\n\n nano-icon {\n @include margin(null, 10px, null, null);\n\n font-size: 12px;\n color: white;\n }\n }\n\n &--sub {\n display: flex;\n flex-wrap: wrap;\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n --border-bottom: none;\n --padding-end: var(--padding);\n --padding-start: var(--padding);\n --padding-top: 8px;\n --padding-bottom: 8px;\n\n margin: 0;\n width: 50%;\n line-height: 1.8;\n }\n }\n\n .content {\n padding: 8px var(--padding);\n }\n }\n\n .login-btn {\n @include padding(9px, var(--padding), 9px, 7px);\n\n nano-icon {\n @include margin(null, null, null, 10px);\n }\n }\n\n .logout-btn {\n justify-content: flex-end;\n\n a {\n padding: 0 5px;\n }\n }\n}\n\n// Main Bar\n.sticker-trigger {\n background: var(--bar-background);\n width: 100%;\n z-index: calc(#{$layer-index-menubar} + 1);\n}\n\n.bars {\n color: var(--bar-text-color);\n z-index: #{$layer-index-menubar};\n position: relative;\n max-width: 100%;\n min-width: 100%;\n box-shadow: none;\n transition: 0.2s ease box-shadow;\n\n [stuck] & {\n box-shadow: 0 1px 25px 0 rgba(0, 0, 0, 0.15);\n }\n\n &::before {\n content: '';\n width: 100%;\n height: 100%;\n z-index: -1;\n background: var(--bar-background);\n position: absolute;\n }\n\n .search {\n &-widget {\n @include margin(null, auto, null, 11px);\n\n position: relative;\n flex: 1 1 auto;\n max-width: 45vw;\n min-width: 269px;\n max-height: 36px;\n }\n\n &-inputs {\n display: flex;\n margin: 0;\n\n input[type='submit'] {\n display: none;\n }\n }\n\n &-autocomplete {\n position: absolute;\n top: calc(100% - 2px);\n width: 100%;\n left: 0;\n background: white;\n border: 2px solid var(--bar-color-tint);\n border-radius: 0 0 5px 5px;\n color: map.get($colors, black);\n font-size: 0.85em;\n padding: calc(var(--padding) / 2) 0 1px 0;\n z-index: 1;\n\n @include rtl-host() {\n left: auto;\n right: 0;\n }\n\n &-hit {\n padding:\n calc(var(--padding) / 4) var(--padding)\n calc(var(--padding) / 4) var(--padding);\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: block;\n text-align: left;\n line-height: 1.5;\n cursor: pointer;\n\n @include rtl-host() {\n text-align: right;\n }\n\n &-scope {\n font-size: 0.76em;\n // text-indent: 10px;\n color: rgb(167, 176, 179);\n font-weight: 600;\n }\n\n &:hover,\n &:focus {\n background-color: map.get($colors, lightgrey);\n }\n\n .search__highlight,\n em {\n font-weight: bold;\n font-style: normal;\n }\n\n &--no-result {\n &:hover,\n &:focus {\n background: none !important;\n }\n }\n }\n\n &-foot {\n margin: 7px 0 0;\n }\n\n &-submit {\n background: none;\n border: none;\n align-self: normal;\n padding: 9px var(--padding);\n cursor: pointer;\n display: flex;\n align-items: center;\n color: map.get($colors, blue);\n justify-content: flex-end;\n width: 100%;\n text-decoration: underline;\n border-top: 1px solid rgb(232, 234, 234);\n\n &:hover,\n &:focus {\n background-color: map.get($colors, lightgrey);\n }\n }\n }\n }\n\n .search-input {\n --input-border-style: solid 1px rgb(85, 140, 157);\n --input-border-style--focus: solid 1px var(--bar-color-focus, #90c6e7);\n --input-border-width: 1px;\n\n font-size: 0.9em;\n }\n\n nano-select.search-input {\n --input-bg-color: var(--bar-color-tint, rgb(88, 140, 161));\n --input-text-color: inherit;\n --input-border-radius: 5px 0 0 5px;\n\n flex: 0 1 auto;\n width: auto;\n display: flex;\n align-items: center;\n flex-direction: column;\n position: relative;\n left: 1px;\n\n @include rtl-host() {\n --input-border-radius: 0 5px 5px 0;\n }\n\n :host(:not(.ready)) & {\n overflow: hidden;\n max-height: 1em;\n }\n\n .down-arrow {\n font-size: 0.65em;\n }\n }\n\n nano-input.search-input {\n --input-text-color: inherit;\n --input-bg-color: var(--bar-color-shade, rgb(40, 110, 133));\n --clear-btn-color: #{map.get($colors, black)};\n --input-border-radius: 0 5px 5px 0;\n --placeholder-color: white;\n\n width: 206px;\n display: flex;\n align-items: center;\n flex-direction: column;\n flex: 1;\n\n @include rtl-host() {\n --input-border-radius: 5px 0 0 5px;\n }\n\n :host(:not(.ready)) & {\n overflow: hidden;\n max-height: 1em;\n }\n\n &.has-value {\n --input-bg-color: #{map.get($colors, white)};\n --input-text-color: #{map.get($colors, black)};\n\n .search-icon {\n color: #{map.get($colors, black)};\n }\n }\n\n .search-icon {\n background: none;\n color: white;\n padding: 0 8px;\n display: none;\n\n &--show {\n display: flex;\n }\n\n &--loader {\n animation: spin 1s linear infinite;\n\n @keyframes spin {\n 100% {\n transform: rotate(360deg);\n }\n }\n }\n\n nano-icon {\n height: 1.4em;\n }\n }\n }\n}\n\n.main-bar {\n width: 100%;\n\n @include padding(var(--padding), var(--padding), var(--padding), 0);\n\n display: flex;\n align-items: center;\n justify-content: space-between;\n overflow-x: hidden;\n\n &:focus {\n outline: none;\n }\n\n :host(.ready) & {\n overflow-x: visible;\n }\n\n > *,\n ::slotted(*) {\n transition: opacity 0.2s ease;\n\n :host(:not(.ready)) & {\n opacity: 0 !important;\n }\n\n :host(.ready) & {\n opacity: 1;\n }\n\n :host(.resizing) & {\n opacity: 0 !important;\n }\n }\n\n > * {\n flex: 0 0 auto;\n\n ::slotted(nano-nav-item[slot='icon']) {\n @include margin(null, null, null, 11px);\n }\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n --color-hover: #{map.get($colors, lightgrey)};\n --secondary-bg-color: var(--menu-dropdown-bg);\n --secondary-color: var(--menu-dropdown-color);\n --bg-color-open: var(--bar-background);\n\n text-decoration: none !important;\n }\n }\n\n .icon-btn {\n @include margin(0, null, 0, 6px);\n\n :host(.threshold-2) & {\n @include margin(0, null, 0, 11px);\n }\n }\n\n .menu-btn.icon-btn {\n margin: 0 !important;\n\n @include ltr-host() {\n border-right: 1.5px solid var(--bar-color-shade);\n }\n\n @include rtl-host() {\n border-left: 1.5px solid var(--bar-color-shade);\n }\n }\n\n .user-links {\n position: relative;\n\n .icon-btn {\n @include padding(null, 0, null, null);\n\n font-size: 0.93em;\n font-weight: 500;\n\n nano-icon {\n @include margin(null, null, null, 5px);\n\n width: 16px;\n height: 16px;\n transform-origin: center;\n transition: transform 0.2s ease, color 0.2s ease;\n }\n\n &.open {\n nano-icon {\n transform: rotate(180deg);\n color: map.get($colors, blue);\n }\n }\n }\n\n &-panel {\n display: none;\n position: absolute;\n border-radius: 4px 0 4px 4px;\n box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.4);\n background-color: #568c9d;\n opacity: 0;\n transform: translate3d(0, 24px, 0);\n transition: transform 0.2s ease, opacity 0.2s ease;\n right: 0;\n font-size: 0.85em;\n min-width: 250px;\n z-index: 1;\n\n @include rtl-host() {\n right: auto;\n left: 0;\n }\n\n &:focus {\n outline: none;\n }\n\n &.show {\n opacity: 1;\n transform: translate3d(0, 4px, 0);\n }\n\n &-content {\n padding: 0 18px;\n display: flex;\n flex-direction: column;\n\n a {\n padding: 11px 0;\n border-bottom: #669dac 1px solid;\n\n &:hover,\n &:focus {\n color: map.get($colors, darkgrey);\n }\n\n &:last-child {\n border-bottom: none;\n }\n }\n }\n\n &-foot {\n background-color: #aac5cd;\n border-radius: 0 0 4px 4px;\n padding: var(--padding);\n color: #455556;\n display: flex;\n align-items: center;\n font-weight: 500;\n justify-content: space-between;\n\n a:hover {\n text-decoration: underline;\n }\n }\n }\n }\n\n .logo {\n height: 34px;\n width: auto;\n min-width: 196px;\n\n :host(:not(.threshold-1)) & {\n height: 30px;\n }\n }\n\n .logo-link {\n @include margin(null, auto, null, 0);\n @include padding(null, 11px, null, 11px);\n\n display: flex;\n align-items: center;\n border: none;\n }\n\n .nav-links {\n font-size: 0.86em;\n flex: 1 0 auto;\n display: flex;\n justify-content: space-around;\n\n ul {\n display: flex;\n justify-content: space-around;\n }\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n --padding-top: 7px;\n --padding-bottom: 7px;\n --padding-end: 2px;\n --padding-start: 2px;\n --margin: 0 11px;\n }\n\n &--main {\n font-weight: bold;\n justify-content: flex-start;\n\n ::slotted(nano-nav-item) {\n --color: white;\n --padding-end: 6px;\n --padding-start: 6px;\n }\n }\n\n &--sub {\n @include margin(null, null, null, 6px);\n\n --color: #e2e2e2;\n\n justify-content: flex-end;\n }\n }\n\n .login-btn {\n display: inline-block;\n border-radius: 4px;\n background-color: #17bb75;\n color: #fff;\n padding: 3px 10px;\n position: relative;\n left: auto;\n bottom: auto;\n\n @include margin(null, 0, null, 11px);\n }\n\n .measure-ele {\n min-width: 1px;\n display: block;\n margin: 0;\n padding: 0;\n }\n}\n\n.search-bar {\n height: 0;\n overflow: hidden;\n transition: 0.2s ease height;\n padding: 0 var(--padding);\n outline: none;\n\n .search-widget {\n @include margin(0, 0, 0, 0);\n\n overflow: inherit;\n max-width: none;\n max-height: none;\n padding: 0 0 var(--padding);\n }\n\n .search-inputs {\n padding: 0 0;\n margin: 0 0;\n }\n\n .search-autocomplete {\n top: calc(100% - (var(--padding) + 1px));\n }\n}\n\n.site-content {\n display: flex;\n transition: min-height 0.2s ease;\n min-height: calc(100% - 61px);\n position: relative;\n z-index: auto;\n align-items: stretch;\n}\n\n.mask {\n opacity: 0;\n background: rgba(0, 0, 0, 0.3);\n position: fixed;\n left: 0;\n right: 0;\n top: 0;\n height: 100vh;\n z-index: -1;\n transition:\n transform 0.2s ease,\n opacity 0.2s ease,\n visibility 0.01s ease 0.2s,\n z-index 0.01s ease 0.2s;\n visibility: hidden;\n\n &.open {\n opacity: 1;\n transition:\n z-index 0.01s ease,\n visibility 0.01s ease,\n transform 0.2s ease 0.01s,\n opacity 0.2s ease 0.01s;\n z-index: 3;\n visibility: visible;\n }\n}\n","import {\n Component,\n h,\n Host,\n Element,\n State,\n Watch,\n Event,\n EventEmitter,\n Prop,\n Listen,\n Build,\n getAssetPath,\n readTask,\n writeTask,\n Method,\n VNode,\n ComponentInterface,\n} from '@stencil/core';\nimport algoliasearch, { SearchClient as AlgoliaClient } from 'algoliasearch';\nimport { debounce, closestElement, displayTransition } from '../../utils';\nimport { clientFetch } from '../../utils/fetch';\nimport {\n InputChangeEventDetail,\n SelectChangeEventDetail,\n AlgoliaResults,\n SearchIndex,\n MyAccountLink,\n AloliaSearchResultDetail,\n AlgoliaMultiResult,\n MyAccountUser,\n NavItemEventDetail,\n AlgoliaResultHit,\n AlgoliaNetworkError,\n AlgoliaMultiResults,\n} from '../../interface';\nimport { ComponentStore } from '../../utils/store/component-store';\n\ninterface MyAccountData {\n user: MyAccountUser;\n cart: {\n count: number;\n url: string;\n };\n notifications: { count: number };\n hs: { lists?: Array<number> };\n registration: { next_url: string | null };\n links: null | MyAccountLink[];\n urls: {\n forgot_password: string | null;\n logout: string | null;\n login: string | null;\n messages: string | null;\n cart: string | null;\n };\n domains: [\n {\n origin: string;\n domain: string;\n }\n ];\n search: {\n app_id: string;\n api_key: string;\n indeces: [\n {\n index: string;\n name: string;\n domain: string;\n all_group?: boolean;\n filters?: [string];\n }\n ];\n };\n}\n\nconst THRESHOLDLIMIT = 5;\n/**\n * Nanopore digital global navigation and search bar.\n * Incorporates MyAccount / SSO states (messages / cart / user name etc).\n * Incorporates Algolia search.\n * GlobalNav is designed to be at the root of the `<body>`.\n * There should only be one <nano-global-nav> in the DOM.\n * The following demo uses static data.\n * @slot main - main nav items. Should be used with nano-nav-item's\n * @slot icon - nano-nav-item's displayed alongside icon links that come from MyAccount\n * @slot loggedin - nano-nav-item's to display when users are signed in, alongside links from from MyAccount (within the overflow menu panel).\n * @slot about - nano-nav-item's to display with about links that come from MyAccount\n * @slot site - nano-nav-item's to display with site links that come from MyAccount\n * @slot overflow - items to always display in the overflow menu\n * @slot search - when not using myaccount search OR show-search=\"false\" you can utilise the search slot\n * @slot promotion - a free area for any promotional content, displayed within the overflow menu panel\n * @slot logo - when show-logo=\"false\" you can utilise the logo slot\n */\n@Component({\n tag: 'nano-global-nav',\n styleUrl: 'global-nav.scss',\n shadow: true,\n assetsDirs: ['assets'],\n})\nexport class GlobalNav implements ComponentInterface {\n // position and dimension state\n private io: IntersectionObserver;\n private debounceResize: () => {};\n private debounceSetResizingState: () => {};\n private currSize: number = 0;\n private thresholdsGoingUp: boolean = false;\n\n // menu\n private menuDiv: HTMLElement;\n private menuBtn: HTMLButtonElement;\n private menuWrapDiv: HTMLDivElement;\n private menuContentDiv: HTMLDivElement;\n\n // search\n private searchBarEl: HTMLDivElement;\n private searchInput: HTMLNanoInputElement;\n private algoliaClient: AlgoliaClient;\n private currentIndex: SearchIndex;\n private autocompleteResults: AlgoliaResults | null;\n private autocompleteEles: Array<HTMLAnchorElement | HTMLButtonElement> = [];\n private currAIndex: number = -1;\n private algoliaSearchResults: AlgoliaMultiResults | null;\n private scopeSearch: AlgoliaMultiResults | null;\n\n // general\n private mainBarDiv: HTMLElement;\n private barsDiv: HTMLDivElement;\n private siteContent: HTMLDivElement;\n private userLinkPanel: HTMLDivElement;\n private isLoggedIn: boolean = false;\n\n private myAccData: MyAccountData = null;\n\n // myaccount links\n private aboutNavItms: MyAccountLink[] = [];\n private siteNavItms: MyAccountLink[] = [];\n private loggedInNavItms: MyAccountLink[] = [];\n\n // has slot tests\n private mo?: MutationObserver;\n @State() hasLoggedinSlot: boolean = false;\n @State() hasSiteSlot: boolean = false;\n @State() hasPromotionSlot: boolean = false;\n\n // slot item number tests\n @State() aboutSlotLen: number = 0;\n @State() iconSlotLen: number = 0;\n @State() mainSlotLen: number = 0;\n @State() overflowSlotLen: number = 0;\n @State() searchSlotLen: number = 0;\n\n @State() internalSearchIndeces: Array<SearchIndex> = [];\n @State() thresholdReady: boolean = false;\n @State() remoteDataReady: boolean = false;\n @State() ready: boolean = false;\n @State() isResizing: boolean = false;\n @State() intersectRatio: number;\n @State() threshold: number = THRESHOLDLIMIT;\n @State() modalOpen: boolean = false;\n @State() modalIsOpen: boolean = false;\n @State() searchBarShown: boolean = false;\n @State() scrollingUp: boolean = true;\n @State() searchLoading: boolean = false;\n @State() showAutocomplete: boolean = false;\n @State() secondaryMenuOpen: boolean = false;\n @State() userMenuOpen: boolean = false;\n @State() menuFullScreen: boolean = false;\n @State() searchValInternal: string = '';\n\n @Element() private el: HTMLNanoGlobalNavElement;\n\n /**\n * Connect to local, dev, test or prod MyAccount\n * environments to retrieve global nav / sso data\n */\n @Prop() env: 'local' | 'dev' | 'test' | 'prod' = 'prod';\n\n /**\n * Where to take user after SSO login\n */\n @Prop() ssoRedirect: string = encodeURIComponent(window.location.href);\n\n /**\n * Whether to attempt to get global nav / sso data from MyAccount\n */\n @Prop() getMyAccountData: boolean = true;\n\n /**\n * Active MyAccount link sections. By default all will show.\n */\n @Prop() activeMyAccountSections: (\n | 'about'\n | 'loggedin'\n | 'sites'\n | 'icons'\n )[] = null;\n\n /**\n * Whether to show search functionality\n */\n @Prop() showSearch: boolean = true;\n\n /**\n * Whether to show Nanopore logo\n */\n @Prop() showLogo: boolean = true;\n\n /**\n * The link to put on the logo\n */\n @Prop() logoUrl: string = location.protocol + '//' + location.host;\n\n /**\n * An array of Algolia search indexes (and optional display names). Will be automatically populated from MyAccount\n */\n @Prop() searchIndeces: Array<SearchIndex> = [];\n\n /**\n * Logged in user details automatically populated from MyAccount\n */\n @Prop({ mutable: true }) myAccountUser: {\n id: string | null;\n name: string | null;\n first_name: string | null;\n last_name: string | null;\n email: string | null;\n company: string | null;\n lifecycle_stage: string | null;\n indirect_customer: boolean;\n } = null;\n\n /**\n * An Algolia App ID key. Will be automatically populated from MyAccount\n */\n @Prop({ mutable: true }) searchAppId: string;\n\n /**\n * An Algolia API Key. Will be automatically populated from MyAccount\n */\n @Prop({ mutable: true }) searchApiKey: string;\n\n /**\n * A search value to passed to Algolia to programatically get or to preload search results\n */\n @Prop({ mutable: true }) searchValue: string = '';\n\n /**\n * Algolia search index to programatically set or to set an initial index\n */\n @Prop({ mutable: true }) searchIndex: string = 'all_prod_en';\n\n /**\n * MyAccount store cart count.\n */\n @Prop({ mutable: true }) cartCount: number = 0;\n\n /**\n * MyAccount undread message count.\n */\n @Prop({ mutable: true }) msgCount: number = 0;\n\n /**\n * Url to the Nanopore store cart. Will default to the url supplied by MyAccount\n */\n @Prop({ mutable: true }) cartUrl: string = null;\n\n /**\n * Url to the Nanopore message center. Will default to the url supplied by MyAccount\n */\n @Prop({ mutable: true }) msgUrl: string = null;\n\n /**\n * Emitted when the global nav is ready.\n */\n @Event() nanoIsReady!: EventEmitter<void>;\n\n /**\n * Emitted when search results are successfully returned from Algolia.\n */\n @Event() nanoSearchResult!: EventEmitter<AloliaSearchResultDetail>;\n\n /**\n * Emitted when algolia returns an error.\n */\n @Event() nanoSearchError!: EventEmitter<AlgoliaNetworkError>;\n\n /**\n * Emitted when search field is cleared.\n */\n @Event() nanoSearchReset!: EventEmitter<AloliaSearchResultDetail>;\n\n /**\n * Submit the search form (a search value must be present)\n */\n @Method()\n async submitSearch() {\n this.onSearchSubmit();\n this.showAutocomplete = false;\n return;\n }\n\n @Watch('searchIndex')\n currentSelectedIndex() {\n if (!this.internalSearchIndeces.length) {\n return;\n }\n\n let foundIndex = this.internalSearchIndeces.find(\n (index) => index.index === this.searchIndex\n );\n\n if (!foundIndex) {\n this.currentIndex = this.internalSearchIndeces[0];\n console.error('index not found');\n return;\n }\n\n this.currentIndex = foundIndex;\n return foundIndex;\n }\n\n @Watch('searchValInternal')\n changeInternalSearchVal() {\n if (this.searchValInternal !== this.searchValue)\n this.searchValue = this.searchValInternal;\n }\n\n @Watch('searchApiKey')\n @Watch('searchAppId')\n initAlgoliaClient() {\n if (!this.searchAppId || !this.searchApiKey) return;\n\n this.algoliaClient = algoliasearch(this.searchAppId, this.searchApiKey);\n this.addAlgoliaIndeces();\n }\n\n @Watch('searchIndeces')\n addIndeces() {\n this.internalSearchIndeces = [\n ...this.internalSearchIndeces,\n ...this.searchIndeces,\n ];\n }\n\n @Watch('internalSearchIndeces')\n addAlgoliaIndeces() {\n if (!this.algoliaClient || !this.internalSearchIndeces.length) return;\n\n this.internalSearchIndeces.forEach((searchIndex) => {\n searchIndex.alogliaIndex = this.algoliaClient.initIndex(\n searchIndex.index\n );\n });\n if (!this.searchIndex)\n this.searchIndex = this.internalSearchIndeces[0].index;\n }\n\n @Watch('threshold')\n thresholdChange(newThreshold, oldThreshold) {\n if (newThreshold > oldThreshold) {\n // we've resized to larger screen.\n this.thresholdsGoingUp = true;\n this.setResizingState(true);\n }\n }\n\n /**\n * Primary logic for resizing changes.\n * When content doesn't fit - we loop down through break points until it does\n */\n @Watch('intersectRatio')\n ratioChange() {\n if (this.intersectRatio < 1 && this.threshold > 0) {\n // content doesn't fit\n if (this.thresholdsGoingUp) this.setResizingState(true);\n this.threshold--;\n setTimeout(() => this.ratioChange(), 500);\n } else {\n this.thresholdReady = true;\n // content now fits so add / remove context classes\n // on nav-items depending on whether they're added to bar or burger.\n this.siteContent.style.minHeight = `calc(100% - ${\n this.barsDiv.clientHeight + 1\n }px)`;\n\n let menuItems: Array<Element>, barItems: Array<Element>;\n readTask(() => {\n menuItems = [\n ...Array.from(this.el.querySelectorAll('nano-nav-item[slot=\"site\"]')),\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"overflow\"]')\n ),\n ];\n barItems = [];\n\n if (this.threshold < THRESHOLDLIMIT - 4)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"icon\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"icon\"]')\n )\n );\n\n if (this.threshold < THRESHOLDLIMIT - 3)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"loggedin\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"loggedin\"]')\n )\n );\n\n if (this.threshold < THRESHOLDLIMIT - 2)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"main\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"main\"]')\n )\n );\n\n if (this.threshold < THRESHOLDLIMIT - 1)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"about\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"about\"]')\n )\n );\n });\n\n writeTask(() => {\n menuItems.forEach((item) => {\n item.classList.add('nano-global-nav-menu');\n item.classList.remove('nano-global-nav-bar');\n });\n barItems.forEach((item) => {\n item.classList.remove('nano-global-nav-menu');\n item.classList.add('nano-global-nav-bar');\n });\n });\n }\n }\n\n @Watch('thresholdReady')\n @Watch('remoteDataReady')\n assessReady() {\n if (this.thresholdReady && this.remoteDataReady) {\n this.ready = true;\n }\n }\n\n @Watch('remoteDataReady')\n remoteReady() {\n this.attachIO();\n }\n\n @Watch('ready')\n isReady() {\n this.nanoIsReady.emit();\n }\n\n /**\n * Add / remove events when autocomplete results show / hide.\n */\n @Watch('showAutocomplete')\n setupAutocompleteBlur() {\n this.searchInput.clientWidth; // force reflow\n if (this.showAutocomplete) {\n this.el.shadowRoot.addEventListener('click', this.onAutocompleteBlur);\n } else {\n this.el.shadowRoot.removeEventListener('click', this.onAutocompleteBlur);\n }\n }\n\n /**\n * As relevant slotted items change, reset resizing breakpoints\n */\n @Watch('aboutSlotLen')\n @Watch('iconSlotLen')\n @Watch('mainSlotLen')\n @Watch('overflowSlotLen')\n @Watch('searchSlotLen')\n slotChange() {\n this.threshold = THRESHOLDLIMIT;\n }\n\n // General classes for visuals\n\n private thresholdClasses() {\n let classes = [];\n let i = 0;\n for (i; i < this.threshold; i++) classes.push('threshold-' + (i + 1));\n return classes;\n }\n\n /**\n * provides 'isResizing' - we use this to fade content out on 'breakpoint' increase\n * (when the screen size increases). Otherwise the stepping through of\n * breakpoints to calculate if content currently fits shows on screen (looks ugly)\n */\n private setResizingState = (state: boolean = false) => {\n if (typeof this.debounceSetResizingState === 'undefined') {\n this.debounceSetResizingState = debounce(this.setResizingState, 600);\n }\n if (state) {\n this.isResizing = true;\n this.debounceSetResizingState();\n } else {\n this.isResizing = false;\n this.thresholdsGoingUp = false;\n }\n };\n\n // Global DOM Events\n\n private onWindowResize() {\n if (this.threshold < THRESHOLDLIMIT && window.innerWidth > this.currSize) {\n this.threshold = THRESHOLDLIMIT;\n }\n this.currSize = window.innerWidth;\n this.searchBarShown = false;\n }\n\n // Burger / Overflow Menu\n\n // listen to nav-item secondary open / close events primarily for resizing the menu\n @Listen('nanoOpen')\n secondaryOpen(ev: CustomEvent) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n this.secondaryMenuOpen = true;\n this.menuContentDiv.style.minHeight =\n (ev.detail as NavItemEventDetail).secondaryMenu.scrollHeight + 'px';\n }\n\n @Listen('nanoClose')\n secondaryClose(ev: CustomEvent) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n this.secondaryMenuOpen = false;\n this.menuContentDiv.style.minHeight = '';\n }\n\n private onMenuBtnKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.modalOpen ? this.menuClose(ev, true) : this.menuOpen();\n break;\n }\n };\n\n private onMenuBtnClick = (ev: MouseEvent) => {\n this.menuClose(ev, true);\n };\n\n private menuOpen = (e?: MouseEvent) => {\n if (e) e.preventDefault();\n\n this.menuDiv.style.display = 'block';\n // need to open menu in stages\n // wait for re-flow after changing display\n // wait for repaint after animate, then focus\n\n this.menuDiv.clientWidth; // force reflow\n\n this.modalOpen = true;\n this.modalIsOpen = true;\n this.menuWrapDiv.addEventListener('focusout', this.menuClose);\n\n this.menuDiv.clientWidth; // force reflow\n\n this.menuWrapDiv.focus({ preventScroll: true });\n if (\n this.threshold < 2 ||\n this.menuWrapDiv.scrollHeight > window.innerHeight\n ) {\n document.body.style.overflow = 'hidden';\n this.menuFullScreen = true;\n } else document.body.style.overflowX = 'hidden';\n };\n\n private onMenuHidden = () => {\n this.menuDiv.removeEventListener('transitionend', this.onMenuHidden);\n this.menuWrapDiv.removeEventListener('focusout', this.menuClose);\n\n document.body.style.overflow = '';\n this.menuDiv.style.display = 'none';\n this.modalIsOpen = false;\n this.menuFullScreen = false;\n\n setTimeout(() => {\n if (document.activeElement === document.body && this.menuBtn)\n this.mainBarDiv.focus({ preventScroll: true });\n }, 50);\n };\n\n private menuClose = (\n ev?: FocusEvent | MouseEvent | KeyboardEvent | TouchEvent,\n force: boolean = false\n ) => {\n if (!force) {\n let e = ev as FocusEvent;\n if (\n e &&\n e.relatedTarget &&\n closestElement('#global-nav-menu', e.relatedTarget as HTMLElement)\n )\n return;\n if (\n e &&\n e.relatedTarget &&\n (e.relatedTarget as HTMLElement).closest('#global-nav-menu')\n )\n return;\n if (\n e &&\n e.relatedTarget &&\n (e.relatedTarget as HTMLElement).closest('[slot=\"promotion\"]')\n )\n return;\n if (this.secondaryMenuOpen) return;\n }\n\n this.modalOpen = false;\n this.menuDiv.addEventListener('transitionend', this.onMenuHidden);\n };\n\n private subMenuClose = (ev?: MouseEvent) => {\n ev.preventDefault();\n (ev.target as HTMLNanoNavItemElement).closest('nano-nav-item').open = false;\n };\n\n // User profile menu\n\n private onUserBtnClick = (ev: MouseEvent) => {\n ev.preventDefault();\n this.userMenuOpen = !this.userMenuOpen;\n };\n\n private onUserBtnKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.userMenuOpen = !this.userMenuOpen;\n break;\n }\n };\n\n private onUserMenuBlur = (ev: FocusEvent) => {\n if (!ev.relatedTarget) {\n this.userMenuOpen = false;\n return;\n }\n if (!!(ev.relatedTarget as HTMLElement).closest('.user-links-panel'))\n return false;\n this.userMenuOpen = false;\n };\n\n @Watch('userMenuOpen')\n async handleUserMenu() {\n await displayTransition(this.userLinkPanel, 'show', this.userMenuOpen);\n if (this.userMenuOpen) {\n this.userLinkPanel.focus();\n this.userLinkPanel.addEventListener('focusout', this.onUserMenuBlur);\n } else {\n this.userLinkPanel.removeEventListener('focusout', this.onUserMenuBlur);\n this.el.focus();\n }\n }\n\n // Search bar (smaller screens / mobile)\n\n private onSearchBtnClick = (ev: MouseEvent) => {\n ev.preventDefault();\n if (!this.searchBarShown) this.searchbarShow();\n else this.searchbarHide();\n };\n\n private onSearchBtnKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.searchBarShown ? this.searchbarHide() : this.searchbarShow();\n break;\n }\n };\n\n private searchbarShow() {\n this.searchBarShown = true;\n this.searchBarEl.addEventListener('transitionend', this.onSearchBarShown);\n this.searchBarEl.style.display = 'block';\n\n setTimeout(() => {\n this.searchBarEl.style.height =\n this.searchBarEl.querySelector('.search-widget').scrollHeight + 'px';\n }, 50);\n }\n\n private onSearchBarShown = () => {\n this.searchBarEl.removeEventListener(\n 'transitionend',\n this.onSearchBarShown\n );\n if (this.searchInput) this.searchInput.setFocus();\n this.searchBarEl.style.overflow = 'visible';\n };\n\n private searchbarHide = (ev?: FocusEvent) => {\n if (\n ev &&\n ev.relatedTarget &&\n (ev.relatedTarget as HTMLElement).closest('#global-nav-search-bar')\n )\n return;\n this.showAutocomplete = false;\n if (this.searchValInternal.length && ev) return;\n\n this.searchBarEl.addEventListener('transitionend', this.onSearchBarHidden);\n this.searchBarEl.style.overflow = 'hidden';\n this.searchBarEl.style.height = '0px';\n };\n\n private onSearchBarHidden = () => {\n this.searchBarEl.removeEventListener(\n 'transitionend',\n this.onSearchBarHidden\n );\n this.searchBarEl.style.display = 'none';\n this.searchBarShown = false;\n };\n\n // Algolia search\n\n private autocompleteSnippet(hit: AlgoliaResultHit) {\n let lookFor = ['title']; // , 'body'\n if (hit._snippetResult) {\n let found = lookFor.find(\n (prop) =>\n hit._snippetResult[prop] &&\n hit._snippetResult[prop].matchLevel !== 'none'\n );\n\n if (found) {\n if (found !== 'title')\n return (\n (hit.title.length > 15\n ? hit.title.substring(0, 15) + ' ...'\n : hit.title) +\n ' ' +\n hit._snippetResult[found].value\n );\n else return hit._snippetResult['title'].value;\n }\n }\n return hit.title;\n }\n\n private onSearchInput = (ev: CustomEvent<InputEvent>) => {\n this.searchValInternal = this.searchInput.value;\n\n if (!this.isSearchValSet()) {\n this.searchLoading = false;\n return;\n }\n\n if (ev.detail.type === 'input') {\n this.showAutocomplete = false;\n this.searchLoading = true;\n }\n };\n\n private onSearchChange = async (ev?: CustomEvent<InputChangeEventDetail>) => {\n this.searchValInternal = this.searchValue = ev\n ? ev.detail.value\n : this.searchValInternal;\n this.showAutocomplete = false;\n this.autocompleteResults = null;\n\n if (!this.isSearchValSet()) {\n if (!this.searchValInternal.length) {\n this.nanoSearchReset.emit();\n }\n this.searchLoading = false;\n return;\n }\n if (!this.currentIndex) this.currentSelectedIndex();\n\n try {\n this.autocompleteResults = this.processSearchResults(\n (await this.currentIndex.alogliaIndex.search(this.searchValInternal, {\n attributesToSnippet: ['body:5', 'title:8'],\n hitsPerPage: 5,\n filters: 'created > ' + Math.floor((Date.now() - 63115200000) / 1000), // only get last 2 years\n })) as any\n ) as AlgoliaResults;\n } catch (e) {\n console.error(e);\n }\n\n this.scopeSearch = null;\n this.scopeSearch = await this.onSearchSubmit(null, false);\n\n this.searchLoading = false;\n this.showAutocompleteResults();\n };\n\n private onSearchSubmit = async (ev?, emit: boolean = true) => {\n if (ev) ev.preventDefault();\n if (!this.isSearchValSet()) return;\n this.searchLoading = true;\n this.algoliaSearchResults = null;\n\n if (!this.currentIndex) this.currentSelectedIndex();\n\n let queries = this.internalSearchIndeces.map((index) => {\n return {\n indexName: index.index,\n query: this.searchValInternal,\n facets: index.filters,\n hitsPerPage: 10,\n filters: 'created > ' + Math.floor((Date.now() - 63115200000) / 1000), // only get last 2 years\n };\n });\n\n try {\n this.algoliaSearchResults = this.processSearchResults(\n (await this.algoliaClient.multipleQueries(queries)) as any\n ) as AlgoliaMultiResults;\n } catch (e) {\n this.nanoSearchError.emit(e as AlgoliaNetworkError);\n }\n this.searchLoading = false;\n if (!this.algoliaSearchResults) return;\n\n this.algoliaSearchResults.results.map((result, i) => {\n result.indexName = this.internalSearchIndeces[i].name;\n result.selected =\n this.currentIndex.name === this.internalSearchIndeces[i].name;\n result.domain = this.currentIndex.domain || null;\n result.domains = this.myAccData.domains || null;\n result.allGroup = !!this.internalSearchIndeces[i].allGroup;\n result.filters = this.internalSearchIndeces[i].filters;\n });\n\n if (emit) {\n this.nanoSearchResult.emit({\n results: this.algoliaSearchResults.results,\n client: { apiKey: this.searchApiKey, appId: this.searchAppId },\n });\n this.showAutocomplete = false;\n }\n return this.algoliaSearchResults;\n };\n\n private onSearchIndexChange = async (\n index: CustomEvent<SelectChangeEventDetail> | string\n ) => {\n let ev = index as CustomEvent<SelectChangeEventDetail>;\n let indexStr = index as string;\n\n if (!this.currentIndex) this.currentSelectedIndex();\n\n if (ev.detail && ev.detail.value.length)\n indexStr = ev.detail.value as string;\n if (!indexStr || !indexStr.length) return;\n if (this.currentIndex.index === indexStr) return;\n\n let selectedIndex = this.internalSearchIndeces.find(\n (index) => index.index === indexStr\n );\n if (!selectedIndex || !selectedIndex.alogliaIndex) return;\n\n this.searchIndex = selectedIndex.index;\n if (this.isSearchValSet()) await this.onSearchChange();\n };\n\n private isSearchValSet() {\n if (this.searchValInternal.length < 3) return false;\n return true;\n }\n\n private switchIndexSubmit = async (index: string) => {\n if (this.isSearchValSet()) {\n await this.onSearchIndexChange(index);\n this.onSearchSubmit();\n } else this.onSearchIndexChange(index);\n };\n\n // Autocomplete\n\n @Watch('showAutocomplete')\n resetHitFocus() {\n this.currAIndex = -1;\n }\n\n private onAutocompleteBlur = (ev: MouseEvent) => {\n if (!this.showAutocomplete || !this.autocompleteResults) return;\n if (ev && ev.target && (ev.target as HTMLElement).closest('.search-widget'))\n return;\n this.showAutocomplete = false;\n };\n\n private showAutocompleteResults = () => {\n if (!this.autocompleteResults || !this.autocompleteResults.hits) return;\n this.showAutocomplete = true;\n };\n\n private setActiveElement(\n autocompleteEle: HTMLAnchorElement | HTMLButtonElement\n ) {\n this.autocompleteEles.map((ele) =>\n ele.setAttribute('aria-selected', 'false')\n );\n autocompleteEle.focus({ preventScroll: true });\n autocompleteEle.setAttribute('aria-selected', 'true');\n }\n\n private onAutocompleteInteract = (ev: KeyboardEvent) => {\n // list open, navigate items with arrows\n if (!this.showAutocomplete || !this.autocompleteResults) return;\n let testIndex = this.currAIndex;\n\n switch (ev.key) {\n case 'Tab':\n setTimeout(() => {\n if (\n !this.el.shadowRoot.activeElement ||\n !this.el.shadowRoot.activeElement.closest('.search-widget')\n ) {\n this.showAutocomplete = false;\n return;\n } else {\n let found = this.autocompleteEles.find((ele, i) => {\n if (ele === this.el.shadowRoot.activeElement) {\n this.currAIndex = i;\n return true;\n }\n });\n if (found) this.setActiveElement(found);\n else this.currAIndex = -1;\n }\n });\n break;\n case 'ArrowDown':\n case 'ArrowUp':\n if (ev.key === 'ArrowDown') testIndex++;\n else if (ev.key === 'ArrowUp') testIndex--;\n\n let found = this.autocompleteEles[testIndex];\n if (\n found ||\n testIndex < 0 ||\n testIndex > this.autocompleteEles.length - 1\n )\n ev.preventDefault();\n this.searchInput.clientWidth; // force reflow\n\n if (found) {\n this.setActiveElement(found);\n this.currAIndex = testIndex;\n } else if (testIndex < 0) {\n this.searchInput.setFocus();\n this.currAIndex = -1;\n }\n break;\n case 'Enter':\n case ' ':\n if (this.autocompleteEles[this.currAIndex]) {\n this.autocompleteEles[this.currAIndex].click();\n }\n break;\n }\n };\n\n // Various.\n\n /**\n * Assesses what content is present in which slots\n */\n private assessSlottedContent() {\n readTask(() => {\n this.hasSiteSlot = !!this.el.querySelectorAll('[slot=\"site\"]').length;\n this.hasLoggedinSlot =\n !!this.el.querySelectorAll('[slot=\"loggedin\"]').length;\n this.hasPromotionSlot =\n !!this.el.querySelectorAll('[slot=\"promotion\"]').length;\n\n this.aboutSlotLen = this.el.querySelectorAll('[slot=\"about\"]').length;\n this.iconSlotLen = this.el.querySelectorAll('[slot=\"icon\"]').length;\n this.mainSlotLen = this.el.querySelectorAll('[slot=\"main\"]').length;\n this.overflowSlotLen =\n this.el.querySelectorAll('[slot=\"overflow\"]').length;\n this.searchSlotLen = this.el.querySelectorAll('[slot=\"search\"]').length;\n });\n }\n\n /**\n * Attach the IntersectionObserver - from which all threshold / breakpoint logic hinges\n */\n private attachIO() {\n if (this.io) return;\n let root = this.el.shadowRoot.querySelector('.global-nav .main-bar');\n if (\n Build.isBrowser &&\n typeof window !== 'undefined' &&\n (window as any).IntersectionObserver &&\n !!root\n ) {\n const io = (this.io = new (window as any).IntersectionObserver(\n (data: IntersectionObserverEntry[]) => {\n this.intersectRatio = data.slice(-1)[0].intersectionRatio;\n },\n { root, threshold: 1 }\n ));\n io.observe(root.querySelector('.measure-ele'));\n }\n }\n\n // Stencil Lifecycle / Rendering\n\n componentDidLoad() {\n if (Build.isBrowser) {\n this.debounceResize = debounce(this.onWindowResize.bind(this), 300);\n\n window.addEventListener('resize', this.debounceResize);\n this.currSize = window.innerWidth;\n }\n\n this.initAlgoliaClient();\n this.addAlgoliaIndeces();\n if (this.remoteDataReady) this.attachIO();\n }\n\n componentWillLoad() {\n ComponentStore.init(\n this,\n ['searchIndex', 'searchValue'],\n 'url-hash',\n 'gns'\n );\n\n if (\n Build.isBrowser &&\n typeof window !== 'undefined' &&\n (window as any).MutationObserver\n ) {\n const mo = (this.mo = new MutationObserver(() => {\n this.assessSlottedContent();\n }));\n mo.observe(this.el, { childList: true, subtree: false });\n }\n this.assessSlottedContent();\n }\n\n disconnectedCallback() {\n if (this.io) {\n this.io.disconnect();\n this.io = undefined;\n }\n if (this.mo) {\n this.mo.disconnect();\n this.mo = undefined;\n }\n if (Build.isBrowser)\n window.removeEventListener('resize', this.debounceResize);\n }\n\n async connectedCallback() {\n this.getMyAccData();\n }\n\n // Render output\n\n private autocompleteList(): VNode {\n let content;\n if (this.showAutocomplete && this.scrollingUp) {\n let currentScopeHits = 0;\n let scopeChangeSuggestions = 0;\n\n let scopeSuggestReducer = (total: number, result: AlgoliaMultiResult) => {\n return result.index !== this.currentIndex.index\n ? total + result.hits.length\n : total;\n };\n let currentSuggestReducer = (\n total: number,\n result: AlgoliaMultiResult\n ) => {\n return result.index === this.currentIndex.index\n ? total + result.hits.length\n : total;\n };\n\n if (this.scopeSearch) {\n scopeChangeSuggestions = this.scopeSearch.results.reduce(\n scopeSuggestReducer,\n 0\n );\n currentScopeHits = this.scopeSearch.results.reduce(\n currentSuggestReducer,\n 0\n );\n }\n\n if (\n (this.autocompleteResults && this.autocompleteResults.hits.length) ||\n (scopeChangeSuggestions && !currentScopeHits)\n ) {\n let scopeSuggestions = 0;\n\n content = (\n <div>\n {!currentScopeHits && (\n <div class=\"search-autocomplete-hit search-autocomplete-hit--no-result\">\n No results matching '{this.searchValInternal}' were found in{' '}\n <strong>{this.currentIndex.name}</strong>. Try another phrase.\n </div>\n )}\n {this.autocompleteResults && [\n this.autocompleteResults.hits.map((hit, i) => {\n return (\n <a\n role=\"option\"\n ref={(a) => this.autocompleteEles.push(a)}\n tabindex=\"-1\"\n id={'autocomplete-hit-' + i}\n href={hit.url}\n class=\"search-autocomplete-hit\"\n innerHTML={this.autocompleteSnippet(hit)}\n ></a>\n );\n }),\n ]}\n {(!currentScopeHits || this.currentIndex.allGroup) &&\n this.scopeSearch &&\n this.scopeSearch.results && [\n this.scopeSearch.results.map((result, i) => {\n if (\n !result.hits.length ||\n result.index === this.currentIndex.index ||\n scopeSuggestions > 1\n )\n return;\n scopeSuggestions++;\n return (\n <button\n role=\"option\"\n ref={(button) => this.autocompleteEles.push(button)}\n tabindex=\"-1\"\n id={'autocomplete-scope-' + i}\n class=\"search-autocomplete-hit\"\n onClick={() => this.switchIndexSubmit(result.index)}\n onMouseDown={() => this.switchIndexSubmit(result.index)}\n >\n \"{this.searchValInternal}\"{' '}\n <div class=\"search-autocomplete-hit-scope\">\n in {result.indexName}\n </div>\n </button>\n );\n }),\n ]}\n {!!currentScopeHits && (\n <div class=\"search-autocomplete-foot\">\n <button\n role=\"option\"\n class=\"search-autocomplete-submit\"\n ref={(button) => this.autocompleteEles.push(button)}\n id={'autocomplete-foot'}\n onClick={this.onSearchSubmit}\n onMouseDown={this.onSearchSubmit}\n >\n View all results\n </button>\n </div>\n )}\n </div>\n );\n } else if (!currentScopeHits) {\n content = (\n <div class=\"search-autocomplete-hit search-autocomplete-hit--no-result\">\n No results matching '{this.searchValInternal}' were found. Try\n another phrase.\n </div>\n );\n }\n }\n\n return (\n <div\n class=\"search-autocomplete\"\n role=\"listbox\"\n id=\"autocomplete-results\"\n aria-expanded={this.showAutocomplete ? 'true' : 'false'}\n hidden={!this.showAutocomplete}\n onKeyDown={this.onAutocompleteInteract}\n >\n {content}\n </div>\n );\n }\n\n private searchWidget(): VNode[] {\n return [\n <form\n class=\"search-inputs\"\n onSubmit={this.onSearchSubmit}\n id=\"global-nav-search\"\n >\n <nano-select\n class=\"search-input\"\n label=\"Which area of content would you like to search?\"\n hideLabel={true}\n showInlineError={false}\n value={this.searchIndex}\n onNanoChange={this.onSearchIndexChange}\n mask={true}\n >\n {this.internalSearchIndeces.map((index) => {\n return (\n <nano-option\n selected={index.index === this.searchIndex}\n value={index.index}\n >\n {index.name || index.index}\n </nano-option>\n );\n })}\n <nano-icon\n name=\"solid/caret-down\"\n class=\"down-arrow\"\n slot=\"down-arrow\"\n ></nano-icon>\n </nano-select>\n <nano-input\n class=\"search-input\"\n label=\"What would you like to search for?\"\n aria-label=\"What would you like to search for?\"\n hideLabel={true}\n showInlineError={false}\n clear-input\n placeholder=\"Search...\"\n type=\"text\"\n ref={(input) => (this.searchInput = input)}\n onNanoChange={this.onSearchChange}\n onNanoInput={this.onSearchInput}\n onKeyDown={this.onAutocompleteInteract}\n debounce={500}\n aria-autocomplete=\"list\"\n aria-activedescendant={\n this.autocompleteEles[this.currAIndex]\n ? this.autocompleteEles[this.currAIndex].id\n : false\n }\n aria-controls=\"autocomplete-results\"\n onNanoFocus={this.showAutocompleteResults}\n value={this.searchValue}\n role=\"textbox\"\n >\n <button\n class={{\n 'search-icon': true,\n 'search-icon--search': true,\n 'search-icon--show': !this.searchValInternal.length,\n }}\n slot=\"end\"\n onMouseDown={(e) => {\n this.searchValInternal = this.searchInput.value;\n this.onSearchSubmit(e, true);\n }}\n >\n <nano-icon name=\"light/search\"></nano-icon>\n </button>\n <span\n class={{\n 'search-icon': true,\n 'search-icon--loader': true,\n 'search-icon--show': this.searchLoading,\n }}\n slot=\"end\"\n >\n <nano-icon name=\"light/spinner-third\"></nano-icon>\n </span>\n </nano-input>\n <input type=\"submit\" />\n </form>,\n ];\n }\n\n render() {\n this.autocompleteEles = [];\n let isRtl = (this.el.ownerDocument as Document).dir === 'rtl';\n\n let searchWidget = this.searchWidget();\n searchWidget.push(this.autocompleteList());\n\n return (\n <Host\n class={{\n [this.thresholdClasses().join(' ')]: true,\n ready: this.ready,\n 'search-bar-shown': this.searchBarShown && this.scrollingUp,\n 'search-auto-complete-shown':\n this.showAutocomplete && this.scrollingUp,\n 'modal-open': this.modalIsOpen,\n resizing: this.isResizing,\n }}\n dir={isRtl ? 'rtl' : null}\n >\n <div\n class={{\n 'global-nav': true,\n 'scrolling-down': !this.scrollingUp,\n }}\n >\n <nav\n id=\"global-nav-menu\"\n class={{\n 'gn-menu': true,\n open: this.modalOpen,\n 'has-promotion': this.hasPromotionSlot,\n 'menu-full-screen': this.menuFullScreen,\n 'secondary-open': this.secondaryMenuOpen,\n }}\n aria-expanded={this.modalOpen ? 'true' : 'false'}\n ref={(div) => (this.menuDiv = div)}\n >\n <div\n class=\"gn-menu_wrap\"\n ref={(div) => (this.menuWrapDiv = div)}\n tabindex=\"-1\"\n >\n <div class=\"gn-menu_actions\">\n <button\n class=\"menu-btn icon-btn icon-btn\"\n onMouseDown={this.onMenuBtnClick}\n onKeyDown={this.onMenuBtnKeyDown}\n >\n {this.threshold < THRESHOLDLIMIT - 3 && (\n <nano-icon\n name=\"light/times\"\n aria-label=\"close menu\"\n ></nano-icon>\n )}\n {this.threshold >= THRESHOLDLIMIT - 3 && (\n <nano-icon\n name=\"light/bars\"\n aria-label=\"close menu\"\n ></nano-icon>\n )}\n </button>\n\n {this.threshold < THRESHOLDLIMIT - 4 && [\n !!this.iconSlotLen && <slot name=\"icon\" />,\n this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('icons')) && [\n this.msgUrl && (\n <a href={this.msgUrl} class=\"icon-btn\">\n <nano-icon name=\"light/bell\"></nano-icon>\n {this.msgCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.msgCount}\n </span>\n )}\n </a>\n ),\n this.cartUrl && (\n <a href={this.cartUrl} class=\"icon-btn\">\n <nano-icon name=\"light/shopping-cart\"></nano-icon>\n {this.cartCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.cartCount}\n </span>\n )}\n </a>\n ),\n ],\n ]}\n\n {this.myAccData && this.myAccData.urls.login && (\n <a\n href={this.myAccData.urls.login + this.ssoRedirect}\n class=\"login-btn\"\n >\n Login / Register{' '}\n <nano-icon name=\"solid/chevron-right\"></nano-icon>\n </a>\n )}\n </div>\n\n <div\n class=\"content-wrap\"\n ref={(div) => (this.menuContentDiv = div)}\n >\n <div class=\"content\">\n <nav class=\"nav-links nav-links--main\">\n <slot name=\"overflow\" />\n {this.threshold < THRESHOLDLIMIT - 2 &&\n !!this.mainSlotLen && <slot name=\"main\" />}\n </nav>\n\n {(((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold < THRESHOLDLIMIT) ||\n this.hasSiteSlot ||\n !!this.siteNavItms.length) && (\n <div>\n {(!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold < THRESHOLDLIMIT && [\n (this.threshold >= THRESHOLDLIMIT - 2 ||\n this.mainSlotLen < 2) &&\n this.overflowSlotLen < 2 && (\n <div class=\"nav-links-wrap\">\n {!!this.aboutNavItms.length && (\n <h4 class=\"nav-links_title\">About</h4>\n )}\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"About the company links\"\n >\n <slot name=\"about\" />\n\n {this.aboutNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={link.address}\n target={link.target}\n >\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n </nav>\n </div>\n ),\n ((this.threshold < THRESHOLDLIMIT - 2 &&\n this.mainSlotLen >= 2) ||\n this.overflowSlotLen >= 2) && (\n <nav\n class=\"nav-links\"\n aria-label=\"About the company links\"\n >\n {!this.aboutNavItms.length && (\n <slot name=\"about\" />\n )}\n {!!this.aboutNavItms.length && (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n Company\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-right\"\n ></nano-icon>\n <div slot=\"secondary\">\n <div class=\"content\">\n <button\n class=\"back-btn\"\n onClick={this.subMenuClose}\n >\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-left\"\n aria-label=\"go back\"\n ></nano-icon>\n Company\n </button>\n <slot name=\"about\" />\n <div class=\"content--sub\">\n {this.aboutNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={link.address}\n target={link.target}\n >\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n </div>\n </div>\n </div>\n </nano-nav-item>\n )}\n </nav>\n ),\n ]}\n\n {(this.hasSiteSlot || !!this.siteNavItms.length) && [\n (this.threshold >= THRESHOLDLIMIT - 2 ||\n this.mainSlotLen < 2) &&\n this.overflowSlotLen < 2 && (\n <div class=\"nav-links-wrap\">\n <h4 class=\"nav-links_title\">Sites</h4>\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"Different company site links\"\n >\n <slot name=\"site\" />\n {this.siteNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={link.address}\n target={link.target}\n >\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n </nav>\n </div>\n ),\n ((this.threshold < THRESHOLDLIMIT - 2 &&\n this.mainSlotLen >= 2) ||\n this.overflowSlotLen >= 2) && (\n <nav\n class=\"nav-links\"\n aria-label=\"Different company site links\"\n >\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n Sites\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-right\"\n ></nano-icon>\n <div slot=\"secondary\">\n <div class=\"content\">\n <button\n class=\"back-btn\"\n onClick={this.subMenuClose}\n >\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-left\"\n aria-label=\"go back\"\n ></nano-icon>\n Sites\n </button>\n <div class=\"content--sub\">\n <slot name=\"site\" />\n {this.siteNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={link.address}\n target={link.target}\n >\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n </div>\n </div>\n </div>\n </nano-nav-item>\n </nav>\n ),\n ]}\n </div>\n )}\n </div>\n\n {this.isLoggedIn &&\n this.threshold < THRESHOLDLIMIT - 3 &&\n (this.loggedInNavItms.length || this.hasLoggedinSlot) && (\n <nav class=\"nav-links\" aria-label=\"Your user account links\">\n <nano-nav-item class=\"nano-global-nav user-nav nano-global-nav-menu\">\n {this.myAccountUser.name}\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-right\"\n ></nano-icon>\n <div slot=\"secondary\">\n <div class=\"content\">\n <button\n class=\"back-btn\"\n onClick={this.subMenuClose}\n >\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-left\"\n aria-label=\"go back\"\n ></nano-icon>\n {this.myAccountUser.name}\n </button>\n <div class=\"content--sub\">\n <slot name=\"loggedin\" />\n {this.loggedInNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a href={link.address} target={link.target}>\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={\n this.myAccData.urls.forgot_password +\n this.ssoRedirect\n }\n >\n Change Password\n </a>\n </nano-nav-item>\n </div>\n </div>\n </div>\n </nano-nav-item>\n </nav>\n )}\n\n <slot name=\"promotion\" />\n\n {this.myAccData && this.myAccData.urls.logout && (\n <div class=\"login-btn logout-btn\">\n <a href={this.myAccData.urls.logout + this.ssoRedirect}>\n Logout\n </a>\n </div>\n )}\n </div>\n </div>\n </nav>\n <nano-sticker\n auto-resize=\"false\"\n break-point-max=\"800\"\n quietMode={{ h: 600, w: 800 }}\n >\n <div class=\"bars\" ref={(div) => (this.barsDiv = div)}>\n <nav\n class=\"main-bar\"\n aria-label=\"Main site navigation\"\n tabindex=\"-1\"\n ref={(div) => (this.mainBarDiv = div)}\n >\n {(this.hasPromotionSlot ||\n !!this.overflowSlotLen ||\n ((this.myAccData || !!this.iconSlotLen) &&\n this.threshold < THRESHOLDLIMIT - 4) ||\n (this.isLoggedIn &&\n (!!this.loggedInNavItms.length || this.hasLoggedinSlot) &&\n this.threshold < THRESHOLDLIMIT - 3) ||\n (!!this.mainSlotLen && this.threshold < THRESHOLDLIMIT - 2) ||\n ((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold < THRESHOLDLIMIT) ||\n this.hasSiteSlot ||\n !!this.siteNavItms.length) && (\n <button\n class=\"menu-btn icon-btn\"\n onMouseDown={this.menuOpen}\n onKeyDown={this.onMenuBtnKeyDown}\n aria-expanded={this.modalOpen ? 'true' : 'false'}\n aria-controls=\"global-nav-menu\"\n ref={(btn) => (this.menuBtn = btn)}\n >\n <nano-icon\n name=\"light/bars\"\n aria-label=\"open menu\"\n ></nano-icon>\n </button>\n )}\n\n {this.showLogo && (\n <a href={this.logoUrl} class=\"logo-link\">\n <img\n src={getAssetPath(`./assets/ont-logo.svg`)}\n alt=\"Oxford Nanopore Technologies Logo\"\n class=\"logo\"\n />\n </a>\n )}\n {!this.showLogo && (\n <div class=\"logo-link\">\n <slot name=\"logo\" />\n </div>\n )}\n\n <div\n class=\"nav-links nav-links--main\"\n // hidden={\n // !(\n // this.threshold >= THRESHOLDLIMIT - 2 && !!this.mainSlotLen\n // )\n // }\n >\n <slot name=\"main\" />\n </div>\n\n {this.threshold >= THRESHOLDLIMIT - 1 && [\n this.showSearch && !!this.internalSearchIndeces.length && (\n <div\n class=\"search-widget\"\n role=\"combobox\"\n aria-owns=\"autocomplete-results\"\n aria-expanded={\n this.showAutocomplete && this.autocompleteResults\n ? 'true'\n : 'false'\n }\n >\n {searchWidget}\n </div>\n ),\n (!this.showSearch || !this.myAccData) &&\n !!this.searchSlotLen && <slot name=\"search\" />,\n ]}\n\n {(this.threshold >= THRESHOLDLIMIT - 1 ||\n !this.showSearch ||\n !this.internalSearchIndeces.length) && (\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"About the company links\"\n >\n {(!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold === THRESHOLDLIMIT && [\n <slot name=\"about\" />,\n this.aboutNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-bar\">\n <a href={link.address} target={link.target}>\n {link.title}\n </a>\n </nano-nav-item>\n );\n }),\n ]}\n </nav>\n )}\n\n {this.threshold < THRESHOLDLIMIT - 1 &&\n ((this.showSearch && !!this.internalSearchIndeces.length) ||\n !!this.searchSlotLen) && (\n <button\n class=\"icon-btn\"\n aria-controls=\"global-nav-search-bar\"\n aria-expanded={this.searchBarShown ? 'true' : 'false'}\n onMouseDown={this.onSearchBtnClick}\n onKeyDown={this.onSearchBtnKeyDown}\n >\n <nano-icon name=\"light/search\"></nano-icon>\n </button>\n )}\n\n {this.threshold >= THRESHOLDLIMIT - 4 && [\n !!this.iconSlotLen && <slot name=\"icon\" />,\n this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('icons')) && [\n this.msgUrl && (\n <a href={this.msgUrl} class=\"icon-btn\">\n <nano-icon name=\"light/bell\"></nano-icon>\n {this.msgCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.msgCount}\n </span>\n )}\n </a>\n ),\n this.cartUrl && (\n <a href={this.cartUrl} class=\"icon-btn\">\n <nano-icon name=\"light/shopping-cart\"></nano-icon>\n {this.cartCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.cartCount}\n </span>\n )}\n </a>\n ),\n ],\n ]}\n\n {this.myAccData &&\n this.threshold >= THRESHOLDLIMIT - 3 && [\n this.myAccData.urls.login && (\n <a\n href={this.myAccData.urls.login + this.ssoRedirect}\n class=\"login-btn\"\n >\n Login / Register\n </a>\n ),\n this.myAccountUser && (\n <div class=\"user-links\">\n <button\n class={{\n 'icon-btn': true,\n 'user-links-btn': true,\n open: this.userMenuOpen,\n }}\n onMouseDown={this.onUserBtnClick}\n onKeyDown={this.onUserBtnKeyDown}\n >\n {' '}\n {this.myAccountUser.name}\n <nano-icon name=\"solid/caret-down\"></nano-icon>\n </button>\n <div\n class=\"user-links-panel\"\n tabindex=\"-1\"\n ref={(div) => (this.userLinkPanel = div)}\n >\n <div class=\"user-links-panel-content\">\n {this.loggedInNavItms.map((link) => {\n return (\n <a href={link.address} target={link.target}>\n {link.title}\n </a>\n );\n })}\n </div>\n <div class=\"user-links-panel-foot\">\n <a\n href={\n this.myAccData.urls.forgot_password +\n this.ssoRedirect\n }\n >\n Change Password\n </a>\n <a\n href={\n this.myAccData.urls.logout + this.ssoRedirect\n }\n >\n Logout\n </a>\n </div>\n </div>\n </div>\n ),\n ]}\n <span class=\"measure-ele\"></span>\n </nav>\n\n {this.threshold < THRESHOLDLIMIT - 1 && (\n <div\n id=\"global-nav-search-bar\"\n class={{\n 'search-bar': true,\n show: this.searchBarShown,\n }}\n aria-expanded={this.searchBarShown ? 'true' : 'false'}\n role=\"region\"\n tabindex=\"-1\"\n ref={(div) => (this.searchBarEl = div)}\n >\n <div class=\"search-widget\">\n {this.showSearch && !!this.internalSearchIndeces.length && (\n <div>{searchWidget}</div>\n )}\n {(!this.showSearch || !this.myAccData) &&\n !!this.searchSlotLen && <slot name=\"search\" />}\n </div>\n </div>\n )}\n </div>\n </nano-sticker>\n\n {(this.threshold < THRESHOLDLIMIT - 3 || this.menuFullScreen) && (\n <div\n class={{\n mask: true,\n open: this.modalOpen,\n }}\n onClick={this.menuClose}\n onTouchEnd={this.menuClose}\n ></div>\n )}\n </div>\n <div class=\"site-content\" ref={(div) => (this.siteContent = div)}>\n <slot />\n </div>\n </Host>\n );\n }\n\n // Data processing\n\n private domainFor(origin: string): string {\n if (!this.myAccData) return '';\n let domain = this.myAccData.domains.find((dm) => dm.origin === origin);\n return domain ? domain.domain : '';\n }\n\n private processSearchResults(results: AlgoliaMultiResults | AlgoliaResults) {\n let multiResults = results as AlgoliaMultiResults;\n let singleResult = results as AlgoliaResults;\n\n if (multiResults.results) {\n multiResults.results.forEach((result, i) => {\n multiResults.results[i] = this.processSearchResults(\n result\n ) as AlgoliaResults;\n });\n return multiResults;\n } else {\n singleResult.hits.map((hit) => {\n if (hit.url && !hit.url.match(/^http/))\n hit.url =\n location.protocol + '//' + this.domainFor(hit.origin) + hit.url;\n });\n return singleResult;\n }\n }\n\n private async getMyAccData() {\n if (!this.getMyAccountData || this.myAccData) {\n this.remoteDataReady = true;\n return;\n }\n\n let url;\n switch (this.env) {\n case 'dev':\n url = 'https://myaccount-dev.nanoporetech.com/';\n break;\n case 'test':\n url = 'https://myaccount-test.nanoporetech.com/';\n break;\n default:\n url = 'https://myaccount.nanoporetech.com/';\n break;\n }\n\n var config = { timeout: 5000 };\n\n try {\n if (this.env === 'local') {\n this.myAccData = (await import(\n `./assets/local-my-account.json`\n )) as unknown as MyAccountData;\n } else {\n this.myAccData = await clientFetch(url + 'nav_bar_data.json', config);\n }\n if (this.myAccData.user.id) {\n this.isLoggedIn = true;\n this.myAccountUser = this.myAccData.user;\n }\n this.processMyAccLinks();\n this.processMyAccData();\n setTimeout(() => (this.remoteDataReady = true), 300);\n } catch (e) {\n console.error(e);\n this.remoteDataReady = true;\n }\n }\n\n private processMyAccData() {\n if (!this.myAccData || !this.myAccData.search.indeces.length) return;\n\n if (this.myAccData.search.api_key)\n this.searchApiKey = this.myAccData.search.api_key;\n if (this.myAccData.search.app_id)\n this.searchAppId = this.myAccData.search.app_id;\n\n if (this.myAccData.cart.count) this.cartCount = this.myAccData.cart.count;\n if (this.myAccData.notifications.count)\n this.msgCount = this.myAccData.notifications.count;\n\n if (!this.searchAppId || !this.searchApiKey) return;\n this.internalSearchIndeces = [\n ...this.myAccData.search.indeces,\n ...this.searchIndeces,\n ];\n\n if (this.myAccData.urls.cart && !this.cartUrl)\n this.cartUrl = this.myAccData.urls.cart;\n if (this.myAccData.urls.messages && !this.msgUrl)\n this.msgUrl = this.myAccData.urls.messages;\n }\n\n private processMyAccLinks() {\n if (!this.myAccData.links || !this.myAccData.links.length) return;\n\n this.myAccData.links.forEach((link) => {\n switch (link.area) {\n case 'left-side-logged-in':\n case 'left-side-logged-out':\n if (\n this.activeMyAccountSections &&\n !this.activeMyAccountSections.includes('sites')\n )\n break;\n if (this.isLoggedIn && link.area === 'left-side-logged-in')\n this.siteNavItms.push(link);\n else if (!this.isLoggedIn && link.area === 'left-side-logged-out')\n this.siteNavItms.push(link);\n break;\n case 'right-side-logged-in':\n case 'right-side-logged-out':\n if (\n this.activeMyAccountSections &&\n !this.activeMyAccountSections.includes('about')\n )\n break;\n if (this.isLoggedIn && link.area === 'right-side-logged-in')\n this.aboutNavItms.push(link);\n else if (!this.isLoggedIn && link.area === 'right-side-logged-out')\n this.aboutNavItms.push(link);\n break;\n case 'profile-panel-list':\n if (\n this.activeMyAccountSections &&\n !this.activeMyAccountSections.includes('loggedin')\n )\n break;\n this.loggedInNavItms.push(link);\n break;\n }\n });\n }\n}\n"]}
|
@@ -1,5 +0,0 @@
|
|
1
|
-
/*!
|
2
|
-
* Web Components for Nanopore digital Web Apps
|
3
|
-
*/
|
4
|
-
System.register([],(function(e){"use strict";return{execute:function(){var t="top";var r="bottom";var n="right";var i="left";var a="auto";var o=[t,r,n,i];var s="start";var f="end";var p="clippingParents";var u="viewport";var c="popper";var v="reference";var l=o.reduce((function(e,t){return e.concat([t+"-"+s,t+"-"+f])}),[]);var d=[].concat(o,[a]).reduce((function(e,t){return e.concat([t,t+"-"+s,t+"-"+f])}),[]);var h="beforeRead";var m="read";var g="afterRead";var y="beforeMain";var b="main";var w="afterMain";var x="beforeWrite";var O="write";var E="afterWrite";var j=[h,m,g,y,b,w,x,O,E];function A(e){return e?(e.nodeName||"").toLowerCase():null}function L(e){if(e==null){return window}if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t?t.defaultView||window:window}return e}function D(e){var t=L(e).Element;return e instanceof t||e instanceof Element}function k(e){var t=L(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function W(e){if(typeof ShadowRoot==="undefined"){return false}var t=L(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function T(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var r=t.styles[e]||{};var n=t.attributes[e]||{};var i=t.elements[e];if(!k(i)||!A(i)){return}Object.assign(i.style,r);Object.keys(n).forEach((function(e){var t=n[e];if(t===false){i.removeAttribute(e)}else{i.setAttribute(e,t===true?"":t)}}))}))}function P(e){var t=e.state;var r={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(t.elements.popper.style,r.popper);t.styles=r;if(t.elements.arrow){Object.assign(t.elements.arrow.style,r.arrow)}return function(){Object.keys(t.elements).forEach((function(e){var n=t.elements[e];var i=t.attributes[e]||{};var a=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:r[e]);var o=a.reduce((function(e,t){e[t]="";return e}),{});if(!k(n)||!A(n)){return}Object.assign(n.style,o);Object.keys(i).forEach((function(e){n.removeAttribute(e)}))}))}}var M={name:"applyStyles",enabled:true,phase:"write",fn:T,effect:P,requires:["computeStyles"]};function C(e){return e.split("-")[0]}var H=Math.max;var B=Math.min;var S=Math.round;function R(e,t){if(t===void 0){t=false}var r=e.getBoundingClientRect();var n=1;var i=1;if(k(e)&&t){var a=e.offsetHeight;var o=e.offsetWidth;if(o>0){n=S(r.width)/o||1}if(a>0){i=S(r.height)/a||1}}return{width:r.width/n,height:r.height/i,top:r.top/i,right:r.right/n,bottom:r.bottom/i,left:r.left/n,x:r.left/n,y:r.top/i}}function q(e){var t=R(e);var r=e.offsetWidth;var n=e.offsetHeight;if(Math.abs(t.width-r)<=1){r=t.width}if(Math.abs(t.height-n)<=1){n=t.height}return{x:e.offsetLeft,y:e.offsetTop,width:r,height:n}}function V(e,t){var r=t.getRootNode&&t.getRootNode();if(e.contains(t)){return true}else if(r&&W(r)){var n=t;do{if(n&&e.isSameNode(n)){return true}n=n.parentNode||n.host}while(n)}return false}function F(e){return L(e).getComputedStyle(e)}function N(e){return["table","td","th"].indexOf(A(e))>=0}function I(e){return((D(e)?e.ownerDocument:e.document)||window.document).documentElement}function U(e){if(A(e)==="html"){return e}return e.assignedSlot||e.parentNode||(W(e)?e.host:null)||I(e)}function z(e){if(!k(e)||F(e).position==="fixed"){return null}return e.offsetParent}function _(e){var t=navigator.userAgent.toLowerCase().indexOf("firefox")!==-1;var r=navigator.userAgent.indexOf("Trident")!==-1;if(r&&k(e)){var n=F(e);if(n.position==="fixed"){return null}}var i=U(e);if(W(i)){i=i.host}while(k(i)&&["html","body"].indexOf(A(i))<0){var a=F(i);if(a.transform!=="none"||a.perspective!=="none"||a.contain==="paint"||["transform","perspective"].indexOf(a.willChange)!==-1||t&&a.willChange==="filter"||t&&a.filter&&a.filter!=="none"){return i}else{i=i.parentNode}}return null}function X(e){var t=L(e);var r=z(e);while(r&&N(r)&&F(r).position==="static"){r=z(r)}if(r&&(A(r)==="html"||A(r)==="body"&&F(r).position==="static")){return t}return r||_(e)||t}function Y(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function G(e,t,r){return H(e,B(t,r))}function J(e,t,r){var n=G(e,t,r);return n>r?r:n}function K(){return{top:0,right:0,bottom:0,left:0}}function Q(e){return Object.assign({},K(),e)}function Z(e,t){return t.reduce((function(t,r){t[r]=e;return t}),{})}var $=function e(t,r){t=typeof t==="function"?t(Object.assign({},r.rects,{placement:r.placement})):t;return Q(typeof t!=="number"?t:Z(t,o))};function ee(e){var a;var o=e.state,s=e.name,f=e.options;var p=o.elements.arrow;var u=o.modifiersData.popperOffsets;var c=C(o.placement);var v=Y(c);var l=[i,n].indexOf(c)>=0;var d=l?"height":"width";if(!p||!u){return}var h=$(f.padding,o);var m=q(p);var g=v==="y"?t:i;var y=v==="y"?r:n;var b=o.rects.reference[d]+o.rects.reference[v]-u[v]-o.rects.popper[d];var w=u[v]-o.rects.reference[v];var x=X(p);var O=x?v==="y"?x.clientHeight||0:x.clientWidth||0:0;var E=b/2-w/2;var j=h[g];var A=O-m[d]-h[y];var L=O/2-m[d]/2+E;var D=G(j,L,A);var k=v;o.modifiersData[s]=(a={},a[k]=D,a.centerOffset=D-L,a)}function te(e){var t=e.state,r=e.options;var n=r.element,i=n===void 0?"[data-popper-arrow]":n;if(i==null){return}if(typeof i==="string"){i=t.elements.popper.querySelector(i);if(!i){return}}if(!V(t.elements.popper,i)){return}t.elements.arrow=i}var re={name:"arrow",enabled:true,phase:"main",fn:ee,effect:te,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ne(e){return e.split("-")[1]}var ie={top:"auto",right:"auto",bottom:"auto",left:"auto"};function ae(e){var t=e.x,r=e.y;var n=window;var i=n.devicePixelRatio||1;return{x:S(t*i)/i||0,y:S(r*i)/i||0}}function oe(e){var a;var o=e.popper,s=e.popperRect,p=e.placement,u=e.variation,c=e.offsets,v=e.position,l=e.gpuAcceleration,d=e.adaptive,h=e.roundOffsets,m=e.isFixed;var g=c.x,y=g===void 0?0:g,b=c.y,w=b===void 0?0:b;var x=typeof h==="function"?h({x:y,y:w}):{x:y,y:w};y=x.x;w=x.y;var O=c.hasOwnProperty("x");var E=c.hasOwnProperty("y");var j=i;var A=t;var D=window;if(d){var k=X(o);var W="clientHeight";var T="clientWidth";if(k===L(o)){k=I(o);if(F(k).position!=="static"&&v==="absolute"){W="scrollHeight";T="scrollWidth"}}k=k;if(p===t||(p===i||p===n)&&u===f){A=r;var P=m&&k===D&&D.visualViewport?D.visualViewport.height:k[W];w-=P-s.height;w*=l?1:-1}if(p===i||(p===t||p===r)&&u===f){j=n;var M=m&&k===D&&D.visualViewport?D.visualViewport.width:k[T];y-=M-s.width;y*=l?1:-1}}var C=Object.assign({position:v},d&&ie);var H=h===true?ae({x:y,y:w}):{x:y,y:w};y=H.x;w=H.y;if(l){var B;return Object.assign({},C,(B={},B[A]=E?"0":"",B[j]=O?"0":"",B.transform=(D.devicePixelRatio||1)<=1?"translate("+y+"px, "+w+"px)":"translate3d("+y+"px, "+w+"px, 0)",B))}return Object.assign({},C,(a={},a[A]=E?w+"px":"",a[j]=O?y+"px":"",a.transform="",a))}function se(e){var t=e.state,r=e.options;var n=r.gpuAcceleration,i=n===void 0?true:n,a=r.adaptive,o=a===void 0?true:a,s=r.roundOffsets,f=s===void 0?true:s;var p={placement:C(t.placement),variation:ne(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:i,isFixed:t.options.strategy==="fixed"};if(t.modifiersData.popperOffsets!=null){t.styles.popper=Object.assign({},t.styles.popper,oe(Object.assign({},p,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:o,roundOffsets:f})))}if(t.modifiersData.arrow!=null){t.styles.arrow=Object.assign({},t.styles.arrow,oe(Object.assign({},p,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:false,roundOffsets:f})))}t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}var fe={name:"computeStyles",enabled:true,phase:"beforeWrite",fn:se,data:{}};var pe={passive:true};function ue(e){var t=e.state,r=e.instance,n=e.options;var i=n.scroll,a=i===void 0?true:i,o=n.resize,s=o===void 0?true:o;var f=L(t.elements.popper);var p=[].concat(t.scrollParents.reference,t.scrollParents.popper);if(a){p.forEach((function(e){e.addEventListener("scroll",r.update,pe)}))}if(s){f.addEventListener("resize",r.update,pe)}return function(){if(a){p.forEach((function(e){e.removeEventListener("scroll",r.update,pe)}))}if(s){f.removeEventListener("resize",r.update,pe)}}}var ce={name:"eventListeners",enabled:true,phase:"write",fn:function e(){},effect:ue,data:{}};var ve={left:"right",right:"left",bottom:"top",top:"bottom"};function le(e){return e.replace(/left|right|bottom|top/g,(function(e){return ve[e]}))}var de={start:"end",end:"start"};function he(e){return e.replace(/start|end/g,(function(e){return de[e]}))}function me(e){var t=L(e);var r=t.pageXOffset;var n=t.pageYOffset;return{scrollLeft:r,scrollTop:n}}function ge(e){return R(I(e)).left+me(e).scrollLeft}function ye(e){var t=L(e);var r=I(e);var n=t.visualViewport;var i=r.clientWidth;var a=r.clientHeight;var o=0;var s=0;if(n){i=n.width;a=n.height;if(!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)){o=n.offsetLeft;s=n.offsetTop}}return{width:i,height:a,x:o+ge(e),y:s}}function be(e){var t;var r=I(e);var n=me(e);var i=(t=e.ownerDocument)==null?void 0:t.body;var a=H(r.scrollWidth,r.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0);var o=H(r.scrollHeight,r.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0);var s=-n.scrollLeft+ge(e);var f=-n.scrollTop;if(F(i||r).direction==="rtl"){s+=H(r.clientWidth,i?i.clientWidth:0)-a}return{width:a,height:o,x:s,y:f}}function we(e){var t=F(e),r=t.overflow,n=t.overflowX,i=t.overflowY;return/auto|scroll|overlay|hidden/.test(r+i+n)}function xe(e){if(["html","body","#document"].indexOf(A(e))>=0){return e.ownerDocument.body}if(k(e)&&we(e)){return e}return xe(U(e))}function Oe(e,t){var r;if(t===void 0){t=[]}var n=xe(e);var i=n===((r=e.ownerDocument)==null?void 0:r.body);var a=L(n);var o=i?[a].concat(a.visualViewport||[],we(n)?n:[]):n;var s=t.concat(o);return i?s:s.concat(Oe(U(o)))}function Ee(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function je(e){var t=R(e);t.top=t.top+e.clientTop;t.left=t.left+e.clientLeft;t.bottom=t.top+e.clientHeight;t.right=t.left+e.clientWidth;t.width=e.clientWidth;t.height=e.clientHeight;t.x=t.left;t.y=t.top;return t}function Ae(e,t){return t===u?Ee(ye(e)):D(t)?je(t):Ee(be(I(e)))}function Le(e){var t=Oe(U(e));var r=["absolute","fixed"].indexOf(F(e).position)>=0;var n=r&&k(e)?X(e):e;if(!D(n)){return[]}return t.filter((function(e){return D(e)&&V(e,n)&&A(e)!=="body"}))}function De(e,t,r){var n=t==="clippingParents"?Le(e):[].concat(t);var i=[].concat(n,[r]);var a=i[0];var o=i.reduce((function(t,r){var n=Ae(e,r);t.top=H(n.top,t.top);t.right=B(n.right,t.right);t.bottom=B(n.bottom,t.bottom);t.left=H(n.left,t.left);return t}),Ae(e,a));o.width=o.right-o.left;o.height=o.bottom-o.top;o.x=o.left;o.y=o.top;return o}function ke(e){var a=e.reference,o=e.element,p=e.placement;var u=p?C(p):null;var c=p?ne(p):null;var v=a.x+a.width/2-o.width/2;var l=a.y+a.height/2-o.height/2;var d;switch(u){case t:d={x:v,y:a.y-o.height};break;case r:d={x:v,y:a.y+a.height};break;case n:d={x:a.x+a.width,y:l};break;case i:d={x:a.x-o.width,y:l};break;default:d={x:a.x,y:a.y}}var h=u?Y(u):null;if(h!=null){var m=h==="y"?"height":"width";switch(c){case s:d[h]=d[h]-(a[m]/2-o[m]/2);break;case f:d[h]=d[h]+(a[m]/2-o[m]/2);break}}return d}function We(e,i){if(i===void 0){i={}}var a=i,s=a.placement,f=s===void 0?e.placement:s,l=a.boundary,d=l===void 0?p:l,h=a.rootBoundary,m=h===void 0?u:h,g=a.elementContext,y=g===void 0?c:g,b=a.altBoundary,w=b===void 0?false:b,x=a.padding,O=x===void 0?0:x;var E=Q(typeof O!=="number"?O:Z(O,o));var j=y===c?v:c;var A=e.rects.popper;var L=e.elements[w?j:y];var k=De(D(L)?L:L.contextElement||I(e.elements.popper),d,m);var W=R(e.elements.reference);var T=ke({reference:W,element:A,strategy:"absolute",placement:f});var P=Ee(Object.assign({},A,T));var M=y===c?P:W;var C={top:k.top-M.top+E.top,bottom:M.bottom-k.bottom+E.bottom,left:k.left-M.left+E.left,right:M.right-k.right+E.right};var H=e.modifiersData.offset;if(y===c&&H){var B=H[f];Object.keys(C).forEach((function(e){var i=[n,r].indexOf(e)>=0?1:-1;var a=[t,r].indexOf(e)>=0?"y":"x";C[e]+=B[a]*i}))}return C}function Te(e,t){if(t===void 0){t={}}var r=t,n=r.placement,i=r.boundary,a=r.rootBoundary,s=r.padding,f=r.flipVariations,p=r.allowedAutoPlacements,u=p===void 0?d:p;var c=ne(n);var v=c?f?l:l.filter((function(e){return ne(e)===c})):o;var h=v.filter((function(e){return u.indexOf(e)>=0}));if(h.length===0){h=v}var m=h.reduce((function(t,r){t[r]=We(e,{placement:r,boundary:i,rootBoundary:a,padding:s})[C(r)];return t}),{});return Object.keys(m).sort((function(e,t){return m[e]-m[t]}))}function Pe(e){if(C(e)===a){return[]}var t=le(e);return[he(e),t,he(t)]}function Me(e){var o=e.state,f=e.options,p=e.name;if(o.modifiersData[p]._skip){return}var u=f.mainAxis,c=u===void 0?true:u,v=f.altAxis,l=v===void 0?true:v,d=f.fallbackPlacements,h=f.padding,m=f.boundary,g=f.rootBoundary,y=f.altBoundary,b=f.flipVariations,w=b===void 0?true:b,x=f.allowedAutoPlacements;var O=o.options.placement;var E=C(O);var j=E===O;var A=d||(j||!w?[le(O)]:Pe(O));var L=[O].concat(A).reduce((function(e,t){return e.concat(C(t)===a?Te(o,{placement:t,boundary:m,rootBoundary:g,padding:h,flipVariations:w,allowedAutoPlacements:x}):t)}),[]);var D=o.rects.reference;var k=o.rects.popper;var W=new Map;var T=true;var P=L[0];for(var M=0;M<L.length;M++){var H=L[M];var B=C(H);var S=ne(H)===s;var R=[t,r].indexOf(B)>=0;var q=R?"width":"height";var V=We(o,{placement:H,boundary:m,rootBoundary:g,altBoundary:y,padding:h});var F=R?S?n:i:S?r:t;if(D[q]>k[q]){F=le(F)}var N=le(F);var I=[];if(c){I.push(V[B]<=0)}if(l){I.push(V[F]<=0,V[N]<=0)}if(I.every((function(e){return e}))){P=H;T=false;break}W.set(H,I)}if(T){var U=w?3:1;var z=function e(t){var r=L.find((function(e){var r=W.get(e);if(r){return r.slice(0,t).every((function(e){return e}))}}));if(r){P=r;return"break"}};for(var _=U;_>0;_--){var X=z(_);if(X==="break")break}}if(o.placement!==P){o.modifiersData[p]._skip=true;o.placement=P;o.reset=true}}var Ce={name:"flip",enabled:true,phase:"main",fn:Me,requiresIfExists:["offset"],data:{_skip:false}};function He(e,t,r){if(r===void 0){r={x:0,y:0}}return{top:e.top-t.height-r.y,right:e.right-t.width+r.x,bottom:e.bottom-t.height+r.y,left:e.left-t.width-r.x}}function Be(e){return[t,n,r,i].some((function(t){return e[t]>=0}))}function Se(e){var t=e.state,r=e.name;var n=t.rects.reference;var i=t.rects.popper;var a=t.modifiersData.preventOverflow;var o=We(t,{elementContext:"reference"});var s=We(t,{altBoundary:true});var f=He(o,n);var p=He(s,i,a);var u=Be(f);var c=Be(p);t.modifiersData[r]={referenceClippingOffsets:f,popperEscapeOffsets:p,isReferenceHidden:u,hasPopperEscaped:c};t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":c})}var Re={name:"hide",enabled:true,phase:"main",requiresIfExists:["preventOverflow"],fn:Se};function qe(e,r,a){var o=C(e);var s=[i,t].indexOf(o)>=0?-1:1;var f=typeof a==="function"?a(Object.assign({},r,{placement:e})):a,p=f[0],u=f[1];p=p||0;u=(u||0)*s;return[i,n].indexOf(o)>=0?{x:u,y:p}:{x:p,y:u}}function Ve(e){var t=e.state,r=e.options,n=e.name;var i=r.offset,a=i===void 0?[0,0]:i;var o=d.reduce((function(e,r){e[r]=qe(r,t.rects,a);return e}),{});var s=o[t.placement],f=s.x,p=s.y;if(t.modifiersData.popperOffsets!=null){t.modifiersData.popperOffsets.x+=f;t.modifiersData.popperOffsets.y+=p}t.modifiersData[n]=o}var Fe={name:"offset",enabled:true,phase:"main",requires:["popperOffsets"],fn:Ve};function Ne(e){var t=e.state,r=e.name;t.modifiersData[r]=ke({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}var Ie={name:"popperOffsets",enabled:true,phase:"read",fn:Ne,data:{}};function Ue(e){return e==="x"?"y":"x"}function ze(e){var a=e.state,o=e.options,f=e.name;var p=o.mainAxis,u=p===void 0?true:p,c=o.altAxis,v=c===void 0?false:c,l=o.boundary,d=o.rootBoundary,h=o.altBoundary,m=o.padding,g=o.tether,y=g===void 0?true:g,b=o.tetherOffset,w=b===void 0?0:b;var x=We(a,{boundary:l,rootBoundary:d,padding:m,altBoundary:h});var O=C(a.placement);var E=ne(a.placement);var j=!E;var A=Y(O);var L=Ue(A);var D=a.modifiersData.popperOffsets;var k=a.rects.reference;var W=a.rects.popper;var T=typeof w==="function"?w(Object.assign({},a.rects,{placement:a.placement})):w;var P=typeof T==="number"?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T);var M=a.modifiersData.offset?a.modifiersData.offset[a.placement]:null;var S={x:0,y:0};if(!D){return}if(u){var R;var V=A==="y"?t:i;var F=A==="y"?r:n;var N=A==="y"?"height":"width";var I=D[A];var U=I+x[V];var z=I-x[F];var _=y?-W[N]/2:0;var Q=E===s?k[N]:W[N];var Z=E===s?-W[N]:-k[N];var $=a.elements.arrow;var ee=y&&$?q($):{width:0,height:0};var te=a.modifiersData["arrow#persistent"]?a.modifiersData["arrow#persistent"].padding:K();var re=te[V];var ie=te[F];var ae=G(0,k[N],ee[N]);var oe=j?k[N]/2-_-ae-re-P.mainAxis:Q-ae-re-P.mainAxis;var se=j?-k[N]/2+_+ae+ie+P.mainAxis:Z+ae+ie+P.mainAxis;var fe=a.elements.arrow&&X(a.elements.arrow);var pe=fe?A==="y"?fe.clientTop||0:fe.clientLeft||0:0;var ue=(R=M==null?void 0:M[A])!=null?R:0;var ce=I+oe-ue-pe;var ve=I+se-ue;var le=G(y?B(U,ce):U,I,y?H(z,ve):z);D[A]=le;S[A]=le-I}if(v){var de;var he=A==="x"?t:i;var me=A==="x"?r:n;var ge=D[L];var ye=L==="y"?"height":"width";var be=ge+x[he];var we=ge-x[me];var xe=[t,i].indexOf(O)!==-1;var Oe=(de=M==null?void 0:M[L])!=null?de:0;var Ee=xe?be:ge-k[ye]-W[ye]-Oe+P.altAxis;var je=xe?ge+k[ye]+W[ye]-Oe-P.altAxis:we;var Ae=y&&xe?J(Ee,ge,je):G(y?Ee:be,ge,y?je:we);D[L]=Ae;S[L]=Ae-ge}a.modifiersData[f]=S}var _e={name:"preventOverflow",enabled:true,phase:"main",fn:ze,requiresIfExists:["offset"]};function Xe(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function Ye(e){if(e===L(e)||!k(e)){return me(e)}else{return Xe(e)}}function Ge(e){var t=e.getBoundingClientRect();var r=S(t.width)/e.offsetWidth||1;var n=S(t.height)/e.offsetHeight||1;return r!==1||n!==1}function Je(e,t,r){if(r===void 0){r=false}var n=k(t);var i=k(t)&&Ge(t);var a=I(t);var o=R(e,i);var s={scrollLeft:0,scrollTop:0};var f={x:0,y:0};if(n||!n&&!r){if(A(t)!=="body"||we(a)){s=Ye(t)}if(k(t)){f=R(t,true);f.x+=t.clientLeft;f.y+=t.clientTop}else if(a){f.x=ge(a)}}return{x:o.left+s.scrollLeft-f.x,y:o.top+s.scrollTop-f.y,width:o.width,height:o.height}}function Ke(e){var t=new Map;var r=new Set;var n=[];e.forEach((function(e){t.set(e.name,e)}));function i(e){r.add(e.name);var a=[].concat(e.requires||[],e.requiresIfExists||[]);a.forEach((function(e){if(!r.has(e)){var n=t.get(e);if(n){i(n)}}}));n.push(e)}e.forEach((function(e){if(!r.has(e.name)){i(e)}}));return n}function Qe(e){var t=Ke(e);return j.reduce((function(e,r){return e.concat(t.filter((function(e){return e.phase===r})))}),[])}function Ze(e){var t;return function(){if(!t){t=new Promise((function(r){Promise.resolve().then((function(){t=undefined;r(e())}))}))}return t}}function $e(e){var t=e.reduce((function(e,t){var r=e[t.name];e[t.name]=r?Object.assign({},r,t,{options:Object.assign({},r.options,t.options),data:Object.assign({},r.data,t.data)}):t;return e}),{});return Object.keys(t).map((function(e){return t[e]}))}var et={placement:"bottom",modifiers:[],strategy:"absolute"};function tt(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++){t[r]=arguments[r]}return!t.some((function(e){return!(e&&typeof e.getBoundingClientRect==="function")}))}function rt(e){if(e===void 0){e={}}var t=e,r=t.defaultModifiers,n=r===void 0?[]:r,i=t.defaultOptions,a=i===void 0?et:i;return function e(t,r,i){if(i===void 0){i=a}var o={placement:"bottom",orderedModifiers:[],options:Object.assign({},et,a),modifiersData:{},elements:{reference:t,popper:r},attributes:{},styles:{}};var s=[];var f=false;var p={state:o,setOptions:function e(i){var s=typeof i==="function"?i(o.options):i;c();o.options=Object.assign({},a,o.options,s);o.scrollParents={reference:D(t)?Oe(t):t.contextElement?Oe(t.contextElement):[],popper:Oe(r)};var f=Qe($e([].concat(n,o.options.modifiers)));o.orderedModifiers=f.filter((function(e){return e.enabled}));u();return p.update()},forceUpdate:function e(){if(f){return}var t=o.elements,r=t.reference,n=t.popper;if(!tt(r,n)){return}o.rects={reference:Je(r,X(n),o.options.strategy==="fixed"),popper:q(n)};o.reset=false;o.placement=o.options.placement;o.orderedModifiers.forEach((function(e){return o.modifiersData[e.name]=Object.assign({},e.data)}));for(var i=0;i<o.orderedModifiers.length;i++){if(o.reset===true){o.reset=false;i=-1;continue}var a=o.orderedModifiers[i],s=a.fn,u=a.options,c=u===void 0?{}:u,v=a.name;if(typeof s==="function"){o=s({state:o,options:c,name:v,instance:p})||o}}},update:Ze((function(){return new Promise((function(e){p.forceUpdate();e(o)}))})),destroy:function e(){c();f=true}};if(!tt(t,r)){return p}p.setOptions(i).then((function(e){if(!f&&i.onFirstUpdate){i.onFirstUpdate(e)}}));function u(){o.orderedModifiers.forEach((function(e){var t=e.name,r=e.options,n=r===void 0?{}:r,i=e.effect;if(typeof i==="function"){var a=i({state:o,name:t,instance:p,options:n});var f=function e(){};s.push(a||f)}}))}function c(){s.forEach((function(e){return e()}));s=[]}return p}}var nt=[ce,Ie,fe,M,Fe,Ce,_e,re,Re];var it=rt({defaultModifiers:nt});var at=function(){function e(e,t,r){this.handleTransitionEnd=this.handleTransitionEnd.bind(this);this.anchor=e;this.popover=t;this.options=Object.assign({skidding:0,distance:0,placement:"bottom-start",strategy:"absolute",transitionElement:this.popover,visibleClass:"popover-visible",onAfterShow:function(){},onAfterHide:function(){},onTransitionEnd:function(){}},r);this.popover.hidden=true;this.popover.classList.remove(this.options.visibleClass);this.popover.addEventListener("transitionend",this.handleTransitionEnd)}e.prototype.handleTransitionEnd=function(e){var t=e.target;if(t===this.options.transitionElement){this.options.onTransitionEnd.call(this,e);if(this.isVisible===false&&!this.popover.hidden){this.popover.hidden=true;this.popover.classList.remove(this.options.visibleClass);this.options.onAfterHide.call(this)}}};e.prototype.destroy=function(){this.popover.removeEventListener("transitionend",this.handleTransitionEnd);if(this.popper){this.popper.destroy();this.popper=null}};e.prototype.show=function(){var e=this;this.isVisible=true;this.popover.hidden=false;requestAnimationFrame((function(){return e.popover.classList.add(e.options.visibleClass)}));if(this.popper){this.popper.destroy()}this.popper=it(this.anchor,this.popover,{placement:this.options.placement,strategy:this.options.strategy,modifiers:[{name:"sameWidth",enabled:true,fn:function(e){var t=e.state;t.styles.popper.minWidth=t.rects.reference.width+"px"},phase:"beforeWrite",requires:["computeStyles"]},{name:"flip",options:{boundary:"viewport"}},{name:"offset",options:{padding:5,offset:[this.options.skidding,this.options.distance]}}]});this.popover.addEventListener("transitionend",(function(){return e.options.onAfterShow.call(e)}),{once:true});requestAnimationFrame((function(){return e.popper.update()}))};e.prototype.hide=function(){this.isVisible=false;this.popover.classList.remove(this.options.visibleClass)};e.prototype.setOptions=function(e){var t=this;this.options=Object.assign(this.options,e);this.isVisible?this.popover.classList.add(this.options.visibleClass):this.popover.classList.remove(this.options.visibleClass);if(this.popper){this.popper.setOptions({placement:this.options.placement,strategy:this.options.strategy});requestAnimationFrame((function(){return t.popper.update()}))}};return e}();e("P",at)}}}));
|
5
|
-
//# sourceMappingURL=p-3c3e9fec.system.js.map
|
@@ -1,5 +0,0 @@
|
|
1
|
-
var __awaiter=this&&this.__awaiter||function(t,a,n,o){function e(t){return t instanceof n?t:new n((function(a){a(t)}))}return new(n||(n=Promise))((function(n,r){function i(t){try{l(o.next(t))}catch(a){r(a)}}function s(t){try{l(o["throw"](t))}catch(a){r(a)}}function l(t){t.done?n(t.value):e(t.value).then(i,s)}l((o=o.apply(t,a||[])).next())}))};var __generator=this&&this.__generator||function(t,a){var n={label:0,sent:function(){if(r[0]&1)throw r[1];return r[1]},trys:[],ops:[]},o,e,r,i;return i={next:s(0),throw:s(1),return:s(2)},typeof Symbol==="function"&&(i[Symbol.iterator]=function(){return this}),i;function s(t){return function(a){return l([t,a])}}function l(i){if(o)throw new TypeError("Generator is already executing.");while(n)try{if(o=1,e&&(r=i[0]&2?e["return"]:i[0]?e["throw"]||((r=e["return"])&&r.call(e),0):e.next)&&!(r=r.call(e,i[1])).done)return r;if(e=0,r)i=[i[0]&2,r.value];switch(i[0]){case 0:case 1:r=i;break;case 4:n.label++;return{value:i[1],done:false};case 5:n.label++;e=i[1];i=[0];continue;case 7:i=n.ops.pop();n.trys.pop();continue;default:if(!(r=n.trys,r=r.length>0&&r[r.length-1])&&(i[0]===6||i[0]===2)){n=0;continue}if(i[0]===3&&(!r||i[1]>r[0]&&i[1]<r[3])){n.label=i[1];break}if(i[0]===6&&n.label<r[1]){n.label=r[1];r=i;break}if(r&&n.label<r[2]){n.label=r[2];n.ops.push(i);break}if(r[2])n.ops.pop();n.trys.pop();continue}i=a.call(t,n)}catch(s){i=[6,s];e=0}finally{o=r=0}if(i[0]&5)throw i[1];return{value:i[0]?i[1]:void 0,done:true}}};
|
2
|
-
/*!
|
3
|
-
* Web Components for Nanopore digital Web Apps
|
4
|
-
*/System.register(["./p-59b3d24b.system.js","./p-b430a9b6.system.js","./p-b370e3ef.system.js","./p-0784f2ad.system.js","./p-1c216ca4.system.js","./p-e1f46998.system.js","./p-1d13dbdf.system.js","./p-89edc042.system.js","./p-9edbf25d.system.js","./p-ef053a2f.system.js"],(function(t){"use strict";var a,n,o,e,r,i,s,l,c,b,d,u,p,h;return{setters:[function(t){a=t.r;n=t.c;o=t.h;e=t.e;r=t.g},function(t){i=t.i},function(t){s=t.s},function(t){l=t.f},function(t){c=t.d;b=t.r},function(t){d=t.C},function(t){u=t.g;p=t.a},function(t){h=t.c},function(){},function(){}],execute:function(){var g=':host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none !important}:host{--indicator-transition:var(--nano-transition-fast, 0.3s);--indicator-color:#90c6e7;--indicator-track-color:#e4e6e8;--indicator-size:0;--border-radius:var(--nano-layer-border-radius, var(--nano-border-radius-medium, 4px));--background-rgb:var(--nano-layer-bg-rgb, 255, 255, 255);--scroll-btn-color:"currentColor";--content-padding:2rem 2.5rem;--content-bg:rgb(var(--background-rgb));--content-border-radius:var(--border-radius);--tabs-padding-start:2.5rem;--tabs-padding-end:2.5rem;--tabs-padding-top:0;--tabs-padding-bottom:0;--tabs-container-bg:"transparent";--tabs-bg-rgb:var(--background-rgb);--tab-border-radius:var(--border-radius);--tab-text-color:#007495;--shadow-opacity:0.1;display:block;position:relative;z-index:var(--nano-layer-index-raised, 5)}@media only screen and (max-width: 768px){:host{--tabs-padding-start:1.5rem;--tabs-padding-end:1.5rem}}:host ::slotted(nano-tab){--tab-indicator-color:var(--indicator-color);--bg-rgb:var(--tabs-bg-rgb);--border-radius:var(--tab-border-radius)}:host(.legacy) ::slotted(nano-tab){--tab-indicator-color:#90c6e7;--border-radius:3px;--tab-indicator-size:5px;--bg-rgb:255, 255, 255}:host([placement=start]),:host([placement=end]){--content-padding:1rem;--tabs-padding-start:0;--tabs-padding-end:0;--tabs-padding-top:0;--tabs-padding-bottom:0;--tab-text-color:#455556;--indicator-color:#007495;--indicator-size:2px}:host(.nano-color){--indicator-color:var(--nano-color-tint, var(--nano-color-primary-tint, #2689a5));--tab-text-color:rgba(var(--nano-color-base-rgb), 0.7)}:host(.nano-color) ::slotted(nano-tab){--active-text-color:var(--nano-color-shade, var(--nano-color-primary-shade, #00637f))}.nano-tab-group{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:0;width:100%;-webkit-box-flex:inherit;-ms-flex:inherit;flex:inherit}.nano-tab-group__tabs{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;width:100%}.nano-tab-group__active-tab-indicator{position:absolute;-webkit-transition:var(--indicator-transition) transform ease, var(--indicator-transition) width ease;transition:var(--indicator-transition) transform ease, var(--indicator-transition) width ease}.nano-tab-group__body{background:var(--content-bg)}.nano-tab-group:not(.focus-visible) ::slotted(nano-tab){--focus-shadow:none}.nano-tab-group .nano-tab-group__nav-container{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;background:var(--tabs-container-bg)}.nano-tab-group button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.nano-tab-group__scroll-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;bottom:0;border:unset;z-index:2;-webkit-transition:var(--nano-transition-fast, 0.3s) ease opacity;transition:var(--nano-transition-fast, 0.3s) ease opacity;opacity:0;color:var(--scroll-btn-color)}.nano-tab-group__scroll-button:focus{outline:none}.nano-tab-group__scroll-button.is-shown{opacity:1}.nano-tab-group__scroll-button.focus-visible:focus{-webkit-box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8))) inset;box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8))) inset}.nano-tab-group__scroll-button--left{left:0}.nano-tab-group__scroll-button--right{right:0}.nano-tab-group__scroll-button nano-icon{font-size:16px}.nano-tab-group--top{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.nano-tab-group--top .nano-tab-group__nav-container::after{content:"";width:86%;-webkit-box-shadow:0 10px 40px 10px rgba(0, 0, 0, var(--shadow-opacity));box-shadow:0 10px 40px 10px rgba(0, 0, 0, var(--shadow-opacity));height:10px;position:absolute;left:7%;bottom:-10px;border-radius:10px;z-index:-1}.nano-tab-group--top .nano-tab-group__nav{scrollbar-width:none;-ms-overflow-style:none;padding-left:var(--tabs-padding-start);padding-right:var(--tabs-padding-end);padding-top:var(--tabs-padding-top);padding-bottom:var(--tabs-padding-bottom);display:-webkit-box;display:-ms-flexbox;display:flex;overflow-x:auto;overflow-y:hidden;-webkit-transition:var(--nano-transition-medium, 0.5s) ease;transition:var(--nano-transition-medium, 0.5s) ease;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:-webkit-gradient(linear, right top, left top, color-stop(0, rgba(0, 0, 0, 0)), color-stop(rgba(0, 0, 0, 0)), color-stop(black), color-stop(black), color-stop(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0)));-webkit-mask-image:linear-gradient(to left, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) var(--tabs-padding-start), black calc(var(--tabs-padding-start) * 2), black calc(100% - (var(--tabs-padding-end) * 2)), rgba(0, 0, 0, 0) calc(100% - var(--tabs-padding-end)), rgba(0, 0, 0, 0));mask-image:-webkit-gradient(linear, right top, left top, color-stop(0, rgba(0, 0, 0, 0)), color-stop(rgba(0, 0, 0, 0)), color-stop(black), color-stop(black), color-stop(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0)));mask-image:linear-gradient(to left, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) var(--tabs-padding-start), black calc(var(--tabs-padding-start) * 2), black calc(100% - (var(--tabs-padding-end) * 2)), rgba(0, 0, 0, 0) calc(100% - var(--tabs-padding-end)), rgba(0, 0, 0, 0));-webkit-mask-size:calc(100% + calc(var(--tabs-padding-end) * 4));mask-size:calc(100% + calc(var(--tabs-padding-end) * 4));-webkit-mask-position:calc(var(--tabs-padding-end) * -2);mask-position:calc(var(--tabs-padding-end) * -2)}.nano-tab-group--top .nano-tab-group__nav::-webkit-scrollbar{width:0;height:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.nano-tab-group--top .nano-tab-group__nav{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--tabs-padding-start);padding-inline-start:var(--tabs-padding-start);-webkit-padding-end:var(--tabs-padding-end);padding-inline-end:var(--tabs-padding-end)}}.nano-tab-group--top .nano-tab-group__nav::after{content:" ";padding-left:0;padding-right:var(--tabs-padding-end);padding-top:var(--tabs-padding-top);padding-bottom:var(--tabs-padding-bottom);line-height:1;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.nano-tab-group--top .nano-tab-group__nav::after{padding-left:unset;padding-right:unset;-webkit-padding-start:0;padding-inline-start:0;-webkit-padding-end:var(--tabs-padding-end);padding-inline-end:var(--tabs-padding-end)}}.nano-tab-group--top.nano-tab-group--has-scroll-controls-left .nano-tab-group__nav{-webkit-mask-position:0;mask-position:0;-webkit-mask-size:calc(100% + (var(--tabs-padding-end) * 2));mask-size:calc(100% + (var(--tabs-padding-end) * 2))}.nano-tab-group--top.nano-tab-group--has-scroll-controls-right .nano-tab-group__nav{-webkit-mask-position:calc(var(--tabs-padding-end) * -1);mask-position:calc(var(--tabs-padding-end) * -1);-webkit-mask-size:calc(100% + var(--tabs-padding-end));mask-size:calc(100% + var(--tabs-padding-end))}.nano-tab-group--top.nano-tab-group--has-scroll-controls-left.nano-tab-group--has-scroll-controls-right .nano-tab-group__nav{-webkit-mask-size:100%;mask-size:100%;-webkit-mask-position:0;mask-position:0}.nano-tab-group--top .nano-tab-group__tabs{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;text-align:center;color:var(--tab-text-color);width:auto}.nano-tab-group--top .nano-tab-group__active-tab-indicator{bottom:-2px;border-bottom:solid var(--indicator-size) var(--indicator-color)}.nano-tab-group--top .nano-tab-group__body{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2;background:var(--content-bg);position:relative;overflow:hidden;width:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:var(--content-padding);border-radius:var(--content-border-radius);-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.nano-tab-group--start{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.nano-tab-group--start .nano-tab-group__tabs{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;color:var(--tab-text-color);background:rgb(var(--tabs-bg-rgb))}:host(:not([dir=rtl])) .nano-tab-group--start .nano-tab-group__tabs{border-left:solid var(--indicator-size) var(--indicator-track-color);text-align:left}:host([dir=rtl]) .nano-tab-group--start .nano-tab-group__tabs{border-right:solid var(--indicator-size) var(--indicator-track-color);text-align:right}:host(:not([dir=rtl])) .nano-tab-group--start .nano-tab-group__active-tab-indicator{left:calc(-1 * 2px);border-left:solid var(--indicator-size) var(--indicator-color)}:host([dir=rtl]) .nano-tab-group--start .nano-tab-group__active-tab-indicator{right:calc(-1 * 2px);border-right:solid var(--indicator-size) var(--indicator-color)}.nano-tab-group--start .nano-tab-group__body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2;padding:var(--content-padding);overflow:hidden;border-top-left-radius:0;border-top-right-radius:var(--content-border-radius);border-bottom-right-radius:var(--content-border-radius);border-bottom-left-radius:0}.nano-tab-group--start .nano-tab-group__body[dir=rtl]{border-top-left-radius:var(--content-border-radius);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:var(--content-border-radius)}';var f=t("nano_tab_group",function(){function t(t){var o=this;a(this,t);this.nanoTabShow=n(this,"nanoTabShow",7);this.nanoTabHide=n(this,"nanoTabHide",7);this.nanoTabWillClose=n(this,"nanoTabWillClose",7);this.nanoTabClose=n(this,"nanoTabClose",7);this.initialTouchX=null;this.initialTouchY=null;this.mutationObservers=new WeakMap;this.hasScrollControls=false;this.hideControlRight=true;this.hideControlLeft=true;this.isLegacy=!document.head.attachShadow;this.placement="top";this.noScrollControls=false;this.storeMethod="session";this.updateScrollControls=function(){if(o.noScrollControls){o.hasScrollControls=false}else{o.hasScrollControls=["top"].includes(o.placement)&&o.nav.scrollWidth>o.nav.clientWidth&&o.nav.scrollWidth>o.tabs.clientWidth}};this.handleClick=function(t){var a=t.target;var n=a.closest("nano-tab");if(n)o.setActiveTab(n)};this.handleKeyDown=function(t){if(["Enter"," "].includes(t.key)){var a=t.target;var n=a.closest("nano-tab");if(n){o.setActiveTab(n);t.preventDefault()}}if(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(t.key)){var e=document.activeElement;if(e&&e.tagName.toLowerCase()==="nano-tab"){var r=o.getAllActiveTabs;var i=r.indexOf(e);if(t.key==="Home"){i=0}else if(t.key==="End"){i=r.length-1}else if(o.isRtl&&t.key==="ArrowRight"||!o.isRtl&&t.key==="ArrowLeft"){i=Math.max(0,i-1)}else if(o.isRtl&&t.key==="ArrowLeft"||!o.isRtl&&t.key==="ArrowRight"){i=Math.min(r.length-1,i+1)}r[i].setFocus();if(["top"].includes(o.placement)){s(r[i],o.nav,"horizontal","center")}t.preventDefault()}}};this.handleTabScroll=function(){if(!o.hasScrollControls){o.hideControlLeft=o.hideControlRight=true;return}var t=o.isRtl?o.nav.scrollLeft===0:o.nav.scrollWidth-o.nav.scrollLeft===o.nav.clientWidth;var a=o.isRtl?o.nav.scrollWidth+o.nav.scrollLeft===o.nav.clientWidth:o.nav.scrollLeft===0;if(a){o.hideControlLeft=true;o.hideControlRight=false}else if(t){o.hideControlLeft=false;o.hideControlRight=true}else{o.hideControlRight=false;o.hideControlLeft=false}};this.handleBtnClick=function(t){if(t===void 0){t=false}var a=o.getNavWidth();var n;if(t)n=o.nav.scrollLeft+a-20;else n=o.nav.scrollLeft-a+20;try{o.nav.scroll({left:n,behavior:"smooth"})}catch(e){o.nav.scrollLeft=n}};this.handleTouchStart=function(t){if(o.disableSwipe)return;var a=t.changedTouches[0];o.initialTouchX=a.pageX;o.initialTouchY=a.pageY};this.handleTouchEnd=function(t){if(o.disableSwipe)return;var a=t.changedTouches[0];var n=a.pageX-o.initialTouchX;var e=a.pageY-o.initialTouchY;var r=70;var i=o.initialTouchX-a.clientX;var s=o.initialTouchY-a.clientY;var l=Math.abs(n)>=r&&Math.abs(e)<=r;var c=o.getAllActiveTabs;var b=c.findIndex((function(t){return t.active}));if(l){var d=n<0&&o.placement==="top"||n>0&&o.placement!=="top"?1:-1;if(c[b+d]){o.setActiveTab(c[b+d]);if(Math.abs(i)>Math.abs(s)){if(i>0)o.activePanel.setAttribute("animation-dir","left");else o.activePanel.setAttribute("animation-dir","right")}}}o.initialTouchX=null;o.initialTouchY=null};this.handleContentSlotChange=function(){setTimeout((function(){o.setAriaLabels();o.setActiveTab(o.getActiveTab||o.getAllActiveTabs[0],false)}))};this.handleTabSlotChange=function(t){setTimeout((function(){o.setAriaLabels();o.handleTabScroll();o.setActiveTab(o.getActiveTab||o.getAllActiveTabs[0],false);o.updateScrollControls()}),500);var a=t.target.assignedNodes({flatten:true});a.forEach((function(t){if(!o.mutationObservers.get(t)){var a=new MutationObserver((function(){setTimeout((function(){o.syncActiveTabIndicator();o.handleTabScroll();o.updateScrollControls()}),500)}));o.mutationObservers.set(t,a);a.observe(t,{characterData:true,childList:true,subtree:true})}}))}}t.prototype.handleTabNameChange=function(){var t=this;if(this.activeTab&&this.activeTab.panel===this.tab)return;var a=this.getAllActiveTabs.find((function(a){return a.panel===t.tab}));this.setActiveTab(a)};t.prototype.handlePlacementChange=function(){this.syncActiveTabIndicator()};t.prototype.handleNoScrollControlsChange=function(){this.updateScrollControls()};t.prototype.hideRightBtn=function(){if(!this.rightBtn)return;c(this.rightBtn,"is-shown",!this.hideControlRight)};t.prototype.hideLeftBtn=function(){if(!this.leftBtn)return;c(this.leftBtn,"is-shown",!this.hideControlLeft)};t.prototype.watchScrollControls=function(){var t=this;if(this.hasScrollControls)setTimeout((function(a){return t.handleTabScroll()}),20);else setTimeout((function(a){t.hideControlLeft=t.hideControlRight=true}),20)};t.prototype.show=function(t){return __awaiter(this,void 0,void 0,(function(){var a;return __generator(this,(function(n){if(this.activeTab&&this.activeTab.panel===t)return[2];a=this.getAllActiveTabs.find((function(a){return a.panel===t}));if(a)this.setActiveTab(a);return[2]}))}))};Object.defineProperty(t.prototype,"getAllActiveTabs",{get:function(){return this.getAllTabs.filter((function(t){return!t.disabled}))},enumerable:false,configurable:true});Object.defineProperty(t.prototype,"getAllTabs",{get:function(){return u(this.host,"nano-tab")},enumerable:false,configurable:true});Object.defineProperty(t.prototype,"getAllPanels",{get:function(){return u(this.host,"nano-tab-content")},enumerable:false,configurable:true});Object.defineProperty(t.prototype,"getActiveTab",{get:function(){return this.getAllActiveTabs.find((function(t){return t.active}))},enumerable:false,configurable:true});t.prototype.setActiveTab=function(t,a){var n=this;if(a===void 0){a=true}if(t&&t!==this.activeTab&&!t.disabled&&this.getAllActiveTabs.includes(t)){var o=this.activeTab;this.activeTab=t;this.tab=t.panel;this.getAllActiveTabs.map((function(t){return t.active=t===n.activeTab}));this.getAllPanels.map((function(t){if(t.name===n.activeTab.panel){t.active=true;n.activePanel=t}else t.active=false;t.removeAttribute("animation-dir")}));this.syncActiveTabIndicator();if(["top"].includes(this.placement)){s(this.activeTab,this.nav,"horizontal","center")}if(a){if(o){this.nanoTabHide.emit({name:o.panel})}this.nanoTabShow.emit({name:this.activeTab.panel})}}};t.prototype.setAriaLabels=function(){var t=this.getAllActiveTabs;var a=this.getAllPanels;t.map((function(t){var n=a.find((function(a){return a.name===t.panel}));if(n){t.setAttribute("aria-controls",n.getAttribute("id"));n.setAttribute("aria-labelledby",t.getAttribute("id"))}}))};t.prototype.syncActiveTabIndicator=function(){var t=this;var a;this.getAllTabs.forEach((function(a){return a.setAttribute("direction",t.placement==="top"?"horizontal":"vertical")}));var n=this.getActiveTab;var o=((a=n.shadowRoot.querySelector(".nanotab"))===null||a===void 0?void 0:a.clientWidth)||0;var e=n.clientHeight;var r=p(n,this.tabs);var i=r.top+this.nav.scrollTop;var s=r.left;switch(this.placement){case"top":this.activeTabIndicator.style.width=o+"px";this.activeTabIndicator.style.height=null;this.activeTabIndicator.style.transform="translateX("+s+"px)";break;case"start":this.activeTabIndicator.style.width=null;this.activeTabIndicator.style.height=e+"px";this.activeTabIndicator.style.transform="translateY("+i+"px)";break}};t.prototype.getNavWidth=function(){if(!this.nav)return 0;var t=getComputedStyle(this.nav);var a=this.nav.clientWidth;return a-=parseFloat(t.paddingLeft)+parseFloat(t.paddingRight)};t.prototype.handleTabClose=function(t){var a;var n=this.getAllActiveTabs.indexOf(t.target);var o=t.target;if(n<0)return;var e=this.getAllPanels.find((function(t){return t.name===o.panel}));if(!e)return;t.stopImmediatePropagation();var r=this.nanoTabWillClose.emit({name:o.panel});if(r.defaultPrevented)return;if(o.active){n=n===0?1:n-1;var i=(a=this.getAllActiveTabs[n])===null||a===void 0?void 0:a.panel;if(i)this.host.show(i)}o.remove();e.remove();this.nanoTabClose.emit({name:o.panel})};t.prototype.componentDidLoad=function(){var t=this;var a=new IntersectionObserver((function(a,n){if(a[0].intersectionRatio>0){t.setAriaLabels();t.setActiveTab(t.getActiveTab||t.getAllActiveTabs[0],false);if(t.storeId)d.init(t,["tab"],t.storeMethod,t.storeId);n.unobserve(a[0].target)}}));a.observe(this.host);l.observe(this.tabGroup);if(this.leftBtn){l.observe(this.leftBtn);l.observe(this.rightBtn)}this.resizeObserver=new i((function(){setTimeout((function(){t.updateScrollControls();t.syncActiveTabIndicator();s(t.activeTab,t.nav,"horizontal","center")}),500)}));this.resizeObserver.observe(this.nav);b((function(){return t.updateScrollControls()}))};t.prototype.connectedCallback=function(){this.isRtl=this.host.dir==="rtl"||this.host.ownerDocument.dir==="rtl"};t.prototype.disconnectedCallback=function(){l.unobserve(this.tabGroup);if(this.leftBtn){l.unobserve(this.leftBtn);l.unobserve(this.rightBtn)}if(this.resizeObserver)this.resizeObserver.unobserve(this.nav)};t.prototype.render=function(){var t=this;this.isRtl=this.host.ownerDocument.dir==="rtl";return o(e,{class:Object.assign(Object.assign({},h(this.color)),{legacy:this.isLegacy}),dir:this.isRtl?"rtl":null},o("div",{part:"base",ref:function(a){return t.tabGroup=a},class:{"nano-tab-group":true,"nano-tab-group--top":this.placement==="top","nano-tab-group--start":this.placement==="start","nano-tab-group--has-scroll-controls":this.hasScrollControls,"nano-tab-group--has-scroll-controls-left":!this.hideControlLeft,"nano-tab-group--has-scroll-controls-right":!this.hideControlRight},onClick:this.handleClick,onKeyDown:this.handleKeyDown},o("div",{class:"nano-tab-group__nav-container",part:"nav"},this.placement==="top"&&o("button",{class:{"nano-tab-group__scroll-button":true,"nano-tab-group__scroll-button--left":true},ref:function(a){return t.leftBtn=a},onClick:function(){return t.handleBtnClick(false)}},o("nano-icon",{name:"light/chevron-left"})),o("div",{ref:function(a){return t.nav=a},class:"nano-tab-group__nav",onScroll:this.handleTabScroll},o("div",{ref:function(a){return t.tabs=a},part:"tabs",class:"nano-tab-group__tabs",role:"tablist"},o("div",{ref:function(a){return t.activeTabIndicator=a},part:"active-tab-indicator",class:"nano-tab-group__active-tab-indicator"}),o("slot",{name:"tabs",onSlotchange:this.handleTabSlotChange}))),this.placement==="top"&&o("button",{class:{"nano-tab-group__scroll-button":true,"nano-tab-group__scroll-button--right":true},ref:function(a){return t.rightBtn=a},onClick:function(){return t.handleBtnClick(true)}},o("nano-icon",{name:"light/chevron-right"}))),o("slot",{name:"tab-content-header"}),o("div",{part:"body",class:"nano-tab-group__body",onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd},o("slot",{onSlotchange:this.handleContentSlotChange}))))};Object.defineProperty(t.prototype,"host",{get:function(){return r(this)},enumerable:false,configurable:true});Object.defineProperty(t,"watchers",{get:function(){return{tab:["handleTabNameChange"],placement:["handlePlacementChange"],noScrollControls:["handleNoScrollControlsChange"],hideControlRight:["hideRightBtn"],hideControlLeft:["hideLeftBtn"],hasScrollControls:["watchScrollControls"]}},enumerable:false,configurable:true});return t}());f.style=g}}}));
|
5
|
-
//# sourceMappingURL=p-3f736fa2.system.entry.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["src/components/tabs/tab-group.scss?tag=nano-tab-group&encapsulation=shadow","src/components/tabs/tab-group.tsx"],"names":["tabGroupCss","TabGroup","exports","class_1","hostRef","_this","this","initialTouchX","initialTouchY","mutationObservers","WeakMap","hasScrollControls","hideControlRight","hideControlLeft","isLegacy","document","head","attachShadow","placement","noScrollControls","storeMethod","updateScrollControls","includes","nav","scrollWidth","clientWidth","tabs","handleClick","event","target","tab","closest","setActiveTab","handleKeyDown","key","preventDefault","activeEl","activeElement","tagName","toLowerCase","getAllActiveTabs","index_1","indexOf","length","isRtl","Math","max","min","setFocus","scrollIntoView","handleTabScroll","endRight","scrollLeft","endLeft","handleBtnClick","goRight","navWidth","getNavWidth","leftAmt","scroll","left","behavior","e","handleTouchStart","disableSwipe","touch","changedTouches","pageX","pageY","handleTouchEnd","distX","distY","threshold","xDiff","clientX","yDiff","clientY","isHorizontalSwipe","abs","currIndex","findIndex","el","active","toGo","activePanel","setAttribute","handleContentSlotChange","setTimeout","setAriaLabels","getActiveTab","handleTabSlotChange","ev","nodes","assignedNodes","flatten","forEach","node","get","mo","MutationObserver","syncActiveTabIndicator","set","observe","characterData","childList","subtree","prototype","handleTabNameChange","activeTab","panel","find","handlePlacementChange","handleNoScrollControlsChange","hideRightBtn","rightBtn","displayTransition","hideLeftBtn","leftBtn","watchScrollControls","_","show","Object","defineProperty","getAllTabs","filter","disabled","getDirectChildren","host","emitEvents","previousTab","map","getAllPanels","name","removeAttribute","nanoTabHide","emit","nanoTabShow","panels","getAttribute","width","_a","shadowRoot","querySelector","height","clientHeight","offset","getOffset","offsetTop","top","scrollTop","offsetLeft","activeTabIndicator","style","transform","computedStyle","getComputedStyle","parseFloat","paddingLeft","paddingRight","handleTabClose","tabIndex","stopImmediatePropagation","closeEv","nanoTabWillClose","defaultPrevented","prevTab","remove","nanoTabClose","componentDidLoad","observer","IntersectionObserver","entries","intersectionRatio","storeId","ComponentStore","init","unobserve","focusVisible","tabGroup","resizeObserver","ResizeObserver","raf","connectedCallback","dir","ownerDocument","disconnectedCallback","render","h","Host","class","assign","createColorClasses","color","legacy","part","ref","nano-tab-group","nano-tab-group--top","nano-tab-group--start","nano-tab-group--has-scroll-controls","nano-tab-group--has-scroll-controls-left","nano-tab-group--has-scroll-controls-right","onClick","onKeyDown","nano-tab-group__scroll-button","nano-tab-group__scroll-button--left","btn","onScroll","role","onSlotchange","nano-tab-group__scroll-button--right","onTouchStart","onTouchEnd"],"mappings":";;;mkBAAA,IAAMA,EAAc,k5TCsDPC,EAAQC,EAAA,iBAAA,WALrB,SAAAC,EAAAC,GAAA,IAAAC,EAAAC,+LAgBUA,KAAAC,cAAwB,KACxBD,KAAAE,cAAwB,KAGxBF,KAAAG,kBAAqD,IAAIC,QAIxDJ,KAAAK,kBAAoB,MACpBL,KAAAM,iBAAmB,KACnBN,KAAAO,gBAAkB,KAClBP,KAAAQ,UAAYC,SAASC,KAAKC,aAM3BX,KAAAY,UAA6B,MAK7BZ,KAAAa,iBAAmB,MAiBnBb,KAAAc,YAA8B,UAwF9Bd,KAAAe,qBAAuB,WAC7B,GAAIhB,EAAKc,iBAAkB,CACzBd,EAAKM,kBAAoB,UACpB,CACLN,EAAKM,kBACH,CAAC,OAAOW,SAASjB,EAAKa,YACtBb,EAAKkB,IAAIC,YAAcnB,EAAKkB,IAAIE,aAChCpB,EAAKkB,IAAIC,YAAcnB,EAAKqB,KAAKD,cA0H/BnB,KAAAqB,YAAc,SAACC,GACrB,IAAMC,EAASD,EAAMC,OACrB,IAAMC,EAAMD,EAAOE,QAAQ,YAE3B,GAAID,EAAKzB,EAAK2B,aAAaF,IAGrBxB,KAAA2B,cAAgB,SAACL,GAEvB,GAAI,CAAC,QAAS,KAAKN,SAASM,EAAMM,KAAM,CACtC,IAAML,EAASD,EAAMC,OACrB,IAAMC,EAAMD,EAAOE,QAAQ,YAE3B,GAAID,EAAK,CACPzB,EAAK2B,aAAaF,GAClBF,EAAMO,kBAKV,GACE,CACE,YACA,aACA,UACA,YACA,OACA,OACAb,SAASM,EAAMM,KACjB,CACA,IAAME,EAAWrB,SAASsB,cAE1B,GAAID,GAAYA,EAASE,QAAQC,gBAAkB,WAAY,CAC7D,IAAMb,EAAOrB,EAAKmC,iBAClB,IAAIC,EAAQf,EAAKgB,QAAQN,GAEzB,GAAIR,EAAMM,MAAQ,OAAQ,CACxBO,EAAQ,OACH,GAAIb,EAAMM,MAAQ,MAAO,CAC9BO,EAAQf,EAAKiB,OAAS,OACjB,GACJtC,EAAKuC,OAAShB,EAAMM,MAAQ,eAC3B7B,EAAKuC,OAAShB,EAAMM,MAAQ,YAC9B,CACAO,EAAQI,KAAKC,IAAI,EAAGL,EAAQ,QACvB,GACJpC,EAAKuC,OAAShB,EAAMM,MAAQ,cAC3B7B,EAAKuC,OAAShB,EAAMM,MAAQ,aAC9B,CACAO,EAAQI,KAAKE,IAAIrB,EAAKiB,OAAS,EAAGF,EAAQ,GAE5Cf,EAAKe,GAAOO,WAEZ,GAAI,CAAC,OAAO1B,SAASjB,EAAKa,WAAY,CACpC+B,EAAevB,EAAKe,GAAQpC,EAAKkB,IAAK,aAAc,UAEtDK,EAAMO,oBAKJ7B,KAAA4C,gBAAkB,WACxB,IAAK7C,EAAKM,kBAAmB,CAC3BN,EAAKQ,gBAAkBR,EAAKO,iBAAmB,KAC/C,OAEF,IAAIuC,EAAW9C,EAAKuC,MAChBvC,EAAKkB,IAAI6B,aAAe,EACxB/C,EAAKkB,IAAIC,YAAcnB,EAAKkB,IAAI6B,aAAe/C,EAAKkB,IAAIE,YAC5D,IAAI4B,EAAUhD,EAAKuC,MACfvC,EAAKkB,IAAIC,YAAcnB,EAAKkB,IAAI6B,aAAe/C,EAAKkB,IAAIE,YACxDpB,EAAKkB,IAAI6B,aAAe,EAE5B,GAAIC,EAAS,CACXhD,EAAKQ,gBAAkB,KACvBR,EAAKO,iBAAmB,WACnB,GAAIuC,EAAU,CACnB9C,EAAKQ,gBAAkB,MACvBR,EAAKO,iBAAmB,SACnB,CACLP,EAAKO,iBAAmB,MACxBP,EAAKQ,gBAAkB,QAInBP,KAAAgD,eAAiB,SAACC,GAAA,GAAAA,SAAA,EAAA,CAAAA,EAAA,MACxB,IAAMC,EAAWnD,EAAKoD,cACtB,IAAIC,EACJ,GAAIH,EAASG,EAAUrD,EAAKkB,IAAI6B,WAAaI,EAAW,QACnDE,EAAUrD,EAAKkB,IAAI6B,WAAaI,EAAW,GAEhD,IACEnD,EAAKkB,IAAIoC,OAAO,CACdC,KAAMF,EACNG,SAAU,WAEZ,MAAOC,GACPzD,EAAKkB,IAAI6B,WAAaM,IAIlBpD,KAAAyD,iBAAmB,SAACnC,GAC1B,GAAIvB,EAAK2D,aAAc,OACvB,IAAMC,EAAQrC,EAAMsC,eAAe,GACnC7D,EAAKE,cAAgB0D,EAAME,MAC3B9D,EAAKG,cAAgByD,EAAMG,OAGrB9D,KAAA+D,eAAiB,SAACzC,GACxB,GAAIvB,EAAK2D,aAAc,OACvB,IAAMC,EAAQrC,EAAMsC,eAAe,GACnC,IAAMI,EAAQL,EAAME,MAAQ9D,EAAKE,cACjC,IAAMgE,EAAQN,EAAMG,MAAQ/D,EAAKG,cACjC,IAAMgE,EAAY,GAElB,IAAIC,EAAQpE,EAAKE,cAAgB0D,EAAMS,QACvC,IAAIC,EAAQtE,EAAKG,cAAgByD,EAAMW,QAEvC,IAAMC,EACJhC,KAAKiC,IAAIR,IAAUE,GAAa3B,KAAKiC,IAAIP,IAAUC,EAErD,IAAM9C,EAAOrB,EAAKmC,iBAClB,IAAMuC,EAAYrD,EAAKsD,WAAU,SAACC,GAAO,OAAAA,EAAGC,UAE5C,GAAIL,EAAmB,CACrB,IAAMM,EACHb,EAAQ,GAAKjE,EAAKa,YAAc,OAChCoD,EAAQ,GAAKjE,EAAKa,YAAc,MAC7B,GACC,EAEP,GAAIQ,EAAKqD,EAAYI,GAAO,CAC1B9E,EAAK2B,aAAaN,EAAKqD,EAAYI,IAEnC,GAAItC,KAAKiC,IAAIL,GAAS5B,KAAKiC,IAAIH,GAAQ,CACrC,GAAIF,EAAQ,EAAGpE,EAAK+E,YAAYC,aAAa,gBAAiB,aACzDhF,EAAK+E,YAAYC,aAAa,gBAAiB,WAI1DhF,EAAKE,cAAgB,KACrBF,EAAKG,cAAgB,MAGfF,KAAAgF,wBAA0B,WAChCC,YAAW,WACTlF,EAAKmF,gBACLnF,EAAK2B,aAAa3B,EAAKoF,cAAgBpF,EAAKmC,iBAAiB,GAAI,WAI7DlC,KAAAoF,oBAAsB,SAACC,GAC7BJ,YAAW,WACTlF,EAAKmF,gBACLnF,EAAK6C,kBACL7C,EAAK2B,aAAa3B,EAAKoF,cAAgBpF,EAAKmC,iBAAiB,GAAI,OACjEnC,EAAKgB,yBACJ,KAGH,IAAMuE,EAAQD,EAAG9D,OAAOgE,cAAc,CAAEC,QAAS,OACjDF,EAAMG,SAAQ,SAACC,GACb,IAAK3F,EAAKI,kBAAkBwF,IAAID,GAAO,CACrC,IAAME,EAAK,IAAIC,kBAAiB,WAC9BZ,YAAW,WACTlF,EAAK+F,yBACL/F,EAAK6C,kBACL7C,EAAKgB,yBACJ,QAELhB,EAAKI,kBAAkB4F,IAAIL,EAAME,GAEjCA,EAAGI,QAAQN,EAAM,CACfO,cAAe,KACfC,UAAW,KACXC,QAAS,YAhYjBtG,EAAAuG,UAAAC,oBAAA,WAAA,IAAAtG,EAAAC,KACE,GAAIA,KAAKsG,WAAatG,KAAKsG,UAAUC,QAAUvG,KAAKwB,IAAK,OACzD,IAAMA,EAAMxB,KAAKkC,iBAAiBsE,MAAK,SAAC7B,GAAO,OAAAA,EAAG4B,QAAUxG,EAAKyB,OACjExB,KAAK0B,aAAaF,IAIpB3B,EAAAuG,UAAAK,sBAAA,WACEzG,KAAK8F,0BAIPjG,EAAAuG,UAAAM,6BAAA,WACE1G,KAAKe,wBAIPlB,EAAAuG,UAAAO,aAAA,WACE,IAAK3G,KAAK4G,SAAU,OACpBC,EAAkB7G,KAAK4G,SAAU,YAAa5G,KAAKM,mBAIrDT,EAAAuG,UAAAU,YAAA,WACE,IAAK9G,KAAK+G,QAAS,OACnBF,EAAkB7G,KAAK+G,QAAS,YAAa/G,KAAKO,kBAIpDV,EAAAuG,UAAAY,oBAAA,WAAA,IAAAjH,EAAAC,KACE,GAAIA,KAAKK,kBAAmB4E,YAAW,SAACgC,GAAM,OAAAlH,EAAK6C,oBAAmB,SAEpEqC,YAAW,SAACgC,GACVlH,EAAKQ,gBAAkBR,EAAKO,iBAAmB,OAC9C,KAiBDT,EAAAuG,UAAAc,KAAN,SAAWX,8FACT,GAAIvG,KAAKsG,WAAatG,KAAKsG,UAAUC,QAAUA,EAAO,MAAA,CAAA,GAEhD/E,EAAMxB,KAAKkC,iBAAiBsE,MAAK,SAAC7B,GAAO,OAAAA,EAAG4B,QAAUA,KAE5D,GAAI/E,EAAKxB,KAAK0B,aAAaF,oBAK7B2F,OAAAC,eAAIvH,EAAAuG,UAAA,mBAAgB,KAApB,WACE,OAAOpG,KAAKqH,WAAWC,QAAO,SAAC3C,GAAY,OAACA,EAAG4C,kDAGjDJ,OAAAC,eAAIvH,EAAAuG,UAAA,aAAU,KAAd,WACE,OAAOoB,EAAsCxH,KAAKyH,KAAM,kDAG1DN,OAAAC,eAAIvH,EAAAuG,UAAA,eAAY,KAAhB,WACE,OAAOoB,EACLxH,KAAKyH,KACL,0DAIJN,OAAAC,eAAIvH,EAAAuG,UAAA,eAAY,KAAhB,WACE,OAAOpG,KAAKkC,iBAAiBsE,MAAK,SAAC7B,GAAO,OAAAA,EAAGC,gDAcvC/E,EAAAuG,UAAA1E,aAAA,SAAaF,EAAyBkG,GAAtC,IAAA3H,EAAAC,KAAsC,GAAA0H,SAAA,EAAA,CAAAA,EAAA,KAC5C,GACElG,GACAA,IAAQxB,KAAKsG,YACZ9E,EAAI+F,UACLvH,KAAKkC,iBAAiBlB,SAASQ,GAC/B,CACA,IAAMmG,EAAc3H,KAAKsG,UACzBtG,KAAKsG,UAAY9E,EACjBxB,KAAKwB,IAAMA,EAAI+E,MAGfvG,KAAKkC,iBAAiB0F,KAAI,SAACjD,GAAE,OAAMA,EAAGC,OAASD,IAAO5E,EAAKuG,aAC3DtG,KAAK6H,aAAaD,KAAI,SAACjD,GACrB,GAAIA,EAAGmD,OAAS/H,EAAKuG,UAAUC,MAAO,CACpC5B,EAAGC,OAAS,KACZ7E,EAAK+E,YAAcH,OACdA,EAAGC,OAAS,MACnBD,EAAGoD,gBAAgB,oBAGrB/H,KAAK8F,yBACL,GAAI,CAAC,OAAO9E,SAAShB,KAAKY,WAAY,CACpC+B,EAAe3C,KAAKsG,UAAWtG,KAAKiB,IAAK,aAAc,UAIzD,GAAIyG,EAAY,CACd,GAAIC,EAAa,CACf3H,KAAKgI,YAAYC,KAAK,CAAEH,KAAMH,EAAYpB,QAG5CvG,KAAKkI,YAAYD,KAAK,CAAEH,KAAM9H,KAAKsG,UAAUC,WAK3C1G,EAAAuG,UAAAlB,cAAA,WACN,IAAM9D,EAAOpB,KAAKkC,iBAClB,IAAMiG,EAASnI,KAAK6H,aAGpBzG,EAAKwG,KAAI,SAACpG,GACR,IAAM+E,EAAQ4B,EAAO3B,MAAK,SAAC7B,GAAO,OAAAA,EAAGmD,OAAStG,EAAI+E,SAClD,GAAIA,EAAO,CACT/E,EAAIuD,aAAa,gBAAiBwB,EAAM6B,aAAa,OACrD7B,EAAMxB,aAAa,kBAAmBvD,EAAI4G,aAAa,YAKrDvI,EAAAuG,UAAAN,uBAAA,WAAA,IAAA/F,EAAAC,WACNA,KAAKqH,WAAW5B,SAAQ,SAACjE,GACvB,OAAAA,EAAIuD,aACF,YACAhF,EAAKa,YAAc,MAAQ,aAAe,eAI9C,IAAMY,EAAMxB,KAAKmF,aACjB,IAAMkD,IAAQC,EAAA9G,EAAI+G,WAAWC,cAAc,eAAW,MAAAF,SAAA,OAAA,EAAAA,EAAEnH,cAAe,EACvE,IAAMsH,EAASjH,EAAIkH,aACnB,IAAMC,EAASC,EAAUpH,EAAKxB,KAAKoB,MACnC,IAAMyH,EAAYF,EAAOG,IAAM9I,KAAKiB,IAAI8H,UACxC,IAAMC,EAAaL,EAAOrF,KAE1B,OAAQtD,KAAKY,WACX,IAAK,MACHZ,KAAKiJ,mBAAmBC,MAAMb,MAAWA,EAAK,KAC9CrI,KAAKiJ,mBAAmBC,MAAMT,OAAS,KACvCzI,KAAKiJ,mBAAmBC,MAAMC,UAAY,cAAcH,EAAU,MAClE,MAEF,IAAK,QACHhJ,KAAKiJ,mBAAmBC,MAAMb,MAAQ,KACtCrI,KAAKiJ,mBAAmBC,MAAMT,OAAYA,EAAM,KAChDzI,KAAKiJ,mBAAmBC,MAAMC,UAAY,cAAcN,EAAS,MACjE,QAIEhJ,EAAAuG,UAAAjD,YAAA,WACN,IAAKnD,KAAKiB,IAAK,OAAO,EACtB,IAAMmI,EAAgBC,iBAAiBrJ,KAAKiB,KAC5C,IAAIE,EAAcnB,KAAKiB,IAAIE,YAC3B,OAAQA,GACNmI,WAAWF,EAAcG,aACzBD,WAAWF,EAAcI,eAM7B3J,EAAAuG,UAAAqD,eAAA,SAAepE,SACb,IAAIqE,EAAW1J,KAAKkC,iBAAiBE,QAAQiD,EAAG9D,QAChD,IAAMC,EAAM6D,EAAG9D,OACf,GAAImI,EAAW,EAAG,OAElB,IAAMnD,EAAQvG,KAAK6H,aAAarB,MAAK,SAAC7B,GAAO,OAAAA,EAAGmD,OAAStG,EAAI+E,SAC7D,IAAKA,EAAO,OAEZlB,EAAGsE,2BAEH,IAAMC,EAAU5J,KAAK6J,iBAAiB5B,KAAK,CAAEH,KAAMtG,EAAI+E,QACvD,GAAIqD,EAAQE,iBAAkB,OAG9B,GAAItI,EAAIoD,OAAQ,CACd8E,EAAWA,IAAa,EAAI,EAAIA,EAAW,EAC3C,IAAMK,GAAUzB,EAAAtI,KAAKkC,iBAAiBwH,MAAS,MAAApB,SAAA,OAAA,EAAAA,EAAE/B,MACjD,GAAIwD,EAAS/J,KAAKyH,KAAKP,KAAK6C,GAG9BvI,EAAIwI,SACJzD,EAAMyD,SACNhK,KAAKiK,aAAahC,KAAK,CAAEH,KAAMtG,EAAI+E,SA0LrC1G,EAAAuG,UAAA8D,iBAAA,WAAA,IAAAnK,EAAAC,KAEE,IAAMmK,EAAW,IAAIC,sBAAqB,SAACC,EAASF,GAClD,GAAIE,EAAQ,GAAGC,kBAAoB,EAAG,CACpCvK,EAAKmF,gBACLnF,EAAK2B,aAAa3B,EAAKoF,cAAgBpF,EAAKmC,iBAAiB,GAAI,OAEjE,GAAInC,EAAKwK,QACPC,EAAeC,KAAK1K,EAAM,CAAC,OAAQA,EAAKe,YAAaf,EAAKwK,SAC5DJ,EAASO,UAAUL,EAAQ,GAAG9I,YAGlC4I,EAASnE,QAAQhG,KAAKyH,MACtBkD,EAAa3E,QAAQhG,KAAK4K,UAE1B,GAAI5K,KAAK+G,QAAS,CAChB4D,EAAa3E,QAAQhG,KAAK+G,SAC1B4D,EAAa3E,QAAQhG,KAAK4G,UAG5B5G,KAAK6K,eAAiB,IAAIC,GAAe,WACvC7F,YAAW,WACTlF,EAAKgB,uBACLhB,EAAK+F,yBACLnD,EAAe5C,EAAKuG,UAAWvG,EAAKkB,IAAK,aAAc,YACtD,QAELjB,KAAK6K,eAAe7E,QAAQhG,KAAKiB,KAEjC8J,GAAI,WAAM,OAAAhL,EAAKgB,2BAGjBlB,EAAAuG,UAAA4E,kBAAA,WACEhL,KAAKsC,MACHtC,KAAKyH,KAAKwD,MAAQ,OACjBjL,KAAKyH,KAAKyD,cAA2BD,MAAQ,OAGlDpL,EAAAuG,UAAA+E,qBAAA,WACER,EAAaD,UAAU1K,KAAK4K,UAC5B,GAAI5K,KAAK+G,QAAS,CAChB4D,EAAaD,UAAU1K,KAAK+G,SAC5B4D,EAAaD,UAAU1K,KAAK4G,UAE9B,GAAI5G,KAAK6K,eAAgB7K,KAAK6K,eAAeH,UAAU1K,KAAKiB,MAG9DpB,EAAAuG,UAAAgF,OAAA,WAAA,IAAArL,EAAAC,KACEA,KAAKsC,MAAStC,KAAKyH,KAAKyD,cAA2BD,MAAQ,MAE3D,OACEI,EAACC,EAAI,CACHC,MAAKpE,OAAAqE,OAAArE,OAAAqE,OAAA,GAAOC,EAAmBzL,KAAK0L,QAAM,CAAEC,OAAQ3L,KAAKQ,WACzDyK,IAAKjL,KAAKsC,MAAQ,MAAQ,MAE1B+I,EAAA,MAAA,CACEO,KAAK,OACLC,IAAK,SAAClH,GAAE,OAAM5E,EAAK6K,SAAWjG,GAC9B4G,MAAO,CACLO,iBAAkB,KAClBC,sBAAuB/L,KAAKY,YAAc,MAC1CoL,wBAAyBhM,KAAKY,YAAc,QAC5CqL,sCAAuCjM,KAAKK,kBAC5C6L,4CAA6ClM,KAAKO,gBAClD4L,6CAA8CnM,KAAKM,kBAErD8L,QAASpM,KAAKqB,YACdgL,UAAWrM,KAAK2B,eAEhB0J,EAAA,MAAA,CAAKE,MAAM,gCAAgCK,KAAK,OAC7C5L,KAAKY,YAAc,OAClByK,EAAA,SAAA,CACEE,MAAO,CACLe,gCAAiC,KACjCC,sCAAuC,MAEzCV,IAAK,SAACW,GAAG,OAAMzM,EAAKgH,QAAUyF,GAC9BJ,QAAS,WAAM,OAAArM,EAAKiD,eAAe,SAEnCqI,EAAA,YAAA,CAAWvD,KAAK,wBAGpBuD,EAAA,MAAA,CACEQ,IAAK,SAAClH,GAAE,OAAM5E,EAAKkB,IAAM0D,GACzB4G,MAAM,sBACNkB,SAAUzM,KAAK4C,iBAEfyI,EAAA,MAAA,CACEQ,IAAK,SAAClH,GAAE,OAAM5E,EAAKqB,KAAOuD,GAC1BiH,KAAK,OACLL,MAAM,uBACNmB,KAAK,WAELrB,EAAA,MAAA,CACEQ,IAAK,SAAClH,GAAE,OAAM5E,EAAKkJ,mBAAqBtE,GACxCiH,KAAK,uBACLL,MAAM,yCAERF,EAAA,OAAA,CAAMvD,KAAK,OAAO6E,aAAc3M,KAAKoF,wBAGxCpF,KAAKY,YAAc,OAClByK,EAAA,SAAA,CACEE,MAAO,CACLe,gCAAiC,KACjCM,uCAAwC,MAE1Cf,IAAK,SAACW,GAAG,OAAMzM,EAAK6G,SAAW4F,GAC/BJ,QAAS,WAAM,OAAArM,EAAKiD,eAAe,QAEnCqI,EAAA,YAAA,CAAWvD,KAAK,0BAItBuD,EAAA,OAAA,CAAMvD,KAAK,uBACXuD,EAAA,MAAA,CACEO,KAAK,OACLL,MAAM,uBACNsB,aAAc7M,KAAKyD,iBACnBqJ,WAAY9M,KAAK+D,gBAEjBsH,EAAA,OAAA,CAAMsB,aAAc3M,KAAKgF,odA3jBhB","sourcesContent":["@use 'sass:map';\n@use 'sass:list';\n\n@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/form';\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/layers';\n\n/**\n * @prop --indicator-transition: Only relevant to placement 'start'. defaults to #{$transition-fast};\n * @prop --indicator-color: defaults to #{map.get($colors, lightblue)} on placement 'top' and #{map.get($colors, blue)} on placement 'start';\n * @prop --indicator-track-color: Only relevant to placement 'start'. defaults to #{map.get($colors, lightgrey)};\n * @prop --indicator-size: defaults to 5px on placement 'top' and 2px on placement 'start';\n\n * @prop --border-radius: defaults to #{$layer-border-radius};\n * @prop --background-rgb: will be used as the default background colour for tabs and content. defaults to #{$layer-bg-color-rgb};\n * @prop --shadow-opacity: opacity of the shadow behind tabs. defaults to 0.1;\n * @prop --scroll-btn-color: defaults to 'currentColor';\n\n * @prop --content-padding: defaults to 2rem 2.5rem;\n * @prop --content-bg: defaults to rgb(var(--background-rgb));\n * @prop --content-border-radius: defaults to var(--border-radius);\n\n * @prop --tabs-padding-start: defaults to 2.5rem on placement 'top' and 0 on placement 'start';\n * @prop --tabs-padding-end: defaults to 2.5rem on placement 'top' and 0 on placement 'start';\n * @prop --tabs-padding-top: defaults to 0;\n * @prop --tabs-padding-bottom: defaults to 0;\n * @prop --tabs-bg-rgb: defaults to var(--bg-color);\n * @prop --tab-border-radius: defaults to var(--border-radius);\n * @prop --tab-text-color: defaults to #{map.get($colors, blue)} on placement 'top' and #{map.get($colors, darkgrey)} on placement 'start';\n */\n\n:host {\n --indicator-transition: #{$transition-fast};\n --indicator-color: #{map.get($colors, lightblue)};\n --indicator-track-color: #{map.get($colors, lightgrey)};\n --indicator-size: 0;\n --border-radius: #{$layer-border-radius};\n --background-rgb: #{$layer-bg-color-rgb};\n --scroll-btn-color: 'currentColor';\n --content-padding: 2rem 2.5rem;\n --content-bg: rgb(var(--background-rgb));\n --content-border-radius: var(--border-radius);\n --tabs-padding-start: 2.5rem;\n --tabs-padding-end: 2.5rem;\n --tabs-padding-top: 0;\n --tabs-padding-bottom: 0;\n --tabs-container-bg: 'transparent';\n --tabs-bg-rgb: var(--background-rgb);\n --tab-border-radius: var(--border-radius);\n --tab-text-color: #{map.get($colors, blue)};\n --shadow-opacity: 0.1;\n\n display: block;\n position: relative;\n z-index: #{$layer-index-raised};\n\n @media only screen and (max-width: 768px) {\n --tabs-padding-start: 1.5rem;\n --tabs-padding-end: 1.5rem;\n }\n\n ::slotted(nano-tab) {\n --tab-indicator-color: var(--indicator-color);\n --bg-rgb: var(--tabs-bg-rgb);\n --border-radius: var(--tab-border-radius);\n }\n}\n\n// IE bugfix - set this stuff statically\n:host(.legacy) {\n ::slotted(nano-tab) {\n --tab-indicator-color: #{map.get($colors, lightblue)};\n --border-radius: 3px;\n --tab-indicator-size: 5px;\n --bg-rgb: 255, 255, 255;\n }\n}\n\n:host([placement='start']),\n:host([placement='end']) {\n --content-padding: 1rem;\n --tabs-padding-start: 0;\n --tabs-padding-end: 0;\n --tabs-padding-top: 0;\n --tabs-padding-bottom: 0;\n --tab-text-color: #{map.get($colors, darkgrey)};\n --indicator-color: #{map.get($colors, blue)};\n --indicator-size: 2px;\n}\n\n:host(.nano-color) {\n --indicator-color: var(--nano-color-tint, #{nano-color(primary, tint)});\n --tab-text-color: rgba(var(--nano-color-base-rgb), 0.7);\n\n ::slotted(nano-tab) {\n --active-text-color: var(--nano-color-shade, #{nano-color(primary, shade)});\n }\n}\n\n.nano-tab-group {\n display: flex;\n border-radius: 0;\n width: 100%;\n flex: inherit;\n\n &__tabs {\n display: flex;\n position: relative;\n width: 100%;\n }\n\n &__active-tab-indicator {\n position: absolute;\n transition: var(--indicator-transition) transform ease, var(--indicator-transition) width ease;\n }\n\n &__body {\n background: var(--content-bg);\n }\n\n &:not(.focus-visible) ::slotted(nano-tab) {\n --focus-shadow: none;\n }\n\n .nano-tab-group__nav-container {\n position: relative;\n display: flex;\n background: var(--tabs-container-bg);\n }\n\n button {\n appearance: none;\n background-color: transparent;\n }\n\n &__scroll-button {\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: 0;\n bottom: 0;\n border: unset;\n z-index: 2;\n transition: #{$transition-fast} ease opacity;\n opacity: 0;\n color: var(--scroll-btn-color);\n\n &:focus {\n outline: none;\n }\n\n &.is-shown {\n opacity: 1;\n }\n\n &.focus-visible:focus {\n box-shadow: #{$control-focus-style} inset;\n }\n\n &--left {\n left: 0;\n }\n\n &--right {\n right: 0;\n }\n\n nano-icon {\n font-size: 16px;\n }\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n // Top\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n &--top {\n flex-direction: column;\n\n .nano-tab-group__nav-container {\n &::after {\n content: '';\n width: 86%;\n box-shadow: 0 10px 40px 10px rgba(0, 0, 0, var(--shadow-opacity));\n height: 10px;\n position: absolute;\n left: 7%;\n bottom: -10px;\n border-radius: 10px;\n z-index: -1;\n }\n }\n\n .nano-tab-group__nav {\n @include hide-scrollbar();\n @include padding(\n var(--tabs-padding-top),\n var(--tabs-padding-end),\n var(--tabs-padding-bottom),\n var(--tabs-padding-start)\n );\n\n display: flex;\n overflow-x: auto;\n overflow-y: hidden;\n transition: #{$transition-medium} ease;\n background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=);\n mask-repeat: no-repeat;\n mask-image:\n linear-gradient(\n to left,\n rgba(0, 0, 0, 0) 0,\n rgba(0, 0, 0, 0) var(--tabs-padding-start),\n rgba(0, 0, 0, 1) calc(var(--tabs-padding-start) * 2),\n rgba(0, 0, 0, 1) calc(100% - (var(--tabs-padding-end) * 2)),\n rgba(0, 0, 0, 0) calc(100% - var(--tabs-padding-end)),\n rgba(0, 0, 0, 0)\n );\n mask-size: calc(100% + calc(var(--tabs-padding-end) * 4));\n mask-position: calc(var(--tabs-padding-end) * -2);\n\n &::after {\n content: ' ';\n\n @include padding(\n var(--tabs-padding-top),\n var(--tabs-padding-end),\n var(--tabs-padding-bottom),\n 0\n );\n\n line-height: 1;\n flex: 0 0 auto;\n }\n }\n\n &.nano-tab-group--has-scroll-controls-left {\n .nano-tab-group__nav {\n mask-position: 0;\n mask-size: calc(100% + (var(--tabs-padding-end) * 2));\n }\n }\n\n &.nano-tab-group--has-scroll-controls-right {\n .nano-tab-group__nav {\n mask-position: calc(var(--tabs-padding-end) * -1);\n mask-size: calc(100% + var(--tabs-padding-end));\n }\n }\n\n &.nano-tab-group--has-scroll-controls-left.nano-tab-group--has-scroll-controls-right {\n .nano-tab-group__nav {\n mask-size: 100%;\n mask-position: 0;\n }\n }\n\n .nano-tab-group__tabs {\n flex: 1 1 auto;\n position: relative;\n flex-direction: row;\n text-align: center;\n color: var(--tab-text-color);\n width: auto;\n }\n\n .nano-tab-group__active-tab-indicator {\n bottom: -2px;\n border-bottom: solid var(--indicator-size) var(--indicator-color);\n }\n\n .nano-tab-group__body {\n order: 2;\n background: var(--content-bg);\n position: relative;\n overflow: hidden;\n width: auto;\n display: flex;\n justify-content: center;\n padding: var(--content-padding);\n border-radius: var(--content-border-radius);\n flex: 1 1 auto;\n }\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n // Start\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n &--start {\n flex-direction: row;\n\n .nano-tab-group__tabs {\n flex: 0 0 auto;\n flex-direction: column;\n color: var(--tab-text-color);\n background: rgb(var(--tabs-bg-rgb));\n\n @include ltr-host() {\n border-left: solid var(--indicator-size) var(--indicator-track-color);\n text-align: left;\n }\n\n @include rtl-host() {\n border-right: solid var(--indicator-size) var(--indicator-track-color);\n text-align: right;\n }\n }\n\n .nano-tab-group__active-tab-indicator {\n @include ltr-host() {\n left: calc(-1 * 2px);\n border-left: solid var(--indicator-size) var(--indicator-color);\n }\n\n @include rtl-host() {\n right: calc(-1 * 2px);\n border-right: solid var(--indicator-size) var(--indicator-color);\n }\n }\n\n .nano-tab-group__body {\n flex: 1 1 auto;\n order: 2;\n padding: var(--content-padding);\n overflow: hidden;\n\n @include border-radius(\n 0,\n var(--content-border-radius),\n var(--content-border-radius),\n 0\n );\n }\n }\n}\n","import {\n Component,\n Element,\n ComponentInterface,\n Event,\n EventEmitter,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n Listen,\n} from '@stencil/core';\nimport ResizeObserver from 'resize-observer-polyfill';\n\nimport { scrollIntoView } from '../../utils/scroll';\nimport { focusVisible } from '../../utils/focus-visible';\nimport {\n displayTransition,\n createColorClasses,\n getOffset,\n getDirectChildren,\n raf,\n} from '../../utils';\nimport { Color } from '../../interface';\nimport {\n ComponentStore,\n StorageMethods,\n} from '../../utils/store/component-store';\n\n/**\n * A tradtional tab implementation. It nests `nano-tab` and `nano-tab-content` sub-components.\n *\n * Tabs can be stacked vertically or horizontally (which presents different styling variations) using the `placement` attribute.\n * Horizonal tabs that don't fit will overflow and scroll appropriately.\n * Tab-content can also be swiped to change tabs.\n *\n * @slot tabs - Add `nano-tab` elements to add clickable tabs.\n * @slot tab-content-header - a header bar displayed above tab content.\n * @slot - Add `nano-tab-content` elements to add tabbable content.\n *\n * @part base - the main tab-group wrapper\n * @part nav - the bar surrounding all the tabs and nav buttons\n * @part tabs - the wrapper around the `nano-tab` components\n * @part active-tab-indicator - the active indicator line\n * @part body - the wrapper around the `nano-tab-content` components\n */\n\n@Component({\n tag: 'nano-tab-group',\n styleUrl: 'tab-group.scss',\n shadow: true,\n})\nexport class TabGroup implements ComponentInterface {\n private activeTab: HTMLNanoTabElement;\n private activePanel: HTMLNanoTabContentElement;\n private activeTabIndicator: HTMLElement;\n private nav: HTMLElement;\n private tabGroup: HTMLElement;\n private tabs: HTMLElement;\n private rightBtn: HTMLButtonElement;\n private leftBtn: HTMLButtonElement;\n\n private isRtl: boolean;\n private initialTouchX: number = null;\n private initialTouchY: number = null;\n\n private resizeObserver: ResizeObserver;\n private mutationObservers: WeakMap<Node, MutationObserver> = new WeakMap();\n\n @Element() host: HTMLNanoTabGroupElement;\n\n @State() hasScrollControls = false;\n @State() hideControlRight = true;\n @State() hideControlLeft = true;\n @State() isLegacy = !document.head.attachShadow;\n @State() tab: string;\n\n /**\n * The placement of the tabs.\n */\n @Prop() placement: 'top' | 'start' = 'top';\n\n /**\n * Disables the scroll arrows that appear when tabs overflow.\n */\n @Prop() noScrollControls = false;\n\n /**\n * The color to use from the application's color palette.\n */\n @Prop() color?: Color;\n\n /**\n * Store the currently open tab (against this ID) in the component store.\n * Use in conjunction with storeMethod\n */\n @Prop() storeId?: string;\n\n /**\n * The method of storage.\n * Either session storage, url hash (after the '#') or url query (after the '?').\n */\n @Prop() storeMethod: StorageMethods = 'session';\n\n /**\n * Disable 'swipe to change tab' on devices with touch\n */\n @Prop() disableSwipe: boolean;\n\n @Watch('tab')\n handleTabNameChange() {\n if (this.activeTab && this.activeTab.panel === this.tab) return;\n const tab = this.getAllActiveTabs.find((el) => el.panel === this.tab);\n this.setActiveTab(tab);\n }\n\n @Watch('placement')\n handlePlacementChange() {\n this.syncActiveTabIndicator();\n }\n\n @Watch('noScrollControls')\n handleNoScrollControlsChange() {\n this.updateScrollControls();\n }\n\n @Watch('hideControlRight')\n hideRightBtn() {\n if (!this.rightBtn) return;\n displayTransition(this.rightBtn, 'is-shown', !this.hideControlRight);\n }\n\n @Watch('hideControlLeft')\n hideLeftBtn() {\n if (!this.leftBtn) return;\n displayTransition(this.leftBtn, 'is-shown', !this.hideControlLeft);\n }\n\n @Watch('hasScrollControls')\n watchScrollControls() {\n if (this.hasScrollControls) setTimeout((_) => this.handleTabScroll(), 20);\n else\n setTimeout((_) => {\n this.hideControlLeft = this.hideControlRight = true;\n }, 20);\n }\n\n /** Emitted when a tab is shown. */\n @Event() nanoTabShow: EventEmitter<{ name: string }>;\n\n /** Emitted when a tab is hidden. */\n @Event() nanoTabHide: EventEmitter<{ name: string }>;\n\n /** Emitted when the tab is closable and the close button is activated. */\n @Event() nanoTabWillClose: EventEmitter<{ name: string }>;\n\n /** Emitted when a closable tab is removed. */\n @Event() nanoTabClose: EventEmitter<{ name: string }>;\n\n /** Shows the specified tab panel. */\n @Method()\n async show(panel: string) {\n if (this.activeTab && this.activeTab.panel === panel) return;\n\n const tab = this.getAllActiveTabs.find((el) => el.panel === panel);\n\n if (tab) this.setActiveTab(tab);\n }\n\n // Internal Methods\n\n get getAllActiveTabs() {\n return this.getAllTabs.filter((el: any) => !el.disabled);\n }\n\n get getAllTabs() {\n return getDirectChildren<HTMLNanoTabElement>(this.host, 'nano-tab');\n }\n\n get getAllPanels() {\n return getDirectChildren<HTMLNanoTabContentElement>(\n this.host,\n 'nano-tab-content'\n );\n }\n\n get getActiveTab() {\n return this.getAllActiveTabs.find((el) => el.active);\n }\n\n private updateScrollControls = () => {\n if (this.noScrollControls) {\n this.hasScrollControls = false;\n } else {\n this.hasScrollControls =\n ['top'].includes(this.placement) &&\n this.nav.scrollWidth > this.nav.clientWidth &&\n this.nav.scrollWidth > this.tabs.clientWidth;\n }\n };\n\n private setActiveTab(tab: HTMLNanoTabElement, emitEvents = true) {\n if (\n tab &&\n tab !== this.activeTab &&\n !tab.disabled &&\n this.getAllActiveTabs.includes(tab)\n ) {\n const previousTab = this.activeTab;\n this.activeTab = tab;\n this.tab = tab.panel;\n\n // Sync tabs and panels\n this.getAllActiveTabs.map((el) => (el.active = el === this.activeTab));\n this.getAllPanels.map((el) => {\n if (el.name === this.activeTab.panel) {\n el.active = true;\n this.activePanel = el;\n } else el.active = false;\n el.removeAttribute('animation-dir');\n });\n // active tab can be changed on init - this won't be ready. No big thing\n this.syncActiveTabIndicator();\n if (['top'].includes(this.placement)) {\n scrollIntoView(this.activeTab, this.nav, 'horizontal', 'center');\n }\n\n // Emit events\n if (emitEvents) {\n if (previousTab) {\n this.nanoTabHide.emit({ name: previousTab.panel });\n }\n\n this.nanoTabShow.emit({ name: this.activeTab.panel });\n }\n }\n }\n\n private setAriaLabels() {\n const tabs = this.getAllActiveTabs;\n const panels = this.getAllPanels;\n\n // Link each tab with its corresponding panel\n tabs.map((tab) => {\n const panel = panels.find((el) => el.name === tab.panel);\n if (panel) {\n tab.setAttribute('aria-controls', panel.getAttribute('id'));\n panel.setAttribute('aria-labelledby', tab.getAttribute('id'));\n }\n });\n }\n\n private syncActiveTabIndicator() {\n this.getAllTabs.forEach((tab) =>\n tab.setAttribute(\n 'direction',\n this.placement === 'top' ? 'horizontal' : 'vertical'\n )\n );\n\n const tab = this.getActiveTab;\n const width = tab.shadowRoot.querySelector('.nanotab')?.clientWidth || 0;\n const height = tab.clientHeight;\n const offset = getOffset(tab, this.tabs);\n const offsetTop = offset.top + this.nav.scrollTop;\n const offsetLeft = offset.left;\n\n switch (this.placement) {\n case 'top':\n this.activeTabIndicator.style.width = `${width}px`;\n this.activeTabIndicator.style.height = null;\n this.activeTabIndicator.style.transform = `translateX(${offsetLeft}px)`;\n break;\n\n case 'start':\n this.activeTabIndicator.style.width = null;\n this.activeTabIndicator.style.height = `${height}px`;\n this.activeTabIndicator.style.transform = `translateY(${offsetTop}px)`;\n break;\n }\n }\n\n private getNavWidth() {\n if (!this.nav) return 0;\n const computedStyle = getComputedStyle(this.nav);\n let clientWidth = this.nav.clientWidth;\n return (clientWidth -=\n parseFloat(computedStyle.paddingLeft) +\n parseFloat(computedStyle.paddingRight));\n }\n\n // Event handlers\n\n @Listen('nanoTabClose')\n handleTabClose(ev: CustomEvent & { target: HTMLNanoTabElement }) {\n let tabIndex = this.getAllActiveTabs.indexOf(ev.target);\n const tab = ev.target;\n if (tabIndex < 0) return;\n\n const panel = this.getAllPanels.find((el) => el.name === tab.panel);\n if (!panel) return;\n\n ev.stopImmediatePropagation();\n\n const closeEv = this.nanoTabWillClose.emit({ name: tab.panel });\n if (closeEv.defaultPrevented) return;\n\n // Show the previous tab if the tab is currently active\n if (tab.active) {\n tabIndex = tabIndex === 0 ? 1 : tabIndex - 1;\n const prevTab = this.getAllActiveTabs[tabIndex]?.panel;\n if (prevTab) this.host.show(prevTab);\n }\n\n tab.remove();\n panel.remove();\n this.nanoTabClose.emit({ name: tab.panel });\n }\n\n private handleClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n const tab = target.closest('nano-tab');\n\n if (tab) this.setActiveTab(tab);\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n // Activate a tab\n if (['Enter', ' '].includes(event.key)) {\n const target = event.target as HTMLElement;\n const tab = target.closest('nano-tab');\n\n if (tab) {\n this.setActiveTab(tab);\n event.preventDefault();\n }\n }\n\n // Move focus left or right\n if (\n [\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Home',\n 'End',\n ].includes(event.key)\n ) {\n const activeEl = document.activeElement as any;\n\n if (activeEl && activeEl.tagName.toLowerCase() === 'nano-tab') {\n const tabs = this.getAllActiveTabs;\n let index = tabs.indexOf(activeEl);\n\n if (event.key === 'Home') {\n index = 0;\n } else if (event.key === 'End') {\n index = tabs.length - 1;\n } else if (\n (this.isRtl && event.key === 'ArrowRight') ||\n (!this.isRtl && event.key === 'ArrowLeft')\n ) {\n index = Math.max(0, index - 1);\n } else if (\n (this.isRtl && event.key === 'ArrowLeft') ||\n (!this.isRtl && event.key === 'ArrowRight')\n ) {\n index = Math.min(tabs.length - 1, index + 1);\n }\n tabs[index].setFocus();\n\n if (['top'].includes(this.placement)) {\n scrollIntoView(tabs[index], this.nav, 'horizontal', 'center');\n }\n event.preventDefault();\n }\n }\n };\n\n private handleTabScroll = () => {\n if (!this.hasScrollControls) {\n this.hideControlLeft = this.hideControlRight = true;\n return;\n }\n let endRight = this.isRtl\n ? this.nav.scrollLeft === 0\n : this.nav.scrollWidth - this.nav.scrollLeft === this.nav.clientWidth;\n let endLeft = this.isRtl\n ? this.nav.scrollWidth + this.nav.scrollLeft === this.nav.clientWidth\n : this.nav.scrollLeft === 0;\n\n if (endLeft) {\n this.hideControlLeft = true;\n this.hideControlRight = false;\n } else if (endRight) {\n this.hideControlLeft = false;\n this.hideControlRight = true;\n } else {\n this.hideControlRight = false;\n this.hideControlLeft = false;\n }\n };\n\n private handleBtnClick = (goRight: boolean = false) => {\n const navWidth = this.getNavWidth();\n let leftAmt;\n if (goRight) leftAmt = this.nav.scrollLeft + navWidth - 20;\n else leftAmt = this.nav.scrollLeft - navWidth + 20;\n\n try {\n this.nav.scroll({\n left: leftAmt,\n behavior: 'smooth',\n });\n } catch (e) {\n this.nav.scrollLeft = leftAmt;\n }\n };\n\n private handleTouchStart = (event: TouchEvent) => {\n if (this.disableSwipe) return;\n const touch = event.changedTouches[0];\n this.initialTouchX = touch.pageX;\n this.initialTouchY = touch.pageY;\n };\n\n private handleTouchEnd = (event: TouchEvent) => {\n if (this.disableSwipe) return;\n const touch = event.changedTouches[0];\n const distX = touch.pageX - this.initialTouchX; // get horizontal dist traveled\n const distY = touch.pageY - this.initialTouchY; // get vertical dist traveled\n const threshold = 70;\n\n var xDiff = this.initialTouchX - touch.clientX;\n var yDiff = this.initialTouchY - touch.clientY;\n\n const isHorizontalSwipe =\n Math.abs(distX) >= threshold && Math.abs(distY) <= threshold;\n\n const tabs = this.getAllActiveTabs;\n const currIndex = tabs.findIndex((el) => el.active);\n\n if (isHorizontalSwipe) {\n const toGo =\n (distX < 0 && this.placement === 'top') ||\n (distX > 0 && this.placement !== 'top')\n ? 1\n : -1;\n\n if (tabs[currIndex + toGo]) {\n this.setActiveTab(tabs[currIndex + toGo]);\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) {\n if (xDiff > 0) this.activePanel.setAttribute('animation-dir', 'left');\n else this.activePanel.setAttribute('animation-dir', 'right');\n }\n }\n }\n this.initialTouchX = null;\n this.initialTouchY = null;\n };\n\n private handleContentSlotChange = () => {\n setTimeout(() => {\n this.setAriaLabels();\n this.setActiveTab(this.getActiveTab || this.getAllActiveTabs[0], false);\n });\n };\n\n private handleTabSlotChange = (ev: Event & { target: HTMLSlotElement }) => {\n setTimeout(() => {\n this.setAriaLabels();\n this.handleTabScroll();\n this.setActiveTab(this.getActiveTab || this.getAllActiveTabs[0], false);\n this.updateScrollControls();\n }, 500);\n\n /** maintain a weakmap of mutation observers to maintain tab / indicator position on all changes. */\n const nodes = ev.target.assignedNodes({ flatten: true });\n nodes.forEach((node) => {\n if (!this.mutationObservers.get(node)) {\n const mo = new MutationObserver(() => {\n setTimeout(() => {\n this.syncActiveTabIndicator();\n this.handleTabScroll();\n this.updateScrollControls();\n }, 500);\n });\n this.mutationObservers.set(node, mo);\n\n mo.observe(node, {\n characterData: true,\n childList: true,\n subtree: true,\n });\n }\n });\n };\n\n // Stencil hooks\n\n componentDidLoad() {\n // Initial IO - watching for all content to be loaded\n const observer = new IntersectionObserver((entries, observer) => {\n if (entries[0].intersectionRatio > 0) {\n this.setAriaLabels();\n this.setActiveTab(this.getActiveTab || this.getAllActiveTabs[0], false);\n\n if (this.storeId)\n ComponentStore.init(this, ['tab'], this.storeMethod, this.storeId);\n observer.unobserve(entries[0].target);\n }\n });\n observer.observe(this.host);\n focusVisible.observe(this.tabGroup);\n\n if (this.leftBtn) {\n focusVisible.observe(this.leftBtn);\n focusVisible.observe(this.rightBtn);\n }\n\n this.resizeObserver = new ResizeObserver(() => {\n setTimeout(() => {\n this.updateScrollControls();\n this.syncActiveTabIndicator();\n scrollIntoView(this.activeTab, this.nav, 'horizontal', 'center');\n }, 500);\n });\n this.resizeObserver.observe(this.nav);\n\n raf(() => this.updateScrollControls());\n }\n\n connectedCallback() {\n this.isRtl =\n this.host.dir === 'rtl' ||\n (this.host.ownerDocument as Document).dir === 'rtl';\n }\n\n disconnectedCallback() {\n focusVisible.unobserve(this.tabGroup);\n if (this.leftBtn) {\n focusVisible.unobserve(this.leftBtn);\n focusVisible.unobserve(this.rightBtn);\n }\n if (this.resizeObserver) this.resizeObserver.unobserve(this.nav);\n }\n\n render() {\n this.isRtl = (this.host.ownerDocument as Document).dir === 'rtl';\n\n return (\n <Host\n class={{ ...createColorClasses(this.color), legacy: this.isLegacy }}\n dir={this.isRtl ? 'rtl' : null}\n >\n <div\n part=\"base\"\n ref={(el) => (this.tabGroup = el)}\n class={{\n 'nano-tab-group': true,\n 'nano-tab-group--top': this.placement === 'top',\n 'nano-tab-group--start': this.placement === 'start',\n 'nano-tab-group--has-scroll-controls': this.hasScrollControls,\n 'nano-tab-group--has-scroll-controls-left': !this.hideControlLeft,\n 'nano-tab-group--has-scroll-controls-right': !this.hideControlRight,\n }}\n onClick={this.handleClick}\n onKeyDown={this.handleKeyDown}\n >\n <div class=\"nano-tab-group__nav-container\" part=\"nav\">\n {this.placement === 'top' && (\n <button\n class={{\n 'nano-tab-group__scroll-button': true,\n 'nano-tab-group__scroll-button--left': true,\n }}\n ref={(btn) => (this.leftBtn = btn)}\n onClick={() => this.handleBtnClick(false)}\n >\n <nano-icon name=\"light/chevron-left\"></nano-icon>\n </button>\n )}\n <div\n ref={(el) => (this.nav = el)}\n class=\"nano-tab-group__nav\"\n onScroll={this.handleTabScroll}\n >\n <div\n ref={(el) => (this.tabs = el)}\n part=\"tabs\"\n class=\"nano-tab-group__tabs\"\n role=\"tablist\"\n >\n <div\n ref={(el) => (this.activeTabIndicator = el)}\n part=\"active-tab-indicator\"\n class=\"nano-tab-group__active-tab-indicator\"\n />\n <slot name=\"tabs\" onSlotchange={this.handleTabSlotChange} />\n </div>\n </div>\n {this.placement === 'top' && (\n <button\n class={{\n 'nano-tab-group__scroll-button': true,\n 'nano-tab-group__scroll-button--right': true,\n }}\n ref={(btn) => (this.rightBtn = btn)}\n onClick={() => this.handleBtnClick(true)}\n >\n <nano-icon name=\"light/chevron-right\"></nano-icon>\n </button>\n )}\n </div>\n <slot name=\"tab-content-header\" />\n <div\n part=\"body\"\n class=\"nano-tab-group__body\"\n onTouchStart={this.handleTouchStart}\n onTouchEnd={this.handleTouchEnd}\n >\n <slot onSlotchange={this.handleContentSlotChange} />\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
|