@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
@@ -8,78 +8,6 @@ import { t as transformTag, h } from './renderer.js';
8
8
  import { H as HasSlotController } from './slot.js';
9
9
  import { f as focusInContainer } from './active-element.js';
10
10
 
11
- /**
12
- * Quality of life for transition handling.
13
- * Adds / removes transitionend events. Resolves on complete
14
-
15
- * @param el element
16
- * @returns a promise that resolves when the transition is done
17
- */
18
- /**
19
- * handles hiding and showing elements properly (with display),
20
- * along with transitions, so they are no longer viewable in the dom.
21
- * - OnHide remove show class, listen for transition end, then display: none on finish
22
- * - OnShow, display block on start then add a show class
23
- *
24
- * @param el
25
- * @param options
26
- * @returns a promise of resolving as either 'show' or 'hidden'
27
- */
28
- const displayTransition = (el, options) => {
29
- const opts = {
30
- className: '',
31
- show: true,
32
- showDisplay: 'block',
33
- showProp: 'classList',
34
- timeout: 1000,
35
- ...options,
36
- };
37
- return new Promise((resolve) => {
38
- const showCb = (e) => {
39
- if ((e.target === el || e.composedPath().some((el) => el === e.target)) &&
40
- (!opts.transitionProp || opts.transitionProp.includes(e.propertyName))) {
41
- el.dataset.displayTransition = 'true';
42
- el.removeEventListener('transitionend', showCb);
43
- resolve('shown');
44
- }
45
- };
46
- const hideCb = (e) => {
47
- if ((e.target === el || e.composedPath().some((el) => el === e.target)) &&
48
- (!opts.transitionProp || opts.transitionProp.includes(e.propertyName))) {
49
- el.style.display = 'none';
50
- el.dataset.displayTransition = 'false';
51
- el.removeEventListener('transitionend', hideCb);
52
- resolve('hidden');
53
- }
54
- };
55
- if (opts.show) {
56
- el.addEventListener('transitionend', showCb);
57
- el.style.display = opts.showDisplay;
58
- setTimeout(() => el[opts.showProp].add(opts.className), 50);
59
- }
60
- else {
61
- el.addEventListener('transitionend', hideCb);
62
- el[opts.showProp].remove(opts.className);
63
- }
64
- // If no transition, resolve after timeout
65
- if (opts.timeout) {
66
- setTimeout(() => {
67
- if (opts.show && el.dataset.displayTransition !== 'true') {
68
- el.dataset.displayTransition = 'true';
69
- el.removeEventListener('transitionend', showCb);
70
- resolve('shown');
71
- }
72
- else if (!opts.show && el.dataset.displayTransition !== 'false') {
73
- el.style.display = 'none';
74
- el.dataset.displayTransition = 'false';
75
- el.removeEventListener('transitionend', hideCb);
76
- resolve('hidden');
77
- }
78
- }, opts.timeout);
79
- }
80
- });
81
- };
82
-
83
11
  const navItemCss = ":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}}:host{display:contents}.navitem{background:inherit;color:inherit}a,button{all:unset;color:inherit;text-decoration:inherit;cursor:pointer;display:flex;align-items:center;justify-content:space-between;padding:var(--padding);gap:var(--nano-spacing-md);inline-size:100%;box-sizing:border-box;background:inherit}a:hover,a:focus,a:active,button:hover,button:focus,button:active{color:inherit}a:focus-visible,button:focus-visible{outline:var(--nano-focus-ring);outline-offset:var(--nano-focus-ring-offset)}a[disabled],button[disabled]{opacity:0.5;cursor:not-allowed}.navitem__label{margin-inline-end:auto}.navitem__modal{all:unset;display:none;position:absolute;color:initial;opacity:0;transition:var(--nano-transition-fast) ease}.navitem--open .navitem__modal{opacity:1}::slotted([slot=close-button]){all:unset}::slotted([slot=close-button]):focus-visible{outline:var(--nano-focus-ring);outline-offset:var(--nano-focus-ring-offset)}";
84
12
 
