@nanoporetech-digital/components 4.3.1 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/nano-components.cjs.js +1 -1
  4. package/dist/cjs/nano-overflow-nav.cjs.entry.js +49 -24
  5. package/dist/cjs/nano-overflow-nav.cjs.entry.js.map +1 -1
  6. package/dist/cjs/{nano-table-b59537e5.js → nano-table-80866352.js} +2 -2
  7. package/dist/cjs/{nano-table-b59537e5.js.map → nano-table-80866352.js.map} +1 -1
  8. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  9. package/dist/cjs/{table.worker-590fb88b.js → table.worker-33992a3a.js} +2 -2
  10. package/dist/cjs/table.worker-33992a3a.js.map +1 -0
  11. package/dist/collection/components/overflow-nav/overflow-nav.css +3 -0
  12. package/dist/collection/components/overflow-nav/overflow-nav.js +90 -35
  13. package/dist/collection/components/overflow-nav/overflow-nav.js.map +1 -1
  14. package/dist/components/nano-overflow-nav.js +52 -25
  15. package/dist/components/nano-overflow-nav.js.map +1 -1
  16. package/dist/esm/loader.js +1 -1
  17. package/dist/esm/nano-components.js +1 -1
  18. package/dist/esm/nano-overflow-nav.entry.js +49 -24
  19. package/dist/esm/nano-overflow-nav.entry.js.map +1 -1
  20. package/dist/esm/{nano-table-b20d3a48.js → nano-table-fda0efef.js} +2 -2
  21. package/dist/esm/{nano-table-b20d3a48.js.map → nano-table-fda0efef.js.map} +1 -1
  22. package/dist/esm/nano-table.entry.js +1 -1
  23. package/dist/esm/{table.worker-9cfa17ca.js → table.worker-2fd6f263.js} +2 -2
  24. package/dist/esm/table.worker-2fd6f263.js.map +1 -0
  25. package/dist/nano-components/nano-components.esm.js +1 -1
  26. package/dist/nano-components/nano-components.esm.js.map +1 -1
  27. package/dist/nano-components/p-3a761d77.entry.js +5 -0
  28. package/dist/nano-components/p-3a761d77.entry.js.map +1 -0
  29. package/dist/nano-components/p-69bb4ec0.js +5 -0
  30. package/dist/nano-components/{p-e3ee4c68.entry.js → p-9e6b78df.entry.js} +2 -2
  31. package/dist/nano-components/{p-aeaa2ed9.js → p-a1bfd5c9.js} +2 -2
  32. package/dist/types/components/overflow-nav/overflow-nav.d.ts +16 -6
  33. package/dist/types/components.d.ts +22 -12
  34. package/docs-json.json +38 -14
  35. package/hydrate/index.js +52 -25
  36. package/package.json +2 -2
  37. package/dist/cjs/table.worker-590fb88b.js.map +0 -1
  38. package/dist/esm/table.worker-9cfa17ca.js.map +0 -1
  39. package/dist/nano-components/p-556b6e8a.entry.js +0 -5
  40. package/dist/nano-components/p-556b6e8a.entry.js.map +0 -1
  41. package/dist/nano-components/p-b5805a8c.js +0 -5
  42. /package/dist/nano-components/{p-b5805a8c.js.map → p-69bb4ec0.js.map} +0 -0
  43. /package/dist/nano-components/{p-e3ee4c68.entry.js.map → p-9e6b78df.entry.js.map} +0 -0
  44. /package/dist/nano-components/{p-aeaa2ed9.js.map → p-a1bfd5c9.js.map} +0 -0
