@nanoporetech-digital/components 2.10.0 → 2.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/cjs/nano-datalist_3.cjs.entry.js +1 -0
  3. package/dist/cjs/nano-datalist_3.cjs.entry.js.map +1 -1
  4. package/dist/cjs/nano-field-validator.cjs.entry.js +3 -1
  5. package/dist/cjs/nano-field-validator.cjs.entry.js.map +1 -1
  6. package/dist/cjs/nano-input.cjs.entry.js +1 -1
  7. package/dist/cjs/nano-input.cjs.entry.js.map +1 -1
  8. package/dist/cjs/nano-nav-item_2.cjs.entry.js +13 -2
  9. package/dist/cjs/nano-nav-item_2.cjs.entry.js.map +1 -1
  10. package/dist/collection/components/accordion/accordion.js +1 -1
  11. package/dist/collection/components/alert/alert.js +1 -1
  12. package/dist/collection/components/algolia/algolia-filter.js +2 -2
  13. package/dist/collection/components/algolia/algolia-input.js +5 -5
  14. package/dist/collection/components/algolia/algolia-results.js +1 -1
  15. package/dist/collection/components/algolia/algolia.js +6 -6
  16. package/dist/collection/components/checkbox/checkbox-group.js +2 -2
  17. package/dist/collection/components/checkbox/checkbox.js +3 -3
  18. package/dist/collection/components/datalist/datalist.js +2 -1
  19. package/dist/collection/components/datalist/datalist.js.map +1 -1
  20. package/dist/collection/components/date-input/date-input.js +7 -7
  21. package/dist/collection/components/date-picker/date-picker.js +5 -5
  22. package/dist/collection/components/details/details.js +1 -1
  23. package/dist/collection/components/dialog/dialog.js +1 -1
  24. package/dist/collection/components/dropdown/dropdown.js +1 -1
  25. package/dist/collection/components/field-validator/field-validator.js +3 -1
  26. package/dist/collection/components/field-validator/field-validator.js.map +1 -1
  27. package/dist/collection/components/file-upload/file-upload.js +4 -4
  28. package/dist/collection/components/global-nav/global-nav.js +4 -4
  29. package/dist/collection/components/grid/grid-item.js +1 -1
  30. package/dist/collection/components/icon/icon.js +1 -1
  31. package/dist/collection/components/input/input.css +1 -0
  32. package/dist/collection/components/input/input.js +5 -5
  33. package/dist/collection/components/nav-item/nav-item.js +4 -4
  34. package/dist/collection/components/range/range.js +4 -4
  35. package/dist/collection/components/resize-observe/resize-observe.js +1 -1
  36. package/dist/collection/components/select/select.css +2 -1
  37. package/dist/collection/components/select/select.js +19 -8
  38. package/dist/collection/components/select/select.js.map +1 -1
  39. package/dist/collection/components/slides/slides.js +7 -7
  40. package/dist/collection/components/tabs/tab-group.js +2 -2
  41. package/dist/components/datalist.js +1 -0
  42. package/dist/components/datalist.js.map +1 -1
  43. package/dist/components/input.js +1 -1
  44. package/dist/components/input.js.map +1 -1
  45. package/dist/components/nano-field-validator.js +3 -1
  46. package/dist/components/nano-field-validator.js.map +1 -1
  47. package/dist/components/select.js +13 -2
  48. package/dist/components/select.js.map +1 -1
  49. package/dist/custom-elements/index.js +18 -4
  50. package/dist/custom-elements/index.js.map +1 -1
  51. package/dist/esm/nano-datalist_3.entry.js +1 -0
  52. package/dist/esm/nano-datalist_3.entry.js.map +1 -1
  53. package/dist/esm/nano-field-validator.entry.js +3 -1
  54. package/dist/esm/nano-field-validator.entry.js.map +1 -1
  55. package/dist/esm/nano-input.entry.js +1 -1
  56. package/dist/esm/nano-input.entry.js.map +1 -1
  57. package/dist/esm/nano-nav-item_2.entry.js +13 -2
  58. package/dist/esm/nano-nav-item_2.entry.js.map +1 -1
  59. package/dist/esm-es5/nano-datalist_3.entry.js +1 -1
  60. package/dist/esm-es5/nano-datalist_3.entry.js.map +1 -1
  61. package/dist/esm-es5/nano-field-validator.entry.js +1 -1
  62. package/dist/esm-es5/nano-field-validator.entry.js.map +1 -1
  63. package/dist/esm-es5/nano-input.entry.js +1 -1
  64. package/dist/esm-es5/nano-input.entry.js.map +1 -1
  65. package/dist/esm-es5/nano-nav-item_2.entry.js +1 -1
  66. package/dist/esm-es5/nano-nav-item_2.entry.js.map +1 -1
  67. package/dist/nano-components/nano-components.esm.js +1 -1
  68. package/dist/nano-components/p-01667573.entry.js +5 -0
  69. package/dist/nano-components/{p-a81db037.entry.js.map → p-01667573.entry.js.map} +1 -1
  70. package/dist/nano-components/{p-11451a4b.system.entry.js → p-21d6d31e.system.entry.js} +2 -2
  71. package/dist/nano-components/p-21d6d31e.system.entry.js.map +1 -0
  72. package/dist/nano-components/p-6722447c.entry.js +5 -0
  73. package/dist/nano-components/p-6722447c.entry.js.map +1 -0
  74. package/dist/nano-components/p-866f083f.system.entry.js +5 -0
  75. package/dist/nano-components/p-866f083f.system.entry.js.map +1 -0
  76. package/dist/nano-components/{p-c9a2d24c.entry.js → p-86bd5194.entry.js} +2 -2
  77. package/dist/nano-components/p-86bd5194.entry.js.map +1 -0
  78. package/dist/nano-components/p-96d9b8b9.system.entry.js +5 -0
  79. package/dist/nano-components/{p-fc3702a0.system.entry.js.map → p-96d9b8b9.system.entry.js.map} +1 -1
  80. package/dist/nano-components/{p-71bbb7ba.entry.js → p-c3830c43.entry.js} +2 -2
  81. package/dist/nano-components/p-c3830c43.entry.js.map +1 -0
  82. package/dist/nano-components/p-e7140887.system.js +1 -1
  83. package/dist/nano-components/{p-96150b2c.system.entry.js → p-f780d2f6.system.entry.js} +2 -2
  84. package/dist/nano-components/p-f780d2f6.system.entry.js.map +1 -0
  85. package/dist/types/components/select/select.d.ts +3 -1
  86. package/docs-json.json +1 -1
  87. package/package.json +2 -2
  88. package/dist/nano-components/p-11451a4b.system.entry.js.map +0 -1
  89. package/dist/nano-components/p-45070c8f.entry.js +0 -5
  90. package/dist/nano-components/p-45070c8f.entry.js.map +0 -1
  91. package/dist/nano-components/p-71bbb7ba.entry.js.map +0 -1
  92. package/dist/nano-components/p-72ed603c.system.entry.js +0 -5
  93. package/dist/nano-components/p-72ed603c.system.entry.js.map +0 -1
  94. package/dist/nano-components/p-96150b2c.system.entry.js.map +0 -1
  95. package/dist/nano-components/p-a81db037.entry.js +0 -5
  96. package/dist/nano-components/p-c9a2d24c.entry.js.map +0 -1
  97. package/dist/nano-components/p-fc3702a0.system.entry.js +0 -5
