@nanoporetech-digital/components 9.0.1 → 9.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/dist/cjs/{algolia-data-YqTcrA7B.js → algolia-data-BEfDDPWP.js} +1 -1
  2. package/dist/cjs/{component-store-BsFgDzFM.js → component-store-DFsNILxg.js} +1 -1
  3. package/dist/cjs/{constructible-style-D0zEjr9J.js → constructible-style-CRdAciHm.js} +1 -1
  4. package/dist/cjs/{dom-GglTcT7o.js → dom-CIEcUG2R.js} +1 -1
  5. package/dist/cjs/{fade-CDGKmRbB.js → fade-Cng4p1KQ.js} +3 -3
  6. package/dist/cjs/{form-control-DKTdW_gr.js → form-control-DdnBRckY.js} +1 -1
  7. package/dist/cjs/{fullscreen-BmuHM8Mq.js → fullscreen-BYNt89kR.js} +3 -3
  8. package/dist/cjs/{index-ap26V5bu.js → index-C7Ikbhe3.js} +13 -5
  9. package/dist/cjs/{index-CeVPSufd.js → index-gxQOxlH_.js} +1 -1
  10. package/dist/cjs/index.cjs.js +3 -3
  11. package/dist/cjs/{lazyload-CBgO3EAI.js → lazyload-CLpLl1ob.js} +3 -3
  12. package/dist/cjs/loader.cjs.js +2 -2
  13. package/dist/cjs/{modal-CjPWcL9B.js → modal-DWvvpfeI.js} +1 -1
  14. package/dist/cjs/nano-accordion.cjs.entry.js +3 -3
  15. package/dist/cjs/nano-alert.cjs.entry.js +7 -7
  16. package/dist/cjs/nano-algolia-filter.cjs.entry.js +4 -4
  17. package/dist/cjs/nano-algolia-pagination.cjs.entry.js +2 -2
  18. package/dist/cjs/nano-algolia-results.cjs.entry.js +3 -3
  19. package/dist/cjs/nano-algolia.cjs.entry.js +5 -5
  20. package/dist/cjs/nano-animation.cjs.entry.js +2 -2
  21. package/dist/cjs/nano-avatar_5.cjs.entry.js +9 -9
  22. package/dist/cjs/nano-breadcrumb.cjs.entry.js +1 -1
  23. package/dist/cjs/nano-card-carousel.cjs.entry.js +2 -2
  24. package/dist/cjs/nano-card.cjs.entry.js +1 -1
  25. package/dist/cjs/nano-checkbox-group.cjs.entry.js +2 -2
  26. package/dist/cjs/nano-checkbox.cjs.entry.js +2 -2
  27. package/dist/cjs/nano-collapsible-comparison.cjs.entry.js +2 -2
  28. package/dist/cjs/nano-components.cjs.js +2 -2
  29. package/dist/cjs/nano-content-links.cjs.entry.js +1 -1
  30. package/dist/cjs/nano-cta.cjs.entry.js +1 -1
  31. package/dist/cjs/{nano-data-table-B3KUstGL.js → nano-data-table-DRp3MvIh.js} +5 -5
  32. package/dist/cjs/nano-data-table.cjs.entry.js +6 -6
  33. package/dist/cjs/nano-datalist_3.cjs.entry.js +3 -3
  34. package/dist/cjs/nano-date-input.cjs.entry.js +2 -2
  35. package/dist/cjs/nano-date-picker_2.cjs.entry.js +4 -4
  36. package/dist/cjs/nano-details.cjs.entry.js +3 -3
  37. package/dist/cjs/nano-dialog.cjs.entry.js +8 -8
  38. package/dist/cjs/nano-dropdown_2.cjs.entry.js +5 -5
  39. package/dist/cjs/nano-feature-box.cjs.entry.js +1 -1
  40. package/dist/cjs/nano-field-validator.cjs.entry.js +3 -3
  41. package/dist/cjs/nano-file-upload.cjs.entry.js +2 -2
  42. package/dist/cjs/nano-footer.cjs.entry.js +1 -1
  43. package/dist/cjs/nano-global-nav.cjs.entry.js +29 -14
  44. package/dist/cjs/nano-grid-item.cjs.entry.js +1 -1
  45. package/dist/cjs/nano-grid_2.cjs.entry.js +3 -3
  46. package/dist/cjs/nano-hero.cjs.entry.js +2 -2
  47. package/dist/cjs/nano-icon-button_2.cjs.entry.js +2 -2
  48. package/dist/cjs/nano-icon-item.cjs.entry.js +1 -1
  49. package/dist/cjs/nano-icon.cjs.entry.js +2 -2
  50. package/dist/cjs/nano-in-page-nav.cjs.entry.js +5 -5
  51. package/dist/cjs/nano-increment.cjs.entry.js +2 -2
  52. package/dist/cjs/nano-input-otp.cjs.entry.js +2 -2
  53. package/dist/cjs/nano-intersection-observe.cjs.entry.js +4 -4
  54. package/dist/cjs/nano-masked-overflow.cjs.entry.js +4 -4
  55. package/dist/cjs/nano-mdd-item.cjs.entry.js +37 -0
  56. package/dist/cjs/nano-mdd.cjs.entry.js +57 -0
  57. package/dist/cjs/nano-menu-drawer.cjs.entry.js +4 -4
  58. package/dist/cjs/nano-more-less.cjs.entry.js +2 -2
  59. package/dist/cjs/nano-nav-item.cjs.entry.js +130 -94
  60. package/dist/cjs/nano-option-box.cjs.entry.js +1 -1
  61. package/dist/cjs/nano-progress-bar.cjs.entry.js +1 -1
  62. package/dist/cjs/nano-range.cjs.entry.js +2 -2
  63. package/dist/cjs/nano-rating.cjs.entry.js +2 -2
  64. package/dist/cjs/nano-resize-observe.cjs.entry.js +2 -2
  65. package/dist/cjs/nano-search-result.cjs.entry.js +1 -1
  66. package/dist/cjs/nano-slide.cjs.entry.js +2 -2
  67. package/dist/cjs/{nano-slides-BONrNv9H.js → nano-slides-QbssxNUC.js} +5 -5
  68. package/dist/cjs/nano-slides.cjs.entry.js +3 -3
  69. package/dist/cjs/nano-sortable.cjs.entry.js +2 -2
  70. package/dist/cjs/nano-spinner.cjs.entry.js +1 -1
  71. package/dist/cjs/nano-split-pane.cjs.entry.js +2 -2
  72. package/dist/cjs/nano-step-accordion.cjs.entry.js +2 -2
  73. package/dist/cjs/nano-step-breadcrumb.cjs.entry.js +3 -3
  74. package/dist/cjs/nano-sticker.cjs.entry.js +4 -4
  75. package/dist/cjs/nano-tab-content.cjs.entry.js +2 -2
  76. package/dist/cjs/nano-tab-group.cjs.entry.js +4 -4
  77. package/dist/cjs/nano-tab.cjs.entry.js +2 -2
  78. package/dist/cjs/nano-table.cjs.entry.js +2 -2
  79. package/dist/cjs/{renderer-D1xFLJsH.js → renderer-bX7EsIYR.js} +1 -1
  80. package/dist/cjs/{scroll-C2cNPPnK.js → scroll-DC2gHZby.js} +1 -1
  81. package/dist/cjs/{slot-D0YPdT3s.js → slot-BRAzxuj_.js} +1 -1
  82. package/dist/cjs/{tabbable-D60VZB1O.js → tabbable-BXxsn02Z.js} +1 -1
  83. package/dist/cjs/{table.worker-ClLnKNqW.js → table.worker-CZYVrH2c.js} +6 -6
  84. package/dist/collection/collection-manifest.json +2 -0
  85. package/dist/collection/components/global-nav/global-nav.js +27 -12
  86. package/dist/collection/components/mdd/mdd-item.css +146 -0
  87. package/dist/collection/components/mdd/mdd-item.js +97 -0
  88. package/dist/collection/components/mdd/mdd.css +55 -0
  89. package/dist/collection/components/mdd/mdd.js +101 -0
  90. package/dist/collection/components/nav-item/nav-item.js +148 -18
  91. package/dist/components/nano-global-nav.js +27 -12
  92. package/dist/components/nano-mdd-item.d.ts +11 -0
  93. package/dist/components/nano-mdd-item.js +69 -0
  94. package/dist/components/nano-mdd.d.ts +11 -0
  95. package/dist/components/nano-mdd.js +76 -0
  96. package/dist/components/nav-item.js +127 -89
  97. package/dist/esm/{algolia-data-CrdfzSCx.js → algolia-data-D4SY17hw.js} +1 -1
  98. package/dist/esm/{component-store-Dwo45Eol.js → component-store-DCcnMDT0.js} +1 -1
  99. package/dist/esm/{constructible-style-8ZZJwMaU.js → constructible-style-BKXXXS9X.js} +1 -1
  100. package/dist/esm/{dom-QEz8hlsO.js → dom-DiLhOqyz.js} +1 -1
  101. package/dist/esm/{fade-7nCfOc5y.js → fade-CnvBzIGD.js} +3 -3
  102. package/dist/esm/{form-control-8eh0RGNw.js → form-control-DYfvQbOQ.js} +1 -1
  103. package/dist/esm/{fullscreen-h77Lkspo.js → fullscreen-BqihOK-Y.js} +3 -3
  104. package/dist/esm/{index-CuC61-2g.js → index-BSptZcXI.js} +1 -1
  105. package/dist/esm/{index-vpnVjPKQ.js → index-RXFO3HxS.js} +13 -5
  106. package/dist/esm/index.js +4 -4
  107. package/dist/esm/{lazyload-CGR82usu.js → lazyload-ClpqVun1.js} +3 -3
  108. package/dist/esm/loader.js +3 -3
  109. package/dist/esm/{modal-Dk_TZDiu.js → modal-DFUZVWqg.js} +1 -1
  110. package/dist/esm/nano-accordion.entry.js +3 -3
  111. package/dist/esm/nano-alert.entry.js +7 -7
  112. package/dist/esm/nano-algolia-filter.entry.js +4 -4
  113. package/dist/esm/nano-algolia-pagination.entry.js +2 -2
  114. package/dist/esm/nano-algolia-results.entry.js +3 -3
  115. package/dist/esm/nano-algolia.entry.js +5 -5
  116. package/dist/esm/nano-animation.entry.js +2 -2
  117. package/dist/esm/nano-avatar_5.entry.js +9 -9
  118. package/dist/esm/nano-breadcrumb.entry.js +1 -1
  119. package/dist/esm/nano-card-carousel.entry.js +2 -2
  120. package/dist/esm/nano-card.entry.js +1 -1
  121. package/dist/esm/nano-checkbox-group.entry.js +2 -2
  122. package/dist/esm/nano-checkbox.entry.js +2 -2
  123. package/dist/esm/nano-collapsible-comparison.entry.js +2 -2
  124. package/dist/esm/nano-components.js +3 -3
  125. package/dist/esm/nano-content-links.entry.js +1 -1
  126. package/dist/esm/nano-cta.entry.js +1 -1
  127. package/dist/esm/{nano-data-table-HQJQG0Sv.js → nano-data-table-HS1UHCwO.js} +5 -5
  128. package/dist/esm/nano-data-table.entry.js +6 -6
  129. package/dist/esm/nano-datalist_3.entry.js +3 -3
  130. package/dist/esm/nano-date-input.entry.js +2 -2
  131. package/dist/esm/nano-date-picker_2.entry.js +4 -4
  132. package/dist/esm/nano-details.entry.js +3 -3
  133. package/dist/esm/nano-dialog.entry.js +8 -8
  134. package/dist/esm/nano-dropdown_2.entry.js +5 -5
  135. package/dist/esm/nano-feature-box.entry.js +1 -1
  136. package/dist/esm/nano-field-validator.entry.js +3 -3
  137. package/dist/esm/nano-file-upload.entry.js +2 -2
  138. package/dist/esm/nano-footer.entry.js +1 -1
  139. package/dist/esm/nano-global-nav.entry.js +29 -14
  140. package/dist/esm/nano-grid-item.entry.js +1 -1
  141. package/dist/esm/nano-grid_2.entry.js +3 -3
  142. package/dist/esm/nano-hero.entry.js +2 -2
  143. package/dist/esm/nano-icon-button_2.entry.js +2 -2
  144. package/dist/esm/nano-icon-item.entry.js +1 -1
  145. package/dist/esm/nano-icon.entry.js +2 -2
  146. package/dist/esm/nano-in-page-nav.entry.js +5 -5
  147. package/dist/esm/nano-increment.entry.js +2 -2
  148. package/dist/esm/nano-input-otp.entry.js +2 -2
  149. package/dist/esm/nano-intersection-observe.entry.js +4 -4
  150. package/dist/esm/nano-masked-overflow.entry.js +4 -4
  151. package/dist/esm/nano-mdd-item.entry.js +35 -0
  152. package/dist/esm/nano-mdd.entry.js +55 -0
  153. package/dist/esm/nano-menu-drawer.entry.js +4 -4
  154. package/dist/esm/nano-more-less.entry.js +2 -2
  155. package/dist/esm/nano-nav-item.entry.js +130 -94
  156. package/dist/esm/nano-option-box.entry.js +1 -1
  157. package/dist/esm/nano-progress-bar.entry.js +1 -1
  158. package/dist/esm/nano-range.entry.js +2 -2
  159. package/dist/esm/nano-rating.entry.js +2 -2
  160. package/dist/esm/nano-resize-observe.entry.js +2 -2
  161. package/dist/esm/nano-search-result.entry.js +1 -1
  162. package/dist/esm/nano-slide.entry.js +2 -2
  163. package/dist/esm/{nano-slides-CMFKg_gU.js → nano-slides-WDFCFgZL.js} +5 -5
  164. package/dist/esm/nano-slides.entry.js +3 -3
  165. package/dist/esm/nano-sortable.entry.js +2 -2
  166. package/dist/esm/nano-spinner.entry.js +1 -1
  167. package/dist/esm/nano-split-pane.entry.js +2 -2
  168. package/dist/esm/nano-step-accordion.entry.js +2 -2
  169. package/dist/esm/nano-step-breadcrumb.entry.js +3 -3
  170. package/dist/esm/nano-sticker.entry.js +4 -4
  171. package/dist/esm/nano-tab-content.entry.js +2 -2
  172. package/dist/esm/nano-tab-group.entry.js +4 -4
  173. package/dist/esm/nano-tab.entry.js +2 -2
  174. package/dist/esm/nano-table.entry.js +2 -2
  175. package/dist/esm/{renderer-CTaemqrs.js → renderer-B_wACs4w.js} +1 -1
  176. package/dist/esm/{scroll-Cpis33Lx.js → scroll-CFCUiakV.js} +1 -1
  177. package/dist/esm/{slot-wHS7-PXA.js → slot-Cj55s-OG.js} +1 -1
  178. package/dist/esm/{tabbable-CT4-pg7f.js → tabbable-Dwh0pD2q.js} +1 -1
  179. package/dist/esm/{table.worker--BAXV6ow.js → table.worker-Cg52OK_a.js} +6 -6
  180. package/dist/nano-components/{algolia-data-CrdfzSCx.js → algolia-data-D4SY17hw.js} +1 -1
  181. package/dist/nano-components/{component-store-Dwo45Eol.js → component-store-DCcnMDT0.js} +1 -1
  182. package/dist/nano-components/{constructible-style-8ZZJwMaU.js → constructible-style-BKXXXS9X.js} +1 -1
  183. package/dist/nano-components/dom-DiLhOqyz.js +4 -0
  184. package/dist/nano-components/{fade-7nCfOc5y.js → fade-CnvBzIGD.js} +1 -1
  185. package/dist/nano-components/{form-control-8eh0RGNw.js → form-control-DYfvQbOQ.js} +1 -1
  186. package/dist/nano-components/{fullscreen-h77Lkspo.js → fullscreen-BqihOK-Y.js} +1 -1
  187. package/dist/nano-components/index-BSptZcXI.js +4 -0
  188. package/dist/nano-components/index-RXFO3HxS.js +5 -0
  189. package/dist/nano-components/index.esm.js +1 -1
  190. package/dist/nano-components/{lazyload-CGR82usu.js → lazyload-ClpqVun1.js} +1 -1
  191. package/dist/nano-components/{modal-Dk_TZDiu.js → modal-DFUZVWqg.js} +1 -1
  192. package/dist/nano-components/nano-accordion.entry.js +1 -1
  193. package/dist/nano-components/nano-alert.entry.js +1 -1
  194. package/dist/nano-components/nano-algolia-filter.entry.js +1 -1
  195. package/dist/nano-components/nano-algolia-pagination.entry.js +1 -1
  196. package/dist/nano-components/nano-algolia-results.entry.js +1 -1
  197. package/dist/nano-components/nano-algolia.entry.js +1 -1
  198. package/dist/nano-components/nano-animation.entry.js +1 -1
  199. package/dist/nano-components/nano-avatar_5.entry.js +1 -1
  200. package/dist/nano-components/nano-breadcrumb.entry.js +1 -1
  201. package/dist/nano-components/nano-card-carousel.entry.js +1 -1
  202. package/dist/nano-components/nano-card.entry.js +1 -1
  203. package/dist/nano-components/nano-checkbox-group.entry.js +1 -1
  204. package/dist/nano-components/nano-checkbox.entry.js +1 -1
  205. package/dist/nano-components/nano-collapsible-comparison.entry.js +1 -1
  206. package/dist/nano-components/nano-components.css +30 -105
  207. package/dist/nano-components/nano-components.esm.js +1 -1
  208. package/dist/nano-components/nano-content-links.entry.js +1 -1
  209. package/dist/nano-components/nano-cta.entry.js +1 -1
  210. package/dist/nano-components/{nano-data-table-HQJQG0Sv.js → nano-data-table-HS1UHCwO.js} +1 -1
  211. package/dist/nano-components/nano-data-table.entry.js +1 -1
  212. package/dist/nano-components/nano-datalist_3.entry.js +1 -1
  213. package/dist/nano-components/nano-date-input.entry.js +1 -1
  214. package/dist/nano-components/nano-date-picker_2.entry.js +1 -1
  215. package/dist/nano-components/nano-details.entry.js +1 -1
  216. package/dist/nano-components/nano-dialog.entry.js +1 -1
  217. package/dist/nano-components/nano-dropdown_2.entry.js +1 -1
  218. package/dist/nano-components/nano-feature-box.entry.js +1 -1
  219. package/dist/nano-components/nano-field-validator.entry.js +1 -1
  220. package/dist/nano-components/nano-file-upload.entry.js +1 -1
  221. package/dist/nano-components/nano-footer.entry.js +1 -1
  222. package/dist/nano-components/nano-global-nav.entry.js +1 -1
  223. package/dist/nano-components/nano-grid-item.entry.js +1 -1
  224. package/dist/nano-components/nano-grid_2.entry.js +1 -1
  225. package/dist/nano-components/nano-hero.entry.js +1 -1
  226. package/dist/nano-components/nano-icon-button_2.entry.js +1 -1
  227. package/dist/nano-components/nano-icon-item.entry.js +1 -1
  228. package/dist/nano-components/nano-icon.entry.js +1 -1
  229. package/dist/nano-components/nano-in-page-nav.entry.js +1 -1
  230. package/dist/nano-components/nano-increment.entry.js +1 -1
  231. package/dist/nano-components/nano-input-otp.entry.js +1 -1
  232. package/dist/nano-components/nano-intersection-observe.entry.js +1 -1
  233. package/dist/nano-components/nano-masked-overflow.entry.js +1 -1
  234. package/dist/nano-components/nano-mdd-item.entry.js +4 -0
  235. package/dist/nano-components/nano-mdd.entry.js +4 -0
  236. package/dist/nano-components/nano-menu-drawer.entry.js +1 -1
  237. package/dist/nano-components/nano-more-less.entry.js +1 -1
  238. package/dist/nano-components/nano-nav-item.entry.js +1 -1
  239. package/dist/nano-components/nano-option-box.entry.js +1 -1
  240. package/dist/nano-components/nano-progress-bar.entry.js +1 -1
  241. package/dist/nano-components/nano-range.entry.js +1 -1
  242. package/dist/nano-components/nano-rating.entry.js +1 -1
  243. package/dist/nano-components/nano-resize-observe.entry.js +1 -1
  244. package/dist/nano-components/nano-search-result.entry.js +1 -1
  245. package/dist/nano-components/nano-slide.entry.js +1 -1
  246. package/dist/nano-components/{nano-slides-CMFKg_gU.js → nano-slides-WDFCFgZL.js} +4 -4
  247. package/dist/nano-components/nano-slides.entry.js +1 -1
  248. package/dist/nano-components/nano-sortable.entry.js +1 -1
  249. package/dist/nano-components/nano-spinner.entry.js +1 -1
  250. package/dist/nano-components/nano-split-pane.entry.js +1 -1
  251. package/dist/nano-components/nano-step-accordion.entry.js +1 -1
  252. package/dist/nano-components/nano-step-breadcrumb.entry.js +1 -1
  253. package/dist/nano-components/nano-sticker.entry.js +1 -1
  254. package/dist/nano-components/nano-tab-content.entry.js +1 -1
  255. package/dist/nano-components/nano-tab-group.entry.js +1 -1
  256. package/dist/nano-components/nano-tab.entry.js +1 -1
  257. package/dist/nano-components/nano-table.entry.js +1 -1
  258. package/dist/nano-components/{renderer-CTaemqrs.js → renderer-B_wACs4w.js} +1 -1
  259. package/dist/nano-components/{scroll-Cpis33Lx.js → scroll-CFCUiakV.js} +1 -1
  260. package/dist/nano-components/{slot-wHS7-PXA.js → slot-Cj55s-OG.js} +1 -1
  261. package/dist/nano-components/{tabbable-CT4-pg7f.js → tabbable-Dwh0pD2q.js} +1 -1
  262. package/dist/nano-components/{table.worker--BAXV6ow.js → table.worker-Cg52OK_a.js} +1 -1
  263. package/dist/style/components.css +1 -1
  264. package/dist/style/components.css.map +1 -1
  265. package/dist/style/nano.css +1 -1
  266. package/dist/style/nano.css.map +1 -1
  267. package/dist/types/components/global-nav/global-nav.d.ts +1 -0
  268. package/dist/types/components/mdd/mdd-item.d.ts +23 -0
  269. package/dist/types/components/mdd/mdd.d.ts +24 -0
  270. package/dist/types/components/nav-item/nav-item.d.ts +15 -0
  271. package/dist/types/components.d.ts +114 -0
  272. package/docs-json.json +238 -1
  273. package/docs-vscode.json +34 -0
  274. package/hydrate/index.js +275 -101
  275. package/hydrate/index.mjs +275 -101
  276. package/package.json +2 -2
  277. package/dist/nano-components/dom-QEz8hlsO.js +0 -4
  278. package/dist/nano-components/index-CuC61-2g.js +0 -4
  279. package/dist/nano-components/index-vpnVjPKQ.js +0 -5
