@nanoporetech-digital/components 4.3.2 → 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +19 -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 +47 -49
  5. package/dist/cjs/nano-overflow-nav.cjs.entry.js.map +1 -1
  6. package/dist/cjs/{nano-table-737365b7.js → nano-table-0ec23172.js} +2 -2
  7. package/dist/cjs/{nano-table-737365b7.js.map → nano-table-0ec23172.js.map} +1 -1
  8. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  9. package/dist/cjs/{table.worker-c3b11144.js → table.worker-39f003e7.js} +2 -2
  10. package/dist/cjs/table.worker-39f003e7.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 +88 -60
  13. package/dist/collection/components/overflow-nav/overflow-nav.js.map +1 -1
  14. package/dist/components/nano-overflow-nav.js +50 -50
  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 +47 -49
  19. package/dist/esm/nano-overflow-nav.entry.js.map +1 -1
  20. package/dist/esm/{nano-table-75d755ae.js → nano-table-2eaa51e4.js} +2 -2
  21. package/dist/esm/{nano-table-75d755ae.js.map → nano-table-2eaa51e4.js.map} +1 -1
  22. package/dist/esm/nano-table.entry.js +1 -1
  23. package/dist/esm/{table.worker-d60d6df4.js → table.worker-7866e519.js} +2 -2
  24. package/dist/esm/table.worker-7866e519.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-42e7f253.js → p-3fe0ff90.js} +2 -2
  30. package/dist/nano-components/{p-d98c6a62.js → p-cdf0aeb7.js} +2 -2
  31. package/dist/nano-components/{p-1b7bad31.entry.js → p-d4e26ef4.entry.js} +2 -2
  32. package/dist/types/components/overflow-nav/overflow-nav.d.ts +15 -6
  33. package/dist/types/components.d.ts +22 -12
  34. package/docs-json.json +38 -14
  35. package/hydrate/index.js +50 -50
  36. package/package.json +2 -2
  37. package/dist/cjs/table.worker-c3b11144.js.map +0 -1
  38. package/dist/esm/table.worker-d60d6df4.js.map +0 -1
  39. package/dist/nano-components/p-763e0fa0.entry.js +0 -5
  40. package/dist/nano-components/p-763e0fa0.entry.js.map +0 -1
  41. /package/dist/nano-components/{p-42e7f253.js.map → p-3fe0ff90.js.map} +0 -0
  42. /package/dist/nano-components/{p-1b7bad31.entry.js.map → p-cdf0aeb7.js.map} +0 -0
  43. /package/dist/nano-components/{p-d98c6a62.js.map → p-d4e26ef4.entry.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-09T09:44:32",
2
+ "timestamp": "2023-03-10T22:36:58",
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,8 +21130,16 @@ 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) {
@@ -21190,38 +21198,24 @@ class OverflowNav {
21190
21198
  this.nav[this.scrollOffset] = scrollAmt;
21191
21199
  }
21192
21200
  };
21193
- this.slotChangeHandler = (ev) => {
21201
+ this.slotChangeHandler = () => {
21194
21202
  if (this.allActiveItems.length < 2)
21195
21203
  return;
21196
- const item = this.allActiveItems.find((el) => this.isActiveHandler(el));
21204
+ const item = this.allActiveItems.find((el, i) => this.isActiveHandler(el, i));
21197
21205
  if (item)
21198
21206
  this.activeItem = item;
21199
21207
  this.recalculatePositions();
21200
21208
  /** maintain a weakmap of mutation observers to maintain item / indicator position on all changes. */
21201
- const nodes = ev.target.assignedElements({ flatten: true });
21202
- nodes.forEach((node) => {
21203
- if (!this.mutationObservers.get(node)) {
21204
- const mo = new MutationObserver((records) => {
21205
- records.forEach((record) => {
21206
- if (record.type === 'attributes') {
21207
- const foundItem = this.allActiveItems.find((el) => this.isActiveHandler(el));
21208
- if (foundItem && foundItem !== this.activeItem) {
21209
- this.activeItem = foundItem;
21210
- }
21211
- }
21212
- else {
21213
- this.syncActiveItemIndicator();
21214
- }
21215
- });
21216
- });
21217
- this.mutationObservers.set(node, mo);
21218
- mo.observe(node, {
21219
- characterData: true,
21220
- childList: true,
21221
- subtree: true,
21222
- attributes: true,
21223
- });
21224
- }
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);
21225
21219
  });
21226
21220
  };
