@nanoporetech-digital/components 4.9.4 → 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 +21 -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-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-54a4ba34.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-20ed37a5.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/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-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-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-929ac4d9.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-2425382a.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-5381c118.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-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-906de5a2.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 +875 -251
- package/package.json +2 -2
- package/dist/cjs/nano-table-54a4ba34.js.map +0 -1
- package/dist/cjs/table.worker-20ed37a5.js.map +0 -1
- package/dist/esm/nano-table-929ac4d9.js.map +0 -1
- package/dist/esm/table.worker-2425382a.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-4f260028.js +0 -5
- package/dist/nano-components/p-4f260028.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-5381c118.js.map → p-806bcd46.js.map} +0 -0
- /package/dist/nano-components/{p-906de5a2.entry.js.map → p-f591400b.entry.js.map} +0 -0
package/hydrate/index.js
CHANGED
|
@@ -19650,7 +19650,7 @@ class Icon {
|
|
|
19650
19650
|
}; }
|
|
19651
19651
|
}
|
|
19652
19652
|
|
|
19653
|
-
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)))}";
|
|
19654
19654
|
|
|
19655
19655
|
/** Icons buttons are simple, icon-only buttons that can be used for actions and in toolbars.
|
|
19656
19656
|
*
|
|
@@ -19660,6 +19660,20 @@ const iconButtonCss = ".sc-nano-icon-button-h{box-sizing:border-box}*.sc-nano-ic
|
|
|
19660
19660
|
class IconButton {
|
|
19661
19661
|
constructor(hostRef) {
|
|
19662
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
|
+
};
|
|
19663
19677
|
this.iconName = undefined;
|
|
19664
19678
|
this.iconSrc = undefined;
|
|
19665
19679
|
this.type = 'button';
|
|
@@ -19669,12 +19683,34 @@ class IconButton {
|
|
|
19669
19683
|
this.showTooltip = false;
|
|
19670
19684
|
this.disabled = false;
|
|
19671
19685
|
this.href = undefined;
|
|
19686
|
+
this.rel = undefined;
|
|
19672
19687
|
this.target = undefined;
|
|
19688
|
+
this.form = undefined;
|
|
19673
19689
|
}
|
|
19674
19690
|
/** Sets focus on the internal button */
|
|
19675
19691
|
async setFocus() {
|
|
19676
19692
|
this.button.focus();
|
|
19677
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
|
+
}
|
|
19678
19714
|
componentDidLoad() {
|
|
19679
19715
|
focusVisible.observe(this.button);
|
|
19680
19716
|
}
|
|
@@ -19687,10 +19723,10 @@ class IconButton {
|
|
|
19687
19723
|
}
|
|
19688
19724
|
content() {
|
|
19689
19725
|
const TagType = this.href === undefined ? 'button' : 'a';
|
|
19690
|
-
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: {
|
|
19691
19727
|
'icon-button': true,
|
|
19692
19728
|
'icon-button--disabled': this.disabled,
|
|
19693
|
-
}, "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" }))));
|
|
19694
19730
|
}
|
|
19695
19731
|
render() {
|
|
19696
19732
|
if (this.showTooltip) {
|
|
@@ -19698,9 +19734,10 @@ class IconButton {
|
|
|
19698
19734
|
}
|
|
19699
19735
|
return this.content();
|
|
19700
19736
|
}
|
|
19737
|
+
get host() { return getElement(this); }
|
|
19701
19738
|
static get style() { return iconButtonCss; }
|
|
19702
19739
|
static get cmpMeta() { return {
|
|
19703
|
-
"$flags$":
|
|
19740
|
+
"$flags$": 9,
|
|
19704
19741
|
"$tagName$": "nano-icon-button",
|
|
19705
19742
|
"$members$": {
|
|
19706
19743
|
"iconName": [1, "icon-name"],
|
|
@@ -19712,7 +19749,9 @@ class IconButton {
|
|
|
19712
19749
|
"showTooltip": [4, "show-tooltip"],
|
|
19713
19750
|
"disabled": [516],
|
|
19714
19751
|
"href": [1],
|
|
19752
|
+
"rel": [1],
|
|
19715
19753
|
"target": [1],
|
|
19754
|
+
"form": [1],
|
|
19716
19755
|
"setFocus": [64]
|
|
19717
19756
|
},
|
|
19718
19757
|
"$listeners$": undefined,
|
|
@@ -20957,18 +20996,18 @@ class NavItem {
|
|
|
20957
20996
|
}, 50);
|
|
20958
20997
|
}
|
|
20959
20998
|
else {
|
|
20960
|
-
/* the
|
|
20999
|
+
/* the secondary panel is not opening via hover,
|
|
20961
21000
|
scroll content into view, focus on it and add blur events */
|
|
20962
21001
|
if (!this.fromHover) {
|
|
20963
|
-
const
|
|
21002
|
+
const panelIO = new window.IntersectionObserver((data) => {
|
|
20964
21003
|
if (data[0].boundingClientRect.top < 0) {
|
|
20965
21004
|
this.secondaryDiv.scrollIntoView({
|
|
20966
21005
|
behavior: 'smooth',
|
|
20967
21006
|
});
|
|
20968
21007
|
}
|
|
20969
|
-
|
|
21008
|
+
panelIO.disconnect();
|
|
20970
21009
|
}, { threshold: 1 });
|
|
20971
|
-
|
|
21010
|
+
panelIO.observe(this.secondaryDiv);
|
|
20972
21011
|
this.secondaryDiv.focus({ preventScroll: true });
|
|
20973
21012
|
const focusableChild = getTabbableElements(this.secondaryDiv, true);
|
|
20974
21013
|
if (focusableChild[0])
|
|
@@ -27365,6 +27404,732 @@ const waitForSlides = (host) => {
|
|
|
27365
27404
|
});
|
|
27366
27405
|
};
|
|
27367
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
|
+
|
|
27368
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)}}";
|
|
27369
28134
|
|
|
27370
28135
|
/**
|
|
@@ -27400,24 +28165,6 @@ class Spinner {
|
|
|
27400
28165
|
}; }
|
|
27401
28166
|
}
|
|
27402
28167
|
|
|
27403
|
-
function drag(container, onMove) {
|
|
27404
|
-
function move(pointerEvent) {
|
|
27405
|
-
const dims = container.getBoundingClientRect();
|
|
27406
|
-
const defaultView = container.ownerDocument.defaultView;
|
|
27407
|
-
const offsetX = dims.left + defaultView.pageXOffset;
|
|
27408
|
-
const offsetY = dims.top + defaultView.pageYOffset;
|
|
27409
|
-
const x = pointerEvent.pageX - offsetX;
|
|
27410
|
-
const y = pointerEvent.pageY - offsetY;
|
|
27411
|
-
onMove(x, y);
|
|
27412
|
-
}
|
|
27413
|
-
function stop() {
|
|
27414
|
-
document.removeEventListener('pointermove', move);
|
|
27415
|
-
document.removeEventListener('pointerup', stop);
|
|
27416
|
-
}
|
|
27417
|
-
document.addEventListener('pointermove', move, { passive: true });
|
|
27418
|
-
document.addEventListener('pointerup', stop);
|
|
27419
|
-
}
|
|
27420
|
-
|
|
27421
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)}";
|
|
27422
28169
|
|
|
27423
28170
|
/**
|
|
@@ -27457,33 +28204,35 @@ class SplitPane {
|
|
|
27457
28204
|
}
|
|
27458
28205
|
// Prevent text selection when dragging
|
|
27459
28206
|
e.preventDefault();
|
|
27460
|
-
drag(this.host,
|
|
27461
|
-
|
|
27462
|
-
|
|
27463
|
-
|
|
27464
|
-
|
|
27465
|
-
|
|
27466
|
-
|
|
27467
|
-
|
|
27468
|
-
|
|
27469
|
-
|
|
27470
|
-
|
|
27471
|
-
|
|
27472
|
-
|
|
27473
|
-
|
|
27474
|
-
|
|
27475
|
-
|
|
27476
|
-
|
|
27477
|
-
|
|
27478
|
-
|
|
27479
|
-
newPositionInPixels
|
|
27480
|
-
|
|
27481
|
-
|
|
27482
|
-
|
|
27483
|
-
|
|
27484
|
-
|
|
27485
|
-
|
|
27486
|
-
|
|
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
|
+
},
|
|
27487
28236
|
});
|
|
27488
28237
|
};
|
|
27489
28238
|
this.handleKeyDown = (event) => {
|
|
@@ -28343,11 +29092,17 @@ class Sticker {
|
|
|
28343
29092
|
}; }
|
|
28344
29093
|
}
|
|
28345
29094
|
|
|
28346
|
-
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}";
|
|
28347
29096
|
|
|
28348
29097
|
let id$2 = 0;
|
|
28349
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
|
|
28350
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`)
|
|
28351
29106
|
*/
|
|
28352
29107
|
class Tab {
|
|
28353
29108
|
constructor(hostRef) {
|
|
@@ -28375,12 +29130,12 @@ class Tab {
|
|
|
28375
29130
|
this.tab.blur();
|
|
28376
29131
|
}
|
|
28377
29132
|
render() {
|
|
28378
|
-
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: {
|
|
28379
29134
|
nanotab: true,
|
|
28380
29135
|
'nanotab--active': this.active,
|
|
28381
29136
|
'nanotab--disabled': this.disabled,
|
|
28382
29137
|
'nanotab--closable': this.closable,
|
|
28383
|
-
}, 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" }))));
|
|
28384
29139
|
}
|
|
28385
29140
|
get host() { return getElement(this); }
|
|
28386
29141
|
static get style() { return tabCss; }
|
|
@@ -28401,7 +29156,7 @@ class Tab {
|
|
|
28401
29156
|
}; }
|
|
28402
29157
|
}
|
|
28403
29158
|
|
|
28404
|
-
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)}";
|
|
28405
29160
|
|
|
28406
29161
|
/**
|
|
28407
29162
|
* A traditional tab implementation. It nests `nano-tab` and `nano-tab-content` sub-components.
|
|
@@ -28448,6 +29203,9 @@ class TabGroup {
|
|
|
28448
29203
|
this.setActiveTab(tab);
|
|
28449
29204
|
};
|
|
28450
29205
|
this.handleKeyDown = (event) => {
|
|
29206
|
+
const activeEl = document.activeElement;
|
|
29207
|
+
if (!activeEl || activeEl.tagName.toLowerCase() !== 'nano-tab')
|
|
29208
|
+
return;
|
|
28451
29209
|
// Activate a tab
|
|
28452
29210
|
if (['Enter', ' '].includes(event.key)) {
|
|
28453
29211
|
const target = event.target;
|
|
@@ -28455,45 +29213,49 @@ class TabGroup {
|
|
|
28455
29213
|
if (tab) {
|
|
28456
29214
|
this.setActiveTab(tab);
|
|
28457
29215
|
event.preventDefault();
|
|
29216
|
+
event.stopPropagation();
|
|
28458
29217
|
}
|
|
28459
29218
|
}
|
|
28460
29219
|
// Move focus left or right
|
|
28461
|
-
if ([
|
|
29220
|
+
if (![
|
|
28462
29221
|
'ArrowLeft',
|
|
28463
29222
|
'ArrowRight',
|
|
28464
29223
|
'ArrowUp',
|
|
28465
29224
|
'ArrowDown',
|
|
28466
29225
|
'Home',
|
|
28467
29226
|
'End',
|
|
28468
|
-
].includes(event.key))
|
|
28469
|
-
|
|
28470
|
-
|
|
28471
|
-
|
|
28472
|
-
|
|
28473
|
-
|
|
28474
|
-
|
|
28475
|
-
|
|
28476
|
-
|
|
28477
|
-
|
|
28478
|
-
|
|
28479
|
-
|
|
28480
|
-
(!this.isRtl && event.key === 'ArrowLeft')) {
|
|
28481
|
-
index = Math.max(0, index - 1);
|
|
28482
|
-
}
|
|
28483
|
-
else if ((this.isRtl && event.key === 'ArrowLeft') ||
|
|
28484
|
-
(!this.isRtl && event.key === 'ArrowRight')) {
|
|
28485
|
-
index = Math.min(tabs.length - 1, index + 1);
|
|
28486
|
-
}
|
|
28487
|
-
tabs[index].setFocus();
|
|
28488
|
-
if (['top'].includes(this.placement)) {
|
|
28489
|
-
scrollIntoView(tabs[index], this.nav, 'horizontal', 'center');
|
|
28490
|
-
}
|
|
28491
|
-
// need to stop bubbling otherwise it will focus on parent tabs if nested
|
|
28492
|
-
event.stopPropagation();
|
|
28493
|
-
// stop the browser moving about
|
|
28494
|
-
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);
|
|
28495
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);
|
|
28496
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();
|
|
28497
29259
|
};
|
|
28498
29260
|
this.handleTabScroll = () => {
|
|
28499
29261
|
if (!this.hasScrollControls) {
|
|
@@ -28784,11 +29546,6 @@ class TabGroup {
|
|
|
28784
29546
|
}
|
|
28785
29547
|
});
|
|
28786
29548
|
observer.observe(this.host);
|
|
28787
|
-
focusVisible.observe(this.tabGroup);
|
|
28788
|
-
if (this.leftBtn) {
|
|
28789
|
-
focusVisible.observe(this.leftBtn);
|
|
28790
|
-
focusVisible.observe(this.rightBtn);
|
|
28791
|
-
}
|
|
28792
29549
|
requestAnimationFrame(() => this.updateScrollControls());
|
|
28793
29550
|
if (!window['ResizeObserver'])
|
|
28794
29551
|
return;
|
|
@@ -28811,27 +29568,22 @@ class TabGroup {
|
|
|
28811
29568
|
}
|
|
28812
29569
|
}
|
|
28813
29570
|
disconnectedCallback() {
|
|
28814
|
-
focusVisible.unobserve(this.tabGroup);
|
|
28815
|
-
if (this.leftBtn) {
|
|
28816
|
-
focusVisible.unobserve(this.leftBtn);
|
|
28817
|
-
focusVisible.unobserve(this.rightBtn);
|
|
28818
|
-
}
|
|
28819
29571
|
if (this.resizeObserver)
|
|
28820
29572
|
this.resizeObserver.unobserve(this.nav);
|
|
28821
29573
|
}
|
|
28822
29574
|
render() {
|
|
28823
29575
|
this.isRtl = this.host.ownerDocument.dir === 'rtl';
|
|
28824
|
-
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: {
|
|
28825
29577
|
'nano-tab-group': true,
|
|
28826
29578
|
'nano-tab-group--top': this.placement === 'top',
|
|
28827
29579
|
'nano-tab-group--start': this.placement === 'start',
|
|
28828
29580
|
'nano-tab-group--has-scroll-controls': this.hasScrollControls,
|
|
28829
29581
|
'nano-tab-group--has-scroll-controls-left': !this.hideControlLeft,
|
|
28830
29582
|
'nano-tab-group--has-scroll-controls-right': !this.hideControlRight,
|
|
28831
|
-
}, 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: {
|
|
28832
29584
|
'nano-tab-group__scroll-button': true,
|
|
28833
29585
|
'nano-tab-group__scroll-button--left': true,
|
|
28834
|
-
}, 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: {
|
|
28835
29587
|
'nano-tab-group__scroll-button': true,
|
|
28836
29588
|
'nano-tab-group__scroll-button--right': true,
|
|
28837
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 })))));
|
|
@@ -28850,7 +29602,7 @@ class TabGroup {
|
|
|
28850
29602
|
"$flags$": 9,
|
|
28851
29603
|
"$tagName$": "nano-tab-group",
|
|
28852
29604
|
"$members$": {
|
|
28853
|
-
"placement": [
|
|
29605
|
+
"placement": [513],
|
|
28854
29606
|
"noScrollControls": [4, "no-scroll-controls"],
|
|
28855
29607
|
"color": [1],
|
|
28856
29608
|
"storeId": [1, "store-id"],
|
|
@@ -28864,7 +29616,7 @@ class TabGroup {
|
|
|
28864
29616
|
},
|
|
28865
29617
|
"$listeners$": [[0, "nanoTabClose", "handleTabClose"]],
|
|
28866
29618
|
"$lazyBundleId$": "-",
|
|
28867
|
-
"$attrsToReflect$": []
|
|
29619
|
+
"$attrsToReflect$": [["placement", "placement"]]
|
|
28868
29620
|
}; }
|
|
28869
29621
|
}
|
|
28870
29622
|
|
|
@@ -29706,12 +30458,12 @@ function sort(workerStore, rows, prop, order) {
|
|
|
29706
30458
|
return rows;
|
|
29707
30459
|
const col = workerStore.columns.find((c) => c.prop === prop);
|
|
29708
30460
|
// custom sort
|
|
29709
|
-
if (!!col.sortCompareFn && typeof col.sortCompareFn === 'function') {
|
|
30461
|
+
if (!!(col === null || col === void 0 ? void 0 : col.sortCompareFn) && typeof col.sortCompareFn === 'function') {
|
|
29710
30462
|
const sorted = rows.slice().sort(col.sortCompareFn(prop, order));
|
|
29711
30463
|
return sorted;
|
|
29712
30464
|
}
|
|
29713
30465
|
// text sort
|
|
29714
|
-
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') {
|
|
29715
30467
|
const sorted = rows.slice().sort((a, b) => {
|
|
29716
30468
|
if (!a[prop])
|
|
29717
30469
|
return 1;
|
|
@@ -29755,7 +30507,7 @@ function applyFiltersAndSort(workerStore, rows) {
|
|
|
29755
30507
|
}
|
|
29756
30508
|
function colsFromStore(safeColumns) {
|
|
29757
30509
|
return safeColumns.map((c) => {
|
|
29758
|
-
if (!!c.sortCompareFn) {
|
|
30510
|
+
if (!!(c === null || c === void 0 ? void 0 : c.sortCompareFn)) {
|
|
29759
30511
|
c.sortCompareFn = new Function('return ' + c.sortCompareFn)();
|
|
29760
30512
|
}
|
|
29761
30513
|
return c;
|
|
@@ -29772,7 +30524,7 @@ async function destroyWorkerStore(workerId) {
|
|
|
29772
30524
|
function colsToWorker(columns) {
|
|
29773
30525
|
const safeColumns = JSON.parse(JSON.stringify(columns));
|
|
29774
30526
|
columns.forEach((c) => {
|
|
29775
|
-
if (!!c.sortCompareFn) {
|
|
30527
|
+
if (!!(c === null || c === void 0 ? void 0 : c.sortCompareFn)) {
|
|
29776
30528
|
const safeCol = safeColumns.find((sc) => sc.prop === c.prop);
|
|
29777
30529
|
safeCol.sortCompareFn = c.sortCompareFn.toString();
|
|
29778
30530
|
}
|
|
@@ -30166,88 +30918,8 @@ function isInViewport(el, percentVisible = 100) {
|
|
|
30166
30918
|
Math.floor(100 - ((r.bottom - windowHeight) / r.height) * 100) <
|
|
30167
30919
|
percentVisible);
|
|
30168
30920
|
}
|
|
30169
|
-
|
|
30170
|
-
|
|
30171
|
-
* @param from - the index to move from
|
|
30172
|
-
* @param to - the index to move to
|
|
30173
|
-
* @param arr - the array to re-order
|
|
30174
|
-
* @returns - a new, re-orderd array
|
|
30175
|
-
*/
|
|
30176
|
-
function arrMove(from, to, arr) {
|
|
30177
|
-
const newArr = [...arr];
|
|
30178
|
-
const item = newArr.splice(from, 1)[0];
|
|
30179
|
-
newArr.splice(to, 0, item);
|
|
30180
|
-
return newArr;
|
|
30181
|
-
}
|
|
30182
|
-
|
|
30183
|
-
// TABLE HEADERS
|
|
30184
|
-
// (thead > tr > th, tfoot > tr > th)
|
|
30185
|
-
let draggingCol;
|
|
30186
|
-
let draggingColEle;
|
|
30187
|
-
let dragEnterEle;
|
|
30188
|
-
let draggingParent;
|
|
30189
|
-
const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumnPinned, onColumnDrag, onColumnDrop, defaults, }) => {
|
|
30190
|
-
const store = fetchStores();
|
|
30191
|
-
// Drag to re-order columns handling
|
|
30192
|
-
function handleDragStart(e, column) {
|
|
30193
|
-
draggingCol = column;
|
|
30194
|
-
draggingColEle = dragEnterEle = e.target;
|
|
30195
|
-
draggingParent = draggingColEle.closest('.' + `${CSSNAMESPACE}__tr`);
|
|
30196
|
-
draggingParent.classList.add(`${CSSNAMESPACE}__dragging`);
|
|
30197
|
-
draggingColEle.classList.add(`${CSSNAMESPACE}__drag--start`);
|
|
30198
|
-
e.dataTransfer.effectAllowed = 'move';
|
|
30199
|
-
e.dataTransfer.setData('text/html', draggingColEle.innerHTML);
|
|
30200
|
-
onColumnDrag(column.prop, draggingColEle);
|
|
30201
|
-
}
|
|
30202
|
-
function handleDragEnd() {
|
|
30203
|
-
draggingParent.classList.remove(`${CSSNAMESPACE}__dragging`);
|
|
30204
|
-
draggingColEle.classList.remove(`${CSSNAMESPACE}__drag--start`);
|
|
30205
|
-
draggingParent
|
|
30206
|
-
.querySelectorAll(`.${CSSNAMESPACE}__drag-mask--active`)
|
|
30207
|
-
.forEach((el) => {
|
|
30208
|
-
el.classList.remove(`${CSSNAMESPACE}__drag-mask--active`);
|
|
30209
|
-
});
|
|
30210
|
-
draggingColEle = null;
|
|
30211
|
-
draggingCol = null;
|
|
30212
|
-
draggingParent = null;
|
|
30213
|
-
dragEnterEle = null;
|
|
30214
|
-
}
|
|
30215
|
-
function handleDragEnter(e) {
|
|
30216
|
-
if (dragEnterEle === e.target)
|
|
30217
|
-
return;
|
|
30218
|
-
e.preventDefault();
|
|
30219
|
-
e.stopImmediatePropagation();
|
|
30220
|
-
e.dataTransfer.dropEffect = 'move';
|
|
30221
|
-
draggingParent
|
|
30222
|
-
.querySelectorAll(`.${CSSNAMESPACE}__drag-mask--active`)
|
|
30223
|
-
.forEach((el) => {
|
|
30224
|
-
el.classList.remove(`${CSSNAMESPACE}__drag-mask--active`);
|
|
30225
|
-
});
|
|
30226
|
-
dragEnterEle = e.target;
|
|
30227
|
-
if (!dragEnterEle.classList.contains(`${CSSNAMESPACE}__drag-mask`)) {
|
|
30228
|
-
e.dataTransfer.dropEffect = 'none';
|
|
30229
|
-
return;
|
|
30230
|
-
}
|
|
30231
|
-
dragEnterEle.classList.add(`${CSSNAMESPACE}__drag-mask--active`);
|
|
30232
|
-
}
|
|
30233
|
-
function handleDrop(e) {
|
|
30234
|
-
e.stopPropagation();
|
|
30235
|
-
const { colName } = this.dataset;
|
|
30236
|
-
if (colName === draggingCol.prop)
|
|
30237
|
-
return;
|
|
30238
|
-
const cols = store.config.state.columns;
|
|
30239
|
-
let toIndex = cols.findIndex((col) => col.prop === colName);
|
|
30240
|
-
const fromIndex = cols.findIndex((col) => col === draggingCol);
|
|
30241
|
-
if (toIndex < fromIndex &&
|
|
30242
|
-
this.classList.contains(`${CSSNAMESPACE}__drag-mask--end`))
|
|
30243
|
-
toIndex++;
|
|
30244
|
-
if (toIndex > fromIndex &&
|
|
30245
|
-
this.classList.contains(`${CSSNAMESPACE}__drag-mask--start`))
|
|
30246
|
-
toIndex--;
|
|
30247
|
-
if (toIndex === fromIndex)
|
|
30248
|
-
return;
|
|
30249
|
-
onColumnDrop(draggingCol.prop, store.config.state.columns[toIndex].prop, draggingColEle);
|
|
30250
|
-
}
|
|
30921
|
+
|
|
30922
|
+
const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumnPinned, defaults, }) => {
|
|
30251
30923
|
// Sort handling
|
|
30252
30924
|
function handleColumnSortClick(e) {
|
|
30253
30925
|
let order;
|
|
@@ -30267,10 +30939,6 @@ const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumnPinned,
|
|
|
30267
30939
|
return ((!!defaults.sortable && column.sortable !== false) ||
|
|
30268
30940
|
(!defaults.sortable && column.sortable === true));
|
|
30269
30941
|
}
|
|
30270
|
-
function isDraggable() {
|
|
30271
|
-
return ((!!defaults.draggable && column.draggable !== false) ||
|
|
30272
|
-
(!defaults.draggable && column.draggable === true));
|
|
30273
|
-
}
|
|
30274
30942
|
let extraProps = {};
|
|
30275
30943
|
if (column.columnProperties) {
|
|
30276
30944
|
extraProps = column.columnProperties(column) || extraProps;
|
|
@@ -30293,37 +30961,23 @@ const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumnPinned,
|
|
|
30293
30961
|
: 'none';
|
|
30294
30962
|
props = Object.assign(Object.assign({}, props), { 'aria-sort': sort });
|
|
30295
30963
|
}
|
|
30296
|
-
if (isDraggable()) {
|
|
30297
|
-
props = Object.assign(Object.assign({}, props), { draggable: true, onDragStart: (e) => handleDragStart(e, column), onDragOver: (e) => e.preventDefault(), onDragEnd: () => handleDragEnd() });
|
|
30298
|
-
}
|
|
30299
30964
|
return (hAsync("th", Object.assign({}, props, { ref: (th) => {
|
|
30300
30965
|
if (['end', 'start'].includes(column.pinned))
|
|
30301
30966
|
addHObserver(th, column.pinned, onColumnPinned);
|
|
30302
30967
|
if (['top', 'bottom'].includes(headRenderer.pinned))
|
|
30303
30968
|
addVObserver(th, headRenderer.pinned, onColumnPinned);
|
|
30304
|
-
}, key: column.prop }),
|
|
30305
|
-
|
|
30306
|
-
|
|
30307
|
-
|
|
30308
|
-
|
|
30309
|
-
|
|
30310
|
-
|
|
30311
|
-
|
|
30312
|
-
|
|
30313
|
-
|
|
30314
|
-
|
|
30315
|
-
|
|
30316
|
-
[`${CSSNAMESPACE}__order-btn`]: true,
|
|
30317
|
-
[`${CSSNAMESPACE}__cell-content`]: true,
|
|
30318
|
-
}, onClick: handleColumnSortClick },
|
|
30319
|
-
colheadFootRender(column),
|
|
30320
|
-
column.filter !== undefined && column.filter !== null && (hAsync("nano-icon", { name: "light/filter" })),
|
|
30321
|
-
!!column.order &&
|
|
30322
|
-
(column.order === 'desc' ? (hAsync("nano-icon", { name: "solid/long-arrow-down" })) : (hAsync("nano-icon", { name: "solid/long-arrow-up" }))),
|
|
30323
|
-
hAsync("div", { class: `${CSSNAMESPACE}__status-icons` },
|
|
30324
|
-
hAsync("nano-icon", { name: "light/chevron-down" })))) : (hAsync("div", { class: `${CSSNAMESPACE}__cell-content` },
|
|
30325
|
-
colheadFootRender(column),
|
|
30326
|
-
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" }))))));
|
|
30327
30981
|
};
|
|
30328
30982
|
|
|
30329
30983
|
// TABLE CELL
|
|
@@ -30508,7 +31162,7 @@ const TableHeadFootRow = ({ rowRenderer, onColumnPinned }, children, utils) => {
|
|
|
30508
31162
|
return hAsync("tr", Object.assign({}, props), children);
|
|
30509
31163
|
};
|
|
30510
31164
|
|
|
30511
|
-
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)}";
|
|
30512
31166
|
|
|
30513
31167
|
let id = 0;
|
|
30514
31168
|
/**
|
|
@@ -30519,7 +31173,6 @@ let id = 0;
|
|
|
30519
31173
|
*- Built-in column sort
|
|
30520
31174
|
*- Easily swap in API / async based search / filter & sort
|
|
30521
31175
|
*- Pin headers, footers, rows, columns
|
|
30522
|
-
*- Drag-&-Drop columns to re-order
|
|
30523
31176
|
*- Add custom rendering at every level
|
|
30524
31177
|
*- Add custom properties at every level
|
|
30525
31178
|
*
|
|
@@ -30533,8 +31186,6 @@ class Table {
|
|
|
30533
31186
|
this.nanoTblBlockRendered = createEvent(this, "nanoTblBlockRendered", 7);
|
|
30534
31187
|
this.nanoTblBeforeSort = createEvent(this, "nanoTblBeforeSort", 7);
|
|
30535
31188
|
this.nanoTblAfterSort = createEvent(this, "nanoTblAfterSort", 7);
|
|
30536
|
-
this.nanoTblColDrag = createEvent(this, "nanoTblColDrag", 7);
|
|
30537
|
-
this.nanoTblColDrop = createEvent(this, "nanoTblColDrop", 7);
|
|
30538
31189
|
this.nanoTblBeforeFilter = createEvent(this, "nanoTblBeforeFilter", 7);
|
|
30539
31190
|
this.nanoTblAfterFilter = createEvent(this, "nanoTblAfterFilter", 7);
|
|
30540
31191
|
this.nanoTblBeforeSearch = createEvent(this, "nanoTblBeforeSearch", 7);
|
|
@@ -30549,32 +31200,6 @@ class Table {
|
|
|
30549
31200
|
this.blockHeights = [];
|
|
30550
31201
|
this.unitHeight = 0;
|
|
30551
31202
|
this._isReady = false;
|
|
30552
|
-
/**
|
|
30553
|
-
* Fired when a column is dragged
|
|
30554
|
-
* @param column
|
|
30555
|
-
*/
|
|
30556
|
-
this.colDrag = (column) => {
|
|
30557
|
-
this.nanoTblColDrag.emit({ column });
|
|
30558
|
-
};
|
|
30559
|
-
/**
|
|
30560
|
-
* Fired when a column is dropped after being dragged
|
|
30561
|
-
* @param fromCol
|
|
30562
|
-
* @param toCol
|
|
30563
|
-
*/
|
|
30564
|
-
this.colDrop = (fromCol, toCol) => {
|
|
30565
|
-
const cols = this.store.config.state.columns;
|
|
30566
|
-
const toIndex = cols.findIndex((col) => col.prop === toCol);
|
|
30567
|
-
const fromIndex = cols.findIndex((col) => col.prop === fromCol);
|
|
30568
|
-
const dropEvent = this.nanoTblColDrop.emit({
|
|
30569
|
-
fromCol,
|
|
30570
|
-
toCol,
|
|
30571
|
-
fromIndex,
|
|
30572
|
-
toIndex,
|
|
30573
|
-
});
|
|
30574
|
-
if (dropEvent.defaultPrevented)
|
|
30575
|
-
return;
|
|
30576
|
-
this.columns = arrMove(fromIndex, toIndex, cols);
|
|
30577
|
-
};
|
|
30578
31203
|
/**
|
|
30579
31204
|
* Start a sort - can be cancelled by `preventDefault`
|
|
30580
31205
|
* @param order - column order
|
|
@@ -30683,7 +31308,6 @@ class Table {
|
|
|
30683
31308
|
this.customFilterFn = undefined;
|
|
30684
31309
|
this.customSortFn = undefined;
|
|
30685
31310
|
this.defaultSort = true;
|
|
30686
|
-
this.defaultColDraggable = false;
|
|
30687
31311
|
this.virtualTotalItems = 0;
|
|
30688
31312
|
this.blocks = [];
|
|
30689
31313
|
this.activeBlocks = [0, 1, 2];
|
|
@@ -31112,6 +31736,8 @@ class Table {
|
|
|
31112
31736
|
this.activeWatcherIo = undefined;
|
|
31113
31737
|
}
|
|
31114
31738
|
const io = (this.activeWatcherIo = new IntersectionObserver(async ([e]) => {
|
|
31739
|
+
if (!this.store)
|
|
31740
|
+
return;
|
|
31115
31741
|
if (e.isIntersecting)
|
|
31116
31742
|
this.store.general.state.isActive = true;
|
|
31117
31743
|
else
|
|
@@ -31162,9 +31788,8 @@ class Table {
|
|
|
31162
31788
|
[`${CSSNAMESPACE}__caption`]: true,
|
|
31163
31789
|
[`${CSSNAMESPACE}__caption--hide`]: !this.showCaption,
|
|
31164
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) => [
|
|
31165
|
-
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: {
|
|
31166
31792
|
sortable: this.defaultSort,
|
|
31167
|
-
draggable: this.defaultColDraggable,
|
|
31168
31793
|
} }),
|
|
31169
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) => {
|
|
31170
31795
|
this.blockElements.push(tb);
|
|
@@ -31179,7 +31804,6 @@ class Table {
|
|
|
31179
31804
|
} })))))), this.showFooter && (hAsync("tfoot", null, hAsync(TableHeadFootRow, { rowRenderer: this.footRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
|
|
31180
31805
|
hAsync(TableColHead, { column: colModel, headRenderer: this.footRender, onColumnPinned: this.handleColumnPinned, onColumnSortClick: this.sortStart, defaults: {
|
|
31181
31806
|
sortable: this.defaultSort,
|
|
31182
|
-
draggable: this.defaultColDraggable,
|
|
31183
31807
|
} }),
|
|
31184
31808
|
]))))), !!this.blocks.length && (hAsync("nano-spinner", { type: "circle", class: {
|
|
31185
31809
|
[`${CSSNAMESPACE}__spinner`]: true,
|
|
@@ -31215,7 +31839,6 @@ class Table {
|
|
|
31215
31839
|
"customFilterFn": [16],
|
|
31216
31840
|
"customSortFn": [16],
|
|
31217
31841
|
"defaultSort": [4, "default-sort"],
|
|
31218
|
-
"defaultColDraggable": [4, "default-col-draggable"],
|
|
31219
31842
|
"virtualTotalItems": [2, "virtual-total-items"],
|
|
31220
31843
|
"internalLoading": [32],
|
|
31221
31844
|
"blocks": [32],
|
|
@@ -31473,6 +32096,7 @@ registerComponents([
|
|
|
31473
32096
|
Skeleton,
|
|
31474
32097
|
Slide$2,
|
|
31475
32098
|
Slides,
|
|
32099
|
+
Sortable,
|
|
31476
32100
|
Spinner,
|
|
31477
32101
|
SplitPane,
|
|
31478
32102
|
Sticker,
|