@@ -3,7 +3,6 @@
3
3
  */
4
4
  import { Host, } from "@stencil/core";
5
5
  import { getDirectChildren } from "../../utils/dom";
6
- import { displayTransition } from "../../utils/transitions";
7
6
  import { getTabbableElements } from "../../utils/tabbable";
8
7
  import { h, transformTag } from "../../utils/renderer";
9
8
  import { HasSlotController } from "../../utils/slot";
@@ -38,6 +37,11 @@ export class NavItem {
38
37
  secondaryDiv;
39
38
  slotCtrl = new HasSlotController(this, 'secondary', 'close-button');
40
39
  controlElement;
40
+ hoverTimer = -1;
41
+ openedByTouch = false;
42
+ openedByClick = false;
43
+ canHover = false;
44
+ transitionAbort = null;
41
45
  host;
42
46
  didOpen = false;
43
47
  isInMenuDrawer = false;
@@ -55,6 +59,17 @@ export class NavItem {
55
59
  checkbox = false;
56
60
  /** Whether secondary menus should close on blur */
57
61
  closeOnBlur = true;
62
+ /** Open the secondary panel on hover (fine pointer / non-touch devices only) */
63
+ openOnHover = false;
64
+ openOnHoverChanged() {
65
+ this.canHover =
66
+ this.openOnHover &&
67
+ window.matchMedia('(hover: hover) and (pointer: fine)').matches;
68
+ if (!this.canHover)
69
+ this.removeHoverListeners();
70
+ else
71
+ this.addHoverListeners();
72
+ }
58
73
  /** Emitted when the nav item closes it's secondary navigation. */
59
74
  nanoClose;
60
75
  /** Emitted when the nav item opens it's secondary navigation. */
@@ -113,34 +128,110 @@ export class NavItem {
113
128
  if (!this.didOpen || !this.slotCtrl.has('secondary') || !this.closeOnBlur)
114
129
  return;
115
130
  if (e.key && e.key === 'Escape') {
131
+ this.openedByClick = false;
116
132
  this.closeSecondary();
117
133
  return;
118
134
  }
119
- if (!e.composedPath().some((el) => el === this.secondaryDiv)) {
135
+ const path = e.composedPath();
136
+ // if click-locked, ignore clicks within the host (trigger or panel)
137
+ if (this.openedByClick && path.some((el) => el === this.host))
138
+ return;
139
+ if (!path.some((el) => el === this.secondaryDiv)) {
120
140
  this.closeSecondary();
121
141
  }
122
142
  }
143
+ addHoverListeners() {
144
+ this.host.addEventListener('pointerenter', this.handlePointerEnter);
145
+ this.host.addEventListener('pointerleave', this.handlePointerLeave);
146
+ this.host.addEventListener('focusout', this.handleFocusOut);
147
+ }
148
+ removeHoverListeners() {
149
+ this.host.removeEventListener('pointerenter', this.handlePointerEnter);
150
+ this.host.removeEventListener('pointerleave', this.handlePointerLeave);
151
+ this.host.removeEventListener('focusout', this.handleFocusOut);
152
+ }
153
+ handlePointerEnter = (e) => {
154
+ if (!this.canHover || !this.slotCtrl.has('secondary'))
155
+ return;
156
+ if (e.pointerType !== 'mouse') {
157
+ this.openedByTouch = true;
158
+ return;
159
+ }
160
+ this.openedByTouch = false;
161
+ window.clearTimeout(this.hoverTimer);
162
+ // if click-locked open, don't start a re-open timer
163
+ if (this.openedByClick && this.didOpen)
164
+ return;
165
+ this.hoverTimer = window.setTimeout(() => this.openSecondary(), 0);
166
+ };
167
+ handlePointerLeave = (e) => {
168
+ if (!this.canHover ||
169
+ this.openedByTouch ||
170
+ this.openedByClick ||
171
+ !this.slotCtrl.has('secondary'))
172
+ return;
173
+ if (e.pointerType !== 'mouse')
174
+ return;
175
+ window.clearTimeout(this.hoverTimer);
176
+ this.hoverTimer = window.setTimeout(() => this.closeSecondary(), 200);
177
+ };
178
+ handleFocusOut = (e) => {
179
+ if (!this.canHover || !this.didOpen)
180
+ return;
181
+ // only close if focus left the nav-item entirely
182
+ if (e.relatedTarget && this.host.contains(e.relatedTarget))
183
+ return;
184
+ if (e.relatedTarget &&
185
+ this.host.shadowRoot?.contains(e.relatedTarget))
186
+ return;
187
+ this.closeSecondary();
188
+ };
189
+ awaitTransition(signal) {
190
+ return new Promise((resolve) => {
191
+ const fallback = window.setTimeout(() => resolve(true), 1000);
192
+ const cleanup = () => window.clearTimeout(fallback);
193
+ signal.addEventListener('abort', () => {
194
+ cleanup();
195
+ resolve(false);
196
+ }, { once: true });
197
+ this.secondaryDiv.addEventListener('transitionend', () => {
198
+ cleanup();
199
+ resolve(true);
200
+ }, { once: true, signal });
201
+ });
202
+ }
123
203
  closeSecondary = async () => {
124
204
  if (!this.slotCtrl.has('secondary') || !this.open)
125
205
  return;
206
+ this.transitionAbort?.abort();
207
+ this.transitionAbort = new AbortController();
208
+ const { signal } = this.transitionAbort;
126
209
  this.open = false;
127
- await displayTransition(this.secondaryDiv, {
128
- className: 'modal--open',
129
- showProp: 'part',
130
- show: false,
131
- });
210
+ this.secondaryDiv.part.remove('modal--open');
211
+ const completed = await this.awaitTransition(signal);
212
+ if (!completed)
213
+ return;
214
+ this.secondaryDiv.style.display = 'none';
215
+ this.openedByClick = false;
132
216
  this.nanoClosing.emit({ secondaryMenu: this.secondaryDiv });
133
217
  this.didOpen = false;
134
218
  };
135
219
  openSecondary = async () => {
136
220
  if (!this.slotCtrl.has('secondary') || this.open)
137
221
  return;
222
+ this.transitionAbort?.abort();
223
+ this.transitionAbort = new AbortController();
224
+ const { signal } = this.transitionAbort;
138
225
  this.open = true;
139
- await displayTransition(this.secondaryDiv, {
140
- className: 'modal--open',
141
- showProp: 'part',
142
- show: true,
143
- });
226
+ this.secondaryDiv.style.display = 'block';
227
+ void this.secondaryDiv.clientWidth; // force reflow
228
+ window.setTimeout(() => {
229
+ if (!signal.aborted)
230
+ this.secondaryDiv.part.add('modal--open');
231
+ }, 50);
232
+ const completed = await this.awaitTransition(signal);
233
+ if (!completed)
234
+ return;
144
235
  this.nanoOpening.emit({ secondaryMenu: this.secondaryDiv });
145
236
  this.didOpen = true;
146
237
  };
@@ -156,6 +247,15 @@ export class NavItem {
156
247
  if (this.disabled)
157
248
  return;
158
249
  if (this.slotCtrl.has('secondary')) {
250
+ if (this.canHover) {
251
+ if (this.didOpen) {
252
+ // already open via hover — lock it open, suppress hover-close
253
+ this.openedByClick = true;
254
+ return;
255
+ }
256
+ // opening via click in hover mode — lock it
257
+ this.openedByClick = true;
258
+ }
159
259
  this.toggleSecondary();
160
260
  return;
161
261
  }
@@ -186,27 +286,34 @@ export class NavItem {
186
286
  connectedCallback() {
187
287
  this.handleDefaultSlotChange();
188
288
  this.isInMenuDrawer = !!this.host.closest(transformTag('nano-menu-drawer'));
289
+ this.openOnHoverChanged();
290
+ }
291
+ disconnectedCallback() {
292
+ window.clearTimeout(this.hoverTimer);
293
+ this.removeHoverListeners();
189
294
  }
190
295
  componentDidLoad() {
191
296
  this.openChange();
192
297
  }
193
298
  render() {
194
- return (h(Host, { key: 'b6ce27588c1ca2ac2a42d0aada06d7f554a1174a', class: {
299
+ return (h(Host, { key: '5b7160c2d8712548475c34340cd654d4e17ccfbb', class: {
195
300
  'nano-menu-drawer': this.isInMenuDrawer,
196
301
  'nano-nav-item': true,
197
302
  disabled: this.disabled,
198
- }, role: this.host.closest('[role="menu"]') ? 'menuitem' : undefined, "aria-disabled": this.disabled ? 'true' : undefined }, h("div", { key: 'e8faa3568a13feb95ef131f0bd412577120fbf84', class: {
303
+ }, role: this.host.closest('[role="menu"]') ? 'menuitem' : undefined, "aria-disabled": this.disabled ? 'true' : undefined }, h("div", { key: '92d8b0b88a51214a5fa177d20be957b61e049916', class: {
199
304
  navitem: true,
200
305
  'navitem--open': this.open,
201
306
  'navitem--active': this.selected,
202
- }, part: "trigger-wrapper" }, this.href && !this.disabled && (h("a", { key: '4a4da7478db63015d0dcd81ed053146f8eeac5f3', part: "trigger trigger--anchor", target: this.target, ref: (a) => (this.controlElement = a), href: this.href, class: {
307
+ }, part: "trigger-wrapper" }, this.href && !this.disabled && (h("a", { key: '4b0b32b1c33506ef94e1321e6b6840fa0ddc64cc', part: "trigger trigger--anchor", target: this.target, ref: (a) => (this.controlElement = a), href: this.href, class: {
203
308
  navitem__trigger: true,
204
- } }, h("slot", { key: '1eafb7864368850ad2539c402eb1b00877f3d55e', name: "icon-start" }), h("span", { key: '8953312d4dad64ced970d2f1120c07b6c36070f1', class: "navitem__label", part: "label" }, h("slot", { key: '390f468f8d1f5d4f0669cae53ef140e452b16b07', onSlotchange: this.handleDefaultSlotChange })), h("slot", { key: '3ecd42c2ca6c1546f48a1a5fcf7742d90ad4e1c4', name: "icon-end" }))), (!this.href || this.disabled) && (h("button", { key: '0694ce0708264ef1305e4b926a2f40f1875025a9', role: this.checkbox ? 'checkbox' : undefined, "aria-checked": this.checkbox ? this.selected.toString() : undefined, part: "trigger trigger--button", ref: (btn) => (this.controlElement = btn), onClick: this.handleClick, disabled: this.disabled, class: {
309
+ } }, h("slot", { key: '10b8c3c7a4903d8317f01da20a3bdf9196bc1438', name: "icon-start" }), h("span", { key: '2244f23ee2eb590f471c515243e30d5a15b38df3', class: "navitem__label", part: "label" }, h("slot", { key: '7f330c217ec16b81851e6a1ae4c37098b75cd799', onSlotchange: this.handleDefaultSlotChange })), h("slot", { key: '831d05cc6a55eba753d3bb877983337e88991bd6', name: "icon-end" }))), (!this.href || this.disabled) && (h("button", { key: '8ff3bbecbf1401830487bf116b27311d4be0d13d', role: this.checkbox ? 'checkbox' : undefined, "aria-checked": this.checkbox ? this.selected.toString() : undefined, "aria-expanded": this.slotCtrl.has('secondary')
310
+ ? this.didOpen.toString()
311
+ : undefined, part: "trigger trigger--button", ref: (btn) => (this.controlElement = btn), onClick: this.handleClick, disabled: this.disabled, class: {
205
312
  navitem__trigger: true,
206
- } }, h("slot", { key: 'c3cc4fcbb527f5f8ea2786243fe610d587e36190', name: "icon-start" }), h("span", { key: '385c92f1f2cc26b9c7e4f1a8601920c1f3bf2171', class: "navitem__label", part: "label" }, h("slot", { key: '4e7a75c8903081856c20206aa309c2a9855991da', onSlotchange: this.handleDefaultSlotChange })), h("slot", { key: '668b95901ba0b914ccc193d4f3cc4433d908c014', name: "icon-end" }))), this.slotCtrl.has('secondary') && !this.disabled && (h("div", { key: 'f81c9aeb6c903b25a662fd1fc615d6f95f6b8f4d', part: "modal", class: {
313
+ } }, h("slot", { key: 'eb814e8de2bbec584722ab92956eef03262611d3', name: "icon-start" }), h("span", { key: '76ad3a122201c9d2cd23ba7898662e3d134b02ba', class: "navitem__label", part: "label" }, h("slot", { key: '9a6e9153990ee4ad34ed8db1f7e1aa4ad54ea587', onSlotchange: this.handleDefaultSlotChange })), h("slot", { key: '6b0d010032497dd1f037e982c245891d8603da25', name: "icon-end" }))), this.slotCtrl.has('secondary') && !this.disabled && (h("div", { key: 'bff80914555716d7515c97535113be7aa4ad6f0a', part: "modal", class: {
207
314
  navitem__modal: true,
208
315
  'navitem__modal--open': this.didOpen,
209
- }, ref: (div) => (this.secondaryDiv = div), tabIndex: -1 }, h("div", { key: '70a4b002e989753c461c7dac4dd975200a92e3de', class: "navitem__modal-content", part: `modal-content ${this.didOpen ? 'modal-content--open' : ''}` }, this.slotCtrl.has('close-button') && (h("div", { key: '7b0daad80ae03a29789c9d2bef74d2473f2f1f39', part: "close-button", onClick: this.closeSecondary }, h("slot", { key: '858798062958ea0f4ee809cbf853bdb83dd4d184', name: "close-button" }))), h("slot", { key: '41583a8cc59babbfb1a9a084a3de31c61a145fbc', name: "secondary" })), h("div", { key: '5c260dca9a8fdf7951349df64a037fc7415c3c4b', class: "navitem__modal-mask", onClick: this.closeSecondary, part: `modal-mask ${this.didOpen ? 'modal-mask--open' : ''}` }))))));
316
+ }, ref: (div) => (this.secondaryDiv = div), tabIndex: -1 }, h("div", { key: '3e7495704a435455446c243a590d82cdde632d5a', class: "navitem__modal-content", part: `modal-content ${this.didOpen ? 'modal-content--open' : ''}` }, this.slotCtrl.has('close-button') && (h("div", { key: '613887997d246e3b49f9c7c876859181c3d8089e', part: "close-button", onClick: this.closeSecondary }, h("slot", { key: '82da2c670fcda49aafb78b00603716ae7667e445', name: "close-button" }))), h("slot", { key: '8c1906a9116fcd80cd34a51d68c012982c9858cf', name: "secondary" })), h("div", { key: '3731b3264e9a15b11078df8679a885e5b5d3e5dc', class: "navitem__modal-mask", onClick: this.closeSecondary, part: `modal-mask ${this.didOpen ? 'modal-mask--open' : ''}` }))))));
210
317
  }
211
318
  static get is() { return "nano-nav-item"; }
212
319
  static get encapsulation() { return "shadow"; }
@@ -361,6 +468,26 @@ export class NavItem {
361
468
  "setter": false,
362
469
  "reflect": false,
363
470
  "defaultValue": "true"
471
+ },
472
+ "openOnHover": {
473
+ "type": "boolean",
474
+ "attribute": "open-on-hover",
475
+ "mutable": false,
476
+ "complexType": {
477
+ "original": "boolean",
478
+ "resolved": "boolean",
479
+ "references": {}
480
+ },
481
+ "required": false,
482
+ "optional": false,
483
+ "docs": {
484
+ "tags": [],
485
+ "text": "Open the secondary panel on hover (fine pointer / non-touch devices only)"
486
+ },
487
+ "getter": false,
488
+ "setter": false,
489
+ "reflect": false,
490
+ "defaultValue": "false"
364
491
  }
365
492
  };
366
493
  }
@@ -515,6 +642,9 @@ export class NavItem {
515
642
  static get elementRef() { return "host"; }
516
643
  static get watchers() {
517
644
  return [{
645
+ "propName": "openOnHover",
646
+ "methodName": "openOnHoverChanged"
647
+ }, {
518
648
  "propName": "open",
519
649
  "methodName": "openChange"
520
650
  }, {
@@ -159,6 +159,20 @@ const GlobalNav = /*@__PURE__*/ proxyCustomElement(class GlobalNav extends HTMLE
159
159
  this.shouldResize === false) {
160
160
  this.overflowOpen = false;
161
161
  }
162
+ this.setNavItemHover();
163
+ }
164
+ setNavItemHover() {
165
+ const isBarMenu = this.breakpoint <= this.bpPartials.mainMenu.breakpoint;
166
+ this.host
167
+ .querySelectorAll('nano-nav-item')
168
+ .forEach((el) => {
169
+ el.openOnHover = isBarMenu;
170
+ });
171
+ this.host
172
+ .querySelectorAll('nano-mdd')
173
+ .forEach((el) => {
174
+ el.accordion = !isBarMenu;
175
+ });
162
176
  }
163
177
  debounceResetResize = debounce(() => {
164
178
  this.shouldResize = false;
@@ -452,6 +466,7 @@ const GlobalNav = /*@__PURE__*/ proxyCustomElement(class GlobalNav extends HTMLE
452
466
  }
453
467
  componentDidRender() {
454
468
  this.handleResize();
469
+ this.setNavItemHover();
455
470
  }
456
471
  /// RENDER ///
457
472
  loggedInPanel() {
@@ -508,21 +523,21 @@ const GlobalNav = /*@__PURE__*/ proxyCustomElement(class GlobalNav extends HTMLE
508
523
  }
509
524
  render() {
510
525
  const bpps = this.bpPartials;
511
- return (h(Host, { key: '690ad4fb8f24cfb37689e8033069c43692ffb0f6', class: {
526
+ return (h(Host, { key: '53c751962d1ed36bae13be0a3c74b340b4a553bd', class: {
512
527
  'overflow-menu': this.breakpoint > bpps.mainMenu.breakpoint,
513
528
  'bar-menu': this.breakpoint <= bpps.mainMenu.breakpoint,
514
529
  'nano-global-nav': true,
515
- } }, h("div", { key: '7dc0a5a9543a461a9cf06c5536dcf04058725309', class: {
530
+ } }, h("div", { key: '40ab68a79d28c8ace97c06f3b1d1222e1c21cf0e', class: {
516
531
  gn: true,
517
532
  'gn__search-open': this.searchBarShown,
518
- } }, h("nano-drawer", { key: '8df19d73baf12de72803029bcb339b055b911e23', ref: (el) => (this.overflowMenu = el), label: "Main menu", part: "drawer", class: "gn__drawer nano-theme-dark", placement: "start", open: this.overflowOpen, onNanoAfterHide: () => (this.overflowOpen = false), onNanoAfterShow: () => (this.overflowOpen = true) }, h("div", { key: '66f9d33e3b5949af60b1304c1290a2409b35dceb', class: "gn__drawer-header", part: "overflow-header", slot: "label" }, "Main menu"), h("nav", { key: '9a75fd50fdc75191893d230d4541e8065054e306', class: "gn__drawer-menu", part: "overflow-menu" }, this.breakpoint > bpps.mainMenu.breakpoint
533
+ } }, h("nano-drawer", { key: '7a4b70e3364f66678843c3b66a46a11b4018d26c', ref: (el) => (this.overflowMenu = el), label: "Main menu", part: "drawer", class: "gn__drawer nano-theme-dark", placement: "start", open: this.overflowOpen, onNanoAfterHide: () => (this.overflowOpen = false), onNanoAfterShow: () => (this.overflowOpen = true) }, h("div", { key: '49a9b1c0de594cbe45f844d16be862fb84b27776', class: "gn__drawer-header", part: "overflow-header", slot: "label" }, "Main menu"), h("nav", { key: 'af7cabec8e9897f5e48d0a3a0c5e47f23b4cf151', class: "gn__drawer-menu", part: "overflow-menu" }, this.breakpoint > bpps.mainMenu.breakpoint
519
534
  ? bpps.mainMenu.tpl()
520
- : '', h("slot", { key: '4dec3baf8d3085297d1fcbf943bac0509f9bb5af', name: "overflow" }))), h("div", { key: 'edeb6fcc2fc4060e7c228c6b911dd1d399545f16', class: "gn__menu-bar-wrapper" }, h("div", { key: '84267ef880c126263be73733f3e534d5657985a7', class: "gn__menu-bar", part: "menu-bar", ref: (el) => (this.mainMenuBar = el) }, h("nav", { key: 'd8eb12840a941fb81c170058b32f7effb79c5eba', "aria-label": "Global navigation", class: `gn__main-menu ${this.shouldResize ? 'resizing' : ''}`, part: "main-menu", ref: (el) => (this.mainMenu = el) }, this.breakpoint > bpps.mainMenu.breakpoint && (h("nano-icon-button", { key: '6a11d0743bac742391f8f2e987d293df870e1e01', class: "gn__overflow-button", iconName: "light/bars", label: "Open Menu", onClick: () => this.overflowMenu.show() })), h("slot", { key: '02690cb93ba4db6c31add029f398d2b9b5e9cc4c', name: "logo" }, h("a", { key: 'dda06ea1320291a5b0174042914e9e5bddd1f272', href: this.logoUrl, class: "gn__logo-link", part: "logo-link" }, this.breakpoint <= bpps.logo.breakpoint ? (h("img", { src: getAssetPath('../nano-assets/ont-logo.svg'), alt: `Oxford Nanopore Technologies logo. Features a stylised representation of a nanopore,
535
+ : '', h("slot", { key: '25b6d6721170837ae7c908d7db7f3ac0507c0775', name: "overflow" }))), h("div", { key: 'c2ea4f60360ed705d8fefa86712d9fa1fdacb8c6', class: "gn__menu-bar-wrapper" }, h("div", { key: '504deb61564e7de04cf6c437a1692fd456d6bf38', class: "gn__menu-bar", part: "menu-bar", ref: (el) => (this.mainMenuBar = el) }, h("nav", { key: 'd83c1e1397e054aac75a7942d0b49c9ea012e1c0', "aria-label": "Global navigation", class: `gn__main-menu ${this.shouldResize ? 'resizing' : ''}`, part: "main-menu", ref: (el) => (this.mainMenu = el) }, this.breakpoint > bpps.mainMenu.breakpoint && (h("nano-icon-button", { key: '201f58efe6e86cef00e45f43b74b805d997e4647', class: "gn__overflow-button", iconName: "light/bars", label: "Open Menu", onClick: () => this.overflowMenu.show() })), h("slot", { key: '2370a4105d6462c6b19a9cd407aa6ad0616f53b4', name: "logo" }, h("a", { key: '82cfdc19c8521f251d9cec4671f8623c4dbd0b42', href: this.logoUrl, class: "gn__logo-link", part: "logo-link" }, this.breakpoint <= bpps.logo.breakpoint ? (h("img", { src: getAssetPath('../nano-assets/ont-logo.svg'), alt: `Oxford Nanopore Technologies logo. Features a stylised representation of a nanopore,
521
536
  (a tiny protein channel embedded in a membrane) through which DNA or RNA molecules are passed in for sequencing.`, class: "gn__logo gn__logo--large", width: "152", height: "35", part: "logo logo--large" })) : (h("img", { src: getAssetPath('../nano-assets/ont-wheel.svg'), alt: `Oxford Nanopore Technologies logo. A stylised representation of a nanopore,
522
- (a tiny protein channel embedded in a membrane) through which DNA or RNA molecules are passed in for sequencing.`, class: "gn__logo gn__logo--small", width: "35", height: "35", part: "logo logo--small" })))), this.breakpoint <= bpps.mainMenu.breakpoint && (h("div", { key: '7374a1027ea9677356301a7ef365c05639ac0055', class: "gn__main-menu-links" }, bpps.mainMenu.tpl())), h("div", { key: '7b5844cb33637ad77785bc9d46a2272053290c9e', class: "gn__main-menu-actions" }, !this.myAccountData ||
523
- (!!this.searchIndices.length && (h("nano-dropdown", { key: '735db145b688f7ccf532acf1aa56eae1ed7a0bec', dialogTitle: "Search Oxford Nanopore Technologies", placement: "bottom", class: "gn__search-dropdown", skidding: -30, distance: 25, open: this.searchBarShown, onNanoAfterShow: this.handleSearchOpenEvent, onNanoAfterHide: this.handleSearchCloseEvent, autoOpen: !!this.searchIndices.length }, h("nano-icon-button", { key: 'f965f682dec1e34a0d3d573a081054fbf78c6fe2', class: "gn__search-button", slot: "trigger", iconName: "light/magnifying-glass", label: "Search" }), h("form", { key: 'fbab37529deefdb095f592a34eef51e5c9b7a529', ref: (form) => (this.searchForm = form), class: "gn__search-form", part: "search-form", onSubmit: this.onSearchSubmit }, this.searchIndices.length > 1 && (h("nano-select", { key: '213618c5d41621a9ac3bd2f0211dece4f7e26dff', part: "search-select", label: "Which site do you wish to search in?", mask: true, hideLabel: true, value: this.activeIndex?.index, onNanoChange: this.handleSearchIndexChangeEvent }, this.searchIndices.map((index) => (h("nano-option", { selected: index.name === this.searchIndex, value: index.index }, index.name || index.index))))), h("nano-input", { key: '58b1ef502a1c59dbd4215361782454954074a159', ref: (ele) => (this.searchInput = ele), part: "search-input", label: "Search Oxford Nanopore Technologies", placeholder: "Search Oxford Nanopore...", hideLabel: true, clearable: true, showInlineError: false, onNanoChange: (e) => {
537
+ (a tiny protein channel embedded in a membrane) through which DNA or RNA molecules are passed in for sequencing.`, class: "gn__logo gn__logo--small", width: "35", height: "35", part: "logo logo--small" })))), this.breakpoint <= bpps.mainMenu.breakpoint && (h("div", { key: '7c43301ad5c735c8dae4081d2bb91fef7db41762', class: "gn__main-menu-links" }, bpps.mainMenu.tpl())), h("div", { key: '12285c67b6773c7bc31897cb0752fb4db549a162', class: "gn__main-menu-actions" }, !this.myAccountData ||
538
+ (!!this.searchIndices.length && (h("nano-dropdown", { key: 'f7845d92127df80f548ae65573725b2c1497b703', dialogTitle: "Search Oxford Nanopore Technologies", placement: "bottom", class: "gn__search-dropdown", skidding: -30, distance: 25, open: this.searchBarShown, onNanoAfterShow: this.handleSearchOpenEvent, onNanoAfterHide: this.handleSearchCloseEvent, autoOpen: !!this.searchIndices.length }, h("nano-icon-button", { key: '6ca7605ce6e9829b6155f3e17d9262db9d452642', class: "gn__search-button", slot: "trigger", iconName: "light/magnifying-glass", label: "Search" }), h("form", { key: 'aba9d208a95acae67b2e2d05b6cbf39ac6aed329', ref: (form) => (this.searchForm = form), class: "gn__search-form", part: "search-form", onSubmit: this.onSearchSubmit }, this.searchIndices.length > 1 && (h("nano-select", { key: '7d6894101fb8e74e90c712f8768926e4604468bb', part: "search-select", label: "Which site do you wish to search in?", mask: true, hideLabel: true, value: this.activeIndex?.index, onNanoChange: this.handleSearchIndexChangeEvent }, this.searchIndices.map((index) => (h("nano-option", { selected: index.name === this.searchIndex, value: index.index }, index.name || index.index))))), h("nano-input", { key: '8ae65dcf14ec20041c3152fe875923a1bf19ab4e', ref: (ele) => (this.searchInput = ele), part: "search-input", label: "Search Oxford Nanopore Technologies", placeholder: "Search Oxford Nanopore...", hideLabel: true, clearable: true, showInlineError: false, onNanoChange: (e) => {
524
539
  this.handleSearchTermChangeEvent(e.detail.value);
525
- }, onNanoInput: this.handleSearchTermInputEvent, debounce: 500, value: this._searchValue }, h("nano-icon-button", { key: '50403eb32e74646ec1c6ace40671b6c6add9c3a7', slot: "end", "icon-name": "light/magnifying-glass", label: "Search", onClick: this.onSearchSubmit }), h("nano-datalist", { key: '104f3771bfb0bf6e7af94173ad4d290c7f339740', class: "gn__search-results", onNanoSelect: (e) => e.preventDefault(), dropDownConfig: { tetherTo: this.searchForm }, disableFilter: true }, this.searchLoading && (h("div", { key: '178ae5411f8e5a646390fa5d93ca765b9d421803', slot: "no-result", class: "gn__search-loading" }, h("nano-spinner", { key: '56a6a81b3d0dc6a938d4a05ade52260bd1ffaafb' }, "Searching..."))), this.noResultPartial(), !!this.autocompleteResults?.hits.length && [
540
+ }, onNanoInput: this.handleSearchTermInputEvent, debounce: 500, value: this._searchValue }, h("nano-icon-button", { key: 'f232ad693769e872e8fe8a2e42109c2ea5286e02', slot: "end", "icon-name": "light/magnifying-glass", label: "Search", onClick: this.onSearchSubmit }), h("nano-datalist", { key: 'cca09389259f1b63a607a7a0e667f839ae9a2904', class: "gn__search-results", onNanoSelect: (e) => e.preventDefault(), dropDownConfig: { tetherTo: this.searchForm }, disableFilter: true }, this.searchLoading && (h("div", { key: '6a134d0b971806091e973f7c8c1b5ef79ddfab5a', slot: "no-result", class: "gn__search-loading" }, h("nano-spinner", { key: '2bb8c2c2a7351cc1d95be9517d4c4db687c11c49' }, "Searching..."))), this.noResultPartial(), !!this.autocompleteResults?.hits.length && [
526
541
  this.autocompleteResults.hits.map((hit, i) => (h("nano-option", { href: hit.url, class: "gn__search-result", onClick: () => {
527
542
  searchInsight.sendClick({
528
543
  index: this.activeIndex.index,
@@ -532,13 +547,13 @@ const GlobalNav = /*@__PURE__*/ proxyCustomElement(class GlobalNav extends HTMLE
532
547
  positions: [i + 1],
533
548
  });
534
549
  } }, h("span", { innerHTML: this.autocompleteSnippet(hit) })))),
535
- h("nano-option", { key: '0d6d3c61ce7bed27aded81d3332f595185883aca', class: "gn__search-viewall", onNanoSelect: this.onSearchSubmit }, "View all results"),
536
- ])))))), h("div", { key: 'c597dba756ae0a4a995dc02ecd732f5b9b71d28c', class: "gn__cart" }, this.cartUrl && [
537
- h("nano-icon-button", { key: '473a48ab2ce258e301ec10ca6ba46076933435d0', iconName: "light/cart-shopping", label: "View your cart", href: this.cartUrl }),
538
- !!this.cartCount && (h("nano-badge", { key: '535ce44688a0459eb1189a464d72f43c05f0e868', theme: "danger" }, this.cartCount > 9 ? '9+' : this.cartCount)),
550
+ h("nano-option", { key: '0f453d14dada8aff48749a7fb99ceee46ad4d3ef', class: "gn__search-viewall", onNanoSelect: this.onSearchSubmit }, "View all results"),
551
+ ])))))), h("div", { key: '44b96146b2cd8d71c832e5f400a3de65cd1a8f04', class: "gn__cart" }, this.cartUrl && [
552
+ h("nano-icon-button", { key: '1745e9090c7850789417d70b82ce25b2661b556c', iconName: "light/cart-shopping", label: "View your cart", href: this.cartUrl }),
553
+ !!this.cartCount && (h("nano-badge", { key: '997946ee187bba74e880ab485f1a8e43cc74f707', theme: "danger" }, this.cartCount > 9 ? '9+' : this.cartCount)),
539
554
  ]), this.breakpoint <= bpps.contact.breakpoint
540
555
  ? bpps.contact.tpl()
541
- : '', this.isLoggedIn ? (h("nano-dropdown", { dialogTitle: "User menu", class: "gn__user-dropdown", distance: 10, placement: "bottom-end" }, h("button", { slot: "trigger", class: "gn__user-dropdown-trigger" }, h("nano-icon", { name: "light/user" }), h("nano-icon", { name: "light/chevron-down", class: "gn__user-dropdown-chevron" }), !!this.msgCount && (h("nano-badge", { theme: "danger" }, this.msgCount > 9 ? '9+' : this.msgCount))), this.loggedInPanel())) : (h("nano-cta", { secondary: true, size: "small", icon: "false", class: "gn__login-cta" }, typeof this.loginUrl === 'string' ? (h("a", { href: this.formatLoginLink(this.loginUrl) }, "Login")) : (h("button", { onClick: this.loginUrl }, "Login")))))))), h("nano-global-search-results", { key: 'ff1eb9ee71e119f9bf2b292bcfc9fea6138accdd', part: "site-search-results" }, h("div", { key: '56e3c1ecb8aa0bd1776164406e684a8c5d8e60dc', class: "gn__site", part: "site-wrapper" }, h("slot", { key: '78de4f8b640ae63423f90428fe01ae2ba545bdfd' }))))));
556
+ : '', this.isLoggedIn ? (h("nano-dropdown", { dialogTitle: "User menu", class: "gn__user-dropdown", distance: 10, placement: "bottom-end" }, h("button", { slot: "trigger", class: "gn__user-dropdown-trigger" }, h("nano-icon", { name: "light/user" }), h("nano-icon", { name: "light/chevron-down", class: "gn__user-dropdown-chevron" }), !!this.msgCount && (h("nano-badge", { theme: "danger" }, this.msgCount > 9 ? '9+' : this.msgCount))), this.loggedInPanel())) : (h("nano-cta", { secondary: true, size: "small", icon: "false", class: "gn__login-cta" }, typeof this.loginUrl === 'string' ? (h("a", { href: this.formatLoginLink(this.loginUrl) }, "Login")) : (h("button", { onClick: this.loginUrl }, "Login")))))))), h("nano-global-search-results", { key: '41a5c6ee1257b595b391d711841dbab6d6c5ecc0', part: "site-search-results" }, h("div", { key: '94418390bfa82f913fa521e5612effe53b319ab4', class: "gn__site", part: "site-wrapper" }, h("slot", { key: 'd0c7c41fb54d7d57d44a0ae9a79216a4f1780675' }))))));
542
557
  }
543
558
  static get assetsDirs() { return ["assets"]; }
544
559
  static get watchers() { return {
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface NanoMddItem extends Components.NanoMddItem, HTMLElement {}
4
+ export const NanoMddItem: {
5
+ prototype: NanoMddItem;
6
+ new (): NanoMddItem;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1,69 @@
1
+ /*!
2
+ * Custom elements for Nanopore-Digital Web applications
3
+ */
4
+ import { proxyCustomElement, HTMLElement, Host } from '@stencil/core/internal/client';
5
+ import { h } from './renderer.js';
6
+ import { d as defineCustomElement$3 } from './details.js';
7
+ import { d as defineCustomElement$2 } from './icon.js';
8
+
9
+ const mddItemCss = ":host,*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}@media (prefers-reduced-motion: reduce){:host,*,*::before,*::after{animation-duration:0.01ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !important;scroll-behavior:auto !important}}:host,*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}@media (prefers-reduced-motion: reduce){:host,*,*::before,*::after{animation-duration:0.01ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !important;scroll-behavior:auto !important}}nano-mdd-item{display:block}nano-mdd-item a:not(nano-content-links a){display:flex;flex-direction:column;gap:var(--nano-spacing-xs);color:var(--nano-color-base-1000);text-decoration:none}@media (width < 1200px){nano-mdd-item a:not(nano-content-links a){font-size:var(--nano-font-size-xs)}}nano-mdd-item a:not(nano-content-links a):hover{text-decoration:underline;color:var(--nano-color-primary-1000)}nano-mdd-item a:not(nano-content-links a)>p{color:var(--nano-color-neutral-1000);font-size:var(--nano-font-size-xs);letter-spacing:var(--nano-letter-spacing-denser);margin:0}@media (width < 1200px){nano-mdd-item a:not(nano-content-links a)>p{font-size:var(--nano-font-size-2xs)}}nano-mdd-item ul{margin:0;padding:0}nano-mdd-item ul li{margin-inline:0;list-style:none;margin-block-end:var(--nano-spacing-l2);line-height:var(--nano-line-height-dense)}nano-mdd-item .mdd__link-columns{gap:var(--nano-spacing-xl)}nano-mdd-item .mdd__link-columns:has(>:nth-child(6)){columns:2}nano-mdd-item .mdd__link-columns>*{display:block;margin-block-end:var(--nano-spacing-l2)}nano-mdd-item .mdd__view-all{display:inline-flex;flex-direction:row;align-items:center;gap:0.25em;color:var(--nano-color-primary-1100);font-size:var(--nano-font-size-2xs);text-decoration:underline}nano-mdd-item .mdd__view-all::after{content:\"\";display:block;flex-shrink:0;inline-size:1em;block-size:1em;background-color:currentcolor;-webkit-mask-image:var(--nano-component-icon-chevron);mask-image:var(--nano-component-icon-chevron);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:cover;mask-size:cover}nano-mdd-item:not([accordion]) [slot=label]{display:block;color:var(--nano-color-text-neutral);font-size:var(--nano-font-size-2xs);line-height:var(--nano-line-height-normal);letter-spacing:1.2px;text-transform:uppercase;margin-block-end:var(--nano-spacing-md)}nano-mdd-item:not([accordion]) [slot=label]::after{content:\"\";display:block;padding-block-start:var(--nano-spacing-md);border-block-end:1px solid rgb(var(--nano-color-base-rgb-1000)/30%)}nano-mdd-item:not([accordion]) .mdd-item__body{display:flex;flex-direction:column}nano-mdd-item[accordion] nano-details>*:not([slot=label]){padding-inline-start:var(--nano-spacing-md)}nano-mdd-item[accordion] .mdd__link-columns{padding-inline-start:var(--nano-spacing-md);columns:1 !important}nano-mdd-item[accordion] nano-details{border:none;border-block-start:1px solid var(--nano-color-neutral-300)}nano-mdd-item[accordion]:last-child nano-details{border-block-end:1px solid var(--nano-color-neutral-300)}";
10
+
11
+ const MddItem = /*@__PURE__*/ proxyCustomElement(class MddItem extends HTMLElement {
12
+ constructor() {
13
+ super();
14
+ this.__registerHost();
15
+ }
16
+ detailsEl;
17
+ get host() { return this; }
18
+ /** Controlled open state (used by nano-mdd in accordion mode) */
19
+ open = false;
20
+ /** Set by parent nano-mdd — switches between column and accordion rendering */
21
+ accordion = false;
22
+ openChanged() {
23
+ if (this.detailsEl)
24
+ this.detailsEl.open = this.open;
25
+ }
26
+ render() {
27
+ if (this.accordion) {
28
+ return (h(Host, null, h("nano-details", { ref: (el) => (this.detailsEl = el), open: this.open, size: "small", part: "details", onNanoOpen: () => (this.open = true), onNanoClose: () => (this.open = false) }, h("slot", { name: "label", slot: "label" }), h("slot", null))));
29
+ }
30
+ return (h(Host, null, h("div", { class: "mdd-item__column" }, h("div", { class: "mdd-item__label" }, h("slot", { name: "label" })), h("div", { class: "mdd-item__body" }, h("slot", null)))));
31
+ }
32
+ static get watchers() { return {
33
+ "open": ["openChanged"]
34
+ }; }
35
+ static get style() { return mddItemCss; }
36
+ }, [260, "nano-mdd-item", {
37
+ "open": [1540],
38
+ "accordion": [516]
39
+ }, undefined, {
40
+ "open": ["openChanged"]
41
+ }]);
42
+ function defineCustomElement$1() {
43
+ if (typeof customElements === "undefined") {
44
+ return;
45
+ }
46
+ const components = ["nano-mdd-item", "nano-details", "nano-icon"];
47
+ components.forEach(tagName => { switch (tagName) {
48
+ case "nano-mdd-item":
49
+ if (!customElements.get(tagName)) {
50
+ customElements.define(tagName, MddItem);
51
+ }
52
+ break;
53
+ case "nano-details":
54
+ if (!customElements.get(tagName)) {
55
+ defineCustomElement$3();
56
+ }
57
+ break;
58
+ case "nano-icon":
59
+ if (!customElements.get(tagName)) {
60
+ defineCustomElement$2();
61
+ }
62
+ break;
63
+ } });
64
+ }
65
+
66
+ const NanoMddItem = MddItem;
67
+ const defineCustomElement = defineCustomElement$1;
68
+
69
+ export { NanoMddItem, defineCustomElement };
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface NanoMdd extends Components.NanoMdd, HTMLElement {}
4
+ export const NanoMdd: {
5
+ prototype: NanoMdd;
6
+ new (): NanoMdd;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1,76 @@
1
+ /*!
2
+ * Custom elements for Nanopore-Digital Web applications
3
+ */
4
+ import { proxyCustomElement, HTMLElement } from '@stencil/core/internal/client';
5
+ import { t as transformTag } from './renderer.js';
6
+
7
+ const mddCss = ":host,*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}@media (prefers-reduced-motion: reduce){:host,*,*::before,*::after{animation-duration:0.01ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !important;scroll-behavior:auto !important}}:host,*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}@media (prefers-reduced-motion: reduce){:host,*,*::before,*::after{animation-duration:0.01ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !important;scroll-behavior:auto !important}}nano-mdd{display:grid;grid-template-columns:repeat(auto-fit, minmax(150px, 1fr));gap:var(--nano-spacing-xl)}@media (width < 1200px){nano-mdd{gap:var(--nano-spacing-l2)}}nano-mdd .mdd__span-2{grid-column:span 2}nano-mdd[accordion]{display:block}";
8
+
9
+ const Mdd = /*@__PURE__*/ proxyCustomElement(class Mdd extends HTMLElement {
10
+ constructor() {
11
+ super();
12
+ this.__registerHost();
13
+ }
14
+ get host() { return this; }
15
+ /** When true, only one item can be open at a time */
16
+ accordion = false;
17
+ accordionChanged() {
18
+ this.syncAccordionProp();
19
+ }
20
+ /** Listen for nano-details opening (composed:true bubbles through shadow boundaries) */
21
+ onDetailsOpen(e) {
22
+ if (!this.accordion)
23
+ return;
24
+ const tag = transformTag('nano-mdd-item');
25
+ // find which mdd-item the opening details belongs to
26
+ const openedItem = e
27
+ .composedPath()
28
+ .find((el) => el.tagName?.toLowerCase() === tag);
29
+ if (!openedItem)
30
+ return;
31
+ // close all siblings
32
+ this.host
33
+ .querySelectorAll(tag)
34
+ .forEach((item) => {
35
+ if (item !== openedItem)
36
+ item.open = false;
37
+ });
38
+ }
39
+ syncAccordionProp() {
40
+ const tag = transformTag('nano-mdd-item');
41
+ this.host
42
+ .querySelectorAll(tag)
43
+ .forEach((item) => {
44
+ item.accordion = this.accordion;
45
+ });
46
+ }
47
+ componentDidLoad() {
48
+ this.syncAccordionProp();
49
+ }
50
+ static get watchers() { return {
51
+ "accordion": ["accordionChanged"]
52
+ }; }
53
+ static get style() { return mddCss; }
54
+ }, [0, "nano-mdd", {
55
+ "accordion": [516]
56
+ }, [[0, "nanoOpen", "onDetailsOpen"]], {
57
+ "accordion": ["accordionChanged"]
58
+ }]);
59
+ function defineCustomElement$1() {
60
+ if (typeof customElements === "undefined") {
61
+ return;
62
+ }
63
+ const components = ["nano-mdd"];
64
+ components.forEach(tagName => { switch (tagName) {
65
+ case "nano-mdd":
66
+ if (!customElements.get(tagName)) {
67
+ customElements.define(tagName, Mdd);
68
+ }
69
+ break;
70
+ } });
71
+ }
72
+
73
+ const NanoMdd = Mdd;
74
+ const defineCustomElement = defineCustomElement$1;
75
+
76
+ export { NanoMdd, defineCustomElement };