@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.
- package/dist/cjs/{algolia-data-YqTcrA7B.js → algolia-data-BEfDDPWP.js} +1 -1
- package/dist/cjs/{component-store-BsFgDzFM.js → component-store-DFsNILxg.js} +1 -1
- package/dist/cjs/{constructible-style-D0zEjr9J.js → constructible-style-CRdAciHm.js} +1 -1
- package/dist/cjs/{dom-GglTcT7o.js → dom-CIEcUG2R.js} +1 -1
- package/dist/cjs/{fade-CDGKmRbB.js → fade-Cng4p1KQ.js} +3 -3
- package/dist/cjs/{form-control-DKTdW_gr.js → form-control-DdnBRckY.js} +1 -1
- package/dist/cjs/{fullscreen-BmuHM8Mq.js → fullscreen-BYNt89kR.js} +3 -3
- package/dist/cjs/{index-ap26V5bu.js → index-C7Ikbhe3.js} +13 -5
- package/dist/cjs/{index-CeVPSufd.js → index-gxQOxlH_.js} +1 -1
- package/dist/cjs/index.cjs.js +3 -3
- package/dist/cjs/{lazyload-CBgO3EAI.js → lazyload-CLpLl1ob.js} +3 -3
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/{modal-CjPWcL9B.js → modal-DWvvpfeI.js} +1 -1
- package/dist/cjs/nano-accordion.cjs.entry.js +3 -3
- package/dist/cjs/nano-alert.cjs.entry.js +7 -7
- package/dist/cjs/nano-algolia-filter.cjs.entry.js +4 -4
- package/dist/cjs/nano-algolia-pagination.cjs.entry.js +2 -2
- package/dist/cjs/nano-algolia-results.cjs.entry.js +3 -3
- package/dist/cjs/nano-algolia.cjs.entry.js +5 -5
- package/dist/cjs/nano-animation.cjs.entry.js +2 -2
- package/dist/cjs/nano-avatar_5.cjs.entry.js +9 -9
- package/dist/cjs/nano-breadcrumb.cjs.entry.js +1 -1
- package/dist/cjs/nano-card-carousel.cjs.entry.js +2 -2
- package/dist/cjs/nano-card.cjs.entry.js +1 -1
- package/dist/cjs/nano-checkbox-group.cjs.entry.js +2 -2
- package/dist/cjs/nano-checkbox.cjs.entry.js +2 -2
- package/dist/cjs/nano-collapsible-comparison.cjs.entry.js +2 -2
- package/dist/cjs/nano-components.cjs.js +2 -2
- package/dist/cjs/nano-content-links.cjs.entry.js +1 -1
- package/dist/cjs/nano-cta.cjs.entry.js +1 -1
- package/dist/cjs/{nano-data-table-B3KUstGL.js → nano-data-table-DRp3MvIh.js} +5 -5
- package/dist/cjs/nano-data-table.cjs.entry.js +6 -6
- package/dist/cjs/nano-datalist_3.cjs.entry.js +3 -3
- package/dist/cjs/nano-date-input.cjs.entry.js +2 -2
- package/dist/cjs/nano-date-picker_2.cjs.entry.js +4 -4
- package/dist/cjs/nano-details.cjs.entry.js +3 -3
- package/dist/cjs/nano-dialog.cjs.entry.js +8 -8
- package/dist/cjs/nano-dropdown_2.cjs.entry.js +5 -5
- package/dist/cjs/nano-feature-box.cjs.entry.js +1 -1
- package/dist/cjs/nano-field-validator.cjs.entry.js +3 -3
- package/dist/cjs/nano-file-upload.cjs.entry.js +2 -2
- package/dist/cjs/nano-footer.cjs.entry.js +1 -1
- package/dist/cjs/nano-global-nav.cjs.entry.js +29 -14
- package/dist/cjs/nano-grid-item.cjs.entry.js +1 -1
- package/dist/cjs/nano-grid_2.cjs.entry.js +3 -3
- package/dist/cjs/nano-hero.cjs.entry.js +2 -2
- package/dist/cjs/nano-icon-button_2.cjs.entry.js +2 -2
- package/dist/cjs/nano-icon-item.cjs.entry.js +1 -1
- package/dist/cjs/nano-icon.cjs.entry.js +2 -2
- package/dist/cjs/nano-in-page-nav.cjs.entry.js +5 -5
- package/dist/cjs/nano-increment.cjs.entry.js +2 -2
- package/dist/cjs/nano-input-otp.cjs.entry.js +2 -2
- package/dist/cjs/nano-intersection-observe.cjs.entry.js +4 -4
- package/dist/cjs/nano-masked-overflow.cjs.entry.js +4 -4
- package/dist/cjs/nano-mdd-item.cjs.entry.js +37 -0
- package/dist/cjs/nano-mdd.cjs.entry.js +57 -0
- package/dist/cjs/nano-menu-drawer.cjs.entry.js +4 -4
- package/dist/cjs/nano-more-less.cjs.entry.js +2 -2
- package/dist/cjs/nano-nav-item.cjs.entry.js +130 -94
- package/dist/cjs/nano-option-box.cjs.entry.js +1 -1
- package/dist/cjs/nano-progress-bar.cjs.entry.js +1 -1
- package/dist/cjs/nano-range.cjs.entry.js +2 -2
- package/dist/cjs/nano-rating.cjs.entry.js +2 -2
- package/dist/cjs/nano-resize-observe.cjs.entry.js +2 -2
- package/dist/cjs/nano-search-result.cjs.entry.js +1 -1
- package/dist/cjs/nano-slide.cjs.entry.js +2 -2
- package/dist/cjs/{nano-slides-BONrNv9H.js → nano-slides-QbssxNUC.js} +5 -5
- package/dist/cjs/nano-slides.cjs.entry.js +3 -3
- package/dist/cjs/nano-sortable.cjs.entry.js +2 -2
- package/dist/cjs/nano-spinner.cjs.entry.js +1 -1
- package/dist/cjs/nano-split-pane.cjs.entry.js +2 -2
- package/dist/cjs/nano-step-accordion.cjs.entry.js +2 -2
- package/dist/cjs/nano-step-breadcrumb.cjs.entry.js +3 -3
- package/dist/cjs/nano-sticker.cjs.entry.js +4 -4
- package/dist/cjs/nano-tab-content.cjs.entry.js +2 -2
- package/dist/cjs/nano-tab-group.cjs.entry.js +4 -4
- package/dist/cjs/nano-tab.cjs.entry.js +2 -2
- package/dist/cjs/nano-table.cjs.entry.js +2 -2
- package/dist/cjs/{renderer-D1xFLJsH.js → renderer-bX7EsIYR.js} +1 -1
- package/dist/cjs/{scroll-C2cNPPnK.js → scroll-DC2gHZby.js} +1 -1
- package/dist/cjs/{slot-D0YPdT3s.js → slot-BRAzxuj_.js} +1 -1
- package/dist/cjs/{tabbable-D60VZB1O.js → tabbable-BXxsn02Z.js} +1 -1
- package/dist/cjs/{table.worker-ClLnKNqW.js → table.worker-CZYVrH2c.js} +6 -6
- package/dist/collection/collection-manifest.json +2 -0
- package/dist/collection/components/global-nav/global-nav.js +27 -12
- package/dist/collection/components/mdd/mdd-item.css +146 -0
- package/dist/collection/components/mdd/mdd-item.js +97 -0
- package/dist/collection/components/mdd/mdd.css +55 -0
- package/dist/collection/components/mdd/mdd.js +101 -0
- package/dist/collection/components/nav-item/nav-item.js +148 -18
- package/dist/components/nano-global-nav.js +27 -12
- package/dist/components/nano-mdd-item.d.ts +11 -0
- package/dist/components/nano-mdd-item.js +69 -0
- package/dist/components/nano-mdd.d.ts +11 -0
- package/dist/components/nano-mdd.js +76 -0
- package/dist/components/nav-item.js +127 -89
- package/dist/esm/{algolia-data-CrdfzSCx.js → algolia-data-D4SY17hw.js} +1 -1
- package/dist/esm/{component-store-Dwo45Eol.js → component-store-DCcnMDT0.js} +1 -1
- package/dist/esm/{constructible-style-8ZZJwMaU.js → constructible-style-BKXXXS9X.js} +1 -1
- package/dist/esm/{dom-QEz8hlsO.js → dom-DiLhOqyz.js} +1 -1
- package/dist/esm/{fade-7nCfOc5y.js → fade-CnvBzIGD.js} +3 -3
- package/dist/esm/{form-control-8eh0RGNw.js → form-control-DYfvQbOQ.js} +1 -1
- package/dist/esm/{fullscreen-h77Lkspo.js → fullscreen-BqihOK-Y.js} +3 -3
- package/dist/esm/{index-CuC61-2g.js → index-BSptZcXI.js} +1 -1
- package/dist/esm/{index-vpnVjPKQ.js → index-RXFO3HxS.js} +13 -5
- package/dist/esm/index.js +4 -4
- package/dist/esm/{lazyload-CGR82usu.js → lazyload-ClpqVun1.js} +3 -3
- package/dist/esm/loader.js +3 -3
- package/dist/esm/{modal-Dk_TZDiu.js → modal-DFUZVWqg.js} +1 -1
- package/dist/esm/nano-accordion.entry.js +3 -3
- package/dist/esm/nano-alert.entry.js +7 -7
- package/dist/esm/nano-algolia-filter.entry.js +4 -4
- package/dist/esm/nano-algolia-pagination.entry.js +2 -2
- package/dist/esm/nano-algolia-results.entry.js +3 -3
- package/dist/esm/nano-algolia.entry.js +5 -5
- package/dist/esm/nano-animation.entry.js +2 -2
- package/dist/esm/nano-avatar_5.entry.js +9 -9
- package/dist/esm/nano-breadcrumb.entry.js +1 -1
- package/dist/esm/nano-card-carousel.entry.js +2 -2
- package/dist/esm/nano-card.entry.js +1 -1
- package/dist/esm/nano-checkbox-group.entry.js +2 -2
- package/dist/esm/nano-checkbox.entry.js +2 -2
- package/dist/esm/nano-collapsible-comparison.entry.js +2 -2
- package/dist/esm/nano-components.js +3 -3
- package/dist/esm/nano-content-links.entry.js +1 -1
- package/dist/esm/nano-cta.entry.js +1 -1
- package/dist/esm/{nano-data-table-HQJQG0Sv.js → nano-data-table-HS1UHCwO.js} +5 -5
- package/dist/esm/nano-data-table.entry.js +6 -6
- package/dist/esm/nano-datalist_3.entry.js +3 -3
- package/dist/esm/nano-date-input.entry.js +2 -2
- package/dist/esm/nano-date-picker_2.entry.js +4 -4
- package/dist/esm/nano-details.entry.js +3 -3
- package/dist/esm/nano-dialog.entry.js +8 -8
- package/dist/esm/nano-dropdown_2.entry.js +5 -5
- package/dist/esm/nano-feature-box.entry.js +1 -1
- package/dist/esm/nano-field-validator.entry.js +3 -3
- package/dist/esm/nano-file-upload.entry.js +2 -2
- package/dist/esm/nano-footer.entry.js +1 -1
- package/dist/esm/nano-global-nav.entry.js +29 -14
- package/dist/esm/nano-grid-item.entry.js +1 -1
- package/dist/esm/nano-grid_2.entry.js +3 -3
- package/dist/esm/nano-hero.entry.js +2 -2
- package/dist/esm/nano-icon-button_2.entry.js +2 -2
- package/dist/esm/nano-icon-item.entry.js +1 -1
- package/dist/esm/nano-icon.entry.js +2 -2
- package/dist/esm/nano-in-page-nav.entry.js +5 -5
- package/dist/esm/nano-increment.entry.js +2 -2
- package/dist/esm/nano-input-otp.entry.js +2 -2
- package/dist/esm/nano-intersection-observe.entry.js +4 -4
- package/dist/esm/nano-masked-overflow.entry.js +4 -4
- package/dist/esm/nano-mdd-item.entry.js +35 -0
- package/dist/esm/nano-mdd.entry.js +55 -0
- package/dist/esm/nano-menu-drawer.entry.js +4 -4
- package/dist/esm/nano-more-less.entry.js +2 -2
- package/dist/esm/nano-nav-item.entry.js +130 -94
- package/dist/esm/nano-option-box.entry.js +1 -1
- package/dist/esm/nano-progress-bar.entry.js +1 -1
- package/dist/esm/nano-range.entry.js +2 -2
- package/dist/esm/nano-rating.entry.js +2 -2
- package/dist/esm/nano-resize-observe.entry.js +2 -2
- package/dist/esm/nano-search-result.entry.js +1 -1
- package/dist/esm/nano-slide.entry.js +2 -2
- package/dist/esm/{nano-slides-CMFKg_gU.js → nano-slides-WDFCFgZL.js} +5 -5
- package/dist/esm/nano-slides.entry.js +3 -3
- package/dist/esm/nano-sortable.entry.js +2 -2
- package/dist/esm/nano-spinner.entry.js +1 -1
- package/dist/esm/nano-split-pane.entry.js +2 -2
- package/dist/esm/nano-step-accordion.entry.js +2 -2
- package/dist/esm/nano-step-breadcrumb.entry.js +3 -3
- package/dist/esm/nano-sticker.entry.js +4 -4
- package/dist/esm/nano-tab-content.entry.js +2 -2
- package/dist/esm/nano-tab-group.entry.js +4 -4
- package/dist/esm/nano-tab.entry.js +2 -2
- package/dist/esm/nano-table.entry.js +2 -2
- package/dist/esm/{renderer-CTaemqrs.js → renderer-B_wACs4w.js} +1 -1
- package/dist/esm/{scroll-Cpis33Lx.js → scroll-CFCUiakV.js} +1 -1
- package/dist/esm/{slot-wHS7-PXA.js → slot-Cj55s-OG.js} +1 -1
- package/dist/esm/{tabbable-CT4-pg7f.js → tabbable-Dwh0pD2q.js} +1 -1
- package/dist/esm/{table.worker--BAXV6ow.js → table.worker-Cg52OK_a.js} +6 -6
- package/dist/nano-components/{algolia-data-CrdfzSCx.js → algolia-data-D4SY17hw.js} +1 -1
- package/dist/nano-components/{component-store-Dwo45Eol.js → component-store-DCcnMDT0.js} +1 -1
- package/dist/nano-components/{constructible-style-8ZZJwMaU.js → constructible-style-BKXXXS9X.js} +1 -1
- package/dist/nano-components/dom-DiLhOqyz.js +4 -0
- package/dist/nano-components/{fade-7nCfOc5y.js → fade-CnvBzIGD.js} +1 -1
- package/dist/nano-components/{form-control-8eh0RGNw.js → form-control-DYfvQbOQ.js} +1 -1
- package/dist/nano-components/{fullscreen-h77Lkspo.js → fullscreen-BqihOK-Y.js} +1 -1
- package/dist/nano-components/index-BSptZcXI.js +4 -0
- package/dist/nano-components/index-RXFO3HxS.js +5 -0
- package/dist/nano-components/index.esm.js +1 -1
- package/dist/nano-components/{lazyload-CGR82usu.js → lazyload-ClpqVun1.js} +1 -1
- package/dist/nano-components/{modal-Dk_TZDiu.js → modal-DFUZVWqg.js} +1 -1
- package/dist/nano-components/nano-accordion.entry.js +1 -1
- package/dist/nano-components/nano-alert.entry.js +1 -1
- package/dist/nano-components/nano-algolia-filter.entry.js +1 -1
- package/dist/nano-components/nano-algolia-pagination.entry.js +1 -1
- package/dist/nano-components/nano-algolia-results.entry.js +1 -1
- package/dist/nano-components/nano-algolia.entry.js +1 -1
- package/dist/nano-components/nano-animation.entry.js +1 -1
- package/dist/nano-components/nano-avatar_5.entry.js +1 -1
- package/dist/nano-components/nano-breadcrumb.entry.js +1 -1
- package/dist/nano-components/nano-card-carousel.entry.js +1 -1
- package/dist/nano-components/nano-card.entry.js +1 -1
- package/dist/nano-components/nano-checkbox-group.entry.js +1 -1
- package/dist/nano-components/nano-checkbox.entry.js +1 -1
- package/dist/nano-components/nano-collapsible-comparison.entry.js +1 -1
- package/dist/nano-components/nano-components.css +30 -105
- package/dist/nano-components/nano-components.esm.js +1 -1
- package/dist/nano-components/nano-content-links.entry.js +1 -1
- package/dist/nano-components/nano-cta.entry.js +1 -1
- package/dist/nano-components/{nano-data-table-HQJQG0Sv.js → nano-data-table-HS1UHCwO.js} +1 -1
- package/dist/nano-components/nano-data-table.entry.js +1 -1
- package/dist/nano-components/nano-datalist_3.entry.js +1 -1
- package/dist/nano-components/nano-date-input.entry.js +1 -1
- package/dist/nano-components/nano-date-picker_2.entry.js +1 -1
- package/dist/nano-components/nano-details.entry.js +1 -1
- package/dist/nano-components/nano-dialog.entry.js +1 -1
- package/dist/nano-components/nano-dropdown_2.entry.js +1 -1
- package/dist/nano-components/nano-feature-box.entry.js +1 -1
- package/dist/nano-components/nano-field-validator.entry.js +1 -1
- package/dist/nano-components/nano-file-upload.entry.js +1 -1
- package/dist/nano-components/nano-footer.entry.js +1 -1
- package/dist/nano-components/nano-global-nav.entry.js +1 -1
- package/dist/nano-components/nano-grid-item.entry.js +1 -1
- package/dist/nano-components/nano-grid_2.entry.js +1 -1
- package/dist/nano-components/nano-hero.entry.js +1 -1
- package/dist/nano-components/nano-icon-button_2.entry.js +1 -1
- package/dist/nano-components/nano-icon-item.entry.js +1 -1
- package/dist/nano-components/nano-icon.entry.js +1 -1
- package/dist/nano-components/nano-in-page-nav.entry.js +1 -1
- package/dist/nano-components/nano-increment.entry.js +1 -1
- package/dist/nano-components/nano-input-otp.entry.js +1 -1
- package/dist/nano-components/nano-intersection-observe.entry.js +1 -1
- package/dist/nano-components/nano-masked-overflow.entry.js +1 -1
- package/dist/nano-components/nano-mdd-item.entry.js +4 -0
- package/dist/nano-components/nano-mdd.entry.js +4 -0
- package/dist/nano-components/nano-menu-drawer.entry.js +1 -1
- package/dist/nano-components/nano-more-less.entry.js +1 -1
- package/dist/nano-components/nano-nav-item.entry.js +1 -1
- package/dist/nano-components/nano-option-box.entry.js +1 -1
- package/dist/nano-components/nano-progress-bar.entry.js +1 -1
- package/dist/nano-components/nano-range.entry.js +1 -1
- package/dist/nano-components/nano-rating.entry.js +1 -1
- package/dist/nano-components/nano-resize-observe.entry.js +1 -1
- package/dist/nano-components/nano-search-result.entry.js +1 -1
- package/dist/nano-components/nano-slide.entry.js +1 -1
- package/dist/nano-components/{nano-slides-CMFKg_gU.js → nano-slides-WDFCFgZL.js} +4 -4
- package/dist/nano-components/nano-slides.entry.js +1 -1
- package/dist/nano-components/nano-sortable.entry.js +1 -1
- package/dist/nano-components/nano-spinner.entry.js +1 -1
- package/dist/nano-components/nano-split-pane.entry.js +1 -1
- package/dist/nano-components/nano-step-accordion.entry.js +1 -1
- package/dist/nano-components/nano-step-breadcrumb.entry.js +1 -1
- package/dist/nano-components/nano-sticker.entry.js +1 -1
- package/dist/nano-components/nano-tab-content.entry.js +1 -1
- package/dist/nano-components/nano-tab-group.entry.js +1 -1
- package/dist/nano-components/nano-tab.entry.js +1 -1
- package/dist/nano-components/nano-table.entry.js +1 -1
- package/dist/nano-components/{renderer-CTaemqrs.js → renderer-B_wACs4w.js} +1 -1
- package/dist/nano-components/{scroll-Cpis33Lx.js → scroll-CFCUiakV.js} +1 -1
- package/dist/nano-components/{slot-wHS7-PXA.js → slot-Cj55s-OG.js} +1 -1
- package/dist/nano-components/{tabbable-CT4-pg7f.js → tabbable-Dwh0pD2q.js} +1 -1
- package/dist/nano-components/{table.worker--BAXV6ow.js → table.worker-Cg52OK_a.js} +1 -1
- package/dist/style/components.css +1 -1
- package/dist/style/components.css.map +1 -1
- package/dist/style/nano.css +1 -1
- package/dist/style/nano.css.map +1 -1
- package/dist/types/components/global-nav/global-nav.d.ts +1 -0
- package/dist/types/components/mdd/mdd-item.d.ts +23 -0
- package/dist/types/components/mdd/mdd.d.ts +24 -0
- package/dist/types/components/nav-item/nav-item.d.ts +15 -0
- package/dist/types/components.d.ts +114 -0
- package/docs-json.json +238 -1
- package/docs-vscode.json +34 -0
- package/hydrate/index.js +275 -101
- package/hydrate/index.mjs +275 -101
- package/package.json +2 -2
- package/dist/nano-components/dom-QEz8hlsO.js +0 -4
- package/dist/nano-components/index-CuC61-2g.js +0 -4
- 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
|
-
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
530
|
+
} }, h("div", { key: '40ab68a79d28c8ace97c06f3b1d1222e1c21cf0e', class: {
|
|
516
531
|
gn: true,
|
|
517
532
|
'gn__search-open': this.searchBarShown,
|
|
518
|
-
} }, h("nano-drawer", { key: '
|
|
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: '
|
|
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: '
|
|
523
|
-
(!!this.searchIndices.length && (h("nano-dropdown", { key: '
|
|
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: '
|
|
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: '
|
|
536
|
-
])))))), h("div", { key: '
|
|
537
|
-
h("nano-icon-button", { key: '
|
|
538
|
-
!!this.cartCount && (h("nano-badge", { key: '
|
|
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: '
|
|
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 };
|