@nanoporetech-digital/components 2.3.1 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/nano-checkbox.cjs.entry.js.map +1 -1
  4. package/dist/cjs/nano-components.cjs.js +1 -1
  5. package/dist/cjs/nano-datalist_3.cjs.entry.js +2 -1
  6. package/dist/cjs/nano-datalist_3.cjs.entry.js.map +1 -1
  7. package/dist/cjs/nano-date-input.cjs.entry.js +18 -6
  8. package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
  9. package/dist/cjs/nano-details.cjs.entry.js +3 -3
  10. package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
  11. package/dist/cjs/nano-dropdown.cjs.entry.js +1 -1
  12. package/dist/cjs/nano-dropdown.cjs.entry.js.map +1 -1
  13. package/dist/cjs/nano-nav-item_2.cjs.entry.js +10 -2
  14. package/dist/cjs/nano-nav-item_2.cjs.entry.js.map +1 -1
  15. package/dist/cjs/nano-split-pane.cjs.entry.js +8 -0
  16. package/dist/cjs/nano-split-pane.cjs.entry.js.map +1 -1
  17. package/dist/cjs/nano-tab-group.cjs.entry.js +1 -1
  18. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  19. package/dist/cjs/nano-tooltip.cjs.entry.js +1 -1
  20. package/dist/cjs/{popover-848d73ea.js → popover-8c86d338.js} +19 -4
  21. package/dist/cjs/popover-8c86d338.js.map +1 -0
  22. package/dist/collection/components/accordion/accordion.js +1 -1
  23. package/dist/collection/components/alert/alert.js +1 -1
  24. package/dist/collection/components/algolia/algolia-filter.js +2 -2
  25. package/dist/collection/components/algolia/algolia-input.js +5 -5
  26. package/dist/collection/components/algolia/algolia-results.js +1 -1
  27. package/dist/collection/components/algolia/algolia.js +6 -6
  28. package/dist/collection/components/checkbox/checkbox-group.js +2 -2
  29. package/dist/collection/components/checkbox/checkbox.js +6 -6
  30. package/dist/collection/components/checkbox/checkbox.js.map +1 -1
  31. package/dist/collection/components/datalist/datalist.js +6 -5
  32. package/dist/collection/components/datalist/datalist.js.map +1 -1
  33. package/dist/collection/components/date-input/date-input.css +0 -20
  34. package/dist/collection/components/date-input/date-input.js +43 -13
  35. package/dist/collection/components/date-input/date-input.js.map +1 -1
  36. package/dist/collection/components/date-picker/date-picker.js +5 -5
  37. package/dist/collection/components/details/details.js +11 -6
  38. package/dist/collection/components/details/details.js.map +1 -1
  39. package/dist/collection/components/dialog/dialog.js +1 -1
  40. package/dist/collection/components/dropdown/dropdown.js +8 -3
  41. package/dist/collection/components/dropdown/dropdown.js.map +1 -1
  42. package/dist/collection/components/file-upload/file-upload.js +4 -4
  43. package/dist/collection/components/global-nav/global-nav.js +4 -4
  44. package/dist/collection/components/grid/grid-item.js +1 -1
  45. package/dist/collection/components/icon/icon.js +1 -1
  46. package/dist/collection/components/input/input.js +5 -5
  47. package/dist/collection/components/nav-item/nav-item.css +22 -0
  48. package/dist/collection/components/nav-item/nav-item.js +34 -6
  49. package/dist/collection/components/nav-item/nav-item.js.map +1 -1
  50. package/dist/collection/components/range/range.js +4 -4
  51. package/dist/collection/components/resize-observe/resize-observe.js +1 -1
  52. package/dist/collection/components/select/select.js +8 -8
  53. package/dist/collection/components/select/select.js.map +1 -1
  54. package/dist/collection/components/slides/slides.js +7 -7
  55. package/dist/collection/components/split-pane/split-pane.js +49 -1
  56. package/dist/collection/components/split-pane/split-pane.js.map +1 -1
  57. package/dist/collection/components/tabs/tab-group.css +6 -4
  58. package/dist/collection/components/tabs/tab-group.js +2 -2
  59. package/dist/collection/utils/popover.js +18 -3
  60. package/dist/collection/utils/popover.js.map +1 -1
  61. package/dist/components/datalist.js +2 -1
  62. package/dist/components/datalist.js.map +1 -1
  63. package/dist/components/dropdown.js.map +1 -1
  64. package/dist/components/nano-checkbox.js +3 -3
  65. package/dist/components/nano-checkbox.js.map +1 -1
  66. package/dist/components/nano-date-input.js +19 -6
  67. package/dist/components/nano-date-input.js.map +1 -1
  68. package/dist/components/nano-details.js +3 -3
  69. package/dist/components/nano-details.js.map +1 -1
  70. package/dist/components/nano-split-pane.js +11 -1
  71. package/dist/components/nano-split-pane.js.map +1 -1
  72. package/dist/components/nano-tab-group.js +1 -1
  73. package/dist/components/nano-tab-group.js.map +1 -1
  74. package/dist/components/nav-item.js +11 -2
  75. package/dist/components/nav-item.js.map +1 -1
  76. package/dist/components/popover.js +18 -3
  77. package/dist/components/popover.js.map +1 -1
  78. package/dist/components/select.js.map +1 -1
  79. package/dist/custom-elements/index.js +63 -19
  80. package/dist/custom-elements/index.js.map +1 -1
  81. package/dist/esm/loader.js +1 -1
  82. package/dist/esm/nano-checkbox.entry.js.map +1 -1
  83. package/dist/esm/nano-components.js +1 -1
  84. package/dist/esm/nano-datalist_3.entry.js +2 -1
  85. package/dist/esm/nano-datalist_3.entry.js.map +1 -1
  86. package/dist/esm/nano-date-input.entry.js +18 -6
  87. package/dist/esm/nano-date-input.entry.js.map +1 -1
  88. package/dist/esm/nano-details.entry.js +3 -3
  89. package/dist/esm/nano-details.entry.js.map +1 -1
  90. package/dist/esm/nano-dropdown.entry.js +1 -1
  91. package/dist/esm/nano-dropdown.entry.js.map +1 -1
  92. package/dist/esm/nano-nav-item_2.entry.js +10 -2
  93. package/dist/esm/nano-nav-item_2.entry.js.map +1 -1
  94. package/dist/esm/nano-split-pane.entry.js +8 -0
  95. package/dist/esm/nano-split-pane.entry.js.map +1 -1
  96. package/dist/esm/nano-tab-group.entry.js +1 -1
  97. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  98. package/dist/esm/nano-tooltip.entry.js +1 -1
  99. package/dist/esm/{popover-46b5193d.js → popover-7639005b.js} +19 -4
  100. package/dist/{nano-components/p-d35d468b.system.js.map → esm/popover-7639005b.js.map} +1 -1
  101. package/dist/esm-es5/loader.js +1 -1
  102. package/dist/esm-es5/loader.js.map +1 -1
  103. package/dist/esm-es5/nano-checkbox.entry.js.map +1 -1
  104. package/dist/esm-es5/nano-components.js +1 -1
  105. package/dist/esm-es5/nano-components.js.map +1 -1
  106. package/dist/esm-es5/nano-datalist_3.entry.js +1 -1
  107. package/dist/esm-es5/nano-datalist_3.entry.js.map +1 -1
  108. package/dist/esm-es5/nano-date-input.entry.js +1 -1
  109. package/dist/esm-es5/nano-date-input.entry.js.map +1 -1
  110. package/dist/esm-es5/nano-details.entry.js +1 -1
  111. package/dist/esm-es5/nano-details.entry.js.map +1 -1
  112. package/dist/esm-es5/nano-dropdown.entry.js +1 -1
  113. package/dist/esm-es5/nano-dropdown.entry.js.map +1 -1
  114. package/dist/esm-es5/nano-nav-item_2.entry.js +1 -1
  115. package/dist/esm-es5/nano-nav-item_2.entry.js.map +1 -1
  116. package/dist/esm-es5/nano-split-pane.entry.js +2 -2
  117. package/dist/esm-es5/nano-split-pane.entry.js.map +1 -1
  118. package/dist/esm-es5/nano-tab-group.entry.js +2 -2
  119. package/dist/esm-es5/nano-tab-group.entry.js.map +1 -1
  120. package/dist/esm-es5/nano-tooltip.entry.js +1 -1
  121. package/dist/esm-es5/{popover-46b5193d.js → popover-7639005b.js} +2 -2
  122. package/dist/esm-es5/popover-7639005b.js.map +1 -0
  123. package/dist/nano-components/nano-components.esm.js +1 -1
  124. package/dist/nano-components/nano-components.esm.js.map +1 -1
  125. package/dist/nano-components/p-0618fac6.system.entry.js +5 -0
  126. package/dist/nano-components/p-0618fac6.system.entry.js.map +1 -0
  127. package/dist/nano-components/p-096682d9.system.js +1 -1
  128. package/dist/nano-components/p-096682d9.system.js.map +1 -1
  129. package/dist/nano-components/{p-4b7cd30c.js → p-178c34e3.js} +2 -2
  130. package/dist/nano-components/p-178c34e3.js.map +1 -0
  131. package/dist/nano-components/p-20db18f3.entry.js.map +1 -1
  132. package/dist/nano-components/p-2be7aab0.system.entry.js +5 -0
  133. package/dist/nano-components/p-2be7aab0.system.entry.js.map +1 -0
  134. package/dist/nano-components/p-2e38a927.entry.js +5 -0
  135. package/dist/nano-components/p-2e38a927.entry.js.map +1 -0
  136. package/dist/nano-components/{p-8b3ee91b.system.entry.js → p-383fda90.system.entry.js} +2 -2
  137. package/dist/nano-components/{p-8b3ee91b.system.entry.js.map → p-383fda90.system.entry.js.map} +0 -0
  138. package/dist/nano-components/p-4ee978ff.entry.js +5 -0
  139. package/dist/nano-components/p-4ee978ff.entry.js.map +1 -0
  140. package/dist/nano-components/{p-d9f2dda5.entry.js → p-58d7f10f.entry.js} +2 -2
  141. package/dist/nano-components/p-58d7f10f.entry.js.map +1 -0
  142. package/dist/nano-components/{p-e11bd40d.entry.js → p-7246bef5.entry.js} +2 -2
  143. package/dist/nano-components/p-7246bef5.entry.js.map +1 -0
  144. package/dist/nano-components/p-7d351076.system.entry.js +5 -0
  145. package/dist/nano-components/p-7d351076.system.entry.js.map +1 -0
  146. package/dist/nano-components/p-93448bcd.system.entry.js.map +1 -1
  147. package/dist/nano-components/{p-d35d468b.system.js → p-9745d44e.system.js} +2 -2
  148. package/dist/nano-components/p-9745d44e.system.js.map +1 -0
  149. package/dist/nano-components/p-99acaa4f.system.entry.js +5 -0
  150. package/dist/nano-components/p-99acaa4f.system.entry.js.map +1 -0
  151. package/dist/nano-components/{p-fd1a86d2.system.entry.js → p-9acc4596.system.entry.js} +2 -2
  152. package/dist/nano-components/p-9acc4596.system.entry.js.map +1 -0
  153. package/dist/nano-components/p-bcd69559.entry.js +5 -0
  154. package/dist/nano-components/p-bcd69559.entry.js.map +1 -0
  155. package/dist/nano-components/{p-094ab6f8.entry.js → p-c9d09839.entry.js} +2 -2
  156. package/dist/nano-components/p-c9d09839.entry.js.map +1 -0
  157. package/dist/nano-components/p-d4dfa4c5.entry.js +5 -0
  158. package/dist/nano-components/p-d4dfa4c5.entry.js.map +1 -0
  159. package/dist/nano-components/{p-94593617.system.entry.js → p-d8d8bac6.system.entry.js} +2 -2
  160. package/dist/nano-components/p-d8d8bac6.system.entry.js.map +1 -0
  161. package/dist/nano-components/{p-e01adaa3.entry.js → p-e7fdc62d.entry.js} +2 -2
  162. package/dist/nano-components/{p-e01adaa3.entry.js.map → p-e7fdc62d.entry.js.map} +0 -0
  163. package/dist/nano-components/p-ec39b143.system.entry.js +5 -0
  164. package/dist/nano-components/p-ec39b143.system.entry.js.map +1 -0
  165. package/dist/types/components/datalist/datalist.d.ts +1 -1
  166. package/dist/types/components/date-input/date-input.d.ts +5 -0
  167. package/dist/types/components/details/details.d.ts +5 -0
  168. package/dist/types/components/dropdown/dropdown.d.ts +2 -1
  169. package/dist/types/components/nav-item/nav-item.d.ts +4 -0
  170. package/dist/types/components/split-pane/split-pane.d.ts +4 -0
  171. package/dist/types/components.d.ts +31 -28
  172. package/dist/types/utils/popover.d.ts +12 -11
  173. package/docs-json.json +144 -99
  174. package/docs-vscode.json +17 -1
  175. package/package.json +2 -2
  176. package/dist/cjs/popover-848d73ea.js.map +0 -1
  177. package/dist/esm/popover-46b5193d.js.map +0 -1
  178. package/dist/esm-es5/popover-46b5193d.js.map +0 -1
  179. package/dist/nano-components/p-094ab6f8.entry.js.map +0 -1
  180. package/dist/nano-components/p-12f70017.system.entry.js +0 -5
  181. package/dist/nano-components/p-12f70017.system.entry.js.map +0 -1
  182. package/dist/nano-components/p-3f736fa2.system.entry.js +0 -5
  183. package/dist/nano-components/p-3f736fa2.system.entry.js.map +0 -1
  184. package/dist/nano-components/p-4b7cd30c.js.map +0 -1
  185. package/dist/nano-components/p-5a476bba.system.entry.js +0 -5
  186. package/dist/nano-components/p-5a476bba.system.entry.js.map +0 -1
  187. package/dist/nano-components/p-6dd58c39.entry.js +0 -5
  188. package/dist/nano-components/p-6dd58c39.entry.js.map +0 -1
  189. package/dist/nano-components/p-71c26ace.entry.js +0 -5
  190. package/dist/nano-components/p-71c26ace.entry.js.map +0 -1
  191. package/dist/nano-components/p-7d2e2685.entry.js +0 -5
  192. package/dist/nano-components/p-7d2e2685.entry.js.map +0 -1
  193. package/dist/nano-components/p-94593617.system.entry.js.map +0 -1
  194. package/dist/nano-components/p-9ca5e023.system.entry.js +0 -5
  195. package/dist/nano-components/p-9ca5e023.system.entry.js.map +0 -1
  196. package/dist/nano-components/p-ad0715d1.entry.js +0 -5
  197. package/dist/nano-components/p-ad0715d1.entry.js.map +0 -1
  198. package/dist/nano-components/p-d9f2dda5.entry.js.map +0 -1
  199. package/dist/nano-components/p-e11bd40d.entry.js.map +0 -1
  200. package/dist/nano-components/p-e15be516.system.entry.js +0 -5
  201. package/dist/nano-components/p-e15be516.system.entry.js.map +0 -1
  202. package/dist/nano-components/p-fd1a86d2.system.entry.js.map +0 -1
