@nanoporetech-digital/components 4.9.3 → 4.10.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 (158) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/cjs/drag-777bd8dd.js +74 -0
  3. package/dist/cjs/drag-777bd8dd.js.map +1 -0
  4. package/dist/cjs/index-71f899a7.js +4 -0
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/nano-components.cjs.js +1 -1
  7. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +4 -4
  8. package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
  9. package/dist/cjs/nano-global-nav.cjs.entry.js +2 -3
  10. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  11. package/dist/cjs/nano-icon-button_2.cjs.entry.js +40 -3
  12. package/dist/cjs/nano-icon-button_2.cjs.entry.js.map +1 -1
  13. package/dist/cjs/nano-sortable.cjs.entry.js +653 -0
  14. package/dist/cjs/nano-sortable.cjs.entry.js.map +1 -0
  15. package/dist/cjs/nano-split-pane.cjs.entry.js +30 -45
  16. package/dist/cjs/nano-split-pane.cjs.entry.js.map +1 -1
  17. package/dist/cjs/nano-tab-group.cjs.entry.js +39 -43
  18. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  19. package/dist/cjs/nano-tab.cjs.entry.js +3 -3
  20. package/dist/cjs/nano-tab.cjs.entry.js.map +1 -1
  21. package/dist/cjs/{nano-table-0bac0552.js → nano-table-ff33dc43.js} +20 -147
  22. package/dist/cjs/nano-table-ff33dc43.js.map +1 -0
  23. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  24. package/dist/cjs/{table.worker-13b5bc18.js → table.worker-0a6bc962.js} +3 -3
  25. package/dist/cjs/table.worker-0a6bc962.js.map +1 -0
  26. package/dist/cjs/{table.worker-f820b411.js → table.worker-bd51e29f.js} +1 -1
  27. package/dist/collection/collection-manifest.json +1 -0
  28. package/dist/collection/components/global-nav/global-nav.js +2 -3
  29. package/dist/collection/components/global-nav/global-nav.js.map +1 -1
  30. package/dist/collection/components/icon-button/icon-button.css +6 -4
  31. package/dist/collection/components/icon-button/icon-button.js +83 -4
  32. package/dist/collection/components/icon-button/icon-button.js.map +1 -1
  33. package/dist/collection/components/nav-item/nav-item.js +4 -4
  34. package/dist/collection/components/nav-item/nav-item.js.map +1 -1
  35. package/dist/collection/components/sortable/sortable.css +28 -0
  36. package/dist/collection/components/sortable/sortable.js +1180 -0
  37. package/dist/collection/components/sortable/sortable.js.map +1 -0
  38. package/dist/collection/components/split-pane/split-pane.js +29 -27
  39. package/dist/collection/components/split-pane/split-pane.js.map +1 -1
  40. package/dist/collection/components/table/table-interface.js.map +1 -1
  41. package/dist/collection/components/table/table.css +12 -38
  42. package/dist/collection/components/table/table.header.js +3 -86
  43. package/dist/collection/components/table/table.header.js.map +1 -1
  44. package/dist/collection/components/table/table.js +4 -92
  45. package/dist/collection/components/table/table.js.map +1 -1
  46. package/dist/collection/components/table/table.store.js +1 -1
  47. package/dist/collection/components/table/table.store.js.map +1 -1
  48. package/dist/collection/components/table/table.worker.js +3 -3
  49. package/dist/collection/components/table/table.worker.js.map +1 -1
  50. package/dist/collection/components/tabs/tab-group.css +9 -13
  51. package/dist/collection/components/tabs/tab-group.js +39 -43
  52. package/dist/collection/components/tabs/tab-group.js.map +1 -1
  53. package/dist/collection/components/tabs/tab.css +53 -14
  54. package/dist/collection/components/tabs/tab.js +8 -2
  55. package/dist/collection/components/tabs/tab.js.map +1 -1
  56. package/dist/collection/utils/drag.js +52 -4
  57. package/dist/collection/utils/drag.js.map +1 -1
  58. package/dist/components/drag.js +72 -0
  59. package/dist/components/drag.js.map +1 -0
  60. package/dist/components/icon-button.js +45 -5
  61. package/dist/components/icon-button.js.map +1 -1
  62. package/dist/components/index.d.ts +1 -0
  63. package/dist/components/index.js +1 -0
  64. package/dist/components/index.js.map +1 -1
  65. package/dist/components/nano-global-nav.js +2 -3
  66. package/dist/components/nano-global-nav.js.map +1 -1
  67. package/dist/components/nano-sortable.d.ts +11 -0
  68. package/dist/components/nano-sortable.js +691 -0
  69. package/dist/components/nano-sortable.js.map +1 -0
  70. package/dist/components/nano-split-pane.js +30 -45
  71. package/dist/components/nano-split-pane.js.map +1 -1
  72. package/dist/components/nano-tab-group.js +40 -44
  73. package/dist/components/nano-tab-group.js.map +1 -1
  74. package/dist/components/nano-tab.js +3 -3
  75. package/dist/components/nano-tab.js.map +1 -1
  76. package/dist/components/nav-item.js +4 -4
  77. package/dist/components/nav-item.js.map +1 -1
  78. package/dist/components/table.js +19 -147
  79. package/dist/components/table.js.map +1 -1
  80. package/dist/components/table.worker.js +1 -1
  81. package/dist/esm/drag-1723a4cc.js +72 -0
  82. package/dist/esm/drag-1723a4cc.js.map +1 -0
  83. package/dist/esm/index-dad5627b.js +4 -0
  84. package/dist/esm/loader.js +1 -1
  85. package/dist/esm/nano-components.js +1 -1
  86. package/dist/esm/nano-global-nav-user-profile_3.entry.js +4 -4
  87. package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
  88. package/dist/esm/nano-global-nav.entry.js +2 -3
  89. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  90. package/dist/esm/nano-icon-button_2.entry.js +41 -4
  91. package/dist/esm/nano-icon-button_2.entry.js.map +1 -1
  92. package/dist/esm/nano-sortable.entry.js +649 -0
  93. package/dist/esm/nano-sortable.entry.js.map +1 -0
  94. package/dist/esm/nano-split-pane.entry.js +30 -45
  95. package/dist/esm/nano-split-pane.entry.js.map +1 -1
  96. package/dist/esm/nano-tab-group.entry.js +39 -43
  97. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  98. package/dist/esm/nano-tab.entry.js +3 -3
  99. package/dist/esm/nano-tab.entry.js.map +1 -1
  100. package/dist/esm/{nano-table-ece658c4.js → nano-table-ec980076.js} +21 -148
  101. package/dist/esm/nano-table-ec980076.js.map +1 -0
  102. package/dist/esm/nano-table.entry.js +1 -1
  103. package/dist/esm/{table.worker-e89525d3.js → table.worker-b53db58e.js} +3 -3
  104. package/dist/esm/table.worker-b53db58e.js.map +1 -0
  105. package/dist/esm/{table.worker-f820b411.js → table.worker-bd51e29f.js} +1 -1
  106. package/dist/nano-components/nano-components.css +1 -1
  107. package/dist/nano-components/nano-components.esm.js +1 -1
  108. package/dist/nano-components/nano-components.esm.js.map +1 -1
  109. package/dist/nano-components/p-064af7d0.js +5 -0
  110. package/dist/nano-components/p-064af7d0.js.map +1 -0
  111. package/dist/nano-components/p-241baff8.entry.js +5 -0
  112. package/dist/nano-components/p-241baff8.entry.js.map +1 -0
  113. package/dist/nano-components/p-58b53239.entry.js.map +1 -1
  114. package/dist/nano-components/{p-bd2d0c58.js → p-806bcd46.js} +2 -2
  115. package/dist/nano-components/p-842cf127.js +5 -0
  116. package/dist/nano-components/p-842cf127.js.map +1 -0
  117. package/dist/nano-components/{p-272b2f59.entry.js → p-ace1ffc2.entry.js} +2 -2
  118. package/dist/nano-components/p-ace1ffc2.entry.js.map +1 -0
  119. package/dist/nano-components/p-b8e76fdf.entry.js +5 -0
  120. package/dist/nano-components/p-b8e76fdf.entry.js.map +1 -0
  121. package/dist/nano-components/{p-f820b411.js → p-bd51e29f.js} +1 -1
  122. package/dist/nano-components/p-d3de231c.entry.js +5 -0
  123. package/dist/nano-components/p-d3de231c.entry.js.map +1 -0
  124. package/dist/nano-components/{p-27d5d32b.entry.js → p-f591400b.entry.js} +2 -2
  125. package/dist/nano-components/p-f60fe933.entry.js +5 -0
  126. package/dist/nano-components/p-f60fe933.entry.js.map +1 -0
  127. package/dist/nano-components/p-f7535f45.entry.js +5 -0
  128. package/dist/nano-components/p-f7535f45.entry.js.map +1 -0
  129. package/dist/types/components/icon-button/icon-button.d.ts +14 -0
  130. package/dist/types/components/sortable/sortable.d.ts +204 -0
  131. package/dist/types/components/table/table-interface.d.ts +2 -4
  132. package/dist/types/components/table/table.d.ts +0 -30
  133. package/dist/types/components/table/table.header.d.ts +0 -3
  134. package/dist/types/components/tabs/tab-group.d.ts +0 -1
  135. package/dist/types/components/tabs/tab.d.ts +6 -0
  136. package/dist/types/components.d.ts +248 -28
  137. package/dist/types/utils/drag.d.ts +21 -1
  138. package/docs-json.json +562 -46
  139. package/docs-vscode.json +74 -5
  140. package/hydrate/index.js +877 -254
  141. package/package.json +2 -2
  142. package/dist/cjs/nano-table-0bac0552.js.map +0 -1
  143. package/dist/cjs/table.worker-13b5bc18.js.map +0 -1
  144. package/dist/esm/nano-table-ece658c4.js.map +0 -1
  145. package/dist/esm/table.worker-e89525d3.js.map +0 -1
  146. package/dist/nano-components/p-068bdd89.entry.js +0 -5
  147. package/dist/nano-components/p-068bdd89.entry.js.map +0 -1
  148. package/dist/nano-components/p-11025069.js +0 -5
  149. package/dist/nano-components/p-11025069.js.map +0 -1
  150. package/dist/nano-components/p-272b2f59.entry.js.map +0 -1
  151. package/dist/nano-components/p-64b56ee6.entry.js +0 -5
  152. package/dist/nano-components/p-64b56ee6.entry.js.map +0 -1
  153. package/dist/nano-components/p-a5a560e7.entry.js +0 -5
  154. package/dist/nano-components/p-a5a560e7.entry.js.map +0 -1
  155. package/dist/nano-components/p-a761ac89.entry.js +0 -5
  156. package/dist/nano-components/p-a761ac89.entry.js.map +0 -1
  157. /package/dist/nano-components/{p-27d5d32b.entry.js.map → p-806bcd46.js.map} +0 -0
  158. /package/dist/nano-components/{p-bd2d0c58.js.map → p-f591400b.entry.js.map} +0 -0
package/hydrate/index.js CHANGED
@@ -17720,13 +17720,12 @@ class GlobalNav {
17720
17720
  return;
17721
17721
  switch (this.env) {
17722
17722
  case 'prod':
17723
- this.userProfileUrl = 'https://community.nanoporetech.com/profile/me';
17723
+ this.userProfileUrl = 'https://myaccount.nanoporetech.com/';
17724
17724
  case 'local':
17725
17725
  case 'dev':
17726
17726
  case 'test':
17727
17727
  default:
17728
- this.userProfileUrl =
17729
- 'https://community-test.nanoporetech.com/profile/me';
17728
+ this.userProfileUrl = 'https://myaccount.nanoporetech.com/';
17730
17729
  break;
17731
17730
  }
17732
17731
  if (!this.getMyAccountData || this.myAccData) {
@@ -19651,7 +19650,7 @@ class Icon {
19651
19650
  }; }
19652
19651
  }
19653
19652
 
19654
- const iconButtonCss = ".sc-nano-icon-button-h{box-sizing:border-box}*.sc-nano-icon-button,*.sc-nano-icon-button::before,*.sc-nano-icon-button::after{box-sizing:border-box}[hidden].sc-nano-icon-button{display:none !important}.sc-nano-icon-button-h{display:inline-block;--border-radius:var(--nano-border-radius-medium, 4px);--active-color:#005c75;--hover-color:#007495;--nano-color-base:var(--color, #687576);--background:transparent;--padding:var(--nano-spacing-small, 8px)}.icon-button.sc-nano-icon-button{flex:0 0 auto;display:flex;align-items:center;border:none;border-radius:var(--border-radius);background:var(--background);font-size:inherit;color:var(--color);padding:var(--padding);cursor:pointer;-webkit-appearance:none;appearance:none;transition:box-shadow var(--nano-transition-fast, 0.1s) ease-in-out}.icon-button.sc-nano-icon-button:hover:not(.icon-button--disabled),.icon-button.sc-nano-icon-button:focus:not(.icon-button--disabled){color:var(--hover-color);--nano-color-base:var(--hover-color)}.icon-button.sc-nano-icon-button:active:not(.icon-button--disabled){color:var(--active-color);--nano-color-base:var(--active-color)}.icon-button.sc-nano-icon-button:focus{outline:none}.icon-button--disabled.sc-nano-icon-button{opacity:0.5;cursor:not-allowed;pointer-events:none}.focus-visible.icon-button.sc-nano-icon-button:focus{box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)))}";
19653
+ const iconButtonCss = "/*!@:host*/.sc-nano-icon-button-h{box-sizing:border-box}/*!@*,\n*::before,\n*::after*/*.sc-nano-icon-button,*.sc-nano-icon-button::before,*.sc-nano-icon-button::after{box-sizing:border-box}/*!@[hidden]*/[hidden].sc-nano-icon-button{display:none !important}/*!@:host*/.sc-nano-icon-button-h{--border-radius:var(--nano-border-radius-medium, 4px);--active-color:#005c75;--hover-color:#007495;--nano-color-base:var(--color, #687576);--background:transparent;--padding:var(--nano-spacing-small, 8px);--box-shadow:none;border-radius:var(--border-radius);display:inline-block}/*!@.icon-button*/.icon-button.sc-nano-icon-button{flex:0 0 auto;display:flex;align-items:center;border:none;border-radius:inherit;background:var(--background);font-size:inherit;color:var(--color);padding:var(--padding);cursor:pointer;-webkit-appearance:none;appearance:none;transition:box-shadow var(--nano-transition-fast, 0.1s) ease-in-out;box-shadow:var(--box-shadow)}/*!@.icon-button:hover:not(.icon-button--disabled), .icon-button:focus:not(.icon-button--disabled)*/.icon-button.sc-nano-icon-button:hover:not(.icon-button--disabled),.icon-button.sc-nano-icon-button:focus:not(.icon-button--disabled){color:var(--hover-color);--nano-color-base:var(--hover-color)}/*!@.icon-button:active:not(.icon-button--disabled)*/.icon-button.sc-nano-icon-button:active:not(.icon-button--disabled){color:var(--active-color);--nano-color-base:var(--active-color)}/*!@.icon-button:focus*/.icon-button.sc-nano-icon-button:focus{outline:none}/*!@.icon-button--disabled*/.icon-button--disabled.sc-nano-icon-button{opacity:0.5;cursor:not-allowed;pointer-events:none}/*!@.focus-visible.icon-button:focus*/.focus-visible.icon-button.sc-nano-icon-button:focus{box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)))}";
19655
19654
 
19656
19655
  /** Icons buttons are simple, icon-only buttons that can be used for actions and in toolbars.
19657
19656
  *
@@ -19661,6 +19660,20 @@ const iconButtonCss = ".sc-nano-icon-button-h{box-sizing:border-box}*.sc-nano-ic
19661
19660
  class IconButton {
19662
19661
  constructor(hostRef) {
19663
19662
  registerInstance(this, hostRef);
19663
+ this.handleClick = (ev) => {
19664
+ if (this.type === 'button')
19665
+ return;
19666
+ const formEl = this.findForm();
19667
+ if (formEl) {
19668
+ ev.preventDefault();
19669
+ const fakeButton = document.createElement('button');
19670
+ fakeButton.type = this.type;
19671
+ fakeButton.style.display = 'none';
19672
+ formEl.appendChild(fakeButton);
19673
+ fakeButton.click();
19674
+ fakeButton.remove();
19675
+ }
19676
+ };
19664
19677
  this.iconName = undefined;
19665
19678
  this.iconSrc = undefined;
19666
19679
  this.type = 'button';
@@ -19670,12 +19683,34 @@ class IconButton {
19670
19683
  this.showTooltip = false;
19671
19684
  this.disabled = false;
19672
19685
  this.href = undefined;
19686
+ this.rel = undefined;
19673
19687
  this.target = undefined;
19688
+ this.form = undefined;
19674
19689
  }
19675
19690
  /** Sets focus on the internal button */
19676
19691
  async setFocus() {
19677
19692
  this.button.focus();
19678
19693
  }
19694
+ /**
19695
+ * Finds the form element based on the provided `form` selector
19696
+ * or element reference provided.
19697
+ * @returns the found form element (if found)
19698
+ */
19699
+ findForm() {
19700
+ const { form, host } = this;
19701
+ if (!form)
19702
+ return host.closest('form');
19703
+ if (form instanceof HTMLFormElement) {
19704
+ return form;
19705
+ }
19706
+ if (typeof form === 'string') {
19707
+ const el = document.getElementById(form);
19708
+ if (el instanceof HTMLFormElement) {
19709
+ return el;
19710
+ }
19711
+ }
19712
+ return null;
19713
+ }
19679
19714
  componentDidLoad() {
19680
19715
  focusVisible.observe(this.button);
19681
19716
  }
@@ -19688,10 +19723,10 @@ class IconButton {
19688
19723
  }
19689
19724
  content() {
19690
19725
  const TagType = this.href === undefined ? 'button' : 'a';
19691
- return (hAsync(TagType, { part: "base", ref: (el) => (this.button = el), class: {
19726
+ return (hAsync(Host, { "aria-disabled": this.disabled ? 'true' : null }, hAsync(TagType, { onClick: this.handleClick, part: "base", ref: (el) => (this.button = el), class: {
19692
19727
  'icon-button': true,
19693
19728
  'icon-button--disabled': this.disabled,
19694
- }, "aria-label": this.label, name: this.name, value: this.value, href: this.href || undefined, target: this.href && this.target ? this.target : undefined, type: !this.href && this.type ? this.type : undefined }, hAsync("nano-icon", { name: this.iconName, src: this.iconSrc, "aria-hidden": "true", lazy: false, part: "icon" })));
19729
+ }, "aria-label": this.label, name: this.name, value: this.value, href: this.href || undefined, target: this.href && this.target ? this.target : undefined, rel: this.rel || undefined, type: !this.href && this.type ? this.type : undefined }, hAsync("nano-icon", { name: this.iconName, src: this.iconSrc, "aria-hidden": "true", lazy: false, part: "icon" }))));
19695
19730
  }