85
13
  const NavItem = /*@__PURE__*/ proxyCustomElement(class NavItem extends HTMLElement {
@@ -95,6 +23,11 @@ const NavItem = /*@__PURE__*/ proxyCustomElement(class NavItem extends HTMLEleme
95
23
  secondaryDiv;
96
24
  slotCtrl = new HasSlotController(this, 'secondary', 'close-button');
97
25
  controlElement;
26
+ hoverTimer = -1;
27
+ openedByTouch = false;
28
+ openedByClick = false;
29
+ canHover = false;
30
+ transitionAbort = null;
98
31
  get host() { return this; }
99
32
  didOpen = false;
100
33
  isInMenuDrawer = false;
@@ -112,6 +45,17 @@ const NavItem = /*@__PURE__*/ proxyCustomElement(class NavItem extends HTMLEleme
112
45
  checkbox = false;
113
46
  /** Whether secondary menus should close on blur */
114
47
  closeOnBlur = true;
48
+ /** Open the secondary panel on hover (fine pointer / non-touch devices only) */
49
+ openOnHover = false;
50
+ openOnHoverChanged() {
51
+ this.canHover =
52
+ this.openOnHover &&
53
+ window.matchMedia('(hover: hover) and (pointer: fine)').matches;
54
+ if (!this.canHover)
55
+ this.removeHoverListeners();
56
+ else
57
+ this.addHoverListeners();
58
+ }
115
59
  /** Emitted when the nav item closes it's secondary navigation. */
116
60
  nanoClose;
117
61
  /** Emitted when the nav item opens it's secondary navigation. */
@@ -170,34 +114,109 @@ const NavItem = /*@__PURE__*/ proxyCustomElement(class NavItem extends HTMLEleme
170
114
  if (!this.didOpen || !this.slotCtrl.has('secondary') || !this.closeOnBlur)
171
115
  return;
172
116
  if (e.key && e.key === 'Escape') {
117
+ this.openedByClick = false;
173
118
  this.closeSecondary();
174
119
  return;
175
120
  }
176
- if (!e.composedPath().some((el) => el === this.secondaryDiv)) {
121
+ const path = e.composedPath();
122
+ // if click-locked, ignore clicks within the host (trigger or panel)
123
+ if (this.openedByClick && path.some((el) => el === this.host))
124
+ return;
125
+ if (!path.some((el) => el === this.secondaryDiv)) {
177
126
  this.closeSecondary();
178
127
  }
179
128
  }
129
+ addHoverListeners() {
130
+ this.host.addEventListener('pointerenter', this.handlePointerEnter);
131
+ this.host.addEventListener('pointerleave', this.handlePointerLeave);
132
+ this.host.addEventListener('focusout', this.handleFocusOut);
133
+ }
134
+ removeHoverListeners() {
135
+ this.host.removeEventListener('pointerenter', this.handlePointerEnter);
136
+ this.host.removeEventListener('pointerleave', this.handlePointerLeave);
137
+ this.host.removeEventListener('focusout', this.handleFocusOut);
138
+ }
139
+ handlePointerEnter = (e) => {
140
+ if (!this.canHover || !this.slotCtrl.has('secondary'))
141
+ return;
142
+ if (e.pointerType !== 'mouse') {
143
+ this.openedByTouch = true;
144
+ return;
145
+ }
146
+ this.openedByTouch = false;
147
+ window.clearTimeout(this.hoverTimer);
148
+ // if click-locked open, don't start a re-open timer
149
+ if (this.openedByClick && this.didOpen)
150
+ return;
151
+ this.hoverTimer = window.setTimeout(() => this.openSecondary(), 0);
152
+ };
153
+ handlePointerLeave = (e) => {
154
+ if (!this.canHover ||
155
+ this.openedByTouch ||
156
+ this.openedByClick ||
157
+ !this.slotCtrl.has('secondary'))
158
+ return;
159
+ if (e.pointerType !== 'mouse')
160
+ return;
161
+ window.clearTimeout(this.hoverTimer);
162
+ this.hoverTimer = window.setTimeout(() => this.closeSecondary(), 200);
163
+ };
164
+ handleFocusOut = (e) => {
165
+ if (!this.canHover || !this.didOpen)
166
+ return;
167
+ // only close if focus left the nav-item entirely
168
+ if (e.relatedTarget && this.host.contains(e.relatedTarget))
169
+ return;
170
+ if (e.relatedTarget &&
171
+ this.host.shadowRoot?.contains(e.relatedTarget))
172
+ return;
173
+ this.closeSecondary();
174
+ };
175
+ awaitTransition(signal) {
176
+ return new Promise((resolve) => {
177
+ const fallback = window.setTimeout(() => resolve(true), 1000);
178
+ const cleanup = () => window.clearTimeout(fallback);
179
+ signal.addEventListener('abort', () => {
180
+ cleanup();
181
+ resolve(false);
182
+ }, { once: true });
183
+ this.secondaryDiv.addEventListener('transitionend', () => {
184
+ cleanup();
185
+ resolve(true);
186
+ }, { once: true, signal });
187
+ });
188
+ }
180
189
  closeSecondary = async () => {
181
190
  if (!this.slotCtrl.has('secondary') || !this.open)
182
191
  return;
192
+ this.transitionAbort?.abort();
193
+ this.transitionAbort = new AbortController();
194
+ const { signal } = this.transitionAbort;
183
195
  this.open = false;
184
- await displayTransition(this.secondaryDiv, {
185
- className: 'modal--open',
186
- showProp: 'part',
187
- show: false,
188
- });
196
+ this.secondaryDiv.part.remove('modal--open');
197
+ const completed = await this.awaitTransition(signal);
198
+ if (!completed)
199
+ return;
200
+ this.secondaryDiv.style.display = 'none';
201
+ this.openedByClick = false;
189
202
  this.nanoClosing.emit({ secondaryMenu: this.secondaryDiv });
190
203
  this.didOpen = false;
191
204
  };
192
205
  openSecondary = async () => {
193
206
  if (!this.slotCtrl.has('secondary') || this.open)
194
207
  return;
208
+ this.transitionAbort?.abort();
209
+ this.transitionAbort = new AbortController();
210
+ const { signal } = this.transitionAbort;
195
211
  this.open = true;
196
- await displayTransition(this.secondaryDiv, {
197
- className: 'modal--open',
198
- showProp: 'part',
199
- show: true,
200
- });
212
+ this.secondaryDiv.style.display = 'block';
213
+ window.setTimeout(() => {
214
+ if (!signal.aborted)
215
+ this.secondaryDiv.part.add('modal--open');
216
+ }, 50);
217
+ const completed = await this.awaitTransition(signal);
218
+ if (!completed)
219
+ return;
201
220
  this.nanoOpening.emit({ secondaryMenu: this.secondaryDiv });
202
221
  this.didOpen = true;
203
222
  };
@@ -213,6 +232,15 @@ const NavItem = /*@__PURE__*/ proxyCustomElement(class NavItem extends HTMLEleme
213
232
  if (this.disabled)
214
233
  return;
215
234
  if (this.slotCtrl.has('secondary')) {
235
+ if (this.canHover) {
236
+ if (this.didOpen) {
237
+ // already open via hover — lock it open, suppress hover-close
238
+ this.openedByClick = true;
239
+ return;
240
+ }
241
+ // opening via click in hover mode — lock it
242
+ this.openedByClick = true;
243
+ }
216
244
  this.toggleSecondary();
217
245
  return;
218
246
  }
@@ -243,29 +271,37 @@ const NavItem = /*@__PURE__*/ proxyCustomElement(class NavItem extends HTMLEleme
243
271
  connectedCallback() {
244
272
  this.handleDefaultSlotChange();
245
273
  this.isInMenuDrawer = !!this.host.closest(transformTag('nano-menu-drawer'));
274
+ this.openOnHoverChanged();
275
+ }
276
+ disconnectedCallback() {
277
+ window.clearTimeout(this.hoverTimer);
278
+ this.removeHoverListeners();
246
279
  }
247
280
  componentDidLoad() {
248
281
  this.openChange();
249
282
  }
250
283
  render() {
251
- return (h(Host, { key: 'b6ce27588c1ca2ac2a42d0aada06d7f554a1174a', class: {
284
+ return (h(Host, { key: '5b7160c2d8712548475c34340cd654d4e17ccfbb', class: {
252
285
  'nano-menu-drawer': this.isInMenuDrawer,
253
286
  'nano-nav-item': true,
254
287
  disabled: this.disabled,
255
- }, role: this.host.closest('[role="menu"]') ? 'menuitem' : undefined, "aria-disabled": this.disabled ? 'true' : undefined }, h("div", { key: 'e8faa3568a13feb95ef131f0bd412577120fbf84', class: {
288
+ }, role: this.host.closest('[role="menu"]') ? 'menuitem' : undefined, "aria-disabled": this.disabled ? 'true' : undefined }, h("div", { key: '92d8b0b88a51214a5fa177d20be957b61e049916', class: {
256
289
  navitem: true,
257
290
  'navitem--open': this.open,
258
291
  'navitem--active': this.selected,
259
- }, 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: {
292
+ }, 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: {
260
293
  navitem__trigger: true,
261
- } }, 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: {
294
+ } }, 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')
295
+ ? this.didOpen.toString()
296
+ : undefined, part: "trigger trigger--button", ref: (btn) => (this.controlElement = btn), onClick: this.handleClick, disabled: this.disabled, class: {
262
297
  navitem__trigger: true,
263
- } }, 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: {
298
+ } }, 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: {
264
299
  navitem__modal: true,
265
300
  'navitem__modal--open': this.didOpen,
266
- }, 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' : ''}` }))))));
301
+ }, 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' : ''}` }))))));
267
302
  }
268
303
  static get watchers() { return {
304
+ "openOnHover": ["openOnHoverChanged"],
269
305
  "open": ["openChange"],
270
306
  "didOpen": ["didOpenChange"]
271
307
  }; }
@@ -278,12 +314,14 @@ const NavItem = /*@__PURE__*/ proxyCustomElement(class NavItem extends HTMLEleme
278
314
  "selected": [1540],
279
315
  "checkbox": [516],
280
316
  "closeOnBlur": [4, "close-on-blur"],
317
+ "openOnHover": [4, "open-on-hover"],
281
318
  "didOpen": [32],
282
319
  "isInMenuDrawer": [32],
283
320
  "setFocus": [64],
284
321
  "closeMenu": [64],
285
322
  "openMenu": [64]
286
323
  }, [[16, "click", "handleClose"], [16, "keyup", "handleClose"]], {
324
+ "openOnHover": ["openOnHoverChanged"],
287
325
  "open": ["openChange"],
288
326
  "didOpen": ["didOpenChange"]
289
327
  }]);
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Custom elements for Nanopore-Digital Web applications
3
3
  */
4
- import { a as getElement } from './index-vpnVjPKQ.js';
4
+ import { a as getElement } from './index-RXFO3HxS.js';
5
5
 
6
6
  var createDeferredPromise = function () {
7
7
  var resolve;
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Custom elements for Nanopore-Digital Web applications
3
3
  */
4
- import { a as getElement } from './index-vpnVjPKQ.js';
4
+ import { a as getElement } from './index-RXFO3HxS.js';
5
5
  import { d as debounce } from './throttle-C93FMm2Z.js';
6
6
 
7
7
  function parse(searchParams, replacer) {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Custom elements for Nanopore-Digital Web applications
3
3
  */
4
- import { h, d as Host, a as getElement } from './index-vpnVjPKQ.js';
4
+ import { h, d as Host, a as getElement } from './index-RXFO3HxS.js';
5
5
 
6
6
  // import type { VNode, HTMLStencilElement } from "@stencil/core";
7
7
  const supportsConstructibleStylesheets = (() => {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Custom elements for Nanopore-Digital Web applications
3
3
  */
4
- import './index-vpnVjPKQ.js';
4
+ import './index-RXFO3HxS.js';
5
5
 
6
6
  var NODE_TYPE;
7
7
  (function (NODE_TYPE) {
@@ -1,9 +1,9 @@
1
1
  /*!
2
2
  * Custom elements for Nanopore-Digital Web applications
3
3
  */
4
- import { F as Flickity, u as utils } from './nano-slides-CMFKg_gU.js';
5
- import './index-vpnVjPKQ.js';
6
- import './renderer-CTaemqrs.js';
4
+ import { F as Flickity, u as utils } from './nano-slides-WDFCFgZL.js';
5
+ import './index-RXFO3HxS.js';
6
+ import './renderer-B_wACs4w.js';
7
7
 
8
8
  const Slide = Flickity.Slide;
9
9
  const slideUpdateTarget = Slide.prototype.updateTarget;
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Custom elements for Nanopore-Digital Web applications
3
3
  */
4
- import { h } from './renderer-CTaemqrs.js';
4
+ import { h } from './renderer-B_wACs4w.js';
5
5
 
6
6
  const renderLabel = ({ label, hasLabelSlot, controlId, labelId, floatLabel, placeholder, alwaysShowPlaceholder, hideLabel, hasValue, rtl, showCharCount, maxlength, charCount, }) => {
7
7
  if (!label && !hasLabelSlot)
@@ -1,9 +1,9 @@
1
1
  /*!
2
2
  * Custom elements for Nanopore-Digital Web applications
3
3
  */
4
- import { F as Flickity } from './nano-slides-CMFKg_gU.js';
5
- import './index-vpnVjPKQ.js';
6
- import './renderer-CTaemqrs.js';
4
+ import { F as Flickity } from './nano-slides-WDFCFgZL.js';
5
+ import './index-RXFO3HxS.js';
6
+ import './renderer-B_wACs4w.js';
7
7
 
8
8
  Flickity.createMethods.push('_createFullscreen');
9
9
  const proto = Flickity.prototype;
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * Custom elements for Nanopore-Digital Web applications
3
3
  */
4
- import { j as getRenderingRef, k as forceUpdate } from './index-vpnVjPKQ.js';
4
+ import { j as getRenderingRef, k as forceUpdate } from './index-RXFO3HxS.js';
5
5
 
6
6
  const appendToMap = (map, propName, value) => {
7
7
  const items = map.get(propName);