@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.
- package/CHANGELOG.md +32 -0
- package/dist/cjs/drag-777bd8dd.js +74 -0
- package/dist/cjs/drag-777bd8dd.js.map +1 -0
- package/dist/cjs/index-71f899a7.js +4 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/nano-components.cjs.js +1 -1
- package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +4 -4
- package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-global-nav.cjs.entry.js +2 -3
- package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-icon-button_2.cjs.entry.js +40 -3
- package/dist/cjs/nano-icon-button_2.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-sortable.cjs.entry.js +653 -0
- package/dist/cjs/nano-sortable.cjs.entry.js.map +1 -0
- package/dist/cjs/nano-split-pane.cjs.entry.js +30 -45
- package/dist/cjs/nano-split-pane.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-tab-group.cjs.entry.js +39 -43
- package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-tab.cjs.entry.js +3 -3
- package/dist/cjs/nano-tab.cjs.entry.js.map +1 -1
- package/dist/cjs/{nano-table-0bac0552.js → nano-table-ff33dc43.js} +20 -147
- package/dist/cjs/nano-table-ff33dc43.js.map +1 -0
- package/dist/cjs/nano-table.cjs.entry.js +1 -1
- package/dist/cjs/{table.worker-13b5bc18.js → table.worker-0a6bc962.js} +3 -3
- package/dist/cjs/table.worker-0a6bc962.js.map +1 -0
- package/dist/cjs/{table.worker-f820b411.js → table.worker-bd51e29f.js} +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/global-nav/global-nav.js +2 -3
- package/dist/collection/components/global-nav/global-nav.js.map +1 -1
- package/dist/collection/components/icon-button/icon-button.css +6 -4
- package/dist/collection/components/icon-button/icon-button.js +83 -4
- package/dist/collection/components/icon-button/icon-button.js.map +1 -1
- package/dist/collection/components/nav-item/nav-item.js +4 -4
- package/dist/collection/components/nav-item/nav-item.js.map +1 -1
- package/dist/collection/components/sortable/sortable.css +28 -0
- package/dist/collection/components/sortable/sortable.js +1180 -0
- package/dist/collection/components/sortable/sortable.js.map +1 -0
- package/dist/collection/components/split-pane/split-pane.js +29 -27
- package/dist/collection/components/split-pane/split-pane.js.map +1 -1
- package/dist/collection/components/table/table-interface.js.map +1 -1
- package/dist/collection/components/table/table.css +12 -38
- package/dist/collection/components/table/table.header.js +3 -86
- package/dist/collection/components/table/table.header.js.map +1 -1
- package/dist/collection/components/table/table.js +4 -92
- package/dist/collection/components/table/table.js.map +1 -1
- package/dist/collection/components/table/table.store.js +1 -1
- package/dist/collection/components/table/table.store.js.map +1 -1
- package/dist/collection/components/table/table.worker.js +3 -3
- package/dist/collection/components/table/table.worker.js.map +1 -1
- package/dist/collection/components/tabs/tab-group.css +9 -13
- package/dist/collection/components/tabs/tab-group.js +39 -43
- package/dist/collection/components/tabs/tab-group.js.map +1 -1
- package/dist/collection/components/tabs/tab.css +53 -14
- package/dist/collection/components/tabs/tab.js +8 -2
- package/dist/collection/components/tabs/tab.js.map +1 -1
- package/dist/collection/utils/drag.js +52 -4
- package/dist/collection/utils/drag.js.map +1 -1
- package/dist/components/drag.js +72 -0
- package/dist/components/drag.js.map +1 -0
- package/dist/components/icon-button.js +45 -5
- package/dist/components/icon-button.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/nano-global-nav.js +2 -3
- package/dist/components/nano-global-nav.js.map +1 -1
- package/dist/components/nano-sortable.d.ts +11 -0
- package/dist/components/nano-sortable.js +691 -0
- package/dist/components/nano-sortable.js.map +1 -0
- package/dist/components/nano-split-pane.js +30 -45
- package/dist/components/nano-split-pane.js.map +1 -1
- package/dist/components/nano-tab-group.js +40 -44
- package/dist/components/nano-tab-group.js.map +1 -1
- package/dist/components/nano-tab.js +3 -3
- package/dist/components/nano-tab.js.map +1 -1
- package/dist/components/nav-item.js +4 -4
- package/dist/components/nav-item.js.map +1 -1
- package/dist/components/table.js +19 -147
- package/dist/components/table.js.map +1 -1
- package/dist/components/table.worker.js +1 -1
- package/dist/esm/drag-1723a4cc.js +72 -0
- package/dist/esm/drag-1723a4cc.js.map +1 -0
- package/dist/esm/index-dad5627b.js +4 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/nano-components.js +1 -1
- package/dist/esm/nano-global-nav-user-profile_3.entry.js +4 -4
- package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
- package/dist/esm/nano-global-nav.entry.js +2 -3
- package/dist/esm/nano-global-nav.entry.js.map +1 -1
- package/dist/esm/nano-icon-button_2.entry.js +41 -4
- package/dist/esm/nano-icon-button_2.entry.js.map +1 -1
- package/dist/esm/nano-sortable.entry.js +649 -0
- package/dist/esm/nano-sortable.entry.js.map +1 -0
- package/dist/esm/nano-split-pane.entry.js +30 -45
- package/dist/esm/nano-split-pane.entry.js.map +1 -1
- package/dist/esm/nano-tab-group.entry.js +39 -43
- package/dist/esm/nano-tab-group.entry.js.map +1 -1
- package/dist/esm/nano-tab.entry.js +3 -3
- package/dist/esm/nano-tab.entry.js.map +1 -1
- package/dist/esm/{nano-table-ece658c4.js → nano-table-ec980076.js} +21 -148
- package/dist/esm/nano-table-ec980076.js.map +1 -0
- package/dist/esm/nano-table.entry.js +1 -1
- package/dist/esm/{table.worker-e89525d3.js → table.worker-b53db58e.js} +3 -3
- package/dist/esm/table.worker-b53db58e.js.map +1 -0
- package/dist/esm/{table.worker-f820b411.js → table.worker-bd51e29f.js} +1 -1
- package/dist/nano-components/nano-components.css +1 -1
- package/dist/nano-components/nano-components.esm.js +1 -1
- package/dist/nano-components/nano-components.esm.js.map +1 -1
- package/dist/nano-components/p-064af7d0.js +5 -0
- package/dist/nano-components/p-064af7d0.js.map +1 -0
- package/dist/nano-components/p-241baff8.entry.js +5 -0
- package/dist/nano-components/p-241baff8.entry.js.map +1 -0
- package/dist/nano-components/p-58b53239.entry.js.map +1 -1
- package/dist/nano-components/{p-bd2d0c58.js → p-806bcd46.js} +2 -2
- package/dist/nano-components/p-842cf127.js +5 -0
- package/dist/nano-components/p-842cf127.js.map +1 -0
- package/dist/nano-components/{p-272b2f59.entry.js → p-ace1ffc2.entry.js} +2 -2
- package/dist/nano-components/p-ace1ffc2.entry.js.map +1 -0
- package/dist/nano-components/p-b8e76fdf.entry.js +5 -0
- package/dist/nano-components/p-b8e76fdf.entry.js.map +1 -0
- package/dist/nano-components/{p-f820b411.js → p-bd51e29f.js} +1 -1
- package/dist/nano-components/p-d3de231c.entry.js +5 -0
- package/dist/nano-components/p-d3de231c.entry.js.map +1 -0
- package/dist/nano-components/{p-27d5d32b.entry.js → p-f591400b.entry.js} +2 -2
- package/dist/nano-components/p-f60fe933.entry.js +5 -0
- package/dist/nano-components/p-f60fe933.entry.js.map +1 -0
- package/dist/nano-components/p-f7535f45.entry.js +5 -0
- package/dist/nano-components/p-f7535f45.entry.js.map +1 -0
- package/dist/types/components/icon-button/icon-button.d.ts +14 -0
- package/dist/types/components/sortable/sortable.d.ts +204 -0
- package/dist/types/components/table/table-interface.d.ts +2 -4
- package/dist/types/components/table/table.d.ts +0 -30
- package/dist/types/components/table/table.header.d.ts +0 -3
- package/dist/types/components/tabs/tab-group.d.ts +0 -1
- package/dist/types/components/tabs/tab.d.ts +6 -0
- package/dist/types/components.d.ts +248 -28
- package/dist/types/utils/drag.d.ts +21 -1
- package/docs-json.json +562 -46
- package/docs-vscode.json +74 -5
- package/hydrate/index.js +877 -254
- package/package.json +2 -2
- package/dist/cjs/nano-table-0bac0552.js.map +0 -1
- package/dist/cjs/table.worker-13b5bc18.js.map +0 -1
- package/dist/esm/nano-table-ece658c4.js.map +0 -1
- package/dist/esm/table.worker-e89525d3.js.map +0 -1
- package/dist/nano-components/p-068bdd89.entry.js +0 -5
- package/dist/nano-components/p-068bdd89.entry.js.map +0 -1
- package/dist/nano-components/p-11025069.js +0 -5
- package/dist/nano-components/p-11025069.js.map +0 -1
- package/dist/nano-components/p-272b2f59.entry.js.map +0 -1
- package/dist/nano-components/p-64b56ee6.entry.js +0 -5
- package/dist/nano-components/p-64b56ee6.entry.js.map +0 -1
- package/dist/nano-components/p-a5a560e7.entry.js +0 -5
- package/dist/nano-components/p-a5a560e7.entry.js.map +0 -1
- package/dist/nano-components/p-a761ac89.entry.js +0 -5
- package/dist/nano-components/p-a761ac89.entry.js.map +0 -1
- /package/dist/nano-components/{p-27d5d32b.entry.js.map → p-806bcd46.js.map} +0 -0
- /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://
|
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 = "
|
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$":
|
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
|
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
|
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
|
-
|
21008
|
+
panelIO.disconnect();
|
20971
21009
|
}, { threshold: 1 });
|
20972
|
-
|
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,
|
27462
|
-
|
27463
|
-
|
27464
|
-
|
27465
|
-
|
27466
|
-
|
27467
|
-
|
27468
|
-
|
27469
|
-
|
27470
|
-
|
27471
|
-
|
27472
|
-
|
27473
|
-
|
27474
|
-
|
27475
|
-
|
27476
|
-
|
27477
|
-
|
27478
|
-
|
27479
|
-
|
27480
|
-
newPositionInPixels
|
27481
|
-
|
27482
|
-
|
27483
|
-
|
27484
|
-
|
27485
|
-
|
27486
|
-
|
27487
|
-
|
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
|
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",
|
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,
|
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])
|
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
|
-
|
28471
|
-
|
28472
|
-
|
28473
|
-
|
28474
|
-
|
28475
|
-
|
28476
|
-
|
28477
|
-
|
28478
|
-
|
28479
|
-
|
28480
|
-
|
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",
|
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": [
|
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
|
-
|
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
|
-
|
30307
|
-
|
30308
|
-
|
30309
|
-
|
30310
|
-
|
30311
|
-
|
30312
|
-
|
30313
|
-
|
30314
|
-
|
30315
|
-
|
30316
|
-
|
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-
|
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,
|
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,
|