@aquera/nile-elements 0.1.74-beta-1.0 → 0.1.75-beta-1.2
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/README.md +3 -0
- package/demo/index.html +117 -22
- package/dist/{fixture-3bfb4490.cjs.js → fixture-5b79f853.cjs.js} +2 -2
- package/dist/{fixture-3bfb4490.cjs.js.map → fixture-5b79f853.cjs.js.map} +1 -1
- package/dist/{fixture-e7023246.esm.js → fixture-90b199c4.esm.js} +1 -1
- package/dist/{fixture-8edec91c.esm.js → fixture-cf7bfcf5.esm.js} +1 -1
- package/dist/{fixture-7bfb866e.cjs.js → fixture-dbd66009.cjs.js} +2 -2
- package/dist/{fixture-fe6c932e.cjs.js.map → fixture-dbd66009.cjs.js.map} +1 -1
- package/dist/index.js +10 -5
- package/dist/nile-accordion/nile-accordian.test.cjs.js +1 -1
- package/dist/nile-accordion/nile-accordian.test.esm.js +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.test.cjs.js +1 -1
- package/dist/nile-auto-complete/nile-auto-complete.test.esm.js +1 -1
- package/dist/nile-avatar/nile-avatar.test.cjs.js +1 -1
- package/dist/nile-avatar/nile-avatar.test.esm.js +1 -1
- package/dist/nile-badge/nile-badge.test.cjs.js +1 -1
- package/dist/nile-badge/nile-badge.test.esm.js +1 -1
- package/dist/nile-button/nile-button.test.cjs.js +1 -1
- package/dist/nile-button/nile-button.test.esm.js +1 -1
- package/dist/nile-button-toggle-group/nile-button-toggle-group.test.cjs.js +1 -1
- package/dist/nile-button-toggle-group/nile-button-toggle-group.test.esm.js +1 -1
- package/dist/nile-calendar/nile-calendar.test.cjs.js +1 -1
- package/dist/nile-calendar/nile-calendar.test.esm.js +1 -1
- package/dist/nile-card/nile-card.test.cjs.js +1 -1
- package/dist/nile-card/nile-card.test.esm.js +1 -1
- package/dist/nile-checkbox/nile-checkbox.test.cjs.js +1 -1
- package/dist/nile-checkbox/nile-checkbox.test.esm.js +1 -1
- package/dist/nile-chip/nile-chip.test.cjs.js +1 -1
- package/dist/nile-chip/nile-chip.test.esm.js +1 -1
- package/dist/nile-dialog/nile-dialog.test.cjs.js +1 -1
- package/dist/nile-dialog/nile-dialog.test.esm.js +1 -1
- package/dist/nile-drawer/nile-drawer.test.cjs.js +1 -1
- package/dist/nile-drawer/nile-drawer.test.esm.js +1 -1
- package/dist/nile-dropdown/nile-dropdown.test.cjs.js +1 -1
- package/dist/nile-dropdown/nile-dropdown.test.esm.js +1 -1
- package/dist/nile-empty-state/nile-empty-state.test.cjs.js +1 -1
- package/dist/nile-empty-state/nile-empty-state.test.esm.js +1 -1
- package/dist/nile-error-message/nile-error-message.test.cjs.js +1 -1
- package/dist/nile-error-message/nile-error-message.test.esm.js +1 -1
- package/dist/nile-file-preview/nile-file-preview.test.cjs.js +1 -1
- package/dist/nile-file-preview/nile-file-preview.test.esm.js +1 -1
- package/dist/nile-file-upload/nile-file-upload.test.cjs.js +1 -1
- package/dist/nile-file-upload/nile-file-upload.test.esm.js +1 -1
- package/dist/nile-filter-chip/nile-filter-chip.test.cjs.js +1 -1
- package/dist/nile-filter-chip/nile-filter-chip.test.esm.js +1 -1
- package/dist/nile-form-group/nile-form-group.test.cjs.js +1 -1
- package/dist/nile-form-group/nile-form-group.test.esm.js +1 -1
- package/dist/nile-form-help-text/nile-form-help-text.test.cjs.js +1 -1
- package/dist/nile-form-help-text/nile-form-help-text.test.esm.js +1 -1
- package/dist/nile-hero/nile-hero.test.cjs.js +1 -1
- package/dist/nile-hero/nile-hero.test.esm.js +1 -1
- package/dist/nile-icon/nile-icon.test.cjs.js +1 -1
- package/dist/nile-icon/nile-icon.test.esm.js +1 -1
- package/dist/nile-input/nile-input.test.cjs.js +1 -1
- package/dist/nile-input/nile-input.test.esm.js +1 -1
- package/dist/nile-link/nile-link.test.cjs.js +1 -1
- package/dist/nile-link/nile-link.test.esm.js +1 -1
- package/dist/nile-loader/nile-loader.test.cjs.js +1 -1
- package/dist/nile-loader/nile-loader.test.esm.js +1 -1
- package/dist/nile-popover/nile-popover.test.cjs.js +1 -1
- package/dist/nile-popover/nile-popover.test.esm.js +1 -1
- package/dist/nile-popup/nile-popup.test.cjs.js +1 -1
- package/dist/nile-popup/nile-popup.test.esm.js +1 -1
- package/dist/nile-progress-bar/nile-progress-bar.test.cjs.js +1 -1
- package/dist/nile-progress-bar/nile-progress-bar.test.esm.js +1 -1
- package/dist/nile-radio/nile-radio.test.cjs.js +1 -1
- package/dist/nile-radio/nile-radio.test.esm.js +1 -1
- package/dist/nile-radio-group/nile-radio-group.test.cjs.js +1 -1
- package/dist/nile-radio-group/nile-radio-group.test.esm.js +1 -1
- package/dist/nile-select/nile-select.cjs.js +1 -1
- package/dist/nile-select/nile-select.cjs.js.map +1 -1
- package/dist/nile-select/nile-select.esm.js +1 -1
- package/dist/nile-select/nile-select.test.cjs.js +1 -1
- package/dist/nile-select/nile-select.test.esm.js +1 -1
- package/dist/nile-slide-toggle/nile-slide-toggle.test.cjs.js +1 -1
- package/dist/nile-slide-toggle/nile-slide-toggle.test.esm.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.test.cjs.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.test.esm.js +1 -1
- package/dist/nile-textarea/nile-textarea.test.cjs.js +1 -1
- package/dist/nile-textarea/nile-textarea.test.esm.js +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.cjs.js +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.cjs.js.map +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.css.cjs.js +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.css.cjs.js.map +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.css.esm.js +4 -0
- package/dist/nile-virtual-select/nile-virtual-select.esm.js +2 -2
- package/dist/nile-virtual-select/nile-virtual-select.test.cjs.js +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.test.esm.js +1 -1
- package/dist/nile-virtual-select/renderer.cjs.js +1 -1
- package/dist/nile-virtual-select/renderer.cjs.js.map +1 -1
- package/dist/nile-virtual-select/renderer.esm.js +4 -3
- package/dist/nile-virtual-select/temp_nile-virtual-select copy.cjs.js +2 -0
- package/dist/nile-virtual-select/temp_nile-virtual-select copy.cjs.js.map +1 -0
- package/dist/nile-virtual-select/temp_nile-virtual-select copy.esm.js +231 -0
- package/dist/src/internal/resizable-helper.d.ts +59 -0
- package/dist/src/internal/resizable-helper.js +115 -0
- package/dist/src/internal/resizable-helper.js.map +1 -0
- package/dist/src/internal/resizable-styles.d.ts +16 -0
- package/dist/src/internal/resizable-styles.js +144 -0
- package/dist/src/internal/resizable-styles.js.map +1 -0
- package/dist/src/internal/virtualizer-error-handler.d.ts +30 -0
- package/dist/src/internal/virtualizer-error-handler.js +82 -0
- package/dist/src/internal/virtualizer-error-handler.js.map +1 -0
- package/dist/src/lib/index.d.ts +7 -0
- package/dist/src/lib/index.js +8 -0
- package/dist/src/lib/index.js.map +1 -0
- package/dist/src/lib/virtualize.d.ts +32 -0
- package/dist/src/lib/virtualize.js +105 -0
- package/dist/src/lib/virtualize.js.map +1 -0
- package/dist/src/lib/virtualize.test.d.ts +7 -0
- package/dist/src/lib/virtualize.test.js +57 -0
- package/dist/src/lib/virtualize.test.js.map +1 -0
- package/dist/src/nile-badge/__snapshots__/nile-badge.test.snap.js +17 -0
- package/dist/src/nile-calendar/__snapshots__/nile-calendar.test.snap.js +310 -0
- package/dist/src/nile-card/__snapshots__/nile-card.test.snap.js +34 -0
- package/dist/src/nile-checkbox/__snapshots__/nile-checkbox.test.snap.js +31 -0
- package/dist/src/nile-grid/data-processor.d.ts +37 -0
- package/dist/src/nile-grid/data-processor.js +122 -0
- package/dist/src/nile-grid/data-processor.js.map +1 -0
- package/dist/src/nile-grid/event-handlers.d.ts +35 -0
- package/dist/src/nile-grid/event-handlers.js +158 -0
- package/dist/src/nile-grid/event-handlers.js.map +1 -0
- package/dist/src/nile-grid/index.d.ts +5 -0
- package/dist/src/nile-grid/index.js +6 -0
- package/dist/src/nile-grid/index.js.map +1 -0
- package/dist/src/nile-grid/nile-grid.css.d.ts +1 -0
- package/dist/src/nile-grid/nile-grid.css.js +120 -0
- package/dist/src/nile-grid/nile-grid.css.js.map +1 -0
- package/dist/src/nile-grid/nile-grid.d.ts +39 -0
- package/dist/src/nile-grid/nile-grid.js +182 -0
- package/dist/src/nile-grid/nile-grid.js.map +1 -0
- package/dist/src/nile-grid/renderer.d.ts +8 -0
- package/dist/src/nile-grid/renderer.js +78 -0
- package/dist/src/nile-grid/renderer.js.map +1 -0
- package/dist/src/nile-grid/resize-handler.d.ts +4 -0
- package/dist/src/nile-grid/resize-handler.js +36 -0
- package/dist/src/nile-grid/resize-handler.js.map +1 -0
- package/dist/src/nile-grid/types.d.ts +32 -0
- package/dist/src/nile-grid/types.js +2 -0
- package/dist/src/nile-grid/types.js.map +1 -0
- package/dist/src/nile-grid/utils.d.ts +4 -0
- package/dist/src/nile-grid/utils.js +32 -0
- package/dist/src/nile-grid/utils.js.map +1 -0
- package/dist/src/nile-hero/__snapshots__/nile-hero.test.snap.js +47 -0
- package/dist/src/nile-icon/__snapshots__/nile-icon.test.snap.js +16 -0
- package/dist/src/nile-input/__snapshots__/nile-input.test.snap.js +75 -0
- package/dist/src/nile-popover/__snapshots__/nile-popover.test.snap.js +22 -0
- package/dist/src/nile-select/nile-select.js +3 -2
- package/dist/src/nile-select/nile-select.js.map +1 -1
- package/dist/src/nile-table-body/virtual-scroll-helper.d.ts +9 -0
- package/dist/src/nile-table-body/virtual-scroll-helper.js +24 -0
- package/dist/src/nile-table-body/virtual-scroll-helper.js.map +1 -0
- package/dist/src/nile-virtual-select/nile-virtual-select.css.js +4 -0
- package/dist/src/nile-virtual-select/nile-virtual-select.css.js.map +1 -1
- package/dist/src/nile-virtual-select/nile-virtual-select.d.ts +10 -1
- package/dist/src/nile-virtual-select/nile-virtual-select.js +71 -9
- package/dist/src/nile-virtual-select/nile-virtual-select.js.map +1 -1
- package/dist/src/nile-virtual-select/renderer.d.ts +2 -2
- package/dist/src/nile-virtual-select/renderer.js +6 -5
- package/dist/src/nile-virtual-select/renderer.js.map +1 -1
- package/dist/src/nile-virtual-select/temp_nile-virtual-select copy.d.ts +273 -0
- package/dist/src/nile-virtual-select/temp_nile-virtual-select copy.js +1305 -0
- package/dist/src/nile-virtual-select/temp_nile-virtual-select copy.js.map +1 -0
- package/dist/src/nile-virtual-select/virtualizer-error-handler.d.ts +21 -0
- package/dist/src/nile-virtual-select/virtualizer-error-handler.js +56 -0
- package/dist/src/nile-virtual-select/virtualizer-error-handler.js.map +1 -0
- package/dist/src/nile-virtual-table-body/index.d.ts +2 -0
- package/dist/src/nile-virtual-table-body/index.js +3 -0
- package/dist/src/nile-virtual-table-body/index.js.map +1 -0
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.css.d.ts +1 -0
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.css.js +44 -0
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.css.js.map +1 -0
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.d.ts +50 -0
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.js +135 -0
- package/dist/src/nile-virtual-table-body/nile-virtual-table-body.js.map +1 -0
- package/dist/src/nile-virtual-table-body/renderer.d.ts +16 -0
- package/dist/src/nile-virtual-table-body/renderer.js +49 -0
- package/dist/src/nile-virtual-table-body/renderer.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/nile-select/nile-select.ts +3 -2
- package/src/nile-virtual-select/nile-virtual-select.css.ts +4 -0
- package/src/nile-virtual-select/nile-virtual-select.ts +86 -11
- package/src/nile-virtual-select/renderer.ts +7 -5
- package/src/nile-virtual-select/temp_nile-virtual-select copy.ts +1398 -0
- package/vscode-html-custom-data.json +246 -1
- package/dist/axe.min-2b379f29.cjs.js +0 -12
- package/dist/axe.min-2b379f29.cjs.js.map +0 -1
- package/dist/axe.min-c2cd8733.esm.js +0 -12
- package/dist/fixture-2b5b3aba.esm.js +0 -569
- package/dist/fixture-7bfb866e.cjs.js.map +0 -1
- package/dist/fixture-fe6c932e.cjs.js +0 -395
package/package.json
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
"description": "Webcomponent nile-elements following open-wc recommendations",
|
4
4
|
"license": "MIT",
|
5
5
|
"author": "nile-elements",
|
6
|
-
"version": "0.1.
|
6
|
+
"version": "0.1.75-beta-1.2",
|
7
7
|
"main": "dist/src/index.js",
|
8
8
|
"type": "module",
|
9
9
|
"module": "dist/src/index.js",
|
@@ -944,8 +944,9 @@ export class NileSelect extends NileElement implements NileFormControl{
|
|
944
944
|
const allOptions = this.getAllOptions();
|
945
945
|
const value = Array.isArray(this.value) ? this.value : [this.value];
|
946
946
|
|
947
|
-
|
948
|
-
|
947
|
+
if(!this.enableVirtualScroll) {
|
948
|
+
this.setSelectedOptions(allOptions.filter(el => value.includes(el.value)));
|
949
|
+
}
|
949
950
|
}
|
950
951
|
|
951
952
|
@watch('open', { waitUntilFirstUpdate: true })
|
@@ -29,7 +29,7 @@ import { HasSlotController } from '../internal/slot';
|
|
29
29
|
import { waitForEvent } from '../internal/event';
|
30
30
|
import { watch } from '../internal/watch';
|
31
31
|
import NileElement from '../internal/nile-element';
|
32
|
-
import type { CSSResultGroup, TemplateResult } from 'lit';
|
32
|
+
import type { CSSResultGroup, PropertyValues, TemplateResult } from 'lit';
|
33
33
|
import type { NileFormControl } from '../internal/nile-element';
|
34
34
|
import type NileOption from '../nile-option/nile-option';
|
35
35
|
import type NilePopup from '../nile-popup/nile-popup';
|
@@ -73,6 +73,10 @@ import { VirtualSelectRenderer } from './renderer.js';
|
|
73
73
|
* @event nile-hide - Emitted when the select's menu closes.
|
74
74
|
* @event nile-after-hide - Emitted after the select's menu closes and all animations are complete.
|
75
75
|
* @event nile-invalid - Emitted when the form control has been checked for validity and its constraints aren't satisfied.
|
76
|
+
* @event nile-search - Emitted when the user types in the search input. The event payload includes the search query for backend search functionality.
|
77
|
+
* @event nile-scroll - Emitted when the user scrolls within the virtualized container. The event payload includes scroll position information.
|
78
|
+
* @event nile-scroll-start - Emitted when the user starts scrolling within the virtualized container.
|
79
|
+
* @event nile-scroll-end - Emitted when the user stops scrolling and reaches the bottom of the virtualized container (debounced).
|
76
80
|
*
|
77
81
|
* @csspart form-control - The form control that wraps the label, input, and help text.
|
78
82
|
* @csspart form-control-label - The label's wrapper.
|
@@ -111,6 +115,9 @@ export class NileVirtualSelect extends NileElement implements NileFormControl {
|
|
111
115
|
@state() displayLabel = '';
|
112
116
|
@state() selectedOptions: VirtualOption[] = [];
|
113
117
|
@state() oldValue: string | string[] = '';
|
118
|
+
|
119
|
+
private scrollTimeout: number | undefined;
|
120
|
+
private scrolling = false;
|
114
121
|
|
115
122
|
/** The name of the select, submitted as a name/value pair with form data. */
|
116
123
|
@property() name = '';
|
@@ -265,6 +272,17 @@ export class NileVirtualSelect extends NileElement implements NileFormControl {
|
|
265
272
|
|
266
273
|
disconnectedCallback() {
|
267
274
|
this.removeOpenListeners();
|
275
|
+
// Clear any pending scroll timeout to prevent memory leaks
|
276
|
+
if (this.scrollTimeout) {
|
277
|
+
clearTimeout(this.scrollTimeout);
|
278
|
+
this.scrollTimeout = undefined;
|
279
|
+
}
|
280
|
+
}
|
281
|
+
|
282
|
+
protected updated(changedProperties: PropertyValues): void {
|
283
|
+
if(changedProperties.has('value')) {
|
284
|
+
this.selectionChanged();
|
285
|
+
}
|
268
286
|
}
|
269
287
|
|
270
288
|
private initializeComponent(): void {
|
@@ -307,18 +325,21 @@ export class NileVirtualSelect extends NileElement implements NileFormControl {
|
|
307
325
|
this.handleDocumentFocusIn = this.handleDocumentFocusIn.bind(this);
|
308
326
|
this.handleDocumentKeyDown = this.handleDocumentKeyDown.bind(this);
|
309
327
|
this.handleDocumentMouseDown = this.handleDocumentMouseDown.bind(this);
|
328
|
+
this.handleWindowError = this.handleWindowError.bind(this);
|
310
329
|
}
|
311
330
|
|
312
331
|
private addOpenListeners(): void {
|
313
332
|
document.addEventListener('focusin', this.handleDocumentFocusIn);
|
314
333
|
document.addEventListener('keydown', this.handleDocumentKeyDown);
|
315
334
|
document.addEventListener('mousedown', this.handleDocumentMouseDown);
|
335
|
+
window.addEventListener('error', this.handleWindowError);
|
316
336
|
}
|
317
337
|
|
318
338
|
private removeOpenListeners(): void {
|
319
339
|
document.removeEventListener('focusin', this.handleDocumentFocusIn);
|
320
340
|
document.removeEventListener('keydown', this.handleDocumentKeyDown);
|
321
341
|
document.removeEventListener('mousedown', this.handleDocumentMouseDown);
|
342
|
+
window.removeEventListener('error', this.handleWindowError);
|
322
343
|
}
|
323
344
|
|
324
345
|
private handleFocus(): void {
|
@@ -405,6 +426,14 @@ export class NileVirtualSelect extends NileElement implements NileFormControl {
|
|
405
426
|
}
|
406
427
|
};
|
407
428
|
|
429
|
+
private handleWindowError = (event: ErrorEvent): void => {
|
430
|
+
const errorMessage = event.error?.message || event.message || '';
|
431
|
+
if (errorMessage.includes('Cannot read properties of null (reading \'insertBefore\')')) {
|
432
|
+
event.preventDefault();
|
433
|
+
return;
|
434
|
+
}
|
435
|
+
};
|
436
|
+
|
408
437
|
private handleFooterClick(event: MouseEvent): void {
|
409
438
|
event.stopPropagation();
|
410
439
|
event.preventDefault();
|
@@ -628,12 +657,58 @@ export class NileVirtualSelect extends NileElement implements NileFormControl {
|
|
628
657
|
|
629
658
|
handleSearchChange(e: any): void {
|
630
659
|
this.searchValue = e.detail.value;
|
660
|
+
|
661
|
+
this.emit('nile-search', {
|
662
|
+
query: this.searchValue,
|
663
|
+
name: this.name
|
664
|
+
});
|
665
|
+
|
631
666
|
if (!this.disableLocalSearch) {
|
632
667
|
this.filterVirtualOptions(this.searchValue);
|
633
668
|
this.resetScrollPosition();
|
634
669
|
}
|
635
670
|
}
|
636
671
|
|
672
|
+
handleScroll(e: Event): void {
|
673
|
+
if(this.showSelected) {
|
674
|
+
return;
|
675
|
+
}
|
676
|
+
|
677
|
+
const target = e.target as HTMLElement;
|
678
|
+
|
679
|
+
this.emit('nile-scroll', {
|
680
|
+
scrollTop: target.scrollTop,
|
681
|
+
scrollLeft: target.scrollLeft,
|
682
|
+
name: this.name
|
683
|
+
});
|
684
|
+
|
685
|
+
if (!this.scrolling) {
|
686
|
+
this.scrolling = true;
|
687
|
+
this.emit('nile-scroll-start', {
|
688
|
+
scrollTop: target.scrollTop,
|
689
|
+
scrollLeft: target.scrollLeft,
|
690
|
+
name: this.name
|
691
|
+
});
|
692
|
+
}
|
693
|
+
|
694
|
+
clearTimeout(this.scrollTimeout);
|
695
|
+
this.scrollTimeout = window.setTimeout(() => {
|
696
|
+
if (this.scrolling) {
|
697
|
+
this.scrolling = false;
|
698
|
+
}
|
699
|
+
}, 300);
|
700
|
+
|
701
|
+
const isAtBottom = Math.ceil(target.scrollTop) >= Math.floor(target.scrollHeight - target.offsetHeight);
|
702
|
+
if (isAtBottom) {
|
703
|
+
this.emit('nile-scroll-end', {
|
704
|
+
scrollTop: target.scrollTop,
|
705
|
+
scrollLeft: target.scrollLeft,
|
706
|
+
name: this.name,
|
707
|
+
isAtBottom: true
|
708
|
+
});
|
709
|
+
}
|
710
|
+
}
|
711
|
+
|
637
712
|
filterVirtualOptions(searchValue: string): void {
|
638
713
|
const result = VirtualSelectSearchManager.filterVirtualOptions(
|
639
714
|
searchValue,
|
@@ -670,18 +745,17 @@ export class NileVirtualSelect extends NileElement implements NileFormControl {
|
|
670
745
|
|
671
746
|
@watch('data', { waitUntilFirstUpdate: true })
|
672
747
|
handleDataChange(): void {
|
748
|
+
if (this.data.length > 0 && this.open && !this.showSelected) {
|
749
|
+
this.originalOptionItems = [...this.data];
|
750
|
+
}
|
751
|
+
|
673
752
|
this.selectionChanged();
|
674
|
-
// Show no results message when data is empty and not loading
|
675
753
|
if (!this.optionsLoading && this.data.length === 0) {
|
676
754
|
this.showNoResults = true;
|
677
755
|
} else if (this.data.length > 0) {
|
678
756
|
this.showNoResults = false;
|
679
757
|
}
|
680
758
|
this.requestUpdate();
|
681
|
-
|
682
|
-
if (this.open) {
|
683
|
-
this.resetScrollPosition();
|
684
|
-
}
|
685
759
|
}
|
686
760
|
|
687
761
|
@watch('renderItemConfig', { waitUntilFirstUpdate: true })
|
@@ -745,7 +819,7 @@ export class NileVirtualSelect extends NileElement implements NileFormControl {
|
|
745
819
|
}
|
746
820
|
|
747
821
|
private initializeOriginalItems(): void {
|
748
|
-
if (this.
|
822
|
+
if (this.data.length > 0) {
|
749
823
|
this.originalOptionItems = [...this.data];
|
750
824
|
}
|
751
825
|
}
|
@@ -1197,7 +1271,8 @@ export class NileVirtualSelect extends NileElement implements NileFormControl {
|
|
1197
1271
|
this.renderItemConfig?.getValue,
|
1198
1272
|
this.showNoResults,
|
1199
1273
|
this.noResultsMessage,
|
1200
|
-
this.optionsLoading
|
1274
|
+
this.optionsLoading,
|
1275
|
+
this.handleScroll.bind(this)
|
1201
1276
|
);
|
1202
1277
|
}
|
1203
1278
|
|
@@ -1272,16 +1347,16 @@ export class NileVirtualSelect extends NileElement implements NileFormControl {
|
|
1272
1347
|
|
1273
1348
|
private resetScrollPosition(): void {
|
1274
1349
|
this.updateComplete.then(() => {
|
1275
|
-
if (this.virtualizedContainer) {
|
1350
|
+
if (this.virtualizedContainer && this.virtualizedContainer.isConnected) {
|
1276
1351
|
this.virtualizedContainer.scrollTop = 0;
|
1277
1352
|
|
1278
1353
|
const listbox = this.shadowRoot?.querySelector('.select__listbox') as HTMLElement;
|
1279
|
-
if (listbox) {
|
1354
|
+
if (listbox && listbox.isConnected) {
|
1280
1355
|
listbox.scrollTop = 0;
|
1281
1356
|
}
|
1282
1357
|
|
1283
1358
|
const virtualizer = this.virtualizedContainer.querySelector('lit-virtualizer') as HTMLElement;
|
1284
|
-
if (virtualizer) {
|
1359
|
+
if (virtualizer && virtualizer.isConnected) {
|
1285
1360
|
virtualizer.scrollTop = 0;
|
1286
1361
|
}
|
1287
1362
|
}
|
@@ -21,7 +21,8 @@ export class VirtualSelectRenderer {
|
|
21
21
|
getItemValue?: (item: any) => string,
|
22
22
|
showNoResults?: boolean,
|
23
23
|
noResultsMessage?: string,
|
24
|
-
optionsLoading?: boolean
|
24
|
+
optionsLoading?: boolean,
|
25
|
+
onScroll?: (e: Event) => void
|
25
26
|
): TemplateResult {
|
26
27
|
return html`
|
27
28
|
<div part="select-options" class="select__options ${
|
@@ -37,6 +38,7 @@ export class VirtualSelectRenderer {
|
|
37
38
|
<div
|
38
39
|
class="virtualized"
|
39
40
|
part="virtualized"
|
41
|
+
@scroll=${onScroll}
|
40
42
|
>
|
41
43
|
${VirtualSelectRenderer.shouldUseVirtualizer(data)
|
42
44
|
? html`
|
@@ -70,8 +72,8 @@ export class VirtualSelectRenderer {
|
|
70
72
|
|
71
73
|
const optionValue = valueFn(item);
|
72
74
|
const displayText = displayTextFn(item);
|
73
|
-
const isDisabled = item
|
74
|
-
const className = item
|
75
|
+
const isDisabled = item?.disabled || false;
|
76
|
+
const className = item?.className;
|
75
77
|
|
76
78
|
let isSelected = false;
|
77
79
|
if (multiple) {
|
@@ -95,9 +97,9 @@ export class VirtualSelectRenderer {
|
|
95
97
|
|
96
98
|
/**
|
97
99
|
* Determines whether to use virtualizer based on dataset size
|
98
|
-
* For small datasets (less than
|
100
|
+
* For small datasets (less than 5 items), use regular rendering for better sizing
|
99
101
|
*/
|
100
102
|
private static shouldUseVirtualizer(data: any[]): boolean {
|
101
|
-
return data.length >=
|
103
|
+
return data.length >= 5;
|
102
104
|
}
|
103
105
|
}
|