@nanoporetech-digital/components 2.6.0 → 2.7.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 +16 -0
- package/dist/cjs/{form-control-3bc82e3e.js → form-control-8f530f7d.js} +18 -20
- package/dist/cjs/form-control-8f530f7d.js.map +1 -0
- package/dist/cjs/nano-checkbox.cjs.entry.js +1 -1
- package/dist/cjs/nano-date-input.cjs.entry.js +1 -1
- package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-file-upload.cjs.entry.js +1 -1
- package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-global-nav.cjs.entry.js +6 -8
- package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-input.cjs.entry.js +6 -6
- package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-nav-item_2.cjs.entry.js +8 -11
- package/dist/cjs/nano-nav-item_2.cjs.entry.js.map +1 -1
- package/dist/collection/components/checkbox/checkbox.css +2 -2
- package/dist/collection/components/date-input/date-input.css +1 -0
- package/dist/collection/components/file-upload/file-upload.css +2 -2
- package/dist/collection/components/form-control/form-control.js +17 -19
- package/dist/collection/components/form-control/form-control.js.map +1 -1
- package/dist/collection/components/global-nav/global-nav.js +5 -5
- package/dist/collection/components/global-nav/global-nav.js.map +1 -1
- package/dist/collection/components/input/input.css +200 -258
- package/dist/collection/components/input/input.js +4 -4
- package/dist/collection/components/input/input.js.map +1 -1
- package/dist/collection/components/select/select.css +225 -276
- package/dist/collection/components/select/select.js +8 -11
- package/dist/collection/components/select/select.js.map +1 -1
- package/dist/components/form-control.js +17 -19
- package/dist/components/form-control.js.map +1 -1
- package/dist/components/input.js +5 -5
- package/dist/components/input.js.map +1 -1
- package/dist/components/nano-checkbox.js +1 -1
- package/dist/components/nano-date-input.js +1 -1
- package/dist/components/nano-date-input.js.map +1 -1
- package/dist/components/nano-file-upload.js +1 -1
- package/dist/components/nano-file-upload.js.map +1 -1
- package/dist/components/nano-global-nav.js +6 -8
- package/dist/components/nano-global-nav.js.map +1 -1
- package/dist/components/select.js +7 -10
- package/dist/components/select.js.map +1 -1
- package/dist/custom-elements/index.js +38 -45
- package/dist/custom-elements/index.js.map +1 -1
- package/dist/esm/{form-control-67eeb108.js → form-control-c52b6256.js} +18 -20
- package/dist/esm/form-control-c52b6256.js.map +1 -0
- package/dist/esm/nano-checkbox.entry.js +1 -1
- package/dist/esm/nano-date-input.entry.js +1 -1
- package/dist/esm/nano-date-input.entry.js.map +1 -1
- package/dist/esm/nano-file-upload.entry.js +1 -1
- package/dist/esm/nano-file-upload.entry.js.map +1 -1
- package/dist/esm/nano-global-nav.entry.js +6 -8
- package/dist/esm/nano-global-nav.entry.js.map +1 -1
- package/dist/esm/nano-input.entry.js +6 -6
- package/dist/esm/nano-input.entry.js.map +1 -1
- package/dist/esm/nano-nav-item_2.entry.js +8 -11
- package/dist/esm/nano-nav-item_2.entry.js.map +1 -1
- package/dist/esm-es5/form-control-c52b6256.js +5 -0
- package/dist/esm-es5/form-control-c52b6256.js.map +1 -0
- package/dist/esm-es5/nano-checkbox.entry.js +1 -1
- package/dist/esm-es5/nano-date-input.entry.js +1 -1
- package/dist/esm-es5/nano-date-input.entry.js.map +1 -1
- package/dist/esm-es5/nano-file-upload.entry.js +1 -1
- package/dist/esm-es5/nano-file-upload.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-input.entry.js +2 -2
- package/dist/esm-es5/nano-input.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/nano-components/nano-components.esm.js +1 -1
- package/dist/nano-components/p-096682d9.system.js +1 -1
- package/dist/nano-components/p-10a6216d.system.entry.js +5 -0
- package/dist/nano-components/p-10a6216d.system.entry.js.map +1 -0
- package/dist/nano-components/{p-f9e30f31.system.entry.js → p-3c475740.system.entry.js} +2 -2
- package/dist/nano-components/p-3c475740.system.entry.js.map +1 -0
- package/dist/nano-components/{p-93448bcd.system.entry.js → p-4265cf95.system.entry.js} +2 -2
- package/dist/nano-components/{p-93448bcd.system.entry.js.map → p-4265cf95.system.entry.js.map} +0 -0
- package/dist/nano-components/{p-20db18f3.entry.js → p-5a315696.entry.js} +2 -2
- package/dist/nano-components/{p-20db18f3.entry.js.map → p-5a315696.entry.js.map} +0 -0
- package/dist/nano-components/p-802e1416.system.entry.js +5 -0
- package/dist/nano-components/{p-ef4e0912.system.entry.js.map → p-802e1416.system.entry.js.map} +1 -1
- package/dist/nano-components/p-829d7f05.system.entry.js +5 -0
- package/dist/nano-components/p-829d7f05.system.entry.js.map +1 -0
- package/dist/nano-components/p-894d6967.entry.js +5 -0
- package/dist/nano-components/p-894d6967.entry.js.map +1 -0
- package/dist/nano-components/p-8e5afc61.system.entry.js +5 -0
- package/dist/nano-components/p-8e5afc61.system.entry.js.map +1 -0
- package/dist/nano-components/p-9d35768b.entry.js +5 -0
- package/dist/nano-components/p-9d35768b.entry.js.map +1 -0
- package/dist/nano-components/p-aaef7cc7.js +5 -0
- package/dist/nano-components/p-aaef7cc7.js.map +1 -0
- package/dist/nano-components/p-af7abf5e.entry.js +5 -0
- package/dist/nano-components/p-af7abf5e.entry.js.map +1 -0
- package/dist/nano-components/p-df0897ec.system.js +5 -0
- package/dist/nano-components/p-df0897ec.system.js.map +1 -0
- package/dist/nano-components/p-e7c69d4f.entry.js +5 -0
- package/dist/nano-components/{p-d6569144.entry.js.map → p-e7c69d4f.entry.js.map} +1 -1
- package/dist/nano-components/{p-8de6e276.entry.js → p-ee3fe567.entry.js} +2 -2
- package/dist/nano-components/p-ee3fe567.entry.js.map +1 -0
- package/dist/types/components/select/select.d.ts +0 -1
- package/docs-json.json +13 -13
- package/package.json +4 -3
- package/dist/cjs/form-control-3bc82e3e.js.map +0 -1
- package/dist/esm/form-control-67eeb108.js.map +0 -1
- package/dist/esm-es5/form-control-67eeb108.js +0 -5
- package/dist/esm-es5/form-control-67eeb108.js.map +0 -1
- package/dist/nano-components/p-2559e9c1.entry.js +0 -5
- package/dist/nano-components/p-2559e9c1.entry.js.map +0 -1
- package/dist/nano-components/p-2be7aab0.system.entry.js +0 -5
- package/dist/nano-components/p-2be7aab0.system.entry.js.map +0 -1
- package/dist/nano-components/p-2e38a927.entry.js +0 -5
- package/dist/nano-components/p-2e38a927.entry.js.map +0 -1
- package/dist/nano-components/p-3a13948a.system.entry.js +0 -5
- package/dist/nano-components/p-3a13948a.system.entry.js.map +0 -1
- package/dist/nano-components/p-672e5547.js +0 -5
- package/dist/nano-components/p-672e5547.js.map +0 -1
- package/dist/nano-components/p-8de6e276.entry.js.map +0 -1
- package/dist/nano-components/p-99acaa4f.system.entry.js +0 -5
- package/dist/nano-components/p-99acaa4f.system.entry.js.map +0 -1
- package/dist/nano-components/p-d4dfa4c5.entry.js +0 -5
- package/dist/nano-components/p-d4dfa4c5.entry.js.map +0 -1
- package/dist/nano-components/p-d6569144.entry.js +0 -5
- package/dist/nano-components/p-ea5eb591.system.js +0 -5
- package/dist/nano-components/p-ea5eb591.system.js.map +0 -1
- package/dist/nano-components/p-ef4e0912.system.entry.js +0 -5
- package/dist/nano-components/p-f9e30f31.system.entry.js.map +0 -1
@@ -0,0 +1 @@
|
|
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","THRESHOLDBREAKS","search","about","main","login","icon","GlobalNav","[object Object]","hostRef","this","currSize","thresholdsGoingUp","THRESHOLDLIMIT","keys","length","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","onSearchBarHidden","height","onSearchInput","value","isSearchValSet","detail","type","onSearchChange","autocompleteResults","nanoSearchReset","emit","currentIndex","currentSelectedIndex","processSearchResults","alogliaIndex","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","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.75rem;\n flex: 1 0 auto;\n display: flex;\n justify-content: space-around;\n\n ul {\n display: flex;\n justify-content: space-around;\n }\n\n ::slotted(nano-nav-item),\n nano-nav-item {\n --padding-top: 7px;\n --padding-bottom: 7px;\n --padding-end: 2px;\n --padding-start: 2px;\n --margin: 0 8px;\n }\n\n &--main {\n justify-content: flex-start;\n letter-spacing: 0.33px;\n font-weight: 600;\n font-stretch: expanded;\n font-size: 0.8125rem;\n\n ::slotted(nano-nav-item) {\n --color: #fff;\n --padding-end: 3px;\n --padding-start: 0;\n }\n }\n\n &--sub {\n @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 max-width: 45em;\n margin-left: auto;\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\n// the 'breakpoints' that different segments of content go into or out-of the burger / overflow menu\nconst THRESHOLDBREAKS = {\n search: 0,\n about: 1,\n main: 2,\n login: 3,\n icon: 4,\n};\n\n/**\n * Nanopore digital global navigation and search bar.\n * Incorporates MyAccount / SSO states (messages / cart / user name etc).\n * Incorporates Algolia search.\n * GlobalNav is designed to be at the root of the `<body>`.\n * There should only be one <nano-global-nav> in the DOM.\n * The following demo uses static data.\n * @slot main - main nav items. Should be used with nano-nav-item's\n * @slot icon - nano-nav-item's displayed alongside icon links that come from MyAccount\n * @slot loggedin - nano-nav-item's to display when users are signed in, alongside links from from MyAccount (within the overflow menu panel).\n * @slot about - nano-nav-item's to display with about links that come from MyAccount\n * @slot site - nano-nav-item's to display with site links that come from MyAccount\n * @slot overflow - items to always display in the overflow menu\n * @slot search - when not using myaccount search OR show-search=\"false\" you can utilise the search slot\n * @slot promotion - a free area for any promotional content, displayed within the overflow menu panel\n * @slot logo - when show-logo=\"false\" you can utilise the logo slot\n */\n@Component({\n tag: 'nano-global-nav',\n styleUrl: 'global-nav.scss',\n shadow: true,\n assetsDirs: ['assets'],\n})\nexport class GlobalNav implements ComponentInterface {\n // position and dimension state\n private io: IntersectionObserver;\n private debounceResize: () => {};\n private debounceSetResizingState: () => {};\n private currSize: number = 0;\n private thresholdsGoingUp: boolean = false;\n private THRESHOLDLIMIT = Object.keys(THRESHOLDBREAKS).length;\n\n // menu\n private menuDiv: HTMLElement;\n private menuBtn: HTMLButtonElement;\n private menuWrapDiv: HTMLDivElement;\n private menuContentDiv: HTMLDivElement;\n\n // search\n private searchBarEl: HTMLDivElement;\n private searchInput: HTMLNanoInputElement;\n private algoliaClient: AlgoliaClient;\n private currentIndex: SearchIndex;\n private autocompleteResults: AlgoliaResults | null;\n private autocompleteEles: Array<HTMLAnchorElement | HTMLButtonElement> = [];\n private currAIndex: number = -1;\n private algoliaSearchResults: AlgoliaMultiResults | null;\n private scopeSearch: AlgoliaMultiResults | null;\n\n // general\n private mainBarDiv: HTMLElement;\n private barsDiv: HTMLDivElement;\n private siteContent: HTMLDivElement;\n private userLinkPanel: HTMLDivElement;\n private isLoggedIn: boolean = false;\n\n private myAccData: MyAccountData = null;\n\n // myaccount links\n private aboutNavItms: MyAccountLink[] = [];\n private siteNavItms: MyAccountLink[] = [];\n private loggedInNavItms: MyAccountLink[] = [];\n\n // has slot tests\n private mo?: MutationObserver;\n @State() hasLoggedinSlot: boolean = false;\n @State() hasSiteSlot: boolean = false;\n @State() hasPromotionSlot: boolean = false;\n\n // slot item number tests\n @State() aboutSlotLen: number = 0;\n @State() iconSlotLen: number = 0;\n @State() mainSlotLen: number = 0;\n @State() overflowSlotLen: number = 0;\n @State() searchSlotLen: number = 0;\n\n @State() internalSearchIndeces: Array<SearchIndex> = [];\n @State() thresholdReady: boolean = false;\n @State() remoteDataReady: boolean = false;\n @State() ready: boolean = false;\n @State() isResizing: boolean = false;\n @State() intersectRatio: number;\n @State() threshold: number = this.THRESHOLDLIMIT;\n @State() modalOpen: boolean = false;\n @State() modalIsOpen: boolean = false;\n @State() searchBarShown: boolean = false;\n @State() scrollingUp: boolean = true;\n @State() searchLoading: boolean = false;\n @State() showAutocomplete: boolean = false;\n @State() secondaryMenuOpen: boolean = false;\n @State() userMenuOpen: boolean = false;\n @State() menuFullScreen: boolean = false;\n @State() searchValInternal: string = '';\n\n @Element() private el: HTMLNanoGlobalNavElement;\n\n /**\n * Connect to local, dev, test or prod MyAccount\n * environments to retrieve global nav / sso data\n */\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\n // content now fits so add / remove context classes\n // on nav-items depending on whether they're added to bar or burger.\n this.siteContent.style.minHeight = `calc(100% - ${\n this.barsDiv.clientHeight + 1\n }px)`;\n\n let menuItems: Array<Element>, barItems: Array<Element>;\n readTask(() => {\n menuItems = [\n ...Array.from(this.el.querySelectorAll('nano-nav-item[slot=\"site\"]')),\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"overflow\"]')\n ),\n ];\n barItems = [];\n\n if (this.threshold < this.THRESHOLDLIMIT - THRESHOLDBREAKS.icon)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"icon\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"icon\"]')\n )\n );\n\n if (this.threshold < this.THRESHOLDLIMIT - THRESHOLDBREAKS.login)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"loggedin\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"loggedin\"]')\n )\n );\n\n if (this.threshold < this.THRESHOLDLIMIT - THRESHOLDBREAKS.main)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"main\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"main\"]')\n )\n );\n\n if (this.threshold < this.THRESHOLDLIMIT - THRESHOLDBREAKS.about)\n menuItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"about\"]')\n )\n );\n else\n barItems.push(\n ...Array.from(\n this.el.querySelectorAll('nano-nav-item[slot=\"about\"]')\n )\n );\n });\n\n writeTask(() => {\n menuItems.forEach((item) => {\n item.classList.add('nano-global-nav-menu');\n item.classList.remove('nano-global-nav-bar');\n });\n barItems.forEach((item) => {\n item.classList.remove('nano-global-nav-menu');\n item.classList.add('nano-global-nav-bar');\n });\n });\n }\n }\n\n @Watch('thresholdReady')\n @Watch('remoteDataReady')\n assessReady() {\n if (this.thresholdReady && this.remoteDataReady) {\n this.ready = true;\n }\n }\n\n @Watch('remoteDataReady')\n remoteReady() {\n this.attachIO();\n }\n\n @Watch('ready')\n isReady() {\n this.nanoIsReady.emit();\n }\n\n /**\n * Add / remove events when autocomplete results show / hide.\n */\n @Watch('showAutocomplete')\n setupAutocompleteBlur() {\n this.searchInput.clientWidth; // force reflow\n if (this.showAutocomplete) {\n this.el.shadowRoot.addEventListener('click', this.onAutocompleteBlur);\n } else {\n this.el.shadowRoot.removeEventListener('click', this.onAutocompleteBlur);\n }\n }\n\n /**\n * As relevant slotted items change, reset resizing breakpoints\n */\n @Watch('aboutSlotLen')\n @Watch('iconSlotLen')\n @Watch('mainSlotLen')\n @Watch('overflowSlotLen')\n @Watch('searchSlotLen')\n slotChange() {\n this.threshold = this.THRESHOLDLIMIT;\n }\n\n // General classes for visuals\n\n private thresholdClasses() {\n 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 (\n this.threshold < this.THRESHOLDLIMIT &&\n window.innerWidth > this.currSize\n ) {\n this.threshold = this.THRESHOLDLIMIT;\n }\n this.currSize = window.innerWidth;\n this.searchBarShown = false;\n }\n\n // Burger / Overflow Menu\n\n // listen to nav-item secondary open / close events primarily for resizing the menu\n @Listen('nanoOpen')\n secondaryOpen(ev: CustomEvent) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n this.secondaryMenuOpen = true;\n this.menuContentDiv.style.minHeight =\n (ev.detail as NavItemEventDetail).secondaryMenu.scrollHeight + 'px';\n }\n\n @Listen('nanoClose')\n secondaryClose(ev: CustomEvent) {\n if (!(ev.detail as NavItemEventDetail).secondaryMenu) return;\n ev.stopPropagation();\n this.secondaryMenuOpen = false;\n this.menuContentDiv.style.minHeight = '';\n }\n\n private onMenuBtnKeyDown = (ev: KeyboardEvent) => {\n switch (ev.key) {\n case 'Enter':\n case ' ':\n this.modalOpen ? this.menuClose(ev, true) : this.menuOpen();\n break;\n }\n };\n\n private onMenuBtnClick = (ev: MouseEvent) => {\n this.menuClose(ev, true);\n };\n\n private menuOpen = (e?: MouseEvent) => {\n if (e) e.preventDefault();\n\n this.menuDiv.style.display = 'block';\n // need to open menu in stages\n // wait for re-flow after changing display\n // wait for repaint after animate, then focus\n\n this.menuDiv.clientWidth; // force reflow\n\n this.modalOpen = true;\n this.modalIsOpen = true;\n this.menuWrapDiv.addEventListener('focusout', this.menuClose);\n\n this.menuDiv.clientWidth; // force reflow\n\n this.menuWrapDiv.focus({ preventScroll: true });\n if (\n this.threshold < 2 ||\n this.menuWrapDiv.scrollHeight > window.innerHeight\n ) {\n document.body.style.overflow = 'hidden';\n this.menuFullScreen = true;\n } else document.body.style.overflowX = 'hidden';\n };\n\n private onMenuHidden = () => {\n this.menuDiv.removeEventListener('transitionend', this.onMenuHidden);\n this.menuWrapDiv.removeEventListener('focusout', this.menuClose);\n\n document.body.style.overflow = '';\n this.menuDiv.style.display = 'none';\n this.modalIsOpen = false;\n this.menuFullScreen = false;\n\n setTimeout(() => {\n if (document.activeElement === document.body && this.menuBtn)\n this.mainBarDiv.focus({ preventScroll: true });\n }, 50);\n };\n\n private menuClose = (\n ev?: FocusEvent | MouseEvent | KeyboardEvent | TouchEvent,\n force: boolean = false\n ) => {\n if (!force) {\n 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 {/* START BURGER / OVERFLOW MENU */}\n <nav\n id=\"global-nav-menu\"\n class={{\n 'gn-menu': true,\n open: this.modalOpen,\n 'has-promotion': this.hasPromotionSlot,\n 'menu-full-screen': this.menuFullScreen,\n 'secondary-open': this.secondaryMenuOpen,\n }}\n aria-expanded={this.modalOpen ? 'true' : 'false'}\n ref={(div) => (this.menuDiv = div)}\n >\n <div\n class=\"gn-menu_wrap\"\n ref={(div) => (this.menuWrapDiv = div)}\n tabindex=\"-1\"\n >\n <div class=\"gn-menu_actions\">\n <button\n class=\"menu-btn icon-btn icon-btn\"\n onMouseDown={this.onMenuBtnClick}\n onKeyDown={this.onMenuBtnKeyDown}\n >\n {this.threshold < this.THRESHOLDLIMIT - 3 && (\n <nano-icon\n name=\"light/times\"\n aria-label=\"close menu\"\n ></nano-icon>\n )}\n {this.threshold >= this.THRESHOLDLIMIT - 3 && (\n <nano-icon\n name=\"light/bars\"\n aria-label=\"close menu\"\n ></nano-icon>\n )}\n </button>\n\n {this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.icon && [\n !!this.iconSlotLen && <slot name=\"icon\" />,\n this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('icons')) && [\n this.msgUrl && (\n <a href={this.msgUrl} class=\"icon-btn\">\n <nano-icon name=\"light/bell\"></nano-icon>\n {this.msgCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.msgCount}\n </span>\n )}\n </a>\n ),\n this.cartUrl && (\n <a href={this.cartUrl} class=\"icon-btn\">\n <nano-icon name=\"light/shopping-cart\"></nano-icon>\n {this.cartCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.cartCount}\n </span>\n )}\n </a>\n ),\n ],\n ]}\n\n {this.myAccData && this.myAccData.urls.login && (\n <a\n href={this.myAccData.urls.login + this.ssoRedirect}\n class=\"login-btn\"\n >\n Login / Register{' '}\n <nano-icon name=\"solid/chevron-right\"></nano-icon>\n </a>\n )}\n </div>\n\n <div\n class=\"content-wrap\"\n ref={(div) => (this.menuContentDiv = div)}\n >\n <div class=\"content\">\n <nav class=\"nav-links nav-links--main\">\n <slot name=\"overflow\" />\n {this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.main &&\n !!this.mainSlotLen && <slot name=\"main\" />}\n </nav>\n\n {/* ABOUT AND SITE MENU IN BURGER */}\n {(((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.about) ||\n this.hasSiteSlot ||\n !!this.siteNavItms.length) && (\n <div>\n {(!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.about && [\n // About Menu as an open list (before more items are added to burger)\n (this.threshold >=\n this.THRESHOLDLIMIT - (THRESHOLDBREAKS.about + 1) ||\n this.mainSlotLen < 2) &&\n this.overflowSlotLen < 2 && (\n <div class=\"nav-links-wrap\">\n {!!this.aboutNavItms.length && (\n <h4 class=\"nav-links_title\">About</h4>\n )}\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"About the company links\"\n >\n <slot name=\"about\" />\n\n {this.aboutNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={link.address}\n target={link.target}\n >\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n </nav>\n </div>\n ),\n // About Menu as hidden list (when more items are added to burger)\n ((this.threshold <\n this.THRESHOLDLIMIT - (THRESHOLDBREAKS.about + 1) &&\n this.mainSlotLen >= 2) ||\n this.overflowSlotLen >= 2) && (\n <nav\n class=\"nav-links\"\n aria-label=\"About the company links\"\n >\n {!this.aboutNavItms.length && (\n <slot name=\"about\" />\n )}\n {!!this.aboutNavItms.length && (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n Company\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-right\"\n ></nano-icon>\n <div slot=\"secondary\">\n <div class=\"content\">\n <button\n class=\"back-btn\"\n onClick={this.subMenuClose}\n >\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-left\"\n aria-label=\"go back\"\n ></nano-icon>\n Company\n </button>\n <slot name=\"about\" />\n <div class=\"content--sub\">\n {this.aboutNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={link.address}\n target={link.target}\n >\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n </div>\n </div>\n </div>\n </nano-nav-item>\n )}\n </nav>\n ),\n ]}\n\n {/* SITES MENU (Always in burger) */}\n {(this.hasSiteSlot || !!this.siteNavItms.length) && [\n (this.threshold >= this.THRESHOLDLIMIT - 2 ||\n this.mainSlotLen < 2) &&\n this.overflowSlotLen < 2 && (\n <div class=\"nav-links-wrap\">\n <h4 class=\"nav-links_title\">Sites</h4>\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"Different company site links\"\n >\n <slot name=\"site\" />\n {this.siteNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={link.address}\n target={link.target}\n >\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n </nav>\n </div>\n ),\n ((this.threshold < this.THRESHOLDLIMIT - 2 &&\n this.mainSlotLen >= 2) ||\n this.overflowSlotLen >= 2) && (\n <nav\n class=\"nav-links\"\n aria-label=\"Different company site links\"\n >\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n Sites\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-right\"\n ></nano-icon>\n <div slot=\"secondary\">\n <div class=\"content\">\n <button\n class=\"back-btn\"\n onClick={this.subMenuClose}\n >\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-left\"\n aria-label=\"go back\"\n ></nano-icon>\n Sites\n </button>\n <div class=\"content--sub\">\n <slot name=\"site\" />\n {this.siteNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={link.address}\n target={link.target}\n >\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n </div>\n </div>\n </div>\n </nano-nav-item>\n </nav>\n ),\n ]}\n </div>\n )}\n </div>\n\n {this.isLoggedIn &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.login &&\n (this.loggedInNavItms.length || this.hasLoggedinSlot) && (\n <nav class=\"nav-links\" aria-label=\"Your user account links\">\n <nano-nav-item class=\"nano-global-nav user-nav nano-global-nav-menu\">\n {this.myAccountUser.name}\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-right\"\n ></nano-icon>\n <div slot=\"secondary\">\n <div class=\"content\">\n <button\n class=\"back-btn\"\n onClick={this.subMenuClose}\n >\n <nano-icon\n slot=\"icon-end\"\n name=\"solid/chevron-left\"\n aria-label=\"go back\"\n ></nano-icon>\n {this.myAccountUser.name}\n </button>\n <div class=\"content--sub\">\n <slot name=\"loggedin\" />\n {this.loggedInNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a href={link.address} target={link.target}>\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n <nano-nav-item class=\"nano-global-nav nano-global-nav-menu\">\n <a\n href={\n this.myAccData.urls.forgot_password +\n this.ssoRedirect\n }\n >\n Change Password\n </a>\n </nano-nav-item>\n </div>\n </div>\n </div>\n </nano-nav-item>\n </nav>\n )}\n\n <slot name=\"promotion\" />\n\n {this.myAccData && this.myAccData.urls.logout && (\n <div class=\"login-btn logout-btn\">\n <a href={this.myAccData.urls.logout + this.ssoRedirect}>\n Logout\n </a>\n </div>\n )}\n </div>\n </div>\n </nav>\n {/* END BURGER / OVERFLOW MENU */}\n\n {/* START MAIN NAV BAR */}\n <nano-sticker\n auto-resize=\"false\"\n break-point-max=\"800\"\n quietMode={{ h: 600, w: 800 }}\n >\n <div class=\"bars\" ref={(div) => (this.barsDiv = div)}>\n <nav\n class=\"main-bar\"\n aria-label=\"Main site navigation\"\n tabindex=\"-1\"\n ref={(div) => (this.mainBarDiv = div)}\n >\n {(this.hasPromotionSlot ||\n !!this.overflowSlotLen ||\n ((this.myAccData || !!this.iconSlotLen) &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.icon) ||\n (this.isLoggedIn &&\n (!!this.loggedInNavItms.length || this.hasLoggedinSlot) &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.login) ||\n (!!this.mainSlotLen &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.main) ||\n ((!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.about) ||\n this.hasSiteSlot ||\n !!this.siteNavItms.length) && (\n <button\n class=\"menu-btn icon-btn\"\n onMouseDown={this.menuOpen}\n onKeyDown={this.onMenuBtnKeyDown}\n aria-expanded={this.modalOpen ? 'true' : 'false'}\n aria-controls=\"global-nav-menu\"\n ref={(btn) => (this.menuBtn = btn)}\n >\n <nano-icon\n name=\"light/bars\"\n aria-label=\"open menu\"\n ></nano-icon>\n </button>\n )}\n\n {this.showLogo && (\n <a href={this.logoUrl} class=\"logo-link\">\n <img\n src={getAssetPath(`./assets/ont-logo.svg`)}\n alt=\"Oxford Nanopore Technologies Logo\"\n class=\"logo\"\n />\n </a>\n )}\n {!this.showLogo && (\n <div class=\"logo-link\">\n <slot name=\"logo\" />\n </div>\n )}\n\n <div class=\"nav-links nav-links--main\">\n <slot name=\"main\" />\n </div>\n\n {this.threshold >=\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.search && [\n this.showSearch && !!this.internalSearchIndeces.length && (\n <div\n class=\"search-widget\"\n role=\"combobox\"\n aria-owns=\"autocomplete-results\"\n aria-expanded={\n this.showAutocomplete && this.autocompleteResults\n ? 'true'\n : 'false'\n }\n >\n {searchWidget}\n </div>\n ),\n (!this.showSearch || !this.myAccData) &&\n !!this.searchSlotLen && <slot name=\"search\" />,\n ]}\n\n {(!!this.aboutSlotLen || !!this.aboutNavItms.length) &&\n this.threshold >=\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.about && (\n <nav\n class=\"nav-links nav-links--sub\"\n aria-label=\"About the company. Links\"\n >\n <slot name=\"about\" />\n {this.aboutNavItms.map((link) => {\n return (\n <nano-nav-item class=\"nano-global-nav nano-global-nav-bar\">\n <a href={link.address} target={link.target}>\n {link.title}\n </a>\n </nano-nav-item>\n );\n })}\n </nav>\n )}\n\n {this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.search &&\n ((this.showSearch && !!this.internalSearchIndeces.length) ||\n !!this.searchSlotLen) && (\n <button\n class=\"icon-btn\"\n aria-controls=\"global-nav-search-bar\"\n aria-expanded={this.searchBarShown ? 'true' : 'false'}\n onMouseDown={this.onSearchBtnClick}\n onKeyDown={this.onSearchBtnKeyDown}\n >\n <nano-icon name=\"light/search\"></nano-icon>\n </button>\n )}\n\n {this.threshold >=\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.icon && [\n !!this.iconSlotLen && <slot name=\"icon\" />,\n this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('icons')) && [\n this.msgUrl && (\n <a href={this.msgUrl} class=\"icon-btn\">\n <nano-icon name=\"light/bell\"></nano-icon>\n {this.msgCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.msgCount}\n </span>\n )}\n </a>\n ),\n this.cartUrl && (\n <a href={this.cartUrl} class=\"icon-btn\">\n <nano-icon name=\"light/shopping-cart\"></nano-icon>\n {this.cartCount > 0 && (\n <span class=\"gn-menu_actions-counter\">\n {this.cartCount}\n </span>\n )}\n </a>\n ),\n ],\n ]}\n\n {this.myAccData &&\n (!this.activeMyAccountSections ||\n this.activeMyAccountSections.includes('loggedin')) &&\n this.threshold >=\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.login && [\n this.myAccData.urls.login && (\n <a\n href={this.myAccData.urls.login + this.ssoRedirect}\n class=\"login-btn\"\n >\n Login / Register\n </a>\n ),\n this.myAccountUser && (\n <div class=\"user-links\">\n <button\n class={{\n 'icon-btn': true,\n 'user-links-btn': true,\n open: this.userMenuOpen,\n }}\n onMouseDown={this.onUserBtnClick}\n onKeyDown={this.onUserBtnKeyDown}\n >\n {' '}\n {this.myAccountUser.name}\n <nano-icon name=\"solid/caret-down\"></nano-icon>\n </button>\n <div\n class=\"user-links-panel\"\n tabindex=\"-1\"\n ref={(div) => (this.userLinkPanel = div)}\n >\n <div class=\"user-links-panel-content\">\n {this.loggedInNavItms.map((link) => {\n return (\n <a href={link.address} target={link.target}>\n {link.title}\n </a>\n );\n })}\n </div>\n <div class=\"user-links-panel-foot\">\n <a\n href={\n this.myAccData.urls.forgot_password +\n this.ssoRedirect\n }\n >\n Change Password\n </a>\n <a\n href={\n this.myAccData.urls.logout + this.ssoRedirect\n }\n >\n Logout\n </a>\n </div>\n </div>\n </div>\n ),\n ]}\n <span class=\"measure-ele\"></span>\n </nav>\n\n {this.threshold <\n this.THRESHOLDLIMIT - THRESHOLDBREAKS.search && (\n <div\n id=\"global-nav-search-bar\"\n class={{\n 'search-bar': true,\n show: this.searchBarShown,\n }}\n aria-expanded={this.searchBarShown ? 'true' : 'false'}\n role=\"region\"\n tabindex=\"-1\"\n ref={(div) => (this.searchBarEl = div)}\n >\n <div class=\"search-widget\">\n {this.showSearch && !!this.internalSearchIndeces.length && (\n <div>{searchWidget}</div>\n )}\n {(!this.showSearch || !this.myAccData) &&\n !!this.searchSlotLen && <slot name=\"search\" />}\n </div>\n </div>\n )}\n </div>\n </nano-sticker>\n {/* END MAIN NAV BAR */}\n\n {(this.threshold < this.THRESHOLDLIMIT - 3 ||\n this.menuFullScreen) && (\n <div\n class={{\n mask: true,\n open: this.modalOpen,\n }}\n onClick={this.menuClose}\n onTouchEnd={this.menuClose}\n ></div>\n )}\n </div>\n <div class=\"site-content\" ref={(div) => (this.siteContent = div)}>\n <slot />\n </div>\n </Host>\n );\n }\n\n // Data processing\n\n private domainFor(origin: string): string {\n if (!this.myAccData) return '';\n 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"]}
|
package/docs-json.json
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
{
|
2
|
-
"timestamp": "2022-
|
2
|
+
"timestamp": "2022-06-06T15:41:19",
|
3
3
|
"compiler": {
|
4
4
|
"name": "@stencil/core",
|
5
5
|
"version": "2.12.2",
|
@@ -2024,7 +2024,7 @@
|
|
2024
2024
|
{
|
2025
2025
|
"name": "--control-invalid-style",
|
2026
2026
|
"annotation": "prop",
|
2027
|
-
"docs": "Control box-shadow when invalid. Defaults to to var(--nano-control-focus-shadow, 0 0 0 0.1875rem #
|
2027
|
+
"docs": "Control box-shadow when invalid. Defaults to to var(--nano-control-focus-shadow, 0 0 0 0.1875rem #e4e6e8);"
|
2028
2028
|
},
|
2029
2029
|
{
|
2030
2030
|
"name": "--control-padding",
|
@@ -5692,7 +5692,7 @@
|
|
5692
5692
|
{
|
5693
5693
|
"name": "--drop-bg--invalid",
|
5694
5694
|
"annotation": "prop",
|
5695
|
-
"docs": "Default value var(--nano-input-background-color,
|
5695
|
+
"docs": "Default value var(--nano-input-background-color, white);"
|
5696
5696
|
},
|
5697
5697
|
{
|
5698
5698
|
"name": "--drop-border--invalid",
|
@@ -8751,7 +8751,7 @@
|
|
8751
8751
|
{
|
8752
8752
|
"name": "--input-bg-color--invalid",
|
8753
8753
|
"annotation": "prop",
|
8754
|
-
"docs": "defaults to var(--nano-input-background-color,
|
8754
|
+
"docs": "defaults to var(--nano-input-background-color, white);"
|
8755
8755
|
},
|
8756
8756
|
{
|
8757
8757
|
"name": "--input-border-radius",
|
@@ -8771,17 +8771,17 @@
|
|
8771
8771
|
{
|
8772
8772
|
"name": "--input-border-style--invalid",
|
8773
8773
|
"annotation": "prop",
|
8774
|
-
"docs": "defaults to var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #
|
8774
|
+
"docs": "defaults to var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #e4e6e8);"
|
8775
8775
|
},
|
8776
8776
|
{
|
8777
8777
|
"name": "--input-border-style--invalid-focus",
|
8778
8778
|
"annotation": "prop",
|
8779
|
-
"docs": "defaults to var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #
|
8779
|
+
"docs": "defaults to var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #ef4135);"
|
8780
8780
|
},
|
8781
8781
|
{
|
8782
8782
|
"name": "--input-border-width",
|
8783
8783
|
"annotation": "prop",
|
8784
|
-
"docs": "defaults to var(--input-border-width-sh, var(--nano-input-border-width,
|
8784
|
+
"docs": "defaults to var(--input-border-width-sh, var(--nano-input-border-width, 1px));"
|
8785
8785
|
},
|
8786
8786
|
{
|
8787
8787
|
"name": "--input-font-size",
|
@@ -8831,7 +8831,7 @@
|
|
8831
8831
|
{
|
8832
8832
|
"name": "--multi-input-value-border",
|
8833
8833
|
"annotation": "prop",
|
8834
|
-
"docs": "Tag / multivalue border. defaults to var(--nano-input-tag-color, #
|
8834
|
+
"docs": "Tag / multivalue border. defaults to var(--nano-input-tag-color, #badcf0);"
|
8835
8835
|
},
|
8836
8836
|
{
|
8837
8837
|
"name": "--multi-input-value-text-color",
|
@@ -11308,7 +11308,7 @@
|
|
11308
11308
|
{
|
11309
11309
|
"name": "--input-bg-color--invalid",
|
11310
11310
|
"annotation": "prop",
|
11311
|
-
"docs": "defaults to var(--nano-input-background-color,
|
11311
|
+
"docs": "defaults to var(--nano-input-background-color, white);"
|
11312
11312
|
},
|
11313
11313
|
{
|
11314
11314
|
"name": "--input-border-radius",
|
@@ -11328,17 +11328,17 @@
|
|
11328
11328
|
{
|
11329
11329
|
"name": "--input-border-style--invalid",
|
11330
11330
|
"annotation": "prop",
|
11331
|
-
"docs": "defaults to var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #
|
11331
|
+
"docs": "defaults to var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #e4e6e8);"
|
11332
11332
|
},
|
11333
11333
|
{
|
11334
11334
|
"name": "--input-border-style--invalid-focus",
|
11335
11335
|
"annotation": "prop",
|
11336
|
-
"docs": "defaults to var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #
|
11336
|
+
"docs": "defaults to var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #ef4135);"
|
11337
11337
|
},
|
11338
11338
|
{
|
11339
11339
|
"name": "--input-border-width",
|
11340
11340
|
"annotation": "prop",
|
11341
|
-
"docs": "defaults to var(--input-border-width-sh, var(--nano-input-border-width,
|
11341
|
+
"docs": "defaults to var(--input-border-width-sh, var(--nano-input-border-width, 1px));"
|
11342
11342
|
},
|
11343
11343
|
{
|
11344
11344
|
"name": "--input-font-size",
|
@@ -11388,7 +11388,7 @@
|
|
11388
11388
|
{
|
11389
11389
|
"name": "--multi-input-value-border",
|
11390
11390
|
"annotation": "prop",
|
11391
|
-
"docs": "Tag / multivalue border. defaults to var(--nano-input-tag-color, #
|
11391
|
+
"docs": "Tag / multivalue border. defaults to var(--nano-input-tag-color, #badcf0);"
|
11392
11392
|
},
|
11393
11393
|
{
|
11394
11394
|
"name": "--multi-input-value-text-color",
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@nanoporetech-digital/components",
|
3
|
-
"version": "2.
|
3
|
+
"version": "2.7.0",
|
4
4
|
"repository": {
|
5
5
|
"type": "git",
|
6
6
|
"url": "https://git.oxfordnanolabs.local/Digital/nano-components"
|
@@ -43,7 +43,8 @@
|
|
43
43
|
"prettier.base": "prettier \"./{src,jest}/**/*.{ts,tsx,js,jsx}\"",
|
44
44
|
"test": "run-p themes.prod test.all.base",
|
45
45
|
"test.ci": "run-p themes.prod test.all.base",
|
46
|
-
"test.spec": "stencil test --spec --
|
46
|
+
"test.spec": "stencil test --spec --watch --config='./stencil.config.test.ts'",
|
47
|
+
"test.e2e": "stencil test --e2e --max-workers=1 --watch --config='./stencil.config.test.ts'",
|
47
48
|
"test.spec.debug": "npx --node-arg=\"--inspect-brk\" stencil test --spec --config='./stencil.config.test.ts'",
|
48
49
|
"test.watch": "run-s themes.prod test.all.watch",
|
49
50
|
"test.all.watch": "stencil test --spec --e2e --watch --bail --config='./stencil.config.test.ts'",
|
@@ -126,5 +127,5 @@
|
|
126
127
|
"peerDependencies": {
|
127
128
|
"@stencil/core": "^2.5.0"
|
128
129
|
},
|
129
|
-
"gitHead": "
|
130
|
+
"gitHead": "219299cbd1bd259889c341a94bf42d9998786f94"
|
130
131
|
}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"file":"form-control-3bc82e3e.js","mappings":"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","names":["h"],"sources":["./src/components/form-control/form-control.tsx"],"sourcesContent":["import { FunctionalComponent, h, VNode } from '@stencil/core';\nimport { TextFieldTypes } from '../../interface';\n\ninterface FormControlWrapProps {\n rtl: boolean;\n floatLabel: boolean;\n labelId: string;\n label: string;\n moreId: string;\n type?: TextFieldTypes;\n showInlineError: boolean;\n hasHelperSlot: boolean;\n errorMessage: string;\n controlId: string;\n hasLabelSlot: boolean;\n hideLabel: boolean;\n placeholder: string;\n hasValue: boolean;\n showCharCount?: boolean;\n maxlength?: number;\n charCount?: number;\n}\n\ninterface FormControlProps {\n clearControl: boolean;\n onClearText?: () => void;\n readonly: boolean;\n disabled: boolean;\n control: HTMLNanoInputElement | HTMLNanoSelectElement;\n ref?: (elm?: HTMLElement) => void;\n endSlot?: VNode;\n endValueSlot?: VNode;\n startSlot?: VNode;\n}\n\ninterface LabelProps extends FormControlWrapProps {\n rtl: boolean;\n}\n\nconst renderLabel = ({\n label,\n hasLabelSlot,\n controlId,\n labelId,\n floatLabel,\n placeholder,\n hideLabel,\n hasValue,\n rtl,\n showCharCount,\n maxlength,\n charCount,\n}: LabelProps) => {\n if (!label && !hasLabelSlot) return;\n if (floatLabel) {\n return (\n <label class=\"placeholder-as-label\" htmlFor={controlId} id={labelId}>\n {label && label}\n {!label && hasLabelSlot && <slot name=\"label\" />}\n </label>\n );\n } else {\n return (\n <label\n class={{ label: true, 'visually-hide': hideLabel }}\n htmlFor={controlId}\n id={labelId}\n >\n <div class=\"label-placeholder\">\n {placeholder && hasValue && rtl && (\n <span class=\"placeholder\">{placeholder} / </span>\n )}\n <span class=\"labeltext\">\n {label && label}\n {!label && hasLabelSlot && <slot name=\"label\" />}\n </span>\n {placeholder && hasValue && !rtl && (\n <span class=\"placeholder\"> / {placeholder}</span>\n )}\n </div>\n {showCharCount && (\n <span class=\"charcount\">\n {maxlength\n ? maxlength - charCount + ' left'\n : charCount + ' characters'}\n </span>\n )}\n </label>\n );\n }\n};\n\nexport const FormControlWrap: FunctionalComponent<FormControlWrapProps> = (\n props: FormControlWrapProps,\n children\n) => {\n const {\n rtl,\n floatLabel,\n label,\n moreId,\n type,\n hasHelperSlot,\n showInlineError,\n errorMessage,\n } = props;\n const isLegacy = !document.head.attachShadow;\n\n return [\n !floatLabel ? renderLabel({ ...props }) : '',\n <div\n class={{\n 'has-label': label !== null && !floatLabel,\n 'has-float-label': label !== null && floatLabel,\n rtl,\n legacy: isLegacy,\n input: true,\n textarea: type === 'textarea',\n }}\n >\n {floatLabel && renderLabel({ ...props, rtl })}\n {children}\n </div>,\n showInlineError || hasHelperSlot ? (\n <div class=\"more\" id={moreId}>\n {!!showInlineError ? <div class=\"error\">{errorMessage}</div> : ''}\n <div class=\"helper\">\n <slot name=\"helper\" />\n </div>\n </div>\n ) : (\n ''\n ),\n ];\n};\n\nexport const FormControl: FunctionalComponent<FormControlProps> = (\n props: FormControlProps,\n children\n) => {\n const {\n clearControl,\n onClearText,\n readonly,\n disabled,\n control,\n ref,\n endSlot,\n endValueSlot,\n startSlot,\n } = props;\n const clickThrough = () => {\n control.setFocus();\n };\n\n return (\n <div\n class=\"native-input-wrap\"\n ref={(el) => {\n if (ref) ref(el);\n }}\n >\n <span class=\"start\">\n <slot name=\"start\" />\n {startSlot}\n </span>\n {children}\n {clearControl && !readonly && !disabled && (\n <button\n type=\"button\"\n class=\"icon input-clear-icon\"\n tabindex=\"-1\"\n onTouchStart={onClearText}\n onMouseDown={onClearText}\n >\n <nano-icon name=\"light/times\"></nano-icon>\n </button>\n )}\n <span class=\"value-end\" onClick={clickThrough}>\n <slot name=\"value-end\" />\n {endValueSlot}\n </span>\n <span class=\"end\">\n <slot name=\"end\" />\n {endSlot}\n </span>\n </div>\n );\n};\n"],"version":3}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"file":"form-control-67eeb108.js","mappings":"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","names":[],"sources":["./src/components/form-control/form-control.tsx"],"sourcesContent":["import { FunctionalComponent, h, VNode } from '@stencil/core';\nimport { TextFieldTypes } from '../../interface';\n\ninterface FormControlWrapProps {\n rtl: boolean;\n floatLabel: boolean;\n labelId: string;\n label: string;\n moreId: string;\n type?: TextFieldTypes;\n showInlineError: boolean;\n hasHelperSlot: boolean;\n errorMessage: string;\n controlId: string;\n hasLabelSlot: boolean;\n hideLabel: boolean;\n placeholder: string;\n hasValue: boolean;\n showCharCount?: boolean;\n maxlength?: number;\n charCount?: number;\n}\n\ninterface FormControlProps {\n clearControl: boolean;\n onClearText?: () => void;\n readonly: boolean;\n disabled: boolean;\n control: HTMLNanoInputElement | HTMLNanoSelectElement;\n ref?: (elm?: HTMLElement) => void;\n endSlot?: VNode;\n endValueSlot?: VNode;\n startSlot?: VNode;\n}\n\ninterface LabelProps extends FormControlWrapProps {\n rtl: boolean;\n}\n\nconst renderLabel = ({\n label,\n hasLabelSlot,\n controlId,\n labelId,\n floatLabel,\n placeholder,\n hideLabel,\n hasValue,\n rtl,\n showCharCount,\n maxlength,\n charCount,\n}: LabelProps) => {\n if (!label && !hasLabelSlot) return;\n if (floatLabel) {\n return (\n <label class=\"placeholder-as-label\" htmlFor={controlId} id={labelId}>\n {label && label}\n {!label && hasLabelSlot && <slot name=\"label\" />}\n </label>\n );\n } else {\n return (\n <label\n class={{ label: true, 'visually-hide': hideLabel }}\n htmlFor={controlId}\n id={labelId}\n >\n <div class=\"label-placeholder\">\n {placeholder && hasValue && rtl && (\n <span class=\"placeholder\">{placeholder} / </span>\n )}\n <span class=\"labeltext\">\n {label && label}\n {!label && hasLabelSlot && <slot name=\"label\" />}\n </span>\n {placeholder && hasValue && !rtl && (\n <span class=\"placeholder\"> / {placeholder}</span>\n )}\n </div>\n {showCharCount && (\n <span class=\"charcount\">\n {maxlength\n ? maxlength - charCount + ' left'\n : charCount + ' characters'}\n </span>\n )}\n </label>\n );\n }\n};\n\nexport const FormControlWrap: FunctionalComponent<FormControlWrapProps> = (\n props: FormControlWrapProps,\n children\n) => {\n const {\n rtl,\n floatLabel,\n label,\n moreId,\n type,\n hasHelperSlot,\n showInlineError,\n errorMessage,\n } = props;\n const isLegacy = !document.head.attachShadow;\n\n return [\n !floatLabel ? renderLabel({ ...props }) : '',\n <div\n class={{\n 'has-label': label !== null && !floatLabel,\n 'has-float-label': label !== null && floatLabel,\n rtl,\n legacy: isLegacy,\n input: true,\n textarea: type === 'textarea',\n }}\n >\n {floatLabel && renderLabel({ ...props, rtl })}\n {children}\n </div>,\n showInlineError || hasHelperSlot ? (\n <div class=\"more\" id={moreId}>\n {!!showInlineError ? <div class=\"error\">{errorMessage}</div> : ''}\n <div class=\"helper\">\n <slot name=\"helper\" />\n </div>\n </div>\n ) : (\n ''\n ),\n ];\n};\n\nexport const FormControl: FunctionalComponent<FormControlProps> = (\n props: FormControlProps,\n children\n) => {\n const {\n clearControl,\n onClearText,\n readonly,\n disabled,\n control,\n ref,\n endSlot,\n endValueSlot,\n startSlot,\n } = props;\n const clickThrough = () => {\n control.setFocus();\n };\n\n return (\n <div\n class=\"native-input-wrap\"\n ref={(el) => {\n if (ref) ref(el);\n }}\n >\n <span class=\"start\">\n <slot name=\"start\" />\n {startSlot}\n </span>\n {children}\n {clearControl && !readonly && !disabled && (\n <button\n type=\"button\"\n class=\"icon input-clear-icon\"\n tabindex=\"-1\"\n onTouchStart={onClearText}\n onMouseDown={onClearText}\n >\n <nano-icon name=\"light/times\"></nano-icon>\n </button>\n )}\n <span class=\"value-end\" onClick={clickThrough}>\n <slot name=\"value-end\" />\n {endValueSlot}\n </span>\n <span class=\"end\">\n <slot name=\"end\" />\n {endSlot}\n </span>\n </div>\n );\n};\n"],"version":3}
|
@@ -1,5 +0,0 @@
|
|
1
|
-
/*!
|
2
|
-
* Web Components for Nanopore digital Web Apps
|
3
|
-
*/
|
4
|
-
import{h}from"./index-5f8d16e7.js";var renderLabel=function(a){var l=a.label,e=a.hasLabelSlot,r=a.controlId,t=a.labelId,n=a.floatLabel,s=a.placeholder,o=a.hideLabel,c=a.hasValue,i=a.rtl,d=a.showCharCount,u=a.maxlength,b=a.charCount;if(!l&&!e)return;if(n){return h("label",{class:"placeholder-as-label",htmlFor:r,id:t},l&&l,!l&&e&&h("slot",{name:"label"}))}else{return h("label",{class:{label:true,"visually-hide":o},htmlFor:r,id:t},h("div",{class:"label-placeholder"},s&&c&&i&&h("span",{class:"placeholder"},s," / "),h("span",{class:"labeltext"},l&&l,!l&&e&&h("slot",{name:"label"})),s&&c&&!i&&h("span",{class:"placeholder"}," / ",s)),d&&h("span",{class:"charcount"},u?u-b+" left":b+" characters"))}};var FormControlWrap=function(a,l){var e=a.rtl,r=a.floatLabel,t=a.label,n=a.moreId,s=a.type,o=a.hasHelperSlot,c=a.showInlineError,i=a.errorMessage;var d=!document.head.attachShadow;return[!r?renderLabel(Object.assign({},a)):"",h("div",{class:{"has-label":t!==null&&!r,"has-float-label":t!==null&&r,rtl:e,legacy:d,input:true,textarea:s==="textarea"}},r&&renderLabel(Object.assign(Object.assign({},a),{rtl:e})),l),c||o?h("div",{class:"more",id:n},!!c?h("div",{class:"error"},i):"",h("div",{class:"helper"},h("slot",{name:"helper"}))):""]};var FormControl=function(a,l){var e=a.clearControl,r=a.onClearText,t=a.readonly,n=a.disabled,s=a.control,o=a.ref,c=a.endSlot,i=a.endValueSlot,d=a.startSlot;var u=function(){s.setFocus()};return h("div",{class:"native-input-wrap",ref:function(a){if(o)o(a)}},h("span",{class:"start"},h("slot",{name:"start"}),d),l,e&&!t&&!n&&h("button",{type:"button",class:"icon input-clear-icon",tabindex:"-1",onTouchStart:r,onMouseDown:r},h("nano-icon",{name:"light/times"})),h("span",{class:"value-end",onClick:u},h("slot",{name:"value-end"}),i),h("span",{class:"end"},h("slot",{name:"end"}),c))};export{FormControlWrap as F,FormControl as a};
|
5
|
-
//# sourceMappingURL=form-control-67eeb108.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["src/components/form-control/form-control.tsx"],"names":["renderLabel","_a","label","hasLabelSlot","controlId","labelId","floatLabel","placeholder","hideLabel","hasValue","rtl","showCharCount","maxlength","charCount","h","class","htmlFor","id","name","visually-hide","FormControlWrap","props","children","moreId","type","hasHelperSlot","showInlineError","errorMessage","isLegacy","document","head","attachShadow","Object","assign","has-label","has-float-label","legacy","input","textarea","FormControl","clearControl","onClearText","readonly","disabled","control","ref","endSlot","endValueSlot","startSlot","clickThrough","setFocus","el","tabindex","onTouchStart","onMouseDown","onClick"],"mappings":"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","sourcesContent":["import { FunctionalComponent, h, VNode } from '@stencil/core';\nimport { TextFieldTypes } from '../../interface';\n\ninterface FormControlWrapProps {\n rtl: boolean;\n floatLabel: boolean;\n labelId: string;\n label: string;\n moreId: string;\n type?: TextFieldTypes;\n showInlineError: boolean;\n hasHelperSlot: boolean;\n errorMessage: string;\n controlId: string;\n hasLabelSlot: boolean;\n hideLabel: boolean;\n placeholder: string;\n hasValue: boolean;\n showCharCount?: boolean;\n maxlength?: number;\n charCount?: number;\n}\n\ninterface FormControlProps {\n clearControl: boolean;\n onClearText?: () => void;\n readonly: boolean;\n disabled: boolean;\n control: HTMLNanoInputElement | HTMLNanoSelectElement;\n ref?: (elm?: HTMLElement) => void;\n endSlot?: VNode;\n endValueSlot?: VNode;\n startSlot?: VNode;\n}\n\ninterface LabelProps extends FormControlWrapProps {\n rtl: boolean;\n}\n\nconst renderLabel = ({\n label,\n hasLabelSlot,\n controlId,\n labelId,\n floatLabel,\n placeholder,\n hideLabel,\n hasValue,\n rtl,\n showCharCount,\n maxlength,\n charCount,\n}: LabelProps) => {\n if (!label && !hasLabelSlot) return;\n if (floatLabel) {\n return (\n <label class=\"placeholder-as-label\" htmlFor={controlId} id={labelId}>\n {label && label}\n {!label && hasLabelSlot && <slot name=\"label\" />}\n </label>\n );\n } else {\n return (\n <label\n class={{ label: true, 'visually-hide': hideLabel }}\n htmlFor={controlId}\n id={labelId}\n >\n <div class=\"label-placeholder\">\n {placeholder && hasValue && rtl && (\n <span class=\"placeholder\">{placeholder} / </span>\n )}\n <span class=\"labeltext\">\n {label && label}\n {!label && hasLabelSlot && <slot name=\"label\" />}\n </span>\n {placeholder && hasValue && !rtl && (\n <span class=\"placeholder\"> / {placeholder}</span>\n )}\n </div>\n {showCharCount && (\n <span class=\"charcount\">\n {maxlength\n ? maxlength - charCount + ' left'\n : charCount + ' characters'}\n </span>\n )}\n </label>\n );\n }\n};\n\nexport const FormControlWrap: FunctionalComponent<FormControlWrapProps> = (\n props: FormControlWrapProps,\n children\n) => {\n const {\n rtl,\n floatLabel,\n label,\n moreId,\n type,\n hasHelperSlot,\n showInlineError,\n errorMessage,\n } = props;\n const isLegacy = !document.head.attachShadow;\n\n return [\n !floatLabel ? renderLabel({ ...props }) : '',\n <div\n class={{\n 'has-label': label !== null && !floatLabel,\n 'has-float-label': label !== null && floatLabel,\n rtl,\n legacy: isLegacy,\n input: true,\n textarea: type === 'textarea',\n }}\n >\n {floatLabel && renderLabel({ ...props, rtl })}\n {children}\n </div>,\n showInlineError || hasHelperSlot ? (\n <div class=\"more\" id={moreId}>\n {!!showInlineError ? <div class=\"error\">{errorMessage}</div> : ''}\n <div class=\"helper\">\n <slot name=\"helper\" />\n </div>\n </div>\n ) : (\n ''\n ),\n ];\n};\n\nexport const FormControl: FunctionalComponent<FormControlProps> = (\n props: FormControlProps,\n children\n) => {\n const {\n clearControl,\n onClearText,\n readonly,\n disabled,\n control,\n ref,\n endSlot,\n endValueSlot,\n startSlot,\n } = props;\n const clickThrough = () => {\n control.setFocus();\n };\n\n return (\n <div\n class=\"native-input-wrap\"\n ref={(el) => {\n if (ref) ref(el);\n }}\n >\n <span class=\"start\">\n <slot name=\"start\" />\n {startSlot}\n </span>\n {children}\n {clearControl && !readonly && !disabled && (\n <button\n type=\"button\"\n class=\"icon input-clear-icon\"\n tabindex=\"-1\"\n onTouchStart={onClearText}\n onMouseDown={onClearText}\n >\n <nano-icon name=\"light/times\"></nano-icon>\n </button>\n )}\n <span class=\"value-end\" onClick={clickThrough}>\n <slot name=\"value-end\" />\n {endValueSlot}\n </span>\n <span class=\"end\">\n <slot name=\"end\" />\n {endSlot}\n </span>\n </div>\n );\n};\n"]}
|
@@ -1,5 +0,0 @@
|
|
1
|
-
/*!
|
2
|
-
* Web Components for Nanopore digital Web Apps
|
3
|
-
*/
|
4
|
-
import{r as n,c as t,h as i,e as a,g as e}from"./p-ab5813a7.js";import{r as o}from"./p-289aa03f.js";import{F as s,a as r}from"./p-672e5547.js";import{a as l}from"./p-1da5f8df.js";import{c as p}from"./p-b619500f.js";import{c as d}from"./p-d99437a6.js";const h='.sc-nano-input-h{-webkit-box-sizing:border-box;box-sizing:border-box}*.sc-nano-input,*.sc-nano-input::before,*.sc-nano-input::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden].sc-nano-input{display:none !important}label.sc-nano-input,.more.sc-nano-input,.error.sc-nano-input,.helper.sc-nano-input{display:block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}label.visually-hide.sc-nano-input,.more.visually-hide.sc-nano-input,.error.visually-hide.sc-nano-input,.helper.visually-hide.sc-nano-input{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.placeholder-as-label.sc-nano-input{padding-left:var(--padding-start);padding-right:0;padding-top:0;padding-bottom:0;color:var(--label-color);position:absolute;font-size:1.4em;-webkit-transform:translateY(-50%);transform:translateY(-50%);-webkit-transform-origin:top left;transform-origin:top left;top:50%;-webkit-transition:0.125s ease-in;transition:0.125s ease-in;opacity:0.7}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.placeholder-as-label.sc-nano-input{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:0;padding-inline-end:0}}.is-invalid.sc-nano-input-h .placeholder-as-label.sc-nano-input{color:var(--invalid-msg-color)}.has-value.sc-nano-input-h .placeholder-as-label.sc-nano-input{-webkit-transform:translateY(-120%);transform:translateY(-120%);font-size:0.9em}.textarea.sc-nano-input .placeholder-as-label.sc-nano-input{top:50%}.has-focus.sc-nano-input-h .textarea.sc-nano-input .placeholder-as-label.sc-nano-input{top:0;-webkit-transform:translateY(38%);transform:translateY(38%)}.has-value.sc-nano-input-h .textarea.sc-nano-input .placeholder-as-label.sc-nano-input{top:0;-webkit-transform:translateY(38%);transform:translateY(38%)}.label.sc-nano-input{color:var(--label-color);font-size:var(--label-font-size);padding-bottom:var(--padding-bottom);line-height:1;display:-webkit-box;display:-ms-flexbox;display:flex}.label.sc-nano-input .label-placeholder.sc-nano-input{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.label.sc-nano-input .placeholder.sc-nano-input{margin-left:0;margin-right:5px;margin-top:0;margin-bottom:0;opacity:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-transition:0.3s ease opacity;transition:0.3s ease opacity;font-size:0.9em}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.label.sc-nano-input .placeholder.sc-nano-input{margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:5px;margin-inline-end:5px}}.label.sc-nano-input .charcount.sc-nano-input{margin-left:auto;margin-right:0;margin-top:0;margin-bottom:0;font-size:0.9em;opacity:0.5}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.label.sc-nano-input .charcount.sc-nano-input{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:0;margin-inline-end:0}}.has-value.sc-nano-input-h .label.sc-nano-input .placeholder.sc-nano-input{opacity:0.5}.has-focus.sc-nano-input-h .label.sc-nano-input{color:var(--label-color--focus)}.is-invalid.sc-nano-input-h .label.sc-nano-input{color:var(--label-color--invalid)}.more.sc-nano-input{height:1em;margin-left:3px;margin-right:0;margin-top:4px;margin-bottom:var(--padding-bottom);position:relative}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.more.sc-nano-input{margin-left:unset;margin-right:unset;-webkit-margin-start:3px;margin-inline-start:3px;-webkit-margin-end:0;margin-inline-end:0}}.helper.sc-nano-input,.error.sc-nano-input{top:0;left:0;position:absolute;font-size:var(--invalid-msg-font-size);line-height:1.2;-webkit-transition:0.3s ease-out opacity;transition:0.3s ease-out opacity}.helper.sc-nano-input{font-style:italic;color:var(--help-msg-color)}[show-inline-error].sc-nano-input-h:not([show-inline-error=false]).is-invalid .helper.sc-nano-input{opacity:0}.error.sc-nano-input{opacity:0;color:var(--invalid-msg-color);font-stretch:condensed}.is-invalid.sc-nano-input-h .error.sc-nano-input{opacity:1}.input.sc-nano-input{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;border-radius:var(--input-border-radius);width:100%;padding:0 !important;position:relative;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;background:var(--input-bg-color);border:var(--input-border-style);border-width:var(--input-border-width);font-size:var(--input-font-size)}.has-focus.sc-nano-input-h .input.sc-nano-input{background:var(--input-bg-color--focus);border:var(--input-border-style--focus);border-width:var(--input-border-width)}.is-invalid.sc-nano-input-h .input.sc-nano-input{background:var(--input-bg-color--invalid);border:var(--input-border-style--invalid);border-width:var(--input-border-width)}.is-invalid.has-focus.sc-nano-input-h .input.sc-nano-input{background:var(--input-bg-color--invalid);border:var(--input-border-style--invalid-focus);border-width:var(--input-border-width)}.native-input-wrap.sc-nano-input{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex:1;flex:1}.input-clear-icon.sc-nano-input,.end.sc-nano-input,.start.sc-nano-input,.value-end.sc-nano-input{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;background-position:center;--nano-icon-size:1.4em;font-size:1em;border:0;outline:none;background-color:transparent;background-repeat:no-repeat;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:auto}.has-float-label.sc-nano-input .start.sc-nano-input{display:none}.start.sc-nano-input-s>*,.start .sc-nano-input-s>*,.end.sc-nano-input-s>*,.end .sc-nano-input-s>*,.value-end.sc-nano-input-s>*,.value-end .sc-nano-input-s>*,.value-end.sc-nano-input *.sc-nano-input{--nano-icon-size:1.4em;font-size:1em;padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:0;padding-bottom:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:100%}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.start.sc-nano-input-s>*,.start .sc-nano-input-s>*,.end.sc-nano-input-s>*,.end .sc-nano-input-s>*,.value-end.sc-nano-input-s>*,.value-end .sc-nano-input-s>*,.value-end.sc-nano-input *.sc-nano-input{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}.sc-nano-input-h[disabled]:not([disabled=false]) .start.sc-nano-input-s>*,.sc-nano-input-h[disabled]:not([disabled=false]) .start .sc-nano-input-s>*,.sc-nano-input-h[disabled]:not([disabled=false]) .end.sc-nano-input-s>*,.sc-nano-input-h[disabled]:not([disabled=false]) .end .sc-nano-input-s>*,.sc-nano-input-h[disabled]:not([disabled=false]) .value-end.sc-nano-input-s>*,.sc-nano-input-h[disabled]:not([disabled=false]) .value-end .sc-nano-input-s>*,[disabled].sc-nano-input-h:not([disabled=false]) .value-end.sc-nano-input *.sc-nano-input{pointer-events:none}.value-end.sc-nano-input-s>*,.value-end .sc-nano-input-s>*,.value-end.sc-nano-input *.sc-nano-input{pointer-events:none}.input-clear-icon.sc-nano-input{color:var(--clear-btn-color);padding:0;opacity:0;width:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;overflow:hidden}.is-invalid.sc-nano-input-h .input-clear-icon.sc-nano-input{color:var(--clear-btn-color--invalid)}.has-value.sc-nano-input-h .input-clear-icon.sc-nano-input{padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:0;padding-bottom:0;opacity:1;width:auto}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.has-value.sc-nano-input-h .input-clear-icon.sc-nano-input{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}.input-clear-icon.sc-nano-input:hover{color:var(--clear-btn-color--hover)}.sc-nano-input-h{--placeholder-color:var(--nano-input-placeholder-color, initial);--placeholder-font-style:var(--nano-input-placeholder-style, initial);--placeholder-font-weight:var(--nano-input-placeholder-weight, initial);--placeholder-opacity:var(--nano-input-placeholder-opacity, 0.5);--padding-top:var(--nano-input-padding-top, var(--nano-input-padding, 8px));--padding-end:var(--nano-input-padding-end, var(--nano-input-padding, 8px));--padding-bottom:var(--nano-input-padding-bottom, var(--nano-input-padding, 8px));--padding-start:var(--nano-input-padding-start, var(--nano-input-padding, 8px));--color-invalid:var(--nano-color-danger-rgb, 239, 65, 53);--color--focus-rgb:var(\n --nano-color-base-rgb,\n var(--nano-color-primary-rgb, 0, 116, 149)\n );--input-font-size:var(--nano-input-font-size, 0.87em);--input-text-color:var(--nano-input-text-color, #4a4a4a);--input-border-width:var(--input-border-width-sh, var(--nano-input-border-width, 2px));--input-border-color:var(--nano-input-border-color, #e4e6e8);--input-border-radius:var(--nano-input-border-radius, 0);--input-border-style:var(--nano-input-border-style, solid) var(--nano-input-border-color, #e4e6e8);--input-border-style--focus:var(--nano-input-border-style, solid) var(--nano-input-border-color--focus, #90c6e7);--input-border-style--invalid:var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #fac6c3);--input-border-style--invalid-focus:var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #f36d64);--input-bg-color:var(--nano-input-background-color, #fff);--input-bg-color--focus:var(--input-bg-color);--input-bg-color--invalid:var(--nano-input-background-color, #fee8de);--invalid-msg-color:rgba(var(--color-invalid), 1);--invalid-msg-font-size:var(--nano-input-help-font-size, 0.75em);--help-msg-color:var(--nano-input-help-color, #616d6e);--clear-btn-color:var(--nano-clear-btn-color, rgba(0, 0, 0, 0.3));--clear-btn-color--hover:rgba(var(--color--focus-rgb), 1);--clear-btn-color--invalid:rgba(var(--color-invalid), 1);--label-color:var(--nano-input-label-color, "currentColor");--label-color--focus:var(--label-color);--label-color--invalid:var(--nano-input-label-color-invalid, "currentColor");--label-font-size:var(--nano-input-label-color, 1em);--multi-input-value-bg:var(--nano-input-tag-bg, 186, 220, 240);--multi-input-value-text-color:var(--nano-input-tag-color, #455556);--multi-input-value-border:var(--nano-input-tag-color, #90c6e7);position:relative;width:100%;padding:0 !important;color:currentColor;display:inline-block}.nano-color.sc-nano-input-h{color:var(--nano-color-base);--input-border-style--focus:var(--nano-input-border-style, solid) var(--nano-color-tint, var(--nano-color-primary-tint, #2689a5))}[disabled].sc-nano-input-h:not([disabled=false]){opacity:0.7}.native-input.sc-nano-input{border-radius:var(--input-border-radius);padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:0;padding-bottom:0;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;text-overflow:ellipsis;color:var(--input-text-color);display:inline-block;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;max-height:100%;border:0;outline:none;background:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;line-height:2.5em;min-height:2.5em;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;resize:none;overflow:hidden}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.native-input.sc-nano-input{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}.native-input[disabled].sc-nano-input{opacity:0.4}.native-input.sc-nano-input::-webkit-input-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity);line-height:2.5em;min-height:2.5em}.native-input.sc-nano-input::-moz-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity);line-height:2.5em;min-height:2.5em}.native-input.sc-nano-input:-ms-input-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity);line-height:2.5em;min-height:2.5em}.native-input.sc-nano-input::-ms-input-placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity);line-height:2.5em;min-height:2.5em}.native-input.sc-nano-input::placeholder{color:var(--placeholder-color);font-family:inherit;font-style:var(--placeholder-font-style);font-weight:var(--placeholder-font-weight);opacity:var(--placeholder-opacity);line-height:2.5em;min-height:2.5em}.native-input.sc-nano-input::-moz-placeholder{line-height:2.8em;text-overflow:ellipsis}.native-input.sc-nano-input:-webkit-autofill{background-color:transparent}.native-input.sc-nano-input::-webkit-search-decoration,.native-input.sc-nano-input::-webkit-search-cancel-button,.native-input.sc-nano-input::-webkit-search-results-button,.native-input.sc-nano-input::-webkit-search-results-decoration{-webkit-appearance:none;appearance:none}.native-input.sc-nano-input:invalid{-webkit-box-shadow:none;box-shadow:none}.native-input.sc-nano-input::-ms-clear,.native-input.sc-nano-input::-ms-reveal{display:none}.native-input.resizable.sc-nano-input{resize:vertical;overflow:auto}.textarea.sc-nano-input .native-input.sc-nano-input{line-height:1.5em;padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);white-space:pre-wrap}.textarea.sc-nano-input .native-input.sc-nano-input::-webkit-input-placeholder{line-height:1.5em}.textarea.sc-nano-input .native-input.sc-nano-input::-moz-placeholder{line-height:1.5em}.textarea.sc-nano-input .native-input.sc-nano-input:-ms-input-placeholder{line-height:1.5em}.textarea.sc-nano-input .native-input.sc-nano-input::-ms-input-placeholder{line-height:1.5em}.textarea.sc-nano-input .native-input.sc-nano-input::placeholder{line-height:1.5em}.has-float-label.sc-nano-input .native-input.sc-nano-input{padding-top:1.4em}.has-float-label.textarea.sc-nano-input .native-input.sc-nano-input{padding-top:1.8em}.legacy.sc-nano-input .native-input.sc-nano-input{-webkit-box-sizing:content-box;box-sizing:content-box}[readonly].sc-nano-input-h:not([readonly=false]) .native-input.sc-nano-input{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.has-focus.sc-nano-input-h .placeholder-as-label.sc-nano-input{-webkit-transform:translateY(-120%);transform:translateY(-120%);font-size:0.9em}';let c=0;let u=class{constructor(i){n(this,i);this.nanoInput=t(this,"nanoInput",7);this.nanoChange=t(this,"nanoChange",7);this.nanoBlur=t(this,"nanoBlur",7);this.nanoFocus=t(this,"nanoFocus",7);this.nanoDidLoad=t(this,"nanoDidLoad",7);this.nanoDidUnload=t(this,"nanoDidUnload",7);this.nanoValidate=t(this,"nanoValidate",7);this.inputId=`nano-input-${c++}`;this.didBlurAfterEdit=false;this.rtl=false;this.charCount=0;this.hasRendered=false;this.hasFocus=false;this.hasLabelSlot=false;this.hasHelperSlot=false;this.errorMessage="";this.datalist=null;this._invalid=false;this.autocapitalise="none";this.autocomplete="off";this.autocorrect="off";this.autofocus=false;this.clearInput=false;this.debounce=0;this.disabled=false;this.validateOn="submit";this.showInlineError=true;this.hideLabel=false;this.floatLabel=false;this.name=this.inputId;this.readonly=false;this.required=false;this.spellcheck=false;this.type="text";this.value="";this.resize="auto";this.rows=2;this.showCharCount=false;this.validate=n=>{if(this.validateOn==="submitThenDirty")this.validateOn="dirty";if(!this.nativeInput.validity.valid){if(this.showInlineError){if(n)n.preventDefault();this.errorMessage=this.nativeInput.validationMessage}this._invalid=true}else this._invalid=false;this.nanoValidate.emit({isValid:!this._invalid,errorMessage:this.nativeInput.validationMessage,originalEvent:n})};this.onInput=n=>{const t=n.target;if(t)this.value=t.value||"";this.nanoInput.emit(n)};this.onBlur=()=>{this.hasFocus=false;this.focusChanged();if(this.validateOn==="dirty")this.validate();this.nanoBlur.emit()};this.onFocus=()=>{this.hasFocus=true;this.focusChanged();this.nanoFocus.emit()};this.onKeydown=()=>{if(this.shouldClearOnEdit()){if(this.didBlurAfterEdit&&this.hasValue()){this.clearTextInput()}this.didBlurAfterEdit=false}};this.clearTextInput=n=>{if(this.clearInput&&!this.readonly&&!this.disabled&&n){n.preventDefault();n.stopPropagation()}this.value="";this.nativeInput.value="";const t=new window.Event("change");this.nativeInput.dispatchEvent(t)}}get nativeInputWrap(){return this._nativeInputWrap}set nativeInputWrap(n){if(this._nativeInputWrap===n)return;this._nativeInputWrap=n;this.setDataListOpts()}setDataListOpts(){if(!this.datalist)return;const n=this.datalist.dropDownConfig||{};this.datalist.dropDownConfig=Object.assign(Object.assign({},n),{skidding:-1,tetherTo:this.nativeInputWrap})}get invalid(){return this._invalid}shouldValidate(){if(!this.hasRendered)return;setTimeout((()=>{if(this.validateOn==="dirty")this.validate()}),20)}valueChanged(){this.nanoChange.emit({value:this.value});this.charCount=this.value.length;if(this.type==="textarea"&&this.resize==="auto"){this.nativeInput.style.height="auto";if(this.value.length)this.nativeInput.style.height=this.nativeInput.scrollHeight+"px"}setTimeout((()=>{if(this.validateOn==="dirty")this.validate()}),20)}debounceChanged(){this.nanoChange=l(this.nanoChange,this.debounce)}async reportValidity(n){if(n)this.validate();return{isValid:!this._invalid,errorMessage:this.nativeInput.validationMessage}}async setFocus(){if(this.nativeInput){this.nativeInput.focus();this.nativeInput.click()}}getInputElement(){return Promise.resolve(this.nativeInput)}async showError(n){if(this.nativeInput){this.nativeInput.setCustomValidity(n);this.validate()}}onReset(n){const t=this.form?document.querySelector("#"+this.form):this.el.closest("form");if(!t||n.target!==this.el.closest("form"))return;this.value=""}handleBlur(n){if(!this.hasFocus)return;const t=n;let i;o((()=>{if(t.key){if(t.key!=="Tab")return;i=document.activeElement}else i=n.target;if(p(this.el.tagName.toLowerCase(),i)!==this.el){this.onBlur()}}))}shouldClearOnEdit(){const{type:n,clearOnEdit:t}=this;return t===undefined?n==="password":t}getValue(){return this.value||""}focusChanged(){if(!this.hasFocus&&this.shouldClearOnEdit()&&this.hasValue()){this.didBlurAfterEdit=true}}hasValue(){return this.getValue().length>0}slotChangeObserver(){if(this.mo)this.mo.disconnect();const n=this.mo=new MutationObserver((()=>this.processSlottedContent()));n.observe(this.el,{childList:true,subtree:true})}processSlottedContent(){this.hasLabelSlot=!!this.el.querySelectorAll('[slot="label"]');this.hasHelperSlot=!!this.el.querySelector('[slot="helper"]');this.datalist=this.el.querySelector("nano-datalist:not([slot])");if(!!this.el.querySelector('[slot="inline-button"]')){console.warn("The `inline-button` slot was renamed to `end` in v2 - please update your code",this.el)}if(!!this.el.querySelector('[slot="legacy"]')){console.warn("The `legacy` slot has been removed. Please update your code",this.el)}}connectedCallback(){this.debounceChanged();{this.el.dispatchEvent(new CustomEvent("nanoDidLoad",{detail:this.el}))}}disconnectedCallback(){{document.dispatchEvent(new CustomEvent("nanoDidUnload",{detail:this.el}))}if(this.mo)this.mo.disconnect()}componentDidLoad(){this.slotChangeObserver();this.hasRendered=true;if(this.autofocus)setTimeout((n=>this.setFocus()),300)}componentWillLoad(){this.processSlottedContent()}render(){const n=this.getValue();const t=this.inputId+"-lbl";const e=this.showInlineError||this.hasHelperSlot?this.inputId+"-more":"";this.rtl=this.el.ownerDocument.dir==="rtl";const o=(({el:n,floatLabel:t,label:i,errorMessage:a,type:e,showInlineError:o,hasHelperSlot:s,hasLabelSlot:r,hideLabel:l,placeholder:p,maxlength:d,charCount:h,showCharCount:c,rtl:u})=>({el:n,floatLabel:t,label:i,errorMessage:a,type:e,showInlineError:o,hasHelperSlot:s,hasLabelSlot:r,hideLabel:l,placeholder:p,maxlength:d,charCount:h,showCharCount:c,rtl:u}))(this);const l=Object.assign(Object.assign({},o),{labelId:t,moreId:e,hasValue:this.hasValue(),controlId:this.inputId});const p=(({clearInput:n,readonly:t,disabled:i})=>({clearInput:n,readonly:t,disabled:i,clearControl:this.clearInput}))(this);return i(a,{"aria-disabled":this.disabled?"true":null,dir:this.rtl?"rtl":null,class:Object.assign(Object.assign({},d(this.color)),{"has-value":this.hasValue(),"has-focus":this.hasFocus,"is-invalid":this._invalid})},i(s,Object.assign({},l),i(r,Object.assign({},p,{onClearText:this.clearTextInput,control:this.el,ref:n=>this.nativeInputWrap=n}),this.type!=="textarea"&&i("input",{id:this.inputId,class:"native-input",ref:n=>this.nativeInput=n,"aria-labelledby":t+" "+e,disabled:this.disabled,accept:this.accept,autoCapitalize:this.autocapitalise,autoComplete:this.autocomplete,autoCorrect:this.autocorrect,autoFocus:this.autofocus,inputMode:this.inputmode,form:this.form,min:this.min,max:this.max,minLength:this.minlength,maxLength:this.maxlength,multiple:this.multiple,name:this.name,pattern:this.pattern,placeholder:!this.floatLabel&&this.placeholder?this.placeholder:"",readOnly:this.readonly,required:this.required,spellcheck:this.spellcheck,step:this.step,size:this.size,type:this.type,value:n,onInput:this.onInput,onChange:this.onInput,onFocus:this.onFocus,onKeyDown:this.onKeydown,onInvalid:this.validate}),this.type==="textarea"&&i("textarea",{rows:this.floatLabel?1:this.rows,id:this.inputId,class:{"native-input":true,resizable:this.resize==="true"},ref:n=>this.nativeInput=n,"aria-labelledby":t+" "+e,disabled:this.disabled,autoCapitalize:this.autocapitalise,autoCorrect:this.autocorrect,autoFocus:this.autofocus,inputMode:this.inputmode,form:this.form,minLength:this.minlength,maxLength:this.maxlength,name:this.name,placeholder:!this.floatLabel&&this.placeholder?this.placeholder:"",readOnly:this.readonly,required:this.required,spellcheck:this.spellcheck,value:n,onInput:this.onInput,onChange:this.onInput,onFocus:this.onFocus,onKeyDown:this.onKeydown,onInvalid:this.validate})),i("slot",null)))}get el(){return e(this)}static get watchers(){return{datalist:["setDataListOpts"],minlength:["shouldValidate"],maxlength:["shouldValidate"],min:["shouldValidate"],max:["shouldValidate"],required:["shouldValidate"],disabled:["shouldValidate"],validateOn:["shouldValidate"],readonly:["shouldValidate"],pattern:["shouldValidate"],inputmode:["shouldValidate"],value:["valueChanged"],debounce:["debounceChanged"]}}};u.style=h;export{u as nano_input};
|
5
|
-
//# sourceMappingURL=p-2559e9c1.entry.js.map
|