19696
19731
  render() {
19697
19732
  if (this.showTooltip) {
@@ -19699,9 +19734,10 @@ class IconButton {
19699
19734
  }
19700
19735
  return this.content();
19701
19736
  }
19737
+ get host() { return getElement(this); }
19702
19738
  static get style() { return iconButtonCss; }
19703
19739
  static get cmpMeta() { return {
19704
- "$flags$": 2,
19740
+ "$flags$": 9,
19705
19741
  "$tagName$": "nano-icon-button",
19706
19742
  "$members$": {
19707
19743
  "iconName": [1, "icon-name"],
@@ -19713,7 +19749,9 @@ class IconButton {
19713
19749
  "showTooltip": [4, "show-tooltip"],
19714
19750
  "disabled": [516],
19715
19751
  "href": [1],
19752
+ "rel": [1],
19716
19753
  "target": [1],
19754
+ "form": [1],
19717
19755
  "setFocus": [64]
19718
19756
  },
19719
19757
  "$listeners$": undefined,
@@ -20958,18 +20996,18 @@ class NavItem {
20958
20996
  }, 50);
20959
20997
  }
20960
20998
  else {
20961
- /* the secondadry panel is not opening via hover,
20999
+ /* the secondary panel is not opening via hover,
20962
21000
  scroll content into view, focus on it and add blur events */
20963
21001
  if (!this.fromHover) {
20964
- const panelio = new window.IntersectionObserver((data) => {
21002
+ const panelIO = new window.IntersectionObserver((data) => {
20965
21003
  if (data[0].boundingClientRect.top < 0) {
20966
21004
  this.secondaryDiv.scrollIntoView({
20967
21005
  behavior: 'smooth',
20968
21006
  });
20969
21007
  }
20970
- panelio.disconnect();
21008
+ panelIO.disconnect();
20971
21009
  }, { threshold: 1 });
20972
- panelio.observe(this.secondaryDiv);
21010
+ panelIO.observe(this.secondaryDiv);
20973
21011
  this.secondaryDiv.focus({ preventScroll: true });
20974
21012
  const focusableChild = getTabbableElements(this.secondaryDiv, true);
20975
21013
  if (focusableChild[0])
@@ -27366,6 +27404,732 @@ const waitForSlides = (host) => {
27366
27404
  });
27367
27405
  };
27368
27406
 
27407
+ /** Begins listening for dragging. */
27408
+ function drag(container, options) {
27409
+ const initialOffsets = {
27410
+ pageX: 0,
27411
+ pageY: 0,
27412
+ offsetX: 0,
27413
+ offsetY: 0,
27414
+ };
27415
+ function move(pointerEvent) {
27416
+ const dims = container.getBoundingClientRect();
27417
+ const defaultView = container.ownerDocument.defaultView;
27418
+ const offsetX = dims.left + defaultView.pageXOffset;
27419
+ const offsetY = dims.top + defaultView.pageYOffset;
27420
+ let x = 0;
27421
+ let y = 0;
27422
+ if (options.relative) {
27423
+ x =
27424
+ pointerEvent.pageX -
27425
+ initialOffsets.pageX -
27426
+ (offsetX - initialOffsets.offsetX);
27427
+ y =
27428
+ pointerEvent.pageY -
27429
+ initialOffsets.pageY -
27430
+ (offsetY - initialOffsets.offsetY);
27431
+ }
27432
+ else {
27433
+ x = pointerEvent.pageX - offsetX;
27434
+ y = pointerEvent.pageY - offsetY;
27435
+ }
27436
+ if (options === null || options === void 0 ? void 0 : options.onMove) {
27437
+ options.onMove(x, y);
27438
+ }
27439
+ }
27440
+ function stop() {
27441
+ document.removeEventListener('pointermove', move);
27442
+ document.removeEventListener('pointerup', stop);
27443
+ if (options === null || options === void 0 ? void 0 : options.onStop) {
27444
+ options.onStop();
27445
+ }
27446
+ }
27447
+ document.addEventListener('pointermove', move, { passive: true });
27448
+ document.addEventListener('pointerup', stop);
27449
+ if (!!!(options === null || options === void 0 ? void 0 : options.initialEvent))
27450
+ return;
27451
+ let initialEvent;
27452
+ if (options === null || options === void 0 ? void 0 : options.initialEvent['touches']) {
27453
+ initialEvent = {
27454
+ pageX: (options === null || options === void 0 ? void 0 : options.initialEvent).touches[0].pageX,
27455
+ pageY: (options === null || options === void 0 ? void 0 : options.initialEvent).touches[0].pageY,
27456
+ };
27457
+ }
27458
+ else {
27459
+ initialEvent = {
27460
+ pageX: (options === null || options === void 0 ? void 0 : options.initialEvent).pageX,
27461
+ pageY: (options === null || options === void 0 ? void 0 : options.initialEvent).pageY,
27462
+ };
27463
+ }
27464
+ const defaultView = container.ownerDocument.defaultView;
27465
+ const dims = container.getBoundingClientRect();
27466
+ initialOffsets.pageX = initialEvent.pageX;
27467
+ initialOffsets.pageY = initialEvent.pageY;
27468
+ initialOffsets.offsetX = dims.left + defaultView.pageXOffset;
27469
+ initialOffsets.offsetY = dims.top + defaultView.pageYOffset;
27470
+ // move(initialEvent);
27471
+ }
27472
+
27473
+ const sortableCss = "/*!@:host*/.sc-nano-sortable-h{box-sizing:border-box}/*!@*,\n*::before,\n*::after*/*.sc-nano-sortable,*.sc-nano-sortable::before,*.sc-nano-sortable::after{box-sizing:border-box}/*!@[hidden]*/[hidden].sc-nano-sortable{display:none !important}/*!@:host*/.sc-nano-sortable-h{position:relative;display:block}/*!@.sortable__live-region*/.sortable__live-region.sc-nano-sortable{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}";
27474
+
27475
+ // Orientation map to limit dragging to horizontal or vertical.
27476
+ const orientationMap = {
27477
+ horizontal: { x: 1, y: 0 },
27478
+ vertical: { x: 0, y: 1 },
27479
+ };
27480
+ let sortableIds = 0;
27481
+ /**
27482
+ * An accessible and flexible re-order / sort utility component.
27483
+ *
27484
+ *- Drag and drop via mouse, touch or keyboard
27485
+ *- Live announcements for screen readers
27486
+ *- Works with or without an explicit handle (although with is preferable)
27487
+
27488
+ * @part announcements - the a11y, live region. Visually hidden by default
27489
+ *
27490
+ * @slot - The default slot containing any items you might want to sort
27491
+ */
27492
+ class Sortable {
27493
+ handleItemSelectorChange() {
27494
+ this.refreshKeyboardHandles();
27495
+ }
27496
+ handleHandleSelectorChange() {
27497
+ this.refreshKeyboardHandles();
27498
+ this.attachMutationObserver();
27499
+ }
27500
+ handleCreateKeyboardHandleChange() {
27501
+ this.refreshKeyboardHandles();
27502
+ }
27503
+ handleSortableHostElement(_newVal, oldVal) {
27504
+ if (oldVal)
27505
+ this.removeEventHandlers(oldVal);
27506
+ this.addEventHandlers();
27507
+ this.refreshKeyboardHandles();
27508
+ this.attachMutationObserver();
27509
+ if (this.sortableHostElement) {
27510
+ // sortable host must have position relative
27511
+ this.sortableHostElement.style.position = 'relative';
27512
+ }
27513
+ }
27514
+ /** If sortable elements change dynamically, use this method to add handle controls to new elements */
27515
+ async refreshKeyboardHandles() {
27516
+ var _a, _b, _c;
27517
+ if (this.handleSelector) {
27518
+ if ((_a = this.keyboardHandleMap) === null || _a === void 0 ? void 0 : _a.size) {
27519
+ this.keyboardHandleMap.clear();
27520
+ }
27521
+ this.sortableHost
27522
+ .querySelectorAll(this.handleSelector)
27523
+ .forEach((handle) => {
27524
+ if (!handle.getAttribute('aria-describedby'))
27525
+ handle.setAttribute('aria-describedby', this.sortableId);
27526
+ const sortEle = handle.closest(this.itemSelector);
27527
+ if (sortEle)
27528
+ this.keyboardHandleMap.set(handle, sortEle);
27529
+ });
27530
+ return;
27531
+ }
27532
+ if ((_b = this.keyboardHandleMap) === null || _b === void 0 ? void 0 : _b.size) {
27533
+ (_c = this.keyboardHandleMap) === null || _c === void 0 ? void 0 : _c.forEach((_ele, handle) => handle.remove());
27534
+ this.keyboardHandleMap.clear();
27535
+ }
27536
+ this.sortableHost
27537
+ .querySelectorAll(this.itemSelector)
27538
+ .forEach((ele, i) => {
27539
+ const handle = this.createKeyboardHandle(i, ele);
27540
+ if (!handle) {
27541
+ console.error('`createKeyboardHandle` *must* return the handle element it creates');
27542
+ return;
27543
+ }
27544
+ this.keyboardHandleMap.set(handle, ele);
27545
+ handle.setAttribute('aria-describedby', this.sortableId);
27546
+ });
27547
+ }
27548
+ /**
27549
+ * Get instance of sortable host.
27550
+ * By default it is `nano-sortable` which can be overridden by property `sortableHostElement`
27551
+ */
27552
+ get sortableHost() {
27553
+ if (this.sortableHostElement)
27554
+ return this.sortableHostElement;
27555
+ return this.host;
27556
+ }
27557
+ /**
27558
+ * Queues aria messages which are then displayed in a 'live' region.
27559
+ * Messages are cleared after 10s
27560
+ * @param msg aria message to announce
27561
+ */
27562
+ addAriaMsg(msg) {
27563
+ this.ariaTextList = [...this.ariaTextList, msg];
27564
+ setTimeout(() => {
27565
+ const mIdx = this.ariaTextList.indexOf(msg);
27566
+ this.ariaTextList.splice(mIdx, 1);
27567
+ this.ariaTextList = [...this.ariaTextList];
27568
+ }, 10000);
27569
+ }
27570
+ /**
27571
+ * Try to stop text highlight whilst dragging
27572
+ * @param userSelect
27573
+ */
27574
+ updateUserSelectStyle(userSelect) {
27575
+ this.host.style.userSelect = userSelect;
27576
+ // @ts-ignore
27577
+ this.host.style.MozUserSelect = userSelect;
27578
+ // @ts-ignore
27579
+ this.host.style.msUserSelect = userSelect;
27580
+ this.host.style.webkitUserSelect = userSelect;
27581
+ }
27582
+ /**
27583
+ * Fast and simple hit test to check whether the center of a node intersects with the rectangle of any of the
27584
+ * given targets. Returns an array of matches.
27585
+ * @param node
27586
+ * @param targets
27587
+ * @returns all the items that currently intersect with the target node
27588
+ */
27589
+ hitTest(node, targets) {
27590
+ const { left: l, top: t, width: w, height: h, } = node.getBoundingClientRect();
27591
+ const x = l + w / 2;
27592
+ const y = t + h / 2;
27593
+ return targets.filter((item) => {
27594
+ const { left, right, top, bottom } = item.getBoundingClientRect();
27595
+ return !(x < left || x > right || y < top || y > bottom);
27596
+ });
27597
+ }
27598
+ /**
27599
+ * Returns a boolean indicating whether the node is currently in an animation.
27600
+ * @param node
27601
+ * @returns whether a node is currently animating or not
27602
+ */
27603
+ isAnimating(node) {
27604
+ return this.animatedElements.indexOf(node) !== -1;
27605
+ }
27606
+ /**
27607
+ * Triggers a CSS animation on a node with the given dx and dy. Used following dom updates to make it appear as
27608
+ * if nodes animate from their old to their new position in the dom. */
27609
+ animateNode(node, dx = 0, dy = 0) {
27610
+ if (!node.animate) {
27611
+ return;
27612
+ }
27613
+ // keep a stack of currently animating nodes to exclude as drag & drop targets.
27614
+ this.animatedElements.push(node);
27615
+ node.style.willChange = 'transform';
27616
+ // animate from dx/dy (old node position) to none (new node position)
27617
+ writeTask(() => {
27618
+ this.animationPromise = new Promise((resolve) => {
27619
+ node
27620
+ .animate([
27621
+ { transform: `translate3d(${dx}px, ${dy}px, 0)` },
27622
+ { transform: 'none' },
27623
+ ], this.animationTiming)
27624
+ .addEventListener('finish', () => {
27625
+ const index = this.animatedElements.indexOf(node);
27626
+ node.style.willChange = '';
27627
+ if (index !== -1) {
27628
+ // splice out when done to unlock as a valid target
27629
+ this.animatedElements.splice(index, 1);
27630
+ }
27631
+ resolve();
27632
+ delete this.animationPromise;
27633
+ }, { once: true });
27634
+ });
27635
+ });
27636
+ }
27637
+ /**
27638
+ * Inserts node at target to update sibling sorting. If the node precedes the target, it is inserted after it;
27639
+ * If it follows the target, it is inserted before it. This ensures any node can be dragged from the very
27640
+ * beginning to the very end and vice versa. The animateNode function is called for all nodes that moved because
27641
+ * of this dom update */
27642
+ insertAtTarget(node, target) {
27643
+ if (!node || !target)
27644
+ return;
27645
+ let offsets = [];
27646
+ if (this.animationEnabled) {
27647
+ offsets = this.sortableNodes.map((item) => ({
27648
+ x: item.offsetLeft,
27649
+ y: item.offsetTop,
27650
+ }));
27651
+ }
27652
+ if (!node.isConnected || !target.isConnected)
27653
+ return;
27654
+ if (this.dropzoneNodes.indexOf(target) > -1) {
27655
+ target.append(node);
27656
+ }
27657
+ else {
27658
+ const nodeComparison = node.compareDocumentPosition(target);
27659
+ let position;
27660
+ if (nodeComparison & this.host.DOCUMENT_POSITION_FOLLOWING) {
27661
+ position =
27662
+ target.parentNode === node.parentNode ? 'afterend' : 'beforebegin';
27663
+ }
27664
+ if (nodeComparison & this.host.DOCUMENT_POSITION_PRECEDING) {
27665
+ position =
27666
+ target.parentNode === node.parentNode ? 'beforebegin' : 'afterend';
27667
+ }
27668
+ if (position)
27669
+ target.insertAdjacentElement(position, node);
27670
+ }
27671
+ if (this.animationEnabled) {
27672
+ this.sortableNodes.forEach((sortableNode, i) => {
27673
+ const { x, y } = offsets[i];
27674
+ const dx = x - sortableNode.offsetLeft;
27675
+ const dy = y - sortableNode.offsetTop;
27676
+ if (dx !== 0 || dy !== 0) {
27677
+ this.animateNode(sortableNode, dx, dy);
27678
+ }
27679
+ });
27680
+ }
27681
+ }
27682
+ reset() {
27683
+ if (this.draggedElementClone !== undefined &&
27684
+ this.draggedElementClone.parentNode !== null) {
27685
+ this.draggedElementClone.parentNode.removeChild(this.draggedElementClone);
27686
+ }
27687
+ if (this.draggedElement &&
27688
+ this.draggedElement.parentNode &&
27689
+ this.draggedElementOrigin) {
27690
+ this.draggedElement.classList.remove(this.placeholderClass);
27691
+ }
27692
+ if (this.dropzoneActiveClass && this.dropzoneNodes.length) {
27693
+ this.dropzoneNodes.forEach((dze) => dze.classList.remove(this.dropzoneActiveClass));
27694
+ }
27695
+ delete this.draggedElementClone;
27696
+ delete this.draggedElement;
27697
+ this.dropzoneNodes = [];
27698
+ this.sortableNodes = [];
27699
+ this.animatedElements = [];
27700
+ this.dragRequestPending = false;
27701
+ this.updateUserSelectStyle('');
27702
+ }
27703
+ /**
27704
+ * Clones a given node to visually drag around. The original node is left in the same flow as its siblings.
27705
+ * Clone styles are added onto the style object directly, since the ::slotted()
27706
+ * selector can't universally target nodes that may be nested an unknown amount of shadow dom levels deep
27707
+ * @param node html node to clone
27708
+ * @returns the cloned html node
27709
+ */
27710
+ createClone(node) {
27711
+ const clone = node.cloneNode(true);
27712
+ if (node.id)
27713
+ clone.id = 'clone__' + clone.id;
27714
+ /**
27715
+ * Bugfix for table row sorting.
27716
+ * During dragging table rows shrink, so we manually set them width of original node.
27717
+ */
27718
+ Array.from(clone.children).forEach((nodeChild, index) => {
27719
+ const clonedNodeChild = nodeChild;
27720
+ const originalNodeChild = node.children.item(index);
27721
+ if (originalNodeChild) {
27722
+ clonedNodeChild.style.width = `${originalNodeChild.offsetWidth}px`;
27723
+ }
27724
+ });
27725
+ const { offsetLeft: x, offsetTop: y, offsetWidth: w, offsetHeight: h, } = node;
27726
+ Object.assign(clone.style, {
27727
+ position: 'absolute',
27728
+ left: `calc(${x}px - var(--grab-offset-x, 0px))`,
27729
+ top: `calc(${y}px - var(--grab-offset-y, 0px))`,
27730
+ height: this.dragResize ? `${h}px` : undefined,
27731
+ width: this.dragResize ? `${w}px` : undefined,
27732
+ willChange: 'transform,opacity',
27733
+ });
27734
+ clone.classList.add(this.draggedClass);
27735
+ return node.parentNode.appendChild(clone);
27736
+ }
27737
+ /// Event handlers ///
27738
+ removeEventHandlers(ele) {
27739
+ ele = ele || this.sortableHost;
27740
+ ele.removeEventListener('mousedown', this.handleTrack);
27741
+ ele.removeEventListener('touchstart', this.handleTrack);
27742
+ ele.removeEventListener('keydown', this.handleKeydown);
27743
+ }
27744
+ addEventHandlers(ele) {
27745
+ ele = ele || this.sortableHost;
27746
+ ele.addEventListener('mousedown', this.handleTrack);
27747
+ ele.addEventListener('touchstart', this.handleTrack);
27748
+ ele.addEventListener('keydown', this.handleKeydown);
27749
+ }
27750
+ /**
27751
+ * Watch for any changes in grab-able handle elements.
27752
+ */
27753
+ attachMutationObserver() {
27754
+ return;
27755
+ }
27756
+ handleKeydown(e) {
27757
+ const targetElement = e.target;
27758
+ let foundHandle;
27759
+ let sortEle;
27760
+ if (this.handleSelector) {
27761
+ foundHandle = targetElement.closest(this.handleSelector);
27762
+ sortEle = targetElement.closest(this.itemSelector);
27763
+ }
27764
+ else {
27765
+ sortEle = this.keyboardHandleMap.get(targetElement);
27766
+ foundHandle = targetElement;
27767
+ }
27768
+ // have we found a handle and matching sort element from the keydown element
27769
+ if (!foundHandle || !sortEle)
27770
+ return;
27771
+ const activateSort = (isActive) => {
27772
+ this.keyboardSortActive = isActive;
27773
+ this.draggedElement = isActive ? sortEle : undefined;
27774
+ sortEle.classList.toggle(this.draggedClass, isActive);
27775
+ foundHandle.classList.toggle(this.handleDraggedClass, isActive);
27776
+ if (isActive) {
27777
+ this.addAriaMsg(this.grabbedHelperText(sortEle));
27778
+ document.addEventListener('mousedown', () => activateSort(false), {
27779
+ once: true,
27780
+ });
27781
+ }
27782
+ else {
27783
+ this.addAriaMsg(this.droppedHelperText(sortEle));
27784
+ }
27785
+ };
27786
+ // start editing this element's order?
27787
+ if ([' ', 'Space', 'Enter'].includes(e.key)) {
27788
+ e.preventDefault();
27789
+ if (!this.keyboardSortActive) {
27790
+ // grabbed the element
27791
+ activateSort(true);
27792
+ this.sortableNodes =
27793
+ Array.from(this.sortableHost.querySelectorAll(this.itemSelector)) ||
27794
+ [];
27795
+ const nanoGrabbedEv = this.nanoGrabbed.emit({
27796
+ element: sortEle,
27797
+ index: this.sortableNodes.indexOf(sortEle),
27798
+ });
27799
+ if (nanoGrabbedEv.defaultPrevented) {
27800
+ activateSort(false);
27801
+ return;
27802
+ }
27803
+ }
27804
+ else {
27805
+ // dropped the element
27806
+ activateSort(false);
27807
+ this.nanoDropped.emit({ element: sortEle });
27808
+ }
27809
+ return;
27810
+ }
27811
+ if (!this.keyboardSortActive)
27812
+ return;
27813
+ // Tabbing away from this handle - deactivate
27814
+ if (['Escape', 'Tab'].includes(e.key))
27815
+ activateSort(false);
27816
+ let moveKeys = ['Home', 'End'];
27817
+ if (!this.orientation || this.orientation === 'horizontal')
27818
+ moveKeys = [...moveKeys, 'ArrowRight', 'ArrowLeft'];
27819
+ if (!this.orientation || this.orientation === 'vertical')
27820
+ moveKeys = [...moveKeys, 'ArrowUp', 'ArrowDown'];
27821
+ if (!moveKeys.includes(e.key))
27822
+ return;
27823
+ // move the element with the keyboard
27824
+ e.preventDefault();
27825
+ /** Collect all elements that have drag positions.
27826
+ * Both sortable elements and 'dropzones' (placeholders where items can always be placed) */
27827
+ this.sortableNodes =
27828
+ Array.from(this.sortableHost.querySelectorAll(this.itemSelector)) || [];
27829
+ this.dropzoneNodes =
27830
+ Array.from(this.sortableHost.querySelectorAll(this.dropzoneSelector)) ||
27831
+ [];
27832
+ const currIdx = this.sortableNodes.indexOf(this.draggedElement);
27833
+ let curDzIdx = -1;
27834
+ if (this.dropzoneNodes.length) {
27835
+ const curDropzone = this.draggedElement.closest(this.dropzoneSelector);
27836
+ curDzIdx = this.dropzoneNodes.indexOf(curDropzone);
27837
+ curDzIdx = curDzIdx > -1 ? curDzIdx : -1;
27838
+ }
27839
+ /** If we don't have a next / prev sortable element in our list, test to see if there's a dropzone instead */
27840
+ const prevEle = currIdx - 1 < 0 && curDzIdx > -1
27841
+ ? this.dropzoneNodes[curDzIdx - 1]
27842
+ : this.sortableNodes[currIdx - 1];
27843
+ const nextEle = currIdx + 1 === this.sortableNodes.length && curDzIdx > -1
27844
+ ? this.dropzoneNodes[curDzIdx + 1]
27845
+ : this.sortableNodes[currIdx + 1];
27846
+ if (e.key === 'Home') {
27847
+ this.insertAtTarget(this.draggedElement, this.sortableNodes[0]);
27848
+ }
27849
+ if (e.key === 'End') {
27850
+ this.insertAtTarget(this.draggedElement, this.sortableNodes[this.sortableNodes.length - 1]);
27851
+ }
27852
+ if (['ArrowRight', 'ArrowDown'].includes(e.key)) {
27853
+ this.insertAtTarget(this.draggedElement, nextEle);
27854
+ }
27855
+ if (['ArrowLeft', 'ArrowUp'].includes(e.key)) {
27856
+ this.insertAtTarget(this.draggedElement, prevEle);
27857
+ }
27858
+ this.finishOrder();
27859
+ this.draggedElement = sortEle;
27860
+ const focus = () => {
27861
+ requestAnimationFrame(() => {
27862
+ typeof foundHandle['setFocus'] === 'function'
27863
+ ? foundHandle.setFocus()
27864
+ : foundHandle.focus();
27865
+ });
27866
+ };
27867
+ // replace focus to handle so we don't 'drop' the element
27868
+ if (this.animationPromise)
27869
+ this.animationPromise.then(() => focus());
27870
+ else
27871
+ focus();
27872
+ }
27873
+ /**
27874
+ * Tracks a pointer from touchstart/mousedown to touchend/mouseup. Note that the start state is fired following
27875
+ * the first actual move event following a touchstart/mousedown */
27876
+ handleTrack(e) {
27877
+ if (this.dragRequestPending || (e.button && e.button !== 1))
27878
+ return;
27879
+ clearTimeout(this.mouseDownTimer);
27880
+ this.mouseDownTimer = window === null || window === void 0 ? void 0 : window.setTimeout(() => {
27881
+ if (!this.trackStart(e))
27882
+ return;
27883
+ this.addAriaMsg(this.grabbedHelperText(this.draggedElement));
27884
+ drag(this.sortableHost, {
27885
+ initialEvent: e,
27886
+ relative: true,
27887
+ onMove: (x, y) => {
27888
+ this.trackMove(x, y);
27889
+ },
27890
+ onStop: () => {
27891
+ this.nanoDropped.emit({ element: this.draggedElement });
27892
+ const didStop = () => {
27893
+ this.addAriaMsg(this.droppedHelperText(this.draggedElement));
27894
+ requestAnimationFrame(() => this.finishOrder());
27895
+ };
27896
+ if (this.animationPromise) {
27897
+ this.animationPromise.then(() => didStop());
27898
+ }
27899
+ else
27900
+ didStop();
27901
+ },
27902
+ });
27903
+ }, 100);
27904
+ document.addEventListener('mouseup', () => clearTimeout(this.mouseDownTimer), { once: true });
27905
+ }
27906
+ /**
27907
+ * Initialized a drag and drop sequence if a child node was clicked that matches the itemSelector property.
27908
+ * OR If a handleSelector is defined, a node matching this selector must be clicked instead
27909
+ * @returns boolean - whether tracking for this event should continue or not
27910
+ */
27911
+ trackStart(e) {
27912
+ const targetElement = e.target;
27913
+ let targetHandle;
27914
+ // If we have a handle set, return now if not being pressed
27915
+ if (this.handleSelector) {
27916
+ targetHandle = targetElement.closest(this.handleSelector);
27917
+ if (!targetHandle)
27918
+ return;
27919
+ targetHandle.classList.add(this.handleDraggedClass);
27920
+ }
27921
+ // Check that we've found the target element via itemSelector
27922
+ const node = targetElement.closest(this.itemSelector);
27923
+ if (!node)
27924
+ return false;
27925
+ this.sortableNodes =
27926
+ Array.from(this.sortableHost.querySelectorAll(this.itemSelector)) || [];
27927
+ const nanoGrabbedEv = this.nanoGrabbed.emit({
27928
+ element: node,
27929
+ index: this.sortableNodes.indexOf(node),
27930
+ });
27931
+ if (nanoGrabbedEv.defaultPrevented)
27932
+ return false;
27933
+ // Element found... start everything
27934
+ e.preventDefault();
27935
+ this.updateUserSelectStyle('none');
27936
+ this.dragRequestPending = true;
27937
+ this.draggedElement = node;
27938
+ this.dropzoneNodes =
27939
+ Array.from(this.sortableHost.querySelectorAll(this.dropzoneSelector)) ||
27940
+ [];
27941
+ this.draggedElementClone = this.createClone(node);
27942
+ this.draggedElementOrigin = node.nextSibling;
27943
+ this.animatedElements = [];
27944
+ this.draggedElement.classList.add(this.placeholderClass);
27945
+ return true;
27946
+ }
27947
+ /** Ends re-ordering */
27948
+ finishOrder() {
27949
+ if (!this.draggedElement)
27950
+ return;
27951
+ const updated = Array.from(this.sortableHost.querySelectorAll(this.itemSelector)).filter((ele) => ele !== this.draggedElementClone);
27952
+ const originalIndex = this.sortableNodes.indexOf(this.draggedElement);
27953
+ const targetIndex = updated.indexOf(this.draggedElement);
27954
+ if (this.handleSelector) {
27955
+ const targetHandle = this.draggedElement.querySelector(this.handleSelector);
27956
+ targetHandle.classList.remove(this.handleDraggedClass);
27957
+ }
27958
+ if (originalIndex !== targetIndex) {
27959
+ const orderChangeEv = this.nanoOrderChange.emit({
27960
+ element: this.draggedElement,
27961
+ originalIndex,
27962
+ targetIndex,
27963
+ });
27964
+ if (orderChangeEv.defaultPrevented) {
27965
+ /** Event was prevented, wait a moment to send element back to whence it came - gives a nicer visual queue */
27966
+ this.animationPromise = new Promise((resolve) => {
27967
+ setTimeout(() => {
27968
+ this.insertAtTarget(this.draggedElement, updated[originalIndex]);
27969
+ this.reset();
27970
+ this.dragRequestPending = false;
27971
+ resolve();
27972
+ }, 200);
27973
+ });
27974
+ return;
27975
+ }
27976
+ this.addAriaMsg(this.reorderHelperText(this.draggedElement, updated, targetIndex + 1));
27977
+ }
27978
+ this.reset();
27979
+ this.dragRequestPending = false;
27980
+ }
27981
+ /// Component lifecycle ///
27982
+ constructor(hostRef) {
27983
+ registerInstance(this, hostRef);
27984
+ this.nanoOrderChange = createEvent(this, "nanoOrderChange", 7);
27985
+ this.nanoGrabbed = createEvent(this, "nanoGrabbed", 7);
27986
+ this.nanoDropped = createEvent(this, "nanoDropped", 7);
27987
+ this.dragRequestPending = false;
27988
+ this.sortableNodes = [];
27989
+ this.dropzoneNodes = [];
27990
+ this.animatedElements = [];
27991
+ this.keyboardHandleMap = new Map();
27992
+ this.sortableId = `nano-sortable-${sortableIds++}`;
27993
+ /**
27994
+ * Moves the active node's clone to follow the pointer. The node that the clone intersects with (via hitTest) is
27995
+ * the insert point for updated sorting */
27996
+ this.trackMove = (x, y) => {
27997
+ if (!this.draggedElementClone) {
27998
+ return;
27999
+ }
28000
+ if (this.orientation) {
28001
+ x = x * orientationMap[this.orientation].x;
28002
+ y = y * orientationMap[this.orientation].y;
28003
+ }
28004
+ writeTask(() => {
28005
+ Object.assign(this.draggedElementClone.style, {
28006
+ transform: `translate3d(${x}px, ${y}px, 0)`,
28007
+ });
28008
+ });
28009
+ let target = this.hitTest(this.draggedElementClone, this.sortableNodes)[0];
28010
+ let activeDropzone;
28011
+ if (this.dropzoneSelector && this.dropzoneActiveClass) {
28012
+ readTask(() => {
28013
+ activeDropzone = this.draggedElement.closest(this.dropzoneSelector);
28014
+ writeTask(() => {
28015
+ this.dropzoneNodes
28016
+ .filter((dze) => dze !== activeDropzone)
28017
+ .forEach((dze) => dze.classList.remove(this.dropzoneActiveClass));
28018
+ activeDropzone.classList.add(this.dropzoneActiveClass);
28019
+ });
28020
+ });
28021
+ }
28022
+ // didn't find a target - let's test to see if we can use a drop-zone instead
28023
+ if (!target && this.dropzoneNodes.length) {
28024
+ target = this.hitTest(this.draggedElementClone, this.dropzoneNodes)[0];
28025
+ if (this.draggedElement.closest(this.dropzoneSelector) === target)
28026
+ return;
28027
+ }
28028
+ if (
28029
+ // if clone intersects with a valid target,
28030
+ target &&
28031
+ // other than its own origin,
28032
+ target !== this.draggedElement &&
28033
+ // and the target isn't currently animating, which causes false hit tests,
28034
+ !this.isAnimating(target)) {
28035
+ this.insertAtTarget(this.draggedElement, target);
28036
+ }
28037
+ };
28038
+ this.itemSelector = 'li';
28039
+ this.handleSelector = undefined;
28040
+ this.dropzoneSelector = undefined;
28041
+ this.helperText = 'Press "Space" or "Enter" to enable element reordering and use the arrow keys to reorder items.' +
28042
+ 'Press "Escape" to cancel reordering. Alternatively, use your mouse to drag / reorder.';
28043
+ this.itemDescriptor = (el) => `"${el.textContent.trim()}"`;
28044
+ this.grabbedHelperText = (el) => `${this.itemDescriptor(el)} grabbed`;
28045
+ this.droppedHelperText = (el) => `${this.itemDescriptor(el)} dropped`;
28046
+ this.reorderHelperText = (el, elements, position) => `The list has been reordered, ${this.itemDescriptor(el)} is now item ${position} of ${elements.length}`;
28047
+ this.createKeyboardHandle = (_number, _element) => {
28048
+ const handleTpl = /* html */ `
28049
+ <nano-icon-button
28050
+ slot="end"
28051
+ icon-name="light/arrows"
28052
+ class="nano-sortable__keyboard-handle visually-hidden"
28053
+ ></nano-icon-button>`;
28054
+ const div = globalThis.document.createElement('div');
28055
+ div.innerHTML = handleTpl;
28056
+ const handle = div.children[0];
28057
+ _element.append(handle);
28058
+ return handle;
28059
+ };
28060
+ this.sortableHostElement = undefined;
28061
+ this.animationEnabled = true;
28062
+ this.draggedClass = 'nano-sortable__dragged';
28063
+ this.handleDraggedClass = 'nano-sortable__handle-dragged';
28064
+ this.placeholderClass = 'nano-sortable__placeholder';
28065
+ this.dropzoneActiveClass = '';
28066
+ this.animationTiming = { duration: 200, easing: 'ease-out' };
28067
+ this.orientation = undefined;
28068
+ this.dragResize = false;
28069
+ this.keyboardSortActive = false;
28070
+ this.ariaTextList = [];
28071
+ this.handleTrack = this.handleTrack.bind(this);
28072
+ this.handleKeydown = this.handleKeydown.bind(this);
28073
+ this.refreshKeyboardHandles = this.refreshKeyboardHandles.bind(this);
28074
+ this.refreshKeyboardHandles = debounce$2(this.refreshKeyboardHandles, 500);
28075
+ }
28076
+ connectedCallback() {
28077
+ this.addEventHandlers();
28078
+ this.refreshKeyboardHandles();
28079
+ this.attachMutationObserver();
28080
+ }
28081
+ disconnectedCallback() {
28082
+ var _a;
28083
+ this.removeEventHandlers();
28084
+ (_a = this.host.querySelector(`#${this.sortableId}`)) === null || _a === void 0 ? void 0 : _a.remove();
28085
+ if (this.mutationObserver) {
28086
+ this.mutationObserver.disconnect();
28087
+ this.mutationObserver = undefined;
28088
+ }
28089
+ }
28090
+ render() {
28091
+ return (hAsync(Host, null, hAsync("div", { class: "sortable__live-region", "aria-live": "polite", "aria-relevant": "additions", "aria-atomic": "true", role: "log", part: "announcements" }, this.ariaTextList.map((str) => (hAsync("div", null, str)))), hAsync("slot", null)));
28092
+ }
28093
+ get host() { return getElement(this); }
28094
+ static get watchers() { return {
28095
+ "itemSelector": ["handleItemSelectorChange"],
28096
+ "handleSelector": ["handleHandleSelectorChange"],
28097
+ "createKeyboardHandle": ["handleCreateKeyboardHandleChange"],
28098
+ "sortableHostElement": ["handleSortableHostElement"]
28099
+ }; }
28100
+ static get style() { return sortableCss; }
28101
+ static get cmpMeta() { return {
28102
+ "$flags$": 9,
28103
+ "$tagName$": "nano-sortable",
28104
+ "$members$": {
28105
+ "itemSelector": [1, "item-selector"],
28106
+ "handleSelector": [1, "handle-selector"],
28107
+ "dropzoneSelector": [1, "dropzone-selector"],
28108
+ "helperText": [1, "helper-text"],
28109
+ "itemDescriptor": [16],
28110
+ "grabbedHelperText": [16],
28111
+ "droppedHelperText": [16],
28112
+ "reorderHelperText": [16],
28113
+ "createKeyboardHandle": [16],
28114
+ "sortableHostElement": [16],
28115
+ "animationEnabled": [4, "animation-enabled"],
28116
+ "draggedClass": [1, "dragged-class"],
28117
+ "handleDraggedClass": [1, "handle-dragged-class"],
28118
+ "placeholderClass": [1, "placeholder-class"],
28119
+ "dropzoneActiveClass": [1, "dropzone-active-class"],
28120
+ "animationTiming": [8, "animation-timing"],
28121
+ "orientation": [1],
28122
+ "dragResize": [4, "drag-resize"],
28123
+ "keyboardSortActive": [32],
28124
+ "ariaTextList": [32],
28125
+ "refreshKeyboardHandles": [64]
28126
+ },
28127
+ "$listeners$": undefined,
28128
+ "$lazyBundleId$": "-",
28129
+ "$attrsToReflect$": []
28130
+ }; }
28131
+ }
28132
+
27369
28133
  const spinnerCss = "/*!@:host*/.sc-nano-spinner-h{box-sizing:border-box}/*!@*,\n*::before,\n*::after*/*.sc-nano-spinner,*.sc-nano-spinner::before,*.sc-nano-spinner::after{box-sizing:border-box}/*!@[hidden]*/[hidden].sc-nano-spinner{display:none !important}/*!@:host*/.sc-nano-spinner-h{display:inline-block;--base-color-rgb:var(--nano-indicator-rgb, 84 140 175);--indicator-color:var(\n --nano-indicator-color,\n rgb(var(--base-color-rgb) / 100%)\n );--track-color:var(--nano-track-color, rgb(var(--base-color-rgb) / 20%));--overlay-color:var(--nano-layer-overlay-light, rgb(255 255 255 / 70%))}/*!@.spinner*/.spinner.sc-nano-spinner{display:flex;flex-direction:column;align-items:center;justify-content:center}/*!@:host([overlay]:not([overlay=false])) .spinner*/[overlay].sc-nano-spinner-h:not([overlay=false]) .spinner.sc-nano-spinner{position:absolute;inset:0}/*!@:host([overlay]:not([overlay=false])) .spinner .spinner__loader,\n:host([overlay]:not([overlay=false])) .spinner .spinner__text*/[overlay].sc-nano-spinner-h:not([overlay=false]) .spinner.sc-nano-spinner .spinner__loader.sc-nano-spinner,[overlay].sc-nano-spinner-h:not([overlay=false]) .spinner.sc-nano-spinner .spinner__text.sc-nano-spinner{z-index:1}/*!@.spinner__overlay*/.spinner__overlay.sc-nano-spinner{background:var(--overlay-color);position:absolute;inset:0;z-index:0;-webkit-backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px));backdrop-filter:blur(var(--nano-layer-overlay-blur, 3px))}/*!@.spinner__loader*/.spinner__loader.sc-nano-spinner{font-size:var(--spinner-scale, 1em)}/*!@.spinner__spin*/.spinner__spin.sc-nano-spinner{display:block;margin:auto;inline-size:1em;block-size:1em;border-radius:50%;border:solid 0.1em var(--track-color);border-block-start-color:var(--indicator-color);border-inline-end-color:var(--indicator-color);border-inline-start-color:var(--indicator-color);animation:1s linear infinite spin}/*!@.spinner__dna*/.spinner__dna.sc-nano-spinner{font-size:0.2286em;display:flex}/*!@.spinner__dnatrack*/.spinner__dnatrack.sc-nano-spinner{position:relative;padding-block:0;padding-inline:0.625em;block-size:4.375em;inline-size:0.625em;overflow:hidden}/*!@.spinner__dnatrack::before*/.spinner__dnatrack.sc-nano-spinner::before{content:\"\";position:absolute;inset-block-start:1.875em;inset-inline-start:50%;transform:translateX(-50%) translateZ(0);inline-size:0.0625em;inline-size:max(.0625em, 1px);block-size:0.625em;background:var(--track-color);animation:flex 1.5s linear infinite;transform-origin:center center}/*!@.spinner__dnatrack--2::before*/.spinner__dnatrack--2.sc-nano-spinner::before{animation:flex 1.5s -1.3s linear infinite}/*!@.spinner__dnatrack--3::before*/.spinner__dnatrack--3.sc-nano-spinner::before{animation:flex 1.5s -1.1s linear infinite}/*!@.spinner__dnatrack--4::before*/.spinner__dnatrack--4.sc-nano-spinner::before{animation:flex 1.5s -0.9s linear infinite}/*!@.spinner__dnatrack--5::before*/.spinner__dnatrack--5.sc-nano-spinner::before{animation:flex 1.5s -0.75s linear infinite}/*!@.spinner__dnadot*/.spinner__dnadot.sc-nano-spinner{position:absolute;inline-size:0.5em;block-size:0.5em;border-radius:50%;background:var(--indicator-color);animation:rotate 1.5s linear infinite;transform-origin:center center;inset-inline-start:50%;transform:translateX(-50%) translateZ(0) translateY(0)}/*!@.spinner__dnadot--2*/.spinner__dnadot--2.sc-nano-spinner{animation:rotate 1.5s -0.75s linear infinite}/*!@.spinner__dnadot--3*/.spinner__dnadot--3.sc-nano-spinner{animation:rotate 1.5s -1.3s linear infinite}/*!@.spinner__dnadot--4*/.spinner__dnadot--4.sc-nano-spinner{animation:rotate 1.5s -0.55s linear infinite}/*!@.spinner__dnadot--5*/.spinner__dnadot--5.sc-nano-spinner{animation:rotate 1.5s -1.1s linear infinite}/*!@.spinner__dnadot--6*/.spinner__dnadot--6.sc-nano-spinner{animation:rotate 1.5s -0.35s linear infinite}/*!@.spinner__dnadot--7*/.spinner__dnadot--7.sc-nano-spinner{animation:rotate 1.5s -0.9s linear infinite}/*!@.spinner__dnadot--8*/.spinner__dnadot--8.sc-nano-spinner{animation:rotate 1.5s -0.15s linear infinite}/*!@.spinner__dnadot--9*/.spinner__dnadot--9.sc-nano-spinner{animation:rotate 1.5s -0.75s linear infinite}/*!@.spinner__dnadot--10*/.spinner__dnadot--10.sc-nano-spinner{animation:rotate 1.5s 0s linear infinite}/*!@.spinner__text*/.spinner__text.sc-nano-spinner{text-align:center;position:relative;-webkit-margin-before:0.5em;margin-block-start:0.5em}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes rotate{0%,100%{transform:translateX(-50%) translateY(0) scale(1)}25%{transform:translateX(-50%) translateY(1.875em) scale(2)}50%{transform:translateX(-50%) translateY(3.75em) scale(1)}75%{transform:translateX(-50%) translateY(1.875em) scale(0.3)}}@keyframes flex{0%,100%{transform:translateX(-50%) scaleY(5)}25%{transform:translateX(-50%) scaleY(1)}50%{transform:translateX(-50%) scaleY(5)}75%{transform:translateX(-50%) scaleY(1)}}";
27370
28134
 
27371
28135
  /**
@@ -27401,24 +28165,6 @@ class Spinner {
27401
28165
  }; }
27402
28166
  }
27403
28167
 
27404
- function drag(container, onMove) {
27405
- function move(pointerEvent) {
27406
- const dims = container.getBoundingClientRect();
27407
- const defaultView = container.ownerDocument.defaultView;
27408
- const offsetX = dims.left + defaultView.pageXOffset;
27409
- const offsetY = dims.top + defaultView.pageYOffset;
27410
- const x = pointerEvent.pageX - offsetX;
27411
- const y = pointerEvent.pageY - offsetY;
27412
- onMove(x, y);
27413
- }
27414
- function stop() {
27415
- document.removeEventListener('pointermove', move);
27416
- document.removeEventListener('pointerup', stop);
27417
- }
27418
- document.addEventListener('pointermove', move, { passive: true });
27419
- document.addEventListener('pointerup', stop);
27420
- }
27421
-
27422
28168
  const splitPaneCss = "/*!@:host*/.sc-nano-split-pane-h{box-sizing:border-box}/*!@*,\n*::before,\n*::after*/*.sc-nano-split-pane,*.sc-nano-split-pane::before,*.sc-nano-split-pane::after{box-sizing:border-box}/*!@[hidden]*/[hidden].sc-nano-split-pane{display:none !important}/*!@:host*/.sc-nano-split-pane-h{--divider-width:12px;--divider-hit-area:14px;--min:0%;--max:100%;--background-color:#e4e6e8;--content-color:#918b86;display:grid}/*!@.start,\n.end*/.start.sc-nano-split-pane,.end.sc-nano-split-pane{overflow:hidden}/*!@.divider*/.divider.sc-nano-split-pane{flex:0 0 var(--divider-width);display:flex;position:relative;align-items:center;justify-content:center;background-color:var(--background-color);color:var(--content-color);z-index:1;font-size:0.8rem}/*!@.divider:focus*/.divider.sc-nano-split-pane:focus{outline:none}/*!@:host(:not([disabled])) .divider:focus-visible*/.sc-nano-split-pane-h:not([disabled]) .divider.sc-nano-split-pane:focus-visible{background-color:var(--nano-control-focus-color, rgba(144, 198, 231, 0.8))}/*!@:host([disabled]) .divider*/[disabled].sc-nano-split-pane-h .divider.sc-nano-split-pane{cursor:not-allowed}/*!@:host(:not([vertical]):not([disabled])) .divider*/.sc-nano-split-pane-h:not([vertical]):not([disabled]) .divider.sc-nano-split-pane{cursor:col-resize}/*!@:host(:not([vertical])) .divider::after*/.sc-nano-split-pane-h:not([vertical]) .divider.sc-nano-split-pane::after{display:flex;content:\"\";position:absolute;block-size:100%;inset-inline-start:calc(var(--divider-hit-area) / -2 + var(--divider-width) / 2);inline-size:var(--divider-hit-area)}/*!@:host([vertical])*/[vertical].sc-nano-split-pane-h{flex-direction:column}/*!@:host([vertical]:not([disabled])) .divider*/[vertical].sc-nano-split-pane-h:not([disabled]) .divider.sc-nano-split-pane{cursor:row-resize}/*!@:host([vertical]) .divider::after*/[vertical].sc-nano-split-pane-h .divider.sc-nano-split-pane::after{content:\"\";position:absolute;inline-size:100%;inset-block-start:calc(var(--divider-hit-area) / -2 + var(--divider-width) / 2);block-size:var(--divider-hit-area)}";
27423
28169
 
27424
28170
  /**
@@ -27458,33 +28204,35 @@ class SplitPane {
27458
28204
  }
27459
28205
  // Prevent text selection when dragging
27460
28206
  e.preventDefault();
27461
- drag(this.host, (x, y) => {
27462
- let newPositionInPixels = this.vertical ? y : x;
27463
- this.nanoDragging.emit(newPositionInPixels);
27464
- // Flip for end panels
27465
- if (this.primary === 'end') {
27466
- newPositionInPixels = this.size - newPositionInPixels;
27467
- }
27468
- // Check snap points
27469
- if (this.snap) {
27470
- const snaps = this.snap.split(' ');
27471
- snaps.forEach((value) => {
27472
- let snapPoint;
27473
- if (value.endsWith('%')) {
27474
- snapPoint = this.size * (parseFloat(value) / 100);
27475
- }
27476
- else {
27477
- snapPoint = parseFloat(value);
27478
- }
27479
- if (newPositionInPixels >= snapPoint - this.snapThreshold &&
27480
- newPositionInPixels <= snapPoint + this.snapThreshold) {
27481
- newPositionInPixels = snapPoint;
27482
- }
27483
- });
27484
- }
27485
- this.shouldAnimate = false;
27486
- this.position = clamp(this.pixelsToPercentage(newPositionInPixels), 0, 100);
27487
- requestAnimationFrame(() => (this.shouldAnimate = true));
28207
+ drag(this.host, {
28208
+ onMove: (x, y) => {
28209
+ let newPositionInPixels = this.vertical ? y : x;
28210
+ this.nanoDragging.emit(newPositionInPixels);
28211
+ // Flip for end panels
28212
+ if (this.primary === 'end') {
28213
+ newPositionInPixels = this.size - newPositionInPixels;
28214
+ }
28215
+ // Check snap points
28216
+ if (this.snap) {
28217
+ const snaps = this.snap.split(' ');
28218
+ snaps.forEach((value) => {
28219
+ let snapPoint;
28220
+ if (value.endsWith('%')) {
28221
+ snapPoint = this.size * (parseFloat(value) / 100);
28222
+ }
28223
+ else {
28224
+ snapPoint = parseFloat(value);
28225
+ }
28226
+ if (newPositionInPixels >= snapPoint - this.snapThreshold &&
28227
+ newPositionInPixels <= snapPoint + this.snapThreshold) {
28228
+ newPositionInPixels = snapPoint;
28229
+ }
28230
+ });
28231
+ }
28232
+ this.shouldAnimate = false;
28233
+ this.position = clamp(this.pixelsToPercentage(newPositionInPixels), 0, 100);
28234
+ requestAnimationFrame(() => (this.shouldAnimate = true));
28235
+ },
27488
28236
  });
27489
28237
  };
27490
28238
  this.handleKeyDown = (event) => {
@@ -28344,11 +29092,17 @@ class Sticker {
28344
29092
  }; }
28345
29093
  }
28346
29094
 
28347
- const tabCss = "/*!@:host*/.sc-nano-tab-h{box-sizing:border-box}/*!@*,\n*::before,\n*::after*/*.sc-nano-tab,*.sc-nano-tab::before,*.sc-nano-tab::after{box-sizing:border-box}/*!@[hidden]*/[hidden].sc-nano-tab{display:none !important}/*!@:host*/.sc-nano-tab-h{--focus-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));--padding:0.75rem 1rem;--bg-rgb:var(--nano-layer-bg-rgb, 255 255 255);--active-bg:rgb(var(--bg-rgb) / 100%);--inactive-bg:rgb(var(--bg-rgb) / 70%);--disabled-bg-rgb:var(--bg-rgb);--text-color:#007495;--disabled-text-color:#455556;--active-text-color:#0c5a71;--h-font-size:0.93em;--v-font-size:0.875em;--tab-spacing:0.5rem;--tab-divider-size:0;--tab-divider-color:#90c6e7;--tab-indicator-size:5px;display:inline-block}/*!@:host([direction=vertical])*/[direction=vertical].sc-nano-tab-h{--padding:1rem}/*!@:host([direction=vertical]) .nanotab*/[direction=vertical].sc-nano-tab-h .nanotab.sc-nano-tab{font-size:var(--v-font-size)}/*!@:host([direction=vertical]) .nanotab.nanotab--active*/[direction=vertical].sc-nano-tab-h .nanotab.nanotab--active.sc-nano-tab{font-weight:600;color:var(--active-text-color)}/*!@:host([direction=horizontal]) .nanotab*/[direction=horizontal].sc-nano-tab-h .nanotab.sc-nano-tab{font-size:var(--h-font-size);-webkit-margin-before:var(--tab-indicator-size);margin-block-start:var(--tab-indicator-size);-webkit-border-end:solid var(--tab-divider-size) var(--tab-divider-color);border-inline-end:solid var(--tab-divider-size) var(--tab-divider-color)}/*!@:host([direction=horizontal]) .nanotab.nanotab--active*/[direction=horizontal].sc-nano-tab-h .nanotab.nanotab--active.sc-nano-tab{-webkit-margin-before:0;margin-block-start:0;-webkit-border-before:solid var(--tab-indicator-size) var(--tab-indicator-color);border-block-start:solid var(--tab-indicator-size) var(--tab-indicator-color);background:var(--active-bg);color:var(--active-text-color)}/*!@.nanotab*/.nanotab.sc-nano-tab{font-family:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;-webkit-margin-end:var(--tab-spacing);margin-inline-end:var(--tab-spacing);padding:var(--padding);display:flex;block-size:100%;inline-size:auto;background:var(--inactive-bg);border-radius:var(--border-radius) var(--border-radius) 0 0;-webkit-user-select:none;user-select:none;cursor:pointer;overflow:visible;white-space:nowrap;align-items:center}/*!@.nanotab ::slotted(*)*/.nanotab .sc-nano-tab-s>*{display:flex;align-items:center}/*!@:host(:last-of-type) .nanotab*/.sc-nano-tab-h:last-of-type .nanotab.sc-nano-tab{-webkit-margin-end:0;margin-inline-end:0}/*!@.nanotab:hover:not(.tab--disabled)*/.nanotab.sc-nano-tab:hover:not(.tab--disabled){text-shadow:0 0 0.01px var(--text-color)}/*!@.nanotab:focus*/.nanotab.sc-nano-tab:focus{outline:none;outline-style:none;box-shadow:none;border-color:transparent}/*!@.nanotab:focus:not(.nanotab--disabled)*/.nanotab.sc-nano-tab:focus:not(.nanotab--disabled){box-shadow:var(--focus-shadow) inset}/*!@.nanotab--disabled*/.nanotab--disabled.sc-nano-tab{background:rgb(var(--disabled-bg-rgb)/100%);opacity:0.5;cursor:not-allowed;color:var(--disabled-text-color)}/*!@.nanotab__close-button*/.nanotab__close-button.sc-nano-tab{-webkit-margin-start:var(--nano-spacing-small, 8px);margin-inline-start:var(--nano-spacing-small, 8px);-webkit-appearance:none !important;appearance:none !important;--padding:var(--nano-spacing-xsmall, 4px) 0 var(--nano-spacing-xsmall, 4px) var(--nano-spacing-xsmall, 4px) !important}";
29095
+ const tabCss = "/*!@:host*/.sc-nano-tab-h{box-sizing:border-box}/*!@*,\n*::before,\n*::after*/*.sc-nano-tab,*.sc-nano-tab::before,*.sc-nano-tab::after{box-sizing:border-box}/*!@[hidden]*/[hidden].sc-nano-tab{display:none !important}/*!@:host*/.sc-nano-tab-h{--focus-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8)));--padding-v:0.75rem;--padding-h:1rem;--bg-rgb:var(--nano-layer-bg-rgb, 255 255 255);--active-bg:rgb(var(--bg-rgb) / 100%);--inactive-bg:rgb(var(--bg-rgb) / 70%);--disabled-bg-rgb:var(--bg-rgb);--text-color:#007495;--disabled-text-color:#455556;--active-text-color:#0c5a71;--h-font-size:0.93em;--v-font-size:0.875em;--tab-spacing:0.5rem;--tab-divider-size:0;--tab-divider-color:#90c6e7;--tab-indicator-size:5px;--border-radius:inherit;display:inline-block;cursor:pointer;border-radius:var(--border-radius)}/*!@:host([direction=vertical])*/[direction=vertical].sc-nano-tab-h{--padding-v:1rem;--padding-h:1rem}/*!@:host([direction=vertical]) .nanotab*/[direction=vertical].sc-nano-tab-h .nanotab.sc-nano-tab{font-size:var(--v-font-size)}/*!@:host([direction=vertical]) .nanotab.nanotab--active*/[direction=vertical].sc-nano-tab-h .nanotab.nanotab--active.sc-nano-tab{font-weight:600;color:var(--active-text-color)}/*!@:host(.nano-sortable__dragged)*/.nano-sortable__dragged.sc-nano-tab-h{box-shadow:none}/*!@:host(.nano-sortable__dragged) .nanotab*/.nano-sortable__dragged.sc-nano-tab-h .nanotab.sc-nano-tab{box-shadow:var(--nano-layer-shadow-large, 0 2px 8px rgba(0, 0, 0, 0.2))}/*!@:host([direction=horizontal]) .nanotab*/[direction=horizontal].sc-nano-tab-h .nanotab.sc-nano-tab{font-size:var(--h-font-size);-webkit-margin-before:var(--tab-indicator-size);margin-block-start:var(--tab-indicator-size);-webkit-border-end:solid var(--tab-divider-size) var(--tab-divider-color);border-inline-end:solid var(--tab-divider-size) var(--tab-divider-color)}/*!@:host([direction=horizontal]) .nanotab.nanotab--active*/[direction=horizontal].sc-nano-tab-h .nanotab.nanotab--active.sc-nano-tab{-webkit-margin-before:0;margin-block-start:0;-webkit-border-before:solid var(--tab-indicator-size) var(--tab-indicator-color);border-block-start:solid var(--tab-indicator-size) var(--tab-indicator-color);background:var(--active-bg);color:var(--active-text-color)}/*!@.nanotab*/.nanotab.sc-nano-tab{font-family:inherit;font-size:inherit;font-stretch:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;border-radius:var(--border-radius);-webkit-margin-end:var(--tab-spacing);margin-inline-end:var(--tab-spacing);padding-block:var(--padding-v);padding-inline:var(--padding-h);display:flex;block-size:100%;inline-size:auto;background:var(--inactive-bg);-webkit-user-select:none;user-select:none;overflow:visible;white-space:nowrap;align-items:center;position:relative}/*!@.nanotab ::slotted(*)*/.nanotab .sc-nano-tab-s>*{display:flex;align-items:center}/*!@.nanotab ::slotted(.nano-sortable__keyboard-handle)*/.nanotab .sc-nano-tab-s>.nano-sortable__keyboard-handle{position:absolute;inset-inline-end:-1em;background:var(--inactive-bg);z-index:1}/*!@:host(:last-of-type) .nanotab*/.sc-nano-tab-h:last-of-type .nanotab.sc-nano-tab{-webkit-margin-end:0;margin-inline-end:0}/*!@.nanotab--disabled*/.nanotab--disabled.sc-nano-tab{background:rgb(var(--disabled-bg-rgb)/100%);opacity:0.5;cursor:not-allowed;color:var(--disabled-text-color)}/*!@.nanotab--closable*/.nanotab--closable.sc-nano-tab{-webkit-padding-end:0;padding-inline-end:0}/*!@.nanotab__tab*/.nanotab__tab.sc-nano-tab{display:flex;border-radius:inherit}/*!@.nanotab__tab:hover:not(.tab--disabled)*/.nanotab__tab.sc-nano-tab:hover:not(.tab--disabled){text-shadow:0 0 0.01px var(--text-color)}/*!@.nanotab__tab:focus*/.nanotab__tab.sc-nano-tab:focus{outline:none;outline-style:none;box-shadow:none;border-color:transparent}/*!@.nanotab__tab::before*/.nanotab__tab.sc-nano-tab::before{content:\"\";position:absolute;inset:0;border-radius:inherit}/*!@.nanotab__tab:focus-visible:not(.nanotab--disabled)::before*/.nanotab__tab.sc-nano-tab:focus-visible:not(.nanotab--disabled)::before{box-shadow:var(--focus-shadow) inset}/*!@.nanotab--active .nanotab__tab:focus-visible:not(.nanotab--disabled)::before*/.nanotab--active.sc-nano-tab .nanotab__tab.sc-nano-tab:focus-visible:not(.nanotab--disabled)::before{box-shadow:var(--focus-shadow)}/*!@.nanotab__close-button*/.nanotab__close-button.sc-nano-tab{-webkit-margin-start:var(--nano-spacing-small, 8px);margin-inline-start:var(--nano-spacing-small, 8px);-webkit-margin-end:calc(var(--padding-h) / 2);margin-inline-end:calc(var(--padding-h) / 2);-webkit-appearance:none !important;appearance:none !important;--padding:var(--nano-spacing-xsmall, 4px) !important}";
28348
29096
 
28349
29097
  let id$2 = 0;
28350
29098
  /**
29099
+ * @slot start - start of the tab, content. Outside of the focusable element
29100
+ * @slot end - end of the tab, content. Outside of the focusable element
28351
29101
  * @slot - The tab's label.
29102
+ *
29103
+ * @part base - the wrapper around the whole control
29104
+ * @part tab - the main tab control that controls the active state
29105
+ * @part close-btn - the close button of the tab (if `closable=true`)
28352
29106
  */
28353
29107
  class Tab {
28354
29108
  constructor(hostRef) {
@@ -28376,12 +29130,12 @@ class Tab {
28376
29130
  this.tab.blur();
28377
29131
  }
28378
29132
  render() {
28379
- return (hAsync(Host, { id: this.host.id || this.tabId }, hAsync("div", { part: "base", ref: (el) => (this.tab = el), class: {
29133
+ return (hAsync(Host, { id: this.host.id || this.tabId }, hAsync("div", { part: "base", class: {
28380
29134
  nanotab: true,
28381
29135
  'nanotab--active': this.active,
28382
29136
  'nanotab--disabled': this.disabled,
28383
29137
  'nanotab--closable': this.closable,
28384
- }, role: "tab", "aria-disabled": this.disabled ? 'true' : 'false', "aria-selected": this.active ? 'true' : 'false', tabindex: this.disabled || !this.active ? '-1' : '0' }, hAsync("slot", null), this.closable && (hAsync("nano-icon-button", { label: "Close this tab", iconName: "light/times", class: "nanotab__close-button", onClick: this.handleCloseClick, onKeyDown: this.handleCloseKeydown, tabIndex: -1 })))));
29138
+ } }, hAsync("slot", { name: "start" }), hAsync("div", { part: "tab", ref: (el) => (this.tab = el), role: "tab", "aria-disabled": this.disabled ? 'true' : 'false', "aria-selected": this.active ? 'true' : 'false', tabindex: this.disabled || !this.active ? '-1' : '0', class: "nanotab__tab" }, hAsync("slot", null)), this.closable && !this.disabled && (hAsync("nano-icon-button", { label: "Close this tab", iconName: "light/times", class: "nanotab__close-button", onClick: this.handleCloseClick, onKeyDown: this.handleCloseKeydown, part: "close-btn" })), hAsync("slot", { name: "end" }))));
28385
29139
  }
28386
29140
  get host() { return getElement(this); }
28387
29141
  static get style() { return tabCss; }
@@ -28402,7 +29156,7 @@ class Tab {
28402
29156
  }; }
28403
29157
  }
28404
29158
 
28405
- const tabGroupCss = "/*!@:host*/.sc-nano-tab-group-h{box-sizing:border-box}/*!@*,\n*::before,\n*::after*/*.sc-nano-tab-group,*.sc-nano-tab-group::before,*.sc-nano-tab-group::after{box-sizing:border-box}/*!@[hidden]*/[hidden].sc-nano-tab-group{display:none !important}/*!@:host*/.sc-nano-tab-group-h{--indicator-transition:var(--nano-transition-fast, 0.3s);--indicator-color:#90c6e7;--indicator-track-color:#e4e6e8;--indicator-size:0;--border-radius:var(--nano-layer-border-radius, var(--nano-border-radius-medium, 4px));--background-rgb:var(--nano-layer-bg-rgb, 255 255 255);--scroll-btn-color:\"currentColor\";--content-padding:2rem 2.5rem;--content-bg:rgb(var(--background-rgb));--content-border-radius:var(--border-radius);--tabs-padding-start:2.5rem;--tabs-padding-end:2.5rem;--tabs-padding-top:0;--tabs-padding-bottom:0;--tabs-container-bg:\"transparent\";--tabs-bg-rgb:var(--background-rgb);--tab-border-radius:var(--border-radius);--tab-text-color:#007495;--shadow-opacity:0.1;--fade-transparency:0;display:block;position:relative;z-index:var(--nano-layer-index-raised, 5)}@media only screen and (max-width: 768px){/*!@:host*/.sc-nano-tab-group-h{--tabs-padding-start:1.5rem;--tabs-padding-end:1.5rem}}/*!@:host ::slotted(nano-tab)*/.sc-nano-tab-group-h .sc-nano-tab-group-s>nano-tab{--tab-indicator-color:var(--indicator-color);--bg-rgb:var(--tabs-bg-rgb);--border-radius:var(--tab-border-radius)}/*!@:host([placement=start]),\n:host([placement=end])*/[placement=start].sc-nano-tab-group-h,[placement=end].sc-nano-tab-group-h{--content-padding:1rem;--tabs-padding-start:0;--tabs-padding-end:0;--tabs-padding-top:0;--tabs-padding-bottom:0;--tab-text-color:#455556;--indicator-color:#007495;--indicator-size:2px}/*!@:host(.nano-color)*/.nano-color.sc-nano-tab-group-h{--indicator-color:var(--nano-color-tint, var(--nano-color-primary-tint, #2689a5));--tab-text-color:rgb(var(--nano-color-base-rgb) / 70%)}/*!@:host(.nano-color) ::slotted(nano-tab)*/.sc-nano-tab-group-h.nano-color .sc-nano-tab-group-s>nano-tab{--active-text-color:var(--nano-color-shade, var(--nano-color-primary-shade, #00637f))}/*!@.nano-tab-group*/.nano-tab-group.sc-nano-tab-group{display:flex;border-radius:0;width:100%;flex:inherit}/*!@.nano-tab-group__tabs*/.nano-tab-group__tabs.sc-nano-tab-group{display:flex;position:relative;width:100%}/*!@.nano-tab-group__active-tab-indicator*/.nano-tab-group__active-tab-indicator.sc-nano-tab-group{position:absolute;transition:var(--indicator-transition) transform ease, var(--indicator-transition) width ease}/*!@.nano-tab-group__body*/.nano-tab-group__body.sc-nano-tab-group{background:var(--content-bg)}/*!@.nano-tab-group:not(.focus-visible) ::slotted(nano-tab)*/.nano-tab-group:not(.focus-visible) .sc-nano-tab-group-s>nano-tab{--focus-shadow:none}/*!@.nano-tab-group .nano-tab-group__nav-container*/.nano-tab-group.sc-nano-tab-group .nano-tab-group__nav-container.sc-nano-tab-group{position:relative;display:flex;background:var(--tabs-container-bg)}/*!@.nano-tab-group button*/.nano-tab-group.sc-nano-tab-group button.sc-nano-tab-group{-webkit-appearance:none;appearance:none;background-color:transparent}/*!@.nano-tab-group__scroll-button*/.nano-tab-group__scroll-button.sc-nano-tab-group{display:flex;align-items:center;justify-content:center;position:absolute;inset-block:0;border:unset;z-index:2;transition:var(--nano-transition-fast, 0.3s) ease opacity;opacity:0;color:var(--scroll-btn-color)}/*!@.nano-tab-group__scroll-button:focus*/.nano-tab-group__scroll-button.sc-nano-tab-group:focus{outline:none}/*!@.nano-tab-group__scroll-button.is-shown*/.nano-tab-group__scroll-button.is-shown.sc-nano-tab-group{opacity:1}/*!@.nano-tab-group__scroll-button.focus-visible:focus*/.nano-tab-group__scroll-button.focus-visible.sc-nano-tab-group:focus{box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8))) inset}/*!@.nano-tab-group__scroll-button--left*/.nano-tab-group__scroll-button--left.sc-nano-tab-group{inset-inline-start:0}/*!@.nano-tab-group__scroll-button--right*/.nano-tab-group__scroll-button--right.sc-nano-tab-group{inset-inline-end:0}/*!@.nano-tab-group__scroll-button nano-icon*/.nano-tab-group__scroll-button.sc-nano-tab-group nano-icon.sc-nano-tab-group{font-size:16px}/*!@.nano-tab-group--top*/.nano-tab-group--top.sc-nano-tab-group{flex-direction:column}/*!@.nano-tab-group--top .nano-tab-group__nav-container::after*/.nano-tab-group--top.sc-nano-tab-group .nano-tab-group__nav-container.sc-nano-tab-group::after{content:\"\";width:86%;box-shadow:0 10px 40px 10px rgb(0 0 0/var(--shadow-opacity));height:10px;position:absolute;inset-inline-start:7%;inset-block-end:-10px;border-radius:10px;z-index:-1}/*!@.nano-tab-group--top .nano-tab-group__nav*/.nano-tab-group--top.sc-nano-tab-group .nano-tab-group__nav.sc-nano-tab-group{scrollbar-width:none;-ms-overflow-style:none;padding-inline:var(--tabs-padding-start) var(--tabs-padding-end);padding-block:var(--tabs-padding-top) var(--tabs-padding-bottom);display:flex;overflow-x:auto;overflow-y:hidden;transition:var(--nano-transition-medium, 0.5s) ease;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=\");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:linear-gradient(to left, rgb(0 0 0/var(--fade-transparency)) 0, rgb(0 0 0/var(--fade-transparency)) var(--tabs-padding-start), black calc(var(--tabs-padding-start) * 2), black calc(100% - var(--tabs-padding-end) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--tabs-padding-end)), 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(--tabs-padding-start), black calc(var(--tabs-padding-start) * 2), black calc(100% - var(--tabs-padding-end) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--tabs-padding-end)), rgb(0 0 0/var(--fade-transparency)));-webkit-mask-size:calc(100% + var(--tabs-padding-end) * 4);mask-size:calc(100% + var(--tabs-padding-end) * 4);-webkit-mask-position:calc(var(--tabs-padding-end) * -2);mask-position:calc(var(--tabs-padding-end) * -2)}/*!@.nano-tab-group--top .nano-tab-group__nav::-webkit-scrollbar*/.nano-tab-group--top.sc-nano-tab-group .nano-tab-group__nav.sc-nano-tab-group::-webkit-scrollbar{inline-size:0;block-size:0}/*!@.nano-tab-group--top .nano-tab-group__nav::after*/.nano-tab-group--top.sc-nano-tab-group .nano-tab-group__nav.sc-nano-tab-group::after{content:\" \";padding-inline:0 var(--tabs-padding-end);padding-block:var(--tabs-padding-top) var(--tabs-padding-bottom);line-height:1;flex:0 0 auto}/*!@.nano-tab-group--top.nano-tab-group--has-scroll-controls-left .nano-tab-group__nav*/.nano-tab-group--top.nano-tab-group--has-scroll-controls-left.sc-nano-tab-group .nano-tab-group__nav.sc-nano-tab-group{-webkit-mask-position:0;mask-position:0;-webkit-mask-size:calc(100% + var(--tabs-padding-end) * 2);mask-size:calc(100% + var(--tabs-padding-end) * 2)}/*!@.nano-tab-group--top.nano-tab-group--has-scroll-controls-right .nano-tab-group__nav*/.nano-tab-group--top.nano-tab-group--has-scroll-controls-right.sc-nano-tab-group .nano-tab-group__nav.sc-nano-tab-group{-webkit-mask-position:calc(var(--tabs-padding-end) * -1);mask-position:calc(var(--tabs-padding-end) * -1);-webkit-mask-size:calc(100% + var(--tabs-padding-end));mask-size:calc(100% + var(--tabs-padding-end))}/*!@.nano-tab-group--top.nano-tab-group--has-scroll-controls-left.nano-tab-group--has-scroll-controls-right .nano-tab-group__nav*/.nano-tab-group--top.nano-tab-group--has-scroll-controls-left.nano-tab-group--has-scroll-controls-right.sc-nano-tab-group .nano-tab-group__nav.sc-nano-tab-group{-webkit-mask-size:100%;mask-size:100%;-webkit-mask-position:0;mask-position:0}/*!@.nano-tab-group--top .nano-tab-group__tabs*/.nano-tab-group--top.sc-nano-tab-group .nano-tab-group__tabs.sc-nano-tab-group{flex:1 1 auto;position:relative;flex-direction:row;text-align:center;color:var(--tab-text-color);width:auto}/*!@.nano-tab-group--top .nano-tab-group__active-tab-indicator*/.nano-tab-group--top.sc-nano-tab-group .nano-tab-group__active-tab-indicator.sc-nano-tab-group{inset-block-end:-2px;-webkit-border-after:solid var(--indicator-size) var(--indicator-color);border-block-end:solid var(--indicator-size) var(--indicator-color)}/*!@.nano-tab-group--top .nano-tab-group__body*/.nano-tab-group--top.sc-nano-tab-group .nano-tab-group__body.sc-nano-tab-group{order:2;background:var(--content-bg);position:relative;overflow:hidden;width:auto;display:flex;justify-content:center;padding:var(--content-padding);border-radius:var(--content-border-radius);flex:1 1 auto}/*!@.nano-tab-group--start*/.nano-tab-group--start.sc-nano-tab-group{flex-direction:row}/*!@.nano-tab-group--start .nano-tab-group__tabs*/.nano-tab-group--start.sc-nano-tab-group .nano-tab-group__tabs.sc-nano-tab-group{flex:0 0 auto;flex-direction:column;color:var(--tab-text-color);background:rgb(var(--tabs-bg-rgb));-webkit-border-start:solid var(--indicator-size) var(--indicator-track-color);border-inline-start:solid var(--indicator-size) var(--indicator-track-color);text-align:start}/*!@.nano-tab-group--start .nano-tab-group__active-tab-indicator*/.nano-tab-group--start.sc-nano-tab-group .nano-tab-group__active-tab-indicator.sc-nano-tab-group{inset-inline-start:-2px;-webkit-border-start:solid var(--indicator-size) var(--indicator-color);border-inline-start:solid var(--indicator-size) var(--indicator-color)}/*!@.nano-tab-group--start .nano-tab-group__body*/.nano-tab-group--start.sc-nano-tab-group .nano-tab-group__body.sc-nano-tab-group{flex:1 1 auto;order:2;padding:var(--content-padding);overflow:hidden;border-start-start-radius:0;border-start-end-radius:var(--content-border-radius);border-end-end-radius:var(--content-border-radius);border-end-start-radius:0}";
29159
+ const tabGroupCss = "/*!@:host*/.sc-nano-tab-group-h{box-sizing:border-box}/*!@*,\n*::before,\n*::after*/*.sc-nano-tab-group,*.sc-nano-tab-group::before,*.sc-nano-tab-group::after{box-sizing:border-box}/*!@[hidden]*/[hidden].sc-nano-tab-group{display:none !important}/*!@:host*/.sc-nano-tab-group-h{--indicator-transition:var(--nano-transition-fast, 0.3s);--indicator-color:#90c6e7;--indicator-track-color:#e4e6e8;--indicator-size:0;--border-radius:var(--nano-layer-border-radius, var(--nano-border-radius-medium, 4px));--background-rgb:var(--nano-layer-bg-rgb, 255 255 255);--scroll-btn-color:\"currentColor\";--content-padding:2rem 2.5rem;--content-bg:rgb(var(--background-rgb));--content-border-radius:var(--border-radius);--tabs-padding-start:2.5rem;--tabs-padding-end:2.5rem;--tabs-padding-top:0;--tabs-padding-bottom:0;--tabs-container-bg:\"transparent\";--tabs-bg-rgb:var(--background-rgb);--tab-border-radius:var(--border-radius) var(--border-radius) 0 0;--tab-text-color:#007495;--shadow-opacity:0.1;--fade-transparency:0;display:block;position:relative;z-index:var(--nano-layer-index-raised, 5)}@media only screen and (max-width: 768px){/*!@:host*/.sc-nano-tab-group-h{--tabs-padding-start:1.5rem;--tabs-padding-end:1.5rem}}/*!@:host ::slotted(nano-tab)*/.sc-nano-tab-group-h .sc-nano-tab-group-s>nano-tab{--tab-indicator-color:var(--indicator-color);--bg-rgb:var(--tabs-bg-rgb);--border-radius:var(--tab-border-radius);--grab-offset-x:var(--tabs-padding-start)}/*!@:host([placement=start])*/[placement=start].sc-nano-tab-group-h{--content-border-radius:0 var(--border-radius) var(--border-radius) 0;--content-padding:1rem;--tab-border-radius:0;--tabs-padding-start:0;--tabs-padding-end:0;--tabs-padding-top:0;--tabs-padding-bottom:0;--tab-text-color:#455556;--indicator-color:#007495;--indicator-size:2px}/*!@:host(.nano-color)*/.nano-color.sc-nano-tab-group-h{--indicator-color:var(--nano-color-tint, var(--nano-color-primary-tint, #2689a5));--tab-text-color:rgb(var(--nano-color-base-rgb) / 70%)}/*!@:host(.nano-color) ::slotted(nano-tab)*/.sc-nano-tab-group-h.nano-color .sc-nano-tab-group-s>nano-tab{--active-text-color:var(--nano-color-shade, var(--nano-color-primary-shade, #00637f))}/*!@.nano-tab-group*/.nano-tab-group.sc-nano-tab-group{display:flex;border-radius:0;width:100%;flex:inherit}/*!@.nano-tab-group__tabs*/.nano-tab-group__tabs.sc-nano-tab-group{display:flex;position:relative;width:100%}/*!@.nano-tab-group__active-tab-indicator*/.nano-tab-group__active-tab-indicator.sc-nano-tab-group{position:absolute;transition:var(--indicator-transition) transform ease, var(--indicator-transition) width ease}/*!@.nano-tab-group__body*/.nano-tab-group__body.sc-nano-tab-group{background:var(--content-bg)}/*!@.nano-tab-group .nano-tab-group__nav-container*/.nano-tab-group.sc-nano-tab-group .nano-tab-group__nav-container.sc-nano-tab-group{position:relative;display:flex;background:var(--tabs-container-bg)}/*!@.nano-tab-group button*/.nano-tab-group.sc-nano-tab-group button.sc-nano-tab-group{-webkit-appearance:none;appearance:none;background-color:transparent}/*!@.nano-tab-group__scroll-button*/.nano-tab-group__scroll-button.sc-nano-tab-group{display:flex;align-items:center;justify-content:center;position:absolute;inset-block:0;border:unset;z-index:2;transition:var(--nano-transition-fast, 0.3s) ease opacity;opacity:0;color:var(--scroll-btn-color)}/*!@.nano-tab-group__scroll-button:focus*/.nano-tab-group__scroll-button.sc-nano-tab-group:focus{outline:none}/*!@.nano-tab-group__scroll-button.is-shown*/.nano-tab-group__scroll-button.is-shown.sc-nano-tab-group{opacity:1}/*!@.nano-tab-group__scroll-button:focus-visible*/.nano-tab-group__scroll-button.sc-nano-tab-group: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}/*!@.nano-tab-group__scroll-button--left*/.nano-tab-group__scroll-button--left.sc-nano-tab-group{inset-inline-start:0}/*!@.nano-tab-group__scroll-button--right*/.nano-tab-group__scroll-button--right.sc-nano-tab-group{inset-inline-end:0}/*!@.nano-tab-group__scroll-button nano-icon*/.nano-tab-group__scroll-button.sc-nano-tab-group nano-icon.sc-nano-tab-group{font-size:16px}/*!@.nano-tab-group--top*/.nano-tab-group--top.sc-nano-tab-group{flex-direction:column}/*!@.nano-tab-group--top .nano-tab-group__nav-container::after*/.nano-tab-group--top.sc-nano-tab-group .nano-tab-group__nav-container.sc-nano-tab-group::after{content:\"\";width:86%;box-shadow:0 10px 40px 10px rgb(0 0 0/var(--shadow-opacity));height:10px;position:absolute;inset-inline-start:7%;inset-block-end:-10px;border-radius:10px;z-index:-1}/*!@.nano-tab-group--top .nano-tab-group__nav*/.nano-tab-group--top.sc-nano-tab-group .nano-tab-group__nav.sc-nano-tab-group{scrollbar-width:none;-ms-overflow-style:none;padding-inline:var(--tabs-padding-start) var(--tabs-padding-end);padding-block:var(--tabs-padding-top) var(--tabs-padding-bottom);display:flex;overflow-x:auto;overflow-y:hidden;transition:var(--nano-transition-medium, 0.5s) ease;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=\");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:linear-gradient(to left, rgb(0 0 0/var(--fade-transparency)) 0, rgb(0 0 0/var(--fade-transparency)) var(--tabs-padding-start), black calc(var(--tabs-padding-start) * 2), black calc(100% - var(--tabs-padding-end) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--tabs-padding-end)), 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(--tabs-padding-start), black calc(var(--tabs-padding-start) * 2), black calc(100% - var(--tabs-padding-end) * 2), rgb(0 0 0/var(--fade-transparency)) calc(100% - var(--tabs-padding-end)), rgb(0 0 0/var(--fade-transparency)));-webkit-mask-size:calc(100% + var(--tabs-padding-end) * 4);mask-size:calc(100% + var(--tabs-padding-end) * 4);-webkit-mask-position:calc(var(--tabs-padding-end) * -2);mask-position:calc(var(--tabs-padding-end) * -2)}/*!@.nano-tab-group--top .nano-tab-group__nav::-webkit-scrollbar*/.nano-tab-group--top.sc-nano-tab-group .nano-tab-group__nav.sc-nano-tab-group::-webkit-scrollbar{inline-size:0;block-size:0}/*!@.nano-tab-group--top .nano-tab-group__nav::after*/.nano-tab-group--top.sc-nano-tab-group .nano-tab-group__nav.sc-nano-tab-group::after{content:\" \";padding-inline:0 var(--tabs-padding-end);padding-block:var(--tabs-padding-top) var(--tabs-padding-bottom);line-height:1;flex:0 0 auto}/*!@.nano-tab-group--top.nano-tab-group--has-scroll-controls-left .nano-tab-group__nav*/.nano-tab-group--top.nano-tab-group--has-scroll-controls-left.sc-nano-tab-group .nano-tab-group__nav.sc-nano-tab-group{-webkit-mask-position:0;mask-position:0;-webkit-mask-size:calc(100% + var(--tabs-padding-end) * 2);mask-size:calc(100% + var(--tabs-padding-end) * 2)}/*!@.nano-tab-group--top.nano-tab-group--has-scroll-controls-right .nano-tab-group__nav*/.nano-tab-group--top.nano-tab-group--has-scroll-controls-right.sc-nano-tab-group .nano-tab-group__nav.sc-nano-tab-group{-webkit-mask-position:calc(var(--tabs-padding-end) * -1);mask-position:calc(var(--tabs-padding-end) * -1);-webkit-mask-size:calc(100% + var(--tabs-padding-end));mask-size:calc(100% + var(--tabs-padding-end))}/*!@.nano-tab-group--top.nano-tab-group--has-scroll-controls-left.nano-tab-group--has-scroll-controls-right .nano-tab-group__nav*/.nano-tab-group--top.nano-tab-group--has-scroll-controls-left.nano-tab-group--has-scroll-controls-right.sc-nano-tab-group .nano-tab-group__nav.sc-nano-tab-group{-webkit-mask-size:100%;mask-size:100%;-webkit-mask-position:0;mask-position:0}/*!@.nano-tab-group--top .nano-tab-group__tabs*/.nano-tab-group--top.sc-nano-tab-group .nano-tab-group__tabs.sc-nano-tab-group{flex:1 1 auto;position:relative;flex-direction:row;text-align:center;color:var(--tab-text-color);width:auto}/*!@.nano-tab-group--top .nano-tab-group__active-tab-indicator*/.nano-tab-group--top.sc-nano-tab-group .nano-tab-group__active-tab-indicator.sc-nano-tab-group{inset-block-end:-2px;-webkit-border-after:solid var(--indicator-size) var(--indicator-color);border-block-end:solid var(--indicator-size) var(--indicator-color)}/*!@.nano-tab-group--top .nano-tab-group__body*/.nano-tab-group--top.sc-nano-tab-group .nano-tab-group__body.sc-nano-tab-group{order:2;background:var(--content-bg);position:relative;overflow:hidden;width:auto;display:flex;justify-content:center;padding:var(--content-padding);border-radius:var(--content-border-radius);flex:1 1 auto}/*!@.nano-tab-group--start*/.nano-tab-group--start.sc-nano-tab-group{flex-direction:row}/*!@.nano-tab-group--start .nano-tab-group__tabs*/.nano-tab-group--start.sc-nano-tab-group .nano-tab-group__tabs.sc-nano-tab-group{flex:0 0 auto;flex-direction:column;color:var(--tab-text-color);background:rgb(var(--tabs-bg-rgb));-webkit-border-start:solid var(--indicator-size) var(--indicator-track-color);border-inline-start:solid var(--indicator-size) var(--indicator-track-color);text-align:start}/*!@.nano-tab-group--start .nano-tab-group__active-tab-indicator*/.nano-tab-group--start.sc-nano-tab-group .nano-tab-group__active-tab-indicator.sc-nano-tab-group{inset-inline-start:-2px;-webkit-border-start:solid var(--indicator-size) var(--indicator-color);border-inline-start:solid var(--indicator-size) var(--indicator-color)}/*!@.nano-tab-group--start .nano-tab-group__body*/.nano-tab-group--start.sc-nano-tab-group .nano-tab-group__body.sc-nano-tab-group{flex:1 1 auto;order:2;padding:var(--content-padding);overflow:hidden;border-radius:var(--content-border-radius)}";
28406
29160
 
28407
29161
  /**
28408
29162
  * A traditional tab implementation. It nests `nano-tab` and `nano-tab-content` sub-components.
@@ -28449,6 +29203,9 @@ class TabGroup {
28449
29203
  this.setActiveTab(tab);
28450
29204
  };
28451
29205
  this.handleKeyDown = (event) => {
29206
+ const activeEl = document.activeElement;
29207
+ if (!activeEl || activeEl.tagName.toLowerCase() !== 'nano-tab')
29208
+ return;
28452
29209
  // Activate a tab
28453
29210
  if (['Enter', ' '].includes(event.key)) {
28454
29211
  const target = event.target;
@@ -28456,45 +29213,49 @@ class TabGroup {
28456
29213
  if (tab) {
28457
29214
  this.setActiveTab(tab);
28458
29215
  event.preventDefault();
29216
+ event.stopPropagation();
28459
29217
  }
28460
29218
  }
28461
29219
  // Move focus left or right
28462
- if ([
29220
+ if (![
28463
29221
  'ArrowLeft',
28464
29222
  'ArrowRight',
28465
29223
  'ArrowUp',
28466
29224
  'ArrowDown',
28467
29225
  'Home',
28468
29226
  'End',
28469
- ].includes(event.key)) {
28470
- const activeEl = document.activeElement;
28471
- if (activeEl && activeEl.tagName.toLowerCase() === 'nano-tab') {
28472
- const tabs = this.getAllActiveTabs;
28473
- let index = tabs.indexOf(activeEl);
28474
- if (event.key === 'Home') {
28475
- index = 0;
28476
- }
28477
- else if (event.key === 'End') {
28478
- index = tabs.length - 1;
28479
- }
28480
- else if ((this.isRtl && event.key === 'ArrowRight') ||
28481
- (!this.isRtl && event.key === 'ArrowLeft')) {
28482
- index = Math.max(0, index - 1);
28483
- }
28484
- else if ((this.isRtl && event.key === 'ArrowLeft') ||
28485
- (!this.isRtl && event.key === 'ArrowRight')) {
28486
- index = Math.min(tabs.length - 1, index + 1);
28487
- }
28488
- tabs[index].setFocus();
28489
- if (['top'].includes(this.placement)) {
28490
- scrollIntoView(tabs[index], this.nav, 'horizontal', 'center');
28491
- }
28492
- // need to stop bubbling otherwise it will focus on parent tabs if nested
28493
- event.stopPropagation();
28494
- // stop the browser moving about
28495
- event.preventDefault();
29227
+ ].includes(event.key))
29228
+ return;
29229
+ const tabs = this.getAllActiveTabs;
29230
+ let index = tabs.indexOf(activeEl);
29231
+ if (event.key === 'Home')
29232
+ index = 0;
29233
+ if (event.key === 'End')
29234
+ index = tabs.length - 1;
29235
+ if (this.placement === 'top') {
29236
+ if ((this.isRtl && event.key === 'ArrowRight') ||
29237
+ (!this.isRtl && event.key === 'ArrowLeft')) {
29238
+ index = Math.max(0, index - 1);
28496
29239
  }
29240
+ if ((this.isRtl && event.key === 'ArrowLeft') ||
29241
+ (!this.isRtl && event.key === 'ArrowRight')) {
29242
+ index = Math.min(tabs.length - 1, index + 1);
29243
+ }
29244
+ }
29245
+ if (this.placement === 'start') {
29246
+ if (event.key === 'ArrowUp')
29247
+ index = Math.max(0, index - 1);
29248
+ if (event.key === 'ArrowDown')
29249
+ index = Math.min(tabs.length - 1, index + 1);
28497
29250
  }
29251
+ tabs[index].setFocus();
29252
+ if (this.placement === 'top') {
29253
+ scrollIntoView(tabs[index], this.nav, 'horizontal', 'center');
29254
+ }
29255
+ // need to stop bubbling otherwise it will focus on parent tabs if nested
29256
+ event.stopPropagation();
29257
+ // stop the browser moving about
29258
+ event.preventDefault();
28498
29259
  };
28499
29260
  this.handleTabScroll = () => {
28500
29261
  if (!this.hasScrollControls) {
@@ -28785,11 +29546,6 @@ class TabGroup {
28785
29546
  }
28786
29547
  });
28787
29548
  observer.observe(this.host);
28788
- focusVisible.observe(this.tabGroup);
28789
- if (this.leftBtn) {
28790
- focusVisible.observe(this.leftBtn);
28791
- focusVisible.observe(this.rightBtn);
28792
- }
28793
29549
  requestAnimationFrame(() => this.updateScrollControls());
28794
29550
  if (!window['ResizeObserver'])
28795
29551
  return;
@@ -28812,27 +29568,22 @@ class TabGroup {
28812
29568
  }
28813
29569
  }
28814
29570
  disconnectedCallback() {
28815
- focusVisible.unobserve(this.tabGroup);
28816
- if (this.leftBtn) {
28817
- focusVisible.unobserve(this.leftBtn);
28818
- focusVisible.unobserve(this.rightBtn);
28819
- }
28820
29571
  if (this.resizeObserver)
28821
29572
  this.resizeObserver.unobserve(this.nav);
28822
29573
  }
28823
29574
  render() {
28824
29575
  this.isRtl = this.host.ownerDocument.dir === 'rtl';
28825
- return (hAsync(Host, { class: Object.assign({}, createColorClasses(this.color)), dir: this.isRtl ? 'rtl' : null }, hAsync("div", { part: "base", ref: (el) => (this.tabGroup = el), class: {
29576
+ return (hAsync(Host, { class: Object.assign({}, createColorClasses(this.color)), dir: this.isRtl ? 'rtl' : null }, hAsync("div", { part: "base", class: {
28826
29577
  'nano-tab-group': true,
28827
29578
  'nano-tab-group--top': this.placement === 'top',
28828
29579
  'nano-tab-group--start': this.placement === 'start',
28829
29580
  'nano-tab-group--has-scroll-controls': this.hasScrollControls,
28830
29581
  'nano-tab-group--has-scroll-controls-left': !this.hideControlLeft,
28831
29582
  'nano-tab-group--has-scroll-controls-right': !this.hideControlRight,
28832
- }, onClick: this.handleClick, onKeyDown: this.handleKeyDown }, hAsync("div", { class: "nano-tab-group__nav-container", part: "nav" }, this.placement === 'top' && (hAsync("button", { class: {
29583
+ }, onClick: this.handleClick, onKeyDown: this.handleKeyDown }, hAsync("div", { class: "nano-tab-group__nav-container", part: "nav" }, this.placement === 'top' && (hAsync("button", { disabled: !this.hasScrollControls, class: {
28833
29584
  'nano-tab-group__scroll-button': true,
28834
29585
  'nano-tab-group__scroll-button--left': true,
28835
- }, ref: (btn) => (this.leftBtn = btn), onClick: () => this.handleBtnClick(false) }, hAsync("nano-icon", { name: "light/chevron-left" }))), hAsync("div", { ref: (el) => (this.nav = el), class: "nano-tab-group__nav", onScroll: this.handleTabScroll }, hAsync("div", { ref: (el) => (this.tabs = el), part: "tabs", class: "nano-tab-group__tabs", role: "tablist" }, hAsync("div", { ref: (el) => (this.activeTabIndicator = el), part: "active-tab-indicator", class: "nano-tab-group__active-tab-indicator" }), hAsync("slot", { name: "tabs", onSlotchange: this.handleTabSlotChange }))), this.placement === 'top' && (hAsync("button", { class: {
29586
+ }, ref: (btn) => (this.leftBtn = btn), onClick: () => this.handleBtnClick(false) }, hAsync("nano-icon", { name: "light/chevron-left" }))), hAsync("div", { ref: (el) => (this.nav = el), class: "nano-tab-group__nav", onScroll: this.handleTabScroll }, hAsync("div", { ref: (el) => (this.tabs = el), part: "tabs", class: "nano-tab-group__tabs", role: "tablist" }, hAsync("div", { ref: (el) => (this.activeTabIndicator = el), part: "active-tab-indicator", class: "nano-tab-group__active-tab-indicator" }), hAsync("slot", { name: "tabs", onSlotchange: this.handleTabSlotChange }))), this.placement === 'top' && (hAsync("button", { disabled: !this.hasScrollControls, class: {
28836
29587
  'nano-tab-group__scroll-button': true,
28837
29588
  'nano-tab-group__scroll-button--right': true,
28838
29589
  }, ref: (btn) => (this.rightBtn = btn), onClick: () => this.handleBtnClick(true) }, hAsync("nano-icon", { name: "light/chevron-right" })))), hAsync("slot", { name: "tab-content-header" }), hAsync("div", { part: "body", class: "nano-tab-group__body", onTouchStart: this.handleTouchStart, onTouchEnd: this.handleTouchEnd }, hAsync("slot", { onSlotchange: this.handleContentSlotChange })))));
@@ -28851,7 +29602,7 @@ class TabGroup {
28851
29602
  "$flags$": 9,
28852
29603
  "$tagName$": "nano-tab-group",
28853
29604
  "$members$": {
28854
- "placement": [1],
29605
+ "placement": [513],
28855
29606
  "noScrollControls": [4, "no-scroll-controls"],
28856
29607
  "color": [1],
28857
29608
  "storeId": [1, "store-id"],
@@ -28865,7 +29616,7 @@ class TabGroup {
28865
29616
  },
28866
29617
  "$listeners$": [[0, "nanoTabClose", "handleTabClose"]],
28867
29618
  "$lazyBundleId$": "-",
28868
- "$attrsToReflect$": []
29619
+ "$attrsToReflect$": [["placement", "placement"]]
28869
29620
  }; }
28870
29621
  }
28871
29622
 
@@ -29707,12 +30458,12 @@ function sort(workerStore, rows, prop, order) {
29707
30458
  return rows;
29708
30459
  const col = workerStore.columns.find((c) => c.prop === prop);
29709
30460
  // custom sort
29710
- if (!!col.sortCompareFn && typeof col.sortCompareFn === 'function') {
30461
+ if (!!(col === null || col === void 0 ? void 0 : col.sortCompareFn) && typeof col.sortCompareFn === 'function') {
29711
30462
  const sorted = rows.slice().sort(col.sortCompareFn(prop, order));
29712
30463
  return sorted;
29713
30464
  }
29714
30465
  // text sort
29715
- if (col.type === 'text' && typeof rows[0][prop] === 'string') {
30466
+ if ((col === null || col === void 0 ? void 0 : col.type) === 'text' && typeof rows[0][prop] === 'string') {
29716
30467
  const sorted = rows.slice().sort((a, b) => {
29717
30468
  if (!a[prop])
29718
30469
  return 1;
@@ -29756,7 +30507,7 @@ function applyFiltersAndSort(workerStore, rows) {
29756
30507
  }
29757
30508
  function colsFromStore(safeColumns) {
29758
30509
  return safeColumns.map((c) => {
29759
- if (!!c.sortCompareFn) {
30510
+ if (!!(c === null || c === void 0 ? void 0 : c.sortCompareFn)) {
29760
30511
  c.sortCompareFn = new Function('return ' + c.sortCompareFn)();
29761
30512
  }
29762
30513
  return c;
@@ -29773,7 +30524,7 @@ async function destroyWorkerStore(workerId) {
29773
30524
  function colsToWorker(columns) {
29774
30525
  const safeColumns = JSON.parse(JSON.stringify(columns));
29775
30526
  columns.forEach((c) => {
29776
- if (!!c.sortCompareFn) {
30527
+ if (!!(c === null || c === void 0 ? void 0 : c.sortCompareFn)) {
29777
30528
  const safeCol = safeColumns.find((sc) => sc.prop === c.prop);
29778
30529
  safeCol.sortCompareFn = c.sortCompareFn.toString();
29779
30530
  }
@@ -30167,88 +30918,8 @@ function isInViewport(el, percentVisible = 100) {
30167
30918
  Math.floor(100 - ((r.bottom - windowHeight) / r.height) * 100) <
30168
30919
  percentVisible);
30169
30920
  }
30170
- /**
30171
- * Immutable array re-order
30172
- * @param from - the index to move from
30173
- * @param to - the index to move to
30174
- * @param arr - the array to re-order
30175
- * @returns - a new, re-orderd array
30176
- */
30177
- function arrMove(from, to, arr) {
30178
- const newArr = [...arr];
30179
- const item = newArr.splice(from, 1)[0];
30180
- newArr.splice(to, 0, item);
30181
- return newArr;
30182
- }
30183
-
30184
- // TABLE HEADERS
30185
- // (thead > tr > th, tfoot > tr > th)
30186
- let draggingCol;
30187
- let draggingColEle;
30188
- let dragEnterEle;
30189
- let draggingParent;
30190
- const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumnPinned, onColumnDrag, onColumnDrop, defaults, }) => {
30191
- const store = fetchStores();
30192
- // Drag to re-order columns handling
30193
- function handleDragStart(e, column) {
30194
- draggingCol = column;
30195
- draggingColEle = dragEnterEle = e.target;
30196
- draggingParent = draggingColEle.closest('.' + `${CSSNAMESPACE}__tr`);
30197
- draggingParent.classList.add(`${CSSNAMESPACE}__dragging`);
30198
- draggingColEle.classList.add(`${CSSNAMESPACE}__drag--start`);
30199
- e.dataTransfer.effectAllowed = 'move';
30200
- e.dataTransfer.setData('text/html', draggingColEle.innerHTML);
30201
- onColumnDrag(column.prop, draggingColEle);
30202
- }
30203
- function handleDragEnd() {
30204
- draggingParent.classList.remove(`${CSSNAMESPACE}__dragging`);
30205
- draggingColEle.classList.remove(`${CSSNAMESPACE}__drag--start`);
30206
- draggingParent
30207
- .querySelectorAll(`.${CSSNAMESPACE}__drag-mask--active`)
30208
- .forEach((el) => {
30209
- el.classList.remove(`${CSSNAMESPACE}__drag-mask--active`);
30210
- });
30211
- draggingColEle = null;
30212
- draggingCol = null;
30213
- draggingParent = null;
30214
- dragEnterEle = null;
30215
- }
30216
- function handleDragEnter(e) {
30217
- if (dragEnterEle === e.target)
30218
- return;
30219
- e.preventDefault();
30220
- e.stopImmediatePropagation();
30221
- e.dataTransfer.dropEffect = 'move';
30222
- draggingParent
30223
- .querySelectorAll(`.${CSSNAMESPACE}__drag-mask--active`)
30224
- .forEach((el) => {
30225
- el.classList.remove(`${CSSNAMESPACE}__drag-mask--active`);
30226
- });
30227
- dragEnterEle = e.target;
30228
- if (!dragEnterEle.classList.contains(`${CSSNAMESPACE}__drag-mask`)) {
30229
- e.dataTransfer.dropEffect = 'none';
30230
- return;
30231
- }
30232
- dragEnterEle.classList.add(`${CSSNAMESPACE}__drag-mask--active`);
30233
- }
30234
- function handleDrop(e) {
30235
- e.stopPropagation();
30236
- const { colName } = this.dataset;
30237
- if (colName === draggingCol.prop)
30238
- return;
30239
- const cols = store.config.state.columns;
30240
- let toIndex = cols.findIndex((col) => col.prop === colName);
30241
- const fromIndex = cols.findIndex((col) => col === draggingCol);
30242
- if (toIndex < fromIndex &&
30243
- this.classList.contains(`${CSSNAMESPACE}__drag-mask--end`))
30244
- toIndex++;
30245
- if (toIndex > fromIndex &&
30246
- this.classList.contains(`${CSSNAMESPACE}__drag-mask--start`))
30247
- toIndex--;
30248
- if (toIndex === fromIndex)
30249
- return;
30250
- onColumnDrop(draggingCol.prop, store.config.state.columns[toIndex].prop, draggingColEle);
30251
- }
30921
+
30922
+ const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumnPinned, defaults, }) => {
30252
30923
  // Sort handling
30253
30924
  function handleColumnSortClick(e) {
30254
30925
  let order;
@@ -30268,10 +30939,6 @@ const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumnPinned,
30268
30939
  return ((!!defaults.sortable && column.sortable !== false) ||
30269
30940
  (!defaults.sortable && column.sortable === true));
30270
30941
  }
30271
- function isDraggable() {
30272
- return ((!!defaults.draggable && column.draggable !== false) ||
30273
- (!defaults.draggable && column.draggable === true));
30274
- }
30275
30942
  let extraProps = {};
30276
30943
  if (column.columnProperties) {
30277
30944
  extraProps = column.columnProperties(column) || extraProps;
@@ -30294,37 +30961,23 @@ const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumnPinned,
30294
30961
  : 'none';
30295
30962
  props = Object.assign(Object.assign({}, props), { 'aria-sort': sort });
30296
30963
  }
30297
- if (isDraggable()) {
30298
- props = Object.assign(Object.assign({}, props), { draggable: true, onDragStart: (e) => handleDragStart(e, column), onDragOver: (e) => e.preventDefault(), onDragEnd: () => handleDragEnd() });
30299
- }
30300
30964
  return (hAsync("th", Object.assign({}, props, { ref: (th) => {
30301
30965
  if (['end', 'start'].includes(column.pinned))
30302
30966
  addHObserver(th, column.pinned, onColumnPinned);
30303
30967
  if (['top', 'bottom'].includes(headRenderer.pinned))
30304
30968
  addVObserver(th, headRenderer.pinned, onColumnPinned);
30305
- }, key: column.prop }),
30306
- isDraggable() && [
30307
- hAsync("div", { class: {
30308
- [`${CSSNAMESPACE}__drag-mask`]: true,
30309
- [`${CSSNAMESPACE}__drag-mask--start`]: true,
30310
- }, "data-col-name": column.prop, onDragEnter: handleDragEnter, onDrop: handleDrop, onDragOver: (e) => e.preventDefault() }),
30311
- hAsync("div", { class: {
30312
- [`${CSSNAMESPACE}__drag-mask`]: true,
30313
- [`${CSSNAMESPACE}__drag-mask--end`]: true,
30314
- }, "data-col-name": column.prop, onDragEnter: handleDragEnter, onDrop: handleDrop, onDragOver: (e) => e.preventDefault() }),
30315
- ],
30316
- isSortable() ? (hAsync("button", { class: {
30317
- [`${CSSNAMESPACE}__order-btn`]: true,
30318
- [`${CSSNAMESPACE}__cell-content`]: true,
30319
- }, onClick: handleColumnSortClick },
30320
- colheadFootRender(column),
30321
- column.filter !== undefined && column.filter !== null && (hAsync("nano-icon", { name: "light/filter" })),
30322
- !!column.order &&
30323
- (column.order === 'desc' ? (hAsync("nano-icon", { name: "solid/long-arrow-down" })) : (hAsync("nano-icon", { name: "solid/long-arrow-up" }))),
30324
- hAsync("div", { class: `${CSSNAMESPACE}__status-icons` },
30325
- hAsync("nano-icon", { name: "light/chevron-down" })))) : (hAsync("div", { class: `${CSSNAMESPACE}__cell-content` },
30326
- colheadFootRender(column),
30327
- column.filter !== undefined && column.filter !== null && (hAsync("nano-icon", { name: "light/bars-filter" }))))));
30969
+ }, key: column.prop }), isSortable() ? (hAsync("button", { class: {
30970
+ [`${CSSNAMESPACE}__order-btn`]: true,
30971
+ [`${CSSNAMESPACE}__cell-content`]: true,
30972
+ }, onClick: handleColumnSortClick },
30973
+ colheadFootRender(column),
30974
+ column.filter !== undefined && column.filter !== null && (hAsync("nano-icon", { name: "light/filter" })),
30975
+ !!column.order &&
30976
+ (column.order === 'desc' ? (hAsync("nano-icon", { name: "solid/long-arrow-down" })) : (hAsync("nano-icon", { name: "solid/long-arrow-up" }))),
30977
+ hAsync("div", { class: `${CSSNAMESPACE}__status-icons` },
30978
+ hAsync("nano-icon", { name: "light/chevron-down" })))) : (hAsync("div", { class: `${CSSNAMESPACE}__cell-content` },
30979
+ colheadFootRender(column),
30980
+ column.filter !== undefined && column.filter !== null && (hAsync("nano-icon", { name: "light/bars-filter" }))))));
30328
30981
  };