21227
21221
  this.handleClick = (event) => {
@@ -21243,20 +21237,21 @@ class OverflowNav {
21243
21237
  this.activeItem = foundItem;
21244
21238
  }
21245
21239
  };
21246
- this.recalculatePositions = (init) => {
21240
+ this.recalculatePositions = () => {
21247
21241
  this.updateScrollControls();
21248
- this.syncActiveItemIndicator(init);
21249
- this.scrollToActiveItem(init);
21242
+ this.syncActiveItemIndicator();
21243
+ this.scrollToActiveItem();
21250
21244
  };
21251
21245
  this.scrollControls = true;
21252
21246
  this.orientation = 'horizontal';
21253
- this.activeHandler = (item) => item.classList.add('active');
21254
- this.inActiveHandler = (item) => item.classList.remove('active');
21255
- 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;
21256
21251
  this.hasScrollControls = false;
21257
21252
  this.hideControlEnd = true;
21258
21253
  this.hideControlStart = true;
21259
- this.recalculatePositions = debounce$2(this.recalculatePositions, 80);
21254
+ this.recalculatePositions = debounce$2(this.recalculatePositions.bind(this), 80);
21260
21255
  }
21261
21256
  get scrollProp() {
21262
21257
  return this.orientation === 'horizontal' ? 'scrollWidth' : 'scrollHeight';
@@ -21312,14 +21307,13 @@ class OverflowNav {
21312
21307
  return;
21313
21308
  }
21314
21309
  this._activeItem = item;
21315
- this.allActiveItems.forEach((el) => {
21310
+ this.allActiveItems.forEach((el, i) => {
21316
21311
  if (el === this._activeItem)
21317
- this.activeHandler(el);
21312
+ this.activeHandler(el, i);
21318
21313
  else
21319
- this.inActiveHandler(el);
21314
+ this.inActiveHandler(el, i);
21320
21315
  });
21321
- this.syncActiveItemIndicator();
21322
- this.scrollToActiveItem();
21316
+ this.recalculatePositions();
21323
21317
  }
21324
21318
  get navDim() {
21325
21319
  if (!this.nav)
@@ -21337,18 +21331,18 @@ class OverflowNav {
21337
21331
  parseFloat(computedStyle.paddingBottom));
21338
21332
  }
21339
21333
  }
21340
- scrollToActiveItem(instant) {
21334
+ scrollToActiveItem() {
21341
21335
  if (!this.nav || !this.activeItem)
21342
21336
  return;
21343
- requestAnimationFrame(() => {
21337
+ setTimeout(() => {
21344
21338
  this.activeItem.scrollIntoView({
21345
- behavior: instant ? 'auto' : 'smooth',
21339
+ behavior: this.instantReCalc ? 'auto' : 'smooth',
21346
21340
  block: 'center',
21347
21341
  inline: 'center',
21348
21342
  });
21349
- });
21343
+ }, 100);
21350
21344
  }
21351
- syncActiveItemIndicator(instant) {
21345
+ syncActiveItemIndicator() {
21352
21346
  if (!this.activeItem)
21353
21347
  return;
21354
21348
  const item = this.activeItem;
@@ -21359,7 +21353,7 @@ class OverflowNav {
21359
21353
  return;
21360
21354
  const offsetTop = offset.top;
21361
21355
  const offsetLeft = offset.left;
21362
- if (instant)
21356
+ if (this.instantReCalc)
21363
21357
  this.activeIndicator.style.transition = 'none';
21364
21358
  switch (this.orientation) {
21365
21359
  case 'horizontal':
@@ -21377,8 +21371,11 @@ class OverflowNav {
21377
21371
  }
21378
21372
  // lifecycle
21379
21373
  connectedCallback() {
21374
+ this.instantReCalc = true;
21380
21375
  this.isRtl =
21381
21376
  this.orientation === 'horizontal' && !!this.host.closest('[dir="rtl"]');
21377
+ if (window['MutationObserver'])
21378
+ this.slotChangeHandler();
21382
21379
  if (!window['ResizeObserver'])
21383
21380
  return;
21384
21381
  if (this.ro) {
@@ -21389,8 +21386,8 @@ class OverflowNav {
21389
21386
  mo.observe(this.host);
21390
21387
  }
21391
21388
  componentDidLoad() {
21392
- this.activeItem = this.allActiveItems.find((el) => this.isActiveHandler(el));
21393
- this.recalculatePositions(true);
21389
+ this.activeItem = this.allActiveItems.find((el, i) => this.isActiveHandler(el, i));
21390
+ this.instantReCalc = false;
21394
21391
  }
21395
21392
  disconnectedCallback() {
21396
21393
  if (this.ro) {
@@ -21405,6 +21402,7 @@ class OverflowNav {
21405
21402
  'onav--has-scroll-controls': this.hasScrollControls,
21406
21403
  'onav--has-scroll-controls-start': !this.hideControlStart,
21407
21404
  'onav--has-scroll-controls-end': !this.hideControlEnd,
21405
+ 'onav--no-transitions': this.instantReCalc,
21408
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: {
21409
21407
  'onav__scroll-button': true,
21410
21408
  'onav__scroll-button--start': true,
@@ -21434,9 +21432,11 @@ class OverflowNav {
21434
21432
  "activeHandler": [16],
21435
21433
  "inActiveHandler": [16],
21436
21434
  "isActiveHandler": [16],
21435
+ "instantReCalc": [32],
21437
21436
  "hasScrollControls": [32],
21438
21437
  "hideControlEnd": [32],
21439
- "hideControlStart": [32]
21438
+ "hideControlStart": [32],
21439
+ "syncActiveItem": [64]
21440
21440
  },
21441
21441
  "$listeners$": undefined,
21442
21442
  "$lazyBundleId$": "-",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanoporetech-digital/components",
3
- "version": "4.3.2",
3
+ "version": "4.4.1",
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": "cd8f88dc881d62ba01804f0b15d4a6d05e5f0a37",
133
+ "gitHead": "17858fe55b2fe092955a5fc82f83934763ca2e31",
134
134
  "volta": {
135
135
  "node": "14.18.1",
136
136
  "npm": "8.6.0"
@@ -1 +0,0 @@
1
- {"file":"table.worker-c3b11144.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
@@ -1 +0,0 @@
1
- {"file":"table.worker-d60d6df4.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 r}from"./p-257432ff.js";import{d as o}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.mutationObservers=new WeakMap;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=t=>{if(this.allActiveItems.length<2)return;const i=this.allActiveItems.find((t=>this.isActiveHandler(t)));if(i)this.activeItem=i;this.recalculatePositions();const a=t.target.assignedElements({flatten:true});a.forEach((t=>{if(!this.mutationObservers.get(t)){const i=new MutationObserver((t=>{t.forEach((t=>{if(t.type==="attributes"){const t=this.allActiveItems.find((t=>this.isActiveHandler(t)));if(t&&t!==this.activeItem){this.activeItem=t}}else{this.syncActiveItemIndicator()}}))}));this.mutationObservers.set(t,i);i.observe(t,{characterData:true,childList:true,subtree:true,attributes:true})}}))};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=o(this.recalculatePositions,80)}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=r(i,this.itemContainer);if(!this.activeIndicator)return;const o=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(${o}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-763e0fa0.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["overflowNavCss","OverflowNav","watchIsActiveHandler","this","activeItem","allActiveItems","find","el","isActiveHandler","recalculatePositions","constructor","hostRef","mutationObservers","WeakMap","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","ev","length","item","nodes","target","assignedElements","flatten","forEach","node","get","mo","MutationObserver","records","record","type","foundItem","syncActiveItemIndicator","set","observe","characterData","childList","subtree","attributes","handleClick","event","composedPath","includes","handleKeyDown","key","init","scrollToActiveItem","classList","add","remove","contains","debounce","watchScrollControls","hideEndBtn","endBtn","activateBtn","hideStartBtn","startBtn","btn","activate","tabIndex","disabled","allItems","filter","getDirectChildren","host","_activeItem","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","ResizeObserver","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, 80);\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 private mutationObservers: WeakMap<Node, MutationObserver> = new WeakMap();\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 = (ev: Event & { target: HTMLSlotElement }) => {\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 /** maintain a weakmap of mutation observers to maintain item / indicator position on all changes. */\n const nodes = ev.target.assignedElements({ flatten: true });\n nodes.forEach((node) => {\n if (!this.mutationObservers.get(node)) {\n const mo = new MutationObserver((records) => {\n records.forEach((record) => {\n if (record.type === 'attributes') {\n const foundItem = this.allActiveItems.find((el) =>\n this.isActiveHandler(el)\n );\n if (foundItem && foundItem !== this.activeItem) {\n this.activeItem = foundItem;\n }\n } else {\n this.syncActiveItemIndicator();\n }\n });\n });\n this.mutationObservers.set(node, mo);\n\n mo.observe(node, {\n characterData: true,\n childList: true,\n subtree: true,\n attributes: true,\n });\n }\n });\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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"}