@nanoporetech-digital/components 5.1.3 → 5.2.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 +15 -0
- package/dist/cjs/{component-store-74d25f63.js → component-store-f1dc1276.js} +2 -2
- package/dist/cjs/{component-store-74d25f63.js.map → component-store-f1dc1276.js.map} +1 -1
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/nano-algolia-filter.cjs.entry.js +2 -2
- package/dist/cjs/nano-algolia-input.cjs.entry.js +2 -2
- package/dist/cjs/nano-algolia.cjs.entry.js +2 -2
- package/dist/cjs/nano-checkbox-group.cjs.entry.js +1 -1
- package/dist/cjs/nano-components.cjs.js +1 -1
- package/dist/cjs/nano-datalist_3.cjs.entry.js +1 -1
- package/dist/cjs/nano-dialog.cjs.entry.js +2 -2
- package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +2 -2
- package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-global-nav.cjs.entry.js +2 -2
- package/dist/cjs/nano-input.cjs.entry.js +1 -1
- package/dist/cjs/nano-overflow-nav.cjs.entry.js +1 -1
- package/dist/cjs/nano-range.cjs.entry.js +1 -1
- package/dist/cjs/nano-resize-observe_2.cjs.entry.js +3 -1
- package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-sortable.cjs.entry.js +16 -8
- package/dist/cjs/nano-sortable.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-split-pane.cjs.entry.js +1 -1
- package/dist/cjs/nano-sticker.cjs.entry.js +4 -2
- package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-tab-group.cjs.entry.js +2 -2
- package/dist/cjs/{nano-table-5a7a4d53.js → nano-table-04993bb4.js} +552 -181
- package/dist/cjs/nano-table-04993bb4.js.map +1 -0
- package/dist/cjs/nano-table.cjs.entry.js +2 -2
- package/dist/cjs/{table.worker-77e56070.js → table.worker-85877b23.js} +4 -4
- package/dist/cjs/table.worker-85877b23.js.map +1 -0
- package/dist/cjs/{table.worker-bd51e29f.js → table.worker-f258383d.js} +1 -1
- package/dist/cjs/{throttle-f55496c8.js → throttle-dfa64b9e.js} +17 -20
- package/dist/cjs/throttle-dfa64b9e.js.map +1 -0
- package/dist/collection/components/resize-observe/resize-observe.js +21 -1
- package/dist/collection/components/resize-observe/resize-observe.js.map +1 -1
- package/dist/collection/components/select/select.css +0 -1
- package/dist/collection/components/sortable/sortable.js +3 -7
- package/dist/collection/components/sortable/sortable.js.map +1 -1
- package/dist/collection/components/sticker/sticker.js +11 -5
- package/dist/collection/components/sticker/sticker.js.map +1 -1
- package/dist/collection/components/table/table-interface.js.map +1 -1
- package/dist/collection/components/table/table.cell.js +43 -10
- package/dist/collection/components/table/table.cell.js.map +1 -1
- package/dist/collection/components/table/table.css +38 -55
- package/dist/collection/components/table/table.header.js +4 -9
- package/dist/collection/components/table/table.header.js.map +1 -1
- package/dist/collection/components/table/table.js +96 -43
- package/dist/collection/components/table/table.js.map +1 -1
- package/dist/collection/components/table/table.pin-service.js +382 -0
- package/dist/collection/components/table/table.pin-service.js.map +1 -0
- package/dist/collection/components/table/table.row.js +39 -46
- package/dist/collection/components/table/table.row.js.map +1 -1
- package/dist/collection/components/table/table.utils.js +0 -124
- package/dist/collection/components/table/table.utils.js.map +1 -1
- package/dist/collection/components/table/table.worker.js +1 -0
- package/dist/collection/components/table/table.worker.js.map +1 -1
- package/dist/collection/utils/events.js +27 -0
- package/dist/collection/utils/events.js.map +1 -0
- package/dist/collection/utils/throttle.js +16 -19
- package/dist/collection/utils/throttle.js.map +1 -1
- package/dist/components/nano-sortable.js +15 -7
- package/dist/components/nano-sortable.js.map +1 -1
- package/dist/components/resize-observe.js +3 -1
- package/dist/components/resize-observe.js.map +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/select.js.map +1 -1
- package/dist/components/sticker.js +3 -1
- package/dist/components/sticker.js.map +1 -1
- package/dist/components/table.js +525 -183
- package/dist/components/table.js.map +1 -1
- package/dist/components/table.worker.js +1 -1
- package/dist/components/throttle.js +16 -19
- package/dist/components/throttle.js.map +1 -1
- package/dist/esm/{component-store-244a8431.js → component-store-c23ebc9c.js} +2 -2
- package/dist/esm/{component-store-244a8431.js.map → component-store-c23ebc9c.js.map} +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/nano-algolia-filter.entry.js +2 -2
- package/dist/esm/nano-algolia-input.entry.js +2 -2
- package/dist/esm/nano-algolia.entry.js +2 -2
- package/dist/esm/nano-checkbox-group.entry.js +1 -1
- package/dist/esm/nano-components.js +1 -1
- package/dist/esm/nano-datalist_3.entry.js +1 -1
- package/dist/esm/nano-dialog.entry.js +2 -2
- package/dist/esm/nano-global-nav-user-profile_3.entry.js +2 -2
- package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
- package/dist/esm/nano-global-nav.entry.js +2 -2
- package/dist/esm/nano-input.entry.js +1 -1
- package/dist/esm/nano-overflow-nav.entry.js +1 -1
- package/dist/esm/nano-range.entry.js +1 -1
- package/dist/esm/nano-resize-observe_2.entry.js +3 -1
- package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
- package/dist/esm/nano-sortable.entry.js +16 -8
- package/dist/esm/nano-sortable.entry.js.map +1 -1
- package/dist/esm/nano-split-pane.entry.js +1 -1
- package/dist/esm/nano-sticker.entry.js +4 -2
- package/dist/esm/nano-sticker.entry.js.map +1 -1
- package/dist/esm/nano-tab-group.entry.js +2 -2
- package/dist/esm/{nano-table-026a0d30.js → nano-table-91f09583.js} +553 -182
- package/dist/esm/nano-table-91f09583.js.map +1 -0
- package/dist/esm/nano-table.entry.js +2 -2
- package/dist/esm/{table.worker-c17a27ed.js → table.worker-625475ba.js} +4 -4
- package/dist/esm/table.worker-625475ba.js.map +1 -0
- package/dist/esm/{table.worker-bd51e29f.js → table.worker-f258383d.js} +1 -1
- package/dist/esm/{throttle-7836544e.js → throttle-ac4fcefa.js} +17 -20
- package/dist/esm/throttle-ac4fcefa.js.map +1 -0
- package/dist/nano-components/index.esm.js +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-7d6065c6.entry.js → p-0697795a.entry.js} +2 -2
- package/dist/nano-components/p-0697795a.entry.js.map +1 -0
- package/dist/nano-components/p-17ee0c07.entry.js +5 -0
- package/dist/nano-components/{p-6975f110.entry.js → p-192902e0.entry.js} +2 -2
- package/dist/nano-components/{p-a6ff5ca6.js → p-1a0b5bc3.js} +2 -2
- package/dist/nano-components/{p-3a761d77.entry.js → p-1b791810.entry.js} +2 -2
- package/dist/nano-components/p-3de3449e.js +5 -0
- package/dist/nano-components/p-3de3449e.js.map +1 -0
- package/dist/nano-components/{p-3b4b7f40.entry.js → p-3eb6d833.entry.js} +2 -2
- package/dist/nano-components/{p-a1c0afb6.entry.js → p-4884b65a.entry.js} +2 -2
- package/dist/nano-components/{p-34501eae.entry.js → p-565793a2.entry.js} +2 -2
- package/dist/nano-components/p-5aae2588.entry.js +5 -0
- package/dist/nano-components/p-5aae2588.entry.js.map +1 -0
- package/dist/nano-components/{p-935aef3d.entry.js → p-6920ad69.entry.js} +2 -2
- package/dist/nano-components/{p-1c6c94cb.entry.js → p-7baa9e14.entry.js} +2 -2
- package/dist/nano-components/p-7bff5224.js +5 -0
- package/dist/nano-components/p-7bff5224.js.map +1 -0
- package/dist/nano-components/{p-f60fe933.entry.js → p-898cbac7.entry.js} +2 -2
- package/dist/nano-components/{p-ace1ffc2.entry.js → p-a362bd23.entry.js} +2 -2
- package/dist/nano-components/{p-eb6c9191.entry.js → p-b72df1aa.entry.js} +2 -2
- package/dist/nano-components/{p-9c4efe14.entry.js → p-bf18e298.entry.js} +2 -2
- package/dist/nano-components/p-bf18e298.entry.js.map +1 -0
- package/dist/nano-components/p-ce5efc3f.entry.js +5 -0
- package/dist/nano-components/p-ce5efc3f.entry.js.map +1 -0
- package/dist/nano-components/{p-1b687f96.entry.js → p-d0eefd52.entry.js} +2 -2
- package/dist/nano-components/{p-1a9d9956.entry.js → p-d74e2642.entry.js} +2 -2
- package/dist/nano-components/{p-2e63676f.js → p-dfbf0d56.js} +2 -2
- package/dist/nano-components/{p-bd51e29f.js → p-f258383d.js} +1 -1
- package/dist/types/components/resize-observe/resize-observe.d.ts +2 -0
- package/dist/types/components/sortable/sortable.d.ts +0 -1
- package/dist/types/components/sticker/sticker.d.ts +2 -2
- package/dist/types/components/table/table-interface.d.ts +23 -11
- package/dist/types/components/table/table.cell.d.ts +0 -7
- package/dist/types/components/table/table.d.ts +10 -7
- package/dist/types/components/table/table.header.d.ts +0 -1
- package/dist/types/components/table/table.pin-service.d.ts +90 -0
- package/dist/types/components/table/table.row.d.ts +3 -2
- package/dist/types/components/table/table.utils.d.ts +0 -27
- package/dist/types/components.d.ts +29 -11
- package/dist/types/utils/events.d.ts +15 -0
- package/dist/types/utils/throttle.d.ts +1 -1
- package/docs-json.json +59 -24
- package/docs-vscode.json +2 -2
- package/hydrate/index.js +575 -190
- package/package.json +2 -2
- package/dist/cjs/nano-table-5a7a4d53.js.map +0 -1
- package/dist/cjs/table.worker-77e56070.js.map +0 -1
- package/dist/cjs/throttle-f55496c8.js.map +0 -1
- package/dist/esm/nano-table-026a0d30.js.map +0 -1
- package/dist/esm/table.worker-c17a27ed.js.map +0 -1
- package/dist/esm/throttle-7836544e.js.map +0 -1
- package/dist/nano-components/p-15217442.entry.js +0 -5
- package/dist/nano-components/p-15217442.entry.js.map +0 -1
- package/dist/nano-components/p-30cc21c2.entry.js +0 -5
- package/dist/nano-components/p-59eb9caa.js +0 -5
- package/dist/nano-components/p-59eb9caa.js.map +0 -1
- package/dist/nano-components/p-7759d185.entry.js +0 -5
- package/dist/nano-components/p-7759d185.entry.js.map +0 -1
- package/dist/nano-components/p-7d6065c6.entry.js.map +0 -1
- package/dist/nano-components/p-9746b0a5.js +0 -5
- package/dist/nano-components/p-9746b0a5.js.map +0 -1
- package/dist/nano-components/p-9c4efe14.entry.js.map +0 -1
- /package/dist/nano-components/{p-2e63676f.js.map → p-17ee0c07.entry.js.map} +0 -0
- /package/dist/nano-components/{p-6975f110.entry.js.map → p-192902e0.entry.js.map} +0 -0
- /package/dist/nano-components/{p-a6ff5ca6.js.map → p-1a0b5bc3.js.map} +0 -0
- /package/dist/nano-components/{p-3a761d77.entry.js.map → p-1b791810.entry.js.map} +0 -0
- /package/dist/nano-components/{p-3b4b7f40.entry.js.map → p-3eb6d833.entry.js.map} +0 -0
- /package/dist/nano-components/{p-a1c0afb6.entry.js.map → p-4884b65a.entry.js.map} +0 -0
- /package/dist/nano-components/{p-34501eae.entry.js.map → p-565793a2.entry.js.map} +0 -0
- /package/dist/nano-components/{p-935aef3d.entry.js.map → p-6920ad69.entry.js.map} +0 -0
- /package/dist/nano-components/{p-1c6c94cb.entry.js.map → p-7baa9e14.entry.js.map} +0 -0
- /package/dist/nano-components/{p-f60fe933.entry.js.map → p-898cbac7.entry.js.map} +0 -0
- /package/dist/nano-components/{p-ace1ffc2.entry.js.map → p-a362bd23.entry.js.map} +0 -0
- /package/dist/nano-components/{p-eb6c9191.entry.js.map → p-b72df1aa.entry.js.map} +0 -0
- /package/dist/nano-components/{p-1b687f96.entry.js.map → p-d0eefd52.entry.js.map} +0 -0
- /package/dist/nano-components/{p-1a9d9956.entry.js.map → p-d74e2642.entry.js.map} +0 -0
- /package/dist/nano-components/{p-30cc21c2.entry.js.map → p-dfbf0d56.js.map} +0 -0
package/hydrate/index.js
CHANGED
@@ -22240,6 +22240,7 @@ class ResizeObserve {
|
|
22240
22240
|
this.nanoResizeStateChange = createEvent(this, "nanoResizeStateChange", 7);
|
22241
22241
|
this.nanoResizeObserverReady = createEvent(this, "nanoResizeObserverReady", 7);
|
22242
22242
|
this.nanoResizeContentFitChange = createEvent(this, "nanoResizeContentFitChange", 7);
|
22243
|
+
this.nanoResize = createEvent(this, "nanoResize", 7);
|
22243
22244
|
this.isReady = false;
|
22244
22245
|
this.assessChanges = () => {
|
22245
22246
|
if (!this.currentWidth && !this.currentHeight)
|
@@ -22404,10 +22405,11 @@ class ResizeObserve {
|
|
22404
22405
|
attachRO() {
|
22405
22406
|
if (!window['ResizeObserver'])
|
22406
22407
|
return;
|
22407
|
-
this.ro = new ResizeObserver(() => {
|
22408
|
+
this.ro = new ResizeObserver((ro) => {
|
22408
22409
|
const { width, height } = this.host.getBoundingClientRect();
|
22409
22410
|
this.currentWidth = Math.ceil(width);
|
22410
22411
|
this.currentHeight = Math.ceil(height);
|
22412
|
+
this.nanoResize.emit(ro);
|
22411
22413
|
});
|
22412
22414
|
this.ro.observe(this.host);
|
22413
22415
|
}
|
@@ -22468,7 +22470,7 @@ class ResizeObserve {
|
|
22468
22470
|
}; }
|
22469
22471
|
}
|
22470
22472
|
|
22471
|
-
const selectCss = ".sc-nano-select-h {\n box-sizing: border-box;\n}\n\n*.sc-nano-select, *.sc-nano-select::before, *.sc-nano-select::after {\n box-sizing: border-box;\n}\n[hidden].sc-nano-select {\n display: none !important;\n}\n[disabled].sc-nano-select-h:not([disabled=false]) {\n opacity: 0.5;\n}\n\n.form-ctrl.sc-nano-select {\n min-inline-size: 100%;\n display: block;\n}\n.form-ctrl.has-helper-end.sc-nano-select {\n display: flex;\n gap: 1rem;\n container-type: inline-size;\n}\n.form-ctrl.has-helper-end.sc-nano-select .form-ctrl__wrapper.sc-nano-select {\n flex: 1 1 100%;\n}\n.form-ctrl.has-helper-end.sc-nano-select .form-ctrl__helper-end.sc-nano-select {\n display: none;\n}\n@container (min-width: 350px) {\n .form-ctrl.has-helper-end .form-ctrl__helper-end {\n display: block !important;\n }\n .form-ctrl.has-helper-end .form-ctrl__helper {\n display: none !important;\n }\n}\n\n.form-ctrl__wrapper.sc-nano-select {\n display: block;\n}\n\nlabel.sc-nano-select, .form-ctrl__more.sc-nano-select, .form-ctrl__error.sc-nano-select, .form-ctrl__helper.sc-nano-select {\n display: block;\n inline-size: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\nlabel.visually-hide.sc-nano-select, .form-ctrl__more.visually-hide.sc-nano-select, .form-ctrl__error.visually-hide.sc-nano-select, .form-ctrl__helper.visually-hide.sc-nano-select {\n clip: rect(1px, 1px, 1px, 1px);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n block-size: 1px;\n inline-size: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n}\n\n.form-ctrl__float-label.sc-nano-select {\n padding-block: 0;\n -webkit-padding-end: 0;\n padding-inline-end: 0;\n -webkit-padding-start: var(--padding-start);\n padding-inline-start: var(--padding-start);\n color: var(--label-color);\n position: absolute;\n font-size: 1.15em;\n transform: translateY(-50%);\n transform-origin: top left;\n inset-block-start: 50%;\n transition: all 0.125s ease-in;\n opacity: 1;\n}\n.has-focus.sc-nano-select-h .form-ctrl__float-label.sc-nano-select, .has-value.sc-nano-select-h .form-ctrl__float-label.sc-nano-select {\n transform: translateY(-110%);\n font-size: 0.8em;\n opacity: 0.7;\n}\n.form-ctrl__float-label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select {\n opacity: 0;\n transition: opacity 0.125s ease-in;\n}\n.has-focus.sc-nano-select-h .form-ctrl__float-label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select, .has-value.sc-nano-select-h .form-ctrl__float-label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select {\n opacity: 1;\n}\n.form-ctrl__textarea.sc-nano-select .form-ctrl__float-label.sc-nano-select {\n inset-block-start: 50%;\n}\n.has-focus.sc-nano-select-h .form-ctrl__textarea.sc-nano-select .form-ctrl__float-label.sc-nano-select {\n inset-block-start: 0;\n transform: translateY(38%);\n}\n.has-value.sc-nano-select-h .form-ctrl__textarea.sc-nano-select .form-ctrl__float-label.sc-nano-select {\n inset-block-start: 0;\n transform: translateY(38%);\n}\n\n.form-ctrl__label.sc-nano-select {\n color: var(--label-color);\n font-size: var(--label-font-size);\n -webkit-padding-after: var(--padding-bottom);\n padding-block-end: var(--padding-bottom);\n line-height: 1;\n display: flex;\n}\n.form-ctrl__label.sc-nano-select .form-ctrl__label-wrap.sc-nano-select {\n flex: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.form-ctrl__label.sc-nano-select .form-ctrl__label-placeholder.sc-nano-select {\n margin-block: unset;\n -webkit-margin-end: 5px;\n margin-inline-end: 5px;\n -webkit-margin-start: 0;\n margin-inline-start: 0;\n opacity: 0;\n -webkit-appearance: none;\n appearance: none;\n transition: 0.3s ease opacity;\n font-size: 0.9em;\n}\n.form-ctrl__label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select {\n margin-block: unset;\n -webkit-margin-end: 0;\n margin-inline-end: 0;\n -webkit-margin-start: auto;\n margin-inline-start: auto;\n font-size: 0.9em;\n opacity: 0.5;\n}\n.has-value.sc-nano-select-h .form-ctrl__label.sc-nano-select .form-ctrl__label-placeholder.sc-nano-select {\n opacity: 0.5;\n}\n.has-focus.sc-nano-select-h .form-ctrl__label.sc-nano-select {\n color: var(--label-color--focus);\n}\n.is-invalid.sc-nano-select-h:not([disabled]) .form-ctrl__label.sc-nano-select {\n color: var(--label-color--invalid);\n}\n\n.has-float-label.sc-nano-select .select__multi-input.sc-nano-select, .has-float-label.sc-nano-select .select__native-input.sc-nano-select, .has-float-label.sc-nano-select .input__native-ctrl.sc-nano-select {\n opacity: 0;\n transition: opacity 0.125s ease-in;\n}\n.has-focus.sc-nano-select-h .has-float-label.sc-nano-select .select__multi-input.sc-nano-select, .has-value.sc-nano-select-h .has-float-label.sc-nano-select .select__multi-input.sc-nano-select, .has-focus.sc-nano-select-h .has-float-label.sc-nano-select .select__native-input.sc-nano-select, .has-value.sc-nano-select-h .has-float-label.sc-nano-select .select__native-input.sc-nano-select, .has-focus.sc-nano-select-h .has-float-label.sc-nano-select .input__native-ctrl.sc-nano-select, .has-value.sc-nano-select-h .has-float-label.sc-nano-select .input__native-ctrl.sc-nano-select {\n opacity: 1;\n}\n\n.form-ctrl__more.sc-nano-select {\n block-size: 1em;\n position: relative;\n margin-block: 4px var(--padding-bottom);\n margin-inline: 3px 0;\n}\n\n.form-ctrl__helper.sc-nano-select, .form-ctrl__error.sc-nano-select {\n inset-block-start: 0;\n inset-inline-start: 0;\n position: absolute;\n font-size: var(--invalid-msg-font-size);\n line-height: 1.2;\n transition: 0.3s ease-out opacity;\n}\n\n.form-ctrl__helper.sc-nano-select {\n font-style: italic;\n color: var(--help-msg-color);\n}\n[show-inline-error].sc-nano-select-h:not([show-inline-error=false]):not([disabled]).is-invalid .form-ctrl__helper.sc-nano-select {\n opacity: 0;\n}\n\n.form-ctrl__helper-end.sc-nano-select {\n flex: 1 1 30%;\n min-inline-size: 150px;\n font-size: var(--invalid-msg-font-size);\n color: var(--help-msg-color);\n font-style: italic;\n}\n\n.form-ctrl__error.sc-nano-select {\n opacity: 0;\n color: var(--invalid-msg-color);\n font-stretch: condensed;\n}\n.is-invalid.sc-nano-select-h:not([disabled]) .form-ctrl__error.sc-nano-select {\n opacity: 1;\n}\n\n.form-ctrl__input.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n border-radius: var(--input-border-radius);\n inline-size: 100%;\n padding: 0 !important;\n position: relative;\n flex: 1 0 auto;\n display: flex;\n background: var(--input-bg-color);\n border: var(--input-border-style);\n border-width: var(--input-border-width);\n font-size: var(--input-font-size);\n -webkit-padding-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n padding-inline-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n}\n.has-focus.sc-nano-select-h .form-ctrl__input.sc-nano-select {\n background: var(--input-bg-color--focus);\n border: var(--input-border-style--focus);\n border-width: var(--input-border-width);\n -webkit-padding-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n padding-inline-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n}\n.is-invalid.sc-nano-select-h:not([disabled]) .form-ctrl__input.sc-nano-select {\n background: var(--input-bg-color--invalid);\n border: var(--input-border-style--invalid);\n border-width: var(--input-border-width);\n -webkit-border-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n border-inline-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n -webkit-padding-start: 0 !important;\n padding-inline-start: 0 !important;\n}\n.is-invalid.has-focus.sc-nano-select-h:not([disabled]) .form-ctrl__input.sc-nano-select {\n background: var(--input-bg-color--invalid);\n border: var(--input-border-style--invalid-focus);\n border-width: var(--input-border-width);\n -webkit-border-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n border-inline-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n -webkit-padding-start: 0 !important;\n padding-inline-start: 0 !important;\n}\n\n.form-ctrl__input-wrap.sc-nano-select {\n display: flex;\n align-items: stretch;\n flex: 1;\n max-inline-size: 100%;\n}\n\n.form-ctrl__clear-btn.sc-nano-select, .form-ctrl__slot-end.sc-nano-select, .form-ctrl__slot-start.sc-nano-select, .form-ctrl__slot-value-end.sc-nano-select {\n --nano-icon-size: 1.4em;\n margin-block: 0;\n margin-inline: 0;\n font-size: 1em;\n border: 0;\n outline: none;\n background-color: transparent;\n background-repeat: no-repeat;\n display: flex;\n align-items: stretch;\n inline-size: auto;\n}\n\n.has-float-label.sc-nano-select .form-ctrl__slot-start.sc-nano-select {\n display: none;\n}\n\n.form-ctrl__slot-start.sc-nano-select-s > *, .form-ctrl__slot-start .sc-nano-select-s > *, .form-ctrl__slot-end.sc-nano-select-s > *, .form-ctrl__slot-end .sc-nano-select-s > *, .form-ctrl__slot-value-end.sc-nano-select-s > *, .form-ctrl__slot-value-end .sc-nano-select-s > *, .form-ctrl__slot-value-end.sc-nano-select *.sc-nano-select {\n --nano-icon-size: 1.4em;\n padding-inline: unset;\n -webkit-padding-start: var(--padding-start);\n padding-inline-start: var(--padding-start);\n -webkit-padding-end: var(--padding-end);\n padding-inline-end: var(--padding-end);\n font-size: 1em;\n align-items: center;\n display: flex;\n block-size: 100%;\n z-index: 1;\n}\n.sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-start.sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-start .sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-end.sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-end .sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-value-end.sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-value-end .sc-nano-select-s > *, [disabled].sc-nano-select-h:not([disabled=false]) .form-ctrl__slot-value-end.sc-nano-select *.sc-nano-select {\n pointer-events: none;\n}\n\n.form-ctrl__slot-value-end.sc-nano-select-s > *, .form-ctrl__slot-value-end .sc-nano-select-s > *, .form-ctrl__slot-value-end.sc-nano-select *.sc-nano-select {\n pointer-events: none;\n}\n\n.form-ctrl__clear-btn.sc-nano-select {\n color: var(--clear-btn-color);\n padding: 0;\n opacity: 0;\n inline-size: 0;\n -webkit-appearance: none;\n appearance: none;\n align-items: center;\n overflow: hidden;\n}\n.is-invalid.sc-nano-select-h .form-ctrl__clear-btn.sc-nano-select {\n color: var(--clear-btn-color--invalid);\n}\n.has-value.sc-nano-select-h .form-ctrl__clear-btn.sc-nano-select {\n padding-block: 0;\n padding-inline: var(--padding-start) var(--padding-end);\n opacity: 1;\n inline-size: auto;\n}\n.form-ctrl__clear-btn.sc-nano-select:hover {\n color: var(--clear-btn-color--hover);\n}\n\n.sc-nano-select-h {\n \n --placeholder-color: var(--nano-input-placeholder-color, initial);\n --placeholder-font-style: var(--nano-input-placeholder-style, initial);\n --placeholder-font-weight: var(--nano-input-placeholder-weight, initial);\n --placeholder-opacity: var(--nano-input-placeholder-opacity, 0.5);\n --padding-top: var(--nano-input-padding-top, var(--nano-input-padding, 8px));\n --padding-end: var(--nano-input-padding-end, var(--nano-input-padding, 8px));\n --padding-bottom: var(--nano-input-padding-bottom, var(--nano-input-padding, 6px));\n --padding-start: var(--nano-input-padding-start, var(--nano-input-padding, 8px));\n --color-invalid: var(--nano-color-danger-rgb, 239 65 53);\n --color--focus-rgb:\n var(\n --nano-color-base-rgb,\n var(--nano-color-primary-rgb, 0 116 149)\n );\n --input-font-size: var(--nano-input-font-size, 0.87em);\n --input-text-color: var(--nano-input-text-color, #4a4a4a);\n --input-border-width: var(--nano-input-border-width, 1px);\n --input-border-hint-width: 3px;\n --input-border-color: var(--nano-input-border-color, #e4e6e8);\n --input-border-radius: var(--nano-input-border-radius, 0);\n --input-border-style: var(--nano-input-border-style, solid) var(--nano-input-border-color, #e4e6e8);\n --input-border-style--focus: var(--nano-input-border-style, solid) var(--nano-input-border-color--focus, #90c6e7);\n --input-border-style--invalid: var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #e4e6e8);\n --input-border-style--invalid-focus: var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #ef4135);\n --input-bg-color: var(--nano-input-background-color, #fff);\n --input-bg-color--focus: var(--input-bg-color);\n --input-bg-color--invalid: var(--nano-input-background-color, white);\n --invalid-msg-color: rgb(var(--color-invalid) / 100%);\n --invalid-msg-font-size: var(--nano-input-help-font-size, 0.75em);\n --help-msg-color: var(--nano-input-help-color, #616d6e);\n --clear-btn-color: var(--nano-clear-btn-color, rgba(0, 0, 0, 0.3));\n --clear-btn-color--hover: rgb(var(--color--focus-rgb) / 100%);\n --clear-btn-color--invalid: rgb(var(--color-invalid) / 100%);\n --label-color: var(--nano-input-label-color, \"currentcolor\");\n --label-color--focus: var(--label-color);\n --label-color--invalid: var(--nano-input-label-color-invalid, \"currentcolor\");\n --label-font-size: var(--nano-input-label-color, 1em);\n --multi-input-value-bg: var(--nano-input-tag-bg, 186 220 240);\n --multi-input-value-text-color: var(--nano-input-tag-color, #455556);\n --multi-input-value-border: var(--nano-input-tag-color, #badcf0);\n \n position: relative;\n width: 100%;\n padding: 0 !important;\n font-family: var(--nano-font-family, inherit);\n display: block;\n}\n\n.nano-color.sc-nano-select-h {\n --input-border-style--focus:\n var(--nano-input-border-style, solid) var(\n --nano-color-tint,\n var(--nano-color-primary-tint, #2689a5)\n );\n --multi-input-value-bg: var(--nano-color-tint-rgb);\n --multi-input-value-border: var(--nano-color-shade);\n --multi-input-value-text-color: var(--nano-color-contrast);\n color: var(--nano-color-base);\n}\n\nnano-item.sc-nano-select-h:not(.item-label), nano-item:not(.item-label) .sc-nano-select-h {\n --padding-start: 0;\n}\n\n[disabled].sc-nano-select-h:not([disabled=false]) *.sc-nano-select {\n pointer-events: none !important;\n}\n\nselect.sc-nano-select {\n display: none;\n}\n\n.select__native-input.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n padding: unset;\n padding-inline: var(--padding-start) var(--padding-end);\n padding-block: 0;\n border-radius: var(--input-border-radius);\n text-overflow: ellipsis;\n color: var(--input-text-color);\n display: inline-block;\n flex: 1;\n width: 100%;\n max-width: 100%;\n max-height: 100%;\n border: 0;\n outline: none;\n background: transparent;\n -webkit-appearance: none;\n appearance: none;\n margin: 0;\n box-sizing: border-box;\n resize: none;\n overflow: hidden;\n cursor: default;\n line-height: 2.5em;\n \n \n}\n.has-float-label.sc-nano-select .select__native-input.sc-nano-select {\n line-height: 2.1em;\n min-height: 2.1em;\n -webkit-padding-before: 1.4em;\n padding-block-start: 1.4em;\n}\n.select__native-input.sc-nano-select::selection {\n background: transparent;\n}\n.select__native-input.sc-nano-select::-moz-selection {\n background: transparent;\n}\n.select__native-input.sc-nano-select::placeholder {\n color: var(--placeholder-color);\n font-family: inherit;\n font-style: var(--placeholder-font-style);\n font-weight: var(--placeholder-font-weight);\n opacity: var(--placeholder-opacity);\n line-height: inherit;\n min-height: initial;\n}\n.select__native-input.sc-nano-select::-moz-placeholder {\n line-height: 2.8em;\n text-overflow: ellipsis;\n}\n.select__native-input.sc-nano-select:-webkit-autofill {\n background-color: transparent;\n}\n.select__native-input.sc-nano-select::-webkit-search-decoration, .select__native-input.sc-nano-select::-webkit-search-cancel-button, .select__native-input.sc-nano-select::-webkit-search-results-button, .select__native-input.sc-nano-select::-webkit-search-results-decoration {\n -webkit-appearance: none;\n appearance: none;\n}\n.select__native-input.sc-nano-select:invalid {\n box-shadow: none;\n}\n.select__native-input.sc-nano-select::-ms-clear, .select__native-input.sc-nano-select::-ms-reveal {\n display: none;\n}\n.select__native-input.resizable.sc-nano-select {\n resize: vertical;\n overflow: auto;\n}\n.form-ctrl__textarea.sc-nano-select .select__native-input.sc-nano-select {\n line-height: 1.5em;\n padding-block: var(--padding-top) var(--padding-bottom);\n white-space: pre-wrap;\n}\n.form-ctrl__textarea.sc-nano-select .select__native-input.sc-nano-select::placeholder {\n line-height: 1.5em;\n}\n.has-float-label.textarea.sc-nano-select .select__native-input.sc-nano-select {\n -webkit-padding-before: 1.8em;\n padding-block-start: 1.8em;\n}\n.masked.sc-nano-select-h .select__native-input.sc-nano-select {\n opacity: 0;\n position: absolute;\n inset-inline-start: 0;\n inset-block-start: 0;\n}\n\n.select__mask.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n padding-inline: var(--padding-start) var(--padding-end);\n padding-block: 0;\n border-radius: var(--input-border-radius);\n pointer-events: none;\n line-height: 2.5em;\n min-height: 2.5em;\n}\n\n.select__multi-wrap.sc-nano-select {\n padding-block: 0 var(--padding-bottom);\n padding-inline: 0 0;\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n overflow: hidden;\n align-items: flex-start;\n}\n.has-float-label.sc-nano-select-h .select__multi-wrap.sc-nano-select {\n -webkit-padding-before: 1em;\n padding-block-start: 1em;\n}\n.select__multi-input.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n padding-inline: var(--padding-start) var(--padding-end);\n padding-block: var(--padding-bottom) 0;\n min-width: 50px;\n width: 100%;\n max-height: 100%;\n -webkit-appearance: none;\n appearance: none;\n border: 0;\n outline: none;\n display: inline-block;\n background: transparent;\n flex: 0;\n position: relative;\n box-sizing: border-box;\n line-height: calc(2.5em - var(--padding-bottom));\n height: calc(2.5em - var(--padding-bottom));\n}\n.select__multi-input.sc-nano-select:last-child {\n flex: 1;\n}\n.select__multi-value.sc-nano-select {\n margin-block: var(--padding-bottom) 0;\n margin-inline: var(--padding-start) -3px;\n background: rgb(var(--multi-input-value-bg)/80%);\n color: var(--multi-input-value-text-color);\n border: 1px solid;\n border-color: var(--multi-input-value-border);\n padding: 0.35em 0.5em;\n max-width: 100%;\n display: flex;\n align-items: center;\n font-size: var(--input-font-size);\n letter-spacing: 1px;\n max-height: calc(2.5em - 8px);\n}\n.select__multi-value.sc-nano-select span.sc-nano-select {\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 100%;\n overflow: hidden;\n line-height: 1;\n}\n.select__multi-value-remove.sc-nano-select {\n background-position: center;\n -webkit-padding-start: 0.5em;\n padding-inline-start: 0.5em;\n margin: 0;\n color: inherit;\n border: 0;\n outline: none;\n background-color: transparent;\n background-repeat: no-repeat;\n -webkit-appearance: none;\n appearance: none;\n display: flex;\n align-items: center;\n inset-block-start: 0;\n font-size: 1em;\n}\n.select__multi-value-remove.sc-nano-select nano-icon.sc-nano-select {\n --color: var(--multi-input-value-text-color);\n}\n\n.form-ctrl__float-label.sc-nano-select {\n width: calc(100% - (1em + var(--padding-start) * 2));\n}\n.has-focus.has-multiple.sc-nano-select-h .form-ctrl__float-label.sc-nano-select {\n transform: translateY(-110%);\n font-size: 0.8em;\n}\n.has-value.has-multiple.sc-nano-select-h .form-ctrl__float-label.sc-nano-select {\n transform: translateY(21%);\n inset-block-start: 0;\n}\n\n.has-focus.sc-nano-select-h select.sc-nano-select, .has-focus.sc-nano-select-h a.sc-nano-select, .has-focus.sc-nano-select-h button.sc-nano-select {\n pointer-events: auto;\n}";
|
22473
|
+
const selectCss = ".sc-nano-select-h {\n box-sizing: border-box;\n}\n\n*.sc-nano-select, *.sc-nano-select::before, *.sc-nano-select::after {\n box-sizing: border-box;\n}\n[hidden].sc-nano-select {\n display: none !important;\n}\n[disabled].sc-nano-select-h:not([disabled=false]) {\n opacity: 0.5;\n}\n\n.form-ctrl.sc-nano-select {\n min-inline-size: 100%;\n display: block;\n}\n.form-ctrl.has-helper-end.sc-nano-select {\n display: flex;\n gap: 1rem;\n container-type: inline-size;\n}\n.form-ctrl.has-helper-end.sc-nano-select .form-ctrl__wrapper.sc-nano-select {\n flex: 1 1 100%;\n}\n.form-ctrl.has-helper-end.sc-nano-select .form-ctrl__helper-end.sc-nano-select {\n display: none;\n}\n@container (min-width: 350px) {\n .form-ctrl.has-helper-end .form-ctrl__helper-end {\n display: block !important;\n }\n .form-ctrl.has-helper-end .form-ctrl__helper {\n display: none !important;\n }\n}\n\n.form-ctrl__wrapper.sc-nano-select {\n display: block;\n}\n\nlabel.sc-nano-select, .form-ctrl__more.sc-nano-select, .form-ctrl__error.sc-nano-select, .form-ctrl__helper.sc-nano-select {\n display: block;\n inline-size: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\nlabel.visually-hide.sc-nano-select, .form-ctrl__more.visually-hide.sc-nano-select, .form-ctrl__error.visually-hide.sc-nano-select, .form-ctrl__helper.visually-hide.sc-nano-select {\n clip: rect(1px, 1px, 1px, 1px);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n block-size: 1px;\n inline-size: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n}\n\n.form-ctrl__float-label.sc-nano-select {\n padding-block: 0;\n -webkit-padding-end: 0;\n padding-inline-end: 0;\n -webkit-padding-start: var(--padding-start);\n padding-inline-start: var(--padding-start);\n color: var(--label-color);\n position: absolute;\n font-size: 1.15em;\n transform: translateY(-50%);\n transform-origin: top left;\n inset-block-start: 50%;\n transition: all 0.125s ease-in;\n opacity: 1;\n}\n.has-focus.sc-nano-select-h .form-ctrl__float-label.sc-nano-select, .has-value.sc-nano-select-h .form-ctrl__float-label.sc-nano-select {\n transform: translateY(-110%);\n font-size: 0.8em;\n opacity: 0.7;\n}\n.form-ctrl__float-label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select {\n opacity: 0;\n transition: opacity 0.125s ease-in;\n}\n.has-focus.sc-nano-select-h .form-ctrl__float-label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select, .has-value.sc-nano-select-h .form-ctrl__float-label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select {\n opacity: 1;\n}\n.form-ctrl__textarea.sc-nano-select .form-ctrl__float-label.sc-nano-select {\n inset-block-start: 50%;\n}\n.has-focus.sc-nano-select-h .form-ctrl__textarea.sc-nano-select .form-ctrl__float-label.sc-nano-select {\n inset-block-start: 0;\n transform: translateY(38%);\n}\n.has-value.sc-nano-select-h .form-ctrl__textarea.sc-nano-select .form-ctrl__float-label.sc-nano-select {\n inset-block-start: 0;\n transform: translateY(38%);\n}\n\n.form-ctrl__label.sc-nano-select {\n color: var(--label-color);\n font-size: var(--label-font-size);\n -webkit-padding-after: var(--padding-bottom);\n padding-block-end: var(--padding-bottom);\n line-height: 1;\n display: flex;\n}\n.form-ctrl__label.sc-nano-select .form-ctrl__label-wrap.sc-nano-select {\n flex: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.form-ctrl__label.sc-nano-select .form-ctrl__label-placeholder.sc-nano-select {\n margin-block: unset;\n -webkit-margin-end: 5px;\n margin-inline-end: 5px;\n -webkit-margin-start: 0;\n margin-inline-start: 0;\n opacity: 0;\n -webkit-appearance: none;\n appearance: none;\n transition: 0.3s ease opacity;\n font-size: 0.9em;\n}\n.form-ctrl__label.sc-nano-select .form-ctrl__label-charcount.sc-nano-select {\n margin-block: unset;\n -webkit-margin-end: 0;\n margin-inline-end: 0;\n -webkit-margin-start: auto;\n margin-inline-start: auto;\n font-size: 0.9em;\n opacity: 0.5;\n}\n.has-value.sc-nano-select-h .form-ctrl__label.sc-nano-select .form-ctrl__label-placeholder.sc-nano-select {\n opacity: 0.5;\n}\n.has-focus.sc-nano-select-h .form-ctrl__label.sc-nano-select {\n color: var(--label-color--focus);\n}\n.is-invalid.sc-nano-select-h:not([disabled]) .form-ctrl__label.sc-nano-select {\n color: var(--label-color--invalid);\n}\n\n.has-float-label.sc-nano-select .select__multi-input.sc-nano-select, .has-float-label.sc-nano-select .select__native-input.sc-nano-select, .has-float-label.sc-nano-select .input__native-ctrl.sc-nano-select {\n opacity: 0;\n transition: opacity 0.125s ease-in;\n}\n.has-focus.sc-nano-select-h .has-float-label.sc-nano-select .select__multi-input.sc-nano-select, .has-value.sc-nano-select-h .has-float-label.sc-nano-select .select__multi-input.sc-nano-select, .has-focus.sc-nano-select-h .has-float-label.sc-nano-select .select__native-input.sc-nano-select, .has-value.sc-nano-select-h .has-float-label.sc-nano-select .select__native-input.sc-nano-select, .has-focus.sc-nano-select-h .has-float-label.sc-nano-select .input__native-ctrl.sc-nano-select, .has-value.sc-nano-select-h .has-float-label.sc-nano-select .input__native-ctrl.sc-nano-select {\n opacity: 1;\n}\n\n.form-ctrl__more.sc-nano-select {\n block-size: 1em;\n position: relative;\n margin-block: 4px var(--padding-bottom);\n margin-inline: 3px 0;\n}\n\n.form-ctrl__helper.sc-nano-select, .form-ctrl__error.sc-nano-select {\n inset-block-start: 0;\n inset-inline-start: 0;\n position: absolute;\n font-size: var(--invalid-msg-font-size);\n line-height: 1.2;\n transition: 0.3s ease-out opacity;\n}\n\n.form-ctrl__helper.sc-nano-select {\n font-style: italic;\n color: var(--help-msg-color);\n}\n[show-inline-error].sc-nano-select-h:not([show-inline-error=false]):not([disabled]).is-invalid .form-ctrl__helper.sc-nano-select {\n opacity: 0;\n}\n\n.form-ctrl__helper-end.sc-nano-select {\n flex: 1 1 30%;\n min-inline-size: 150px;\n font-size: var(--invalid-msg-font-size);\n color: var(--help-msg-color);\n font-style: italic;\n}\n\n.form-ctrl__error.sc-nano-select {\n opacity: 0;\n color: var(--invalid-msg-color);\n font-stretch: condensed;\n}\n.is-invalid.sc-nano-select-h:not([disabled]) .form-ctrl__error.sc-nano-select {\n opacity: 1;\n}\n\n.form-ctrl__input.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n border-radius: var(--input-border-radius);\n inline-size: 100%;\n padding: 0 !important;\n position: relative;\n flex: 1 0 auto;\n display: flex;\n background: var(--input-bg-color);\n border: var(--input-border-style);\n border-width: var(--input-border-width);\n font-size: var(--input-font-size);\n -webkit-padding-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n padding-inline-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n}\n.has-focus.sc-nano-select-h .form-ctrl__input.sc-nano-select {\n background: var(--input-bg-color--focus);\n border: var(--input-border-style--focus);\n border-width: var(--input-border-width);\n -webkit-padding-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n padding-inline-start: calc(var(--input-border-hint-width) - var(--input-border-width)) !important;\n}\n.is-invalid.sc-nano-select-h:not([disabled]) .form-ctrl__input.sc-nano-select {\n background: var(--input-bg-color--invalid);\n border: var(--input-border-style--invalid);\n border-width: var(--input-border-width);\n -webkit-border-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n border-inline-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n -webkit-padding-start: 0 !important;\n padding-inline-start: 0 !important;\n}\n.is-invalid.has-focus.sc-nano-select-h:not([disabled]) .form-ctrl__input.sc-nano-select {\n background: var(--input-bg-color--invalid);\n border: var(--input-border-style--invalid-focus);\n border-width: var(--input-border-width);\n -webkit-border-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n border-inline-start: var(--input-border-style--invalid-focus) var(--input-border-hint-width);\n -webkit-padding-start: 0 !important;\n padding-inline-start: 0 !important;\n}\n\n.form-ctrl__input-wrap.sc-nano-select {\n display: flex;\n align-items: stretch;\n flex: 1;\n max-inline-size: 100%;\n}\n\n.form-ctrl__clear-btn.sc-nano-select, .form-ctrl__slot-end.sc-nano-select, .form-ctrl__slot-start.sc-nano-select, .form-ctrl__slot-value-end.sc-nano-select {\n --nano-icon-size: 1.4em;\n margin-block: 0;\n margin-inline: 0;\n font-size: 1em;\n border: 0;\n outline: none;\n background-color: transparent;\n background-repeat: no-repeat;\n display: flex;\n align-items: stretch;\n inline-size: auto;\n}\n\n.has-float-label.sc-nano-select .form-ctrl__slot-start.sc-nano-select {\n display: none;\n}\n\n.form-ctrl__slot-start.sc-nano-select-s > *, .form-ctrl__slot-start .sc-nano-select-s > *, .form-ctrl__slot-end.sc-nano-select-s > *, .form-ctrl__slot-end .sc-nano-select-s > *, .form-ctrl__slot-value-end.sc-nano-select-s > *, .form-ctrl__slot-value-end .sc-nano-select-s > *, .form-ctrl__slot-value-end.sc-nano-select *.sc-nano-select {\n --nano-icon-size: 1.4em;\n padding-inline: unset;\n -webkit-padding-start: var(--padding-start);\n padding-inline-start: var(--padding-start);\n -webkit-padding-end: var(--padding-end);\n padding-inline-end: var(--padding-end);\n font-size: 1em;\n align-items: center;\n display: flex;\n block-size: 100%;\n z-index: 1;\n}\n.sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-start.sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-start .sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-end.sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-end .sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-value-end.sc-nano-select-s > *, .sc-nano-select-h[disabled]:not([disabled=false]) .form-ctrl__slot-value-end .sc-nano-select-s > *, [disabled].sc-nano-select-h:not([disabled=false]) .form-ctrl__slot-value-end.sc-nano-select *.sc-nano-select {\n pointer-events: none;\n}\n\n.form-ctrl__slot-value-end.sc-nano-select-s > *, .form-ctrl__slot-value-end .sc-nano-select-s > *, .form-ctrl__slot-value-end.sc-nano-select *.sc-nano-select {\n pointer-events: none;\n}\n\n.form-ctrl__clear-btn.sc-nano-select {\n color: var(--clear-btn-color);\n padding: 0;\n opacity: 0;\n inline-size: 0;\n -webkit-appearance: none;\n appearance: none;\n align-items: center;\n overflow: hidden;\n}\n.is-invalid.sc-nano-select-h .form-ctrl__clear-btn.sc-nano-select {\n color: var(--clear-btn-color--invalid);\n}\n.has-value.sc-nano-select-h .form-ctrl__clear-btn.sc-nano-select {\n padding-block: 0;\n padding-inline: var(--padding-start) var(--padding-end);\n opacity: 1;\n inline-size: auto;\n}\n.form-ctrl__clear-btn.sc-nano-select:hover {\n color: var(--clear-btn-color--hover);\n}\n\n.sc-nano-select-h {\n \n --placeholder-color: var(--nano-input-placeholder-color, initial);\n --placeholder-font-style: var(--nano-input-placeholder-style, initial);\n --placeholder-font-weight: var(--nano-input-placeholder-weight, initial);\n --placeholder-opacity: var(--nano-input-placeholder-opacity, 0.5);\n --padding-top: var(--nano-input-padding-top, var(--nano-input-padding, 8px));\n --padding-end: var(--nano-input-padding-end, var(--nano-input-padding, 8px));\n --padding-bottom: var(--nano-input-padding-bottom, var(--nano-input-padding, 6px));\n --padding-start: var(--nano-input-padding-start, var(--nano-input-padding, 8px));\n --color-invalid: var(--nano-color-danger-rgb, 239 65 53);\n --color--focus-rgb:\n var(\n --nano-color-base-rgb,\n var(--nano-color-primary-rgb, 0 116 149)\n );\n --input-font-size: var(--nano-input-font-size, 0.87em);\n --input-text-color: var(--nano-input-text-color, #4a4a4a);\n --input-border-width: var(--nano-input-border-width, 1px);\n --input-border-hint-width: 3px;\n --input-border-color: var(--nano-input-border-color, #e4e6e8);\n --input-border-radius: var(--nano-input-border-radius, 0);\n --input-border-style: var(--nano-input-border-style, solid) var(--nano-input-border-color, #e4e6e8);\n --input-border-style--focus: var(--nano-input-border-style, solid) var(--nano-input-border-color--focus, #90c6e7);\n --input-border-style--invalid: var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #e4e6e8);\n --input-border-style--invalid-focus: var(--nano-input-border-style, solid) var(--nano-input-border-color--invalid, #ef4135);\n --input-bg-color: var(--nano-input-background-color, #fff);\n --input-bg-color--focus: var(--input-bg-color);\n --input-bg-color--invalid: var(--nano-input-background-color, white);\n --invalid-msg-color: rgb(var(--color-invalid) / 100%);\n --invalid-msg-font-size: var(--nano-input-help-font-size, 0.75em);\n --help-msg-color: var(--nano-input-help-color, #616d6e);\n --clear-btn-color: var(--nano-clear-btn-color, rgba(0, 0, 0, 0.3));\n --clear-btn-color--hover: rgb(var(--color--focus-rgb) / 100%);\n --clear-btn-color--invalid: rgb(var(--color-invalid) / 100%);\n --label-color: var(--nano-input-label-color, \"currentcolor\");\n --label-color--focus: var(--label-color);\n --label-color--invalid: var(--nano-input-label-color-invalid, \"currentcolor\");\n --label-font-size: var(--nano-input-label-color, 1em);\n --multi-input-value-bg: var(--nano-input-tag-bg, 186 220 240);\n --multi-input-value-text-color: var(--nano-input-tag-color, #455556);\n --multi-input-value-border: var(--nano-input-tag-color, #badcf0);\n \n position: relative;\n width: 100%;\n padding: 0 !important;\n font-family: var(--nano-font-family, inherit);\n display: block;\n}\n\n.nano-color.sc-nano-select-h {\n --input-border-style--focus:\n var(--nano-input-border-style, solid) var(\n --nano-color-tint,\n var(--nano-color-primary-tint, #2689a5)\n );\n --multi-input-value-bg: var(--nano-color-tint-rgb);\n --multi-input-value-border: var(--nano-color-shade);\n --multi-input-value-text-color: var(--nano-color-contrast);\n color: var(--nano-color-base);\n}\n\nnano-item.sc-nano-select-h:not(.item-label), nano-item:not(.item-label) .sc-nano-select-h {\n --padding-start: 0;\n}\n\n[disabled].sc-nano-select-h:not([disabled=false]) *.sc-nano-select {\n pointer-events: none !important;\n}\n\nselect.sc-nano-select {\n display: none;\n}\n\n.select__native-input.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n padding: unset;\n padding-inline: var(--padding-start) var(--padding-end);\n padding-block: 0;\n border-radius: var(--input-border-radius);\n text-overflow: ellipsis;\n color: var(--input-text-color);\n display: inline-block;\n flex: 1;\n width: 100%;\n max-width: 100%;\n max-height: 100%;\n border: 0;\n outline: none;\n background: transparent;\n -webkit-appearance: none;\n appearance: none;\n margin: 0;\n box-sizing: border-box;\n resize: none;\n overflow: hidden;\n cursor: default;\n line-height: 2.5em;\n \n \n}\n.has-float-label.sc-nano-select .select__native-input.sc-nano-select {\n line-height: 2.1em;\n min-height: 2.1em;\n -webkit-padding-before: 1.4em;\n padding-block-start: 1.4em;\n}\n.select__native-input.sc-nano-select::selection {\n background: transparent;\n}\n.select__native-input.sc-nano-select::-moz-selection {\n background: transparent;\n}\n.select__native-input.sc-nano-select::placeholder {\n color: var(--placeholder-color);\n font-family: inherit;\n font-style: var(--placeholder-font-style);\n font-weight: var(--placeholder-font-weight);\n opacity: var(--placeholder-opacity);\n line-height: inherit;\n min-height: initial;\n}\n.select__native-input.sc-nano-select::-moz-placeholder {\n line-height: 2.8em;\n text-overflow: ellipsis;\n}\n.select__native-input.sc-nano-select:-webkit-autofill {\n background-color: transparent;\n}\n.select__native-input.sc-nano-select::-webkit-search-decoration, .select__native-input.sc-nano-select::-webkit-search-cancel-button, .select__native-input.sc-nano-select::-webkit-search-results-button, .select__native-input.sc-nano-select::-webkit-search-results-decoration {\n -webkit-appearance: none;\n appearance: none;\n}\n.select__native-input.sc-nano-select:invalid {\n box-shadow: none;\n}\n.select__native-input.sc-nano-select::-ms-clear, .select__native-input.sc-nano-select::-ms-reveal {\n display: none;\n}\n.select__native-input.resizable.sc-nano-select {\n resize: vertical;\n overflow: auto;\n}\n.form-ctrl__textarea.sc-nano-select .select__native-input.sc-nano-select {\n line-height: 1.5em;\n padding-block: var(--padding-top) var(--padding-bottom);\n white-space: pre-wrap;\n}\n.form-ctrl__textarea.sc-nano-select .select__native-input.sc-nano-select::placeholder {\n line-height: 1.5em;\n}\n.has-float-label.textarea.sc-nano-select .select__native-input.sc-nano-select {\n -webkit-padding-before: 1.8em;\n padding-block-start: 1.8em;\n}\n.masked.sc-nano-select-h .select__native-input.sc-nano-select {\n opacity: 0;\n position: absolute;\n inset-inline-start: 0;\n inset-block-start: 0;\n}\n\n.select__mask.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n padding-inline: var(--padding-start) var(--padding-end);\n padding-block: 0;\n border-radius: var(--input-border-radius);\n pointer-events: none;\n line-height: 2.5em;\n min-height: 2.5em;\n}\n\n.select__multi-wrap.sc-nano-select {\n padding-block: 0 var(--padding-bottom);\n padding-inline: 0 0;\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n overflow: hidden;\n align-items: flex-start;\n}\n.has-float-label.sc-nano-select-h .select__multi-wrap.sc-nano-select {\n -webkit-padding-before: 1em;\n padding-block-start: 1em;\n}\n.select__multi-input.sc-nano-select {\n font-family: inherit;\n font-size: inherit;\n font-stretch: inherit;\n font-style: inherit;\n font-weight: inherit;\n letter-spacing: inherit;\n text-decoration: inherit;\n text-overflow: inherit;\n text-transform: inherit;\n text-align: inherit;\n white-space: inherit;\n color: inherit;\n padding-inline: var(--padding-start) var(--padding-end);\n padding-block: var(--padding-bottom) 0;\n min-width: 50px;\n width: 100%;\n max-height: 100%;\n -webkit-appearance: none;\n appearance: none;\n border: 0;\n outline: none;\n display: inline-block;\n background: transparent;\n flex: 0;\n position: relative;\n box-sizing: border-box;\n line-height: calc(2.5em - var(--padding-bottom));\n height: calc(2.5em - var(--padding-bottom));\n}\n.select__multi-input.sc-nano-select:last-child {\n flex: 1;\n}\n.select__multi-value.sc-nano-select {\n margin-block: var(--padding-bottom) 0;\n margin-inline: var(--padding-start) -3px;\n background: rgb(var(--multi-input-value-bg)/80%);\n color: var(--multi-input-value-text-color);\n border: 1px solid;\n border-color: var(--multi-input-value-border);\n padding: 0.35em 0.5em;\n max-width: 100%;\n display: flex;\n align-items: center;\n font-size: var(--input-font-size);\n letter-spacing: 1px;\n max-height: calc(2.5em - 8px);\n}\n.select__multi-value.sc-nano-select span.sc-nano-select {\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 100%;\n overflow: hidden;\n}\n.select__multi-value-remove.sc-nano-select {\n background-position: center;\n -webkit-padding-start: 0.5em;\n padding-inline-start: 0.5em;\n margin: 0;\n color: inherit;\n border: 0;\n outline: none;\n background-color: transparent;\n background-repeat: no-repeat;\n -webkit-appearance: none;\n appearance: none;\n display: flex;\n align-items: center;\n inset-block-start: 0;\n font-size: 1em;\n}\n.select__multi-value-remove.sc-nano-select nano-icon.sc-nano-select {\n --color: var(--multi-input-value-text-color);\n}\n\n.form-ctrl__float-label.sc-nano-select {\n width: calc(100% - (1em + var(--padding-start) * 2));\n}\n.has-focus.has-multiple.sc-nano-select-h .form-ctrl__float-label.sc-nano-select {\n transform: translateY(-110%);\n font-size: 0.8em;\n}\n.has-value.has-multiple.sc-nano-select-h .form-ctrl__float-label.sc-nano-select {\n transform: translateY(21%);\n inset-block-start: 0;\n}\n\n.has-focus.sc-nano-select-h select.sc-nano-select, .has-focus.sc-nano-select-h a.sc-nano-select, .has-focus.sc-nano-select-h button.sc-nano-select {\n pointer-events: auto;\n}";
|
22472
22474
|
|
22473
22475
|
let selectIds = 0;
|
22474
22476
|
/**
|
@@ -27519,6 +27521,19 @@ function drag(container, options) {
|
|
27519
27521
|
// move(initialEvent);
|
27520
27522
|
}
|
27521
27523
|
|
27524
|
+
/**
|
27525
|
+
* Add multiple event listeners with the same callback function
|
27526
|
+
* @param el the element which emits events
|
27527
|
+
* @param events the event names to listen to (string separated by a space)
|
27528
|
+
* @param fn the function to call
|
27529
|
+
* @param opts the event options to apply
|
27530
|
+
*/
|
27531
|
+
function addListeners(el, events, fn, opts) {
|
27532
|
+
events
|
27533
|
+
.split(' ')
|
27534
|
+
.forEach((e) => el.addEventListener(e, fn, opts));
|
27535
|
+
}
|
27536
|
+
|
27522
27537
|
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}";
|
27523
27538
|
|
27524
27539
|
// Orientation map to limit dragging to horizontal or vertical.
|
@@ -27784,11 +27799,6 @@ class Sortable {
|
|
27784
27799
|
return node.parentNode.appendChild(clone);
|
27785
27800
|
}
|
27786
27801
|
/// Event handlers ///
|
27787
|
-
addListeners(el, events, fn, opts) {
|
27788
|
-
events
|
27789
|
-
.split(' ')
|
27790
|
-
.forEach((e) => el.addEventListener(e, fn, opts));
|
27791
|
-
}
|
27792
27802
|
removeEventHandlers(ele) {
|
27793
27803
|
ele = ele || this.sortableHost;
|
27794
27804
|
ele.removeEventListener('mousedown', this.handleTrack);
|
@@ -27797,7 +27807,7 @@ class Sortable {
|
|
27797
27807
|
}
|
27798
27808
|
addEventHandlers(ele) {
|
27799
27809
|
ele = ele || this.sortableHost;
|
27800
|
-
|
27810
|
+
addListeners(ele, 'mousedown touchstart', this.handleTrack, {
|
27801
27811
|
passive: true,
|
27802
27812
|
});
|
27803
27813
|
ele.addEventListener('keydown', this.handleKeydown);
|
@@ -27977,7 +27987,7 @@ class Sortable {
|
|
27977
27987
|
});
|
27978
27988
|
}, 150);
|
27979
27989
|
// reset track timer & cancel DnD on mouseup / touchend / touchmove
|
27980
|
-
|
27990
|
+
addListeners(document, 'mouseup touchend touchmove', () => clearTimeout(this.mouseDownTimer), { once: true });
|
27981
27991
|
}
|
27982
27992
|
/**
|
27983
27993
|
* Initialized a drag and drop sequence if a child node was clicked that matches the itemSelector property.
|
@@ -28910,8 +28920,10 @@ class Sticker {
|
|
28910
28920
|
}
|
28911
28921
|
/** Find and set the stickToEle from the public, selector string */
|
28912
28922
|
stickToChange() {
|
28913
|
-
if (this.stickTo)
|
28923
|
+
if (typeof this.stickTo === 'string')
|
28914
28924
|
this.stickToEle = this.scrollParent.querySelector(this.stickTo);
|
28925
|
+
else if (!!this.stickTo)
|
28926
|
+
this.stickToEle = this.stickTo;
|
28915
28927
|
else
|
28916
28928
|
this.stickToEle = undefined;
|
28917
28929
|
}
|
@@ -30490,6 +30502,7 @@ function filter(workerStore, rows, filters = []) {
|
|
30490
30502
|
}
|
30491
30503
|
else {
|
30492
30504
|
rows = filter$1(rows, {
|
30505
|
+
predicate: typeof filter.filter === 'string' ? 'AND' : 'OR',
|
30493
30506
|
keywords: filter.filter,
|
30494
30507
|
includePaths: [filter.prop],
|
30495
30508
|
ignorePaths: ['__uuid', '__index'],
|
@@ -30843,92 +30856,6 @@ function colheadFootRender(col) {
|
|
30843
30856
|
const tpl = col === null || col === void 0 ? void 0 : col.columnTemplate;
|
30844
30857
|
return tpl ? (tpl(hAsync, col)) : (hAsync(Fragment, null, col.title));
|
30845
30858
|
}
|
30846
|
-
const stickyHIOs = new WeakMap();
|
30847
|
-
const stickyVIOs = new WeakMap();
|
30848
|
-
/**
|
30849
|
-
* Adds element to Intersection Observer. Fires when element changes on the x axis
|
30850
|
-
* @param el - an element to observe
|
30851
|
-
* @param pos - the edge to watch (start or end)
|
30852
|
-
* @param cb - callback when an intersection state changes.
|
30853
|
-
*/
|
30854
|
-
function addHObserver(el, pos, cb) {
|
30855
|
-
if (stickyHIOs.get(el))
|
30856
|
-
return;
|
30857
|
-
const store = fetchStores();
|
30858
|
-
const root = store.general.state.scrollParent;
|
30859
|
-
const observer = new IntersectionObserver(([e]) => {
|
30860
|
-
const rootBounds = e.rootBounds || document.scrollingElement.getBoundingClientRect();
|
30861
|
-
const positions = {};
|
30862
|
-
if (pos === 'start') {
|
30863
|
-
positions.start =
|
30864
|
-
e.boundingClientRect.x - (rootBounds.x + root.scrollLeft) < 0 &&
|
30865
|
-
!e.isIntersecting;
|
30866
|
-
}
|
30867
|
-
if (pos === 'end') {
|
30868
|
-
// TODO - sort these out for RtL
|
30869
|
-
positions.end =
|
30870
|
-
e.boundingClientRect.right > e.boundingClientRect.width &&
|
30871
|
-
!e.isIntersecting;
|
30872
|
-
}
|
30873
|
-
if (!!cb)
|
30874
|
-
cb(positions);
|
30875
|
-
}, {
|
30876
|
-
threshold: [1],
|
30877
|
-
rootMargin: '1px 0px 100px 0px',
|
30878
|
-
root: root === document.scrollingElement ? null : root,
|
30879
|
-
});
|
30880
|
-
stickyHIOs.set(el, observer);
|
30881
|
-
if (store.general.state.isReady) {
|
30882
|
-
observer.observe(el);
|
30883
|
-
}
|
30884
|
-
else {
|
30885
|
-
store.general.state.host.addEventListener('nanoTblReady', () => {
|
30886
|
-
observer.observe(el);
|
30887
|
-
}, { once: true });
|
30888
|
-
}
|
30889
|
-
}
|
30890
|
-
/**
|
30891
|
-
* Adds element to Intersection Observer. Fires when element changes on the y axis
|
30892
|
-
* @param el - an element to observe
|
30893
|
-
* @param pos - the edge to watch (start or end)
|
30894
|
-
* @param cb - callback when an intersection state changes.
|
30895
|
-
*/
|
30896
|
-
function addVObserver(el, pos, cb) {
|
30897
|
-
if (stickyVIOs.get(el))
|
30898
|
-
return;
|
30899
|
-
const store = fetchStores();
|
30900
|
-
const root = store.general.state.scrollParent;
|
30901
|
-
const observer = new IntersectionObserver(([e]) => {
|
30902
|
-
const rootBounds = e.rootBounds || document.scrollingElement.getBoundingClientRect();
|
30903
|
-
const positions = {};
|
30904
|
-
if (pos === 'top') {
|
30905
|
-
positions.top =
|
30906
|
-
e.boundingClientRect.y - (rootBounds.y + root.scrollTop) < 0 &&
|
30907
|
-
!e.isIntersecting;
|
30908
|
-
}
|
30909
|
-
if (pos === 'bottom') {
|
30910
|
-
const boundingClientRect = e.target.getBoundingClientRect();
|
30911
|
-
positions.bottom =
|
30912
|
-
boundingClientRect.height + boundingClientRect.y >
|
30913
|
-
rootBounds.height && !e.isIntersecting;
|
30914
|
-
}
|
30915
|
-
if (!!cb)
|
30916
|
-
cb(positions);
|
30917
|
-
}, {
|
30918
|
-
threshold: [1],
|
30919
|
-
rootMargin: '0px 100px 0px 100px',
|
30920
|
-
root: root === document.scrollingElement ? null : root,
|
30921
|
-
});
|
30922
|
-
stickyVIOs.set(el, observer);
|
30923
|
-
if (store.general.state.isReady) {
|
30924
|
-
observer.observe(el);
|
30925
|
-
}
|
30926
|
-
else {
|
30927
|
-
store.general.state.host.addEventListener('nanoTblReady', () => {
|
30928
|
-
observer.observe(el);
|
30929
|
-
}, { once: true });
|
30930
|
-
}
|
30931
|
-
}
|
30932
30859
|
function headerPinClasses(type, vPinned, toString = false) {
|
30933
30860
|
const classes = {
|
30934
30861
|
[`${CSSNAMESPACE}__${type}`]: true,
|
@@ -30998,7 +30925,7 @@ function isInViewport(el, percentVisible = 100) {
|
|
30998
30925
|
percentVisible);
|
30999
30926
|
}
|
31000
30927
|
|
31001
|
-
const TableColHead = ({ column,
|
30928
|
+
const TableColHead = ({ column, onColumnSortClick, defaults, }) => {
|
31002
30929
|
// Sort handling
|
31003
30930
|
function handleColumnSortClick(e) {
|
31004
30931
|
let order;
|
@@ -31023,7 +30950,7 @@ const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumnPinned,
|
|
31023
30950
|
extraProps = column.columnProperties(column) || extraProps;
|
31024
30951
|
}
|
31025
30952
|
const baseProps = {
|
31026
|
-
class: Object.assign(Object.assign({}, headerPinClasses('th',
|
30953
|
+
class: Object.assign(Object.assign({}, headerPinClasses('th', column.pinned)), { [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start', [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end', [`${CSSNAMESPACE}__ordered`]: !!column.order, [`${CSSNAMESPACE}__filtered`]: column.filter !== undefined && column.filter !== null }),
|
31027
30954
|
};
|
31028
30955
|
let props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
|
31029
30956
|
const content = colheadFootRender(column);
|
@@ -31040,12 +30967,7 @@ const TableColHead = ({ column, headRenderer, onColumnSortClick, onColumnPinned,
|
|
31040
30967
|
: 'none';
|
31041
30968
|
props = Object.assign(Object.assign({}, props), { 'aria-sort': sort });
|
31042
30969
|
}
|
31043
|
-
return (hAsync("th", Object.assign({}, props, {
|
31044
|
-
if (['end', 'start'].includes(column.pinned))
|
31045
|
-
addHObserver(th, column.pinned, onColumnPinned);
|
31046
|
-
if (['top', 'bottom'].includes(headRenderer.pinned))
|
31047
|
-
addVObserver(th, headRenderer.pinned, onColumnPinned);
|
31048
|
-
}, key: column.prop }), isSortable() ? (hAsync("button", { class: {
|
30970
|
+
return (hAsync("th", Object.assign({}, props, { key: column.prop }), isSortable() ? (hAsync("button", { class: {
|
31049
30971
|
[`${CSSNAMESPACE}__order-btn`]: true,
|
31050
30972
|
[`${CSSNAMESPACE}__cell-content`]: true,
|
31051
30973
|
}, onClick: handleColumnSortClick },
|
@@ -31073,6 +30995,7 @@ function cellRender(rowIndex, colIndex) {
|
|
31073
30995
|
const columns = store.config.state.columns;
|
31074
30996
|
const tpl = (_a = columns[colIndex]) === null || _a === void 0 ? void 0 : _a.cellTemplate;
|
31075
30997
|
const model = colDataModel(rowIndex, colIndex);
|
30998
|
+
const tableInstance = getRenderingRef();
|
31076
30999
|
if (!!model.cellModel && columns[colIndex].type === 'date') {
|
31077
31000
|
const d = new Date(model.cellModel);
|
31078
31001
|
if (d instanceof Date && !isNaN(d)) {
|
@@ -31081,7 +31004,28 @@ function cellRender(rowIndex, colIndex) {
|
|
31081
31004
|
: d;
|
31082
31005
|
}
|
31083
31006
|
}
|
31084
|
-
|
31007
|
+
// Wrap the h pragma, then we can know if we're using Stencil's
|
31008
|
+
// jsx renderer or a different one
|
31009
|
+
let hCalled = false;
|
31010
|
+
const hWrap = (...args) => {
|
31011
|
+
hCalled = true;
|
31012
|
+
return hAsync(...args);
|
31013
|
+
};
|
31014
|
+
let tplResult = tpl ? tpl(hWrap, model) : undefined;
|
31015
|
+
if (tplResult &&
|
31016
|
+
tableInstance.customRenderer &&
|
31017
|
+
tplResult['$attrs$'] === undefined &&
|
31018
|
+
!(tplResult instanceof Element) &&
|
31019
|
+
typeof tplResult !== 'string' &&
|
31020
|
+
!hCalled) {
|
31021
|
+
// template result is jsx *not* from Stencil.
|
31022
|
+
// Render it now and output it later.
|
31023
|
+
const templateEle = document.createElement('template');
|
31024
|
+
// @ts-expect-error
|
31025
|
+
tableInstance.customRenderer(tplResult, templateEle.content);
|
31026
|
+
tplResult = templateEle;
|
31027
|
+
}
|
31028
|
+
return tplResult ? (tplResult) : model.cellModel !== undefined && model.cellModel !== null ? (hAsync(Fragment, null, (_b = model.cellModel) === null || _b === void 0 ? void 0 : _b.toString())) : ('');
|
31085
31029
|
}
|
31086
31030
|
const baseCellClasses = (colIndex, toString = false) => {
|
31087
31031
|
const store = fetchStores();
|
@@ -31097,11 +31041,12 @@ const baseCellClasses = (colIndex, toString = false) => {
|
|
31097
31041
|
return classListToStr(classes);
|
31098
31042
|
return classes;
|
31099
31043
|
};
|
31100
|
-
const TableCell
|
31044
|
+
const TableCell = ({ rowIndex, colIndex, nestedContent, }) => {
|
31101
31045
|
const Content = () => nestedContent
|
31102
31046
|
? nestedContent()
|
31103
31047
|
: cellRender(rowIndex, colIndex) || (hAsync("span", { class: "placeholder" }, "\u00A0"));
|
31104
31048
|
let CellType = 'td';
|
31049
|
+
const tableInstance = getRenderingRef();
|
31105
31050
|
const store = fetchStores();
|
31106
31051
|
const column = store.config.state.columns[colIndex];
|
31107
31052
|
let props = mergeCellProperties(rowIndex, colIndex, {
|
@@ -31113,14 +31058,23 @@ const TableCell$1 = ({ rowIndex, colIndex, nestedContent, }) => {
|
|
31113
31058
|
? Object.assign(Object.assign({}, props), { scope: 'rowgroup' }) : Object.assign(Object.assign({}, props), { scope: 'row' });
|
31114
31059
|
CellType = 'th';
|
31115
31060
|
}
|
31116
|
-
const ContentWrap = (props) =>
|
31117
|
-
|
31118
|
-
|
31119
|
-
|
31120
|
-
|
31121
|
-
|
31122
|
-
|
31123
|
-
|
31061
|
+
const ContentWrap = (props) => {
|
31062
|
+
const content = Content();
|
31063
|
+
return (hAsync("div", Object.assign({ ref: (d) => {
|
31064
|
+
if (d && content instanceof Element) {
|
31065
|
+
d.replaceChildren();
|
31066
|
+
d.append(content['content'] || content);
|
31067
|
+
}
|
31068
|
+
} }, props, { class: {
|
31069
|
+
[`${CSSNAMESPACE}__cell-content`]: true,
|
31070
|
+
[`${CSSNAMESPACE}__cell-content--wrap`]: !!column.wrap,
|
31071
|
+
}, innerHTML: typeof content === 'string' && content.includes('<')
|
31072
|
+
? content
|
31073
|
+
: undefined }), (typeof content !== 'string' || !content.includes('<')) &&
|
31074
|
+
!(content instanceof Element) &&
|
31075
|
+
content));
|
31076
|
+
};
|
31077
|
+
return (hAsync(CellType, Object.assign({ role: tableInstance.type === 'grid' ? 'gridcell' : undefined }, props), column.autoTooltip && !column.wrap ? (hAsync("nano-resize-observe", { notifyContentFit: "x", onNanoResizeContentFitChange: (e) => (e.target.firstElementChild.disabled =
|
31124
31078
|
e.detail.x) },
|
31125
31079
|
hAsync("nano-tooltip", { disabled: true, placement: "top", onNanoShow: (e) => (e.target.closest(CellType).style.zIndex = '100'), onNanoHide: (e) => (e.target.closest(CellType).style.zIndex = '') },
|
31126
31080
|
hAsync(ContentWrap, null),
|
@@ -31128,14 +31082,18 @@ const TableCell$1 = ({ rowIndex, colIndex, nestedContent, }) => {
|
|
31128
31082
|
hAsync(Content, null))))) : (hAsync(ContentWrap, null))));
|
31129
31083
|
};
|
31130
31084
|
|
31131
|
-
const
|
31132
|
-
const cell = (hAsync("div", { class: {
|
31085
|
+
const tableCellContent = (props, children, ctx) => {
|
31086
|
+
const cell = (hAsync("div", Object.assign({}, props.wrapperProps, { class: {
|
31133
31087
|
[`${CSSNAMESPACE}__cell-content`]: true,
|
31134
|
-
[`${CSSNAMESPACE}__cell-content--wrap`]: wrap,
|
31135
|
-
} }, children));
|
31136
|
-
return header ? hAsync("th", { scope:
|
31137
|
-
};
|
31138
|
-
const TableRow = ({ rowRenderer, rowIndex, rowModel
|
31088
|
+
[`${CSSNAMESPACE}__cell-content--wrap`]: props.wrap,
|
31089
|
+
} }), children));
|
31090
|
+
return props.header ? (hAsync("th", Object.assign({ scope: ctx }, props.cellProps), cell)) : (hAsync("td", Object.assign({}, props.cellProps), cell));
|
31091
|
+
};
|
31092
|
+
const TableRow = ({ rowRenderer, rowIndex, rowModel }, children, utils) => {
|
31093
|
+
// helper, generates <td> or <th>
|
31094
|
+
const TableCell = ({ header, wrap, cellProps, wrapperProps }, children) => {
|
31095
|
+
return tableCellContent({ header, wrap, cellProps, wrapperProps }, children, 'row');
|
31096
|
+
};
|
31139
31097
|
let extraProps = {};
|
31140
31098
|
if (!rowModel) {
|
31141
31099
|
const model = rowDataModel(rowIndex);
|
@@ -31145,13 +31103,28 @@ const TableRow = ({ rowRenderer, rowIndex, rowModel, onColumnPinned }, children,
|
|
31145
31103
|
extraProps =
|
31146
31104
|
rowRenderer.rowProperties({ rowModel, rowIndex }) || extraProps;
|
31147
31105
|
}
|
31148
|
-
let
|
31106
|
+
let rowPinned;
|
31149
31107
|
if ((rowRenderer === null || rowRenderer === void 0 ? void 0 : rowRenderer.pinned) && typeof rowRenderer.pinned === 'function') {
|
31150
|
-
|
31108
|
+
rowPinned = rowRenderer.pinned({ rowModel, rowIndex });
|
31151
31109
|
}
|
31152
|
-
const
|
31153
|
-
const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
|
31110
|
+
const props = mergeProperties({ class: headerPinClasses('tr', rowPinned, true) }, extraProps);
|
31154
31111
|
const tpl = rowRenderer === null || rowRenderer === void 0 ? void 0 : rowRenderer.template;
|
31112
|
+
/**
|
31113
|
+
* Applies appropriate classes to td / th VNodes;
|
31114
|
+
* which can be supplied by user defined templates
|
31115
|
+
* @param children virtual / jsx node array
|
31116
|
+
* @returns virtual / jsx node array
|
31117
|
+
*/
|
31118
|
+
const applyCellClasses = (children) => {
|
31119
|
+
return utils.map(children, (cNode, i) => {
|
31120
|
+
if (['td', 'th'].includes(cNode.vtag.toString())) {
|
31121
|
+
cNode.vattrs = mergeProperties({
|
31122
|
+
class: baseCellClasses(i, true),
|
31123
|
+
}, cNode.vattrs);
|
31124
|
+
}
|
31125
|
+
return cNode;
|
31126
|
+
});
|
31127
|
+
};
|
31155
31128
|
if (tpl) {
|
31156
31129
|
let toRender = tpl(hAsync, {
|
31157
31130
|
renderedRow: (hAsync("tr", Object.assign({}, props, { key: rowModel.__uuid }), children)),
|
@@ -31163,24 +31136,9 @@ const TableRow = ({ rowRenderer, rowIndex, rowModel, onColumnPinned }, children,
|
|
31163
31136
|
if (node.vtag === 'tr') {
|
31164
31137
|
if (!node.vkey)
|
31165
31138
|
node.vkey = `${rowModel.__uuid}_${i}`;
|
31166
|
-
node.vattrs = mergeProperties({ class: headerPinClasses('tr',
|
31139
|
+
node.vattrs = mergeProperties({ class: headerPinClasses('tr', rowPinned, true) }, node.vattrs);
|
31167
31140
|
if (!!node.vchildren) {
|
31168
|
-
node.vchildren =
|
31169
|
-
if (['td', 'th'].includes(cNode.vtag.toString())) {
|
31170
|
-
cNode.vattrs = mergeProperties({
|
31171
|
-
class: headerPinClasses(cNode.vtag.toString(), pinned, true) + baseCellClasses(i, true),
|
31172
|
-
ref: (th) => {
|
31173
|
-
if ((!!th && pinned === 'top') || pinned === 'bottom')
|
31174
|
-
addVObserver(th, pinned, onColumnPinned);
|
31175
|
-
if (!!th && th.classList.contains('nano-tbl__pin--end'))
|
31176
|
-
addHObserver(th, 'end', onColumnPinned);
|
31177
|
-
if (!!th && th.classList.contains('nano-tbl__pin--start'))
|
31178
|
-
addHObserver(th, 'start', onColumnPinned);
|
31179
|
-
},
|
31180
|
-
}, cNode.vattrs);
|
31181
|
-
}
|
31182
|
-
return cNode;
|
31183
|
-
});
|
31141
|
+
node.vchildren = applyCellClasses(node.vchildren);
|
31184
31142
|
}
|
31185
31143
|
}
|
31186
31144
|
return node;
|
@@ -31188,28 +31146,25 @@ const TableRow = ({ rowRenderer, rowIndex, rowModel, onColumnPinned }, children,
|
|
31188
31146
|
}
|
31189
31147
|
return toRender;
|
31190
31148
|
}
|
31191
|
-
return (hAsync("tr", Object.assign({}, props, { key: rowModel.__uuid }), children));
|
31149
|
+
return (hAsync("tr", Object.assign({}, props, { key: rowModel.__uuid }), applyCellClasses(children)));
|
31192
31150
|
};
|
31193
|
-
const TableHeadFootRow = ({ rowRenderer
|
31151
|
+
const TableHeadFootRow = ({ rowRenderer }, // onRowPinned, onColPinned
|
31152
|
+
children, utils) => {
|
31194
31153
|
let extraProps = {};
|
31195
31154
|
if (rowRenderer.rowProperties) {
|
31196
31155
|
extraProps = rowRenderer.rowProperties() || {};
|
31197
31156
|
}
|
31198
|
-
const
|
31199
|
-
|
31200
|
-
[`${CSSNAMESPACE}__cell-content`]: true,
|
31201
|
-
[`${CSSNAMESPACE}__cell-content--wrap`]: wrap,
|
31202
|
-
} }, children));
|
31203
|
-
return header !== false ? hAsync("th", { scope: "col" }, cell) : hAsync("td", null, cell);
|
31157
|
+
const TableHeadFootCell = ({ header, wrap, cellProps, wrapperProps }, children) => {
|
31158
|
+
return tableCellContent({ header, wrap, cellProps, wrapperProps }, children, 'col');
|
31204
31159
|
};
|
31205
31160
|
const pinned = rowRenderer.pinned || null;
|
31206
|
-
const baseProps = { class: headerPinClasses('tr',
|
31161
|
+
const baseProps = { class: headerPinClasses('tr', pinned) };
|
31207
31162
|
const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
|
31208
31163
|
const tpl = rowRenderer === null || rowRenderer === void 0 ? void 0 : rowRenderer.template;
|
31209
31164
|
if (tpl) {
|
31210
31165
|
let toRender = tpl(hAsync, {
|
31211
31166
|
renderedRow: hAsync("tr", Object.assign({}, props), children),
|
31212
|
-
},
|
31167
|
+
}, TableHeadFootCell);
|
31213
31168
|
if (Array.isArray(toRender)) {
|
31214
31169
|
toRender = utils.map(toRender, (node) => {
|
31215
31170
|
if (node.vtag === 'tr') {
|
@@ -31219,14 +31174,6 @@ const TableHeadFootRow = ({ rowRenderer, onColumnPinned }, children, utils) => {
|
|
31219
31174
|
if (['td', 'th'].includes(cNode.vtag.toString())) {
|
31220
31175
|
cNode.vattrs = mergeProperties({
|
31221
31176
|
class: headerPinClasses(cNode.vtag.toString(), pinned, true),
|
31222
|
-
ref: (th) => {
|
31223
|
-
if ((!!th && pinned === 'top') || pinned === 'bottom')
|
31224
|
-
addVObserver(th, pinned, onColumnPinned);
|
31225
|
-
if (!!th && th.classList.contains('nano-tbl__pin--end'))
|
31226
|
-
addHObserver(th, 'end', onColumnPinned);
|
31227
|
-
if (!!th && th.classList.contains('nano-tbl__pin--start'))
|
31228
|
-
addHObserver(th, 'start', onColumnPinned);
|
31229
|
-
},
|
31230
31177
|
}, cNode.vattrs);
|
31231
31178
|
}
|
31232
31179
|
return cNode;
|
@@ -31241,8 +31188,399 @@ const TableHeadFootRow = ({ rowRenderer, onColumnPinned }, children, utils) => {
|
|
31241
31188
|
return hAsync("tr", Object.assign({}, props), children);
|
31242
31189
|
};
|
31243
31190
|
|
31244
|
-
|
31191
|
+
function addStyleSheet(id, css) {
|
31192
|
+
const styleSheet = document.getElementById(id) ||
|
31193
|
+
document.createElement('style');
|
31194
|
+
styleSheet.id = id;
|
31195
|
+
styleSheet.innerHTML = css;
|
31196
|
+
if (!styleSheet.isConnected)
|
31197
|
+
document.head.append(styleSheet);
|
31198
|
+
}
|
31199
|
+
/**
|
31200
|
+
* Manages the complex business of table 'pinning'; sticking columns and rows to the scrolling parent element.
|
31201
|
+
*
|
31202
|
+
* *knowing* when an element is pinned is tricky.
|
31203
|
+
* Managing the display of multiple, side-by-side pinned elements is trickier still.
|
31204
|
+
*
|
31205
|
+
* Pinning table columns are very different from pinning table rows:
|
31206
|
+
* - Rows are actual elements we can select, measure and apply styles to.
|
31207
|
+
* - Columns are disparate collections of elements that are much harder to select, measure and apply styles to.
|
31208
|
+
*
|
31209
|
+
* With this in mind, how columns and rows are pinned is different:
|
31210
|
+
* Rows can have changes applied directly, Columns have changes applied via dynamic stylesheets.
|
31211
|
+
*
|
31212
|
+
* The service is slightly opinionated on how it pins rows and columns (with some room for override):
|
31213
|
+
* - Pinned columns are stuck consecutively, without overlapping.
|
31214
|
+
* e.g. If column 'name' and 'surname' are both `pin: 'start'`; 'surname' will display **next** to name.
|
31215
|
+
* Both columns are important for context
|
31216
|
+
*
|
31217
|
+
* - Pinned rows are set to overlap *when* they have the same ancestor,
|
31218
|
+
* and stuck consecutively when they have a different ancestor.
|
31219
|
+
* e.g. `tbody > tr.pin ~ tr.pin` the second row will **overlap** the first; it's unlikely both rows will be important for context.
|
31220
|
+
* `thead > tr.pin`, `tbody > tr.pin`. Both rows are required for context so will require next to each other.
|
31221
|
+
*
|
31222
|
+
* Devs can override this behaviour by setting `--pin-start`, `--pin-end`, `--pin-top`, `--pin-bottom` custom vars.
|
31223
|
+
*/
|
31224
|
+
class TablePinService {
|
31225
|
+
constructor(table, scrollElement) {
|
31226
|
+
// Private state
|
31227
|
+
this.cachedColMeta = new WeakMap();
|
31228
|
+
this._pinnedStart = [];
|
31229
|
+
this._pinnedEnd = [];
|
31230
|
+
this._cssColDimensionCacheKey = '';
|
31231
|
+
this.cacheX = 0;
|
31232
|
+
this.cacheY = 0;
|
31233
|
+
this.tableEle = table;
|
31234
|
+
this.tableId = this.tableEle.id;
|
31235
|
+
this.scrollElement = scrollElement;
|
31236
|
+
// Secret sauce - `getElementsByClassName` is a live collection.
|
31237
|
+
// An HTMLCollection will keep itself up-to-date as elements come and go
|
31238
|
+
// So we can keep assessing on scroll
|
31239
|
+
this.startColumns = table
|
31240
|
+
.querySelector('thead')
|
31241
|
+
.getElementsByClassName(`${CSSNAMESPACE}__pin--start`);
|
31242
|
+
this.endColumns = table
|
31243
|
+
.querySelector('thead')
|
31244
|
+
.getElementsByClassName(`${CSSNAMESPACE}__pin--end`);
|
31245
|
+
this.topRows = table.getElementsByClassName(`${CSSNAMESPACE}__pin--top`);
|
31246
|
+
this.bottomRows = table.getElementsByClassName(`${CSSNAMESPACE}__pin--bottom`);
|
31247
|
+
this.onResize();
|
31248
|
+
}
|
31249
|
+
// Pinned cols & change detection
|
31250
|
+
get pinnedStart() {
|
31251
|
+
return this._pinnedStart;
|
31252
|
+
}
|
31253
|
+
set pinnedStart(cols) {
|
31254
|
+
this._pinnedStart = cols;
|
31255
|
+
this.handlePinnedStartChange();
|
31256
|
+
}
|
31257
|
+
/**
|
31258
|
+
* Called when columns are either pinned or unpinned.
|
31259
|
+
* Attaches a tiny stylesheet to target the 'last' start column.
|
31260
|
+
* (e.g. We only want to apply drop shadow on last pinned start column - not all pinned columns)
|
31261
|
+
*/
|
31262
|
+
handlePinnedStartChange() {
|
31263
|
+
writeTask(() => {
|
31264
|
+
if (this.pinnedStart.length) {
|
31265
|
+
this.tableEle.classList.add(`${CSSNAMESPACE}__pinned--start`);
|
31266
|
+
const lastActiveCol = this.cachedColMeta.get(this.pinnedStart[this.pinnedStart.length - 1]);
|
31267
|
+
addStyleSheet(`${this.tableId}-col-start-active-style`,
|
31268
|
+
/* css */ `
|
31269
|
+
#${this.tableId} tr > :nth-child(${lastActiveCol.idx + 1}) {
|
31270
|
+
--pin-start-active: 1;
|
31271
|
+
}
|
31272
|
+
`);
|
31273
|
+
}
|
31274
|
+
else {
|
31275
|
+
this.tableEle.classList.remove(`${CSSNAMESPACE}__pinned--start`);
|
31276
|
+
addStyleSheet(`${this.tableId}-col-start-active-style`, ``);
|
31277
|
+
}
|
31278
|
+
});
|
31279
|
+
}
|
31280
|
+
get pinnedEnd() {
|
31281
|
+
return this._pinnedEnd;
|
31282
|
+
}
|
31283
|
+
set pinnedEnd(cols) {
|
31284
|
+
this._pinnedEnd = cols;
|
31285
|
+
this.handlePinnedEndChange();
|
31286
|
+
}
|
31287
|
+
/**
|
31288
|
+
* Called when columns are either pinned or unpinned.
|
31289
|
+
* Attaches a tiny stylesheet to target the 'first' end column.
|
31290
|
+
* (e.g. We only want to apply drop shadow on first pinned end column - not all pinned columns)
|
31291
|
+
*/
|
31292
|
+
handlePinnedEndChange() {
|
31293
|
+
writeTask(() => {
|
31294
|
+
if (this.pinnedEnd.length) {
|
31295
|
+
this.tableEle.classList.add(`${CSSNAMESPACE}__pinned--end`);
|
31296
|
+
const firstActiveCol = this.cachedColMeta.get(this.pinnedEnd[0]);
|
31297
|
+
addStyleSheet(`${this.tableId}-col-end-active-style`,
|
31298
|
+
/* css */ `
|
31299
|
+
#${this.tableId} tr > :nth-child(${firstActiveCol.idx + 1}) { --pin-end-active: 1; }
|
31300
|
+
`);
|
31301
|
+
}
|
31302
|
+
else {
|
31303
|
+
this.tableEle.classList.remove(`${CSSNAMESPACE}__pinned--end`);
|
31304
|
+
addStyleSheet(`${this.tableId}-col-end-active-style`, ``);
|
31305
|
+
}
|
31306
|
+
});
|
31307
|
+
}
|
31308
|
+
get cssColDimensionCacheKey() {
|
31309
|
+
return this._cssColDimensionCacheKey;
|
31310
|
+
}
|
31311
|
+
set cssColDimensionCacheKey(key) {
|
31312
|
+
if (key === this._cssColDimensionCacheKey)
|
31313
|
+
return;
|
31314
|
+
this._cssColDimensionCacheKey = key;
|
31315
|
+
this.createPinnedColDimensionStyles();
|
31316
|
+
}
|
31317
|
+
/**
|
31318
|
+
* To only generate column dimension styles when necessary we
|
31319
|
+
* maintain a cache key string via serialised column meta.
|
31320
|
+
* Only when this key changes do we generate a new stylesheet
|
31321
|
+
*/
|
31322
|
+
generateCssCacheKey() {
|
31323
|
+
let key = '';
|
31324
|
+
for (const col of this.startColumns) {
|
31325
|
+
const colMeta = this.cachedColMeta.get(col);
|
31326
|
+
key += `${colMeta.idx}-start-${colMeta.width}`;
|
31327
|
+
}
|
31328
|
+
for (const col of this.endColumns) {
|
31329
|
+
const colMeta = this.cachedColMeta.get(col);
|
31330
|
+
key += `${colMeta.idx}-start-${colMeta.width}`;
|
31331
|
+
}
|
31332
|
+
this.cssColDimensionCacheKey = key;
|
31333
|
+
}
|
31334
|
+
/**
|
31335
|
+
* Generates pinned column width offset styles
|
31336
|
+
* so pinned columns can appear stuck together,
|
31337
|
+
* then attaches a stylesheet.
|
31338
|
+
*/
|
31339
|
+
createPinnedColDimensionStyles() {
|
31340
|
+
let widthS = 0;
|
31341
|
+
let widthE = 0;
|
31342
|
+
const startCols = Array.from(this.startColumns);
|
31343
|
+
const endCols = Array.from(this.endColumns).reverse();
|
31344
|
+
const css = /* css */ `
|
31345
|
+
${startCols
|
31346
|
+
.map((col) => {
|
31347
|
+
const colMeta = this.cachedColMeta.get(col);
|
31348
|
+
widthS += colMeta.width || 0;
|
31349
|
+
return /* css */ `
|
31350
|
+
#${this.tableId} tr > :nth-child(${colMeta.idx + 1}) ~ td,
|
31351
|
+
#${this.tableId} tr > :nth-child(${colMeta.idx + 1}) ~ th {
|
31352
|
+
--pin-start: ${widthS - 1}px;
|
31353
|
+
}
|
31354
|
+
`;
|
31355
|
+
})
|
31356
|
+
.join('')}
|
31357
|
+
${endCols
|
31358
|
+
.map((col) => {
|
31359
|
+
const colMeta = this.cachedColMeta.get(col);
|
31360
|
+
widthE += colMeta.width;
|
31361
|
+
return /* css */ `
|
31362
|
+
#${this.tableId} tr > td:has(~ :nth-child(${colMeta.idx + 1})),
|
31363
|
+
#${this.tableId} tr > th:has(~ :nth-child(${colMeta.idx + 1})) {
|
31364
|
+
--pin-end: ${widthE - 1}px;
|
31365
|
+
}
|
31366
|
+
`;
|
31367
|
+
})
|
31368
|
+
.join('')}
|
31369
|
+
`;
|
31370
|
+
addStyleSheet(`${this.tableId}-dimension-style`, css);
|
31371
|
+
}
|
31372
|
+
getParentOffsets() {
|
31373
|
+
const { x, y } = this.scrollElement.getBoundingClientRect();
|
31374
|
+
let offsetX = x;
|
31375
|
+
let offsetY = y;
|
31376
|
+
if (this.scrollElement === document.documentElement) {
|
31377
|
+
offsetX = this.scrollElement.offsetLeft;
|
31378
|
+
offsetY = this.scrollElement.offsetTop;
|
31379
|
+
}
|
31380
|
+
return { offsetX, offsetY };
|
31381
|
+
}
|
31382
|
+
/**
|
31383
|
+
* Loops through all 'top' & 'bottom' rows (on scroll or resize)
|
31384
|
+
* Manages their visual state by applying classes on stuck / unstuck
|
31385
|
+
* And their pinned offset / distance
|
31386
|
+
*/
|
31387
|
+
assessRows() {
|
31388
|
+
if (!this.topRows.length && !this.bottomRows.length)
|
31389
|
+
return;
|
31390
|
+
// top rows
|
31391
|
+
if (this.topRows.length) {
|
31392
|
+
readTask(async () => {
|
31393
|
+
let heightAggregate = 0;
|
31394
|
+
let cacheParent;
|
31395
|
+
const { offsetY } = this.getParentOffsets();
|
31396
|
+
for (const topRow of this.topRows) {
|
31397
|
+
const { y, height } = topRow.getBoundingClientRect();
|
31398
|
+
const currParent = topRow.parentElement;
|
31399
|
+
// we'll use the applied `--pin-top` css var to decide row offset.
|
31400
|
+
// This allows devs to override this behaviour through selector specificity
|
31401
|
+
const pinTop = getComputedStyle(topRow).getPropertyValue('--pin-top');
|
31402
|
+
const offset = pinTop !== '' ? parseFloat(pinTop) : heightAggregate;
|
31403
|
+
// we need to wait for the row to finish sticking
|
31404
|
+
// and generating it's offset (`--pin-top`) so we can see, on
|
31405
|
+
// subsequent rows *if* the offset was applied
|
31406
|
+
await new Promise((resolve) => writeTask(() => {
|
31407
|
+
if (y - offsetY <= offset) {
|
31408
|
+
topRow.classList.add(`${CSSNAMESPACE}__pinned`, `${CSSNAMESPACE}__pinned--top`);
|
31409
|
+
}
|
31410
|
+
else {
|
31411
|
+
topRow.classList.remove(`${CSSNAMESPACE}__pinned`, `${CSSNAMESPACE}__pinned--top`);
|
31412
|
+
}
|
31413
|
+
// by default, we only want to stick one row from each parental block (thead, tbody, tfoot)
|
31414
|
+
// so only aggregate height / offset when cacheParent is different from current parent.
|
31415
|
+
// Devs can override this behaviour by manually setting `--pin-bottom` on the table row
|
31416
|
+
if (cacheParent !== currParent) {
|
31417
|
+
currParent.style.setProperty('--pin-top', `${heightAggregate}px`);
|
31418
|
+
heightAggregate += height;
|
31419
|
+
cacheParent = currParent;
|
31420
|
+
}
|
31421
|
+
resolve();
|
31422
|
+
}));
|
31423
|
+
}
|
31424
|
+
});
|
31425
|
+
}
|
31426
|
+
// bottom rows
|
31427
|
+
if (this.bottomRows.length) {
|
31428
|
+
const bottomRows = Array.from(this.bottomRows).reverse();
|
31429
|
+
readTask(async () => {
|
31430
|
+
let cacheParent;
|
31431
|
+
let heightAggregate = 0;
|
31432
|
+
const { offsetY } = this.getParentOffsets();
|
31433
|
+
for (const bottomRow of bottomRows) {
|
31434
|
+
if (!bottomRow.isConnected)
|
31435
|
+
continue;
|
31436
|
+
const { y, height } = bottomRow.getBoundingClientRect();
|
31437
|
+
const currParent = bottomRow.parentElement;
|
31438
|
+
// we'll use the applied `--pin-bottom` css var to decide row offset.
|
31439
|
+
// This allows devs to override this behaviour through selector specificity
|
31440
|
+
const pinBottom = getComputedStyle(bottomRow).getPropertyValue('--pin-bottom');
|
31441
|
+
const offset = pinBottom !== '' ? parseFloat(pinBottom) : heightAggregate;
|
31442
|
+
// we need to wait for the row to finish sticking
|
31443
|
+
// and generating it's offset (`--pin-bottom`) to we can see, on
|
31444
|
+
// subsequent rows *if* the offset was applied
|
31445
|
+
await new Promise((resolve) => writeTask(() => {
|
31446
|
+
if (this.tableDims.height + offsetY - (y + height) <= offset) {
|
31447
|
+
bottomRow.classList.add(`${CSSNAMESPACE}__pinned`, `${CSSNAMESPACE}__pinned--bottom`);
|
31448
|
+
}
|
31449
|
+
else {
|
31450
|
+
bottomRow.classList.remove(`${CSSNAMESPACE}__pinned`, `${CSSNAMESPACE}__pinned--bottom`);
|
31451
|
+
}
|
31452
|
+
// by default, we only want to stick one row from each parental block (thead, tbody, tfoot)
|
31453
|
+
// so only aggregate height / offset when cacheParent is different from current parent.
|
31454
|
+
// Devs can override this behaviour by manually setting `--pin-bottom` on the table row
|
31455
|
+
if (cacheParent !== currParent) {
|
31456
|
+
currParent.style.setProperty('--pin-bottom', `${heightAggregate}px`);
|
31457
|
+
heightAggregate += height;
|
31458
|
+
cacheParent = currParent;
|
31459
|
+
}
|
31460
|
+
resolve();
|
31461
|
+
}));
|
31462
|
+
}
|
31463
|
+
});
|
31464
|
+
}
|
31465
|
+
}
|
31466
|
+
/**
|
31467
|
+
* Loops through all 'start' & 'end' columns (on scroll or resize)
|
31468
|
+
* Caches meta about each column (e.g. size, position-index)
|
31469
|
+
* and decides which columns are pinned
|
31470
|
+
*/
|
31471
|
+
async assessCols() {
|
31472
|
+
if (!this.startColumns.length && !this.endColumns.length)
|
31473
|
+
return;
|
31474
|
+
let boundBox;
|
31475
|
+
let currPinned;
|
31476
|
+
let parentEles;
|
31477
|
+
const done = new Promise((resolve) => {
|
31478
|
+
// start cols
|
31479
|
+
if (this.startColumns.length) {
|
31480
|
+
readTask(() => {
|
31481
|
+
const { offsetX } = this.getParentOffsets();
|
31482
|
+
// cumulatively add widths of columns together
|
31483
|
+
// 'cos columns stick together
|
31484
|
+
let widthAggregate = offsetX;
|
31485
|
+
parentEles = Array.from(this.startColumns[0].parentElement.children);
|
31486
|
+
for (const startCol of this.startColumns) {
|
31487
|
+
boundBox = startCol.getBoundingClientRect();
|
31488
|
+
// cache meta for later
|
31489
|
+
this.cachedColMeta.set(startCol, {
|
31490
|
+
width: boundBox.width,
|
31491
|
+
idx: parentEles.indexOf(startCol),
|
31492
|
+
});
|
31493
|
+
currPinned = this.pinnedStart.find((c) => c === startCol);
|
31494
|
+
if (boundBox.x < widthAggregate) {
|
31495
|
+
// this column is pinned
|
31496
|
+
if (!currPinned)
|
31497
|
+
this.pinnedStart = [
|
31498
|
+
...this.pinnedStart,
|
31499
|
+
startCol,
|
31500
|
+
];
|
31501
|
+
}
|
31502
|
+
else if (currPinned) {
|
31503
|
+
// this column is unpinned
|
31504
|
+
this.pinnedStart = this.pinnedStart.filter((c) => c !== startCol);
|
31505
|
+
}
|
31506
|
+
widthAggregate += boundBox.width;
|
31507
|
+
}
|
31508
|
+
if (!this.endColumns.length)
|
31509
|
+
resolve();
|
31510
|
+
});
|
31511
|
+
}
|
31512
|
+
// end cols
|
31513
|
+
if (this.endColumns.length) {
|
31514
|
+
readTask(() => {
|
31515
|
+
const endCols = Array.from(this.endColumns).reverse();
|
31516
|
+
parentEles = Array.from(this.endColumns[0].parentElement.children);
|
31517
|
+
const { offsetX } = this.getParentOffsets();
|
31518
|
+
// cumulatively add widths of columns together
|
31519
|
+
// 'cos columns stick together
|
31520
|
+
let widthAggregate = 0;
|
31521
|
+
for (const endCol of endCols) {
|
31522
|
+
boundBox = endCol.getBoundingClientRect();
|
31523
|
+
// cache meta for later
|
31524
|
+
this.cachedColMeta.set(endCol, {
|
31525
|
+
width: boundBox.width,
|
31526
|
+
idx: parentEles.indexOf(endCol),
|
31527
|
+
});
|
31528
|
+
currPinned = this.pinnedEnd.find((c) => c === endCol);
|
31529
|
+
if (this.tableDims.width + offsetX - boundBox.right <=
|
31530
|
+
widthAggregate) {
|
31531
|
+
// this column is pinned
|
31532
|
+
if (!currPinned)
|
31533
|
+
this.pinnedEnd = [endCol, ...this.pinnedEnd];
|
31534
|
+
}
|
31535
|
+
else if (currPinned) {
|
31536
|
+
// this column is unpinned
|
31537
|
+
this.pinnedEnd = this.pinnedEnd.filter((c) => c !== endCol);
|
31538
|
+
}
|
31539
|
+
widthAggregate += boundBox.width;
|
31540
|
+
}
|
31541
|
+
resolve();
|
31542
|
+
});
|
31543
|
+
}
|
31544
|
+
});
|
31545
|
+
await done;
|
31546
|
+
// potentially generate a new css stylesheet if anything changed
|
31547
|
+
this.generateCssCacheKey();
|
31548
|
+
}
|
31549
|
+
onScroll(pos) {
|
31550
|
+
if (this.cacheX !== pos.x) {
|
31551
|
+
this.cacheX = pos.x;
|
31552
|
+
this.assessCols();
|
31553
|
+
}
|
31554
|
+
if (this.cacheY !== pos.y) {
|
31555
|
+
this.cacheY = pos.y;
|
31556
|
+
this.assessRows();
|
31557
|
+
}
|
31558
|
+
}
|
31559
|
+
onResize() {
|
31560
|
+
const width = this.scrollElement.clientWidth;
|
31561
|
+
const height = this.scrollElement.clientHeight;
|
31562
|
+
this.tableDims = { width, height };
|
31563
|
+
this.assessCols();
|
31564
|
+
this.assessRows();
|
31565
|
+
}
|
31566
|
+
}
|
31567
|
+
|
31568
|
+
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.6rem;--td-padding-bottom:0.6125rem;--th-padding-start:0.725rem;--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)/100%);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)/100%);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}.nano-tbl tbody.nano-tbl__loading{z-index:-1;position:relative}.nano-tbl tbody.nano-tbl__inactive{opacity:0}.nano-tbl tbody .nano-tbl__tr:has(~.nano-tbl__tr--placeholder){display:none}.nano-tbl tbody .nano-tbl__tr--placeholder~.nano-tbl__tr{display:none}.nano-tbl th[scope=row]{font-weight:800;margin:0}.nano-tbl__pin--start{position:sticky;inset-inline-start:var(--pin-start, -1px)}.nano-tbl__pin--start::after{content:\"\";position:absolute;inset:0;box-shadow:5px 0 4px -1px rgba(0, 0, 0, 0.2);opacity:var(--pin-start-active, 0);z-index:-1}.nano-tbl__pinned--start .nano-tbl__pin--start{z-index:2}.nano-tbl__pin--end{position:sticky}.nano-tbl__pin--start+.nano-tbl__pin--end{inset-inline-end:auto !important}.nano-tbl__pin--start+.nano-tbl__pin--end::after{display:none}.sm .nano-tbl__pin--end{inset-inline-end:var(--pin-end, -1px);max-width:min(50vw, 200px)}.sm .nano-tbl__pin--end::after{display:block !important;content:\"\";position:absolute;inset:0;box-shadow:-5px 1px 4px -1px rgba(0, 0, 0, 0.2);opacity:var(--pin-end-active, 0);z-index:-1}.sm .nano-tbl__pinned--end .nano-tbl__pin--end{z-index:3}.nano-tbl__pin--top .nano-tbl__th,.nano-tbl__pin--top .nano-tbl__td{position:sticky;inset-block-start:var(--pin-top, -1px)}.nano-tbl__pin--top.nano-tbl__pinned--top .nano-tbl__th,.nano-tbl__pin--top.nano-tbl__pinned--top .nano-tbl__td{z-index:4 !important}.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pinned--top .nano-tbl__pin--start{z-index:6 !important}tbody .nano-tbl__pin--top.nano-tbl__pinned--top .nano-tbl__th,tbody .nano-tbl__pin--top.nano-tbl__pinned--top .nano-tbl__td{box-shadow:1px 3px 4px -1px rgba(0, 0, 0, 0.1)}.nano-tbl__pin--bottom .nano-tbl__th,.nano-tbl__pin--bottom .nano-tbl__td{position:sticky;inset-block-end:var(--pin-bottom, -1px)}.nano-tbl__pin--bottom.nano-tbl__pinned--bottom .nano-tbl__th,.nano-tbl__pin--bottom.nano-tbl__pinned--bottom .nano-tbl__td{z-index:5 !important}.nano-tbl__pin--bottom.nano-tbl__pinned--bottom:has(~.nano-tbl__pin--bottom.nano-tbl__pinned--bottom) .nano-tbl__th,.nano-tbl__pin--bottom.nano-tbl__pinned--bottom:has(~.nano-tbl__pin--bottom.nano-tbl__pinned--bottom) .nano-tbl__td{z-index:6 !important}.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pinned--bottom .nano-tbl__pin--start{z-index:6 !important}tbody .nano-tbl__pin--bottom.nano-tbl__pinned--bottom .nano-tbl__th,tbody .nano-tbl__pin--bottom.nano-tbl__pinned--bottom .nano-tbl__td{box-shadow:1px -3px 4px -1px rgba(0, 0, 0, 0.07)}.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-before:var(--border-style);border-block-start:var(--border-style);-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)}";
|
31245
31569
|
|
31570
|
+
const measurePerf = false;
|
31571
|
+
function perMark(name, end = false) {
|
31572
|
+
if (!performance || !measurePerf)
|
31573
|
+
return;
|
31574
|
+
if (end) {
|
31575
|
+
performance === null || performance === void 0 ? void 0 : performance.mark('end' + name);
|
31576
|
+
performance === null || performance === void 0 ? void 0 : performance.measure(name, 'start' + name, 'end' + name);
|
31577
|
+
const entries = performance === null || performance === void 0 ? void 0 : performance.getEntriesByName(name);
|
31578
|
+
console.log(entries[entries.length ? entries.length - 1 : 0]);
|
31579
|
+
}
|
31580
|
+
else {
|
31581
|
+
performance === null || performance === void 0 ? void 0 : performance.mark('start' + name);
|
31582
|
+
}
|
31583
|
+
}
|
31246
31584
|
let id = 0;
|
31247
31585
|
/**
|
31248
31586
|
* A performant, accessible and semantic (uses real html `<table />`, `<tr />` etc) table and data-grid solution.
|
@@ -31293,6 +31631,7 @@ class Table {
|
|
31293
31631
|
const sortEvent = this.nanoTblBeforeSort.emit({ column: column, order });
|
31294
31632
|
if (sortEvent.defaultPrevented)
|
31295
31633
|
return;
|
31634
|
+
perMark('sort');
|
31296
31635
|
this.currentSort = order + ':' + column;
|
31297
31636
|
// doesn't make sense to leave user in place for a sort
|
31298
31637
|
this.scrollToTop(element);
|
@@ -31336,13 +31675,24 @@ class Table {
|
|
31336
31675
|
* stop loop - it's on the current active block.
|
31337
31676
|
*/
|
31338
31677
|
this.scrollHandler = () => {
|
31678
|
+
var _a;
|
31679
|
+
perMark('scrollHandler');
|
31339
31680
|
// don't listen if this table isn't in the viewport
|
31340
|
-
if (!this.store.general.state.isActive || !this.rows)
|
31681
|
+
if (!((_a = this.store) === null || _a === void 0 ? void 0 : _a.general.state.isActive) || !this.rows)
|
31341
31682
|
return;
|
31342
31683
|
if (this.primaryBlockIndex === undefined)
|
31343
31684
|
this.primaryBlockIndex = 0;
|
31344
31685
|
readTask(() => {
|
31345
|
-
this.cacheScrollPosition =
|
31686
|
+
this.cacheScrollPosition =
|
31687
|
+
typeof this.scrollParent.scrollTop !== 'undefined'
|
31688
|
+
? this.scrollParent.scrollTop
|
31689
|
+
: window.scrollY;
|
31690
|
+
if (this.tablePinnedService) {
|
31691
|
+
this.tablePinnedService.onScroll({
|
31692
|
+
x: this.scrollParent.scrollLeft || window.scrollX,
|
31693
|
+
y: this.cacheScrollPosition,
|
31694
|
+
});
|
31695
|
+
}
|
31346
31696
|
let cumulativeHeight = this.host.offsetTop;
|
31347
31697
|
let blockIndex = 0;
|
31348
31698
|
const blockLen = this.blocks.length;
|
@@ -31353,7 +31703,9 @@ class Table {
|
|
31353
31703
|
const potentialBlocks = [
|
31354
31704
|
blockIndex,
|
31355
31705
|
blockIndex + 1,
|
31356
|
-
|
31706
|
+
this.cacheScrollPosition,
|
31707
|
+
cumulativeHeight,
|
31708
|
+
// Math.max(0, blockIndex - 1),
|
31357
31709
|
];
|
31358
31710
|
if (potentialBlocks.toString() !== this.activeBlocks.toString()) {
|
31359
31711
|
this.activeBlocks = potentialBlocks;
|
@@ -31362,11 +31714,7 @@ class Table {
|
|
31362
31714
|
}
|
31363
31715
|
blockIndex++;
|
31364
31716
|
}
|
31365
|
-
|
31366
|
-
};
|
31367
|
-
this.handleColumnPinned = (positions) => {
|
31368
|
-
Object.entries(positions).forEach(([key, applied]) => {
|
31369
|
-
this.tableEle.classList.toggle(`${CSSNAMESPACE}__pinned--${key}`, applied);
|
31717
|
+
perMark('scrollHandler', true);
|
31370
31718
|
});
|
31371
31719
|
};
|
31372
31720
|
this.handleResizeChange = (e) => {
|
@@ -31377,12 +31725,12 @@ class Table {
|
|
31377
31725
|
classes = [...e.target.className.split(' '), ...classes];
|
31378
31726
|
this.tableWrapperEle.classList.add(...classes.filter((cl) => !!cl));
|
31379
31727
|
};
|
31380
|
-
this.
|
31728
|
+
this.customRenderer = undefined;
|
31381
31729
|
this.type = 'table';
|
31382
31730
|
this.caption = undefined;
|
31383
31731
|
this.showCaption = false;
|
31384
31732
|
this.loading = undefined;
|
31385
|
-
this.internalLoading =
|
31733
|
+
this.internalLoading = true;
|
31386
31734
|
this.placeholderSize = 5;
|
31387
31735
|
this.rows = undefined;
|
31388
31736
|
this.columns = [];
|
@@ -31390,14 +31738,14 @@ class Table {
|
|
31390
31738
|
this.rowRender = undefined;
|
31391
31739
|
this.footRender = { pinned: 'bottom' };
|
31392
31740
|
this.showFooter = false;
|
31393
|
-
this.perBlock =
|
31741
|
+
this.perBlock = 50;
|
31394
31742
|
this.searchTerm = undefined;
|
31395
31743
|
this.customFilterFn = undefined;
|
31396
31744
|
this.customSortFn = undefined;
|
31397
31745
|
this.defaultSort = true;
|
31398
31746
|
this.virtualTotalItems = 0;
|
31399
31747
|
this.blocks = [];
|
31400
|
-
this.activeBlocks = [0, 1
|
31748
|
+
this.activeBlocks = [0, 1];
|
31401
31749
|
this.debounceSetLoading = debounce$2(this.debounceSetLoading.bind(this), 50);
|
31402
31750
|
}
|
31403
31751
|
get _loading() {
|
@@ -31426,6 +31774,8 @@ class Table {
|
|
31426
31774
|
if (!this.isReady)
|
31427
31775
|
requestAnimationFrame(() => this.setInitialBlockDimension());
|
31428
31776
|
this._loading = false;
|
31777
|
+
if (this.tablePinnedService)
|
31778
|
+
this.tablePinnedService.assessRows();
|
31429
31779
|
});
|
31430
31780
|
}
|
31431
31781
|
async handleColsChange() {
|
@@ -31443,6 +31793,10 @@ class Table {
|
|
31443
31793
|
virtualTotalItemsChangeHandler() {
|
31444
31794
|
this.setBlocks();
|
31445
31795
|
}
|
31796
|
+
/** @readonly - shows the currently applied filters */
|
31797
|
+
get appliedFilters() {
|
31798
|
+
return this.filters;
|
31799
|
+
}
|
31446
31800
|
/** Remove any column sorts currently applied
|
31447
31801
|
* @returns a promise which resolves when complete */
|
31448
31802
|
async resetSorting() {
|
@@ -31485,8 +31839,6 @@ class Table {
|
|
31485
31839
|
}
|
31486
31840
|
/** Updates a row model at a given index
|
31487
31841
|
* @param row - the row to update.
|
31488
|
-
* *Note* - this should come from the `col.cellTemplate` or `row.rowRender.template` `rowModel` property
|
31489
|
-
* - rows are augmented with certain properties to aid with efficient rendering
|
31490
31842
|
* @param rowIndex - the row index to insert this row
|
31491
31843
|
*/
|
31492
31844
|
async updateRow(row, rowIndex) {
|
@@ -31517,7 +31869,9 @@ class Table {
|
|
31517
31869
|
? document
|
31518
31870
|
: this._scrollParent).removeEventListener('scroll', this.scrollHandler);
|
31519
31871
|
}
|
31520
|
-
(ele === document.documentElement ? document : ele).addEventListener('scroll', this.scrollHandler
|
31872
|
+
(ele === document.documentElement ? document : ele).addEventListener('scroll', this.scrollHandler
|
31873
|
+
// {passive: true}
|
31874
|
+
);
|
31521
31875
|
this._scrollParent = ele;
|
31522
31876
|
}
|
31523
31877
|
// used to fire `nanoTblBlockRendered` on block render change
|
@@ -31571,17 +31925,20 @@ class Table {
|
|
31571
31925
|
return Object.assign(Object.assign({}, c), { order: null });
|
31572
31926
|
});
|
31573
31927
|
this.nanoTblAfterSort.emit({ column: column, order });
|
31928
|
+
perMark('sort', true);
|
31574
31929
|
}
|
31575
31930
|
async searchStart() {
|
31576
31931
|
this._loading = true;
|
31577
31932
|
const sortEvent = this.nanoTblBeforeSearch.emit({ term: this.searchTerm });
|
31578
31933
|
if (sortEvent.defaultPrevented)
|
31579
31934
|
return;
|
31935
|
+
perMark('search');
|
31580
31936
|
// doesn't make sense to leave user in place for a search
|
31581
31937
|
this.scrollToTop();
|
31582
31938
|
try {
|
31583
31939
|
await storeSearch(this.host, this.searchTerm);
|
31584
31940
|
this.nanoTblAfterSearch.emit({ term: this.searchTerm });
|
31941
|
+
perMark('search', true);
|
31585
31942
|
}
|
31586
31943
|
catch (e) {
|
31587
31944
|
console.warn('search failed', e);
|
@@ -31608,6 +31965,7 @@ class Table {
|
|
31608
31965
|
const sortEvent = this.nanoTblBeforeFilter.emit({ filters: this.filters });
|
31609
31966
|
if (sortEvent.defaultPrevented)
|
31610
31967
|
return;
|
31968
|
+
perMark('filter');
|
31611
31969
|
this.currentFilters = JSON.stringify(this.filters);
|
31612
31970
|
// doesn't make sense to leave user in place for a search
|
31613
31971
|
this.scrollToTop();
|
@@ -31616,10 +31974,11 @@ class Table {
|
|
31616
31974
|
const res = await this.customFilterFn(this.filters);
|
31617
31975
|
// if the response is 'true', the custom filter did it's thing
|
31618
31976
|
// handover to finish and stop loading state.
|
31619
|
-
// if response is
|
31977
|
+
// if response is falsy, carry on to do a FE filter
|
31620
31978
|
if (res === true) {
|
31621
31979
|
this.filterComplete();
|
31622
31980
|
this._loading = false;
|
31981
|
+
return;
|
31623
31982
|
}
|
31624
31983
|
}
|
31625
31984
|
catch (e) {
|
@@ -31628,8 +31987,8 @@ class Table {
|
|
31628
31987
|
console.warn('custom filter failed', e);
|
31629
31988
|
this.currentFilters = '';
|
31630
31989
|
this._loading = false;
|
31990
|
+
return;
|
31631
31991
|
}
|
31632
|
-
return;
|
31633
31992
|
}
|
31634
31993
|
try {
|
31635
31994
|
await storeFilter(this.host, this.filters);
|
@@ -31645,13 +32004,22 @@ class Table {
|
|
31645
32004
|
filterComplete() {
|
31646
32005
|
this.columns = this.columns.map((c) => {
|
31647
32006
|
const cFilter = this.filters.find((f) => f.prop === c.prop);
|
31648
|
-
if
|
32007
|
+
// if we found a filter AND
|
32008
|
+
// it isn't true / false and has a length OR
|
32009
|
+
// it is true or false
|
32010
|
+
if (cFilter &&
|
32011
|
+
((typeof cFilter.filter !== 'boolean' && cFilter.filter.length) ||
|
32012
|
+
typeof cFilter.filter === 'boolean'))
|
31649
32013
|
c.filter = cFilter.filter;
|
31650
|
-
|
32014
|
+
// if a filter value is not set OR
|
32015
|
+
// it isn't true / false and has no length
|
32016
|
+
else if ((c.filter !== null && c.filter !== undefined) ||
|
32017
|
+
(!!c.filter && typeof c.filter !== 'boolean' && !c.filter.length))
|
31651
32018
|
c.filter = undefined;
|
31652
32019
|
return c;
|
31653
32020
|
});
|
31654
32021
|
this.nanoTblAfterFilter.emit({ filters: this.filters });
|
32022
|
+
perMark('filter', true);
|
31655
32023
|
}
|
31656
32024
|
/** Scrolls to the top immediately - used whilst sorting / filtering */
|
31657
32025
|
scrollToTop(element) {
|
@@ -31687,6 +32055,7 @@ class Table {
|
|
31687
32055
|
var _a;
|
31688
32056
|
if (!((_a = this.blockElements) === null || _a === void 0 ? void 0 : _a.length))
|
31689
32057
|
return;
|
32058
|
+
perMark('blockDims');
|
31690
32059
|
const testForDimensions = async () => {
|
31691
32060
|
await this.setMeasureElement();
|
31692
32061
|
if (this.unitHeight)
|
@@ -31710,6 +32079,8 @@ class Table {
|
|
31710
32079
|
});
|
31711
32080
|
// we're all finished.
|
31712
32081
|
dimensionsReady.then(() => {
|
32082
|
+
perMark('blockDims', true);
|
32083
|
+
perMark('init', true);
|
31713
32084
|
requestAnimationFrame(() => (this.isReady = true));
|
31714
32085
|
});
|
31715
32086
|
}
|
@@ -31732,6 +32103,8 @@ class Table {
|
|
31732
32103
|
if (!!col) {
|
31733
32104
|
await this.sortStart(col.order, col.prop);
|
31734
32105
|
}
|
32106
|
+
if (this.tablePinnedService)
|
32107
|
+
this.tablePinnedService.assessCols();
|
31735
32108
|
}
|
31736
32109
|
/** Split up all incoming rows into 'blocks' split amongst tbody elements.
|
31737
32110
|
* These can then be hidden / shown to improve performance.
|
@@ -31742,6 +32115,7 @@ class Table {
|
|
31742
32115
|
this.blocks = [];
|
31743
32116
|
return;
|
31744
32117
|
}
|
32118
|
+
perMark('setBlocks');
|
31745
32119
|
// this.ignoreIO = true;
|
31746
32120
|
let i = 1;
|
31747
32121
|
const l = this.virtualTotalItems > dRows.length
|
@@ -31764,6 +32138,7 @@ class Table {
|
|
31764
32138
|
blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });
|
31765
32139
|
}
|
31766
32140
|
this.blocks = blocks;
|
32141
|
+
perMark('setBlocks', true);
|
31767
32142
|
}
|
31768
32143
|
/**
|
31769
32144
|
* Returns a block render height.
|
@@ -31832,6 +32207,7 @@ class Table {
|
|
31832
32207
|
}
|
31833
32208
|
// Component lifecycle
|
31834
32209
|
async componentWillLoad() {
|
32210
|
+
perMark('init');
|
31835
32211
|
// setup stores
|
31836
32212
|
this.store = await generateStore(this.host, this.columns, this.scrollParent, this.isReady);
|
31837
32213
|
await this.handleRowsChange();
|
@@ -31851,6 +32227,9 @@ class Table {
|
|
31851
32227
|
}
|
31852
32228
|
componentDidLoad() {
|
31853
32229
|
this.setInitialBlockDimension();
|
32230
|
+
if (!this.tablePinnedService) {
|
32231
|
+
this.tablePinnedService = new TablePinService(this.tableEle, this.scrollParent);
|
32232
|
+
}
|
31854
32233
|
}
|
31855
32234
|
componentShouldUpdate(_newVal, _oldVal, stateName) {
|
31856
32235
|
// stop double rendering - we use the store for rendering internally
|
@@ -31860,9 +32239,11 @@ class Table {
|
|
31860
32239
|
return false;
|
31861
32240
|
}
|
31862
32241
|
componentWillRender() {
|
32242
|
+
perMark('render');
|
31863
32243
|
}
|
31864
32244
|
componentDidRender() {
|
31865
32245
|
this.setMeasureElement().then(() => this.setBlockHeight());
|
32246
|
+
perMark('render', true);
|
31866
32247
|
}
|
31867
32248
|
disconnectedCallback() {
|
31868
32249
|
if (!this.activeWatcherIo)
|
@@ -31875,28 +32256,31 @@ class Table {
|
|
31875
32256
|
}
|
31876
32257
|
render() {
|
31877
32258
|
this.blockElements = [];
|
31878
|
-
return (hAsync(Host, null, hAsync("div", { class: `${CSSNAMESPACE}__top-anchor`, ref: (a) => (this.topAnchorEle = a) }, "\u00A0"), hAsync("nano-resize-observe", { states: "576w sm, 768w md", class: "sm md", onNanoResizeStateChange: this.handleResizeChange
|
32259
|
+
return (hAsync(Host, null, hAsync("div", { class: `${CSSNAMESPACE}__top-anchor`, ref: (a) => (this.topAnchorEle = a) }, "\u00A0"), hAsync("nano-resize-observe", { states: "576w sm, 768w md", class: "sm md", onNanoResizeStateChange: this.handleResizeChange, onNanoResize: () => {
|
32260
|
+
if (this.tablePinnedService)
|
32261
|
+
this.tablePinnedService.onResize();
|
32262
|
+
} }), hAsync("div", { class: `${CSSNAMESPACE}__wrap sm md`, ref: (div) => (this.tableWrapperEle = div), "aria-labelledby": 'nano-table-caption-' + this.renderId, tabindex: this.type === 'grid' ? '0' : undefined }, hAsync("nano-progress-bar", { indeterminate: true, class: {
|
31879
32263
|
[`${CSSNAMESPACE}__progress-bar`]: true,
|
31880
32264
|
[`${CSSNAMESPACE}__progress-bar--show`]: this._loading,
|
31881
|
-
} }), hAsync("table", { role: this.type === 'grid' ? 'grid' : undefined, "aria-rowcount": this.store.data.state.rows.length, "aria-colcount": this.store.config.state.columns.length, class: `${CSSNAMESPACE}`, ref: (tbl) => (this.tableEle = tbl) }, hAsync("caption", { class: {
|
32265
|
+
} }), hAsync("table", { role: this.type === 'grid' ? 'grid' : undefined, "aria-rowcount": this.store.data.state.rows.length, "aria-colcount": this.store.config.state.columns.length, class: `${CSSNAMESPACE}`, ref: (tbl) => (this.tableEle = tbl), id: 'nano-table-' + this.renderId }, hAsync("caption", { class: {
|
31882
32266
|
[`${CSSNAMESPACE}__caption`]: true,
|
31883
32267
|
[`${CSSNAMESPACE}__caption--hide`]: !this.showCaption,
|
31884
|
-
}, id: 'table-caption-' + this.renderId }, hAsync("slot", { name: "caption" }, this.caption)), hAsync("thead", null, hAsync(TableHeadFootRow, { rowRenderer: this.headRender
|
31885
|
-
hAsync(TableColHead, { column: colModel, headRenderer: this.headRender, onColumnSortClick: this.sortStart,
|
32268
|
+
}, id: 'nano-table-caption-' + this.renderId }, hAsync("slot", { name: "caption" }, this.caption)), hAsync("thead", null, hAsync(TableHeadFootRow, { rowRenderer: this.headRender }, this.store.config.state.columns.map((colModel) => [
|
32269
|
+
hAsync(TableColHead, { column: colModel, headRenderer: this.headRender, onColumnSortClick: this.sortStart, defaults: {
|
31886
32270
|
sortable: this.defaultSort,
|
31887
32271
|
} }),
|
31888
|
-
]))), 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
|
32272
|
+
]))), this._loading && !this.blocks.length && (hAsync("tbody", { class: `${CSSNAMESPACE}__active ${CSSNAMESPACE}__loading` }, [...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) => {
|
31889
32273
|
this.blockElements.push(tb);
|
31890
32274
|
}, class: {
|
31891
32275
|
[`${CSSNAMESPACE}__inactive`]: !this.activeBlocks.includes(blockIndex),
|
31892
32276
|
[`${CSSNAMESPACE}__active`]: this.activeBlocks.includes(blockIndex),
|
31893
32277
|
} }, this.activeBlocks.includes(blockIndex) ? (block.rows.map((row, i) => {
|
31894
32278
|
const rowIndex = blockIndex > 0 ? blockIndex * this.perBlock + i : i;
|
31895
|
-
return (hAsync(TableRow, { rowRenderer: this.rowRender, rowModel: row, rowIndex: rowIndex }, this.store.config.state.columns.map((_colModel, colIndex) => (hAsync(TableCell
|
31896
|
-
})) : (hAsync("tr",
|
32279
|
+
return (hAsync(TableRow, { rowRenderer: this.rowRender, rowModel: row, rowIndex: rowIndex }, this.store.config.state.columns.map((_colModel, colIndex) => (hAsync(TableCell, { rowIndex: rowIndex, colIndex: colIndex })))));
|
32280
|
+
})) : (hAsync("tr", { class: `${CSSNAMESPACE}__tr--placeholder` }, hAsync("td", { colSpan: this.store.config.state.columns.length, style: {
|
31897
32281
|
height: this.getBlockHeight(blockIndex) + 'px',
|
31898
|
-
} })))))), this.showFooter && (hAsync("tfoot", null, hAsync(TableHeadFootRow, { rowRenderer: this.footRender
|
31899
|
-
hAsync(TableColHead, { column: colModel, headRenderer: this.footRender,
|
32282
|
+
} })))))), this.showFooter && (hAsync("tfoot", null, hAsync(TableHeadFootRow, { rowRenderer: this.footRender }, this.store.config.state.columns.map((colModel) => [
|
32283
|
+
hAsync(TableColHead, { column: colModel, headRenderer: this.footRender, onColumnSortClick: this.sortStart, defaults: {
|
31900
32284
|
sortable: this.defaultSort,
|
31901
32285
|
} }),
|
31902
32286
|
]))))), !!this.blocks.length && (hAsync("nano-spinner", { type: "circle", class: {
|
@@ -31916,7 +32300,7 @@ class Table {
|
|
31916
32300
|
"$flags$": 4,
|
31917
32301
|
"$tagName$": "nano-table",
|
31918
32302
|
"$members$": {
|
31919
|
-
"
|
32303
|
+
"customRenderer": [16],
|
31920
32304
|
"type": [1],
|
31921
32305
|
"caption": [1],
|
31922
32306
|
"showCaption": [4, "show-caption"],
|
@@ -31935,6 +32319,7 @@ class Table {
|
|
31935
32319
|
"customSortFn": [16],
|
31936
32320
|
"defaultSort": [4, "default-sort"],
|
31937
32321
|
"virtualTotalItems": [2, "virtual-total-items"],
|
32322
|
+
"appliedFilters": [2064],
|
31938
32323
|
"internalLoading": [32],
|
31939
32324
|
"blocks": [32],
|
31940
32325
|
"activeBlocks": [32],
|