30329
30982
 
30330
30983
  // TABLE CELL
@@ -30509,7 +31162,7 @@ const TableHeadFootRow = ({ rowRenderer, onColumnPinned }, children, utils) => {
30509
31162
  return hAsync("tr", Object.assign({}, props), children);
30510
31163
  };
30511
31164
 
30512
- const tableCss = ":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}nano-table{display:block;width:100%;--max-col-width:clamp(200px, 500px, 50vw);--color:var(--nano-color-mediumgrey, #68767e);--font-size:0.87rem;--cell-line-height:1.5;--thead-font-size:0.95rem;--thead-color:#455560;--tfoot-color:#455560;--border-color:#dddbda;--border-style:thin solid var(--border-color);--border-tint-color:#0084a9;--border-tint-style:3px solid var(--border-tint-color);--cell-bg-rgb:var(--nano-color-white-rgb, 255 255 255);--head-bg-rgb:250 250 249;--foot-bg-rgb:var(--head-bg-rgb);--th-row-bg-rgb:var(--cell-bg-rgb);--ordered-bg-rgb:var(--nano-color-offwhite-rgb, 249 249 251);--td-padding-start:0.625rem;--td-padding-end:0.625rem;--td-padding-top:0.5rem;--td-padding-bottom:0.4125rem;--th-padding-start:0.625rem;--th-padding-end:0.625rem;--th-padding-top:0.875rem;--th-padding-bottom:0.6875rem;--td-padding-v:var(--td-padding-top) var(--td-padding-bottom);--td-padding-h:var(--td-padding-start) var(--td-padding-end);--th-padding-v:var(--th-padding-top) var(--th-padding-bottom);--th-padding-h:var(--th-padding-start) var(--th-padding-end);--foot-th-padding-v:var(--td-padding-top) var(--td-padding-bottom);--foot-th-padding-h:var(--td-padding-start) var(--td-padding-end);--head-th-padding-v:var(--th-padding-top) var(--th-padding-bottom);--head-th-padding-h:var(--th-padding-start) var(--th-padding-end);--bookend-col-padding:2rem}.nano-tbl{color:var(--color);text-align:start;width:100%;font-size:var(--font-size);border-spacing:0 0;border-collapse:separate;background:rgb(var(--cell-bg-rgb));-webkit-border-end:1px solid transparent;border-inline-end:1px solid transparent;-webkit-border-before:1px solid transparent;border-block-start:1px solid transparent;position:relative;z-index:1}.nano-tbl__wrap{display:table;min-width:100%}.nano-tbl__top-anchor{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;position:relative}.nano-tbl__ordered{background-color:var(--ordered-bg);-webkit-border-start:var(--border-style);border-inline-start:var(--border-style);-webkit-border-end:var(--border-style);border-inline-end:var(--border-style)}.nano-tbl__drag-mask{display:none;position:absolute;inset-block:-2px -2px;z-index:10;opacity:0;transition:0.2s ease opacity}.nano-tbl__drag-mask--start{width:calc(50% + 2px);inset-inline-start:-2px;-webkit-border-start:2px dashed var(--border-tint-color);border-inline-start:2px dashed var(--border-tint-color)}.nano-tbl__drag-mask--end{width:50%;inset-inline-end:0;-webkit-border-end:2px dashed var(--border-tint-color);border-inline-end:2px dashed var(--border-tint-color)}.nano-tbl__drag-mask--active{opacity:1}.nano-tbl__dragging .nano-tbl__drag-mask{display:block}.nano-tbl__drag--start{opacity:0.4}.nano-tbl__dragging .nano-tbl__td,.nano-tbl__dragging .nano-tbl__th{cursor:no-drop}.nano-tbl__dragging .nano-tbl__td .nano-tbl__cell-content,.nano-tbl__dragging .nano-tbl__th .nano-tbl__cell-content{pointer-events:none}.nano-tbl__order-btn{padding:0;border:none;outline:none;font:inherit;background:none;-webkit-appearance:none;appearance:none;color:inherit;display:flex;gap:10px;align-items:center;width:100%}.nano-tbl__status-icons{margin-inline:auto 10px;display:flex;gap:10px}.nano-tbl__progress-bar{font-size:0.2rem;position:sticky;inset-block-start:0;inset-inline:0;z-index:10;transition:scale 0.25s;transform:scale(0);width:100%;height:0}.nano-tbl__progress-bar--show{transform:scale(1);height:auto}.nano-tbl__caption--hide{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nano-tbl__td,.nano-tbl__th{line-height:var(--cell-line-height);text-align:start;-webkit-border-before:var(--border-style);border-block-start:var(--border-style);max-width:var(--max-col-width);background-color:rgb(var(--cell-bg-rgb))}tbody:first-of-type tr:first-child .nano-tbl__td,tbody:first-of-type tr:first-child .nano-tbl__th{-webkit-border-before:none;border-block-start:none}tbody:last-of-type tr:last-child .nano-tbl__td,tbody:last-of-type tr:last-child .nano-tbl__th{-webkit-border-after:var(--border-style);border-block-end:var(--border-style)}.md .nano-tbl__td:first-child .nano-tbl__cell-content,.md .nano-tbl__th:first-child .nano-tbl__cell-content{-webkit-padding-start:var(--bookend-col-padding);padding-inline-start:var(--bookend-col-padding)}.md .nano-tbl__td:last-child .nano-tbl__cell-content,.md .nano-tbl__th:last-child .nano-tbl__cell-content{-webkit-padding-end:var(--bookend-col-padding);padding-inline-end:var(--bookend-col-padding)}@media (max-width: 768px){.nano-tbl__td:first-child .nano-tbl__cell-content,.nano-tbl__th:first-child .nano-tbl__cell-content{-webkit-padding-start:var(--td-padding-start) !important;padding-inline-start:var(--td-padding-start) !important}.nano-tbl__td:last-child .nano-tbl__cell-content,.nano-tbl__th:last-child .nano-tbl__cell-content{-webkit-padding-end:var(--td-padding-end) !important;padding-inline-end:var(--td-padding-end) !important}}thead .nano-tbl__td,thead .nano-tbl__th{color:var(--thead-color);font-weight:800;background:rgb(var(--head-bg-rgb)/90%);font-size:var(--thead-font-size);-webkit-border-before:none !important;border-block-start:none !important;transition:all 0.2s ease}thead .nano-tbl__td .nano-tbl__cell-content,thead .nano-tbl__th .nano-tbl__cell-content{padding-block:var(--head-th-padding-v);padding-inline:var(--head-th-padding-h)}tfoot .nano-tbl__td,tfoot .nano-tbl__th{color:var(--tfoot-color);font-weight:800;-webkit-border-before:none;border-block-start:none;background:rgb(var(--foot-bg-rgb)/90%);font-size:var(--thead-font-size)}tfoot .nano-tbl__td .nano-tbl__cell-content,tfoot .nano-tbl__th .nano-tbl__cell-content{padding-block:var(--foot-th-padding-v);padding-inline:var(--foot-th-padding-h)}.nano-tbl__td.nano-tbl__ordered,.nano-tbl__th.nano-tbl__ordered{background-color:rgb(var(--ordered-bg-rgb)/80%) !important}.nano-tbl__cell-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-block:var(--td-padding-v);padding-inline:var(--td-padding-h)}.nano-tbl__cell-content--no-result{padding-block:2rem}.nano-tbl__cell-content--wrap{white-space:normal;overflow:visible}.nano-tbl tbody{will-change:scroll-position;opacity:1;transition:0.1s ease opacity;transform:translateZ(0)}.nano-tbl tbody.nano-tbl__inactive{opacity:0}.nano-tbl th[scope=row]{font-weight:800;margin:0}.nano-tbl__pin{position:sticky;transform:translateZ(0)}.nano-tbl__pin--start{inset-inline:-1px auto;transition:max-width 0.25s ease}.nano-tbl__pin--start::after{content:\"\";position:absolute;inset:0;box-shadow:5px 1px 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.nano-tbl__pinned--start .nano-tbl__pin--start{z-index:2;max-width:125px !important}.sm .nano-tbl__pinned--start .nano-tbl__pin--start{max-width:var(--max-col-width) !important}.nano-tbl__pinned--start .nano-tbl__pin--start::after{opacity:1}.nano-tbl__pin--end{}.nano-tbl__pin--start+.nano-tbl__pin--end{inset-inline:auto auto}.nano-tbl__pin--start+.nano-tbl__pin--end::after{display:none}.sm .nano-tbl__pin--end{inset-inline:auto -1px !important;max-width:min(50vw, 200px)}.sm .nano-tbl__pin--end::after{display:block !important;content:\"\";position:absolute;inset:0;box-shadow:-5px 1px 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.sm .nano-tbl__pinned--end .nano-tbl__pin--end::after{opacity:1}.nano-tbl__pin--top{inset-block:-1px auto}.nano-tbl__pinned--top .nano-tbl__pin--top{z-index:4 !important}.nano-tbl__pin--bottom{inset-block:auto -1px}.nano-tbl__pinned--bottom .nano-tbl__pin--bottom{z-index:5 !important}.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start{z-index:5 !important}.nano-tbl__pinned--top.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start{z-index:6 !important}.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end{z-index:5 !important}.nano-tbl__pinned--top.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end{z-index:6 !important}.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:5 !important}.nano-tbl__pinned--bottom.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:6 !important}.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:5 !important}.nano-tbl__pinned--bottom.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:6 !important}.nano-tbl thead tr:last-of-type td,.nano-tbl thead tr:last-of-type th{-webkit-border-after:var(--border-tint-style);border-block-end:var(--border-tint-style)}.nano-tbl tfoot tr:first-of-type td,.nano-tbl tfoot tr:first-of-type th{-webkit-border-before:none;border-block-start:none}.nano-tbl tfoot tr:last-of-type td,.nano-tbl tfoot tr:last-of-type th{-webkit-border-after:var(--border-tint-style);border-block-end:var(--border-tint-style)}.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type td,.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type th{-webkit-border-before:var(--border-tint-style) !important;border-block-start:var(--border-tint-style) !important}.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type td,.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type th{-webkit-border-after:none !important;border-block-end:none !important}.nano-tbl .unlimited-width{max-width:none}.nano-tbl__spinner{font-size:1.5rem;transition:scale 0.25s;scale:0;padding:0.5rem;position:absolute;inset-block-end:0;inset-inline-start:calc(50% - 0.75rem);z-index:0}.nano-tbl__spinner--show{scale:1;position:sticky}.nano-tbl nano-skeleton{line-height:var(--cell-line-height)}";
31165
+ const tableCss = ":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}nano-table{display:block;width:100%;--max-col-width:clamp(200px, 500px, 50vw);--color:var(--nano-color-mediumgrey, #68767e);--font-size:0.87rem;--cell-line-height:1.5;--thead-font-size:0.95rem;--thead-color:#455560;--tfoot-color:#455560;--border-color:#dddbda;--border-style:thin solid var(--border-color);--border-tint-color:#0084a9;--border-tint-style:3px solid var(--border-tint-color);--cell-bg-rgb:var(--nano-color-white-rgb, 255 255 255);--head-bg-rgb:250 250 249;--foot-bg-rgb:var(--head-bg-rgb);--th-row-bg-rgb:var(--cell-bg-rgb);--ordered-bg-rgb:var(--nano-color-offwhite-rgb, 249 249 251);--td-padding-start:0.625rem;--td-padding-end:0.625rem;--td-padding-top:0.5rem;--td-padding-bottom:0.4125rem;--th-padding-start:0.625rem;--th-padding-end:0.625rem;--th-padding-top:0.875rem;--th-padding-bottom:0.6875rem;--td-padding-v:var(--td-padding-top) var(--td-padding-bottom);--td-padding-h:var(--td-padding-start) var(--td-padding-end);--th-padding-v:var(--th-padding-top) var(--th-padding-bottom);--th-padding-h:var(--th-padding-start) var(--th-padding-end);--foot-th-padding-v:var(--td-padding-top) var(--td-padding-bottom);--foot-th-padding-h:var(--td-padding-start) var(--td-padding-end);--head-th-padding-v:var(--th-padding-top) var(--th-padding-bottom);--head-th-padding-h:var(--th-padding-start) var(--th-padding-end);--bookend-col-padding:2rem}.nano-tbl{color:var(--color);text-align:start;width:100%;font-size:var(--font-size);border-spacing:0 0;border-collapse:separate;background:rgb(var(--cell-bg-rgb));-webkit-border-end:1px solid transparent;border-inline-end:1px solid transparent;-webkit-border-before:1px solid transparent;border-block-start:1px solid transparent;position:relative;z-index:1}.nano-tbl__wrap{display:table;min-width:100%}.nano-tbl__top-anchor{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;position:relative}.nano-tbl__ordered{background-color:var(--ordered-bg);-webkit-border-start:var(--border-style);border-inline-start:var(--border-style);-webkit-border-end:var(--border-style);border-inline-end:var(--border-style)}.nano-tbl__order-btn{padding:0;border:none;outline:none;font:inherit;background:none;-webkit-appearance:none;appearance:none;color:inherit;display:flex;gap:10px;align-items:center;width:100%}.nano-tbl__order-btn:focus-visible{outline:none;box-shadow:var(--nano-control-focus-shadow, 0 0 0 0.1875rem var(--nano-control-focus-color, rgba(144, 198, 231, 0.8))) inset}.nano-tbl__status-icons{margin-inline:auto 10px;display:flex;gap:10px}.nano-tbl__progress-bar{font-size:0.2rem;position:sticky;inset-block-start:0;inset-inline:0;z-index:10;transition:scale 0.25s;transform:scale(0);width:100%;height:0}.nano-tbl__progress-bar--show{transform:scale(1);height:auto}.nano-tbl__caption--hide{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nano-tbl__td,.nano-tbl__th{line-height:var(--cell-line-height);text-align:start;-webkit-border-before:var(--border-style);border-block-start:var(--border-style);max-width:var(--max-col-width);background-color:rgb(var(--cell-bg-rgb))}tbody:first-of-type tr:first-child .nano-tbl__td,tbody:first-of-type tr:first-child .nano-tbl__th{-webkit-border-before:none;border-block-start:none}tbody:last-of-type tr:last-child .nano-tbl__td,tbody:last-of-type tr:last-child .nano-tbl__th{-webkit-border-after:var(--border-style);border-block-end:var(--border-style)}.md .nano-tbl__td:first-child .nano-tbl__cell-content,.md .nano-tbl__th:first-child .nano-tbl__cell-content{-webkit-padding-start:var(--bookend-col-padding);padding-inline-start:var(--bookend-col-padding)}.md .nano-tbl__td:last-child .nano-tbl__cell-content,.md .nano-tbl__th:last-child .nano-tbl__cell-content{-webkit-padding-end:var(--bookend-col-padding);padding-inline-end:var(--bookend-col-padding)}@media (max-width: 768px){.nano-tbl__td:first-child .nano-tbl__cell-content,.nano-tbl__th:first-child .nano-tbl__cell-content{-webkit-padding-start:var(--td-padding-start) !important;padding-inline-start:var(--td-padding-start) !important}.nano-tbl__td:last-child .nano-tbl__cell-content,.nano-tbl__th:last-child .nano-tbl__cell-content{-webkit-padding-end:var(--td-padding-end) !important;padding-inline-end:var(--td-padding-end) !important}}thead .nano-tbl__td,thead .nano-tbl__th{color:var(--thead-color);font-weight:800;background:rgb(var(--head-bg-rgb)/90%);font-size:var(--thead-font-size);-webkit-border-before:none !important;border-block-start:none !important}thead .nano-tbl__td .nano-tbl__cell-content,thead .nano-tbl__th .nano-tbl__cell-content{padding-block:var(--head-th-padding-v);padding-inline:var(--head-th-padding-h)}thead .nano-tbl__td .nano-sortable__keyboard-handle,thead .nano-tbl__th .nano-sortable__keyboard-handle{position:absolute;inset-inline-end:5px;inset-block-start:50%;transform:translateY(-50%);background:white;z-index:10}tfoot .nano-tbl__td,tfoot .nano-tbl__th{color:var(--tfoot-color);font-weight:800;-webkit-border-before:none;border-block-start:none;background:rgb(var(--foot-bg-rgb)/90%);font-size:var(--thead-font-size)}tfoot .nano-tbl__td .nano-tbl__cell-content,tfoot .nano-tbl__th .nano-tbl__cell-content{padding-block:var(--foot-th-padding-v);padding-inline:var(--foot-th-padding-h)}.nano-tbl__td.nano-tbl__ordered,.nano-tbl__th.nano-tbl__ordered{background-color:rgb(var(--ordered-bg-rgb)/80%) !important}.nano-tbl__cell-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-block:var(--td-padding-v);padding-inline:var(--td-padding-h)}.nano-tbl__cell-content--no-result{padding-block:2rem}.nano-tbl__cell-content--wrap{white-space:normal;overflow:visible}.nano-tbl tbody{will-change:scroll-position;opacity:1;transition:0.1s ease opacity;transform:translateZ(0)}.nano-tbl tbody.nano-tbl__inactive{opacity:0}.nano-tbl th[scope=row]{font-weight:800;margin:0}.nano-tbl__pin{position:sticky;transform:translateZ(0)}.nano-tbl__pin--start{inset-inline:-1px auto;transition:max-width 0.25s ease}.nano-tbl__pin--start::after{content:\"\";position:absolute;inset:0;box-shadow:5px 1px 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.nano-tbl__pinned--start .nano-tbl__pin--start{z-index:2;max-width:125px !important}.sm .nano-tbl__pinned--start .nano-tbl__pin--start{max-width:var(--max-col-width) !important}.nano-tbl__pinned--start .nano-tbl__pin--start::after{opacity:1}.nano-tbl__pin--end{}.nano-tbl__pin--start+.nano-tbl__pin--end{inset-inline:auto auto}.nano-tbl__pin--start+.nano-tbl__pin--end::after{display:none}.sm .nano-tbl__pin--end{inset-inline:auto -1px !important;max-width:min(50vw, 200px)}.sm .nano-tbl__pin--end::after{display:block !important;content:\"\";position:absolute;inset:0;box-shadow:-5px 1px 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.sm .nano-tbl__pinned--end .nano-tbl__pin--end::after{opacity:1}.nano-tbl__pin--top{inset-block:-1px auto}.nano-tbl__pinned--top .nano-tbl__pin--top{z-index:4 !important}.nano-tbl__pin--bottom{inset-block:auto -1px}.nano-tbl__pinned--bottom .nano-tbl__pin--bottom{z-index:5 !important}.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start{z-index:5 !important}.nano-tbl__pinned--top.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start{z-index:6 !important}.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end{z-index:5 !important}.nano-tbl__pinned--top.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end{z-index:6 !important}.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:5 !important}.nano-tbl__pinned--bottom.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:6 !important}.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:5 !important}.nano-tbl__pinned--bottom.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:6 !important}.nano-tbl thead tr:last-of-type td,.nano-tbl thead tr:last-of-type th{-webkit-border-after:var(--border-tint-style);border-block-end:var(--border-tint-style)}.nano-tbl tfoot tr:first-of-type td,.nano-tbl tfoot tr:first-of-type th{-webkit-border-before:none;border-block-start:none}.nano-tbl tfoot tr:last-of-type td,.nano-tbl tfoot tr:last-of-type th{-webkit-border-after:var(--border-tint-style);border-block-end:var(--border-tint-style)}.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type td,.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type th{-webkit-border-before:var(--border-tint-style) !important;border-block-start:var(--border-tint-style) !important}.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type td,.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type th{-webkit-border-after:none !important;border-block-end:none !important}.nano-tbl .unlimited-width{max-width:none}.nano-tbl__spinner{font-size:1.5rem;transition:scale 0.25s;scale:0;padding:0.5rem;position:absolute;inset-block-end:0;inset-inline-start:calc(50% - 0.75rem);z-index:0}.nano-tbl__spinner--show{scale:1;position:sticky}.nano-tbl nano-skeleton{line-height:var(--cell-line-height)}";
30513
31166
 