@@ -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","exports","class_1","hostRef","_this","this","hasSecondarySlot","hasAnchorEle","didBlur","animating","didOpen","isInGlobalNav","isInMenuDrawer","isInMenu","isLegacy","document","head","attachShadow","hasFocus","href","target","disabled","open","selected","secondaryActiveWidth","secondaryFallback","closeOnBlur","closeSecondary","__awaiter","nanoClosing","emit","secondaryMenu","secondaryDiv","displayTransition","status","_b","sent","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","__generator","handleMouseLeave","handleClick","_a","querySelector","blur","relatedTarget","foundThisNavEle","focus","preventScroll","removeEventListener","prototype","setFocus","openChange","didOpenChange","nanoClose","panelio_1","IntersectionObserver","data","boundingClientRect","top","scrollIntoView","behavior","disconnect","threshold","observe","addEventListener","tabIndex","nanoOpen","found","parentElement","componentWillLoad","secondaryEle","link","getDirectChildren","connectedCallback","render","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","class_2","valueItems","selectId","rtl","onInit","currInsertIndex","showErrorMsg","errorMessage","hasLabelSlot","hasHelperSlot","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","_","setValue","e","value","detail","inputCtrl","includes","__spreadArray","slice","removeValue","toFind","filter","val","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","Object","defineProperty","_selectWrap","setDataListOpts","_datalist","split","Array","isArray","opts","opt","debounceChanged","debounceEvent","shouldValidate","valueChanged","nanoChange","selectWrap","currDWConfig","assign","tetherTo","input","reportValidity","validateFirst","getSelectElement","Promise","resolve","showError","message","find","options","slotChangeObserver","mo","MutationObserver","processSlottedContent","childList","subtree","querySelectorAll","console","warn","getLabel","handleBlur","kev","raf","getActiveElement","closestElement","tagName","toLowerCase","CustomEvent","disconnectedCallback","componentDidLoad","labelId","moreId","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","id","aria-labelledby","form","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\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 * 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 >\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 >\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: inline-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 opacity: 0.7;\n\n * {\n pointer-events: none !important;\n }\n}\n\nselect {\n display: none;\n}\n\n.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 line-height: 2.5em;\n min-height: 2.5em;\n margin: 0;\n box-sizing: border-box;\n resize: none;\n overflow: hidden;\n cursor: default;\n\n &::selection {\n background: transparent;\n }\n\n &::-moz-selection {\n background: transparent;\n }\n\n &[disabled] {\n opacity: 0.4;\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: 2.5em;\n min-height: 2.5em;\n // text-overflow: ellipsis;\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 .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 & {\n padding-top: 1.4em;\n }\n\n .has-float-label.textarea & {\n padding-top: 1.8em;\n }\n\n .legacy & {\n box-sizing: content-box;\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.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 max-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.78em - 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 @include margin(4px, 0, 0, 4px);\n\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.3em 0.5em;\n border-radius: 3px;\n line-height: 1;\n max-width: 100%;\n display: flex;\n align-items: center;\n font-size: var(--input-font-size);\n font-weight: 600;\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.4;\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.placeholder-as-label {\n :host(.has-focus.has-multiple) & {\n transform: translateY(-120%);\n font-size: 0.9em;\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} 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 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 private isLegacy: boolean = 'registerElement' in document;\n\n // we don't want these rendered eles decorated with @State\n // because that will cause re-renders. User 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 @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() 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 private _invalid = false;\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 'submit';\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('validateOn')\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 setTimeout((_) => this.shouldValidate(), 20);\n this.nanoChange.emit({ value: this.value });\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 if (validateFirst) this.showInlineValidation();\n return {\n isValid: !this.invalid,\n errorMessage: this.errorMessage,\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 if (this.showInlineError) ev.preventDefault();\n\n setTimeout((_) => this.showInlineValidation(ev), 20);\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\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('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 setTimeout(() => {\n if (this.validateOn === 'dirty' && !this.hasFocus)\n this.showInlineValidation();\n }, 20);\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\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 hasLabelSlot,\n hideLabel,\n placeholder,\n rtl,\n }) => ({\n el,\n floatLabel,\n label,\n errorMessage,\n showInlineError,\n hasHelperSlot,\n hasLabelSlot,\n hideLabel,\n placeholder,\n rtl,\n }))(this);\n const wrapOptions = {\n ...compWrapOptions,\n labelId,\n moreId,\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 legacy: this.isLegacy,\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=\"multi-wrap\">\n {this.multipleValues(labelId, moreId)}\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=\"native-input\"\n ref={(input) => (this.inputCtrl = input)}\n aria-labelledby={labelId + ' ' + moreId}\n disabled={this.disabled}\n form={this.form}\n placeholder={\n !this.floatLabel && this.placeholder ? this.placeholder : ''\n }\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=\"native-select\"\n ref={(select) => (this.nativeSelect = select)}\n aria-labelledby={labelId + ' ' + moreId}\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 ): VNode | (VNode | VNode[])[] {\n let input: VNode = (\n <input\n class=\"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.floatLabel && !this.value.length\n ? this.placeholder\n : ''\n }\n aria-labelledby={labelId + ' ' + moreId}\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=\"multi-value\"\n >\n <span>{this.getLabel(val)}</span>\n <button\n class=\"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,a,n,o){function e(t){return t instanceof n?t:new n((function(a){a(t)}))}return new(n||(n=Promise))((function(n,r){function i(t){try{l(o.next(t))}catch(a){r(a)}}function s(t){try{l(o["throw"](t))}catch(a){r(a)}}function l(t){t.done?n(t.value):e(t.value).then(i,s)}l((o=o.apply(t,a||[])).next())}))};var __generator=this&&this.__generator||function(t,a){var n={label:0,sent:function(){if(r[0]&1)throw r[1];return r[1]},trys:[],ops:[]},o,e,r,i;return i={next:s(0),throw:s(1),return:s(2)},typeof Symbol==="function"&&(i[Symbol.iterator]=function(){return this}),i;function s(t){return function(a){return l([t,a])}}function l(i){if(o)throw new TypeError("Generator is already executing.");while(n)try{if(o=1,e&&(r=i[0]&2?e["return"]:i[0]?e["throw"]||((r=e["return"])&&r.call(e),0):e.next)&&!(r=r.call(e,i[1])).done)return r;if(e=0,r)i=[i[0]&2,r.value];switch(i[0]){case 0:case 1:r=i;break;case 4:n.label++;return{value:i[1],done:false};case 5:n.label++;e=i[1];i=[0];continue;case 7:i=n.ops.pop();n.trys.pop();continue;default:if(!(r=n.trys,r=r.length>0&&r[r.length-1])&&(i[0]===6||i[0]===2)){n=0;continue}if(i[0]===3&&(!r||i[1]>r[0]&&i[1]<r[3])){n.label=i[1];break}if(i[0]===6&&n.label<r[1]){n.label=r[1];r=i;break}if(r&&n.label<r[2]){n.label=r[2];n.ops.push(i);break}if(r[2])n.ops.pop();n.trys.pop();continue}i=a.call(t,n)}catch(s){i=[6,s];e=0}finally{o=r=0}if(i[0]&5)throw i[1];return{value:i[0]?i[1]:void 0,done:true}}};
2
- /*!
3
- * Web Components for Nanopore digital Web Apps
4
- */System.register(["./p-59b3d24b.system.js","./p-b430a9b6.system.js","./p-b370e3ef.system.js","./p-0784f2ad.system.js","./p-1c216ca4.system.js","./p-e1f46998.system.js","./p-1d13dbdf.system.js","./p-89edc042.system.js","./p-9edbf25d.system.js","./p-ef053a2f.system.js"],(function(t){"use strict";var a,n,o,e,r,i,s,l,c,b,d,u,p,h;return{setters:[function(t){a=t.r;n=t.c;o=t.h;e=t.e;r=t.g},function(t){i=t.i},function(t){s=t.s},function(t){l=t.f},function(t){c=t.d;b=t.r},function(t){d=t.C},function(t){u=t.g;p=t.a},function(t){h=t.c},function(){},function(){}],execute:function(){var g=':host{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}[hidden]{display:none !important}:host{--indicator-transition:var(--nano-transition-fast, 0.3s);--indicator-color:#90c6e7;--indicator-track-color:#e4e6e8;--indicator-size:0;--border-radius:var(--nano-layer-border-radius, var(--nano-border-radius-medium, 4px));--background-rgb:var(--nano-layer-bg-rgb, 255, 255, 255);--scroll-btn-color:"currentColor";--content-padding:2rem 2.5rem;--content-bg:rgb(var(--background-rgb));--content-border-radius:var(--border-radius);--tabs-padding-start:2.5rem;--tabs-padding-end:2.5rem;--tabs-padding-top:0;--tabs-padding-bottom:0;--tabs-container-bg:"transparent";--tabs-bg-rgb:var(--background-rgb);--tab-border-radius:var(--border-radius);--tab-text-color:#007495;--shadow-opacity:0.1;display:block;position:relative;z-index:var(--nano-layer-index-raised, 5)}@media only screen and (max-width: 768px){:host{--tabs-padding-start:1.5rem;--tabs-padding-end:1.5rem}}:host ::slotted(nano-tab){--tab-indicator-color:var(--indicator-color);--bg-rgb:var(--tabs-bg-rgb);--border-radius:var(--tab-border-radius)}:host(.legacy) ::slotted(nano-tab){--tab-indicator-color:#90c6e7;--border-radius:3px;--tab-indicator-size:5px;--bg-rgb:255, 255, 255}:host([placement=start]),:host([placement=end]){--content-padding:1rem;--tabs-padding-start:0;--tabs-padding-end:0;--tabs-padding-top:0;--tabs-padding-bottom:0;--tab-text-color:#455556;--indicator-color:#007495;--indicator-size:2px}:host(.nano-color){--indicator-color:var(--nano-color-tint, var(--nano-color-primary-tint, #2689a5));--tab-text-color:rgba(var(--nano-color-base-rgb), 0.7)}:host(.nano-color) ::slotted(nano-tab){--active-text-color:var(--nano-color-shade, var(--nano-color-primary-shade, #00637f))}.nano-tab-group{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:0;width:100%;-webkit-box-flex:inherit;-ms-flex:inherit;flex:inherit}.nano-tab-group__tabs{display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;width:100%}.nano-tab-group__active-tab-indicator{position:absolute;-webkit-transition:var(--indicator-transition) transform ease, var(--indicator-transition) width ease;transition:var(--indicator-transition) transform ease, var(--indicator-transition) width ease}.nano-tab-group__body{background:var(--content-bg)}.nano-tab-group:not(.focus-visible) ::slotted(nano-tab){--focus-shadow:none}.nano-tab-group .nano-tab-group__nav-container{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;background:var(--tabs-container-bg)}.nano-tab-group button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent}.nano-tab-group__scroll-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;bottom:0;border:unset;z-index:2;-webkit-transition:var(--nano-transition-fast, 0.3s) ease opacity;transition:var(--nano-transition-fast, 0.3s) ease opacity;opacity:0;color:var(--scroll-btn-color)}.nano-tab-group__scroll-button:focus{outline:none}.nano-tab-group__scroll-button.is-shown{opacity:1}.nano-tab-group__scroll-button.focus-visible:focus{-webkit-box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8))) inset;box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8))) inset}.nano-tab-group__scroll-button--left{left:0}.nano-tab-group__scroll-button--right{right:0}.nano-tab-group__scroll-button nano-icon{font-size:16px}.nano-tab-group--top{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.nano-tab-group--top .nano-tab-group__nav-container::after{content:"";width:86%;-webkit-box-shadow:0 10px 40px 10px rgba(0, 0, 0, var(--shadow-opacity));box-shadow:0 10px 40px 10px rgba(0, 0, 0, var(--shadow-opacity));height:10px;position:absolute;left:7%;bottom:-10px;border-radius:10px;z-index:-1}.nano-tab-group--top .nano-tab-group__nav{scrollbar-width:none;-ms-overflow-style:none;padding-left:var(--tabs-padding-start);padding-right:var(--tabs-padding-end);padding-top:var(--tabs-padding-top);padding-bottom:var(--tabs-padding-bottom);display:-webkit-box;display:-ms-flexbox;display:flex;overflow-x:auto;overflow-y:hidden;-webkit-transition:var(--nano-transition-medium, 0.5s) ease;transition:var(--nano-transition-medium, 0.5s) ease;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:-webkit-gradient(linear, right top, left top, color-stop(0, rgba(0, 0, 0, 0)), color-stop(rgba(0, 0, 0, 0)), color-stop(black), color-stop(black), color-stop(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0)));-webkit-mask-image:linear-gradient(to left, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) var(--tabs-padding-start), black calc(var(--tabs-padding-start) * 2), black calc(100% - (var(--tabs-padding-end) * 2)), rgba(0, 0, 0, 0) calc(100% - var(--tabs-padding-end)), rgba(0, 0, 0, 0));mask-image:-webkit-gradient(linear, right top, left top, color-stop(0, rgba(0, 0, 0, 0)), color-stop(rgba(0, 0, 0, 0)), color-stop(black), color-stop(black), color-stop(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0)));mask-image:linear-gradient(to left, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) var(--tabs-padding-start), black calc(var(--tabs-padding-start) * 2), black calc(100% - (var(--tabs-padding-end) * 2)), rgba(0, 0, 0, 0) calc(100% - var(--tabs-padding-end)), rgba(0, 0, 0, 0));-webkit-mask-size:calc(100% + calc(var(--tabs-padding-end) * 4));mask-size:calc(100% + calc(var(--tabs-padding-end) * 4));-webkit-mask-position:calc(var(--tabs-padding-end) * -2);mask-position:calc(var(--tabs-padding-end) * -2)}.nano-tab-group--top .nano-tab-group__nav::-webkit-scrollbar{width:0;height:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.nano-tab-group--top .nano-tab-group__nav{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--tabs-padding-start);padding-inline-start:var(--tabs-padding-start);-webkit-padding-end:var(--tabs-padding-end);padding-inline-end:var(--tabs-padding-end)}}.nano-tab-group--top .nano-tab-group__nav::after{content:" ";padding-left:0;padding-right:var(--tabs-padding-end);padding-top:var(--tabs-padding-top);padding-bottom:var(--tabs-padding-bottom);line-height:1;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.nano-tab-group--top .nano-tab-group__nav::after{padding-left:unset;padding-right:unset;-webkit-padding-start:0;padding-inline-start:0;-webkit-padding-end:var(--tabs-padding-end);padding-inline-end:var(--tabs-padding-end)}}.nano-tab-group--top.nano-tab-group--has-scroll-controls-left .nano-tab-group__nav{-webkit-mask-position:0;mask-position:0;-webkit-mask-size:calc(100% + (var(--tabs-padding-end) * 2));mask-size:calc(100% + (var(--tabs-padding-end) * 2))}.nano-tab-group--top.nano-tab-group--has-scroll-controls-right .nano-tab-group__nav{-webkit-mask-position:calc(var(--tabs-padding-end) * -1);mask-position:calc(var(--tabs-padding-end) * -1);-webkit-mask-size:calc(100% + var(--tabs-padding-end));mask-size:calc(100% + var(--tabs-padding-end))}.nano-tab-group--top.nano-tab-group--has-scroll-controls-left.nano-tab-group--has-scroll-controls-right .nano-tab-group__nav{-webkit-mask-size:100%;mask-size:100%;-webkit-mask-position:0;mask-position:0}.nano-tab-group--top .nano-tab-group__tabs{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;position:relative;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;text-align:center;color:var(--tab-text-color);width:auto}.nano-tab-group--top .nano-tab-group__active-tab-indicator{bottom:-2px;border-bottom:solid var(--indicator-size) var(--indicator-color)}.nano-tab-group--top .nano-tab-group__body{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2;background:var(--content-bg);position:relative;overflow:hidden;width:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:var(--content-padding);border-radius:var(--content-border-radius);-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.nano-tab-group--start{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.nano-tab-group--start .nano-tab-group__tabs{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;color:var(--tab-text-color);background:rgb(var(--tabs-bg-rgb))}:host(:not([dir=rtl])) .nano-tab-group--start .nano-tab-group__tabs{border-left:solid var(--indicator-size) var(--indicator-track-color);text-align:left}:host([dir=rtl]) .nano-tab-group--start .nano-tab-group__tabs{border-right:solid var(--indicator-size) var(--indicator-track-color);text-align:right}:host(:not([dir=rtl])) .nano-tab-group--start .nano-tab-group__active-tab-indicator{left:calc(-1 * 2px);border-left:solid var(--indicator-size) var(--indicator-color)}:host([dir=rtl]) .nano-tab-group--start .nano-tab-group__active-tab-indicator{right:calc(-1 * 2px);border-right:solid var(--indicator-size) var(--indicator-color)}.nano-tab-group--start .nano-tab-group__body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2;padding:var(--content-padding);overflow:hidden;border-top-left-radius:0;border-top-right-radius:var(--content-border-radius);border-bottom-right-radius:var(--content-border-radius);border-bottom-left-radius:0}.nano-tab-group--start .nano-tab-group__body[dir=rtl]{border-top-left-radius:var(--content-border-radius);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:var(--content-border-radius)}';var f=t("nano_tab_group",function(){function t(t){var o=this;a(this,t);this.nanoTabShow=n(this,"nanoTabShow",7);this.nanoTabHide=n(this,"nanoTabHide",7);this.nanoTabWillClose=n(this,"nanoTabWillClose",7);this.nanoTabClose=n(this,"nanoTabClose",7);this.initialTouchX=null;this.initialTouchY=null;this.mutationObservers=new WeakMap;this.hasScrollControls=false;this.hideControlRight=true;this.hideControlLeft=true;this.isLegacy=!document.head.attachShadow;this.placement="top";this.noScrollControls=false;this.storeMethod="session";this.updateScrollControls=function(){if(o.noScrollControls){o.hasScrollControls=false}else{o.hasScrollControls=["top"].includes(o.placement)&&o.nav.scrollWidth>o.nav.clientWidth&&o.nav.scrollWidth>o.tabs.clientWidth}};this.handleClick=function(t){var a=t.target;var n=a.closest("nano-tab");if(n)o.setActiveTab(n)};this.handleKeyDown=function(t){if(["Enter"," "].includes(t.key)){var a=t.target;var n=a.closest("nano-tab");if(n){o.setActiveTab(n);t.preventDefault()}}if(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(t.key)){var e=document.activeElement;if(e&&e.tagName.toLowerCase()==="nano-tab"){var r=o.getAllActiveTabs;var i=r.indexOf(e);if(t.key==="Home"){i=0}else if(t.key==="End"){i=r.length-1}else if(o.isRtl&&t.key==="ArrowRight"||!o.isRtl&&t.key==="ArrowLeft"){i=Math.max(0,i-1)}else if(o.isRtl&&t.key==="ArrowLeft"||!o.isRtl&&t.key==="ArrowRight"){i=Math.min(r.length-1,i+1)}r[i].setFocus();if(["top"].includes(o.placement)){s(r[i],o.nav,"horizontal","center")}t.preventDefault()}}};this.handleTabScroll=function(){if(!o.hasScrollControls){o.hideControlLeft=o.hideControlRight=true;return}var t=o.isRtl?o.nav.scrollLeft===0:o.nav.scrollWidth-o.nav.scrollLeft===o.nav.clientWidth;var a=o.isRtl?o.nav.scrollWidth+o.nav.scrollLeft===o.nav.clientWidth:o.nav.scrollLeft===0;if(a){o.hideControlLeft=true;o.hideControlRight=false}else if(t){o.hideControlLeft=false;o.hideControlRight=true}else{o.hideControlRight=false;o.hideControlLeft=false}};this.handleBtnClick=function(t){if(t===void 0){t=false}var a=o.getNavWidth();var n;if(t)n=o.nav.scrollLeft+a-20;else n=o.nav.scrollLeft-a+20;try{o.nav.scroll({left:n,behavior:"smooth"})}catch(e){o.nav.scrollLeft=n}};this.handleTouchStart=function(t){if(o.disableSwipe)return;var a=t.changedTouches[0];o.initialTouchX=a.pageX;o.initialTouchY=a.pageY};this.handleTouchEnd=function(t){if(o.disableSwipe)return;var a=t.changedTouches[0];var n=a.pageX-o.initialTouchX;var e=a.pageY-o.initialTouchY;var r=70;var i=o.initialTouchX-a.clientX;var s=o.initialTouchY-a.clientY;var l=Math.abs(n)>=r&&Math.abs(e)<=r;var c=o.getAllActiveTabs;var b=c.findIndex((function(t){return t.active}));if(l){var d=n<0&&o.placement==="top"||n>0&&o.placement!=="top"?1:-1;if(c[b+d]){o.setActiveTab(c[b+d]);if(Math.abs(i)>Math.abs(s)){if(i>0)o.activePanel.setAttribute("animation-dir","left");else o.activePanel.setAttribute("animation-dir","right")}}}o.initialTouchX=null;o.initialTouchY=null};this.handleContentSlotChange=function(){setTimeout((function(){o.setAriaLabels();o.setActiveTab(o.getActiveTab||o.getAllActiveTabs[0],false)}))};this.handleTabSlotChange=function(t){setTimeout((function(){o.setAriaLabels();o.handleTabScroll();o.setActiveTab(o.getActiveTab||o.getAllActiveTabs[0],false);o.updateScrollControls()}),500);var a=t.target.assignedNodes({flatten:true});a.forEach((function(t){if(!o.mutationObservers.get(t)){var a=new MutationObserver((function(){setTimeout((function(){o.syncActiveTabIndicator();o.handleTabScroll();o.updateScrollControls()}),500)}));o.mutationObservers.set(t,a);a.observe(t,{characterData:true,childList:true,subtree:true})}}))}}t.prototype.handleTabNameChange=function(){var t=this;if(this.activeTab&&this.activeTab.panel===this.tab)return;var a=this.getAllActiveTabs.find((function(a){return a.panel===t.tab}));this.setActiveTab(a)};t.prototype.handlePlacementChange=function(){this.syncActiveTabIndicator()};t.prototype.handleNoScrollControlsChange=function(){this.updateScrollControls()};t.prototype.hideRightBtn=function(){if(!this.rightBtn)return;c(this.rightBtn,"is-shown",!this.hideControlRight)};t.prototype.hideLeftBtn=function(){if(!this.leftBtn)return;c(this.leftBtn,"is-shown",!this.hideControlLeft)};t.prototype.watchScrollControls=function(){var t=this;if(this.hasScrollControls)setTimeout((function(a){return t.handleTabScroll()}),20);else setTimeout((function(a){t.hideControlLeft=t.hideControlRight=true}),20)};t.prototype.show=function(t){return __awaiter(this,void 0,void 0,(function(){var a;return __generator(this,(function(n){if(this.activeTab&&this.activeTab.panel===t)return[2];a=this.getAllActiveTabs.find((function(a){return a.panel===t}));if(a)this.setActiveTab(a);return[2]}))}))};Object.defineProperty(t.prototype,"getAllActiveTabs",{get:function(){return this.getAllTabs.filter((function(t){return!t.disabled}))},enumerable:false,configurable:true});Object.defineProperty(t.prototype,"getAllTabs",{get:function(){return u(this.host,"nano-tab")},enumerable:false,configurable:true});Object.defineProperty(t.prototype,"getAllPanels",{get:function(){return u(this.host,"nano-tab-content")},enumerable:false,configurable:true});Object.defineProperty(t.prototype,"getActiveTab",{get:function(){return this.getAllActiveTabs.find((function(t){return t.active}))},enumerable:false,configurable:true});t.prototype.setActiveTab=function(t,a){var n=this;if(a===void 0){a=true}if(t&&t!==this.activeTab&&!t.disabled&&this.getAllActiveTabs.includes(t)){var o=this.activeTab;this.activeTab=t;this.tab=t.panel;this.getAllActiveTabs.map((function(t){return t.active=t===n.activeTab}));this.getAllPanels.map((function(t){if(t.name===n.activeTab.panel){t.active=true;n.activePanel=t}else t.active=false;t.removeAttribute("animation-dir")}));this.syncActiveTabIndicator();if(["top"].includes(this.placement)){s(this.activeTab,this.nav,"horizontal","center")}if(a){if(o){this.nanoTabHide.emit({name:o.panel})}this.nanoTabShow.emit({name:this.activeTab.panel})}}};t.prototype.setAriaLabels=function(){var t=this.getAllActiveTabs;var a=this.getAllPanels;t.map((function(t){var n=a.find((function(a){return a.name===t.panel}));if(n){t.setAttribute("aria-controls",n.getAttribute("id"));n.setAttribute("aria-labelledby",t.getAttribute("id"))}}))};t.prototype.syncActiveTabIndicator=function(){var t=this;var a;this.getAllTabs.forEach((function(a){return a.setAttribute("direction",t.placement==="top"?"horizontal":"vertical")}));var n=this.getActiveTab;var o=((a=n.shadowRoot.querySelector(".nanotab"))===null||a===void 0?void 0:a.clientWidth)||0;var e=n.clientHeight;var r=p(n,this.tabs);var i=r.top+this.nav.scrollTop;var s=r.left;switch(this.placement){case"top":this.activeTabIndicator.style.width=o+"px";this.activeTabIndicator.style.height=null;this.activeTabIndicator.style.transform="translateX("+s+"px)";break;case"start":this.activeTabIndicator.style.width=null;this.activeTabIndicator.style.height=e+"px";this.activeTabIndicator.style.transform="translateY("+i+"px)";break}};t.prototype.getNavWidth=function(){if(!this.nav)return 0;var t=getComputedStyle(this.nav);var a=this.nav.clientWidth;return a-=parseFloat(t.paddingLeft)+parseFloat(t.paddingRight)};t.prototype.handleTabClose=function(t){var a;var n=this.getAllActiveTabs.indexOf(t.target);var o=t.target;if(n<0)return;var e=this.getAllPanels.find((function(t){return t.name===o.panel}));if(!e)return;t.stopImmediatePropagation();var r=this.nanoTabWillClose.emit({name:o.panel});if(r.defaultPrevented)return;if(o.active){n=n===0?1:n-1;var i=(a=this.getAllActiveTabs[n])===null||a===void 0?void 0:a.panel;if(i)this.host.show(i)}o.remove();e.remove();this.nanoTabClose.emit({name:o.panel})};t.prototype.componentDidLoad=function(){var t=this;var a=new IntersectionObserver((function(a,n){if(a[0].intersectionRatio>0){t.setAriaLabels();t.setActiveTab(t.getActiveTab||t.getAllActiveTabs[0],false);if(t.storeId)d.init(t,["tab"],t.storeMethod,t.storeId);n.unobserve(a[0].target)}}));a.observe(this.host);l.observe(this.tabGroup);if(this.leftBtn){l.observe(this.leftBtn);l.observe(this.rightBtn)}this.resizeObserver=new i((function(){setTimeout((function(){t.updateScrollControls();t.syncActiveTabIndicator();s(t.activeTab,t.nav,"horizontal","center")}),500)}));this.resizeObserver.observe(this.nav);b((function(){return t.updateScrollControls()}))};t.prototype.connectedCallback=function(){this.isRtl=this.host.dir==="rtl"||this.host.ownerDocument.dir==="rtl"};t.prototype.disconnectedCallback=function(){l.unobserve(this.tabGroup);if(this.leftBtn){l.unobserve(this.leftBtn);l.unobserve(this.rightBtn)}if(this.resizeObserver)this.resizeObserver.unobserve(this.nav)};t.prototype.render=function(){var t=this;this.isRtl=this.host.ownerDocument.dir==="rtl";return o(e,{class:Object.assign(Object.assign({},h(this.color)),{legacy:this.isLegacy}),dir:this.isRtl?"rtl":null},o("div",{part:"base",ref:function(a){return t.tabGroup=a},class:{"nano-tab-group":true,"nano-tab-group--top":this.placement==="top","nano-tab-group--start":this.placement==="start","nano-tab-group--has-scroll-controls":this.hasScrollControls,"nano-tab-group--has-scroll-controls-left":!this.hideControlLeft,"nano-tab-group--has-scroll-controls-right":!this.hideControlRight},onClick:this.handleClick,onKeyDown:this.handleKeyDown},o("div",{class:"nano-tab-group__nav-container",part:"nav"},this.placement==="top"&&o("button",{class:{"nano-tab-group__scroll-button":true,"nano-tab-group__scroll-button--left":true},ref:function(a){return t.leftBtn=a},onClick:function(){return t.handleBtnClick(false)}},o("nano-icon",{name:"light/chevron-left"})),o("div",{ref:function(a){return t.nav=a},class:"nano-tab-group__nav",onScroll:this.handleTabScroll},o("div",{ref:function(a){return t.tabs=a},part:"tabs",class:"nano-tab-group__tabs",role:"tablist"},o("div",{ref:function(a){return t.activeTabIndicator=a},part:"active-tab-indicator",class:"nano-tab-group__active-tab-indicator"}),o("slot",{name:"tabs",onSlotchange:this.handleTabSlotChange}))),this.placement==="top"&&o("button",{class:{"nano-tab-group__scroll-button":true,"nano-tab-group__scroll-button--right":true},ref:function(a){return t.rightBtn=a},onClick:function(){return t.handleBtnClick(true)}},o("nano-icon",{name:"light/chevron-right"}))),o("slot",{name:"tab-content-header"}),o("div",{part:"body",class:"nano-tab-group__body",onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd},o("slot",{onSlotchange:this.handleContentSlotChange}))))};Object.defineProperty(t.prototype,"host",{get:function(){return r(this)},enumerable:false,configurable:true});Object.defineProperty(t,"watchers",{get:function(){return{tab:["handleTabNameChange"],placement:["handlePlacementChange"],noScrollControls:["handleNoScrollControlsChange"],hideControlRight:["hideRightBtn"],hideControlLeft:["hideLeftBtn"],hasScrollControls:["watchScrollControls"]}},enumerable:false,configurable:true});return t}());f.style=g}}}));
5
- //# sourceMappingURL=p-3f736fa2.system.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["src/components/tabs/tab-group.scss?tag=nano-tab-group&encapsulation=shadow","src/components/tabs/tab-group.tsx"],"names":["tabGroupCss","TabGroup","exports","class_1","hostRef","_this","this","initialTouchX","initialTouchY","mutationObservers","WeakMap","hasScrollControls","hideControlRight","hideControlLeft","isLegacy","document","head","attachShadow","placement","noScrollControls","storeMethod","updateScrollControls","includes","nav","scrollWidth","clientWidth","tabs","handleClick","event","target","tab","closest","setActiveTab","handleKeyDown","key","preventDefault","activeEl","activeElement","tagName","toLowerCase","getAllActiveTabs","index_1","indexOf","length","isRtl","Math","max","min","setFocus","scrollIntoView","handleTabScroll","endRight","scrollLeft","endLeft","handleBtnClick","goRight","navWidth","getNavWidth","leftAmt","scroll","left","behavior","e","handleTouchStart","disableSwipe","touch","changedTouches","pageX","pageY","handleTouchEnd","distX","distY","threshold","xDiff","clientX","yDiff","clientY","isHorizontalSwipe","abs","currIndex","findIndex","el","active","toGo","activePanel","setAttribute","handleContentSlotChange","setTimeout","setAriaLabels","getActiveTab","handleTabSlotChange","ev","nodes","assignedNodes","flatten","forEach","node","get","mo","MutationObserver","syncActiveTabIndicator","set","observe","characterData","childList","subtree","prototype","handleTabNameChange","activeTab","panel","find","handlePlacementChange","handleNoScrollControlsChange","hideRightBtn","rightBtn","displayTransition","hideLeftBtn","leftBtn","watchScrollControls","_","show","Object","defineProperty","getAllTabs","filter","disabled","getDirectChildren","host","emitEvents","previousTab","map","getAllPanels","name","removeAttribute","nanoTabHide","emit","nanoTabShow","panels","getAttribute","width","_a","shadowRoot","querySelector","height","clientHeight","offset","getOffset","offsetTop","top","scrollTop","offsetLeft","activeTabIndicator","style","transform","computedStyle","getComputedStyle","parseFloat","paddingLeft","paddingRight","handleTabClose","tabIndex","stopImmediatePropagation","closeEv","nanoTabWillClose","defaultPrevented","prevTab","remove","nanoTabClose","componentDidLoad","observer","IntersectionObserver","entries","intersectionRatio","storeId","ComponentStore","init","unobserve","focusVisible","tabGroup","resizeObserver","ResizeObserver","raf","connectedCallback","dir","ownerDocument","disconnectedCallback","render","h","Host","class","assign","createColorClasses","color","legacy","part","ref","nano-tab-group","nano-tab-group--top","nano-tab-group--start","nano-tab-group--has-scroll-controls","nano-tab-group--has-scroll-controls-left","nano-tab-group--has-scroll-controls-right","onClick","onKeyDown","nano-tab-group__scroll-button","nano-tab-group__scroll-button--left","btn","onScroll","role","onSlotchange","nano-tab-group__scroll-button--right","onTouchStart","onTouchEnd"],"mappings":"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","sourcesContent":["@use 'sass:map';\n@use 'sass:list';\n\n@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/form';\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/layers';\n\n/**\n * @prop --indicator-transition: Only relevant to placement 'start'. defaults to #{$transition-fast};\n * @prop --indicator-color: defaults to #{map.get($colors, lightblue)} on placement 'top' and #{map.get($colors, blue)} on placement 'start';\n * @prop --indicator-track-color: Only relevant to placement 'start'. defaults to #{map.get($colors, lightgrey)};\n * @prop --indicator-size: defaults to 5px on placement 'top' and 2px on placement 'start';\n\n * @prop --border-radius: defaults to #{$layer-border-radius};\n * @prop --background-rgb: will be used as the default background colour for tabs and content. defaults to #{$layer-bg-color-rgb};\n * @prop --shadow-opacity: opacity of the shadow behind tabs. defaults to 0.1;\n * @prop --scroll-btn-color: defaults to 'currentColor';\n\n * @prop --content-padding: defaults to 2rem 2.5rem;\n * @prop --content-bg: defaults to rgb(var(--background-rgb));\n * @prop --content-border-radius: defaults to var(--border-radius);\n\n * @prop --tabs-padding-start: defaults to 2.5rem on placement 'top' and 0 on placement 'start';\n * @prop --tabs-padding-end: defaults to 2.5rem on placement 'top' and 0 on placement 'start';\n * @prop --tabs-padding-top: defaults to 0;\n * @prop --tabs-padding-bottom: defaults to 0;\n * @prop --tabs-bg-rgb: defaults to var(--bg-color);\n * @prop --tab-border-radius: defaults to var(--border-radius);\n * @prop --tab-text-color: defaults to #{map.get($colors, blue)} on placement 'top' and #{map.get($colors, darkgrey)} on placement 'start';\n */\n\n:host {\n --indicator-transition: #{$transition-fast};\n --indicator-color: #{map.get($colors, lightblue)};\n --indicator-track-color: #{map.get($colors, lightgrey)};\n --indicator-size: 0;\n --border-radius: #{$layer-border-radius};\n --background-rgb: #{$layer-bg-color-rgb};\n --scroll-btn-color: 'currentColor';\n --content-padding: 2rem 2.5rem;\n --content-bg: rgb(var(--background-rgb));\n --content-border-radius: var(--border-radius);\n --tabs-padding-start: 2.5rem;\n --tabs-padding-end: 2.5rem;\n --tabs-padding-top: 0;\n --tabs-padding-bottom: 0;\n --tabs-container-bg: 'transparent';\n --tabs-bg-rgb: var(--background-rgb);\n --tab-border-radius: var(--border-radius);\n --tab-text-color: #{map.get($colors, blue)};\n --shadow-opacity: 0.1;\n\n display: block;\n position: relative;\n z-index: #{$layer-index-raised};\n\n @media only screen and (max-width: 768px) {\n --tabs-padding-start: 1.5rem;\n --tabs-padding-end: 1.5rem;\n }\n\n ::slotted(nano-tab) {\n --tab-indicator-color: var(--indicator-color);\n --bg-rgb: var(--tabs-bg-rgb);\n --border-radius: var(--tab-border-radius);\n }\n}\n\n// IE bugfix - set this stuff statically\n:host(.legacy) {\n ::slotted(nano-tab) {\n --tab-indicator-color: #{map.get($colors, lightblue)};\n --border-radius: 3px;\n --tab-indicator-size: 5px;\n --bg-rgb: 255, 255, 255;\n }\n}\n\n:host([placement='start']),\n:host([placement='end']) {\n --content-padding: 1rem;\n --tabs-padding-start: 0;\n --tabs-padding-end: 0;\n --tabs-padding-top: 0;\n --tabs-padding-bottom: 0;\n --tab-text-color: #{map.get($colors, darkgrey)};\n --indicator-color: #{map.get($colors, blue)};\n --indicator-size: 2px;\n}\n\n:host(.nano-color) {\n --indicator-color: var(--nano-color-tint, #{nano-color(primary, tint)});\n --tab-text-color: rgba(var(--nano-color-base-rgb), 0.7);\n\n ::slotted(nano-tab) {\n --active-text-color: var(--nano-color-shade, #{nano-color(primary, shade)});\n }\n}\n\n.nano-tab-group {\n display: flex;\n border-radius: 0;\n width: 100%;\n flex: inherit;\n\n &__tabs {\n display: flex;\n position: relative;\n width: 100%;\n }\n\n &__active-tab-indicator {\n position: absolute;\n transition: var(--indicator-transition) transform ease, var(--indicator-transition) width ease;\n }\n\n &__body {\n background: var(--content-bg);\n }\n\n &:not(.focus-visible) ::slotted(nano-tab) {\n --focus-shadow: none;\n }\n\n .nano-tab-group__nav-container {\n position: relative;\n display: flex;\n background: var(--tabs-container-bg);\n }\n\n button {\n appearance: none;\n background-color: transparent;\n }\n\n &__scroll-button {\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n top: 0;\n bottom: 0;\n border: unset;\n z-index: 2;\n transition: #{$transition-fast} ease opacity;\n opacity: 0;\n color: var(--scroll-btn-color);\n\n &:focus {\n outline: none;\n }\n\n &.is-shown {\n opacity: 1;\n }\n\n &.focus-visible:focus {\n box-shadow: #{$control-focus-style} inset;\n }\n\n &--left {\n left: 0;\n }\n\n &--right {\n right: 0;\n }\n\n nano-icon {\n font-size: 16px;\n }\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n // Top\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n &--top {\n flex-direction: column;\n\n .nano-tab-group__nav-container {\n &::after {\n content: '';\n width: 86%;\n box-shadow: 0 10px 40px 10px rgba(0, 0, 0, var(--shadow-opacity));\n height: 10px;\n position: absolute;\n left: 7%;\n bottom: -10px;\n border-radius: 10px;\n z-index: -1;\n }\n }\n\n .nano-tab-group__nav {\n @include hide-scrollbar();\n @include padding(\n var(--tabs-padding-top),\n var(--tabs-padding-end),\n var(--tabs-padding-bottom),\n var(--tabs-padding-start)\n );\n\n display: flex;\n overflow-x: auto;\n overflow-y: hidden;\n transition: #{$transition-medium} ease;\n background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=);\n mask-repeat: no-repeat;\n mask-image:\n linear-gradient(\n to left,\n rgba(0, 0, 0, 0) 0,\n rgba(0, 0, 0, 0) var(--tabs-padding-start),\n rgba(0, 0, 0, 1) calc(var(--tabs-padding-start) * 2),\n rgba(0, 0, 0, 1) calc(100% - (var(--tabs-padding-end) * 2)),\n rgba(0, 0, 0, 0) calc(100% - var(--tabs-padding-end)),\n rgba(0, 0, 0, 0)\n );\n mask-size: calc(100% + calc(var(--tabs-padding-end) * 4));\n mask-position: calc(var(--tabs-padding-end) * -2);\n\n &::after {\n content: ' ';\n\n @include padding(\n var(--tabs-padding-top),\n var(--tabs-padding-end),\n var(--tabs-padding-bottom),\n 0\n );\n\n line-height: 1;\n flex: 0 0 auto;\n }\n }\n\n &.nano-tab-group--has-scroll-controls-left {\n .nano-tab-group__nav {\n mask-position: 0;\n mask-size: calc(100% + (var(--tabs-padding-end) * 2));\n }\n }\n\n &.nano-tab-group--has-scroll-controls-right {\n .nano-tab-group__nav {\n mask-position: calc(var(--tabs-padding-end) * -1);\n mask-size: calc(100% + var(--tabs-padding-end));\n }\n }\n\n &.nano-tab-group--has-scroll-controls-left.nano-tab-group--has-scroll-controls-right {\n .nano-tab-group__nav {\n mask-size: 100%;\n mask-position: 0;\n }\n }\n\n .nano-tab-group__tabs {\n flex: 1 1 auto;\n position: relative;\n flex-direction: row;\n text-align: center;\n color: var(--tab-text-color);\n width: auto;\n }\n\n .nano-tab-group__active-tab-indicator {\n bottom: -2px;\n border-bottom: solid var(--indicator-size) var(--indicator-color);\n }\n\n .nano-tab-group__body {\n order: 2;\n background: var(--content-bg);\n position: relative;\n overflow: hidden;\n width: auto;\n display: flex;\n justify-content: center;\n padding: var(--content-padding);\n border-radius: var(--content-border-radius);\n flex: 1 1 auto;\n }\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n // Start\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n &--start {\n flex-direction: row;\n\n .nano-tab-group__tabs {\n flex: 0 0 auto;\n flex-direction: column;\n color: var(--tab-text-color);\n background: rgb(var(--tabs-bg-rgb));\n\n @include ltr-host() {\n border-left: solid var(--indicator-size) var(--indicator-track-color);\n text-align: left;\n }\n\n @include rtl-host() {\n border-right: solid var(--indicator-size) var(--indicator-track-color);\n text-align: right;\n }\n }\n\n .nano-tab-group__active-tab-indicator {\n @include ltr-host() {\n left: calc(-1 * 2px);\n border-left: solid var(--indicator-size) var(--indicator-color);\n }\n\n @include rtl-host() {\n right: calc(-1 * 2px);\n border-right: solid var(--indicator-size) var(--indicator-color);\n }\n }\n\n .nano-tab-group__body {\n flex: 1 1 auto;\n order: 2;\n padding: var(--content-padding);\n overflow: hidden;\n\n @include border-radius(\n 0,\n var(--content-border-radius),\n var(--content-border-radius),\n 0\n );\n }\n }\n}\n","import {\n Component,\n Element,\n ComponentInterface,\n Event,\n EventEmitter,\n Method,\n Prop,\n State,\n Watch,\n h,\n Host,\n Listen,\n} from '@stencil/core';\nimport ResizeObserver from 'resize-observer-polyfill';\n\nimport { scrollIntoView } from '../../utils/scroll';\nimport { focusVisible } from '../../utils/focus-visible';\nimport {\n displayTransition,\n createColorClasses,\n getOffset,\n getDirectChildren,\n raf,\n} from '../../utils';\nimport { Color } from '../../interface';\nimport {\n ComponentStore,\n StorageMethods,\n} from '../../utils/store/component-store';\n\n/**\n * A tradtional tab implementation. It nests `nano-tab` and `nano-tab-content` sub-components.\n *\n * Tabs can be stacked vertically or horizontally (which presents different styling variations) using the `placement` attribute.\n * Horizonal tabs that don't fit will overflow and scroll appropriately.\n * Tab-content can also be swiped to change tabs.\n *\n * @slot tabs - Add `nano-tab` elements to add clickable tabs.\n * @slot tab-content-header - a header bar displayed above tab content.\n * @slot - Add `nano-tab-content` elements to add tabbable content.\n *\n * @part base - the main tab-group wrapper\n * @part nav - the bar surrounding all the tabs and nav buttons\n * @part tabs - the wrapper around the `nano-tab` components\n * @part active-tab-indicator - the active indicator line\n * @part body - the wrapper around the `nano-tab-content` components\n */\n\n@Component({\n tag: 'nano-tab-group',\n styleUrl: 'tab-group.scss',\n shadow: true,\n})\nexport class TabGroup implements ComponentInterface {\n private activeTab: HTMLNanoTabElement;\n private activePanel: HTMLNanoTabContentElement;\n private activeTabIndicator: HTMLElement;\n private nav: HTMLElement;\n private tabGroup: HTMLElement;\n private tabs: HTMLElement;\n private rightBtn: HTMLButtonElement;\n private leftBtn: HTMLButtonElement;\n\n private isRtl: boolean;\n private initialTouchX: number = null;\n private initialTouchY: number = null;\n\n private resizeObserver: ResizeObserver;\n private mutationObservers: WeakMap<Node, MutationObserver> = new WeakMap();\n\n @Element() host: HTMLNanoTabGroupElement;\n\n @State() hasScrollControls = false;\n @State() hideControlRight = true;\n @State() hideControlLeft = true;\n @State() isLegacy = !document.head.attachShadow;\n @State() tab: string;\n\n /**\n * The placement of the tabs.\n */\n @Prop() placement: 'top' | 'start' = 'top';\n\n /**\n * Disables the scroll arrows that appear when tabs overflow.\n */\n @Prop() noScrollControls = false;\n\n /**\n * The color to use from the application's color palette.\n */\n @Prop() color?: Color;\n\n /**\n * Store the currently open tab (against this ID) in the component store.\n * Use in conjunction with storeMethod\n */\n @Prop() storeId?: string;\n\n /**\n * The method of storage.\n * Either session storage, url hash (after the '#') or url query (after the '?').\n */\n @Prop() storeMethod: StorageMethods = 'session';\n\n /**\n * Disable 'swipe to change tab' on devices with touch\n */\n @Prop() disableSwipe: boolean;\n\n @Watch('tab')\n handleTabNameChange() {\n if (this.activeTab && this.activeTab.panel === this.tab) return;\n const tab = this.getAllActiveTabs.find((el) => el.panel === this.tab);\n this.setActiveTab(tab);\n }\n\n @Watch('placement')\n handlePlacementChange() {\n this.syncActiveTabIndicator();\n }\n\n @Watch('noScrollControls')\n handleNoScrollControlsChange() {\n this.updateScrollControls();\n }\n\n @Watch('hideControlRight')\n hideRightBtn() {\n if (!this.rightBtn) return;\n displayTransition(this.rightBtn, 'is-shown', !this.hideControlRight);\n }\n\n @Watch('hideControlLeft')\n hideLeftBtn() {\n if (!this.leftBtn) return;\n displayTransition(this.leftBtn, 'is-shown', !this.hideControlLeft);\n }\n\n @Watch('hasScrollControls')\n watchScrollControls() {\n if (this.hasScrollControls) setTimeout((_) => this.handleTabScroll(), 20);\n else\n setTimeout((_) => {\n this.hideControlLeft = this.hideControlRight = true;\n }, 20);\n }\n\n /** Emitted when a tab is shown. */\n @Event() nanoTabShow: EventEmitter<{ name: string }>;\n\n /** Emitted when a tab is hidden. */\n @Event() nanoTabHide: EventEmitter<{ name: string }>;\n\n /** Emitted when the tab is closable and the close button is activated. */\n @Event() nanoTabWillClose: EventEmitter<{ name: string }>;\n\n /** Emitted when a closable tab is removed. */\n @Event() nanoTabClose: EventEmitter<{ name: string }>;\n\n /** Shows the specified tab panel. */\n @Method()\n async show(panel: string) {\n if (this.activeTab && this.activeTab.panel === panel) return;\n\n const tab = this.getAllActiveTabs.find((el) => el.panel === panel);\n\n if (tab) this.setActiveTab(tab);\n }\n\n // Internal Methods\n\n get getAllActiveTabs() {\n return this.getAllTabs.filter((el: any) => !el.disabled);\n }\n\n get getAllTabs() {\n return getDirectChildren<HTMLNanoTabElement>(this.host, 'nano-tab');\n }\n\n get getAllPanels() {\n return getDirectChildren<HTMLNanoTabContentElement>(\n this.host,\n 'nano-tab-content'\n );\n }\n\n get getActiveTab() {\n return this.getAllActiveTabs.find((el) => el.active);\n }\n\n private updateScrollControls = () => {\n if (this.noScrollControls) {\n this.hasScrollControls = false;\n } else {\n this.hasScrollControls =\n ['top'].includes(this.placement) &&\n this.nav.scrollWidth > this.nav.clientWidth &&\n this.nav.scrollWidth > this.tabs.clientWidth;\n }\n };\n\n private setActiveTab(tab: HTMLNanoTabElement, emitEvents = true) {\n if (\n tab &&\n tab !== this.activeTab &&\n !tab.disabled &&\n this.getAllActiveTabs.includes(tab)\n ) {\n const previousTab = this.activeTab;\n this.activeTab = tab;\n this.tab = tab.panel;\n\n // Sync tabs and panels\n this.getAllActiveTabs.map((el) => (el.active = el === this.activeTab));\n this.getAllPanels.map((el) => {\n if (el.name === this.activeTab.panel) {\n el.active = true;\n this.activePanel = el;\n } else el.active = false;\n el.removeAttribute('animation-dir');\n });\n // active tab can be changed on init - this won't be ready. No big thing\n this.syncActiveTabIndicator();\n if (['top'].includes(this.placement)) {\n scrollIntoView(this.activeTab, this.nav, 'horizontal', 'center');\n }\n\n // Emit events\n if (emitEvents) {\n if (previousTab) {\n this.nanoTabHide.emit({ name: previousTab.panel });\n }\n\n this.nanoTabShow.emit({ name: this.activeTab.panel });\n }\n }\n }\n\n private setAriaLabels() {\n const tabs = this.getAllActiveTabs;\n const panels = this.getAllPanels;\n\n // Link each tab with its corresponding panel\n tabs.map((tab) => {\n const panel = panels.find((el) => el.name === tab.panel);\n if (panel) {\n tab.setAttribute('aria-controls', panel.getAttribute('id'));\n panel.setAttribute('aria-labelledby', tab.getAttribute('id'));\n }\n });\n }\n\n private syncActiveTabIndicator() {\n this.getAllTabs.forEach((tab) =>\n tab.setAttribute(\n 'direction',\n this.placement === 'top' ? 'horizontal' : 'vertical'\n )\n );\n\n const tab = this.getActiveTab;\n const width = tab.shadowRoot.querySelector('.nanotab')?.clientWidth || 0;\n const height = tab.clientHeight;\n const offset = getOffset(tab, this.tabs);\n const offsetTop = offset.top + this.nav.scrollTop;\n const offsetLeft = offset.left;\n\n switch (this.placement) {\n case 'top':\n this.activeTabIndicator.style.width = `${width}px`;\n this.activeTabIndicator.style.height = null;\n this.activeTabIndicator.style.transform = `translateX(${offsetLeft}px)`;\n break;\n\n case 'start':\n this.activeTabIndicator.style.width = null;\n this.activeTabIndicator.style.height = `${height}px`;\n this.activeTabIndicator.style.transform = `translateY(${offsetTop}px)`;\n break;\n }\n }\n\n private getNavWidth() {\n if (!this.nav) return 0;\n const computedStyle = getComputedStyle(this.nav);\n let clientWidth = this.nav.clientWidth;\n return (clientWidth -=\n parseFloat(computedStyle.paddingLeft) +\n parseFloat(computedStyle.paddingRight));\n }\n\n // Event handlers\n\n @Listen('nanoTabClose')\n handleTabClose(ev: CustomEvent & { target: HTMLNanoTabElement }) {\n let tabIndex = this.getAllActiveTabs.indexOf(ev.target);\n const tab = ev.target;\n if (tabIndex < 0) return;\n\n const panel = this.getAllPanels.find((el) => el.name === tab.panel);\n if (!panel) return;\n\n ev.stopImmediatePropagation();\n\n const closeEv = this.nanoTabWillClose.emit({ name: tab.panel });\n if (closeEv.defaultPrevented) return;\n\n // Show the previous tab if the tab is currently active\n if (tab.active) {\n tabIndex = tabIndex === 0 ? 1 : tabIndex - 1;\n const prevTab = this.getAllActiveTabs[tabIndex]?.panel;\n if (prevTab) this.host.show(prevTab);\n }\n\n tab.remove();\n panel.remove();\n this.nanoTabClose.emit({ name: tab.panel });\n }\n\n private handleClick = (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n const tab = target.closest('nano-tab');\n\n if (tab) this.setActiveTab(tab);\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n // Activate a tab\n if (['Enter', ' '].includes(event.key)) {\n const target = event.target as HTMLElement;\n const tab = target.closest('nano-tab');\n\n if (tab) {\n this.setActiveTab(tab);\n event.preventDefault();\n }\n }\n\n // Move focus left or right\n if (\n [\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Home',\n 'End',\n ].includes(event.key)\n ) {\n const activeEl = document.activeElement as any;\n\n if (activeEl && activeEl.tagName.toLowerCase() === 'nano-tab') {\n const tabs = this.getAllActiveTabs;\n let index = tabs.indexOf(activeEl);\n\n if (event.key === 'Home') {\n index = 0;\n } else if (event.key === 'End') {\n index = tabs.length - 1;\n } else if (\n (this.isRtl && event.key === 'ArrowRight') ||\n (!this.isRtl && event.key === 'ArrowLeft')\n ) {\n index = Math.max(0, index - 1);\n } else if (\n (this.isRtl && event.key === 'ArrowLeft') ||\n (!this.isRtl && event.key === 'ArrowRight')\n ) {\n index = Math.min(tabs.length - 1, index + 1);\n }\n tabs[index].setFocus();\n\n if (['top'].includes(this.placement)) {\n scrollIntoView(tabs[index], this.nav, 'horizontal', 'center');\n }\n event.preventDefault();\n }\n }\n };\n\n private handleTabScroll = () => {\n if (!this.hasScrollControls) {\n this.hideControlLeft = this.hideControlRight = true;\n return;\n }\n let endRight = this.isRtl\n ? this.nav.scrollLeft === 0\n : this.nav.scrollWidth - this.nav.scrollLeft === this.nav.clientWidth;\n let endLeft = this.isRtl\n ? this.nav.scrollWidth + this.nav.scrollLeft === this.nav.clientWidth\n : this.nav.scrollLeft === 0;\n\n if (endLeft) {\n this.hideControlLeft = true;\n this.hideControlRight = false;\n } else if (endRight) {\n this.hideControlLeft = false;\n this.hideControlRight = true;\n } else {\n this.hideControlRight = false;\n this.hideControlLeft = false;\n }\n };\n\n private handleBtnClick = (goRight: boolean = false) => {\n const navWidth = this.getNavWidth();\n let leftAmt;\n if (goRight) leftAmt = this.nav.scrollLeft + navWidth - 20;\n else leftAmt = this.nav.scrollLeft - navWidth + 20;\n\n try {\n this.nav.scroll({\n left: leftAmt,\n behavior: 'smooth',\n });\n } catch (e) {\n this.nav.scrollLeft = leftAmt;\n }\n };\n\n private handleTouchStart = (event: TouchEvent) => {\n if (this.disableSwipe) return;\n const touch = event.changedTouches[0];\n this.initialTouchX = touch.pageX;\n this.initialTouchY = touch.pageY;\n };\n\n private handleTouchEnd = (event: TouchEvent) => {\n if (this.disableSwipe) return;\n const touch = event.changedTouches[0];\n const distX = touch.pageX - this.initialTouchX; // get horizontal dist traveled\n const distY = touch.pageY - this.initialTouchY; // get vertical dist traveled\n const threshold = 70;\n\n var xDiff = this.initialTouchX - touch.clientX;\n var yDiff = this.initialTouchY - touch.clientY;\n\n const isHorizontalSwipe =\n Math.abs(distX) >= threshold && Math.abs(distY) <= threshold;\n\n const tabs = this.getAllActiveTabs;\n const currIndex = tabs.findIndex((el) => el.active);\n\n if (isHorizontalSwipe) {\n const toGo =\n (distX < 0 && this.placement === 'top') ||\n (distX > 0 && this.placement !== 'top')\n ? 1\n : -1;\n\n if (tabs[currIndex + toGo]) {\n this.setActiveTab(tabs[currIndex + toGo]);\n\n if (Math.abs(xDiff) > Math.abs(yDiff)) {\n if (xDiff > 0) this.activePanel.setAttribute('animation-dir', 'left');\n else this.activePanel.setAttribute('animation-dir', 'right');\n }\n }\n }\n this.initialTouchX = null;\n this.initialTouchY = null;\n };\n\n private handleContentSlotChange = () => {\n setTimeout(() => {\n this.setAriaLabels();\n this.setActiveTab(this.getActiveTab || this.getAllActiveTabs[0], false);\n });\n };\n\n private handleTabSlotChange = (ev: Event & { target: HTMLSlotElement }) => {\n setTimeout(() => {\n this.setAriaLabels();\n this.handleTabScroll();\n this.setActiveTab(this.getActiveTab || this.getAllActiveTabs[0], false);\n this.updateScrollControls();\n }, 500);\n\n /** maintain a weakmap of mutation observers to maintain tab / indicator position on all changes. */\n const nodes = ev.target.assignedNodes({ flatten: true });\n nodes.forEach((node) => {\n if (!this.mutationObservers.get(node)) {\n const mo = new MutationObserver(() => {\n setTimeout(() => {\n this.syncActiveTabIndicator();\n this.handleTabScroll();\n this.updateScrollControls();\n }, 500);\n });\n this.mutationObservers.set(node, mo);\n\n mo.observe(node, {\n characterData: true,\n childList: true,\n subtree: true,\n });\n }\n });\n };\n\n // Stencil hooks\n\n componentDidLoad() {\n // Initial IO - watching for all content to be loaded\n const observer = new IntersectionObserver((entries, observer) => {\n if (entries[0].intersectionRatio > 0) {\n this.setAriaLabels();\n this.setActiveTab(this.getActiveTab || this.getAllActiveTabs[0], false);\n\n if (this.storeId)\n ComponentStore.init(this, ['tab'], this.storeMethod, this.storeId);\n observer.unobserve(entries[0].target);\n }\n });\n observer.observe(this.host);\n focusVisible.observe(this.tabGroup);\n\n if (this.leftBtn) {\n focusVisible.observe(this.leftBtn);\n focusVisible.observe(this.rightBtn);\n }\n\n this.resizeObserver = new ResizeObserver(() => {\n setTimeout(() => {\n this.updateScrollControls();\n this.syncActiveTabIndicator();\n scrollIntoView(this.activeTab, this.nav, 'horizontal', 'center');\n }, 500);\n });\n this.resizeObserver.observe(this.nav);\n\n raf(() => this.updateScrollControls());\n }\n\n connectedCallback() {\n this.isRtl =\n this.host.dir === 'rtl' ||\n (this.host.ownerDocument as Document).dir === 'rtl';\n }\n\n disconnectedCallback() {\n focusVisible.unobserve(this.tabGroup);\n if (this.leftBtn) {\n focusVisible.unobserve(this.leftBtn);\n focusVisible.unobserve(this.rightBtn);\n }\n if (this.resizeObserver) this.resizeObserver.unobserve(this.nav);\n }\n\n render() {\n this.isRtl = (this.host.ownerDocument as Document).dir === 'rtl';\n\n return (\n <Host\n class={{ ...createColorClasses(this.color), legacy: this.isLegacy }}\n dir={this.isRtl ? 'rtl' : null}\n >\n <div\n part=\"base\"\n ref={(el) => (this.tabGroup = el)}\n class={{\n 'nano-tab-group': true,\n 'nano-tab-group--top': this.placement === 'top',\n 'nano-tab-group--start': this.placement === 'start',\n 'nano-tab-group--has-scroll-controls': this.hasScrollControls,\n 'nano-tab-group--has-scroll-controls-left': !this.hideControlLeft,\n 'nano-tab-group--has-scroll-controls-right': !this.hideControlRight,\n }}\n onClick={this.handleClick}\n onKeyDown={this.handleKeyDown}\n >\n <div class=\"nano-tab-group__nav-container\" part=\"nav\">\n {this.placement === 'top' && (\n <button\n class={{\n 'nano-tab-group__scroll-button': true,\n 'nano-tab-group__scroll-button--left': true,\n }}\n ref={(btn) => (this.leftBtn = btn)}\n onClick={() => this.handleBtnClick(false)}\n >\n <nano-icon name=\"light/chevron-left\"></nano-icon>\n </button>\n )}\n <div\n ref={(el) => (this.nav = el)}\n class=\"nano-tab-group__nav\"\n onScroll={this.handleTabScroll}\n >\n <div\n ref={(el) => (this.tabs = el)}\n part=\"tabs\"\n class=\"nano-tab-group__tabs\"\n role=\"tablist\"\n >\n <div\n ref={(el) => (this.activeTabIndicator = el)}\n part=\"active-tab-indicator\"\n class=\"nano-tab-group__active-tab-indicator\"\n />\n <slot name=\"tabs\" onSlotchange={this.handleTabSlotChange} />\n </div>\n </div>\n {this.placement === 'top' && (\n <button\n class={{\n 'nano-tab-group__scroll-button': true,\n 'nano-tab-group__scroll-button--right': true,\n }}\n ref={(btn) => (this.rightBtn = btn)}\n onClick={() => this.handleBtnClick(true)}\n >\n <nano-icon name=\"light/chevron-right\"></nano-icon>\n </button>\n )}\n </div>\n <slot name=\"tab-content-header\" />\n <div\n part=\"body\"\n class=\"nano-tab-group__body\"\n onTouchStart={this.handleTouchStart}\n onTouchEnd={this.handleTouchEnd}\n >\n <slot onSlotchange={this.handleContentSlotChange} />\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}