@@ -1 +0,0 @@
1
- {"version":3,"sources":["src/components/nav-item/nav-item.scss?tag=nano-nav-item&encapsulation=shadow","src/components/nav-item/nav-item.tsx","src/components/select/select.scss?tag=nano-select&encapsulation=scoped","src/components/select/select.tsx"],"names":["navItemCss","NavItem","[object Object]","hostRef","this","hasSecondarySlot","hasAnchorEle","didBlur","animating","didOpen","isInGlobalNav","isInMenuDrawer","isInMenu","isLegacy","document","head","attachShadow","hasFocus","href","target","disabled","open","selected","secondaryActiveWidth","secondaryFallback","closeOnBlur","notification","closeSecondary","async","nanoClosing","emit","secondaryMenu","secondaryDiv","status","displayTransition","openSecondary","window","innerWidth","call","nanoOpening","toggleSecondary","handleFocus","nanoFocus","handleHostBlur","el","removeAttribute","nanoBlur","handleHostClick","ev","foundlink","closest","btn","click","handleMouseEnter","globalNavEle","classList","contains","timeToWait","getSiblings","length","clearTimeout","waitHide","fromHover","waitShow","setTimeout","handleMouseLeave","handleClick","_a","querySelector","blur","relatedTarget","foundThisNavEle","focus","preventScroll","removeEventListener","nanoClose","panelio","IntersectionObserver","data","boundingClientRect","top","scrollIntoView","behavior","disconnect","threshold","observe","addEventListener","tabIndex","nanoOpen","found","parentElement","secondaryEle","link","getDirectChildren","h","Host","class","has-secondary","secondary-open","has-focus","nano-global-nav","nano-menu-drawer","nano-menu","legacy","onBlur","dir","ownerDocument","onMouseEnter","onMouseLeave","onClick","role","nav-item","ref","a","onFocus","name","div","tabindex","selectCss","selectIds","Select","valueItems","selectId","rtl","onInit","currInsertIndex","showErrorMsg","errorMessage","hasLabelSlot","hasHelperSlot","hasHelperEndSlot","inputSearchVal","_invalid","autofocus","validateOn","showInlineError","hideLabel","floatLabel","multiple","readonly","required","allowCustomValues","_value","_options","_eOptions","clearSelect","mask","debounce","dropDownConfig","customValidate","nativeSelect","setCustomValidity","valArray","isValidValues","max","min","showInlineValidation","validity","valid","validationMessage","nanoValidate","isValid","invalid","originalEvent","handleInvalid","preventDefault","requestAnimationFrame","setValue","e","value","detail","inputCtrl","includes","slice","removeValue","toFind","filter","val","setFocus","setOptions","datalist","activeOptions","map","ao","label","filterMeta","handleDocumentKeyDown","rm","key","previousElementSibling","dataset","nextElementSibling","previousSibling","nextSibling","event","Event","dispatchEvent","clearSelectValue","stopPropagation","onDragStart","ele","dragVal","onDragEnd","onDragLeave","spanVal","to","indexOf","from","tmpArr","tmpVal","onMultiInput","trim","nanoSearchChange","selectWrap","_selectWrap","setDataListOpts","_datalist","validityMessage","split","Array","isArray","options","opts","opt","debounceEvent","shouldValidate","nanoChange","currDWConfig","Object","assign","tetherTo","input","validateFirst","Promise","resolve","message","find","mo","MutationObserver","processSlottedContent","childList","subtree","querySelectorAll","console","warn","form","kev","raf","getActiveElement","closestElement","tagName","toLowerCase","debounceChanged","CustomEvent","slotChangeObserver","labelId","moreId","helperEndId","compWrapOptions","placeholder","wrapOptions","hasValue","controlId","controlOptions","clearControl","type","aria-disabled","createColorClasses","color","has-value","is-invalid","has-label","has-float-label","has-multiple","has-clr-btn","masked","FormControlWrap","FormControl","onClearText","control","endValueSlot","slot","multipleValues","getLabel","id","aria-labelledby","readOnly","onNanoOptionsUpdated","onNanoSelect","onNanoDeselect","undefined","select","onInvalid","autoFocus","autocomplete","onKeyDown","onInput","onTouchStart","onMouseDown","i","toReturn","onDragOver","draggable","data-value","span","push","onTouchEnd","onMouseUp"],"mappings":"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","sourcesContent":["@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/form';\n\n:host {\n // These can be overwritten, but are autatically set from context components\n\n // --padding-top: inherit;\n // --padding-bottom: inherit;\n // --padding-start: inherit;\n // --padding-end: inherit;\n // --margin: inherit;\n\n // --secondary-padding-top: inherit;\n // --secondary-padding-bottom: inherit;\n // --secondary-padding-start: inherit;\n // --secondary-padding-end: inherit;\n\n // --border-bottom: inherit;\n // --icon-size: inherit;\n\n // --color: inherit;\n // --color-hover: inherit;\n // --color-focus: inherit;\n // --color-selected: inherit;\n // --color-open: inherit;\n\n // --bg-color: inherit;\n // --bg-color-hover: inherit;\n // --bg-color-selected: inherit;\n // --bg-color-open: inherit;\n // --bg-color-focus: inherit;\n\n // --secondary-bg-color: inherit;\n // --secondary-color: inherit;\n\n opacity: inherit;\n display: block;\n color: var(--color) !important;\n margin: var(--margin);\n\n ::slotted(*),\n * {\n box-sizing: border-box;\n }\n\n ::slotted(button),\n button {\n background: none;\n border: none;\n margin: 0;\n }\n\n ::slotted(button),\n ::slotted(a),\n ::slotted(a:visited),\n button,\n a,\n a:visited {\n @include text-inherit();\n @include padding(\n var(--padding-top),\n var(--padding-end),\n var(--padding-bottom),\n var(--padding-start)\n );\n\n display: var(--display, block);\n white-space: nowrap;\n color: var(--color) !important;\n background-color: var(--bg-color);\n }\n\n ::slotted(nano-icon[slot='icon-start']) {\n @include padding(null, var(--padding-end), null, null);\n }\n\n ::slotted(nano-icon[slot='icon-end']) {\n @include padding(null, null, null, var(--padding-start));\n }\n\n .link {\n &::slotted(nano-icon[slot='icon-start']),\n ::slotted(nano-icon[slot='icon-start']) {\n @include padding(null, 0, null, var(--padding-start));\n }\n\n &::slotted(nano-icon[slot='icon-end']),\n ::slotted(nano-icon[slot='icon-end']) {\n @include padding(null, var(--padding-end), null, 0);\n }\n }\n\n .link,\n button,\n a {\n border-bottom: var(--border-bottom);\n display: flex;\n align-items: center;\n }\n\n .secondary-menu {\n display: none;\n }\n\n ::slotted(a:hover),\n ::slotted(button:hover),\n .link:hover,\n button:hover,\n a:hover {\n text-decoration: inherit !important;\n }\n\n button:focus,\n a:focus {\n color: var(--color-focus, var(--color-hover, var(--color))) !important;\n background-color:\n var(\n --bg-color-focus,\n var(--bg-color-hover, var(--bg-color))\n );\n outline: var(--focus-outline, none);\n }\n\n ::slotted(a:focus),\n ::slotted(button:focus) {\n color: var(--color-focus, var(--color-hover, var(--color))) !important;\n background-color:\n var(\n --bg-color-focus,\n var(--bg-color-hover, var(--bg-color))\n );\n outline: none;\n }\n}\n\n.nav-item {\n &.selected {\n .link,\n button,\n a {\n color: var(--color-selected, var(--color-open, var(--color))) !important;\n background-color:\n var(\n --bg-color-selected,\n var(--bg-color-open, var(--bg-color))\n );\n }\n }\n\n &.secondary-open {\n button,\n a {\n color: var(--color-open, var(--color-selected, var(--color))) !important;\n background-color:\n var(\n --bg-color-open,\n var(--secondary-bg-color, var(--bg-color-selected, var(--bg-color)))\n );\n }\n }\n\n &.disabled {\n opacity: 0.6;\n\n button,\n a {\n color: var(--color-disabled, var(--color)) !important;\n }\n }\n\n &:not(.nano-menu) {\n ::slotted(a:hover),\n ::slotted(button:hover),\n .link:hover,\n button:hover,\n a:hover {\n color: var(--color-hover, var(--color-hover, var(--color))) !important;\n background-color:\n var(\n --bg-color-hover,\n var(--bg-color-focus, var(--bg-color))\n );\n }\n }\n}\n\n:host(.has-focus) {\n .link {\n color: var(--color-focus, var(--color-hover, var(--color))) !important;\n background-color:\n var(\n --bg-color-focus,\n var(--bg-color-hover, var(--bg-color))\n );\n outline: var(--focus-outline, 5px auto -webkit-focus-ring-color);\n }\n}\n\n:host(.nano-global-nav-menu),\n:host(.nano-menu) {\n a,\n a:visited,\n button,\n .link {\n display: flex;\n justify-content: flex-start;\n flex-direction: row;\n align-items: center;\n color: 'currentColor';\n text-decoration: inherit;\n white-space: normal;\n cursor: pointer;\n line-height: 1.2;\n width: 100%;\n }\n\n .text {\n @include padding(null, var(--padding-end), null, 0);\n\n flex: 1;\n }\n\n ::slotted(a),\n ::slotted(button) {\n flex: 1;\n }\n\n ::slotted(a:focus),\n ::slotted(button:focus) {\n box-shadow: none;\n }\n\n .secondary-menu {\n display: none;\n position: absolute;\n color: var(--secondary-color, 'currentColor');\n min-height: 100%;\n top: 0;\n left: 0;\n width: 100%;\n z-index: 1;\n opacity: 0;\n transition: opacity 0.2s ease, transform 0.3s ease;\n background-color: var(--secondary-bg-color, white);\n transform: translateX(100%);\n\n &:focus {\n outline: none;\n }\n\n &.open {\n opacity: 1;\n transform: translateX(0);\n transition: opacity 0.3s ease, transform 0.2s ease;\n }\n }\n}\n\n:host(.nano-global-nav-menu) {\n ::slotted(nano-icon[slot='icon-start']) {\n @include padding(0, var(--padding-end), 0, 0);\n }\n\n ::slotted(nano-icon[slot='icon-end']) {\n @include padding(0, var(--padding-end), 0, 0);\n\n font-size: 10px;\n flex: 0 0 10px;\n pointer-events: none;\n }\n\n button,\n a {\n ::slotted(nano-icon[slot='icon-end']) {\n padding: 0;\n }\n }\n}\n\n:host(.nano-global-nav-menu[dir='rtl']),\n:host(.nano-menu[dir='rtl']) {\n .secondary-menu {\n left: auto;\n right: 0;\n transform: translateX(-100%);\n\n &.open {\n transform: translateX(0);\n }\n }\n}\n\n:host(.nano-menu) {\n .secondary-menu-content {\n @include padding(\n var(--secondary-padding-top),\n var(--secondary-padding-end),\n var(--secondary-padding-bottom),\n var(--secondary-padding-start)\n );\n }\n}\n\n// I'm sorry. Horrible IE fixes for collapsing stuff :/\n:host(.nano-global-nav-bar.legacy) {\n margin: 0 11px;\n\n ::slotted(a) {\n @include padding(7px, 6px, 7px, 6px);\n }\n}\n\n:host(.nano-global-nav-menu.legacy) {\n ::slotted(a) {\n @include padding(8px, 12px, 8px, 12px);\n }\n}\n\n:host(.nano-global-nav-bar) {\n .link,\n a,\n button {\n display: flex;\n align-items: center;\n cursor: pointer;\n font-stretch: expanded;\n }\n\n .text {\n flex: 1 0 auto;\n }\n\n ::slotted(nano-icon[slot='icon-end']) {\n @include margin(0, 0, 0, var(--padding-end));\n }\n\n ::slotted(nano-icon[slot='icon-start']) {\n @include margin(0, var(--padding-start), 0, 0);\n }\n}\n\n:host(.nano-global-nav-bar.has-secondary) {\n button {\n position: relative;\n font-stretch: expanded;\n\n &::before {\n content: '';\n background: rgb(134, 190, 226);\n height: 3px;\n left: 0;\n bottom: -14px;\n right: 5px;\n position: absolute;\n transform: translateZ(0) scaleX(0);\n transform-origin: 0;\n transition: 0.2s ease transform;\n }\n }\n\n .selected button::before,\n .secondary-open button::before {\n transform: translateZ(0) scaleX(1);\n }\n\n .secondary-open button::before {\n opacity: 0.5;\n }\n\n .secondary-menu {\n display: none;\n transition: transform 0.3s ease;\n transform: translateY(-100%) translateZ(0);\n background-color: var(--secondary-bg-color, #196c82);\n color: var(--secondary-color);\n position: absolute;\n box-shadow: 0 1px 25px 0 rgba(0, 0, 0, 0.15);\n left: 0;\n right: 0;\n z-index: -2;\n outline: none;\n\n &.open {\n transform: translateY(12px) translateZ(0);\n }\n }\n}\n\n:host(.nano-menu-drawer) {\n .link,\n a,\n button {\n @include padding(\n calc(var(--padding-top) / 2),\n 0,\n calc(var(--padding-bottom) / 2),\n var(--padding-start)\n );\n\n display: flex;\n justify-content: flex-start;\n flex-direction: row;\n align-items: center;\n color: currentColor;\n text-decoration: inherit;\n white-space: normal;\n border: none;\n cursor: pointer;\n line-height: 1.2;\n width: 100%;\n }\n\n .text {\n @include padding(null, var(--padding-end), null, 0);\n\n text-align: left;\n flex: 0 1 auto;\n min-width: 130px;\n width: 130px;\n }\n\n ::slotted(nano-icon[slot='icon-start']) {\n @include padding(0, var(--padding-end), 0, 0);\n\n font-size: var(--icon-size);\n width: var(--icon-size);\n flex: 0 0 var(--icon-size);\n }\n\n ::slotted(nano-icon[slot='icon-end']) {\n @include padding(0, var(--padding-end), 0, 0);\n\n font-size: 10px;\n flex: 0 0 20px;\n min-width: 20px;\n }\n\n .secondary-menu {\n display: none;\n position: absolute;\n background-color: var(--secondary-bg-color);\n color: var(--secondary-color);\n height: 100vh;\n top: 0;\n right: 0;\n left: auto;\n bottom: 0;\n transform: translateX(0);\n z-index: -1;\n transition: transform 0.3s ease, opacity 0.2s ease;\n overflow-y: auto;\n width: var(--secondary-width, 400px);\n max-width: 62vw;\n opacity: 1;\n\n @include padding(\n var(--secondary-padding-top, var(--padding-top)),\n var(--secondary-padding-end, var(--padding-end)),\n var(--secondary-padding-bottom, var(--padding-bottom)),\n var(--secondary-padding-start, var(--padding-start))\n );\n\n &:focus {\n outline: none;\n }\n\n &.open {\n transform: translateX(100%);\n // opacity: 1;\n }\n }\n\n .notification {\n position: relative;\n\n &::after {\n content: '';\n display: block;\n position: absolute;\n width: 6px;\n height: 6px;\n background-color: #ef4135;\n inset-inline-start: 10px;\n top: 7px;\n border-radius: 50%;\n\n @media (min-width: 52em) {\n width: 7px;\n height: 7px;\n inset-inline-start: 8px;\n top: 5px;\n }\n }\n }\n}\n\n:host(.nano-menu-drawer.legacy) {\n .link,\n a,\n button {\n width: auto;\n }\n\n ::slotted(nano-icon[slot='icon-end']) {\n @include padding(0, calc(var(--padding-end) * 2), 0, 0);\n\n font-size: 10px;\n flex: 0 0 20px;\n min-width: 20px;\n }\n}\n\n:host(.nano-menu-drawer[dir='rtl']) {\n .text {\n text-align: right;\n }\n\n .secondary-menu {\n right: auto;\n left: 0;\n transform: translateX(0%);\n\n &.open {\n transform: translateX(-100%);\n opacity: 1;\n }\n }\n}\n","import {\n Component,\n h,\n Host,\n Element,\n Prop,\n Watch,\n EventEmitter,\n Event,\n State,\n Method,\n ComponentInterface,\n} from '@stencil/core';\nimport { displayTransition, getDirectChildren, getSiblings } from '../../utils';\nimport { NavItemEventDetail } from '../../interface';\n\n/**\n * Nav items to be used with the various nav items.\n * [Globla-Nav](/story/compounds-global-nav)\n * [Menu-Drawer](/story/components-menu-drawer)\n * [Dropdown](/story/components-dropdown)\n */\n@Component({\n tag: 'nano-nav-item',\n styleUrl: 'nav-item.scss',\n shadow: true,\n})\nexport class NavItem implements ComponentInterface {\n private hasSecondarySlot: boolean = false;\n private hasAnchorEle: boolean = false;\n private secondaryDiv: HTMLDivElement;\n private btn: HTMLButtonElement | HTMLAnchorElement;\n private didBlur: boolean = false;\n private fromHover: boolean;\n private animating: boolean = false;\n private waitHide: number;\n private waitShow: number;\n private globalNavEle?: HTMLNanoGlobalNavElement;\n\n @State() didOpen: boolean = false;\n @State() isInGlobalNav: boolean = false;\n @State() isInMenuDrawer: boolean = false;\n @State() isInMenu: boolean = false;\n @State() isLegacy: boolean = !document.head.attachShadow;\n @State() hasFocus: boolean = false;\n @Element() private el: HTMLNanoNavItemElement;\n\n /**\n * Href to link to\n */\n @Prop({ mutable: true }) href: string = null;\n\n /**\n * Target to use for links\n */\n @Prop() target: '_self' | '_blank' | '_parent' | '_top' = '_self';\n\n /**\n * Disable the nav item\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Whether a secondary menu should be or is currently open\n */\n @Prop({ mutable: true, reflect: true }) open: boolean = false;\n\n /**\n * Whether this menu item is currently 'selected'\n */\n @Prop({ reflect: true }) selected: boolean = false;\n\n /**\n * Screen pixel width to activate the secondary menu\n */\n @Prop() secondaryActiveWidth: number = 0;\n\n /**\n * Secondary fallback function for when the secondary menu is no longer active.\n */\n @Prop() secondaryFallback = () => {};\n\n /**\n * Whether secondary menus should close on blur\n */\n @Prop() closeOnBlur: boolean = true;\n\n /**\n * Will show an indicator badge - only when placed in a nano-menu-draw\n */\n @Prop() notification: boolean = false;\n\n /**\n * Emitted when the nav item closes it's secondary navigation.\n */\n @Event() nanoClose!: EventEmitter<NavItemEventDetail>;\n\n /**\n * Emitted when the nav item opens it's secondary navigation.\n */\n @Event() nanoOpen!: EventEmitter<NavItemEventDetail>;\n\n /**\n * Emitted when the nav item is about to open it's secondary navigation.\n */\n @Event() nanoOpening!: EventEmitter<NavItemEventDetail>;\n\n /**\n * Emitted when the nav item is about to close it's secondary navigation.\n */\n @Event() nanoClosing!: EventEmitter<NavItemEventDetail>;\n\n /**\n * Emitted when the nav item loses focus.\n */\n @Event() nanoBlur!: EventEmitter<void>;\n\n /**\n * Emitted when the nav item has focus.\n */\n @Event() nanoFocus!: EventEmitter<void>;\n\n /**\n * Sets focus on the first button or anchor present. Use this method instead of the global\n * `element.focus()`.\n */\n @Method()\n async setFocus() {\n if (!this.btn) return;\n this.btn.focus();\n }\n\n /**\n * Public open watcher\n */\n @Watch('open')\n openChange() {\n this.open ? this.openSecondary() : this.closeSecondary();\n }\n\n /**\n * Internal open watcher\n */\n @Watch('didOpen')\n didOpenChange() {\n if (!this.hasSecondarySlot) return;\n\n if (!this.didOpen) {\n /* the secondadry panel is not closing via hover,\n remove blur events, add focus back to originating button */\n if (!this.fromHover) {\n this.btn.removeEventListener('focusout', this.blur);\n this.secondaryDiv.removeEventListener('focusout', this.blur);\n }\n setTimeout(() => {\n if (!this.fromHover && !this.didBlur)\n this.btn.focus({ preventScroll: true });\n this.nanoClose.emit({ secondaryMenu: this.secondaryDiv });\n }, 50);\n } else {\n this.didBlur = false;\n\n /* the secondadry panel is not opening via hover,\n scroll content into view, focus on it and add blur events */\n if (!this.fromHover) {\n const panelio = new (window as any).IntersectionObserver(\n (data: IntersectionObserverEntry[]) => {\n if (data[0].boundingClientRect.top < 0) {\n this.secondaryDiv.scrollIntoView({\n behavior: 'smooth',\n });\n }\n panelio.disconnect();\n },\n { threshold: 1 }\n );\n panelio.observe(this.secondaryDiv);\n this.secondaryDiv.focus({ preventScroll: true });\n\n this.btn.addEventListener('focusout', this.blur);\n this.secondaryDiv.addEventListener('focusout', this.blur);\n window.addEventListener('blur', this.blur);\n\n this.el.tabIndex = -1;\n this.nanoOpen.emit({ secondaryMenu: this.secondaryDiv });\n }\n }\n }\n\n private closeSecondary = async () => {\n this.open = false;\n if (!this.hasSecondarySlot || !this.didOpen) return;\n\n this.nanoClosing.emit({ secondaryMenu: this.secondaryDiv });\n let status = await displayTransition(this.secondaryDiv, 'open', false);\n this.didOpen = status !== 'hidden';\n };\n\n private openSecondary = async () => {\n if (window.innerWidth < this.secondaryActiveWidth) {\n this.secondaryFallback.call(this);\n return;\n }\n this.open = true;\n if (!this.hasSecondarySlot || this.didOpen) return;\n\n this.nanoOpening.emit({ secondaryMenu: this.secondaryDiv });\n let status = await displayTransition(this.secondaryDiv, 'open', true);\n this.didOpen = status === 'shown';\n };\n\n private toggleSecondary = () => {\n if (!this.hasSecondarySlot) return;\n if (this.didOpen) this.closeSecondary();\n else this.openSecondary();\n };\n\n private handleFocus = () => {\n this.hasFocus = true;\n // opens secondary panel when activated via hover\n if (this.href && !this.animating && this.hasSecondarySlot)\n this.openSecondary();\n this.nanoFocus.emit();\n };\n\n private handleHostBlur = () => {\n if (this.animating) return;\n\n // tab index is added to host when secondary panel opens\n // to return focus after secondary panel closes. Remove now if it was added\n this.el.removeAttribute('tabindex');\n this.hasFocus = false;\n this.nanoBlur.emit();\n };\n\n // direct host clicks to internal button\n private handleHostClick = (ev: MouseEvent) => {\n if (!this.hasAnchorEle) return;\n let foundlink = (ev.target as HTMLElement).closest('a, button');\n if (!foundlink) this.btn.click();\n };\n\n // handles secondary menu hover behaviour.\n private handleMouseEnter = async () => {\n if (\n !this.href ||\n this.animating ||\n !this.hasSecondarySlot ||\n (this.globalNavEle && !this.globalNavEle.classList.contains('ready'))\n )\n return;\n\n // if there are sibling secondary panels currently open,\n // we need to wait before opening otherwise we get unwanted overlapping\n let timeToWait = 0;\n if (getSiblings(this.el, '.secondary-open.has-secondary').length)\n timeToWait = 300;\n\n clearTimeout(this.waitHide);\n this.fromHover = true;\n this.animating = true;\n this.waitShow = window.setTimeout(\n async () => await this.openSecondary(),\n timeToWait\n );\n this.animating = false;\n };\n\n // handles secondary menu hover-out behaviour.\n private handleMouseLeave = () => {\n if (!this.href) return;\n clearTimeout(this.waitShow);\n this.fromHover = true;\n this.animating = true;\n\n // prevent closing immediately - makes navigating to items within more forgiving\n this.waitHide = window.setTimeout(\n async () => await this.closeSecondary(),\n 300\n );\n this.animating = false;\n };\n\n private handleClick = () => {\n this.fromHover = false;\n if (this.hasSecondarySlot) this.toggleSecondary();\n else this.el.querySelector<HTMLElement>('*')?.click();\n };\n\n // utility to traverse up, to see if element is nested within current nav-item\n private foundThisNavEle(el: HTMLElement): boolean {\n let found = el.closest('nano-nav-item');\n found = found === el ? el.parentElement.closest('nano-nav-item') : found;\n\n if (!found) return false;\n if (found === this.el) return true;\n return this.foundThisNavEle(found);\n }\n\n private blur = (ev: FocusEvent) => {\n if (!this.didOpen || this.animating) return;\n if (!this.closeOnBlur) return;\n\n // if event is associated with this element don't close\n if (ev && ev.relatedTarget) {\n if (\n ev.relatedTarget === this.el ||\n ev.relatedTarget === this.btn ||\n this.foundThisNavEle(ev.relatedTarget as HTMLElement)\n ) {\n this.secondaryDiv.focus({ preventScroll: true });\n return;\n }\n }\n\n this.btn.removeEventListener('focusout', this.blur);\n this.secondaryDiv.removeEventListener('focusout', this.blur);\n window.removeEventListener('blur', this.blur);\n\n this.didBlur = true;\n\n this.open = false;\n if (!ev.relatedTarget)\n setTimeout(() => {\n this.el.focus({ preventScroll: true });\n }, 50);\n };\n\n componentWillLoad() {\n let secondaryEle = this.el.querySelector('[slot=\"secondary\"]');\n this.hasSecondarySlot = !!secondaryEle;\n\n let link = getDirectChildren(this.el, 'a, button')[0] as\n | HTMLAnchorElement\n | HTMLButtonElement;\n this.hasAnchorEle = !!link;\n\n if (link) {\n this.href = (link as HTMLAnchorElement).href\n ? (link as HTMLAnchorElement).href\n : null;\n this.btn = link;\n if (this.hasSecondarySlot)\n this.btn.addEventListener('click', this.toggleSecondary);\n\n this.btn.addEventListener('focus', this.handleFocus);\n this.btn.addEventListener('blur', this.handleHostBlur);\n }\n }\n\n connectedCallback() {\n this.isInGlobalNav = false;\n this.isInMenuDrawer = false;\n this.globalNavEle = this.el.closest('nano-global-nav');\n\n this.isInMenuDrawer = !!this.el.closest('nano-menu-drawer');\n this.isInMenu = !!this.el.closest('nano-menu');\n this.isInGlobalNav =\n this.el.parentElement === this.globalNavEle ||\n !!this.el.closest('.global-nav');\n }\n\n render() {\n return (\n <Host\n class={{\n 'has-secondary': this.hasSecondarySlot,\n 'secondary-open': this.open,\n selected: this.selected,\n 'has-focus': this.hasFocus,\n disabled: this.disabled,\n 'nano-global-nav': this.isInGlobalNav,\n 'nano-menu-drawer': this.isInMenuDrawer,\n 'nano-menu': this.isInMenu,\n legacy: this.isLegacy,\n }}\n onBlur={this.handleHostBlur}\n dir={(this.el.ownerDocument as Document).dir === 'rtl' ? 'rtl' : null}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n onClick={this.handleHostClick}\n role=\"menuitem\"\n >\n <div\n class={{\n 'nav-item': true,\n 'secondary-open': this.open,\n selected: this.selected,\n }}\n >\n {this.href && !this.hasAnchorEle && !this.disabled && (\n <a\n target={this.target}\n ref={(a) => (this.btn = a)}\n href={this.href}\n onFocus={this.handleFocus}\n class={{\n notification: this.notification,\n }}\n >\n <slot name=\"icon-start\" />\n <span class=\"text\">\n <slot />\n </span>\n <slot name=\"icon-end\" />\n </a>\n )}\n {((!this.hasAnchorEle && !this.href) || this.disabled) && (\n <button\n ref={(btn) => (this.btn = btn)}\n onClick={this.handleClick}\n onFocus={this.handleFocus}\n disabled={this.disabled}\n class={{\n notification: this.notification,\n }}\n >\n <slot name=\"icon-start\" />\n <span class=\"text\">\n <slot />\n </span>\n <slot name=\"icon-end\" />\n </button>\n )}\n {this.hasAnchorEle && !this.disabled && (\n <div class=\"link\">\n <slot name=\"icon-start\" />\n <slot />\n <slot name=\"icon-end\" />\n </div>\n )}\n {this.hasSecondarySlot && !this.disabled && (\n <div\n class=\"secondary-menu\"\n ref={(div) => (this.secondaryDiv = div)}\n tabindex=\"-1\"\n >\n <div class=\"secondary-menu-content\">\n <slot name=\"secondary\" />\n </div>\n <div\n class=\"secondary-menu-mask\"\n onClick={this.closeSecondary}\n ></div>\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n","@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/form';\n@import '../../global/style/nano-theme/layers';\n@import '../form-control/form-control';\n@import '../form-control/form-control-vars';\n\n:host {\n @include formControlVars;\n\n position: relative;\n width: 100%;\n padding: 0 !important;\n font-family: $font-family-base;\n display: block;\n}\n\n:host(.nano-color) {\n --input-border-style--focus: #{$input-border-style} var(--nano-color-tint, #{nano-color(primary, tint)});\n --multi-input-value-bg: var(--nano-color-tint-rgb);\n --multi-input-value-border: var(--nano-color-shade);\n --multi-input-value-text-color: var(--nano-color-contrast);\n\n color: current-color(base);\n}\n\n:host-context(nano-item:not(.item-label)) {\n --padding-start: 0;\n}\n\n:host([disabled]:not([disabled='false'])) {\n * {\n pointer-events: none !important;\n }\n}\n\nselect {\n display: none;\n}\n\n.select__native-input {\n @include border-radius(var(--input-border-radius));\n @include padding(0, var(--padding-end), 0, var(--padding-start));\n @include text-inherit();\n\n text-overflow: ellipsis;\n color: var(--input-text-color);\n display: inline-block;\n flex: 1;\n width: 100%;\n max-width: 100%;\n max-height: 100%;\n border: 0;\n outline: none;\n background: transparent;\n appearance: none;\n margin: 0;\n box-sizing: border-box;\n resize: none;\n overflow: hidden;\n cursor: default;\n line-height: 2.5em;\n min-height: 2.5em;\n\n .has-float-label & {\n line-height: 2.1em;\n min-height: 2.1em;\n padding-top: 1.4em;\n }\n\n &::selection {\n background: transparent;\n }\n\n &::-moz-selection {\n background: transparent;\n }\n\n &::placeholder {\n color: var(--placeholder-color);\n font-family: inherit;\n font-style: var(--placeholder-font-style);\n font-weight: var(--placeholder-font-weight);\n opacity: var(--placeholder-opacity);\n line-height: inherit;\n min-height: inherit;\n }\n\n &::-moz-placeholder {\n line-height: 2.8em;\n text-overflow: ellipsis;\n }\n\n &:-webkit-autofill {\n background-color: transparent;\n }\n\n &::-webkit-search-decoration,\n &::-webkit-search-cancel-button,\n &::-webkit-search-results-button,\n &::-webkit-search-results-decoration {\n appearance: none;\n }\n\n &:invalid {\n box-shadow: none;\n }\n\n &::-ms-clear,\n &::-ms-reveal {\n display: none;\n }\n\n &.resizable {\n resize: vertical;\n overflow: auto;\n }\n\n .form-ctrl__textarea & {\n line-height: 1.5em;\n padding-top: var(--padding-top);\n padding-bottom: var(--padding-bottom);\n white-space: pre-wrap;\n\n &::placeholder {\n line-height: 1.5em;\n }\n }\n\n .has-float-label.textarea & {\n padding-top: 1.8em;\n }\n\n :host(.masked) & {\n opacity: 0;\n position: absolute;\n left: 0;\n top: 0;\n }\n}\n\n.select__mask {\n @include border-radius(var(--input-border-radius));\n @include padding(0, var(--padding-end), 0, var(--padding-start));\n @include text-inherit();\n\n pointer-events: none;\n line-height: 2.5em;\n min-height: 2.5em;\n}\n\n// multi stuff\n\n.select__multi {\n &-wrap {\n @include padding(\n 0,\n 0,\n calc(var(--padding-bottom) / 2),\n 0\n );\n\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n max-width: 100%;\n\n :host(.has-float-label) & {\n padding-top: 1.3em;\n }\n }\n\n &-input {\n @include text-inherit();\n @include padding(\n calc(var(--padding-top) / 2),\n var(--padding-end),\n 0,\n var(--padding-start)\n );\n\n min-width: 50px;\n width: 100%;\n max-height: 100%;\n appearance: none;\n border: 0;\n outline: none;\n display: inline-block;\n background: transparent;\n flex: 0;\n position: relative;\n min-height: calc(2.5em - var(--padding-top));\n box-sizing: border-box;\n\n :host(.legacy) & {\n box-sizing: content-box;\n }\n\n &:last-child {\n flex: 1;\n }\n }\n\n &-value {\n margin-top: 5px;\n margin-inline-start: var(--padding-start);\n margin-inline-end: -3px;\n background: rgba(var(--multi-input-value-bg), 0.8);\n color: var(--multi-input-value-text-color);\n border: 1px solid;\n border-color: var(--multi-input-value-border);\n padding: 0.2em 0.5em;\n line-height: 1;\n max-width: 100%;\n display: flex;\n align-items: center;\n font-size: var(--input-font-size);\n letter-spacing: 1px;\n\n span {\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 100%;\n overflow: hidden;\n line-height: 1.2;\n }\n }\n\n &-value-remove {\n @include margin(0);\n @include background-position(center);\n @include padding(0, 0, 0, 0.5em);\n\n color: inherit;\n border: 0;\n outline: none;\n background-color: transparent;\n background-repeat: no-repeat;\n appearance: none;\n display: flex;\n align-items: center;\n top: 0;\n font-size: 1em;\n\n nano-icon {\n --color: var(--multi-input-value-text-color);\n }\n }\n}\n\n.form-ctrl__float-label {\n width: calc(100% - (1em + (var(--padding-start) * 2)));\n\n :host(.has-focus.has-multiple) & {\n transform: translateY(-110%);\n font-size: 0.8em;\n }\n\n :host(.has-value.has-multiple) & {\n transform: translateY(38%);\n top: 0;\n }\n}\n\n:host(.has-focus) select,\n:host(.has-focus) a,\n:host(.has-focus) button {\n pointer-events: auto;\n}\n","import {\n Build,\n Component,\n ComponentInterface,\n Element,\n Event,\n EventEmitter,\n Host,\n Method,\n Prop,\n State,\n Watch,\n h,\n VNode,\n Listen,\n} from '@stencil/core';\n\nimport {\n Color,\n SelectChangeEventDetail,\n InputChangeEventDetail,\n ControlValidityEventDetail,\n ControlValidity,\n} from '../../interface';\nimport {\n debounceEvent,\n createColorClasses,\n closestElement,\n raf,\n getActiveElement,\n debounce,\n} from '../../utils';\nimport type { Dropdown } from '../dropdown/dropdown';\nimport { FormControl, FormControlWrap } from '../form-control/form-control';\nimport { OptionInterface } from '../option/option-interface';\n\nlet selectIds = 0;\n\n/**\n * The select component is a wrapper to the HTML select element with custom styling and additional functionality.\n * It accepts most of the same properties as the HTML [select](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select).\n * It's multi selection functionality is vastly improved from the native solution. It allows for the control of\n * value order through drag and drop or changing the insertion point with arrow keys. It also can allow for user defined values.\n *\n * @slot start - suitable for inline action buttons or icons that may add extra contextual information\n * @slot end - suitable for inline action buttons or icons that may add extra contextual information\n * @slot value-start - similar to 'start', however clicking elements using this slot will activate the input control. This would be suitable to show a secodary 'value' for context or to show a dropdown arrow if using a datalist\n * @slot value-end - similar to 'end', however clicking elements using this slot will activate the input control. This would be suitable to show a secodary 'value' for context or to show a dropdown arrow if using a datalist\n * @slot label - if you do not set a label attribute, you can use this slot for more complex markup\n * @slot helper - helper text to accompany the form field underneath.\n * @slot helper-end - helper text to accompany the form field on the side.\n * @slot down-arrow - use this to replace the default down arrow\n * @slot - default slot; nest `nano-option` elements\n */\n@Component({\n tag: 'nano-select',\n styleUrl: 'select.scss',\n scoped: true,\n})\nexport class Select implements ComponentInterface {\n private nativeSelect?: HTMLSelectElement;\n private inputCtrl?: HTMLInputElement;\n private valueItems: Array<HTMLSpanElement> = [];\n private dragVal: string;\n private mo?: MutationObserver;\n private selectId = `nano-select-${selectIds++}`;\n private rtl: boolean = false;\n private onInit: boolean = true;\n\n // we don't want these rendered eles decorated with @State\n // because that will cause re-renders. Use get/set to set datalist options\n private _selectWrap: HTMLElement;\n private get selectWrap() {\n return this._selectWrap;\n }\n private set selectWrap(ele: HTMLElement) {\n if (this._selectWrap === ele) return;\n this._selectWrap = ele;\n this.setDataListOpts();\n }\n\n private _datalist: HTMLNanoDatalistElement;\n private get datalist() {\n return this._datalist;\n }\n private set datalist(ele: HTMLNanoDatalistElement) {\n if (this._datalist === ele) return;\n this._datalist = ele;\n this.setDataListOpts();\n }\n\n constructor() {\n this.showInlineValidation = debounce(this.showInlineValidation, 50);\n }\n\n @State() currInsertIndex: number = -1;\n @State() showErrorMsg = false;\n @State() errorMessage: string = '';\n @State() hasFocus = false;\n @State() hasLabelSlot: boolean = false;\n @State() hasHelperSlot: boolean = false;\n @State() hasHelperEndSlot = false;\n @State() inputSearchVal: string = '';\n\n @Element() el!: HTMLNanoSelectElement;\n\n /**\n * This will be true when the control is in an invalid state.\n * Validity is determined by the `required` prop. Or if custom validity message is set.\n */\n @Prop({ reflect: true })\n get invalid() {\n return this._invalid;\n }\n @State() _invalid = false;\n\n /**\n * Current validation message - if any. @readonly\n */\n @Prop()\n get validityMessage() {\n if (!this.nativeSelect) return '';\n return this.nativeSelect.validationMessage;\n }\n\n /**\n * The color to use from your application's color palette.\n * Default options are: `\"primary\"`, `\"secondary\"`, `\"tertiary\"`, `\"success\"`, `\"warning\"`, `\"danger\"`, `\"light\"`, `\"medium\"`, and `\"dark\"`.\n */\n @Prop() color?: Color;\n\n /**\n * This Boolean attribute lets you specify that a form control should have select focus when the page loads.\n */\n @Prop() autofocus = false;\n\n /**\n * If `true`, the user cannot interact with the select.\n */\n @Prop({ reflect: true }) disabled = false;\n\n /**\n * When should the field perform validation\n */\n @Prop({ mutable: true }) validateOn?: 'dirty' | 'submit' | 'submitThenDirty' =\n 'submitThenDirty';\n\n /**\n * Whether to show validation errors underneath input\n */\n @Prop({ reflect: true }) showInlineError = true;\n\n /**\n * String to place within a label element. Alternatively use the 'label' slot\n */\n @Prop() label!: string;\n\n /**\n * Visually hide the label - but make it accessible.\n */\n @Prop() hideLabel?: boolean = false;\n\n /**\n * Enable floating label behaviour. Will disable placeholder if set.\n */\n @Prop() floatLabel: boolean = false;\n\n /**\n * If `true`, the user can enter more than one value. This attribute applies when the type attribute is set to `\"email\"` or `\"file\"`, otherwise it is ignored.\n */\n @Prop() multiple?: boolean = false;\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop() name: string = this.selectId + '-name';\n\n /**\n * Instructional text that shows before the select has a value. Text set here will be placed inside the label when a value is set. If you don't want this behaviour just set the first option to have no value.\n */\n @Prop() placeholder?: string | null;\n\n /**\n * If `true`, the user cannot modify the value.\n */\n @Prop({ reflect: true }) readonly = false;\n\n /**\n * If `true`, the user must fill in a value before submitting a form.\n */\n @Prop() required = false;\n\n /**\n * The initial size of the control.\n */\n @Prop() size?: number;\n\n /**\n * Maximum number of options that can be selected when multiple is true\n */\n @Prop() max?: number;\n\n /**\n * Minimum number of options that can be selected when multiple is true\n */\n @Prop() min?: number;\n\n /**\n * The form element to associate the select with (its form owner). Must be the id of a form.\n */\n @Prop() form?: string | null;\n\n /**\n * in multiple mode, allow users to enter their own values\n */\n @Prop() allowCustomValues: boolean = false;\n\n /**\n * The value of the select.\n */\n @Prop()\n get value() {\n return this._value;\n }\n set value(val: string | string[]) {\n if (typeof val === 'string') {\n if (this.multiple) this._value = val.split(',');\n else this._value = val;\n } else if (Array.isArray(val)) {\n if (this.multiple) this._value = val;\n else this._value = val[0];\n }\n }\n private _value: Array<string> | string = this.multiple ? [] : '';\n\n /**\n * You can set options via js as an array of strings: `domElement.options = ['option 1', 'option 2']` or\n * objects `domElement.options = [{label: 'option 1', value: 'opt-1'}]`. See `nano-option` docs for all available properties.\n * Alternatively, you can nest `<nano-option>` elements within a `<nano-select>`\n * Regardless - reading `options` will return the current component options - slotted or otherwise\n */\n @Prop()\n get options(): Array<OptionInterface | string> {\n if (this._options.length) return this._options;\n\n if (!this.datalist || !this.datalist.activeOptions) return [];\n\n return this._eOptions.map((ao) => {\n const { value, selected, label, filterMeta } = ao;\n return { value, selected, label, filterMeta };\n });\n }\n set options(opts: Array<OptionInterface | string>) {\n this._options = opts.map((opt) => {\n if (typeof opt === 'string') return { value: opt, label: opt };\n else return opt;\n });\n }\n private _options: OptionInterface[] = [];\n @State() _eOptions: OptionInterface[] = [];\n\n /**\n * If `true`, a clear icon will appear in the select when there is a value. Clicking it clears the select.\n */\n @Prop() clearSelect = false;\n\n /**\n * Hide the native select element and cover with a value 'mask'.\n * Enables a fluid nano-select width upon value change (if required). Doesn't work with multiple=\"true\".\n */\n @Prop() mask = false;\n\n /**\n * Set the amount of time, in milliseconds, to wait to trigger the `nanoSearchChange` event after each keystroke.\n */\n @Prop() debounce = 0;\n\n @Watch('debounce')\n protected debounceChanged() {\n this.nanoSearchChange = debounceEvent(this.nanoSearchChange, this.debounce);\n }\n\n @Watch('required')\n @Watch('disabled')\n @Watch('min')\n @Watch('max')\n @Watch('readonly')\n protected shouldValidate() {\n if (this.onInit) return;\n if (this.invalid) this.showErrorMsg = this._invalid = false;\n\n this.customValidate();\n if (this.validateOn !== 'dirty') return;\n this.showInlineValidation();\n }\n\n /**\n * Update the native select element when the value changes\n */\n // eslint-disable-next-line @stencil/no-unused-watch\n @Watch('value')\n valueChanged() {\n if (this.onInit) {\n if (this.multiple) this.currInsertIndex = this.value.length - 1;\n return;\n }\n requestAnimationFrame(() => {\n this.shouldValidate();\n this.nanoChange.emit({ value: this.value });\n });\n }\n\n /** nano-dropdown config options you can pass to the nested dropdown component */\n @Prop({ mutable: true }) dropDownConfig?: Partial<Dropdown> = {};\n\n @Watch('dropDownConfig')\n setDataListOpts() {\n if (!this.datalist || !this.selectWrap) return;\n const currDWConfig = this.datalist.dropDownConfig || {};\n this.datalist.dropDownConfig = {\n ...currDWConfig,\n ...this.dropDownConfig,\n tetherTo: this.selectWrap,\n };\n this.datalist.input = this.inputCtrl;\n }\n\n // Custom Events\n\n /**\n * Emitted when the value has changed.\n */\n @Event() nanoChange!: EventEmitter<SelectChangeEventDetail>;\n\n /**\n * Emitted when the select loses focus.\n */\n @Event() nanoBlur!: EventEmitter<void>;\n\n /**\n * Emitted when the select has focus.\n */\n @Event() nanoFocus!: EventEmitter<void>;\n\n /**\n * Emitted when the select has been created.\n * @internal\n */\n @Event() nanoDidLoad!: EventEmitter<void>;\n\n /**\n * Emitted when the select has been removed.\n * @internal\n */\n @Event() nanoDidUnload!: EventEmitter<void>;\n\n /**\n * Emitted when a keyboard input occurred on a multiple=\"true\" input\n */\n @Event() nanoSearchChange!: EventEmitter<InputChangeEventDetail>;\n\n /**\n * Called when validation is performed (which depends on `validateOn`).\n * @returns event.detail: `{ isValid: boolean, errorMessage: string, originalEvent: Event }`.\n */\n @Event() nanoValidate: EventEmitter<ControlValidityEventDetail>;\n\n // Public Methods\n\n /**\n * Get the current state of the control.\n * @param validateFirst - perform validation first before reporting\n * @returns `{ isValid: boolean, errorMessage: string }`\n */\n @Method()\n async reportValidity(validateFirst: boolean): Promise<ControlValidity> {\n return new Promise((resolve) => {\n if (validateFirst) {\n this.customValidate();\n this.showInlineValidation();\n }\n setTimeout(() => {\n resolve({\n isValid: !this._invalid,\n errorMessage: this.nativeSelect.validationMessage,\n });\n }, 50);\n });\n }\n\n /**\n * Sets focus on the specified `nano-select`. Use this method instead of the global\n * `select.focus()`.\n */\n @Method()\n async setFocus() {\n this.inputCtrl.focus();\n setTimeout(() => this.inputCtrl.click(), 50);\n }\n\n /**\n * Returns the native `<select>` element used under the hood.\n */\n @Method()\n getSelectElement(): Promise<HTMLSelectElement> {\n return Promise.resolve(this.nativeSelect!);\n }\n\n /**\n * Invalidate the field and show a custom error message.\n * To clear the error you will need to re-call this method with an empty string.\n */\n @Method()\n async showError(message: string) {\n if (this.nativeSelect) {\n this.nativeSelect.setCustomValidity(message);\n this.showInlineValidation();\n }\n }\n\n /* Logic */\n\n private get valArray() {\n return typeof this.value === 'string'\n ? this.value.length\n ? [this.value]\n : []\n : this.value;\n }\n\n private isValidValues() {\n return this.valArray.find((val) =>\n (this.options as OptionInterface[]).find((opt) => opt.value === val)\n );\n }\n\n private customValidate = () => {\n this.nativeSelect.setCustomValidity('');\n\n // add custom validations 'cos html5 validations are a bit rubbish on selects\n if (this.required && !this.valArray.length) {\n this.nativeSelect.setCustomValidity('Please fill in this field.');\n return true;\n }\n if (\n this.valArray.length &&\n !this.allowCustomValues &&\n !this.isValidValues()\n ) {\n this.nativeSelect.setCustomValidity(\n 'Please choose an item from this field.'\n );\n return true;\n }\n if (this.max && this.valArray.length > this.max) {\n this.nativeSelect.setCustomValidity(\n `Only up to ${this.max} values are allowed.`\n );\n return true;\n }\n if (this.min && this.valArray.length < this.min) {\n this.nativeSelect.setCustomValidity(\n `You must select a minimum of ${this.min} values.`\n );\n return true;\n }\n return false;\n };\n\n private showInlineValidation = (ev?: Event) => {\n if (this.validateOn === 'submitThenDirty') this.validateOn = 'dirty';\n\n this._invalid = false;\n this.showErrorMsg = false;\n this.errorMessage = '';\n\n if (!this.nativeSelect.validity.valid) {\n this.errorMessage = this.nativeSelect.validationMessage;\n this._invalid = true;\n this.showErrorMsg = true;\n }\n this.nanoValidate.emit({\n isValid: !this.invalid,\n errorMessage: this.errorMessage,\n originalEvent: ev,\n });\n };\n\n private handleInvalid = (ev: Event) => {\n this._invalid = true;\n\n if (this.validateOn === 'submit') {\n this._invalid = this.showErrorMsg = this.customValidate();\n }\n if (this.showInlineError) ev.preventDefault();\n\n requestAnimationFrame(() => this.showInlineValidation(ev));\n };\n\n private setValue = (e: CustomEvent<HTMLNanoOptionElement>) => {\n e.preventDefault();\n\n if (!this.multiple) {\n this.value = e.detail.value;\n this.selectWrap.clientWidth; // force reflow\n this.inputCtrl.focus();\n return;\n }\n if (this.value && this.value.length && this.value.includes(e.detail.value))\n return;\n if (this.max && this.value.length === this.max) return;\n\n this.currInsertIndex++;\n this.value = [\n ...this.value.slice(0, this.currInsertIndex),\n e.detail.value,\n ...this.value.slice(this.currInsertIndex),\n ];\n this.inputSearchVal = '';\n // this.selectWrap.clientWidth; // force reflow\n };\n\n private removeValue = (toFind?: string) => {\n if (!this.multiple || !this.value.length) return;\n\n if (!toFind) toFind = this.value[this.value.length - 1];\n this.value = (this.value as Array<string>).filter((val) => val !== toFind);\n\n this.currInsertIndex--;\n // this.selectWrap.clientWidth; // force reflow\n this.setFocus();\n };\n\n private slotChangeObserver() {\n const mo = (this.mo = new MutationObserver(() =>\n this.processSlottedContent()\n ));\n mo.observe(this.el, { childList: true, subtree: true });\n }\n\n private processSlottedContent() {\n // see if we have label / helper content\n this.hasLabelSlot = !!this.el.querySelectorAll('[slot=\"label\"]').length;\n this.hasHelperSlot = !!this.el.querySelector('[slot=\"helper\"]');\n this.hasHelperEndSlot = !!this.el.querySelector('[slot=\"helper-end\"]');\n\n // breaking change introduced in v2. Rm in v3\n if (\n !!this.el.querySelector('select:not([class*=\"sc-nano-select\"]) option')\n ) {\n console.warn(\n 'nesting `<option>` elements was removed in v2. Please update your code to use `<nano-option>` elements instead.',\n this.el\n );\n }\n\n // breaking change introduced in v2. Rm in v3\n if (!!this.el.querySelector('[slot=\"legacy\"]')) {\n console.warn(\n 'The `legacy` slot has been removed. Please update your code',\n this.el\n );\n }\n }\n\n private getLabel(toFind: string) {\n let label = (this.options as OptionInterface[]).find((opt) => {\n return !opt.disabled && opt.value?.length && opt.value === toFind;\n });\n return label && label.label ? label.label : toFind;\n }\n\n /* Event handling */\n\n @Listen('reset', { target: 'body' })\n onReset(e) {\n const form = this.form\n ? document.querySelector('#' + this.form)\n : this.el.closest('form');\n if (!form || e.target !== this.el.closest('form')) return;\n\n this.clearSelectValue();\n }\n\n @Listen('mousedown', { target: 'body' })\n @Listen('keydown')\n handleBlur(e: KeyboardEvent | MouseEvent) {\n if (!this.hasFocus) return;\n\n const kev = e as KeyboardEvent;\n let target: Element;\n\n raf(() => {\n if (kev.key) {\n if (kev.key !== 'Tab') return;\n target = getActiveElement();\n } else target = e.target as Element;\n\n if (closestElement(this.el.tagName.toLowerCase(), target) !== this.el) {\n this.onBlur();\n }\n });\n }\n\n private setOptions = () => {\n if (\n !this.datalist ||\n !this.datalist.activeOptions ||\n !this.datalist.activeOptions.length\n )\n return;\n\n this._eOptions = this.datalist.activeOptions.map((ao) => {\n const { value, selected, label, filterMeta } = ao;\n return { value, selected, label, filterMeta };\n });\n };\n\n private handleDocumentKeyDown = (ev: KeyboardEvent) => {\n if (!this.multiple || !this.hasFocus) return;\n\n if (!this.inputSearchVal) {\n let rm: HTMLSpanElement;\n\n switch (ev.key) {\n case 'Backspace':\n if (this.inputCtrl.previousElementSibling)\n rm = this.inputCtrl.previousElementSibling as HTMLSpanElement;\n else break;\n\n this.removeValue(rm.dataset.value || null);\n break;\n\n case 'Delete':\n if (this.inputCtrl.nextElementSibling)\n rm = this.inputCtrl.nextElementSibling as HTMLSpanElement;\n else break;\n\n this.removeValue(rm.dataset.value || null);\n break;\n\n case 'ArrowLeft':\n case 'ArrowRight':\n if (!this.value.length) break;\n\n if (ev.key === 'ArrowLeft' && this.inputCtrl.previousSibling)\n this.currInsertIndex--;\n if (ev.key === 'ArrowRight' && this.inputCtrl.nextSibling)\n this.currInsertIndex++;\n\n setTimeout(() => {\n this.inputCtrl.focus();\n }, 20);\n ev.preventDefault();\n break;\n }\n }\n };\n\n private onBlur = () => {\n this.hasFocus = false;\n\n requestAnimationFrame(() => {\n if (this.validateOn === 'dirty' && !this.hasFocus)\n this.showInlineValidation();\n });\n this.nanoBlur.emit();\n\n if (!this.allowCustomValues && this.multiple) {\n this.inputSearchVal = '';\n const event = new window.Event('change');\n this.inputCtrl.dispatchEvent(event);\n }\n };\n\n private onFocus = () => {\n this.hasFocus = true;\n this.nanoFocus.emit();\n };\n\n private clearSelectValue = (ev?: Event) => {\n if (this.clearSelect && !this.readonly && !this.disabled && ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n if (this.multiple) {\n this.value = [];\n this.currInsertIndex = -1;\n } else this.value = '';\n\n this.inputCtrl.value = '';\n const event = new window.Event('change');\n this.inputCtrl.dispatchEvent(event);\n };\n\n private onClick = () => {\n this.setFocus();\n };\n\n /* Multi event handlers */\n\n private onDragStart = (ev: MouseEvent) => {\n let ele = ev.target as HTMLSpanElement;\n this.dragVal = ele.dataset.value;\n };\n\n private onDragEnd = (ev) => {\n this.dragVal = null;\n ev.preventDefault();\n };\n\n private onDragLeave = (ev: MouseEvent) => {\n let ele = ev.target as HTMLSpanElement;\n let spanVal: string =\n ele.dataset && ele.dataset.value ? ele.dataset.value : null;\n\n if (\n !spanVal ||\n this.dragVal === spanVal ||\n !this.value.includes(this.dragVal)\n ) {\n ev.preventDefault();\n return;\n }\n\n let to = this.value.indexOf(spanVal);\n let from = this.value.indexOf(this.dragVal);\n let tmpArr = this.value as Array<string>;\n let tmpVal = tmpArr[to];\n\n tmpArr[to] = tmpArr[from];\n tmpArr[from] = tmpVal;\n this.value = [...tmpArr];\n };\n\n private onMultiInput = (ev) => {\n this.inputSearchVal = ev.target.value.trim();\n this.nanoSearchChange.emit({ value: ev.target.value.trim() });\n };\n\n /* Stencil Component lifecycle hooks */\n\n connectedCallback() {\n this.debounceChanged();\n\n if (!Build.isBrowser) return;\n\n this.el.dispatchEvent(\n new CustomEvent('nanoDidLoad', {\n detail: this.el,\n })\n );\n }\n\n disconnectedCallback() {\n document.dispatchEvent(\n new CustomEvent('nanoDidUnload', {\n detail: this.el,\n })\n );\n\n if (!Build.isBrowser) return;\n if (this.mo) this.mo.disconnect();\n }\n\n componentDidLoad() {\n this.slotChangeObserver();\n this.customValidate();\n this.setDataListOpts();\n raf(() => (this.onInit = false));\n }\n\n componentWillLoad() {\n this.processSlottedContent();\n }\n\n render() {\n const labelId = this.selectId + '-lbl';\n const moreId =\n this.showInlineError || this.hasHelperSlot\n ? this.selectId + '-moreId'\n : '';\n const helperEndId = this.hasHelperEndSlot ? this.selectId + '-helper' : '';\n\n this.rtl = (this.el.ownerDocument as Document).dir === 'rtl';\n this.valueItems = [];\n\n const compWrapOptions = (({\n el,\n floatLabel,\n label,\n errorMessage,\n showInlineError,\n hasHelperSlot,\n hasHelperEndSlot,\n hasLabelSlot,\n hideLabel,\n placeholder,\n rtl,\n }) => ({\n el,\n floatLabel,\n label,\n errorMessage,\n showInlineError,\n hasHelperSlot,\n hasHelperEndSlot,\n hasLabelSlot,\n hideLabel,\n placeholder,\n rtl,\n }))(this);\n const wrapOptions = {\n ...compWrapOptions,\n labelId,\n moreId,\n helperEndId,\n hasValue: !!this.value.length || !!this.inputSearchVal.length,\n controlId: this.selectId,\n };\n\n const controlOptions = (({ readonly, disabled }) => ({\n readonly,\n disabled,\n clearControl: this.clearSelect,\n }))(this);\n\n return (\n <Host\n type={this.multiple ? 'select-multiple' : 'select-one'}\n aria-disabled={this.disabled ? 'true' : null}\n class={{\n ...createColorClasses(this.color),\n 'has-value': !!this.value.length || !!this.inputSearchVal.length,\n 'has-focus': this.hasFocus,\n 'is-invalid': this.invalid,\n 'has-label': this.label !== null && !this.floatLabel,\n 'has-float-label': this.label !== null && this.floatLabel,\n rtl: this.rtl,\n 'has-multiple': this.multiple,\n 'has-clr-btn': this.clearSelect,\n masked: this.mask,\n }}\n >\n <FormControlWrap {...wrapOptions}>\n <FormControl\n {...controlOptions}\n onClearText={this.clearSelectValue}\n control={this.el}\n ref={(el) => (this.selectWrap = el)}\n endValueSlot={\n <slot name=\"down-arrow\">\n <nano-icon slot=\"value-end\" name=\"light/chevron-down\" />\n </slot>\n }\n >\n {this.multiple && (\n <div class=\"select__multi-wrap select\">\n {this.multipleValues(labelId, moreId, helperEndId)}\n </div>\n )}\n {!this.multiple && [\n this.mask && (\n <div class=\"select__mask\">\n {this.getLabel(this.value as string)}\n </div>\n ),\n <input\n id={this.selectId}\n class=\"select__native-input\"\n ref={(input) => (this.inputCtrl = input)}\n aria-labelledby={labelId + ' ' + moreId + ' ' + helperEndId}\n disabled={this.disabled}\n form={this.form}\n placeholder={this.placeholder}\n readOnly={true}\n required={this.required}\n value={this.getLabel(this.value as string)}\n onFocus={this.onFocus}\n />,\n ]}\n </FormControl>\n </FormControlWrap>\n {!this.readonly && !this.disabled && (\n <nano-datalist\n onNanoOptionsUpdated={this.setOptions}\n ref={(el) => (this.datalist = el)}\n selected={this.valArray}\n type={this.multiple ? 'selctMulti' : 'select'}\n onNanoSelect={this.setValue}\n onNanoDeselect={(e) => {\n e.preventDefault();\n this.removeValue(e.detail.value);\n }}\n options={this._options.length ? this._options : undefined}\n >\n {this.allowCustomValues && this.multiple && !!this.inputSearchVal && (\n <nano-option\n slot=\"list-top\"\n value={this.inputSearchVal}\n selected={false}\n label={this.inputSearchVal}\n onNanoSelect={() => this.inputCtrl.focus()}\n >\n <span slot=\"check-icon\"></span>\n Add '{this.inputSearchVal}'\n </nano-option>\n )}\n <slot />\n </nano-datalist>\n )}\n\n <select\n id={this.selectId + '-hidden'}\n class=\"select__native-ctrl\"\n ref={(select) => (this.nativeSelect = select)}\n aria-labelledby={labelId + ' ' + moreId + ' ' + helperEndId}\n disabled={this.disabled}\n form={this.form}\n multiple={this.multiple}\n name={this.name}\n required={this.required}\n onInvalid={this.handleInvalid}\n >\n {this.allowCustomValues &&\n this.valArray.map((val) => {\n return (\n <option value={val} selected={true}>\n {val}\n </option>\n );\n })}\n {!this.allowCustomValues &&\n this.options.map((opt: OptionInterface) => {\n return (\n <option\n value={opt.value}\n selected={this.valArray.includes(opt.value)}\n disabled={opt.disabled}\n label={opt.label}\n >\n {this.valArray.includes(opt.value)}\n </option>\n );\n })}\n </select>\n </Host>\n );\n }\n\n private multipleValues(\n labelId: string,\n moreId: string,\n helperEndId: string\n ): VNode | (VNode | VNode[])[] {\n let input: VNode = (\n <input\n class=\"select__multi-input\"\n id={this.selectId}\n ref={(input) => (this.inputCtrl = input)}\n readOnly={this.readonly}\n disabled={this.disabled}\n autoFocus={this.autofocus}\n autocomplete=\"off\"\n onKeyDown={this.handleDocumentKeyDown}\n onInput={this.onMultiInput}\n value={this.inputSearchVal}\n onTouchStart={this.onClick}\n onMouseDown={this.onClick}\n onFocus={this.onFocus}\n placeholder={\n this.placeholder && !this.value.length ? this.placeholder : ''\n }\n aria-labelledby={labelId + ' ' + moreId + ' ' + helperEndId}\n />\n );\n if (!this.value.length) return input;\n\n return (this.value as Array<string>).map((val, i) => {\n let toReturn: VNode | VNode[] = (\n <span\n onDragStart={this.onDragStart}\n onDragLeave={this.onDragLeave}\n onDragEnd={this.onDragEnd}\n onDragOver={(e) => e.preventDefault()}\n draggable\n data-value={val}\n ref={(span) => this.valueItems.push(span)}\n class=\"select__multi-value\"\n >\n <span>{this.getLabel(val)}</span>\n <button\n class=\"select__multi-value-remove\"\n type=\"button\"\n tabindex=\"-1\"\n onTouchEnd={() => {\n this.removeValue(val);\n }}\n onMouseUp={() => {\n this.removeValue(val);\n }}\n >\n <nano-icon name=\"light/times\"></nano-icon>\n </button>\n </span>\n );\n if (i === 0 && this.currInsertIndex < 0)\n toReturn = [input, toReturn as VNode];\n else if (i === this.currInsertIndex)\n toReturn = [toReturn as VNode, input];\n return toReturn;\n });\n }\n}\n"]}
@@ -1,5 +0,0 @@
1
- var __awaiter=this&&this.__awaiter||function(t,n,e,i){function a(t){return t instanceof e?t:new e((function(n){n(t)}))}return new(e||(e=Promise))((function(e,o){function r(t){try{s(i.next(t))}catch(n){o(n)}}function l(t){try{s(i["throw"](t))}catch(n){o(n)}}function s(t){t.done?e(t.value):a(t.value).then(r,l)}s((i=i.apply(t,n||[])).next())}))};var __generator=this&&this.__generator||function(t,n){var e={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},i,a,o,r;return r={next:l(0),throw:l(1),return:l(2)},typeof Symbol==="function"&&(r[Symbol.iterator]=function(){return this}),r;function l(t){return function(n){return s([t,n])}}function s(r){if(i)throw new TypeError("Generator is already executing.");while(e)try{if(i=1,a&&(o=r[0]&2?a["return"]:r[0]?a["throw"]||((o=a["return"])&&o.call(a),0):a.next)&&!(o=o.call(a,r[1])).done)return o;if(a=0,o)r=[r[0]&2,o.value];switch(r[0]){case 0:case 1:o=r;break;case 4:e.label++;return{value:r[1],done:false};case 5:e.label++;a=r[1];r=[0];continue;case 7:r=e.ops.pop();e.trys.pop();continue;default:if(!(o=e.trys,o=o.length>0&&o[o.length-1])&&(r[0]===6||r[0]===2)){e=0;continue}if(r[0]===3&&(!o||r[1]>o[0]&&r[1]<o[3])){e.label=r[1];break}if(r[0]===6&&e.label<o[1]){e.label=o[1];o=r;break}if(o&&e.label<o[2]){e.label=o[2];e.ops.push(r);break}if(o[2])e.ops.pop();e.trys.pop();continue}r=n.call(t,e)}catch(l){r=[6,l];a=0}finally{i=o=0}if(r[0]&5)throw r[1];return{value:r[0]?r[1]:void 0,done:true}}};
2
- /*!
3
- * Web Components for Nanopore digital Web Apps
4
- */System.register(["./p-f48be9f5.system.js","./p-1c216ca4.system.js","./p-d01bd3c3.system.js","./p-ef053a2f.system.js","./p-1d13dbdf.system.js","./p-89edc042.system.js"],(function(t){"use strict";var n,e,i,a,o,r,l,s,p,c,u,d;return{setters:[function(t){n=t.r;e=t.c;i=t.h;a=t.e;o=t.g},function(t){r=t.r},function(t){l=t.F;s=t.a},function(t){p=t.d;c=t.a},function(t){u=t.c},function(t){d=t.c}],execute:function(){var 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}[disabled].sc-nano-input-h:not([disabled=false]){opacity:0.5}.form-ctrl.sc-nano-input{min-width:100%;display:block}.form-ctrl.has-helper-end.sc-nano-input{display:-webkit-box;display:-ms-flexbox;display:flex;gap:1rem;opacity:0}.form-ctrl.has-helper-end.is-ready.sc-nano-input{opacity:1}.form-ctrl.has-helper-end.sc-nano-input .form-ctrl__wrapper.sc-nano-input{-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%}.form-ctrl.has-helper-end.sc-nano-input .form-ctrl__helper-end.sc-nano-input{display:none}.form-ctrl.has-helper-end.has-enough-width.sc-nano-input .form-ctrl__helper-end.sc-nano-input{display:block}.form-ctrl.has-helper-end.has-enough-width.sc-nano-input .form-ctrl__helper.sc-nano-input{display:none}.form-ctrl__wrapper.sc-nano-input{display:block}label.sc-nano-input,.form-ctrl__more.sc-nano-input,.form-ctrl__error.sc-nano-input,.form-ctrl__helper.sc-nano-input{display:block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}label.visually-hide.sc-nano-input,.form-ctrl__more.visually-hide.sc-nano-input,.form-ctrl__error.visually-hide.sc-nano-input,.form-ctrl__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}.form-ctrl__float-label.sc-nano-input{padding-top:0;padding-bottom:0;-webkit-padding-end:0;padding-inline-end:0;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);color:var(--label-color);position:absolute;font-size:1.15em;-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:1}.has-focus.sc-nano-input-h .form-ctrl__float-label.sc-nano-input,.has-value.sc-nano-input-h .form-ctrl__float-label.sc-nano-input{-webkit-transform:translateY(-110%);transform:translateY(-110%);font-size:0.8em;opacity:0.7}.form-ctrl__float-label.sc-nano-input .form-ctrl__label-charcount.sc-nano-input{opacity:0;-webkit-transition:opacity 0.125s ease-in;transition:opacity 0.125s ease-in}.has-focus.sc-nano-input-h .form-ctrl__float-label.sc-nano-input .form-ctrl__label-charcount.sc-nano-input,.has-value.sc-nano-input-h .form-ctrl__float-label.sc-nano-input .form-ctrl__label-charcount.sc-nano-input{opacity:1}.form-ctrl__textarea.sc-nano-input .form-ctrl__float-label.sc-nano-input{top:50%}.has-focus.sc-nano-input-h .form-ctrl__textarea.sc-nano-input .form-ctrl__float-label.sc-nano-input{top:0;-webkit-transform:translateY(38%);transform:translateY(38%)}.has-value.sc-nano-input-h .form-ctrl__textarea.sc-nano-input .form-ctrl__float-label.sc-nano-input{top:0;-webkit-transform:translateY(38%);transform:translateY(38%)}.form-ctrl__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}.form-ctrl__label.sc-nano-input .form-ctrl__label-wrap.sc-nano-input{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.form-ctrl__label.sc-nano-input .form-ctrl__label-placeholder.sc-nano-input{margin-left:unset;margin-right:unset;margin-top:0;-webkit-margin-end:5px;margin-inline-end:5px;margin-bottom:0;-webkit-margin-start:0;margin-inline-start: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}.form-ctrl__label.sc-nano-input .form-ctrl__label-charcount.sc-nano-input{margin-left:unset;margin-right:unset;margin-top:0;-webkit-margin-end:0;margin-inline-end:0;margin-bottom:0;-webkit-margin-start:auto;margin-inline-start:auto;font-size:0.9em;opacity:0.5}.has-value.sc-nano-input-h .form-ctrl__label.sc-nano-input .form-ctrl__label-placeholder.sc-nano-input{opacity:0.5}.has-focus.sc-nano-input-h .form-ctrl__label.sc-nano-input{color:var(--label-color--focus)}.is-invalid.sc-nano-input-h .form-ctrl__label.sc-nano-input{color:var(--label-color--invalid)}.has-float-label.sc-nano-input .select__multi-input.sc-nano-input,.has-float-label.sc-nano-input .select__native-input.sc-nano-input,.has-float-label.sc-nano-input .input__native-ctrl.sc-nano-input{opacity:0;-webkit-transition:opacity 0.125s ease-in;transition:opacity 0.125s ease-in}.has-focus.sc-nano-input-h .has-float-label.sc-nano-input .select__multi-input.sc-nano-input,.has-value.sc-nano-input-h .has-float-label.sc-nano-input .select__multi-input.sc-nano-input,.has-focus.sc-nano-input-h .has-float-label.sc-nano-input .select__native-input.sc-nano-input,.has-value.sc-nano-input-h .has-float-label.sc-nano-input .select__native-input.sc-nano-input,.has-focus.sc-nano-input-h .has-float-label.sc-nano-input .input__native-ctrl.sc-nano-input,.has-value.sc-nano-input-h .has-float-label.sc-nano-input .input__native-ctrl.sc-nano-input{opacity:1}.form-ctrl__more.sc-nano-input{height:1em;position:relative;margin-left:unset;margin-right:unset;margin-top:4px;-webkit-margin-end:0;margin-inline-end:0;-webkit-margin-start:3px;margin-inline-start:3px;margin-bottom:var(--padding-bottom)}.form-ctrl__helper.sc-nano-input,.form-ctrl__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}.form-ctrl__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 .form-ctrl__helper.sc-nano-input{opacity:0}.form-ctrl__helper-end.sc-nano-input{-webkit-box-flex:1;-ms-flex:1 1 30%;flex:1 1 30%;min-width:150px;font-size:var(--invalid-msg-font-size);color:var(--help-msg-color);font-style:italic}.form-ctrl__error.sc-nano-input{opacity:0;color:var(--invalid-msg-color);font-stretch:condensed}.is-invalid.sc-nano-input-h .form-ctrl__error.sc-nano-input{opacity:1}.form-ctrl__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-top:0 !important;padding-bottom:0 !important;padding-left:0 !important;padding-right: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);-webkit-padding-start:calc(var(--input-border-hint-width) - var(--input-border-width)) !important;padding-inline-start:calc(var(--input-border-hint-width) - var(--input-border-width)) !important}.has-focus.sc-nano-input-h .form-ctrl__input.sc-nano-input{background:var(--input-bg-color--focus);border:var(--input-border-style--focus);border-width:var(--input-border-width);-webkit-padding-start:calc(var(--input-border-hint-width) - var(--input-border-width)) !important;padding-inline-start:calc(var(--input-border-hint-width) - var(--input-border-width)) !important}.is-invalid.sc-nano-input-h .form-ctrl__input.sc-nano-input{background:var(--input-bg-color--invalid);border:var(--input-border-style--invalid);border-width:var(--input-border-width);-webkit-border-start:var(--input-border-style--invalid-focus) var(--input-border-hint-width);border-inline-start:var(--input-border-style--invalid-focus) var(--input-border-hint-width);-webkit-padding-start:0 !important;padding-inline-start:0 !important}.is-invalid.has-focus.sc-nano-input-h .form-ctrl__input.sc-nano-input{background:var(--input-bg-color--invalid);border:var(--input-border-style--invalid-focus);border-width:var(--input-border-width);-webkit-border-start:var(--input-border-style--invalid-focus) var(--input-border-hint-width);border-inline-start:var(--input-border-style--invalid-focus) var(--input-border-hint-width);-webkit-padding-start:0 !important;padding-inline-start:0 !important}.form-ctrl__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}.form-ctrl__clear-btn.sc-nano-input,.form-ctrl__slot-end.sc-nano-input,.form-ctrl__slot-start.sc-nano-input,.form-ctrl__slot-value-end.sc-nano-input{--nano-icon-size:1.4em;margin-top:0;margin-bottom:0;margin-left:unset;margin-right:unset;-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:0;margin-inline-end:0;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 .form-ctrl__slot-start.sc-nano-input{display:none}.form-ctrl__slot-start.sc-nano-input-s>*,.form-ctrl__slot-start .sc-nano-input-s>*,.form-ctrl__slot-end.sc-nano-input-s>*,.form-ctrl__slot-end .sc-nano-input-s>*,.form-ctrl__slot-value-end.sc-nano-input-s>*,.form-ctrl__slot-value-end .sc-nano-input-s>*,.form-ctrl__slot-value-end.sc-nano-input *.sc-nano-input{--nano-icon-size:1.4em;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);font-size:1em;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;z-index:1}.sc-nano-input-h[disabled]:not([disabled=false]) .form-ctrl__slot-start.sc-nano-input-s>*,.sc-nano-input-h[disabled]:not([disabled=false]) .form-ctrl__slot-start .sc-nano-input-s>*,.sc-nano-input-h[disabled]:not([disabled=false]) .form-ctrl__slot-end.sc-nano-input-s>*,.sc-nano-input-h[disabled]:not([disabled=false]) .form-ctrl__slot-end .sc-nano-input-s>*,.sc-nano-input-h[disabled]:not([disabled=false]) .form-ctrl__slot-value-end.sc-nano-input-s>*,.sc-nano-input-h[disabled]:not([disabled=false]) .form-ctrl__slot-value-end .sc-nano-input-s>*,[disabled].sc-nano-input-h:not([disabled=false]) .form-ctrl__slot-value-end.sc-nano-input *.sc-nano-input{pointer-events:none}.form-ctrl__slot-value-end.sc-nano-input-s>*,.form-ctrl__slot-value-end .sc-nano-input-s>*,.form-ctrl__slot-value-end.sc-nano-input *.sc-nano-input{pointer-events:none}.form-ctrl__clear-btn.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 .form-ctrl__clear-btn.sc-nano-input{color:var(--clear-btn-color--invalid)}.has-value.sc-nano-input-h .form-ctrl__clear-btn.sc-nano-input{padding-top:0;padding-bottom:0;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);opacity:1;width:auto}.form-ctrl__clear-btn.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, 6px));--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(--nano-input-border-width, 1px);--input-border-hint-width:3px;--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, #e4e6e8);--input-border-style--invalid-focus:var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #ef4135);--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, white);--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, #badcf0);position:relative;width:100%;padding:0 !important;color:currentColor;display: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))}.input__native-ctrl.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;padding-left:unset;padding-right:unset;padding-top:0;padding-bottom:0;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);border-radius:var(--input-border-radius);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;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;resize:none;overflow:hidden;line-height:2.5em;min-height:2.5em}.has-float-label.sc-nano-input .input__native-ctrl.sc-nano-input{line-height:2.1em;min-height:2.1em;padding-top:1.4em}.input__native-ctrl.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:inherit;min-height:inherit}.input__native-ctrl.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:inherit;min-height:inherit}.input__native-ctrl.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:inherit;min-height:inherit}.input__native-ctrl.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:inherit;min-height:inherit}.input__native-ctrl.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:inherit;min-height:inherit}.input__native-ctrl.sc-nano-input::-moz-placeholder{line-height:2.8em;text-overflow:ellipsis}.input__native-ctrl.sc-nano-input:-webkit-autofill{background-color:transparent}.input__native-ctrl.sc-nano-input::-webkit-search-decoration,.input__native-ctrl.sc-nano-input::-webkit-search-cancel-button,.input__native-ctrl.sc-nano-input::-webkit-search-results-button,.input__native-ctrl.sc-nano-input::-webkit-search-results-decoration{-webkit-appearance:none;appearance:none}.input__native-ctrl.sc-nano-input:invalid{-webkit-box-shadow:none;box-shadow:none}.input__native-ctrl.sc-nano-input::-ms-clear,.input__native-ctrl.sc-nano-input::-ms-reveal{display:none}.input__native-ctrl.input__resizable.sc-nano-input{resize:vertical;overflow:auto}.form-ctrl__textarea.sc-nano-input .input__native-ctrl.sc-nano-input{line-height:1.5em;padding-top:var(--padding-top);padding-bottom:0.25em;white-space:pre-wrap}.form-ctrl__textarea.sc-nano-input .input__native-ctrl.sc-nano-input::-webkit-input-placeholder{line-height:1.5em}.form-ctrl__textarea.sc-nano-input .input__native-ctrl.sc-nano-input::-moz-placeholder{line-height:1.5em}.form-ctrl__textarea.sc-nano-input .input__native-ctrl.sc-nano-input:-ms-input-placeholder{line-height:1.5em}.form-ctrl__textarea.sc-nano-input .input__native-ctrl.sc-nano-input::-ms-input-placeholder{line-height:1.5em}.form-ctrl__textarea.sc-nano-input .input__native-ctrl.sc-nano-input::placeholder{line-height:1.5em}.has-float-label.sc-nano-input .form-ctrl__textarea.sc-nano-input .input__native-ctrl.sc-nano-input{padding-top:1.75em}[readonly].sc-nano-input-h:not([readonly=false]) .input__native-ctrl.sc-nano-input{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}';var f=0;var b=t("nano_input",function(){function t(t){var i=this;n(this,t);this.nanoInput=e(this,"nanoInput",7);this.nanoChange=e(this,"nanoChange",7);this.nanoBlur=e(this,"nanoBlur",7);this.nanoFocus=e(this,"nanoFocus",7);this.nanoDidLoad=e(this,"nanoDidLoad",7);this.nanoDidUnload=e(this,"nanoDidUnload",7);this.nanoValidate=e(this,"nanoValidate",7);this.inputId="nano-input-"+f++;this.didBlurAfterEdit=false;this.rtl=false;this.charCount=0;this.hasRendered=false;this.hasFocus=false;this.hasLabelSlot=false;this.hasHelperSlot=false;this.hasHelperEndSlot=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="submitThenDirty";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=function(t){if(i.validateOn==="submitThenDirty")i.validateOn="dirty";if(!i.nativeInput.validity.valid){if(i.showInlineError){if(t)t.preventDefault();i.errorMessage=i.nativeInput.validationMessage}i._invalid=true}else i._invalid=false;i.nanoValidate.emit({isValid:!i._invalid,errorMessage:i.nativeInput.validationMessage,originalEvent:t})};this.onInput=function(t){var n=t.target;i.value=(n===null||n===void 0?void 0:n.value)||"";i.nanoInput.emit(t)};this.onBlur=function(){i.hasFocus=false;i.focusChanged();if(i.validateOn==="dirty")i.validate();i.nanoBlur.emit()};this.onFocus=function(){i.hasFocus=true;i.focusChanged();i.nanoFocus.emit()};this.onKeydown=function(){if(i.shouldClearOnEdit()){if(i.didBlurAfterEdit&&i.hasValue()){i.clearTextInput()}i.didBlurAfterEdit=false}};this.clearTextInput=function(t){if(i.clearInput&&!i.readonly&&!i.disabled&&t){t.preventDefault();t.stopPropagation()}i.value="";i.nativeInput.value="";var n=new window.Event("change");i.nativeInput.dispatchEvent(n)};this.validate=p(this.validate,50)}Object.defineProperty(t.prototype,"nativeInputWrap",{get:function(){return this._nativeInputWrap},set:function(t){if(this._nativeInputWrap===t)return;this._nativeInputWrap=t;this.setDataListOpts()},enumerable:false,configurable:true});t.prototype.setDataListOpts=function(){if(!this.datalist)return;var t=this.datalist.dropDownConfig||{};this.datalist.dropDownConfig=Object.assign(Object.assign({},t),{skidding:-1,tetherTo:this.nativeInputWrap})};Object.defineProperty(t.prototype,"invalid",{get:function(){return this._invalid},enumerable:false,configurable:true});Object.defineProperty(t.prototype,"validityMessage",{get:function(){if(!this.nativeInput)return"";return this.nativeInput.validationMessage},enumerable:false,configurable:true});t.prototype.shouldValidate=function(){var t=this;if(!this.hasRendered)return;requestAnimationFrame((function(){if(t.validateOn==="dirty")t.validate()}))};t.prototype.valueChanged=function(){var t=this;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"}requestAnimationFrame((function(){if(t.validateOn==="dirty")t.validate()}))};t.prototype.debounceChanged=function(){this.nanoChange=c(this.nanoChange,this.debounce)};t.prototype.reportValidity=function(t){return __awaiter(this,void 0,void 0,(function(){var n=this;return __generator(this,(function(e){return[2,new Promise((function(e){if(t)n.validate();setTimeout((function(){e({isValid:!n._invalid,errorMessage:n.nativeInput.validationMessage})}),50)}))]}))}))};t.prototype.setFocus=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){if(this.nativeInput){this.nativeInput.focus();this.nativeInput.click()}return[2]}))}))};t.prototype.getInputElement=function(){return Promise.resolve(this.nativeInput)};t.prototype.showError=function(t){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(n){if(this.nativeInput){this.nativeInput.setCustomValidity(t);this.validate()}return[2]}))}))};t.prototype.onReset=function(t){var n=this.form?document.querySelector("#"+this.form):this.el.closest("form");if(!n||t.target!==this.el.closest("form"))return;this.value=""};t.prototype.handleBlur=function(t){var n=this;if(!this.hasFocus)return;var e=t;var i;r((function(){if(e.key){if(e.key!=="Tab")return;i=document.activeElement}else i=t.target;if(u(n.el.tagName.toLowerCase(),i)!==n.el){n.onBlur()}}))};t.prototype.shouldClearOnEdit=function(){var t=this,n=t.type,e=t.clearOnEdit;return e===undefined?n==="password":e};t.prototype.getValue=function(){return this.value||""};t.prototype.focusChanged=function(){if(!this.hasFocus&&this.shouldClearOnEdit()&&this.hasValue()){this.didBlurAfterEdit=true}};t.prototype.hasValue=function(){return this.getValue().length>0};t.prototype.slotChangeObserver=function(){var t=this;if(this.mo)this.mo.disconnect();var n=this.mo=new MutationObserver((function(){return t.processSlottedContent()}));n.observe(this.el,{childList:true,subtree:true})};t.prototype.processSlottedContent=function(){this.hasLabelSlot=!!this.el.querySelectorAll('[slot="label"]');this.hasHelperSlot=!!this.el.querySelector('[slot="helper"]');this.hasHelperEndSlot=!!this.el.querySelector('[slot="helper-end"]');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)}};t.prototype.connectedCallback=function(){this.debounceChanged();{this.el.dispatchEvent(new CustomEvent("nanoDidLoad",{detail:this.el}))}};t.prototype.disconnectedCallback=function(){{document.dispatchEvent(new CustomEvent("nanoDidUnload",{detail:this.el}))}if(this.mo)this.mo.disconnect()};t.prototype.componentDidLoad=function(){var t=this;this.slotChangeObserver();this.hasRendered=true;if(this.autofocus)setTimeout((function(n){return t.setFocus()}),300)};t.prototype.componentWillLoad=function(){this.processSlottedContent()};t.prototype.render=function(){var t=this;var n=this.getValue();var e=this.inputId+"-lbl";var o=this.showInlineError||this.hasHelperSlot?this.inputId+"-more":"";var r=this.hasHelperEndSlot?this.inputId+"-helper":"";this.rtl=this.el.ownerDocument.dir==="rtl";var p=function(t){var n=t.el,e=t.floatLabel,i=t.label,a=t.errorMessage,o=t.type,r=t.showInlineError,l=t.hasHelperSlot,s=t.hasLabelSlot,p=t.hideLabel,c=t.placeholder,u=t.maxlength,d=t.charCount,h=t.showCharCount,f=t.rtl,b=t.hasHelperEndSlot;return{el:n,floatLabel:e,label:i,errorMessage:a,type:o,showInlineError:r,hasHelperSlot:l,hasLabelSlot:s,hideLabel:p,placeholder:c,maxlength:u,charCount:d,showCharCount:h,rtl:f,hasHelperEndSlot:b}}(this);var c=Object.assign(Object.assign({},p),{labelId:e,moreId:o,helperEndId:r,hasValue:this.hasValue(),controlId:this.inputId});var u=function(n){var e=n.clearInput,i=n.readonly,a=n.disabled;return{clearInput:e,readonly:i,disabled:a,clearControl:t.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(l,Object.assign({},c),i(s,Object.assign({},u,{onClearText:this.clearTextInput,control:this.el,ref:function(n){return t.nativeInputWrap=n}}),this.type!=="textarea"&&i("input",{id:this.inputId,class:"input__native-ctrl",ref:function(n){return t.nativeInput=n},"aria-labelledby":e+" "+o+" "+r,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.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:{"input__native-ctrl":true,input__resizable:this.resize==="true"},ref:function(n){return t.nativeInput=n},"aria-labelledby":e+" "+o+" "+r,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.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)))};Object.defineProperty(t.prototype,"el",{get:function(){return o(this)},enumerable:false,configurable:true});Object.defineProperty(t,"watchers",{get:function(){return{datalist:["setDataListOpts"],minlength:["shouldValidate"],maxlength:["shouldValidate"],min:["shouldValidate"],max:["shouldValidate"],required:["shouldValidate"],disabled:["shouldValidate"],readonly:["shouldValidate"],pattern:["shouldValidate"],inputmode:["shouldValidate"],value:["valueChanged"],debounce:["debounceChanged"]}},enumerable:false,configurable:true});return t}());b.style=h}}}));
5
- //# sourceMappingURL=p-fc3702a0.system.entry.js.map