30514
31167
  let id = 0;
30515
31168
  /**
@@ -30520,7 +31173,6 @@ let id = 0;
30520
31173
  *- Built-in column sort
30521
31174
  *- Easily swap in API / async based search / filter & sort
30522
31175
  *- Pin headers, footers, rows, columns
30523
- *- Drag-&-Drop columns to re-order
30524
31176
  *- Add custom rendering at every level
30525
31177
  *- Add custom properties at every level
30526
31178
  *
@@ -30534,8 +31186,6 @@ class Table {
30534
31186
  this.nanoTblBlockRendered = createEvent(this, "nanoTblBlockRendered", 7);
30535
31187
  this.nanoTblBeforeSort = createEvent(this, "nanoTblBeforeSort", 7);
30536
31188
  this.nanoTblAfterSort = createEvent(this, "nanoTblAfterSort", 7);
30537
- this.nanoTblColDrag = createEvent(this, "nanoTblColDrag", 7);
30538
- this.nanoTblColDrop = createEvent(this, "nanoTblColDrop", 7);
30539
31189
  this.nanoTblBeforeFilter = createEvent(this, "nanoTblBeforeFilter", 7);
30540
31190
  this.nanoTblAfterFilter = createEvent(this, "nanoTblAfterFilter", 7);
30541
31191
  this.nanoTblBeforeSearch = createEvent(this, "nanoTblBeforeSearch", 7);
@@ -30550,32 +31200,6 @@ class Table {
30550
31200
  this.blockHeights = [];
30551
31201
  this.unitHeight = 0;
30552
31202
  this._isReady = false;
30553
- /**
30554
- * Fired when a column is dragged
30555
- * @param column
30556
- */
30557
- this.colDrag = (column) => {
30558
- this.nanoTblColDrag.emit({ column });
30559
- };
30560
- /**
30561
- * Fired when a column is dropped after being dragged
30562
- * @param fromCol
30563
- * @param toCol
30564
- */
30565
- this.colDrop = (fromCol, toCol) => {
30566
- const cols = this.store.config.state.columns;
30567
- const toIndex = cols.findIndex((col) => col.prop === toCol);
30568
- const fromIndex = cols.findIndex((col) => col.prop === fromCol);
30569
- const dropEvent = this.nanoTblColDrop.emit({
30570
- fromCol,
30571
- toCol,
30572
- fromIndex,
30573
- toIndex,
30574
- });
30575
- if (dropEvent.defaultPrevented)
30576
- return;
30577
- this.columns = arrMove(fromIndex, toIndex, cols);
30578
- };
30579
31203
  /**
30580
31204
  * Start a sort - can be cancelled by `preventDefault`
30581
31205
  * @param order - column order
@@ -30684,7 +31308,6 @@ class Table {
30684
31308
  this.customFilterFn = undefined;
30685
31309
  this.customSortFn = undefined;
30686
31310
  this.defaultSort = true;
30687
- this.defaultColDraggable = false;
30688
31311
  this.virtualTotalItems = 0;
30689
31312
  this.blocks = [];
30690
31313
  this.activeBlocks = [0, 1, 2];
@@ -31113,6 +31736,8 @@ class Table {
31113
31736
  this.activeWatcherIo = undefined;
31114
31737
  }
31115
31738
  const io = (this.activeWatcherIo = new IntersectionObserver(async ([e]) => {
31739
+ if (!this.store)
31740
+ return;
31116
31741
  if (e.isIntersecting)
31117
31742
  this.store.general.state.isActive = true;
31118
31743
  else
@@ -31163,9 +31788,8 @@ class Table {
31163
31788
  [`${CSSNAMESPACE}__caption`]: true,
31164
31789
  [`${CSSNAMESPACE}__caption--hide`]: !this.showCaption,
31165
31790
  }, id: 'table-caption-' + this.renderId }, hAsync("slot", { name: "caption" }, this.caption)), hAsync("thead", null, hAsync(TableHeadFootRow, { rowRenderer: this.headRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
31166
- hAsync(TableColHead, { column: colModel, headRenderer: this.headRender, onColumnSortClick: this.sortStart, onColumnPinned: this.handleColumnPinned, onColumnDrag: this.colDrag, onColumnDrop: this.colDrop, defaults: {
31791
+ hAsync(TableColHead, { column: colModel, headRenderer: this.headRender, onColumnSortClick: this.sortStart, onColumnPinned: this.handleColumnPinned, defaults: {
31167
31792
  sortable: this.defaultSort,
31168
- draggable: this.defaultColDraggable,
31169
31793
  } }),
31170
31794
  ]))), this._loading && !this.blocks.length && (hAsync("tbody", { class: `${CSSNAMESPACE}__active` }, [...Array(10).keys()].map((rowIndex) => (hAsync("tr", null, this.store.config.state.columns.map((_colModel, colIndex) => (hAsync(TableCell, { rowIndex: rowIndex, colIndex: colIndex, nestedContent: () => hAsync("nano-skeleton", null) })))))))), hAsync("tr", { hidden: !!this._loading || !!this.blocks.length }, hAsync("th", { class: `${CSSNAMESPACE}__th`, colSpan: this.store.config.state.columns.length }, hAsync("div", { class: "nano-tbl__cell-content nano-tbl__cell-content--no-result" }, hAsync("slot", { name: "no-results" }, "No results found")))), this.blocks.map((block, blockIndex) => (hAsync("tbody", { key: block.__uuid, id: `tbody-${this.renderId}-${blockIndex}`, ref: (tb) => {
31171
31795
  this.blockElements.push(tb);
@@ -31180,7 +31804,6 @@ class Table {
31180
31804
  } })))))), this.showFooter && (hAsync("tfoot", null, hAsync(TableHeadFootRow, { rowRenderer: this.footRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
31181
31805
  hAsync(TableColHead, { column: colModel, headRenderer: this.footRender, onColumnPinned: this.handleColumnPinned, onColumnSortClick: this.sortStart, defaults: {
31182
31806
  sortable: this.defaultSort,
31183
- draggable: this.defaultColDraggable,
31184
31807
  } }),
31185
31808
  ]))))), !!this.blocks.length && (hAsync("nano-spinner", { type: "circle", class: {
31186
31809
  [`${CSSNAMESPACE}__spinner`]: true,
@@ -31216,7 +31839,6 @@ class Table {
31216
31839
  "customFilterFn": [16],
31217
31840
  "customSortFn": [16],
31218
31841
  "defaultSort": [4, "default-sort"],
31219
- "defaultColDraggable": [4, "default-col-draggable"],
31220
31842
  "virtualTotalItems": [2, "virtual-total-items"],
31221
31843
  "internalLoading": [32],
31222
31844
  "blocks": [32],
@@ -31474,6 +32096,7 @@ registerComponents([
31474
32096
  Skeleton,
31475
32097
  Slide$2,
31476
32098
  Slides,
32099
+ Sortable,
31477
32100
  Spinner,
31478
32101
  SplitPane,
31479
32102
  Sticker,