@@ -1633,22 +1633,25 @@ export namespace Components {
1633
1633
  interface NanoOverflowNav {
1634
1634
  /**
1635
1635
  * A function called when an item becomes 'active' (via click or keyboard)
1636
- * @param item
1636
+ * @param item - html element currently being assessed
1637
+ * @param _index - the index of the html element currently being assessed
1637
1638
  * @returns void
1638
1639
  */
1639
- "activeHandler": (item: HTMLElement) => void;
1640
+ "activeHandler": (item: HTMLElement, _index: number) => void;
1640
1641
  /**
1641
1642
  * A function called when an item becomes 'inactive' (because another item was made active)
1642
- * @param item
1643
+ * @param item - html element currently being assessed
1644
+ * @param _index - the index of the html element currently being assessed
1643
1645
  * @returns void
1644
1646
  */
1645
- "inActiveHandler": (item: HTMLElement) => void;
1647
+ "inActiveHandler": (item: HTMLElement, _index: number) => void;
1646
1648
  /**
1647
1649
  * A function called to assess an initial, active item
1648
- * @param item
1650
+ * @param item - html element currently being assessed
1651
+ * @param _index - the index of the html element currently being assessed
1649
1652
  * @returns void
1650
1653
  */
1651
- "isActiveHandler": (item: HTMLElement) => boolean;
1654
+ "isActiveHandler": (item: HTMLElement, _index: number) => boolean;
1652
1655
  /**
1653
1656
  * The flex direction of the element
1654
1657
  */
@@ -1657,6 +1660,10 @@ export namespace Components {
1657
1660
  * Disables the scroll arrow buttons that appear when content overflows
1658
1661
  */
1659
1662
  "scrollControls": boolean;
1663
+ /**
1664
+ * Sync up the view to the active item. Use this when the active item changes outside of this component.
1665
+ */
1666
+ "syncActiveItem": () => Promise<void>;
1660
1667
  }
1661
1668
  /**
1662
1669
  * Used to show the status of an ongoing operation.
@@ -4848,22 +4855,25 @@ declare namespace LocalJSX {
4848
4855
  interface NanoOverflowNav {
4849
4856
  /**
4850
4857
  * A function called when an item becomes 'active' (via click or keyboard)
4851
- * @param item
4858
+ * @param item - html element currently being assessed
4859
+ * @param _index - the index of the html element currently being assessed
4852
4860
  * @returns void
4853
4861
  */
4854
- "activeHandler"?: (item: HTMLElement) => void;
4862
+ "activeHandler"?: (item: HTMLElement, _index: number) => void;
4855
4863
  /**
4856
4864
  * A function called when an item becomes 'inactive' (because another item was made active)
4857
- * @param item
4865
+ * @param item - html element currently being assessed
4866
+ * @param _index - the index of the html element currently being assessed
4858
4867
  * @returns void
4859
4868
  */
4860
- "inActiveHandler"?: (item: HTMLElement) => void;
4869
+ "inActiveHandler"?: (item: HTMLElement, _index: number) => void;
4861
4870
  /**
4862
4871
  * A function called to assess an initial, active item
4863
- * @param item
4872
+ * @param item - html element currently being assessed
4873
+ * @param _index - the index of the html element currently being assessed
4864
4874
  * @returns void
4865
4875
  */
4866
- "isActiveHandler"?: (item: HTMLElement) => boolean;
4876
+ "isActiveHandler"?: (item: HTMLElement, _index: number) => boolean;
4867
4877
  /**
4868
4878
  * The flex direction of the element
4869
4879
  */
package/docs-json.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2023-03-08T23:39:04",
2
+ "timestamp": "2023-03-10T11:01:02",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "2.23.0",
@@ -10906,24 +10906,28 @@
10906
10906
  "props": [
10907
10907
  {
10908
10908
  "name": "activeHandler",
10909
- "type": "(item: HTMLElement) => void",
10909
+ "type": "(item: HTMLElement, _index: number) => void",
10910
10910
  "mutable": false,
10911
10911
  "reflectToAttr": false,
10912
10912
  "docs": "A function called when an item becomes 'active' (via click or keyboard)",
10913
10913
  "docsTags": [
10914
10914
  {
10915
10915
  "name": "param",
10916
- "text": "item"
10916
+ "text": "item - html element currently being assessed"
10917
+ },
10918
+ {
10919
+ "name": "param",
10920
+ "text": "_index - the index of the html element currently being assessed"
10917
10921
  },
10918
10922
  {
10919
10923
  "name": "returns",
10920
10924
  "text": "void"
10921
10925
  }
10922
10926
  ],
10923
- "default": "(item: HTMLElement) => item.classList.add('active')",
10927
+ "default": "(item: HTMLElement, _index: number) =>\n item.classList.add('active')",
10924
10928
  "values": [
10925
10929
  {
10926
- "type": "(item: HTMLElement) => void"
10930
+ "type": "(item: HTMLElement, _index: number) => void"
10927
10931
  }
10928
10932
  ],
10929
10933
  "optional": false,
@@ -10933,24 +10937,28 @@
10933
10937
  },
10934
10938
  {
10935
10939
  "name": "inActiveHandler",
10936
- "type": "(item: HTMLElement) => void",
10940
+ "type": "(item: HTMLElement, _index: number) => void",
10937
10941
  "mutable": false,
10938
10942
  "reflectToAttr": false,
10939
10943
  "docs": "A function called when an item becomes 'inactive'\n(because another item was made active)",
10940
10944
  "docsTags": [
10941
10945
  {
10942
10946
  "name": "param",
10943
- "text": "item"
10947
+ "text": "item - html element currently being assessed"
10948
+ },
10949
+ {
10950
+ "name": "param",
10951
+ "text": "_index - the index of the html element currently being assessed"
10944
10952
  },
10945
10953
  {
10946
10954
  "name": "returns",
10947
10955
  "text": "void"
10948
10956
  }
10949
10957
  ],
10950
- "default": "(item: HTMLElement) =>\n item.classList.remove('active')",
10958
+ "default": "(item: HTMLElement, _index: number) =>\n item.classList.remove('active')",
10951
10959
  "values": [
10952
10960
  {
10953
- "type": "(item: HTMLElement) => void"
10961
+ "type": "(item: HTMLElement, _index: number) => void"
10954
10962
  }
10955
10963
  ],
10956
10964
  "optional": false,
@@ -10960,24 +10968,28 @@
10960
10968
  },
10961
10969
  {
10962
10970
  "name": "isActiveHandler",
10963
- "type": "(item: HTMLElement) => boolean",
10971
+ "type": "(item: HTMLElement, _index: number) => boolean",
10964
10972
  "mutable": false,
10965
10973
  "reflectToAttr": false,
10966
10974
  "docs": "A function called to assess an initial, active item",
10967
10975
  "docsTags": [
10968
10976
  {
10969
10977
  "name": "param",
10970
- "text": "item"
10978
+ "text": "item - html element currently being assessed"
10979
+ },
10980
+ {
10981
+ "name": "param",
10982
+ "text": "_index - the index of the html element currently being assessed"
10971
10983
  },
10972
10984
  {
10973
10985
  "name": "returns",
10974
10986
  "text": "void"
10975
10987
  }
10976
10988
  ],
10977
- "default": "(item: HTMLElement) =>\n item.classList.contains('active')",
10989
+ "default": "(item: HTMLElement, _index: number) =>\n item.classList.contains('active')",
10978
10990
  "values": [
10979
10991
  {
10980
- "type": "(item: HTMLElement) => boolean"
10992
+ "type": "(item: HTMLElement, _index: number) => boolean"
10981
10993
  }
10982
10994
  ],
10983
10995
  "optional": false,
@@ -11029,7 +11041,19 @@
11029
11041
  "setter": false
11030
11042
  }
11031
11043
  ],
11032
- "methods": [],
11044
+ "methods": [
11045
+ {
11046
+ "name": "syncActiveItem",
11047
+ "returns": {
11048
+ "type": "Promise<void>",
11049
+ "docs": ""
11050
+ },
11051
+ "signature": "syncActiveItem() => Promise<void>",
11052
+ "parameters": [],
11053
+ "docs": "Sync up the view to the active item.\nUse this when the active item changes outside of this component.",
11054
+ "docsTags": []
11055
+ }
11056
+ ],
11033
11057
  "events": [],
11034
11058
  "listeners": [],
11035
11059
  "styles": [
package/hydrate/index.js CHANGED
@@ -21109,7 +21109,7 @@ class Option {
21109
21109
  }; }
21110
21110
  }
21111
21111
 
21112
- const overflowNavCss = "/*!@:host*/.sc-nano-overflow-nav-h{box-sizing:border-box}/*!@*,\n*::before,\n*::after*/*.sc-nano-overflow-nav,*.sc-nano-overflow-nav::before,*.sc-nano-overflow-nav::after{box-sizing:border-box}/*!@[hidden]*/[hidden].sc-nano-overflow-nav{display:none !important}/*!@:host*/.sc-nano-overflow-nav-h{--indicator-transition:var(--nano-transition-fast, 0.3s);--indicator-color:#90c6e7;--indicator-size:0;--indicator-track-color:#e4e6e8;--indicator-track-size:var(--indicator-size);--scroll-btn-color:\"currentColor\";--fade-size:1.75rem;--fade-transparency:0;--padding:var(--fade-size);position:relative;z-index:var(--nano-layer-index-raised, 5)}/*!@:host([orientation=horizontal])*/[orientation=horizontal].sc-nano-overflow-nav-h{display:block}/*!@:host([orientation=vertical])*/[orientation=vertical].sc-nano-overflow-nav-h{display:flex}/*!@.onav__scroller*/.onav__scroller.sc-nano-overflow-nav{scrollbar-width:none;-ms-overflow-style:none;display:flex;transition:var(--nano-transition-medium, 0.5s) ease;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=\");-webkit-mask-size:calc(100% + var(--fade-size) * 4);mask-size:calc(100% + var(--fade-size) * 4);-webkit-mask-position:calc(var(--fade-size) * -2);mask-position:calc(var(--fade-size) * -2)}/*!@.onav__scroller::-webkit-scrollbar*/.onav__scroller.sc-nano-overflow-nav::-webkit-scrollbar{inline-size:0;block-size:0}/*!@.onav__scroller::after*/.onav__scroller.sc-nano-overflow-nav::after{content:\" \";line-height:1;flex:0 0 auto;display:block}/*!@.onav--has-scroll-controls-start .onav__scroller*/.onav--has-scroll-controls-start.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav{-webkit-mask-position:0;mask-position:0;-webkit-mask-size:calc(100% + var(--fade-size) * 2);mask-size:calc(100% + var(--fade-size) * 2)}/*!@.onav--has-scroll-controls-end .onav__scroller*/.onav--has-scroll-controls-end.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav{-webkit-mask-position:calc(var(--fade-size) * -1);mask-position:calc(var(--fade-size) * -1);-webkit-mask-size:calc(100% + var(--fade-size));mask-size:calc(100% + var(--fade-size))}/*!@.onav--has-scroll-controls-start.onav--has-scroll-controls-end .onav__scroller*/.onav--has-scroll-controls-start.onav--has-scroll-controls-end.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav{-webkit-mask-size:100%;mask-size:100%;-webkit-mask-position:0;mask-position:0}/*!@.onav__items*/.onav__items.sc-nano-overflow-nav{flex:1 1 auto;position:relative;width:auto;flex-wrap:nowrap;display:flex}/*!@.onav__items::before*/.onav__items.sc-nano-overflow-nav::before{content:\"\";background:var(--indicator-track-color);display:block;position:absolute;z-index:1}/*!@.onav__active-indicator*/.onav__active-indicator.sc-nano-overflow-nav{position:absolute;z-index:10;transition:var(--indicator-transition) transform ease, var(--indicator-transition) width ease, var(--indicator-transition) height ease}/*!@.onav nano-icon-button.onav__scroll-button*/.onav.sc-nano-overflow-nav nano-icon-button.onav__scroll-button.sc-nano-overflow-nav{--nano-color-base:var(--scroll-btn-color);display:flex;align-items:center;justify-content:center;position:absolute;border:unset;z-index:2;transition:var(--nano-transition-fast, 0.3s) ease opacity;opacity:0;color:var(--scroll-btn-color);pointer-events:none}/*!@.onav nano-icon-button.onav__scroll-button:focus*/.onav.sc-nano-overflow-nav nano-icon-button.onav__scroll-button.sc-nano-overflow-nav:focus{outline:none}/*!@.onav nano-icon-button.onav__scroll-button.is-shown*/.onav.sc-nano-overflow-nav nano-icon-button.onav__scroll-button.is-shown.sc-nano-overflow-nav{opacity:1;pointer-events:all}/*!@.onav nano-icon-button.onav__scroll-button:focus-visible*/.onav.sc-nano-overflow-nav nano-icon-button.onav__scroll-button.sc-nano-overflow-nav:focus-visible{box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8))) inset}/*!@.onav--horizontal .onav__scroller*/.onav--horizontal.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav{overflow-x:auto;overflow-y:hidden;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;padding-inline:var(--padding);-webkit-mask-image:linear-gradient(to left, rgb(0 0 0/var(--fade-transparency)) 0, rgb(0 0 0/var(--fade-transparency)) var(--fade-size), black calc(var(--fade-size) * 2), black calc(100% - var(--fade-size) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--fade-size)), rgb(0 0 0/var(--fade-transparency)));mask-image:linear-gradient(to left, rgb(0 0 0/var(--fade-transparency)) 0, rgb(0 0 0/var(--fade-transparency)) var(--fade-size), black calc(var(--fade-size) * 2), black calc(100% - var(--fade-size) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--fade-size)), rgb(0 0 0/var(--fade-transparency)))}/*!@.onav--horizontal .onav__scroller::after*/.onav--horizontal.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav::after{padding-inline:0 var(--fade-size);padding-block:0 0}/*!@.onav--horizontal.onav--has-scroll-controls .onav__scroller*/.onav--horizontal.onav--has-scroll-controls.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav{padding-inline:var(--fade-size) 0;-webkit-padding-before:0;padding-block-start:0;-webkit-padding-after:0;padding-block-end:0}/*!@.onav--horizontal .onav__items*/.onav--horizontal.sc-nano-overflow-nav .onav__items.sc-nano-overflow-nav{flex-direction:row}/*!@.onav--horizontal .onav__items::before*/.onav--horizontal.sc-nano-overflow-nav .onav__items.sc-nano-overflow-nav::before{content:\"\";width:100%;height:var(--indicator-track-size);inset-block-end:0}/*!@.onav--horizontal .onav__active-indicator*/.onav--horizontal.sc-nano-overflow-nav .onav__active-indicator.sc-nano-overflow-nav{inset-block-end:0;-webkit-border-after:solid var(--indicator-size) var(--indicator-color);border-block-end:solid var(--indicator-size) var(--indicator-color)}/*!@.onav--horizontal .onav__scroll-button*/.onav--horizontal.sc-nano-overflow-nav .onav__scroll-button.sc-nano-overflow-nav{inset-block:0}/*!@.onav--horizontal .onav__scroll-button--start*/.onav--horizontal.sc-nano-overflow-nav .onav__scroll-button--start.sc-nano-overflow-nav{inset-inline-start:0}/*!@.onav--horizontal .onav__scroll-button--end*/.onav--horizontal.sc-nano-overflow-nav .onav__scroll-button--end.sc-nano-overflow-nav{inset-inline-end:0}/*!@.onav--vertical*/.onav--vertical.sc-nano-overflow-nav{width:100%}/*!@.onav--vertical .onav__nav*/.onav--vertical.sc-nano-overflow-nav .onav__nav.sc-nano-overflow-nav{max-height:100%;display:flex}/*!@.onav--vertical .onav__scroller*/.onav--vertical.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav{width:100%;overflow-y:auto;overflow-x:hidden;flex-direction:column;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;padding-block:var(--padding);-webkit-mask-image:linear-gradient(to top, rgb(0 0 0/var(--fade-transparency)) 0, rgb(0 0 0/var(--fade-transparency)) var(--fade-size), black calc(var(--fade-size) * 2), black calc(100% - var(--fade-size) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--fade-size)), rgb(0 0 0/var(--fade-transparency)));mask-image:linear-gradient(to top, rgb(0 0 0/var(--fade-transparency)) 0, rgb(0 0 0/var(--fade-transparency)) var(--fade-size), black calc(var(--fade-size) * 2), black calc(100% - var(--fade-size) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--fade-size)), rgb(0 0 0/var(--fade-transparency)));padding-inline:0 0;-webkit-padding-before:calc(var(--fade-size) + 12px);padding-block-start:calc(var(--fade-size) + 12px);-webkit-padding-after:var(--fade-size);padding-block-end:var(--fade-size)}/*!@.onav--vertical .onav__scroller::after*/.onav--vertical.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav::after{padding-inline:0 0;padding-block:0 var(--fade-size)}/*!@.onav--vertical .onav__items*/.onav--vertical.sc-nano-overflow-nav .onav__items.sc-nano-overflow-nav{flex-direction:column;width:-moz-fit-content;width:fit-content}/*!@.onav--vertical .onav__items::before*/.onav--vertical.sc-nano-overflow-nav .onav__items.sc-nano-overflow-nav::before{content:\"\";height:100%;width:var(--indicator-track-size);inset-inline-start:0}/*!@.onav--vertical .onav__active-indicator*/.onav--vertical.sc-nano-overflow-nav .onav__active-indicator.sc-nano-overflow-nav{inset-inline-start:0;-webkit-border-start:solid var(--indicator-size) var(--indicator-color);border-inline-start:solid var(--indicator-size) var(--indicator-color)}/*!@.onav--vertical .onav__scroll-button*/.onav--vertical.sc-nano-overflow-nav .onav__scroll-button.sc-nano-overflow-nav{inset-inline:0}/*!@.onav--vertical .onav__scroll-button--start*/.onav--vertical.sc-nano-overflow-nav .onav__scroll-button--start.sc-nano-overflow-nav{inset-block-start:0}/*!@.onav--vertical .onav__scroll-button--end*/.onav--vertical.sc-nano-overflow-nav .onav__scroll-button--end.sc-nano-overflow-nav{inset-block-end:0}";
21112
+ const overflowNavCss = "/*!@:host*/.sc-nano-overflow-nav-h{box-sizing:border-box}/*!@*,\n*::before,\n*::after*/*.sc-nano-overflow-nav,*.sc-nano-overflow-nav::before,*.sc-nano-overflow-nav::after{box-sizing:border-box}/*!@[hidden]*/[hidden].sc-nano-overflow-nav{display:none !important}/*!@:host*/.sc-nano-overflow-nav-h{--indicator-transition:var(--nano-transition-fast, 0.3s);--indicator-color:#90c6e7;--indicator-size:0;--indicator-track-color:#e4e6e8;--indicator-track-size:var(--indicator-size);--scroll-btn-color:\"currentColor\";--fade-size:1.75rem;--fade-transparency:0;--padding:var(--fade-size);position:relative;z-index:var(--nano-layer-index-raised, 5)}/*!@:host([orientation=horizontal])*/[orientation=horizontal].sc-nano-overflow-nav-h{display:block}/*!@:host([orientation=vertical])*/[orientation=vertical].sc-nano-overflow-nav-h{display:flex}/*!@.onav--no-transitions **/.onav--no-transitions.sc-nano-overflow-nav *.sc-nano-overflow-nav{transition-duration:0s !important}/*!@.onav__scroller*/.onav__scroller.sc-nano-overflow-nav{scrollbar-width:none;-ms-overflow-style:none;display:flex;transition:var(--nano-transition-medium, 0.5s) ease;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=\");-webkit-mask-size:calc(100% + var(--fade-size) * 4);mask-size:calc(100% + var(--fade-size) * 4);-webkit-mask-position:calc(var(--fade-size) * -2);mask-position:calc(var(--fade-size) * -2)}/*!@.onav__scroller::-webkit-scrollbar*/.onav__scroller.sc-nano-overflow-nav::-webkit-scrollbar{inline-size:0;block-size:0}/*!@.onav__scroller::after*/.onav__scroller.sc-nano-overflow-nav::after{content:\" \";line-height:1;flex:0 0 auto;display:block}/*!@.onav--has-scroll-controls-start .onav__scroller*/.onav--has-scroll-controls-start.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav{-webkit-mask-position:0;mask-position:0;-webkit-mask-size:calc(100% + var(--fade-size) * 2);mask-size:calc(100% + var(--fade-size) * 2)}/*!@.onav--has-scroll-controls-end .onav__scroller*/.onav--has-scroll-controls-end.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav{-webkit-mask-position:calc(var(--fade-size) * -1);mask-position:calc(var(--fade-size) * -1);-webkit-mask-size:calc(100% + var(--fade-size));mask-size:calc(100% + var(--fade-size))}/*!@.onav--has-scroll-controls-start.onav--has-scroll-controls-end .onav__scroller*/.onav--has-scroll-controls-start.onav--has-scroll-controls-end.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav{-webkit-mask-size:100%;mask-size:100%;-webkit-mask-position:0;mask-position:0}/*!@.onav__items*/.onav__items.sc-nano-overflow-nav{flex:1 1 auto;position:relative;width:auto;flex-wrap:nowrap;display:flex}/*!@.onav__items::before*/.onav__items.sc-nano-overflow-nav::before{content:\"\";background:var(--indicator-track-color);display:block;position:absolute;z-index:1}/*!@.onav__active-indicator*/.onav__active-indicator.sc-nano-overflow-nav{position:absolute;z-index:10;transition:var(--indicator-transition) transform ease, var(--indicator-transition) width ease, var(--indicator-transition) height ease}/*!@.onav nano-icon-button.onav__scroll-button*/.onav.sc-nano-overflow-nav nano-icon-button.onav__scroll-button.sc-nano-overflow-nav{--nano-color-base:var(--scroll-btn-color);display:flex;align-items:center;justify-content:center;position:absolute;border:unset;z-index:2;transition:var(--nano-transition-fast, 0.3s) ease opacity;opacity:0;color:var(--scroll-btn-color);pointer-events:none}/*!@.onav nano-icon-button.onav__scroll-button:focus*/.onav.sc-nano-overflow-nav nano-icon-button.onav__scroll-button.sc-nano-overflow-nav:focus{outline:none}/*!@.onav nano-icon-button.onav__scroll-button.is-shown*/.onav.sc-nano-overflow-nav nano-icon-button.onav__scroll-button.is-shown.sc-nano-overflow-nav{opacity:1;pointer-events:all}/*!@.onav nano-icon-button.onav__scroll-button:focus-visible*/.onav.sc-nano-overflow-nav nano-icon-button.onav__scroll-button.sc-nano-overflow-nav:focus-visible{box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8))) inset}/*!@.onav--horizontal .onav__scroller*/.onav--horizontal.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav{overflow-x:auto;overflow-y:hidden;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;padding-inline:var(--padding);-webkit-mask-image:linear-gradient(to left, rgb(0 0 0/var(--fade-transparency)) 0, rgb(0 0 0/var(--fade-transparency)) var(--fade-size), black calc(var(--fade-size) * 2), black calc(100% - var(--fade-size) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--fade-size)), rgb(0 0 0/var(--fade-transparency)));mask-image:linear-gradient(to left, rgb(0 0 0/var(--fade-transparency)) 0, rgb(0 0 0/var(--fade-transparency)) var(--fade-size), black calc(var(--fade-size) * 2), black calc(100% - var(--fade-size) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--fade-size)), rgb(0 0 0/var(--fade-transparency)))}/*!@.onav--horizontal .onav__scroller::after*/.onav--horizontal.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav::after{padding-inline:0 var(--fade-size);padding-block:0 0}/*!@.onav--horizontal.onav--has-scroll-controls .onav__scroller*/.onav--horizontal.onav--has-scroll-controls.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav{padding-inline:var(--fade-size) 0;-webkit-padding-before:0;padding-block-start:0;-webkit-padding-after:0;padding-block-end:0}/*!@.onav--horizontal .onav__items*/.onav--horizontal.sc-nano-overflow-nav .onav__items.sc-nano-overflow-nav{flex-direction:row}/*!@.onav--horizontal .onav__items::before*/.onav--horizontal.sc-nano-overflow-nav .onav__items.sc-nano-overflow-nav::before{content:\"\";width:100%;height:var(--indicator-track-size);inset-block-end:0}/*!@.onav--horizontal .onav__active-indicator*/.onav--horizontal.sc-nano-overflow-nav .onav__active-indicator.sc-nano-overflow-nav{inset-block-end:0;-webkit-border-after:solid var(--indicator-size) var(--indicator-color);border-block-end:solid var(--indicator-size) var(--indicator-color)}/*!@.onav--horizontal .onav__scroll-button*/.onav--horizontal.sc-nano-overflow-nav .onav__scroll-button.sc-nano-overflow-nav{inset-block:0}/*!@.onav--horizontal .onav__scroll-button--start*/.onav--horizontal.sc-nano-overflow-nav .onav__scroll-button--start.sc-nano-overflow-nav{inset-inline-start:0}/*!@.onav--horizontal .onav__scroll-button--end*/.onav--horizontal.sc-nano-overflow-nav .onav__scroll-button--end.sc-nano-overflow-nav{inset-inline-end:0}/*!@.onav--vertical*/.onav--vertical.sc-nano-overflow-nav{width:100%}/*!@.onav--vertical .onav__nav*/.onav--vertical.sc-nano-overflow-nav .onav__nav.sc-nano-overflow-nav{max-height:100%;display:flex}/*!@.onav--vertical .onav__scroller*/.onav--vertical.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav{width:100%;overflow-y:auto;overflow-x:hidden;flex-direction:column;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;padding-block:var(--padding);-webkit-mask-image:linear-gradient(to top, rgb(0 0 0/var(--fade-transparency)) 0, rgb(0 0 0/var(--fade-transparency)) var(--fade-size), black calc(var(--fade-size) * 2), black calc(100% - var(--fade-size) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--fade-size)), rgb(0 0 0/var(--fade-transparency)));mask-image:linear-gradient(to top, rgb(0 0 0/var(--fade-transparency)) 0, rgb(0 0 0/var(--fade-transparency)) var(--fade-size), black calc(var(--fade-size) * 2), black calc(100% - var(--fade-size) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--fade-size)), rgb(0 0 0/var(--fade-transparency)));padding-inline:0 0;-webkit-padding-before:calc(var(--fade-size) + 12px);padding-block-start:calc(var(--fade-size) + 12px);-webkit-padding-after:var(--fade-size);padding-block-end:var(--fade-size)}/*!@.onav--vertical .onav__scroller::after*/.onav--vertical.sc-nano-overflow-nav .onav__scroller.sc-nano-overflow-nav::after{padding-inline:0 0;padding-block:0 var(--fade-size)}/*!@.onav--vertical .onav__items*/.onav--vertical.sc-nano-overflow-nav .onav__items.sc-nano-overflow-nav{flex-direction:column;width:-moz-fit-content;width:fit-content}/*!@.onav--vertical .onav__items::before*/.onav--vertical.sc-nano-overflow-nav .onav__items.sc-nano-overflow-nav::before{content:\"\";height:100%;width:var(--indicator-track-size);inset-inline-start:0}/*!@.onav--vertical .onav__active-indicator*/.onav--vertical.sc-nano-overflow-nav .onav__active-indicator.sc-nano-overflow-nav{inset-inline-start:0;-webkit-border-start:solid var(--indicator-size) var(--indicator-color);border-inline-start:solid var(--indicator-size) var(--indicator-color)}/*!@.onav--vertical .onav__scroll-button*/.onav--vertical.sc-nano-overflow-nav .onav__scroll-button.sc-nano-overflow-nav{inset-inline:0}/*!@.onav--vertical .onav__scroll-button--start*/.onav--vertical.sc-nano-overflow-nav .onav__scroll-button--start.sc-nano-overflow-nav{inset-block-start:0}/*!@.onav--vertical .onav__scroll-button--end*/.onav--vertical.sc-nano-overflow-nav .onav__scroll-button--end.sc-nano-overflow-nav{inset-block-end:0}";
21113
21113
 
21114
21114
  /**
21115
21115
  * Primarily used to display navigational items that may not fit on smaller screens.
@@ -21130,12 +21130,21 @@ const overflowNavCss = "/*!@:host*/.sc-nano-overflow-nav-h{box-sizing:border-box
21130
21130
  */
21131
21131
  class OverflowNav {
21132
21132
  watchIsActiveHandler() {
21133
- this.activeItem = this.allActiveItems.find((el) => this.isActiveHandler(el));
21134
- this.recalculatePositions(true);
21133
+ this.instantReCalc = true;
21134
+ this.activeItem = this.allActiveItems.find((el, i) => this.isActiveHandler(el, i));
21135
+ setTimeout(() => (this.instantReCalc = false), 300);
21136
+ }
21137
+ /**
21138
+ * Sync up the view to the active item.
21139
+ * Use this when the active item changes outside of this component.
21140
+ */
21141
+ async syncActiveItem() {
21142
+ this.activeItem = this.allActiveItems.find((el, i) => this.isActiveHandler(el, i));
21135
21143
  }
21136
21144
  // private state
21137
21145
  constructor(hostRef) {
21138
21146
  registerInstance(this, hostRef);
21147
+ this.mutationObservers = new WeakMap();
21139
21148
  this.updateScrollControls = () => {
21140
21149
  if (!this.nav)
21141
21150
  return;
@@ -21192,10 +21201,22 @@ class OverflowNav {
21192
21201
  this.slotChangeHandler = () => {
21193
21202
  if (this.allActiveItems.length < 2)
21194
21203
  return;
21195
- const item = this.allActiveItems.find((el) => this.isActiveHandler(el));
21204
+ const item = this.allActiveItems.find((el, i) => this.isActiveHandler(el, i));
21196
21205
  if (item)
21197
21206
  this.activeItem = item;
21198
21207
  this.recalculatePositions();
21208
+ /** maintain a weakmap of mutation observers to maintain item / indicator position on all changes. */
21209
+ this.allActiveItems.forEach((item) => {
21210
+ if (this.mutationObservers.get(item))
21211
+ return;
21212
+ const mo = new MutationObserver(() => this.syncActiveItemIndicator());
21213
+ mo.observe(item, {
21214
+ characterData: true,
21215
+ childList: true,
21216
+ subtree: true,
21217
+ });
21218
+ this.mutationObservers.set(item, mo);
21219
+ });
21199
21220
  };
21200
21221
  this.handleClick = (event) => {
21201
21222
  if (this.allActiveItems.length < 2)
@@ -21216,20 +21237,21 @@ class OverflowNav {
21216
21237
  this.activeItem = foundItem;
21217
21238
  }
21218
21239
  };
21219
- this.recalculatePositions = (init) => {
21240
+ this.recalculatePositions = () => {
21220
21241
  this.updateScrollControls();
21221
- this.syncActiveItemIndicator(init);
21222
- this.scrollToActiveItem(init);
21242
+ this.syncActiveItemIndicator();
21243
+ this.scrollToActiveItem();
21223
21244
  };
21224
21245
  this.scrollControls = true;
21225
21246
  this.orientation = 'horizontal';
21226
- this.activeHandler = (item) => item.classList.add('active');
21227
- this.inActiveHandler = (item) => item.classList.remove('active');
21228
- this.isActiveHandler = (item) => item.classList.contains('active');
21247
+ this.activeHandler = (item, _index) => item.classList.add('active');
21248
+ this.inActiveHandler = (item, _index) => item.classList.remove('active');
21249
+ this.isActiveHandler = (item, _index) => item.classList.contains('active');
21250
+ this.instantReCalc = false;
21229
21251
  this.hasScrollControls = false;
21230
21252
  this.hideControlEnd = true;
21231
21253
  this.hideControlStart = true;
21232
- this.recalculatePositions = debounce$2(this.recalculatePositions, 50);
21254
+ this.recalculatePositions = debounce$2(this.recalculatePositions.bind(this), 80);
21233
21255
  }
21234
21256
  get scrollProp() {
21235
21257
  return this.orientation === 'horizontal' ? 'scrollWidth' : 'scrollHeight';
@@ -21285,14 +21307,13 @@ class OverflowNav {
21285
21307
  return;
21286
21308
  }
21287
21309
  this._activeItem = item;
21288
- this.allActiveItems.forEach((el) => {
21310
+ this.allActiveItems.forEach((el, i) => {
21289
21311
  if (el === this._activeItem)
21290
- this.activeHandler(el);
21312
+ this.activeHandler(el, i);
21291
21313
  else
21292
- this.inActiveHandler(el);
21314
+ this.inActiveHandler(el, i);
21293
21315
  });
21294
- this.syncActiveItemIndicator();
21295
- this.scrollToActiveItem();
21316
+ this.recalculatePositions();
21296
21317
  }
21297
21318
  get navDim() {
21298
21319
  if (!this.nav)
@@ -21310,18 +21331,18 @@ class OverflowNav {
21310
21331
  parseFloat(computedStyle.paddingBottom));
21311
21332
  }
21312
21333
  }
21313
- scrollToActiveItem(instant) {
21334
+ scrollToActiveItem() {
21314
21335
  if (!this.nav || !this.activeItem)
21315
21336
  return;
21316
- requestAnimationFrame(() => {
21337
+ setTimeout(() => {
21317
21338
  this.activeItem.scrollIntoView({
21318
- behavior: instant ? 'auto' : 'smooth',
21339
+ behavior: this.instantReCalc ? 'auto' : 'smooth',
21319
21340
  block: 'center',
21320
21341
  inline: 'center',
21321
21342
  });
21322
- });
21343
+ }, 100);
21323
21344
  }
21324
- syncActiveItemIndicator(instant) {
21345
+ syncActiveItemIndicator() {
21325
21346
  if (!this.activeItem)
21326
21347
  return;
21327
21348
  const item = this.activeItem;
@@ -21332,7 +21353,7 @@ class OverflowNav {
21332
21353
  return;
21333
21354
  const offsetTop = offset.top;
21334
21355
  const offsetLeft = offset.left;
21335
- if (instant)
21356
+ if (this.instantReCalc)
21336
21357
  this.activeIndicator.style.transition = 'none';
21337
21358
  switch (this.orientation) {
21338
21359
  case 'horizontal':
@@ -21350,8 +21371,11 @@ class OverflowNav {
21350
21371
  }
21351
21372
  // lifecycle
21352
21373
  connectedCallback() {
21374
+ this.instantReCalc = true;
21353
21375
  this.isRtl =
21354
21376
  this.orientation === 'horizontal' && !!this.host.closest('[dir="rtl"]');
21377
+ if (window['MutationObserver'])
21378
+ this.slotChangeHandler();
21355
21379
  if (!window['ResizeObserver'])
21356
21380
  return;
21357
21381
  if (this.ro) {
@@ -21362,8 +21386,8 @@ class OverflowNav {
21362
21386
  mo.observe(this.host);
21363
21387
  }
21364
21388
  componentDidLoad() {
21365
- this.activeItem = this.allActiveItems.find((el) => this.isActiveHandler(el));
21366
- this.recalculatePositions(true);
21389
+ this.activeItem = this.allActiveItems.find((el, i) => this.isActiveHandler(el, i));
21390
+ this.instantReCalc = false;
21367
21391
  }
21368
21392
  disconnectedCallback() {
21369
21393
  if (this.ro) {
@@ -21378,6 +21402,7 @@ class OverflowNav {
21378
21402
  'onav--has-scroll-controls': this.hasScrollControls,
21379
21403
  'onav--has-scroll-controls-start': !this.hideControlStart,
21380
21404
  'onav--has-scroll-controls-end': !this.hideControlEnd,
21405
+ 'onav--no-transitions': this.instantReCalc,
21381
21406
  }, onClick: this.handleClick, onKeyDown: this.handleKeyDown }, hAsync("div", { class: "onav__nav" }, this.scrollControls && (hAsync("nano-icon-button", { part: "scroll-button scroll-button-prev", class: {
21382
21407
  'onav__scroll-button': true,
21383
21408
  'onav__scroll-button--start': true,
@@ -21407,9 +21432,11 @@ class OverflowNav {
21407
21432
  "activeHandler": [16],
21408
21433
  "inActiveHandler": [16],
21409
21434
  "isActiveHandler": [16],
21435
+ "instantReCalc": [32],
21410
21436
  "hasScrollControls": [32],
21411
21437
  "hideControlEnd": [32],
21412
- "hideControlStart": [32]
21438
+ "hideControlStart": [32],
21439
+ "syncActiveItem": [64]
21413
21440
  },
21414
21441
  "$listeners$": undefined,
21415
21442
  "$lazyBundleId$": "-",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanoporetech-digital/components",
3
- "version": "4.3.1",
3
+ "version": "4.4.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://git.oxfordnanolabs.local/Digital/nano-components"
@@ -130,7 +130,7 @@
130
130
  "nanopore",
131
131
  "digital"
132
132
  ],
133
- "gitHead": "f87eae26d8a27a2a0814ce17b154a61533808817",
133
+ "gitHead": "fb91e173651970e1d23a73b661444c6dec923154",
134
134
  "volta": {
135
135
  "node": "14.18.1",
136
136
  "npm": "8.6.0"
@@ -1 +0,0 @@
1
- {"file":"table.worker-590fb88b.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
@@ -1 +0,0 @@
1
- {"file":"table.worker-9cfa17ca.js","mappings":";;;;;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
@@ -1,5 +0,0 @@
1
- /*!
2
- * Web Components for Nanopore digital Web Apps
3
- */
4
- import{r as t,h as i,a,g as e}from"./p-f6a8467a.js";import{g as s,a as o}from"./p-257432ff.js";import{d as r}from"./p-9746b0a5.js";const n=':host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}:host{--indicator-transition:var(--nano-transition-fast, 0.3s);--indicator-color:#90c6e7;--indicator-size:0;--indicator-track-color:#e4e6e8;--indicator-track-size:var(--indicator-size);--scroll-btn-color:"currentColor";--fade-size:1.75rem;--fade-transparency:0;--padding:var(--fade-size);position:relative;z-index:var(--nano-layer-index-raised, 5)}:host([orientation=horizontal]){display:block}:host([orientation=vertical]){display:flex}.onav__scroller{scrollbar-width:none;-ms-overflow-style:none;display:flex;transition:var(--nano-transition-medium, 0.5s) ease;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=");-webkit-mask-size:calc(100% + var(--fade-size) * 4);mask-size:calc(100% + var(--fade-size) * 4);-webkit-mask-position:calc(var(--fade-size) * -2);mask-position:calc(var(--fade-size) * -2)}.onav__scroller::-webkit-scrollbar{inline-size:0;block-size:0}.onav__scroller::after{content:" ";line-height:1;flex:0 0 auto;display:block}.onav--has-scroll-controls-start .onav__scroller{-webkit-mask-position:0;mask-position:0;-webkit-mask-size:calc(100% + var(--fade-size) * 2);mask-size:calc(100% + var(--fade-size) * 2)}.onav--has-scroll-controls-end .onav__scroller{-webkit-mask-position:calc(var(--fade-size) * -1);mask-position:calc(var(--fade-size) * -1);-webkit-mask-size:calc(100% + var(--fade-size));mask-size:calc(100% + var(--fade-size))}.onav--has-scroll-controls-start.onav--has-scroll-controls-end .onav__scroller{-webkit-mask-size:100%;mask-size:100%;-webkit-mask-position:0;mask-position:0}.onav__items{flex:1 1 auto;position:relative;width:auto;flex-wrap:nowrap;display:flex}.onav__items::before{content:"";background:var(--indicator-track-color);display:block;position:absolute;z-index:1}.onav__active-indicator{position:absolute;z-index:10;transition:var(--indicator-transition) transform ease, var(--indicator-transition) width ease, var(--indicator-transition) height ease}.onav nano-icon-button.onav__scroll-button{--nano-color-base:var(--scroll-btn-color);display:flex;align-items:center;justify-content:center;position:absolute;border:unset;z-index:2;transition:var(--nano-transition-fast, 0.3s) ease opacity;opacity:0;color:var(--scroll-btn-color);pointer-events:none}.onav nano-icon-button.onav__scroll-button:focus{outline:none}.onav nano-icon-button.onav__scroll-button.is-shown{opacity:1;pointer-events:all}.onav nano-icon-button.onav__scroll-button:focus-visible{box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8))) inset}.onav--horizontal .onav__scroller{overflow-x:auto;overflow-y:hidden;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;padding-inline:var(--padding);-webkit-mask-image:linear-gradient(to left, rgb(0 0 0/var(--fade-transparency)) 0, rgb(0 0 0/var(--fade-transparency)) var(--fade-size), black calc(var(--fade-size) * 2), black calc(100% - var(--fade-size) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--fade-size)), rgb(0 0 0/var(--fade-transparency)));mask-image:linear-gradient(to left, rgb(0 0 0/var(--fade-transparency)) 0, rgb(0 0 0/var(--fade-transparency)) var(--fade-size), black calc(var(--fade-size) * 2), black calc(100% - var(--fade-size) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--fade-size)), rgb(0 0 0/var(--fade-transparency)))}.onav--horizontal .onav__scroller::after{padding-inline:0 var(--fade-size);padding-block:0 0}.onav--horizontal.onav--has-scroll-controls .onav__scroller{padding-inline:var(--fade-size) 0;-webkit-padding-before:0;padding-block-start:0;-webkit-padding-after:0;padding-block-end:0}.onav--horizontal .onav__items{flex-direction:row}.onav--horizontal .onav__items::before{content:"";width:100%;height:var(--indicator-track-size);inset-block-end:0}.onav--horizontal .onav__active-indicator{inset-block-end:0;-webkit-border-after:solid var(--indicator-size) var(--indicator-color);border-block-end:solid var(--indicator-size) var(--indicator-color)}.onav--horizontal .onav__scroll-button{inset-block:0}.onav--horizontal .onav__scroll-button--start{inset-inline-start:0}.onav--horizontal .onav__scroll-button--end{inset-inline-end:0}.onav--vertical{width:100%}.onav--vertical .onav__nav{max-height:100%;display:flex}.onav--vertical .onav__scroller{width:100%;overflow-y:auto;overflow-x:hidden;flex-direction:column;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;padding-block:var(--padding);-webkit-mask-image:linear-gradient(to top, rgb(0 0 0/var(--fade-transparency)) 0, rgb(0 0 0/var(--fade-transparency)) var(--fade-size), black calc(var(--fade-size) * 2), black calc(100% - var(--fade-size) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--fade-size)), rgb(0 0 0/var(--fade-transparency)));mask-image:linear-gradient(to top, rgb(0 0 0/var(--fade-transparency)) 0, rgb(0 0 0/var(--fade-transparency)) var(--fade-size), black calc(var(--fade-size) * 2), black calc(100% - var(--fade-size) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--fade-size)), rgb(0 0 0/var(--fade-transparency)));padding-inline:0 0;-webkit-padding-before:calc(var(--fade-size) + 12px);padding-block-start:calc(var(--fade-size) + 12px);-webkit-padding-after:var(--fade-size);padding-block-end:var(--fade-size)}.onav--vertical .onav__scroller::after{padding-inline:0 0;padding-block:0 var(--fade-size)}.onav--vertical .onav__items{flex-direction:column;width:-moz-fit-content;width:fit-content}.onav--vertical .onav__items::before{content:"";height:100%;width:var(--indicator-track-size);inset-inline-start:0}.onav--vertical .onav__active-indicator{inset-inline-start:0;-webkit-border-start:solid var(--indicator-size) var(--indicator-color);border-inline-start:solid var(--indicator-size) var(--indicator-color)}.onav--vertical .onav__scroll-button{inset-inline:0}.onav--vertical .onav__scroll-button--start{inset-block-start:0}.onav--vertical .onav__scroll-button--end{inset-block-end:0}';const l=class{watchIsActiveHandler(){this.activeItem=this.allActiveItems.find((t=>this.isActiveHandler(t)));this.recalculatePositions(true)}constructor(i){t(this,i);this.updateScrollControls=()=>{if(!this.nav)return;this.hasScrollControls=this.nav[this.scrollProp]>this.nav[this.clientDimProp]&&this.nav[this.scrollProp]>this.itemContainer[this.clientDimProp];this.handleScroll()};this.handleScroll=()=>{if(!this.hasScrollControls){this.hideControlStart=this.hideControlEnd=true;return}const t=this.isRtl?this.nav[this.scrollOffset]===0:Math.abs(this.nav[this.clientDimProp]-(this.nav[this.scrollProp]-this.nav[this.scrollOffset]))<2;const i=this.isRtl?Math.abs(this.nav[this.scrollProp]+this.nav[this.scrollOffset]-this.nav[this.clientDimProp])<2:this.nav[this.scrollOffset]===0;if(i){this.hideControlStart=true;this.hideControlEnd=false}else if(t){this.hideControlStart=false;this.hideControlEnd=true}else{this.hideControlEnd=false;this.hideControlStart=false}};this.handleBtnClick=(t=false)=>{const i=this.navDim;let a;if(t)a=this.nav[this.scrollOffset]+i-20;else a=this.nav[this.scrollOffset]-i+20;try{this.nav.scroll({left:this.orientation==="horizontal"?a:0,top:this.orientation==="vertical"?a:0,behavior:"smooth"})}catch(t){this.nav[this.scrollOffset]=a}};this.slotChangeHandler=()=>{if(this.allActiveItems.length<2)return;const t=this.allActiveItems.find((t=>this.isActiveHandler(t)));if(t)this.activeItem=t;this.recalculatePositions()};this.handleClick=t=>{if(this.allActiveItems.length<2)return;const i=t.composedPath().find((t=>this.allActiveItems.includes(t)));if(i)this.activeItem=i};this.handleKeyDown=t=>{if(["Enter"," "].includes(t.key)){const i=t.composedPath().find((t=>this.allActiveItems.includes(t)));if(i)this.activeItem=i}};this.recalculatePositions=t=>{this.updateScrollControls();this.syncActiveItemIndicator(t);this.scrollToActiveItem(t)};this.scrollControls=true;this.orientation="horizontal";this.activeHandler=t=>t.classList.add("active");this.inActiveHandler=t=>t.classList.remove("active");this.isActiveHandler=t=>t.classList.contains("active");this.hasScrollControls=false;this.hideControlEnd=true;this.hideControlStart=true;this.recalculatePositions=r(this.recalculatePositions,50)}get scrollProp(){return this.orientation==="horizontal"?"scrollWidth":"scrollHeight"}get clientDimProp(){return this.orientation==="horizontal"?"clientWidth":"clientHeight"}get scrollOffset(){return this.orientation==="horizontal"?"scrollLeft":"scrollTop"}watchScrollControls(){if(this.hasScrollControls)this.handleScroll();else this.hideControlStart=this.hideControlEnd=true}hideEndBtn(){if(!this.endBtn)return;this.activateBtn(this.endBtn,!this.hideControlEnd)}hideStartBtn(){if(!this.startBtn)return;this.activateBtn(this.startBtn,!this.hideControlStart)}activateBtn(t,i=true){if(!i){t.tabIndex=-1;t.disabled=true;t.classList.remove("is-shown");return}t.tabIndex=0;t.disabled=false;t.classList.add("is-shown")}get allActiveItems(){return this.allItems.filter((t=>!t.disabled||t.classList.contains("disabled")))}get allItems(){return s(this.host,"*",true)}get activeItem(){return this._activeItem}set activeItem(t){if(!t||t===this.activeItem||t.disabled||!this.allActiveItems.includes(t)){return}this._activeItem=t;this.allActiveItems.forEach((t=>{if(t===this._activeItem)this.activeHandler(t);else this.inActiveHandler(t)}));this.syncActiveItemIndicator();this.scrollToActiveItem()}get navDim(){if(!this.nav)return 0;const t=getComputedStyle(this.nav);let i=this.nav[this.clientDimProp];if(this.orientation==="horizontal"){return i-=parseFloat(t.paddingLeft)+parseFloat(t.paddingRight)}else{return i-=parseFloat(t.paddingTop)+parseFloat(t.paddingBottom)}}scrollToActiveItem(t){if(!this.nav||!this.activeItem)return;requestAnimationFrame((()=>{this.activeItem.scrollIntoView({behavior:t?"auto":"smooth",block:"center",inline:"center"})}))}syncActiveItemIndicator(t){if(!this.activeItem)return;const i=this.activeItem;const a=i.clientWidth||0;const e=i.clientHeight+2||0;const s=o(i,this.itemContainer);if(!this.activeIndicator)return;const r=s.top;const n=s.left;if(t)this.activeIndicator.style.transition="none";switch(this.orientation){case"horizontal":this.activeIndicator.style.width=`${a}px`;this.activeIndicator.style.height=null;this.activeIndicator.style.transform=`translateX(${n}px)`;break;case"vertical":this.activeIndicator.style.width=null;this.activeIndicator.style.height=`${e}px`;this.activeIndicator.style.transform=`translateY(${r}px)`;break}setTimeout((()=>this.activeIndicator.style.transition=null),400)}connectedCallback(){this.isRtl=this.orientation==="horizontal"&&!!this.host.closest('[dir="rtl"]');if(!window["ResizeObserver"])return;if(this.ro){this.ro.disconnect();this.ro=undefined}const t=this.ro=new ResizeObserver(this.recalculatePositions);t.observe(this.host)}componentDidLoad(){this.activeItem=this.allActiveItems.find((t=>this.isActiveHandler(t)));this.recalculatePositions(true)}disconnectedCallback(){if(this.ro){this.ro.disconnect();this.ro=undefined}}render(){return i(a,{dir:this.isRtl?"rtl":null},i("div",{part:"base",class:{onav:true,[`onav--${this.orientation}`]:true,"onav--has-scroll-controls":this.hasScrollControls,"onav--has-scroll-controls-start":!this.hideControlStart,"onav--has-scroll-controls-end":!this.hideControlEnd},onClick:this.handleClick,onKeyDown:this.handleKeyDown},i("div",{class:"onav__nav"},this.scrollControls&&i("nano-icon-button",{part:"scroll-button scroll-button-prev",class:{"onav__scroll-button":true,"onav__scroll-button--start":true},ref:t=>this.startBtn=t,onClick:()=>this.handleBtnClick(false),label:"Click to scroll",iconName:this.orientation==="horizontal"?"light/chevron-left":"light/chevron-up"}),i("div",{part:"scroller",ref:t=>this.nav=t,class:"onav__scroller",onScroll:this.handleScroll},i("div",{part:"items",ref:t=>this.itemContainer=t,class:"onav__items"},i("div",{part:"indicator",ref:t=>this.activeIndicator=t,class:"onav__active-indicator"}),i("slot",{onSlotchange:this.slotChangeHandler}))),this.scrollControls&&i("nano-icon-button",{part:"scroll-button scroll-button-next",class:{"onav__scroll-button":true,"onav__scroll-button--end":true},ref:t=>this.endBtn=t,onClick:()=>this.handleBtnClick(true),label:"Click to scroll",iconName:this.orientation==="horizontal"?"light/chevron-right":"light/chevron-down"}))))}get host(){return e(this)}static get watchers(){return{isActiveHandler:["watchIsActiveHandler"],hasScrollControls:["watchScrollControls"],hideControlEnd:["hideEndBtn"],hideControlStart:["hideStartBtn"]}}};l.style=n;export{l as nano_overflow_nav};
5
- //# sourceMappingURL=p-556b6e8a.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["overflowNavCss","OverflowNav","watchIsActiveHandler","this","activeItem","allActiveItems","find","el","isActiveHandler","recalculatePositions","constructor","hostRef","updateScrollControls","nav","hasScrollControls","scrollProp","clientDimProp","itemContainer","handleScroll","hideControlStart","hideControlEnd","finishEnd","isRtl","scrollOffset","Math","abs","finishStart","handleBtnClick","goEnd","navDim","scrollAmt","scroll","left","orientation","top","behavior","e","slotChangeHandler","length","item","handleClick","event","foundItem","composedPath","includes","handleKeyDown","key","init","syncActiveItemIndicator","scrollToActiveItem","classList","add","remove","contains","debounce","watchScrollControls","hideEndBtn","endBtn","activateBtn","hideStartBtn","startBtn","btn","activate","tabIndex","disabled","allItems","filter","getDirectChildren","host","_activeItem","forEach","activeHandler","inActiveHandler","computedStyle","getComputedStyle","clientDim","parseFloat","paddingLeft","paddingRight","paddingTop","paddingBottom","instant","requestAnimationFrame","scrollIntoView","block","inline","width","clientWidth","height","clientHeight","offset","getOffset","activeIndicator","offsetTop","offsetLeft","style","transition","transform","setTimeout","connectedCallback","closest","window","ro","disconnect","undefined","mo","ResizeObserver","observe","componentDidLoad","disconnectedCallback","render","h","Host","dir","part","class","onav","onClick","onKeyDown","scrollControls","ref","label","iconName","onScroll","onSlotchange"],"sources":["./src/components/overflow-nav/overflow-nav.scss?tag=nano-overflow-nav&encapsulation=shadow","./src/components/overflow-nav/overflow-nav.tsx"],"sourcesContent":["@use 'sass:map';\n@use 'sass:list';\n\n@import '../../global/style/utilities/globals';\n@import '../../global/style/nano-theme/form';\n@import '../../global/style/nano-theme/base';\n@import '../../global/style/nano-theme/layers';\n\n:host {\n /**\n * @prop --indicator-transition: Defaults to #{$transition-fast}\n * @prop --indicator-color: Defaults to #{map.get($colors, lightblue)};\n * @prop --indicator-size: Defaults to 0;\n * @prop --indicator-track-color: Defaults to #{map.get($colors, lightgrey)};\n * @prop --indicator-track-size: Defaults to var(--indicator-size);\n\n * @prop --scroll-btn-color: Defaults to 'currentColor';\n * @prop --fade-size: The size of the fade areas (when items do not fit). Defaults to 1.75rem;\n * @prop --fade-transparency: Defaults to 0;\n *\n * @prop --padding: Padding that matches the fade size will stop items shifting if fade areas are added (i.e when items do not fit). Defaults to var(--fade-size);\n */\n\n --indicator-transition: #{$transition-fast};\n --indicator-color: #{map.get($colors, lightblue)};\n --indicator-size: 0;\n --indicator-track-color: #{map.get($colors, lightgrey)};\n --indicator-track-size: var(--indicator-size);\n --scroll-btn-color: 'currentColor';\n --fade-size: 1.75rem;\n --fade-transparency: 0;\n --padding: var(--fade-size);\n\n position: relative;\n z-index: #{$layer-index-raised};\n}\n\n:host([orientation=\"horizontal\"]) {\n display: block;\n}\n\n:host([orientation=\"vertical\"]) {\n display: flex;\n}\n\n.onav {\n $root: &;\n\n &__scroller {\n @include hide-scrollbar();\n\n display: flex;\n transition: #{$transition-medium} ease;\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=');\n mask-size: calc(100% + calc(var(--fade-size) * 4));\n mask-position: calc(var(--fade-size) * -2);\n\n &::after {\n content: ' ';\n line-height: 1;\n flex: 0 0 auto;\n display: block;\n }\n\n #{$root}--has-scroll-controls-start & {\n mask-position: 0;\n mask-size: calc(100% + (var(--fade-size) * 2));\n }\n\n #{$root}--has-scroll-controls-end & {\n mask-position: calc(var(--fade-size) * -1);\n mask-size: calc(100% + var(--fade-size));\n }\n\n #{$root}--has-scroll-controls-start#{$root}--has-scroll-controls-end & {\n mask-size: 100%;\n mask-position: 0;\n }\n }\n\n &__items {\n flex: 1 1 auto;\n position: relative;\n width: auto;\n flex-wrap: nowrap;\n display: flex;\n\n &::before {\n content: '';\n background: var(--indicator-track-color);\n display: block;\n position: absolute;\n z-index: 1;\n }\n }\n\n &__active-indicator {\n position: absolute;\n z-index: 10;\n transition:\n var(--indicator-transition) transform ease,\n var(--indicator-transition) width ease,\n var(--indicator-transition) height ease;\n }\n\n nano-icon-button.onav__scroll-button {\n --nano-color-base: var(--scroll-btn-color);\n\n display: flex;\n align-items: center;\n justify-content: center;\n position: absolute;\n border: unset;\n z-index: 2;\n transition: #{$transition-fast} ease opacity;\n opacity: 0;\n color: var(--scroll-btn-color);\n pointer-events: none;\n\n &:focus {\n outline: none;\n }\n\n &.is-shown {\n opacity: 1;\n pointer-events: all;\n }\n\n &:focus-visible {\n box-shadow: #{$control-focus-style} inset;\n }\n }\n\n ///////////// HORIZONTAL ///////////////\n\n &--horizontal {\n\n #{$root}__scroller {\n overflow-x: auto;\n overflow-y: hidden;\n mask-repeat: no-repeat;\n padding-inline: var(--padding);\n mask-image:\n linear-gradient(\n to left,\n rgb(0 0 0 / var(--fade-transparency)) 0,\n rgb(0 0 0 / var(--fade-transparency)) var(--fade-size),\n rgb(0 0 0 / 100%) calc(var(--fade-size) * 2),\n rgb(0 0 0 / 100%) calc(100% - (var(--fade-size) * 2)),\n rgb(0 0 0 / var(--fade-transparency))\n calc(100% - var(--fade-size)),\n rgb(0 0 0 / var(--fade-transparency))\n );\n\n &::after {\n padding-inline: 0 var(--fade-size);\n padding-block: 0 0;\n }\n }\n\n &#{$root}--has-scroll-controls #{$root}__scroller {\n padding-inline: var(--fade-size) 0;\n padding-block-start: 0;\n padding-block-end: 0;\n }\n\n #{$root}__items {\n flex-direction: row;\n\n &::before {\n content: '';\n width: 100%;\n height: var(--indicator-track-size);\n inset-block-end: 0;\n }\n }\n\n #{$root}__active-indicator {\n inset-block-end: 0;\n border-block-end: solid var(--indicator-size) var(--indicator-color);\n }\n\n #{$root}__scroll-button {\n inset-block: 0;\n\n &--start {\n inset-inline-start: 0;\n }\n\n &--end {\n inset-inline-end: 0;\n }\n }\n }\n\n ///////////// VERTICAL ///////////////\n\n &--vertical {\n width: 100%;\n\n #{$root}__nav {\n max-height: 100%;\n display: flex;\n }\n\n #{$root}__scroller {\n width: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n flex-direction: column;\n mask-repeat: no-repeat;\n padding-block: var(--padding);\n mask-image:\n linear-gradient(\n to top,\n rgb(0 0 0 / var(--fade-transparency)) 0,\n rgb(0 0 0 / var(--fade-transparency)) var(--fade-size),\n rgb(0 0 0 / 100%) calc(var(--fade-size) * 2),\n rgb(0 0 0 / 100%) calc(100% - (var(--fade-size) * 2)),\n rgb(0 0 0 / var(--fade-transparency))\n calc(100% - var(--fade-size)),\n rgb(0 0 0 / var(--fade-transparency))\n );\n padding-inline: 0 0;\n padding-block-start: calc(var(--fade-size) + 12px);\n padding-block-end: var(--fade-size);\n\n &::after {\n padding-inline: 0 0;\n padding-block: 0 var(--fade-size);\n }\n }\n\n #{$root}__items {\n flex-direction: column;\n width: fit-content;\n\n &::before {\n content: '';\n height: 100%;\n width: var(--indicator-track-size);\n inset-inline-start: 0;\n }\n }\n\n #{$root}__active-indicator {\n inset-inline-start: 0;\n border-inline-start: solid var(--indicator-size) var(--indicator-color);\n }\n\n #{$root}__scroll-button {\n inset-inline: 0;\n\n &--start {\n inset-block-start: 0;\n }\n\n &--end {\n inset-block-end: 0;\n }\n }\n }\n}\n","import {\n Component,\n ComponentInterface,\n Host,\n h,\n Element,\n Prop,\n Watch,\n State,\n} from '@stencil/core';\nimport { getDirectChildren, getOffset } from '../../utils/dom';\nimport { debounce } from '../../utils/throttle';\n\n/**\n * Primarily used to display navigational items that may not fit on smaller screens.\n *\n * - Accepts any collection of elements\n * - Gives visual cues of 'more' with auto display fade effect and scroll buttons\n * - Auto scrolls to the active item onload\n *\n * @slot - Default slot to place items.\n *\n * @part base - root, wrapper element\n * @part scroller - the scrolling element\n * @part items - the item wrapper element\n * @part indicator - the animated, indicator element\n * @part scroll-button - The buttons shown at either side of the scrolling area\n * @part scroll-button-prev - The button shown at the start of the scrolling area\n * @part scroll-button-next - The button shown at the end of the scrolling area\n */\n\n@Component({\n tag: 'nano-overflow-nav',\n styleUrl: 'overflow-nav.scss',\n shadow: true,\n})\nexport class OverflowNav implements ComponentInterface {\n // public surface\n\n /** Disables the scroll arrow buttons that appear when content overflows */\n @Prop() scrollControls = true;\n\n /** The flex direction of the element */\n @Prop({ reflect: true }) orientation: 'horizontal' | 'vertical' =\n 'horizontal';\n\n /**\n * A function called when an item becomes 'active' (via click or keyboard)\n * @param item\n * @returns void */\n @Prop() activeHandler = (item: HTMLElement) => item.classList.add('active');\n\n /**\n * A function called when an item becomes 'inactive'\n * (because another item was made active)\n * @param item\n * @returns void */\n @Prop() inActiveHandler = (item: HTMLElement) =>\n item.classList.remove('active');\n\n /**\n * A function called to assess an initial, active item\n * @param item\n * @returns void */\n @Prop() isActiveHandler = (item: HTMLElement) =>\n item.classList.contains('active');\n\n @Watch('isActiveHandler')\n watchIsActiveHandler() {\n this.activeItem = this.allActiveItems.find((el) =>\n this.isActiveHandler(el)\n );\n this.recalculatePositions(true);\n }\n\n // private state\n\n constructor() {\n this.recalculatePositions = debounce(this.recalculatePositions, 50);\n }\n\n private ro?: ResizeObserver;\n private nav?: HTMLElement;\n private itemContainer?: HTMLElement;\n private isRtl?: boolean;\n private endBtn: HTMLNanoIconButtonElement;\n private startBtn: HTMLNanoIconButtonElement;\n private activeIndicator: HTMLElement;\n\n get scrollProp() {\n return this.orientation === 'horizontal' ? 'scrollWidth' : 'scrollHeight';\n }\n\n get clientDimProp() {\n return this.orientation === 'horizontal' ? 'clientWidth' : 'clientHeight';\n }\n\n get scrollOffset() {\n return this.orientation === 'horizontal' ? 'scrollLeft' : 'scrollTop';\n }\n\n @Element() host: HTMLNanoOverflowNavElement;\n\n @State() hasScrollControls = false;\n\n @Watch('hasScrollControls')\n watchScrollControls() {\n if (this.hasScrollControls) this.handleScroll();\n else this.hideControlStart = this.hideControlEnd = true;\n }\n\n @State() hideControlEnd = true;\n\n @Watch('hideControlEnd')\n hideEndBtn() {\n if (!this.endBtn) return;\n this.activateBtn(this.endBtn, !this.hideControlEnd);\n }\n\n @State() hideControlStart = true;\n\n @Watch('hideControlStart')\n hideStartBtn() {\n if (!this.startBtn) return;\n this.activateBtn(this.startBtn, !this.hideControlStart);\n }\n\n // private logic\n\n private activateBtn(btn: HTMLNanoIconButtonElement, activate = true) {\n if (!activate) {\n btn.tabIndex = -1;\n btn.disabled = true;\n btn.classList.remove('is-shown');\n return;\n }\n btn.tabIndex = 0;\n btn.disabled = false;\n btn.classList.add('is-shown');\n }\n\n get allActiveItems() {\n return this.allItems.filter(\n (el: any) => !el.disabled || el.classList.contains('disabled')\n );\n }\n\n get allItems() {\n return getDirectChildren<HTMLElement>(this.host, '*', true);\n }\n\n get activeItem() {\n return this._activeItem;\n }\n\n set activeItem(item: HTMLElement) {\n if (\n !item ||\n item === this.activeItem ||\n (item as any).disabled ||\n !this.allActiveItems.includes(item)\n ) {\n return;\n }\n\n this._activeItem = item;\n this.allActiveItems.forEach((el) => {\n if (el === this._activeItem) this.activeHandler(el);\n else this.inActiveHandler(el);\n });\n this.syncActiveItemIndicator();\n this.scrollToActiveItem();\n }\n private _activeItem: HTMLElement;\n\n get navDim() {\n if (!this.nav) return 0;\n\n const computedStyle = getComputedStyle(this.nav);\n let clientDim = this.nav[this.clientDimProp];\n\n if (this.orientation === 'horizontal') {\n return (clientDim -=\n parseFloat(computedStyle.paddingLeft) +\n parseFloat(computedStyle.paddingRight));\n } else {\n return (clientDim -=\n parseFloat(computedStyle.paddingTop) +\n parseFloat(computedStyle.paddingBottom));\n }\n }\n\n private scrollToActiveItem(instant?: boolean) {\n if (!this.nav || !this.activeItem) return;\n requestAnimationFrame(() => {\n this.activeItem.scrollIntoView({\n behavior: instant ? 'auto' : 'smooth',\n block: 'center',\n inline: 'center',\n });\n });\n }\n\n private syncActiveItemIndicator(instant?: boolean) {\n if (!this.activeItem) return;\n\n const item = this.activeItem;\n const width = item.clientWidth || 0;\n const height = item.clientHeight + 2 || 0;\n const offset = getOffset(item, this.itemContainer);\n\n if (!this.activeIndicator) return;\n\n const offsetTop = offset.top;\n const offsetLeft = offset.left;\n\n if (instant) this.activeIndicator.style.transition = 'none';\n\n switch (this.orientation) {\n case 'horizontal':\n this.activeIndicator.style.width = `${width}px`;\n this.activeIndicator.style.height = null;\n this.activeIndicator.style.transform = `translateX(${offsetLeft}px)`;\n break;\n\n case 'vertical':\n this.activeIndicator.style.width = null;\n this.activeIndicator.style.height = `${height}px`;\n this.activeIndicator.style.transform = `translateY(${offsetTop}px)`;\n break;\n }\n setTimeout(() => (this.activeIndicator.style.transition = null), 400);\n }\n\n private updateScrollControls = () => {\n if (!this.nav) return;\n\n this.hasScrollControls =\n this.nav[this.scrollProp] > this.nav[this.clientDimProp] &&\n this.nav[this.scrollProp] > this.itemContainer[this.clientDimProp];\n this.handleScroll();\n };\n\n private handleScroll = () => {\n if (!this.hasScrollControls) {\n this.hideControlStart = this.hideControlEnd = true;\n return;\n }\n const finishEnd = this.isRtl\n ? this.nav[this.scrollOffset] === 0\n : Math.abs(\n this.nav[this.clientDimProp] -\n (this.nav[this.scrollProp] - this.nav[this.scrollOffset])\n ) < 2;\n\n const finishStart = this.isRtl\n ? Math.abs(\n this.nav[this.scrollProp] +\n this.nav[this.scrollOffset] -\n this.nav[this.clientDimProp]\n ) < 2\n : this.nav[this.scrollOffset] === 0;\n\n if (finishStart) {\n this.hideControlStart = true;\n this.hideControlEnd = false;\n } else if (finishEnd) {\n this.hideControlStart = false;\n this.hideControlEnd = true;\n } else {\n this.hideControlEnd = false;\n this.hideControlStart = false;\n }\n };\n\n private handleBtnClick = (goEnd: boolean = false) => {\n const navDim = this.navDim;\n let scrollAmt;\n if (goEnd) scrollAmt = this.nav[this.scrollOffset] + navDim - 20;\n else scrollAmt = this.nav[this.scrollOffset] - navDim + 20;\n\n try {\n this.nav.scroll({\n left: this.orientation === 'horizontal' ? scrollAmt : 0,\n top: this.orientation === 'vertical' ? scrollAmt : 0,\n behavior: 'smooth',\n });\n } catch (e) {\n this.nav[this.scrollOffset] = scrollAmt;\n }\n };\n\n private slotChangeHandler = () => {\n if (this.allActiveItems.length < 2) return;\n const item = this.allActiveItems.find((el) => this.isActiveHandler(el));\n if (item) this.activeItem = item;\n this.recalculatePositions();\n };\n\n private handleClick = (event: MouseEvent) => {\n if (this.allActiveItems.length < 2) return;\n const foundItem = event\n .composedPath()\n .find((e) => this.allActiveItems.includes(e as any)) as HTMLElement;\n if (foundItem) this.activeItem = foundItem;\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n // Activate a tab\n if (['Enter', ' '].includes(event.key)) {\n const foundItem = event\n .composedPath()\n .find((e) => this.allActiveItems.includes(e as any)) as HTMLElement;\n if (foundItem) this.activeItem = foundItem;\n }\n };\n\n private recalculatePositions = (init?: any) => {\n this.updateScrollControls();\n this.syncActiveItemIndicator(init);\n this.scrollToActiveItem(init);\n };\n\n // lifecycle\n\n connectedCallback(): void {\n this.isRtl =\n this.orientation === 'horizontal' && !!this.host.closest('[dir=\"rtl\"]');\n\n if (!window['ResizeObserver']) return;\n\n if (this.ro) {\n this.ro.disconnect();\n this.ro = undefined;\n }\n const mo = (this.ro = new ResizeObserver(this.recalculatePositions));\n mo.observe(this.host);\n }\n\n componentDidLoad(): void {\n this.activeItem = this.allActiveItems.find((el) =>\n this.isActiveHandler(el)\n );\n this.recalculatePositions(true);\n }\n\n disconnectedCallback(): void {\n if (this.ro) {\n this.ro.disconnect();\n this.ro = undefined;\n }\n }\n\n render() {\n return (\n <Host dir={this.isRtl ? 'rtl' : null}>\n <div\n part=\"base\"\n class={{\n onav: true,\n [`onav--${this.orientation}`]: true,\n 'onav--has-scroll-controls': this.hasScrollControls,\n 'onav--has-scroll-controls-start': !this.hideControlStart,\n 'onav--has-scroll-controls-end': !this.hideControlEnd,\n }}\n onClick={this.handleClick}\n onKeyDown={this.handleKeyDown}\n >\n <div class=\"onav__nav\">\n {this.scrollControls && (\n <nano-icon-button\n part=\"scroll-button scroll-button-prev\"\n class={{\n 'onav__scroll-button': true,\n 'onav__scroll-button--start': true,\n }}\n ref={(btn) => (this.startBtn = btn)}\n onClick={() => this.handleBtnClick(false)}\n label=\"Click to scroll\"\n iconName={\n this.orientation === 'horizontal'\n ? 'light/chevron-left'\n : 'light/chevron-up'\n }\n />\n )}\n\n <div\n part=\"scroller\"\n ref={(el) => (this.nav = el)}\n class=\"onav__scroller\"\n onScroll={this.handleScroll}\n >\n <div\n part=\"items\"\n ref={(el) => (this.itemContainer = el)}\n class=\"onav__items\"\n >\n <div\n part=\"indicator\"\n ref={(el) => (this.activeIndicator = el)}\n class=\"onav__active-indicator\"\n />\n <slot onSlotchange={this.slotChangeHandler} />\n </div>\n </div>\n\n {this.scrollControls && (\n <nano-icon-button\n part=\"scroll-button scroll-button-next\"\n class={{\n 'onav__scroll-button': true,\n 'onav__scroll-button--end': true,\n }}\n ref={(btn) => (this.endBtn = btn)}\n onClick={() => this.handleBtnClick(true)}\n label=\"Click to scroll\"\n iconName={\n this.orientation === 'horizontal'\n ? 'light/chevron-right'\n : 'light/chevron-down'\n }\n />\n )}\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /*!
2
- * Web Components for Nanopore digital Web Apps
3
- */
4
- import{c as t}from"./p-aeaa2ed9.js";import"./p-f6a8467a.js";import"./p-ee045579.js";import"./p-9746b0a5.js";import"./p-9ebbb814.js";const o="table.worker";const p="stencil.table.worker";const e=new URL("p-e2f9ccfa.js",import.meta.url).href;const s=new Blob(['importScripts("'+e+'")'],{type:"text/javascript"});const r=URL.createObjectURL(s);const a=t(r,o,p);URL.revokeObjectURL(r);export{a as worker,p as workerMsgId,o as workerName,e as workerPath};
5
- //# sourceMappingURL=p-b5805a8c.js.map