@acorex/components 22.0.0-next.2 → 22.0.0-next.21
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/combo-box/README.md +3 -0
- package/fesm2022/acorex-components-calendar.mjs +12 -14
- package/fesm2022/acorex-components-calendar.mjs.map +1 -1
- package/fesm2022/acorex-components-color-palette.mjs +2 -2
- package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
- package/fesm2022/acorex-components-combo-box.mjs +669 -0
- package/fesm2022/acorex-components-combo-box.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs +50 -0
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-DCcRJYfF.mjs.map +1 -0
- package/fesm2022/{acorex-components-conversation-open-composer-picker-for-files-Hh5Oyp3p.mjs → acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs} +2 -2
- package/fesm2022/{acorex-components-conversation-open-composer-picker-for-files-Hh5Oyp3p.mjs.map → acorex-components-conversation-open-composer-picker-for-files-BuNEjswI.mjs.map} +1 -1
- package/fesm2022/acorex-components-conversation.mjs +194 -5768
- package/fesm2022/acorex-components-conversation.mjs.map +1 -1
- package/fesm2022/acorex-components-cron-job.mjs +12 -12
- package/fesm2022/acorex-components-cron-job.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-box.mjs +44 -12
- package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-input.mjs +332 -312
- package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-picker.mjs +11 -1
- package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-decorators.mjs +2 -2
- package/fesm2022/acorex-components-decorators.mjs.map +1 -1
- package/fesm2022/acorex-components-file-viewer.mjs +346 -125
- package/fesm2022/acorex-components-file-viewer.mjs.map +1 -1
- package/fesm2022/acorex-components-form.mjs +4 -3
- package/fesm2022/acorex-components-form.mjs.map +1 -1
- package/fesm2022/acorex-components-list.mjs +265 -19
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-map.mjs +1170 -13712
- package/fesm2022/acorex-components-map.mjs.map +1 -1
- package/fesm2022/acorex-components-menu.mjs +211 -74
- package/fesm2022/acorex-components-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-phone-box.mjs +6 -6
- package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
- package/fesm2022/acorex-components-popup.mjs +388 -78
- package/fesm2022/acorex-components-popup.mjs.map +1 -1
- package/fesm2022/acorex-components-query-builder.mjs +6 -2
- package/fesm2022/acorex-components-query-builder.mjs.map +1 -1
- package/fesm2022/acorex-components-rest-api-generator.mjs +2 -2
- package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
- package/fesm2022/acorex-components-rrule.mjs +2 -2
- package/fesm2022/acorex-components-rrule.mjs.map +1 -1
- package/fesm2022/acorex-components-scheduler-picker.mjs +16 -16
- package/fesm2022/acorex-components-scheduler-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-scheduler.mjs +2 -2
- package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
- package/fesm2022/acorex-components-select-box.mjs +176 -451
- package/fesm2022/acorex-components-select-box.mjs.map +1 -1
- package/fesm2022/acorex-components-selection-list.mjs +0 -4
- package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
- package/package.json +7 -7
- package/select-box/README.md +2 -0
- package/types/acorex-components-combo-box.d.ts +202 -0
- package/types/acorex-components-conversation.d.ts +11 -25
- package/types/acorex-components-datetime-box.d.ts +16 -4
- package/types/acorex-components-datetime-input.d.ts +62 -68
- package/types/acorex-components-file-viewer.d.ts +109 -17
- package/types/acorex-components-list.d.ts +65 -3
- package/types/acorex-components-map.d.ts +299 -45
- package/types/acorex-components-menu.d.ts +26 -4
- package/types/acorex-components-phone-box.d.ts +2 -2
- package/types/acorex-components-popup.d.ts +143 -35
- package/types/acorex-components-query-builder.d.ts +10 -9
- package/types/acorex-components-select-box.d.ts +36 -147
- package/types/acorex-components-selection-list.d.ts +1 -2
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CNHiM1Sp.mjs +0 -106
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CNHiM1Sp.mjs.map +0 -1
- package/fesm2022/acorex-components-modal-acorex-components-modal-Djl-uo9b.mjs +0 -388
- package/fesm2022/acorex-components-modal-acorex-components-modal-Djl-uo9b.mjs.map +0 -1
- package/fesm2022/acorex-components-modal-modal-content.component-BpUsCI8D.mjs +0 -247
- package/fesm2022/acorex-components-modal-modal-content.component-BpUsCI8D.mjs.map +0 -1
- package/fesm2022/acorex-components-modal.mjs +0 -2
- package/fesm2022/acorex-components-modal.mjs.map +0 -1
- package/modal/README.md +0 -3
- package/types/acorex-components-modal.d.ts +0 -132
|
@@ -85,6 +85,24 @@ class AXListComponent extends MXSelectionValueComponent {
|
|
|
85
85
|
* @ignore
|
|
86
86
|
*/
|
|
87
87
|
this.postponeFocus = false;
|
|
88
|
+
/**
|
|
89
|
+
* When true, keep trying to scroll/focus the selected item until async data & layout are ready.
|
|
90
|
+
* @ignore
|
|
91
|
+
*/
|
|
92
|
+
this.pendingRevealSelection = false;
|
|
93
|
+
/**
|
|
94
|
+
* When true, focus the selected row after a successful reveal.
|
|
95
|
+
* @ignore
|
|
96
|
+
*/
|
|
97
|
+
this.pendingRevealFocus = false;
|
|
98
|
+
/**
|
|
99
|
+
* Cached index of the last known selected item (from click or a successful resolve).
|
|
100
|
+
* Allows scrollToIndex before that page is loaded into the virtual cache.
|
|
101
|
+
* @ignore
|
|
102
|
+
*/
|
|
103
|
+
this.knownSelectedIndex = -1;
|
|
104
|
+
/** @ignore */
|
|
105
|
+
this.revealRetryHandle = null;
|
|
88
106
|
/**
|
|
89
107
|
* Determines whether to show the empty template based on the presence of items and loading state.
|
|
90
108
|
* @ignore
|
|
@@ -130,6 +148,7 @@ class AXListComponent extends MXSelectionValueComponent {
|
|
|
130
148
|
* @ignore
|
|
131
149
|
*/
|
|
132
150
|
ngOnDestroy() {
|
|
151
|
+
this.cancelRevealSelected();
|
|
133
152
|
this._onChangedSub?.unsubscribe();
|
|
134
153
|
this._onLoadingChangedSub?.unsubscribe();
|
|
135
154
|
super.ngOnDestroy();
|
|
@@ -157,11 +176,17 @@ class AXListComponent extends MXSelectionValueComponent {
|
|
|
157
176
|
this.hasItems = hasLoadedItems;
|
|
158
177
|
this._onLoadingChangedSub = this.listDataSource.source.onLoadingChanged.subscribe((data) => {
|
|
159
178
|
this.isLoading.set(data);
|
|
179
|
+
if (!data && this.pendingRevealSelection) {
|
|
180
|
+
setTimeout(() => this.tryRevealSelected(), 0);
|
|
181
|
+
}
|
|
160
182
|
});
|
|
161
183
|
this._onChangedSub = this.listDataSource.source.onChanged.subscribe((data) => {
|
|
162
184
|
this.hasItems = data.totalCount > 0;
|
|
163
185
|
setTimeout(() => {
|
|
164
186
|
this.render();
|
|
187
|
+
if (this.pendingRevealSelection) {
|
|
188
|
+
this.tryRevealSelected();
|
|
189
|
+
}
|
|
165
190
|
}, 0);
|
|
166
191
|
});
|
|
167
192
|
}
|
|
@@ -180,6 +205,7 @@ class AXListComponent extends MXSelectionValueComponent {
|
|
|
180
205
|
this.tooltipRef().forEach((item) => {
|
|
181
206
|
item.close();
|
|
182
207
|
});
|
|
208
|
+
this.rememberSelectedIndex(item);
|
|
183
209
|
this.toggleSelect(item);
|
|
184
210
|
this.onItemClick.emit({
|
|
185
211
|
component: this,
|
|
@@ -258,6 +284,160 @@ class AXListComponent extends MXSelectionValueComponent {
|
|
|
258
284
|
this.focus();
|
|
259
285
|
}
|
|
260
286
|
}
|
|
287
|
+
/**
|
|
288
|
+
* Keeps trying to scroll (and optionally focus) the selected item until async list data
|
|
289
|
+
* and dropdown layout are ready. Call when the parent dropdown opens.
|
|
290
|
+
*/
|
|
291
|
+
revealSelected(options = {}) {
|
|
292
|
+
if (options.focus) {
|
|
293
|
+
this.pendingRevealFocus = true;
|
|
294
|
+
}
|
|
295
|
+
this.pendingRevealSelection = true;
|
|
296
|
+
this.tryRevealSelected();
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Cancels an in-progress reveal (e.g. when the dropdown closes).
|
|
300
|
+
*/
|
|
301
|
+
cancelRevealSelected() {
|
|
302
|
+
this.pendingRevealSelection = false;
|
|
303
|
+
this.pendingRevealFocus = false;
|
|
304
|
+
if (this.revealRetryHandle != null) {
|
|
305
|
+
clearTimeout(this.revealRetryHandle);
|
|
306
|
+
this.revealRetryHandle = null;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* @ignore
|
|
311
|
+
*/
|
|
312
|
+
tryRevealSelected(attempt = 0) {
|
|
313
|
+
if (!this.pendingRevealSelection || !isPlatformBrowser(this.platformID)) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
if (this.revealRetryHandle != null) {
|
|
317
|
+
clearTimeout(this.revealRetryHandle);
|
|
318
|
+
this.revealRetryHandle = null;
|
|
319
|
+
}
|
|
320
|
+
if (!this.viewport) {
|
|
321
|
+
this.scheduleRevealRetry(attempt);
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
this.viewport.checkViewportSize();
|
|
325
|
+
const viewportSize = this.viewport.getViewportSize();
|
|
326
|
+
const index = this.resolveSelectedIndex();
|
|
327
|
+
if (index >= 0 && viewportSize > 0) {
|
|
328
|
+
this.applyScrollToIndex(index);
|
|
329
|
+
requestAnimationFrame(() => {
|
|
330
|
+
this.ensureSelectedItemVisible();
|
|
331
|
+
if (this.pendingRevealFocus) {
|
|
332
|
+
this.focusSelectedItem();
|
|
333
|
+
this.pendingRevealFocus = false;
|
|
334
|
+
}
|
|
335
|
+
this.pendingRevealSelection = false;
|
|
336
|
+
});
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
// Data may still be in flight, or the selected row is on an unloaded page.
|
|
340
|
+
// Keep retrying while the source is loading (hard-capped); otherwise allow a short layout race window.
|
|
341
|
+
const maxAttempts = this.isLoading() ? 100 : 40;
|
|
342
|
+
if (attempt < maxAttempts) {
|
|
343
|
+
this.scheduleRevealRetry(attempt);
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
if (this.getSelectedKeys().length > 0 && this.listDataSource?.source.totalCount > 0) {
|
|
347
|
+
void this.findAndRevealSelectedAcrossPages();
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
this.pendingRevealSelection = false;
|
|
351
|
+
}
|
|
352
|
+
/** @ignore */
|
|
353
|
+
scheduleRevealRetry(attempt) {
|
|
354
|
+
this.revealRetryHandle = setTimeout(() => this.tryRevealSelected(attempt + 1), 50);
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Loads pages until the selected key appears in cache, then scrolls to it.
|
|
358
|
+
* @ignore
|
|
359
|
+
*/
|
|
360
|
+
async findAndRevealSelectedAcrossPages() {
|
|
361
|
+
if (!this.listDataSource || !this.pendingRevealSelection) {
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
const source = this.listDataSource.source;
|
|
365
|
+
const pageSize = source.config.pageSize || 10;
|
|
366
|
+
const totalPages = Math.max(1, Math.ceil((source.totalCount || 0) / pageSize));
|
|
367
|
+
for (let page = 0; page < totalPages; page++) {
|
|
368
|
+
if (!this.pendingRevealSelection) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
await this.ensurePageLoaded(page);
|
|
372
|
+
const index = this.resolveSelectedIndexFromCache();
|
|
373
|
+
if (index >= 0) {
|
|
374
|
+
this.knownSelectedIndex = index;
|
|
375
|
+
this.applyScrollToIndex(index);
|
|
376
|
+
requestAnimationFrame(() => {
|
|
377
|
+
this.ensureSelectedItemVisible();
|
|
378
|
+
if (this.pendingRevealFocus) {
|
|
379
|
+
this.focusSelectedItem();
|
|
380
|
+
this.pendingRevealFocus = false;
|
|
381
|
+
}
|
|
382
|
+
this.pendingRevealSelection = false;
|
|
383
|
+
});
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
this.pendingRevealSelection = false;
|
|
388
|
+
}
|
|
389
|
+
/** @ignore */
|
|
390
|
+
ensurePageLoaded(page) {
|
|
391
|
+
const source = this.listDataSource.source;
|
|
392
|
+
const pageSize = source.config.pageSize || 10;
|
|
393
|
+
const start = page * pageSize;
|
|
394
|
+
const end = start + pageSize;
|
|
395
|
+
const alreadyLoaded = source.cachedItems.slice(start, end).some((item) => item != null);
|
|
396
|
+
if (alreadyLoaded) {
|
|
397
|
+
return Promise.resolve();
|
|
398
|
+
}
|
|
399
|
+
return new Promise((resolve) => {
|
|
400
|
+
const sub = source.onChanged.subscribe(() => {
|
|
401
|
+
if (source.cachedItems.slice(start, end).some((item) => item != null)) {
|
|
402
|
+
sub.unsubscribe();
|
|
403
|
+
clearTimeout(timeoutId);
|
|
404
|
+
resolve();
|
|
405
|
+
}
|
|
406
|
+
});
|
|
407
|
+
const timeoutId = setTimeout(() => {
|
|
408
|
+
sub.unsubscribe();
|
|
409
|
+
resolve();
|
|
410
|
+
}, 3000);
|
|
411
|
+
source.setPage(page);
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
/** @ignore */
|
|
415
|
+
applyScrollToIndex(index) {
|
|
416
|
+
if (!this.viewport) {
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
this.lastIndex = index;
|
|
420
|
+
this.viewport.checkViewportSize();
|
|
421
|
+
this.viewport.scrollToIndex(index);
|
|
422
|
+
}
|
|
423
|
+
/** @ignore */
|
|
424
|
+
focusSelectedItem() {
|
|
425
|
+
const list = this.getHostElement().querySelector('ul');
|
|
426
|
+
const focusable = list?.querySelector('li.ax-state-selected') ?? list?.querySelector('li.list-item');
|
|
427
|
+
focusable?.focus({ preventScroll: true });
|
|
428
|
+
}
|
|
429
|
+
/** @ignore */
|
|
430
|
+
rememberSelectedIndex(item) {
|
|
431
|
+
if (!this.listDataSource || item == null) {
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
const key = this.getValue(item);
|
|
435
|
+
const items = this.listDataSource.source.cachedItems;
|
|
436
|
+
const index = items.findIndex((candidate) => candidate != null && this.getValue(candidate) == key);
|
|
437
|
+
if (index >= 0) {
|
|
438
|
+
this.knownSelectedIndex = index;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
261
441
|
/**
|
|
262
442
|
* Scrolls the viewport to the currently selected list item.
|
|
263
443
|
*/
|
|
@@ -267,35 +447,104 @@ class AXListComponent extends MXSelectionValueComponent {
|
|
|
267
447
|
}
|
|
268
448
|
this.viewport.checkViewportSize();
|
|
269
449
|
requestAnimationFrame(() => {
|
|
450
|
+
this.viewport.checkViewportSize();
|
|
270
451
|
const index = this.resolveSelectedIndex();
|
|
271
|
-
if (index
|
|
272
|
-
|
|
273
|
-
this.viewport.scrollToIndex(index);
|
|
452
|
+
if (index < 0) {
|
|
453
|
+
return;
|
|
274
454
|
}
|
|
455
|
+
this.applyScrollToIndex(index);
|
|
456
|
+
requestAnimationFrame(() => this.ensureSelectedItemVisible());
|
|
275
457
|
});
|
|
276
458
|
}
|
|
277
459
|
/**
|
|
278
|
-
*
|
|
279
|
-
*
|
|
460
|
+
* Scrolls the selected row into the visible viewport when it is cropped at the edge.
|
|
461
|
+
* @ignore
|
|
462
|
+
*/
|
|
463
|
+
ensureSelectedItemVisible() {
|
|
464
|
+
const selected = this.getHostElement().querySelector('li.ax-state-selected');
|
|
465
|
+
if (!selected) {
|
|
466
|
+
return;
|
|
467
|
+
}
|
|
468
|
+
const scrollParent = this.viewport.elementRef.nativeElement ||
|
|
469
|
+
selected.closest('.cdk-virtual-scroll-viewport');
|
|
470
|
+
if (!scrollParent) {
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
const selectedRect = selected.getBoundingClientRect();
|
|
474
|
+
const parentRect = scrollParent.getBoundingClientRect();
|
|
475
|
+
const isCropped = selectedRect.top < parentRect.top + 1 || selectedRect.bottom > parentRect.bottom - 1;
|
|
476
|
+
if (isCropped) {
|
|
477
|
+
selected.scrollIntoView({ block: 'nearest', inline: 'nearest' });
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Resolves the selected item index, preferring a known index so virtual scroll can load that page.
|
|
280
482
|
* @ignore
|
|
281
483
|
*/
|
|
282
484
|
resolveSelectedIndex() {
|
|
283
|
-
|
|
485
|
+
const selectedKeys = this.getSelectedKeys();
|
|
486
|
+
if (!selectedKeys.length || !this.listDataSource) {
|
|
487
|
+
this.knownSelectedIndex = -1;
|
|
488
|
+
return -1;
|
|
489
|
+
}
|
|
490
|
+
if (this.knownSelectedIndex >= 0 && this.knownSelectedIndex < (this.listDataSource.source.totalCount || 0)) {
|
|
491
|
+
const knownItem = this.listDataSource.source.cachedItems[this.knownSelectedIndex];
|
|
492
|
+
if (knownItem != null) {
|
|
493
|
+
if (selectedKeys.some((key) => key == this.getValue(knownItem))) {
|
|
494
|
+
return this.knownSelectedIndex;
|
|
495
|
+
}
|
|
496
|
+
// Value changed since this index was remembered.
|
|
497
|
+
this.knownSelectedIndex = -1;
|
|
498
|
+
}
|
|
499
|
+
else if (this.pendingRevealSelection) {
|
|
500
|
+
// Page not loaded yet — scroll there so CDK loads the range.
|
|
501
|
+
return this.knownSelectedIndex;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
const index = this.resolveSelectedIndexFromCache();
|
|
505
|
+
if (index >= 0) {
|
|
506
|
+
this.knownSelectedIndex = index;
|
|
507
|
+
}
|
|
508
|
+
return index;
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Resolves the selected item index from values already loaded in the list source.
|
|
512
|
+
* @ignore
|
|
513
|
+
*/
|
|
514
|
+
resolveSelectedIndexFromCache() {
|
|
515
|
+
if (!this.listDataSource) {
|
|
284
516
|
return -1;
|
|
285
517
|
}
|
|
286
|
-
const
|
|
287
|
-
if (
|
|
518
|
+
const selectedKeys = this.getSelectedKeys();
|
|
519
|
+
if (selectedKeys.length === 0) {
|
|
288
520
|
return -1;
|
|
289
521
|
}
|
|
290
522
|
const items = this.listDataSource.source.cachedItems;
|
|
291
523
|
for (let index = 0; index < items.length; index++) {
|
|
292
524
|
const item = items[index];
|
|
293
|
-
if (item
|
|
525
|
+
if (item == null) {
|
|
526
|
+
continue;
|
|
527
|
+
}
|
|
528
|
+
const itemKey = this.getValue(item);
|
|
529
|
+
if (selectedKeys.some((key) => key == itemKey)) {
|
|
294
530
|
return index;
|
|
295
531
|
}
|
|
296
532
|
}
|
|
297
533
|
return -1;
|
|
298
534
|
}
|
|
535
|
+
/**
|
|
536
|
+
* @ignore
|
|
537
|
+
*/
|
|
538
|
+
getSelectedKeys() {
|
|
539
|
+
if (this.multiple) {
|
|
540
|
+
const items = this.selectedItems?.length ? this.selectedItems : Array.isArray(this.value) ? this.value : [];
|
|
541
|
+
return items
|
|
542
|
+
.map((item) => (item != null && typeof item === 'object' ? this.getValue(item) : item))
|
|
543
|
+
.filter((key) => key != null);
|
|
544
|
+
}
|
|
545
|
+
const key = this.getSelectedKey();
|
|
546
|
+
return key == null ? [] : [key];
|
|
547
|
+
}
|
|
299
548
|
/**
|
|
300
549
|
* @ignore
|
|
301
550
|
*/
|
|
@@ -325,17 +574,14 @@ class AXListComponent extends MXSelectionValueComponent {
|
|
|
325
574
|
this.viewport.scrollToIndex(index);
|
|
326
575
|
}
|
|
327
576
|
/**
|
|
328
|
-
* Sets focus to the
|
|
577
|
+
* Sets focus to the selected list item (or the first item). Scrolls it into view first so
|
|
578
|
+
* virtualized rows are mounted, and uses preventScroll so the browser does not jump away.
|
|
329
579
|
*/
|
|
330
580
|
focus() {
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
if (focusable) {
|
|
334
|
-
focusable.focus();
|
|
335
|
-
}
|
|
336
|
-
else {
|
|
337
|
-
this.postponeFocus = true;
|
|
581
|
+
if (!isPlatformBrowser(this.platformID)) {
|
|
582
|
+
return;
|
|
338
583
|
}
|
|
584
|
+
this.revealSelected({ focus: true });
|
|
339
585
|
}
|
|
340
586
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
341
587
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXListComponent, isStandalone: true, selector: "ax-list", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: false, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: false, isRequired: false, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: false, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: false, isRequired: false, transformFunction: null }, textTemplate: { classPropertyName: "textTemplate", publicName: "textTemplate", isSignal: false, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: false, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: false, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: false, isRequired: false, transformFunction: null }, isItemTruncated: { classPropertyName: "isItemTruncated", publicName: "isItemTruncated", isSignal: true, isRequired: false, transformFunction: null }, showItemTooltip: { classPropertyName: "showItemTooltip", publicName: "showItemTooltip", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: false, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: false, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: false, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: false, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: false, isRequired: false, transformFunction: null }, checkbox: { classPropertyName: "checkbox", publicName: "checkbox", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { onValueChanged: "onValueChanged", disabledChange: "disabledChange", readonlyChange: "readonlyChange", onBlur: "onBlur", onFocus: "onFocus", onItemClick: "onItemClick", onItemSelected: "onItemSelected", onScrolledIndexChanged: "onScrolledIndexChanged" }, host: { listeners: { "keydown": "_handleKeydown($event)" } }, providers: [
|
|
@@ -354,7 +600,7 @@ class AXListComponent extends MXSelectionValueComponent {
|
|
|
354
600
|
},
|
|
355
601
|
deps: [[new Optional(), new SkipSelf(), AX_SELECTION_DATA_TOKEN]],
|
|
356
602
|
},
|
|
357
|
-
], viewQueries: [{ propertyName: "tooltipRef", predicate: AXTooltipDirective, descendants: true, isSignal: true }, { propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"list-container\" cdkVirtualScrollingElement [class.ax-height-auto]=\"showEmptyTemplate()\">\n <ng-content select=\"ax-header\"></ng-content>\n <cdk-virtual-scroll-viewport\n [itemSize]=\"cdkItemSize()\"\n [style.--ax-comp-list-item-height]=\"itemHeightCss()\"\n (scrolledIndexChange)=\"_handleOnscrolledIndexChange($event)\"\n [class.ax-truncated-container]=\"isItemTruncated()\"\n >\n <ul>\n <!-- Item Template -->\n <ng-container *cdkVirtualFor=\"let item of listDataSource; let i = index; trackBy: trackByIdx\">\n @if (item !== null && item !== undefined) {\n <li\n [class.ax-state-selected]=\"isItemSelected(item)\"\n class=\"list-item\"\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\n [attr.tabindex]=\"i\"\n (click)=\"_handleOnItemClick($event, item)\"\n [attr.data-id]=\"getValue(item)\"\n >\n <!-- Custom Item Template -->\n @if (itemTemplate) {\n <ng-container [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: { data: item } }\">\n </ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"defaultItemTpl\"></ng-container>\n }\n <!-- Default Item Template -->\n <ng-template #defaultItemTpl>\n @if (item !== null && item !== undefined) {\n <div class=\"ax-label-container\">\n @if (multiple && checkbox) {\n <input\n class=\"ax-checkbox\"\n type=\"checkbox\"\n [checked]=\"isItemSelected(item)\"\n [disabled]=\"isItemDisabled(item)\"\n tabindex=\"0\"\n />\n }\n\n <span\n [class.ax-checkbox-label]=\"multiple && checkbox\"\n [class.ax-truncated]=\"isItemTruncated()\"\n [axTooltip]=\"getDisplayText(item)\"\n [axTooltipDisabled]=\"!showItemTooltip()\"\n >\n {{ getDisplayText(item) | translate | async }}\n </span>\n </div>\n <!-- @if (isItemSelected(item)) {\n <i class=\"ax-icon ax-icon-check ax-selected-icon\"></i>\n } -->\n } @else {\n <ng-container [ngTemplateOutlet]=\"loadingTpl\"> </ng-container>\n }\n </ng-template>\n </li>\n } @else {\n <ng-container [ngTemplateOutlet]=\"loadingTpl\"> </ng-container>\n }\n </ng-container>\n </ul>\n </cdk-virtual-scroll-viewport>\n <ng-content select=\"ax-footer\"></ng-content>\n</div>\n\n<!-- Loading Template -->\n<ng-template #loadingTpl>\n <!-- Custom Loading Template -->\n @if (loadingTemplate) {\n <ng-container [ngTemplateOutlet]=\"loadingTemplate\"> </ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"defaultLoadingTpl\"> </ng-container>\n }\n <!-- Default Loading Template -->\n <ng-template #defaultLoadingTpl>\n <li>{{ '@acorex:common.status.loading' | translate | async }}</li>\n </ng-template>\n</ng-template>\n<!-- Empty Template -->\n@if (showEmptyTemplate()) {\n <div class=\"empty-container\">\n <ng-container [ngTemplateOutlet]=\"emptyTemplate\"></ng-container>\n </div>\n}\n", styles: ["@layer properties;@layer components{ax-list{display:block;width:100%;height:100%;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5)}ax-list .list-container{display:flex;height:100%;flex-direction:column}ax-list .list-container.ax-height-auto{height:auto}ax-list ax-footer,ax-list ax-header{background-color:rgba(var(--ax-sys-color-lighter-surface))}ax-list .empty-container{display:flex;height:calc(var(--spacing, .25rem) * 10);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3)}ax-list .cdk-virtual-scroll-viewport{height:100%;min-height:calc(var(--spacing, .25rem) * 0);width:100%;flex:1 1 auto}ax-list .cdk-virtual-scroll-viewport.ax-truncated-container .cdk-virtual-scroll-content-wrapper{width:100%;min-width:unset}ax-list .cdk-virtual-scroll-viewport ul li{position:relative;box-sizing:border-box;display:flex!important;cursor:pointer;align-items:center;justify-content:space-between;overflow:hidden;padding-inline-start:calc(var(--spacing, .25rem) * 3);padding-inline-end:calc(var(--spacing, .25rem) * 4);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);-webkit-user-select:none;user-select:none;height:var(--ax-comp-list-item-height);min-height:var(--ax-comp-list-item-height)
|
|
603
|
+
], viewQueries: [{ propertyName: "tooltipRef", predicate: AXTooltipDirective, descendants: true, isSignal: true }, { propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"list-container\" cdkVirtualScrollingElement [class.ax-height-auto]=\"showEmptyTemplate()\">\n <ng-content select=\"ax-header\"></ng-content>\n <cdk-virtual-scroll-viewport\n [itemSize]=\"cdkItemSize()\"\n [style.--ax-comp-list-item-height]=\"itemHeightCss()\"\n (scrolledIndexChange)=\"_handleOnscrolledIndexChange($event)\"\n [class.ax-truncated-container]=\"isItemTruncated()\"\n >\n <ul>\n <!-- Item Template -->\n <ng-container *cdkVirtualFor=\"let item of listDataSource; let i = index; trackBy: trackByIdx\">\n @if (item !== null && item !== undefined) {\n <li\n [class.ax-state-selected]=\"isItemSelected(item)\"\n class=\"list-item\"\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\n [attr.tabindex]=\"i\"\n (click)=\"_handleOnItemClick($event, item)\"\n [attr.data-id]=\"getValue(item)\"\n >\n <!-- Custom Item Template -->\n @if (itemTemplate) {\n <ng-container [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: { data: item } }\">\n </ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"defaultItemTpl\"></ng-container>\n }\n <!-- Default Item Template -->\n <ng-template #defaultItemTpl>\n @if (item !== null && item !== undefined) {\n <div class=\"ax-label-container\">\n @if (multiple && checkbox) {\n <input\n class=\"ax-checkbox\"\n type=\"checkbox\"\n [checked]=\"isItemSelected(item)\"\n [disabled]=\"isItemDisabled(item)\"\n tabindex=\"0\"\n />\n }\n\n <span\n [class.ax-checkbox-label]=\"multiple && checkbox\"\n [class.ax-truncated]=\"isItemTruncated()\"\n [axTooltip]=\"getDisplayText(item)\"\n [axTooltipDisabled]=\"!showItemTooltip()\"\n >\n {{ getDisplayText(item) | translate | async }}\n </span>\n </div>\n <!-- @if (isItemSelected(item)) {\n <i class=\"ax-icon ax-icon-check ax-selected-icon\"></i>\n } -->\n } @else {\n <ng-container [ngTemplateOutlet]=\"loadingTpl\"> </ng-container>\n }\n </ng-template>\n </li>\n } @else {\n <ng-container [ngTemplateOutlet]=\"loadingTpl\"> </ng-container>\n }\n </ng-container>\n </ul>\n </cdk-virtual-scroll-viewport>\n <ng-content select=\"ax-footer\"></ng-content>\n</div>\n\n<!-- Loading Template -->\n<ng-template #loadingTpl>\n <!-- Custom Loading Template -->\n @if (loadingTemplate) {\n <ng-container [ngTemplateOutlet]=\"loadingTemplate\"> </ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"defaultLoadingTpl\"> </ng-container>\n }\n <!-- Default Loading Template -->\n <ng-template #defaultLoadingTpl>\n <li>{{ '@acorex:common.status.loading' | translate | async }}</li>\n </ng-template>\n</ng-template>\n<!-- Empty Template -->\n@if (showEmptyTemplate()) {\n <div class=\"empty-container\">\n <ng-container [ngTemplateOutlet]=\"emptyTemplate\"></ng-container>\n </div>\n}\n", styles: ["@layer properties;@layer components{ax-list{display:block;width:100%;height:100%;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5)}ax-list .list-container{display:flex;height:100%;min-height:calc(var(--spacing, .25rem) * 0);flex-direction:column}ax-list .list-container.ax-height-auto{height:auto}ax-list ax-footer,ax-list ax-header{background-color:rgba(var(--ax-sys-color-lighter-surface))}ax-list .empty-container{display:flex;height:calc(var(--spacing, .25rem) * 10);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3)}ax-list .cdk-virtual-scroll-viewport{height:100%;min-height:calc(var(--spacing, .25rem) * 0);width:100%;flex:1 1 auto}ax-list .cdk-virtual-scroll-viewport.ax-truncated-container .cdk-virtual-scroll-content-wrapper{width:100%;min-width:unset}ax-list .cdk-virtual-scroll-viewport ul li{position:relative;box-sizing:border-box;display:flex!important;cursor:pointer;align-items:center;justify-content:space-between;overflow:hidden;padding-inline-start:calc(var(--spacing, .25rem) * 3);padding-inline-end:calc(var(--spacing, .25rem) * 4);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);-webkit-user-select:none;user-select:none;height:var(--ax-comp-list-item-height, 2.5rem);min-height:var(--ax-comp-list-item-height, 2.5rem)}ax-list .cdk-virtual-scroll-viewport ul li:hover{background-color:rgba(var(--ax-sys-color-surface))}ax-list .cdk-virtual-scroll-viewport ul li:focus,ax-list .cdk-virtual-scroll-viewport ul li:focus-within,ax-list .cdk-virtual-scroll-viewport ul li:focus-visible{outline-width:var(--ax-comp-list-item-focus-outline-width, 2px);outline-offset:var(--ax-comp-list-item-focus-outline-offset, -4px);outline-color:var(--color-primary)}ax-list .cdk-virtual-scroll-viewport ul li .ax-label-container{display:flex;width:100%;align-items:center}ax-list .cdk-virtual-scroll-viewport ul li .ax-checkbox-label{margin-inline-start:calc(var(--spacing, .25rem) * 2)}ax-list .cdk-virtual-scroll-viewport ul li.ax-state-selected{background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color: color-mix(in lab,red,red)){ax-list .cdk-virtual-scroll-viewport ul li.ax-state-selected{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 20%,transparent)}}ax-list .cdk-virtual-scroll-viewport ul li.ax-state-disabled{cursor:not-allowed;opacity:50%}ax-list .cdk-virtual-scroll-viewport ul li .ax-truncated{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@property --tw-leading{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: CdkVirtualScrollableElement, selector: "[cdkVirtualScrollingElement]" }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "directive", type: i1.AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
358
604
|
}
|
|
359
605
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXListComponent, decorators: [{
|
|
360
606
|
type: Component,
|
|
@@ -395,7 +641,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
395
641
|
AXTranslatorPipe,
|
|
396
642
|
AXTooltipModule,
|
|
397
643
|
AXTooltipDirective,
|
|
398
|
-
], template: "<div class=\"list-container\" cdkVirtualScrollingElement [class.ax-height-auto]=\"showEmptyTemplate()\">\n <ng-content select=\"ax-header\"></ng-content>\n <cdk-virtual-scroll-viewport\n [itemSize]=\"cdkItemSize()\"\n [style.--ax-comp-list-item-height]=\"itemHeightCss()\"\n (scrolledIndexChange)=\"_handleOnscrolledIndexChange($event)\"\n [class.ax-truncated-container]=\"isItemTruncated()\"\n >\n <ul>\n <!-- Item Template -->\n <ng-container *cdkVirtualFor=\"let item of listDataSource; let i = index; trackBy: trackByIdx\">\n @if (item !== null && item !== undefined) {\n <li\n [class.ax-state-selected]=\"isItemSelected(item)\"\n class=\"list-item\"\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\n [attr.tabindex]=\"i\"\n (click)=\"_handleOnItemClick($event, item)\"\n [attr.data-id]=\"getValue(item)\"\n >\n <!-- Custom Item Template -->\n @if (itemTemplate) {\n <ng-container [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: { data: item } }\">\n </ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"defaultItemTpl\"></ng-container>\n }\n <!-- Default Item Template -->\n <ng-template #defaultItemTpl>\n @if (item !== null && item !== undefined) {\n <div class=\"ax-label-container\">\n @if (multiple && checkbox) {\n <input\n class=\"ax-checkbox\"\n type=\"checkbox\"\n [checked]=\"isItemSelected(item)\"\n [disabled]=\"isItemDisabled(item)\"\n tabindex=\"0\"\n />\n }\n\n <span\n [class.ax-checkbox-label]=\"multiple && checkbox\"\n [class.ax-truncated]=\"isItemTruncated()\"\n [axTooltip]=\"getDisplayText(item)\"\n [axTooltipDisabled]=\"!showItemTooltip()\"\n >\n {{ getDisplayText(item) | translate | async }}\n </span>\n </div>\n <!-- @if (isItemSelected(item)) {\n <i class=\"ax-icon ax-icon-check ax-selected-icon\"></i>\n } -->\n } @else {\n <ng-container [ngTemplateOutlet]=\"loadingTpl\"> </ng-container>\n }\n </ng-template>\n </li>\n } @else {\n <ng-container [ngTemplateOutlet]=\"loadingTpl\"> </ng-container>\n }\n </ng-container>\n </ul>\n </cdk-virtual-scroll-viewport>\n <ng-content select=\"ax-footer\"></ng-content>\n</div>\n\n<!-- Loading Template -->\n<ng-template #loadingTpl>\n <!-- Custom Loading Template -->\n @if (loadingTemplate) {\n <ng-container [ngTemplateOutlet]=\"loadingTemplate\"> </ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"defaultLoadingTpl\"> </ng-container>\n }\n <!-- Default Loading Template -->\n <ng-template #defaultLoadingTpl>\n <li>{{ '@acorex:common.status.loading' | translate | async }}</li>\n </ng-template>\n</ng-template>\n<!-- Empty Template -->\n@if (showEmptyTemplate()) {\n <div class=\"empty-container\">\n <ng-container [ngTemplateOutlet]=\"emptyTemplate\"></ng-container>\n </div>\n}\n", styles: ["@layer properties;@layer components{ax-list{display:block;width:100%;height:100%;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5)}ax-list .list-container{display:flex;height:100%;flex-direction:column}ax-list .list-container.ax-height-auto{height:auto}ax-list ax-footer,ax-list ax-header{background-color:rgba(var(--ax-sys-color-lighter-surface))}ax-list .empty-container{display:flex;height:calc(var(--spacing, .25rem) * 10);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3)}ax-list .cdk-virtual-scroll-viewport{height:100%;min-height:calc(var(--spacing, .25rem) * 0);width:100%;flex:1 1 auto}ax-list .cdk-virtual-scroll-viewport.ax-truncated-container .cdk-virtual-scroll-content-wrapper{width:100%;min-width:unset}ax-list .cdk-virtual-scroll-viewport ul li{position:relative;box-sizing:border-box;display:flex!important;cursor:pointer;align-items:center;justify-content:space-between;overflow:hidden;padding-inline-start:calc(var(--spacing, .25rem) * 3);padding-inline-end:calc(var(--spacing, .25rem) * 4);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);-webkit-user-select:none;user-select:none;height:var(--ax-comp-list-item-height);min-height:var(--ax-comp-list-item-height)
|
|
644
|
+
], template: "<div class=\"list-container\" cdkVirtualScrollingElement [class.ax-height-auto]=\"showEmptyTemplate()\">\n <ng-content select=\"ax-header\"></ng-content>\n <cdk-virtual-scroll-viewport\n [itemSize]=\"cdkItemSize()\"\n [style.--ax-comp-list-item-height]=\"itemHeightCss()\"\n (scrolledIndexChange)=\"_handleOnscrolledIndexChange($event)\"\n [class.ax-truncated-container]=\"isItemTruncated()\"\n >\n <ul>\n <!-- Item Template -->\n <ng-container *cdkVirtualFor=\"let item of listDataSource; let i = index; trackBy: trackByIdx\">\n @if (item !== null && item !== undefined) {\n <li\n [class.ax-state-selected]=\"isItemSelected(item)\"\n class=\"list-item\"\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\n [attr.tabindex]=\"i\"\n (click)=\"_handleOnItemClick($event, item)\"\n [attr.data-id]=\"getValue(item)\"\n >\n <!-- Custom Item Template -->\n @if (itemTemplate) {\n <ng-container [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: { data: item } }\">\n </ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"defaultItemTpl\"></ng-container>\n }\n <!-- Default Item Template -->\n <ng-template #defaultItemTpl>\n @if (item !== null && item !== undefined) {\n <div class=\"ax-label-container\">\n @if (multiple && checkbox) {\n <input\n class=\"ax-checkbox\"\n type=\"checkbox\"\n [checked]=\"isItemSelected(item)\"\n [disabled]=\"isItemDisabled(item)\"\n tabindex=\"0\"\n />\n }\n\n <span\n [class.ax-checkbox-label]=\"multiple && checkbox\"\n [class.ax-truncated]=\"isItemTruncated()\"\n [axTooltip]=\"getDisplayText(item)\"\n [axTooltipDisabled]=\"!showItemTooltip()\"\n >\n {{ getDisplayText(item) | translate | async }}\n </span>\n </div>\n <!-- @if (isItemSelected(item)) {\n <i class=\"ax-icon ax-icon-check ax-selected-icon\"></i>\n } -->\n } @else {\n <ng-container [ngTemplateOutlet]=\"loadingTpl\"> </ng-container>\n }\n </ng-template>\n </li>\n } @else {\n <ng-container [ngTemplateOutlet]=\"loadingTpl\"> </ng-container>\n }\n </ng-container>\n </ul>\n </cdk-virtual-scroll-viewport>\n <ng-content select=\"ax-footer\"></ng-content>\n</div>\n\n<!-- Loading Template -->\n<ng-template #loadingTpl>\n <!-- Custom Loading Template -->\n @if (loadingTemplate) {\n <ng-container [ngTemplateOutlet]=\"loadingTemplate\"> </ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"defaultLoadingTpl\"> </ng-container>\n }\n <!-- Default Loading Template -->\n <ng-template #defaultLoadingTpl>\n <li>{{ '@acorex:common.status.loading' | translate | async }}</li>\n </ng-template>\n</ng-template>\n<!-- Empty Template -->\n@if (showEmptyTemplate()) {\n <div class=\"empty-container\">\n <ng-container [ngTemplateOutlet]=\"emptyTemplate\"></ng-container>\n </div>\n}\n", styles: ["@layer properties;@layer components{ax-list{display:block;width:100%;height:100%;font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5)}ax-list .list-container{display:flex;height:100%;min-height:calc(var(--spacing, .25rem) * 0);flex-direction:column}ax-list .list-container.ax-height-auto{height:auto}ax-list ax-footer,ax-list ax-header{background-color:rgba(var(--ax-sys-color-lighter-surface))}ax-list .empty-container{display:flex;height:calc(var(--spacing, .25rem) * 10);width:100%;align-items:center;justify-content:center;padding-inline:calc(var(--spacing, .25rem) * 3)}ax-list .cdk-virtual-scroll-viewport{height:100%;min-height:calc(var(--spacing, .25rem) * 0);width:100%;flex:1 1 auto}ax-list .cdk-virtual-scroll-viewport.ax-truncated-container .cdk-virtual-scroll-content-wrapper{width:100%;min-width:unset}ax-list .cdk-virtual-scroll-viewport ul li{position:relative;box-sizing:border-box;display:flex!important;cursor:pointer;align-items:center;justify-content:space-between;overflow:hidden;padding-inline-start:calc(var(--spacing, .25rem) * 3);padding-inline-end:calc(var(--spacing, .25rem) * 4);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);-webkit-user-select:none;user-select:none;height:var(--ax-comp-list-item-height, 2.5rem);min-height:var(--ax-comp-list-item-height, 2.5rem)}ax-list .cdk-virtual-scroll-viewport ul li:hover{background-color:rgba(var(--ax-sys-color-surface))}ax-list .cdk-virtual-scroll-viewport ul li:focus,ax-list .cdk-virtual-scroll-viewport ul li:focus-within,ax-list .cdk-virtual-scroll-viewport ul li:focus-visible{outline-width:var(--ax-comp-list-item-focus-outline-width, 2px);outline-offset:var(--ax-comp-list-item-focus-outline-offset, -4px);outline-color:var(--color-primary)}ax-list .cdk-virtual-scroll-viewport ul li .ax-label-container{display:flex;width:100%;align-items:center}ax-list .cdk-virtual-scroll-viewport ul li .ax-checkbox-label{margin-inline-start:calc(var(--spacing, .25rem) * 2)}ax-list .cdk-virtual-scroll-viewport ul li.ax-state-selected{background-color:rgba(var(--ax-sys-color-primary-surface))}@supports (color: color-mix(in lab,red,red)){ax-list .cdk-virtual-scroll-viewport ul li.ax-state-selected{background-color:color-mix(in oklab,rgba(var(--ax-sys-color-primary-surface)) 20%,transparent)}}ax-list .cdk-virtual-scroll-viewport ul li.ax-state-disabled{cursor:not-allowed;opacity:50%}ax-list .cdk-virtual-scroll-viewport ul li .ax-truncated{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@property --tw-leading{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
|
|
399
645
|
}], propDecorators: { tooltipRef: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => AXTooltipDirective), { isSignal: true }] }], isItemTruncated: [{ type: i0.Input, args: [{ isSignal: true, alias: "isItemTruncated", required: false }] }], showItemTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "showItemTooltip", required: false }] }], dataSource: [{
|
|
400
646
|
type: Input
|
|
401
647
|
}], itemHeight: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-components-list.mjs","sources":["../../../../packages/components/list/src/lib/list.component.ts","../../../../packages/components/list/src/lib/list.component.html","../../../../packages/components/list/src/lib/list.module.ts","../../../../packages/components/list/src/acorex-components-list.ts"],"sourcesContent":["import {\n AXComponent,\n AXDataSource,\n AXEvent,\n AXFocusableComponent,\n AXListDataSource,\n AXValuableComponent,\n AX_SELECTION_DATA_TOKEN,\n MXSelectionBridgeService,\n MXSelectionValueComponent,\n convertArrayToDataSource,\n} from '@acorex/cdk/common';\nimport { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport {\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualScrollViewport,\n CdkVirtualScrollableElement,\n} from '@angular/cdk/scrolling';\nimport { AsyncPipe, NgTemplateOutlet, isPlatformBrowser } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Optional,\n Output,\n SkipSelf,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n WritableSignal,\n computed,\n forwardRef,\n input,\n signal,\n viewChildren,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nexport interface AXListScrollIndexChanged extends AXEvent {\n index: number;\n}\n\n/**\n * provides a list control with various input options and events for user interaction.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-list',\n templateUrl: './list.component.html',\n styleUrls: ['./list.component.css'],\n\n encapsulation: ViewEncapsulation.None,\n inputs: [\n 'id',\n 'name',\n 'disabled',\n 'readonly',\n 'valueField',\n 'textField',\n 'textTemplate',\n 'disabledField',\n 'multiple',\n 'selectionMode',\n ],\n outputs: ['onValueChanged', 'disabledChange', 'readonlyChange', 'onBlur', 'onFocus', 'onItemClick', 'onItemSelected'],\n providers: [\n { provide: AXComponent, useExisting: AXListComponent },\n { provide: AXFocusableComponent, useExisting: AXListComponent },\n { provide: AXValuableComponent, useExisting: AXListComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXListComponent),\n multi: true,\n },\n {\n provide: AX_SELECTION_DATA_TOKEN,\n useFactory: (existingService: MXSelectionBridgeService) => {\n return existingService || new MXSelectionBridgeService();\n },\n deps: [[new Optional(), new SkipSelf(), AX_SELECTION_DATA_TOKEN]],\n },\n ],\n imports: [\n CdkVirtualScrollableElement,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n NgTemplateOutlet,\n AsyncPipe,\n AXTranslatorPipe,\n AXTooltipModule,\n AXTooltipDirective,\n ],\n})\nexport class AXListComponent extends MXSelectionValueComponent implements OnInit {\n private tooltipRef = viewChildren(AXTooltipDirective);\n\n /**\n * Determines if an item is truncated.\n *\n * @defaultValue true\n */\n isItemTruncated = input(true);\n\n /**\n * Determines if a tooltip is shown for an item.\n *\n * @defaultValue false\n */\n showItemTooltip = input(false);\n\n /** @ignore */\n private _dataSource: AXDataSource<unknown> = convertArrayToDataSource([]);\n\n /** @ignore */\n private _isInitialized = false;\n\n /** @ignore */\n private _onChangedSub?: Subscription;\n\n /** @ignore */\n private _onLoadingChangedSub?: Subscription;\n\n /**\n * Defines the data source for the list.\n *\n * @defaultValue convertArrayToDataSource([])\n */\n @Input()\n public set dataSource(v: AXDataSource<unknown>) {\n if (!v || v === this._dataSource) {\n return;\n }\n this._dataSource = v;\n if (this._isInitialized) {\n this._setupListDataSource();\n }\n }\n\n public get dataSource(): AXDataSource<unknown> {\n return this._dataSource;\n }\n\n /**\n * @ignore\n */\n itemHeightSignal: WritableSignal<number | 'auto'> = signal(40);\n\n /**\n * Fixed pixel size for CDK virtual scroll. Falls back to 40 when `itemHeight` is `'auto'`.\n * @ignore\n */\n protected cdkItemSize = computed(() => {\n const height = this.itemHeightSignal();\n return typeof height === 'number' ? height : 40;\n });\n\n /**\n * CSS value applied to `--ax-comp-list-item-height` so rendered rows match the virtual slot.\n * @ignore\n */\n protected itemHeightCss = computed(() => `${this.cdkItemSize()}px`);\n\n /**\n * Sets the height of each item in the list.\n */\n @Input()\n public set itemHeight(v: number | 'auto') {\n this.itemHeightSignal.set(v);\n }\n\n /**\n * Template for rendering individual items in the list.\n */\n @Input()\n itemTemplate: TemplateRef<unknown>;\n\n /**\n * Template to display when the list is empty.\n */\n @Input()\n emptyTemplate: TemplateRef<unknown>;\n\n /**\n * Template to show while the list is loading.\n */\n @Input()\n loadingTemplate: TemplateRef<unknown>;\n\n /**\n * Emitted when the index of the scrolled item changes.\n *\n * @event\n */\n @Output()\n onScrolledIndexChanged: EventEmitter<AXListScrollIndexChanged> = new EventEmitter<AXListScrollIndexChanged>();\n\n /**\n * Specifies whether the checkbox is enabled.\n *\n * @defaultValue true\n */\n @Input()\n checkbox = true;\n\n /**\n * @ignore\n */\n protected listDataSource: AXListDataSource<unknown>;\n\n /**\n * @ignore\n */\n protected isLoading = signal(true);\n\n /**\n * @ignore\n */\n protected hasItems = false;\n\n /**\n * @ignore\n */\n private lastIndex = 0;\n\n /**\n * @ignore\n */\n private postponeFocus = false;\n\n /**\n * @ignore\n */\n @ViewChild(CdkVirtualScrollViewport)\n private viewport: CdkVirtualScrollViewport;\n\n trackByIdx(i) {\n return i;\n }\n\n /**\n * @ignore\n */\n override ngOnInit() {\n super.ngOnInit();\n this._setupListDataSource();\n this._isInitialized = true;\n }\n\n /**\n * @ignore\n */\n protected override ngOnDestroy(): void {\n this._onChangedSub?.unsubscribe();\n this._onLoadingChangedSub?.unsubscribe();\n super.ngOnDestroy();\n }\n\n /**\n * (Re)creates the internal `AXListDataSource` wrapper used by `cdkVirtualFor`\n * and (re)subscribes to the underlying source's events. This is invoked\n * whenever the `dataSource` input changes so that the list properly reflects\n * the new source.\n * @ignore\n */\n private _setupListDataSource(): void {\n this._onChangedSub?.unsubscribe();\n this._onLoadingChangedSub?.unsubscribe();\n\n this.listDataSource = new AXListDataSource<unknown>({\n source: this._dataSource,\n });\n\n // Only mirror the source's state if it has already produced data.\n // Otherwise keep `isLoading=true` so the empty template doesn't render,\n // which would add `.ax-height-auto` and collapse the container, starving\n // the virtual viewport of size — preventing `viewChange` from firing and\n // the data source's `load` callback from ever being invoked.\n const hasLoadedItems = this._dataSource.totalCount > 0;\n this.isLoading.set(hasLoadedItems ? this._dataSource.isLoading : true);\n this.hasItems = hasLoadedItems;\n\n this._onLoadingChangedSub = this.listDataSource.source.onLoadingChanged.subscribe((data) => {\n this.isLoading.set(data);\n });\n this._onChangedSub = this.listDataSource.source.onChanged.subscribe((data) => {\n this.hasItems = data.totalCount > 0;\n setTimeout(() => {\n this.render();\n }, 0);\n });\n }\n /**\n * @ignore\n */\n _handleOnItemClick(e: MouseEvent, item: any) {\n if (this.readonly || this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n if (this.isItemDisabled(item)) {\n return;\n }\n\n this.tooltipRef().forEach((item) => {\n item.close();\n });\n this.toggleSelect(item);\n this.onItemClick.emit({\n component: this,\n item,\n htmlElement: e.target as HTMLElement,\n isUserInteraction: true,\n nativeEvent: e,\n });\n }\n\n /**\n * @ignore\n */\n @HostListener('keydown', ['$event'])\n _handleKeydown(e: KeyboardEvent) {\n if ((e.code === 'ArrowDown' || e.code === 'ArrowUp') && this.hasItems) {\n this.focusItemByNav(e.key === 'ArrowDown' ? 1 : -1);\n e.preventDefault();\n }\n if ((e.code === 'Space' || e.code === 'Enter') && this.hasItems) {\n if (this.readonly || this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n if (isPlatformBrowser(this.platformID)) {\n const id = this.document.activeElement?.closest('li')?.dataset['id'];\n this.toggleSelect(id);\n }\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n /**\n * @ignore\n */\n private focusItemByNav(sign: -1 | 1): void {\n if (isPlatformBrowser(this.platformID)) {\n const list = this.getHostElement().querySelector('ul');\n const fn = (s) => list.querySelector<HTMLDivElement>(s);\n const itemDiv: HTMLElement = this.document.activeElement?.closest('li') || fn(`li.ax-state-selected`) || fn(`li`);\n const next = (sign == 1 ? itemDiv.nextElementSibling : itemDiv.previousElementSibling) as HTMLElement;\n if (next) {\n next.focus();\n }\n }\n }\n\n /**\n * @ignore\n */\n protected _handleOnscrolledIndexChange(e: number) {\n this.lastIndex = e;\n this.onScrolledIndexChanged.emit({\n component: this,\n index: this.lastIndex,\n isUserInteraction: true,\n });\n }\n\n /**\n * Retrieves an item from the data source based on the provided key.\n *\n * @param key The key used to identify the item.\n * @ignore\n */\n getItemByKey(key: unknown): Promise<unknown> | unknown {\n return this.dataSource.find(key);\n }\n\n /**\n * Renders the component by updating the viewport size, scrolling to the selected item, and optionally focusing the element.\n */\n public render() {\n if (!this.viewport) {\n return;\n }\n\n this.scrollTo();\n if (this.postponeFocus) {\n this.postponeFocus = false;\n this.focus();\n }\n }\n\n /**\n * Scrolls the viewport to the currently selected list item.\n */\n public scrollTo(): void {\n if (!this.viewport || !isPlatformBrowser(this.platformID)) {\n return;\n }\n\n this.viewport.checkViewportSize();\n\n requestAnimationFrame(() => {\n const index = this.resolveSelectedIndex();\n if (index >= 0) {\n this.lastIndex = index;\n this.viewport.scrollToIndex(index);\n }\n });\n }\n\n /**\n * Resolves the selected item index from values already loaded in the list source.\n * Only considers loaded entries so lazy sources are not scanned by a global index.\n * @ignore\n */\n private resolveSelectedIndex(): number {\n if (this.multiple || !this.listDataSource) {\n return -1;\n }\n\n const selectedValue = this.getSelectedKey();\n if (selectedValue == null) {\n return -1;\n }\n\n const items = this.listDataSource.source.cachedItems;\n\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n if (item != null && this.getValue(item) == selectedValue) {\n return index;\n }\n }\n\n return -1;\n }\n\n /**\n * @ignore\n */\n private getSelectedKey(): unknown {\n const item = this.selectedItems[0] ?? this.value;\n if (item == null) {\n return null;\n }\n\n return typeof item === 'object' ? this.getValue(item) : item;\n }\n\n /**\n * Refreshes the list by clearing the selection cache and reloading the data source.\n * @ignore\n */\n public refresh(clearSelection = true) {\n if (clearSelection) {\n this.clearSelectionCache();\n }\n this.listDataSource.refresh();\n }\n\n /**\n * Scrolls the viewport to the specified item index.\n * @param index The index of the item to scroll to.\n * @ignore\n */\n public scrollToIndex(index: number) {\n this.viewport.scrollToIndex(index);\n }\n /**\n * Sets focus to the first selectable list item. If no item is available, postpones focus.\n */\n override focus(): void {\n const list = this.getHostElement().querySelector('ul');\n const focusable =\n list.querySelector<HTMLElement>('li.ax-state-selected') ?? list.querySelector<HTMLElement>('li.list-item');\n if (focusable) {\n focusable.focus();\n } else {\n this.postponeFocus = true;\n }\n }\n\n /**\n * Determines whether to show the empty template based on the presence of items and loading state.\n * @ignore\n */\n showEmptyTemplate = computed(() => this.isLoading() === false && this.emptyTemplate && this.hasItems === false);\n}\n","<div class=\"list-container\" cdkVirtualScrollingElement [class.ax-height-auto]=\"showEmptyTemplate()\">\n <ng-content select=\"ax-header\"></ng-content>\n <cdk-virtual-scroll-viewport\n [itemSize]=\"cdkItemSize()\"\n [style.--ax-comp-list-item-height]=\"itemHeightCss()\"\n (scrolledIndexChange)=\"_handleOnscrolledIndexChange($event)\"\n [class.ax-truncated-container]=\"isItemTruncated()\"\n >\n <ul>\n <!-- Item Template -->\n <ng-container *cdkVirtualFor=\"let item of listDataSource; let i = index; trackBy: trackByIdx\">\n @if (item !== null && item !== undefined) {\n <li\n [class.ax-state-selected]=\"isItemSelected(item)\"\n class=\"list-item\"\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\n [attr.tabindex]=\"i\"\n (click)=\"_handleOnItemClick($event, item)\"\n [attr.data-id]=\"getValue(item)\"\n >\n <!-- Custom Item Template -->\n @if (itemTemplate) {\n <ng-container [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: { data: item } }\">\n </ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"defaultItemTpl\"></ng-container>\n }\n <!-- Default Item Template -->\n <ng-template #defaultItemTpl>\n @if (item !== null && item !== undefined) {\n <div class=\"ax-label-container\">\n @if (multiple && checkbox) {\n <input\n class=\"ax-checkbox\"\n type=\"checkbox\"\n [checked]=\"isItemSelected(item)\"\n [disabled]=\"isItemDisabled(item)\"\n tabindex=\"0\"\n />\n }\n\n <span\n [class.ax-checkbox-label]=\"multiple && checkbox\"\n [class.ax-truncated]=\"isItemTruncated()\"\n [axTooltip]=\"getDisplayText(item)\"\n [axTooltipDisabled]=\"!showItemTooltip()\"\n >\n {{ getDisplayText(item) | translate | async }}\n </span>\n </div>\n <!-- @if (isItemSelected(item)) {\n <i class=\"ax-icon ax-icon-check ax-selected-icon\"></i>\n } -->\n } @else {\n <ng-container [ngTemplateOutlet]=\"loadingTpl\"> </ng-container>\n }\n </ng-template>\n </li>\n } @else {\n <ng-container [ngTemplateOutlet]=\"loadingTpl\"> </ng-container>\n }\n </ng-container>\n </ul>\n </cdk-virtual-scroll-viewport>\n <ng-content select=\"ax-footer\"></ng-content>\n</div>\n\n<!-- Loading Template -->\n<ng-template #loadingTpl>\n <!-- Custom Loading Template -->\n @if (loadingTemplate) {\n <ng-container [ngTemplateOutlet]=\"loadingTemplate\"> </ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"defaultLoadingTpl\"> </ng-container>\n }\n <!-- Default Loading Template -->\n <ng-template #defaultLoadingTpl>\n <li>{{ '@acorex:common.status.loading' | translate | async }}</li>\n </ng-template>\n</ng-template>\n<!-- Empty Template -->\n@if (showEmptyTemplate()) {\n <div class=\"empty-container\">\n <ng-container [ngTemplateOutlet]=\"emptyTemplate\"></ng-container>\n </div>\n}\n","import { NgModule } from '@angular/core';\nimport { AXListComponent } from './list.component';\n\n@NgModule({\n imports: [AXListComponent],\n exports: [AXListComponent],\n})\nexport class AXListModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AA+CA;;;;AAIG;AAiDG,MAAO,eAAgB,SAAQ,yBAAyB,CAAA;AAhD9D,IAAA,WAAA,GAAA;;QAiDU,IAAA,CAAA,UAAU,GAAG,YAAY,CAAC,kBAAkB;uFAAC;AAErD;;;;AAIG;QACH,IAAA,CAAA,eAAe,GAAG,KAAK,CAAC,IAAI;4FAAC;AAE7B;;;;AAIG;QACH,IAAA,CAAA,eAAe,GAAG,KAAK,CAAC,KAAK;4FAAC;;AAGtB,QAAA,IAAA,CAAA,WAAW,GAA0B,wBAAwB,CAAC,EAAE,CAAC;;QAGjE,IAAA,CAAA,cAAc,GAAG,KAAK;AA4B9B;;AAEG;QACH,IAAA,CAAA,gBAAgB,GAAoC,MAAM,CAAC,EAAE;6FAAC;AAE9D;;;AAGG;AACO,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACpC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACtC,YAAA,OAAO,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,EAAE;QACjD,CAAC;wFAAC;AAEF;;;AAGG;QACO,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAA,EAAG,IAAI,CAAC,WAAW,EAAE,CAAA,EAAA,CAAI;0FAAC;AA4BnE;;;;AAIG;AAEH,QAAA,IAAA,CAAA,sBAAsB,GAA2C,IAAI,YAAY,EAA4B;AAE7G;;;;AAIG;QAEH,IAAA,CAAA,QAAQ,GAAG,IAAI;AAOf;;AAEG;QACO,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,IAAI;sFAAC;AAElC;;AAEG;QACO,IAAA,CAAA,QAAQ,GAAG,KAAK;AAE1B;;AAEG;QACK,IAAA,CAAA,SAAS,GAAG,CAAC;AAErB;;AAEG;QACK,IAAA,CAAA,aAAa,GAAG,KAAK;AAiQ7B;;;AAGG;QACH,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,KAAK,KAAK,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;8FAAC;AAChH,IAAA;AA/WC;;;;AAIG;IACH,IACW,UAAU,CAAC,CAAwB,EAAA;QAC5C,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE;YAChC;QACF;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,oBAAoB,EAAE;QAC7B;IACF;AAEA,IAAA,IAAW,UAAU,GAAA;QACnB,OAAO,IAAI,CAAC,WAAW;IACzB;AAsBA;;AAEG;IACH,IACW,UAAU,CAAC,CAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B;AAmEA,IAAA,UAAU,CAAC,CAAC,EAAA;AACV,QAAA,OAAO,CAAC;IACV;AAEA;;AAEG;IACM,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;IAC5B;AAEA;;AAEG;IACgB,WAAW,GAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE;AACjC,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;QACxC,KAAK,CAAC,WAAW,EAAE;IACrB;AAEA;;;;;;AAMG;IACK,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE;AACjC,QAAA,IAAI,CAAC,oBAAoB,EAAE,WAAW,EAAE;AAExC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,gBAAgB,CAAU;YAClD,MAAM,EAAE,IAAI,CAAC,WAAW;AACzB,SAAA,CAAC;;;;;;QAOF,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,CAAC;AACtD,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC;AACtE,QAAA,IAAI,CAAC,QAAQ,GAAG,cAAc;AAE9B,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACzF,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;YAC3E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC;YACnC,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,MAAM,EAAE;YACf,CAAC,EAAE,CAAC,CAAC;AACP,QAAA,CAAC,CAAC;IACJ;AACA;;AAEG;IACH,kBAAkB,CAAC,CAAa,EAAE,IAAS,EAAA;QACzC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClC,CAAC,CAAC,cAAc,EAAE;YAClB,CAAC,CAAC,eAAe,EAAE;YACnB;QACF;AACA,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAC7B;QACF;QAEA,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACjC,IAAI,CAAC,KAAK,EAAE;AACd,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,YAAA,SAAS,EAAE,IAAI;YACf,IAAI;YACJ,WAAW,EAAE,CAAC,CAAC,MAAqB;AACpC,YAAA,iBAAiB,EAAE,IAAI;AACvB,YAAA,WAAW,EAAE,CAAC;AACf,SAAA,CAAC;IACJ;AAEA;;AAEG;AAEH,IAAA,cAAc,CAAC,CAAgB,EAAA;AAC7B,QAAA,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,KAAK,IAAI,CAAC,QAAQ,EAAE;AACrE,YAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACnD,CAAC,CAAC,cAAc,EAAE;QACpB;AACA,QAAA,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,KAAK,IAAI,CAAC,QAAQ,EAAE;YAC/D,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAClC,CAAC,CAAC,cAAc,EAAE;gBAClB,CAAC,CAAC,eAAe,EAAE;gBACnB;YACF;AACA,YAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACtC,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC;AACpE,gBAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACvB;YACA,CAAC,CAAC,cAAc,EAAE;YAClB,CAAC,CAAC,eAAe,EAAE;QACrB;IACF;AAEA;;AAEG;AACK,IAAA,cAAc,CAAC,IAAY,EAAA;AACjC,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;AACtD,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa,CAAiB,CAAC,CAAC;YACvD,MAAM,OAAO,GAAgB,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA,oBAAA,CAAsB,CAAC,IAAI,EAAE,CAAC,CAAA,EAAA,CAAI,CAAC;AACjH,YAAA,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,OAAO,CAAC,kBAAkB,GAAG,OAAO,CAAC,sBAAsB,CAAgB;YACrG,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,KAAK,EAAE;YACd;QACF;IACF;AAEA;;AAEG;AACO,IAAA,4BAA4B,CAAC,CAAS,EAAA;AAC9C,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;AAC/B,YAAA,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,SAAS;AACrB,YAAA,iBAAiB,EAAE,IAAI;AACxB,SAAA,CAAC;IACJ;AAEA;;;;;AAKG;AACH,IAAA,YAAY,CAAC,GAAY,EAAA;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;IAClC;AAEA;;AAEG;IACI,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB;QACF;QAEA,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;YAC1B,IAAI,CAAC,KAAK,EAAE;QACd;IACF;AAEA;;AAEG;IACI,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACzD;QACF;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;QAEjC,qBAAqB,CAAC,MAAK;AACzB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACzC,YAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;YACpC;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;IACK,oBAAoB,GAAA;QAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACzC,OAAO,CAAC,CAAC;QACX;AAEA,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE;AAC3C,QAAA,IAAI,aAAa,IAAI,IAAI,EAAE;YACzB,OAAO,CAAC,CAAC;QACX;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW;AAEpD,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACjD,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,aAAa,EAAE;AACxD,gBAAA,OAAO,KAAK;YACd;QACF;QAEA,OAAO,CAAC,CAAC;IACX;AAEA;;AAEG;IACK,cAAc,GAAA;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK;AAChD,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI;IAC9D;AAEA;;;AAGG;IACI,OAAO,CAAC,cAAc,GAAG,IAAI,EAAA;QAClC,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,mBAAmB,EAAE;QAC5B;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;IAC/B;AAEA;;;;AAIG;AACI,IAAA,aAAa,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;IACpC;AACA;;AAEG;IACM,KAAK,GAAA;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC;AACtD,QAAA,MAAM,SAAS,GACb,IAAI,CAAC,aAAa,CAAc,sBAAsB,CAAC,IAAI,IAAI,CAAC,aAAa,CAAc,cAAc,CAAC;QAC5G,IAAI,SAAS,EAAE;YACb,SAAS,CAAC,KAAK,EAAE;QACnB;aAAO;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QAC3B;IACF;8GArYW,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,SAAA,EA7Bf;AACT,YAAA,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE;AACtD,YAAA,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,eAAe,EAAE;AAC/D,YAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAE;AAC9D,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,eAAe,CAAC;AAC9C,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,uBAAuB;AAChC,gBAAA,UAAU,EAAE,CAAC,eAAyC,KAAI;AACxD,oBAAA,OAAO,eAAe,IAAI,IAAI,wBAAwB,EAAE;gBAC1D,CAAC;AACD,gBAAA,IAAI,EAAE,CAAC,CAAC,IAAI,QAAQ,EAAE,EAAE,IAAI,QAAQ,EAAE,EAAE,uBAAuB,CAAC,CAAC;AAClE,aAAA;SACF,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAciC,kBAAkB,2FA0IzC,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/OrC,g6GAsFA,EAAA,MAAA,EAAA,CAAA,uhGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDGI,2BAA2B,yEAC3B,wBAAwB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,yBAAyB,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,eAAe,6LACf,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGhB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAFf,SAAS,yCACT,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAKP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAhD3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,aAAA,EAIJ,iBAAiB,CAAC,IAAI,EAAA,MAAA,EAC7B;wBACN,IAAI;wBACJ,MAAM;wBACN,UAAU;wBACV,UAAU;wBACV,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,eAAe;wBACf,UAAU;wBACV,eAAe;AAChB,qBAAA,EAAA,OAAA,EACQ,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAA,SAAA,EAC1G;AACT,wBAAA,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,iBAAiB,EAAE;AACtD,wBAAA,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,iBAAiB,EAAE;AAC/D,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,iBAAiB,EAAE;AAC9D,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,qBAAqB,CAAC;AAC9C,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,uBAAuB;AAChC,4BAAA,UAAU,EAAE,CAAC,eAAyC,KAAI;AACxD,gCAAA,OAAO,eAAe,IAAI,IAAI,wBAAwB,EAAE;4BAC1D,CAAC;AACD,4BAAA,IAAI,EAAE,CAAC,CAAC,IAAI,QAAQ,EAAE,EAAE,IAAI,QAAQ,EAAE,EAAE,uBAAuB,CAAC,CAAC;AAClE,yBAAA;qBACF,EAAA,OAAA,EACQ;wBACP,2BAA2B;wBAC3B,wBAAwB;wBACxB,yBAAyB;wBACzB,eAAe;wBACf,gBAAgB;wBAChB,SAAS;wBACT,gBAAgB;wBAChB,eAAe;wBACf,kBAAkB;AACnB,qBAAA,EAAA,QAAA,EAAA,g6GAAA,EAAA,MAAA,EAAA,CAAA,uhGAAA,CAAA,EAAA;+FAGiC,kBAAkB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA;sBAiCnD;;sBAsCA;;sBAQA;;sBAMA;;sBAMA;;sBAQA;;sBAQA;;sBA+BA,SAAS;uBAAC,wBAAwB;;sBAwFlC,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC;;;MEhUxB,YAAY,CAAA;8GAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAZ,YAAY,EAAA,OAAA,EAAA,CAHb,eAAe,CAAA,EAAA,OAAA,EAAA,CACf,eAAe,CAAA,EAAA,CAAA,CAAA;AAEd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,YAHb,eAAe,CAAA,EAAA,CAAA,CAAA;;2FAGd,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,eAAe,CAAC;oBAC1B,OAAO,EAAE,CAAC,eAAe,CAAC;AAC3B,iBAAA;;;ACND;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"acorex-components-list.mjs","sources":["../../../../packages/components/list/src/lib/list.component.ts","../../../../packages/components/list/src/lib/list.component.html","../../../../packages/components/list/src/lib/list.module.ts","../../../../packages/components/list/src/acorex-components-list.ts"],"sourcesContent":["import {\n AXComponent,\n AXDataSource,\n AXEvent,\n AXFocusableComponent,\n AXListDataSource,\n AXValuableComponent,\n AX_SELECTION_DATA_TOKEN,\n MXSelectionBridgeService,\n MXSelectionValueComponent,\n convertArrayToDataSource,\n} from '@acorex/cdk/common';\nimport { AXTooltipDirective, AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport {\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualScrollViewport,\n CdkVirtualScrollableElement,\n} from '@angular/cdk/scrolling';\nimport { AsyncPipe, NgTemplateOutlet, isPlatformBrowser } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Optional,\n Output,\n SkipSelf,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n WritableSignal,\n computed,\n forwardRef,\n input,\n signal,\n viewChildren,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nexport interface AXListScrollIndexChanged extends AXEvent {\n index: number;\n}\n\n/**\n * provides a list control with various input options and events for user interaction.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-list',\n templateUrl: './list.component.html',\n styleUrls: ['./list.component.css'],\n\n encapsulation: ViewEncapsulation.None,\n inputs: [\n 'id',\n 'name',\n 'disabled',\n 'readonly',\n 'valueField',\n 'textField',\n 'textTemplate',\n 'disabledField',\n 'multiple',\n 'selectionMode',\n ],\n outputs: ['onValueChanged', 'disabledChange', 'readonlyChange', 'onBlur', 'onFocus', 'onItemClick', 'onItemSelected'],\n providers: [\n { provide: AXComponent, useExisting: AXListComponent },\n { provide: AXFocusableComponent, useExisting: AXListComponent },\n { provide: AXValuableComponent, useExisting: AXListComponent },\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AXListComponent),\n multi: true,\n },\n {\n provide: AX_SELECTION_DATA_TOKEN,\n useFactory: (existingService: MXSelectionBridgeService) => {\n return existingService || new MXSelectionBridgeService();\n },\n deps: [[new Optional(), new SkipSelf(), AX_SELECTION_DATA_TOKEN]],\n },\n ],\n imports: [\n CdkVirtualScrollableElement,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n NgTemplateOutlet,\n AsyncPipe,\n AXTranslatorPipe,\n AXTooltipModule,\n AXTooltipDirective,\n ],\n})\nexport class AXListComponent extends MXSelectionValueComponent implements OnInit {\n private tooltipRef = viewChildren(AXTooltipDirective);\n\n /**\n * Determines if an item is truncated.\n *\n * @defaultValue true\n */\n isItemTruncated = input(true);\n\n /**\n * Determines if a tooltip is shown for an item.\n *\n * @defaultValue false\n */\n showItemTooltip = input(false);\n\n /** @ignore */\n private _dataSource: AXDataSource<unknown> = convertArrayToDataSource([]);\n\n /** @ignore */\n private _isInitialized = false;\n\n /** @ignore */\n private _onChangedSub?: Subscription;\n\n /** @ignore */\n private _onLoadingChangedSub?: Subscription;\n\n /**\n * Defines the data source for the list.\n *\n * @defaultValue convertArrayToDataSource([])\n */\n @Input()\n public set dataSource(v: AXDataSource<unknown>) {\n if (!v || v === this._dataSource) {\n return;\n }\n this._dataSource = v;\n if (this._isInitialized) {\n this._setupListDataSource();\n }\n }\n\n public get dataSource(): AXDataSource<unknown> {\n return this._dataSource;\n }\n\n /**\n * @ignore\n */\n itemHeightSignal: WritableSignal<number | 'auto'> = signal(40);\n\n /**\n * Fixed pixel size for CDK virtual scroll. Falls back to 40 when `itemHeight` is `'auto'`.\n * @ignore\n */\n protected cdkItemSize = computed(() => {\n const height = this.itemHeightSignal();\n return typeof height === 'number' ? height : 40;\n });\n\n /**\n * CSS value applied to `--ax-comp-list-item-height` so rendered rows match the virtual slot.\n * @ignore\n */\n protected itemHeightCss = computed(() => `${this.cdkItemSize()}px`);\n\n /**\n * Sets the height of each item in the list.\n */\n @Input()\n public set itemHeight(v: number | 'auto') {\n this.itemHeightSignal.set(v);\n }\n\n /**\n * Template for rendering individual items in the list.\n */\n @Input()\n itemTemplate: TemplateRef<unknown>;\n\n /**\n * Template to display when the list is empty.\n */\n @Input()\n emptyTemplate: TemplateRef<unknown>;\n\n /**\n * Template to show while the list is loading.\n */\n @Input()\n loadingTemplate: TemplateRef<unknown>;\n\n /**\n * Emitted when the index of the scrolled item changes.\n *\n * @event\n */\n @Output()\n onScrolledIndexChanged: EventEmitter<AXListScrollIndexChanged> = new EventEmitter<AXListScrollIndexChanged>();\n\n /**\n * Specifies whether the checkbox is enabled.\n *\n * @defaultValue true\n */\n @Input()\n checkbox = true;\n\n /**\n * @ignore\n */\n protected listDataSource: AXListDataSource<unknown>;\n\n /**\n * @ignore\n */\n protected isLoading = signal(true);\n\n /**\n * @ignore\n */\n protected hasItems = false;\n\n /**\n * @ignore\n */\n private lastIndex = 0;\n\n /**\n * @ignore\n */\n private postponeFocus = false;\n\n /**\n * When true, keep trying to scroll/focus the selected item until async data & layout are ready.\n * @ignore\n */\n private pendingRevealSelection = false;\n\n /**\n * When true, focus the selected row after a successful reveal.\n * @ignore\n */\n private pendingRevealFocus = false;\n\n /**\n * Cached index of the last known selected item (from click or a successful resolve).\n * Allows scrollToIndex before that page is loaded into the virtual cache.\n * @ignore\n */\n private knownSelectedIndex = -1;\n\n /** @ignore */\n private revealRetryHandle: ReturnType<typeof setTimeout> | null = null;\n\n /**\n * @ignore\n */\n @ViewChild(CdkVirtualScrollViewport)\n private viewport: CdkVirtualScrollViewport;\n\n trackByIdx(i) {\n return i;\n }\n\n /**\n * @ignore\n */\n override ngOnInit() {\n super.ngOnInit();\n this._setupListDataSource();\n this._isInitialized = true;\n }\n\n /**\n * @ignore\n */\n protected override ngOnDestroy(): void {\n this.cancelRevealSelected();\n this._onChangedSub?.unsubscribe();\n this._onLoadingChangedSub?.unsubscribe();\n super.ngOnDestroy();\n }\n\n /**\n * (Re)creates the internal `AXListDataSource` wrapper used by `cdkVirtualFor`\n * and (re)subscribes to the underlying source's events. This is invoked\n * whenever the `dataSource` input changes so that the list properly reflects\n * the new source.\n * @ignore\n */\n private _setupListDataSource(): void {\n this._onChangedSub?.unsubscribe();\n this._onLoadingChangedSub?.unsubscribe();\n\n this.listDataSource = new AXListDataSource<unknown>({\n source: this._dataSource,\n });\n\n // Only mirror the source's state if it has already produced data.\n // Otherwise keep `isLoading=true` so the empty template doesn't render,\n // which would add `.ax-height-auto` and collapse the container, starving\n // the virtual viewport of size — preventing `viewChange` from firing and\n // the data source's `load` callback from ever being invoked.\n const hasLoadedItems = this._dataSource.totalCount > 0;\n this.isLoading.set(hasLoadedItems ? this._dataSource.isLoading : true);\n this.hasItems = hasLoadedItems;\n\n this._onLoadingChangedSub = this.listDataSource.source.onLoadingChanged.subscribe((data) => {\n this.isLoading.set(data);\n if (!data && this.pendingRevealSelection) {\n setTimeout(() => this.tryRevealSelected(), 0);\n }\n });\n this._onChangedSub = this.listDataSource.source.onChanged.subscribe((data) => {\n this.hasItems = data.totalCount > 0;\n setTimeout(() => {\n this.render();\n if (this.pendingRevealSelection) {\n this.tryRevealSelected();\n }\n }, 0);\n });\n }\n /**\n * @ignore\n */\n _handleOnItemClick(e: MouseEvent, item: any) {\n if (this.readonly || this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n if (this.isItemDisabled(item)) {\n return;\n }\n\n this.tooltipRef().forEach((item) => {\n item.close();\n });\n this.rememberSelectedIndex(item);\n this.toggleSelect(item);\n this.onItemClick.emit({\n component: this,\n item,\n htmlElement: e.target as HTMLElement,\n isUserInteraction: true,\n nativeEvent: e,\n });\n }\n\n /**\n * @ignore\n */\n @HostListener('keydown', ['$event'])\n _handleKeydown(e: KeyboardEvent) {\n if ((e.code === 'ArrowDown' || e.code === 'ArrowUp') && this.hasItems) {\n this.focusItemByNav(e.key === 'ArrowDown' ? 1 : -1);\n e.preventDefault();\n }\n if ((e.code === 'Space' || e.code === 'Enter') && this.hasItems) {\n if (this.readonly || this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n if (isPlatformBrowser(this.platformID)) {\n const id = this.document.activeElement?.closest('li')?.dataset['id'];\n this.toggleSelect(id);\n }\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n /**\n * @ignore\n */\n private focusItemByNav(sign: -1 | 1): void {\n if (isPlatformBrowser(this.platformID)) {\n const list = this.getHostElement().querySelector('ul');\n const fn = (s) => list.querySelector<HTMLDivElement>(s);\n const itemDiv: HTMLElement = this.document.activeElement?.closest('li') || fn(`li.ax-state-selected`) || fn(`li`);\n const next = (sign == 1 ? itemDiv.nextElementSibling : itemDiv.previousElementSibling) as HTMLElement;\n if (next) {\n next.focus();\n }\n }\n }\n\n /**\n * @ignore\n */\n protected _handleOnscrolledIndexChange(e: number) {\n this.lastIndex = e;\n this.onScrolledIndexChanged.emit({\n component: this,\n index: this.lastIndex,\n isUserInteraction: true,\n });\n }\n\n /**\n * Retrieves an item from the data source based on the provided key.\n *\n * @param key The key used to identify the item.\n * @ignore\n */\n getItemByKey(key: unknown): Promise<unknown> | unknown {\n return this.dataSource.find(key);\n }\n\n /**\n * Renders the component by updating the viewport size, scrolling to the selected item, and optionally focusing the element.\n */\n public render() {\n if (!this.viewport) {\n return;\n }\n\n this.scrollTo();\n if (this.postponeFocus) {\n this.postponeFocus = false;\n this.focus();\n }\n }\n\n /**\n * Keeps trying to scroll (and optionally focus) the selected item until async list data\n * and dropdown layout are ready. Call when the parent dropdown opens.\n */\n public revealSelected(options: { focus?: boolean } = {}): void {\n if (options.focus) {\n this.pendingRevealFocus = true;\n }\n this.pendingRevealSelection = true;\n this.tryRevealSelected();\n }\n\n /**\n * Cancels an in-progress reveal (e.g. when the dropdown closes).\n */\n public cancelRevealSelected(): void {\n this.pendingRevealSelection = false;\n this.pendingRevealFocus = false;\n if (this.revealRetryHandle != null) {\n clearTimeout(this.revealRetryHandle);\n this.revealRetryHandle = null;\n }\n }\n\n /**\n * @ignore\n */\n private tryRevealSelected(attempt = 0): void {\n if (!this.pendingRevealSelection || !isPlatformBrowser(this.platformID)) {\n return;\n }\n\n if (this.revealRetryHandle != null) {\n clearTimeout(this.revealRetryHandle);\n this.revealRetryHandle = null;\n }\n\n if (!this.viewport) {\n this.scheduleRevealRetry(attempt);\n return;\n }\n\n this.viewport.checkViewportSize();\n const viewportSize = this.viewport.getViewportSize();\n const index = this.resolveSelectedIndex();\n\n if (index >= 0 && viewportSize > 0) {\n this.applyScrollToIndex(index);\n requestAnimationFrame(() => {\n this.ensureSelectedItemVisible();\n if (this.pendingRevealFocus) {\n this.focusSelectedItem();\n this.pendingRevealFocus = false;\n }\n this.pendingRevealSelection = false;\n });\n return;\n }\n\n // Data may still be in flight, or the selected row is on an unloaded page.\n // Keep retrying while the source is loading (hard-capped); otherwise allow a short layout race window.\n const maxAttempts = this.isLoading() ? 100 : 40;\n if (attempt < maxAttempts) {\n this.scheduleRevealRetry(attempt);\n return;\n }\n\n if (this.getSelectedKeys().length > 0 && this.listDataSource?.source.totalCount > 0) {\n void this.findAndRevealSelectedAcrossPages();\n return;\n }\n\n this.pendingRevealSelection = false;\n }\n\n /** @ignore */\n private scheduleRevealRetry(attempt: number): void {\n this.revealRetryHandle = setTimeout(() => this.tryRevealSelected(attempt + 1), 50);\n }\n\n /**\n * Loads pages until the selected key appears in cache, then scrolls to it.\n * @ignore\n */\n private async findAndRevealSelectedAcrossPages(): Promise<void> {\n if (!this.listDataSource || !this.pendingRevealSelection) {\n return;\n }\n\n const source = this.listDataSource.source;\n const pageSize = source.config.pageSize || 10;\n const totalPages = Math.max(1, Math.ceil((source.totalCount || 0) / pageSize));\n\n for (let page = 0; page < totalPages; page++) {\n if (!this.pendingRevealSelection) {\n return;\n }\n await this.ensurePageLoaded(page);\n const index = this.resolveSelectedIndexFromCache();\n if (index >= 0) {\n this.knownSelectedIndex = index;\n this.applyScrollToIndex(index);\n requestAnimationFrame(() => {\n this.ensureSelectedItemVisible();\n if (this.pendingRevealFocus) {\n this.focusSelectedItem();\n this.pendingRevealFocus = false;\n }\n this.pendingRevealSelection = false;\n });\n return;\n }\n }\n\n this.pendingRevealSelection = false;\n }\n\n /** @ignore */\n private ensurePageLoaded(page: number): Promise<void> {\n const source = this.listDataSource.source;\n const pageSize = source.config.pageSize || 10;\n const start = page * pageSize;\n const end = start + pageSize;\n const alreadyLoaded = source.cachedItems.slice(start, end).some((item) => item != null);\n if (alreadyLoaded) {\n return Promise.resolve();\n }\n\n return new Promise((resolve) => {\n const sub = source.onChanged.subscribe(() => {\n if (source.cachedItems.slice(start, end).some((item) => item != null)) {\n sub.unsubscribe();\n clearTimeout(timeoutId);\n resolve();\n }\n });\n const timeoutId = setTimeout(() => {\n sub.unsubscribe();\n resolve();\n }, 3000);\n source.setPage(page);\n });\n }\n\n /** @ignore */\n private applyScrollToIndex(index: number): void {\n if (!this.viewport) {\n return;\n }\n this.lastIndex = index;\n this.viewport.checkViewportSize();\n this.viewport.scrollToIndex(index);\n }\n\n /** @ignore */\n private focusSelectedItem(): void {\n const list = this.getHostElement().querySelector('ul');\n const focusable =\n list?.querySelector<HTMLElement>('li.ax-state-selected') ?? list?.querySelector<HTMLElement>('li.list-item');\n focusable?.focus({ preventScroll: true });\n }\n\n /** @ignore */\n private rememberSelectedIndex(item: unknown): void {\n if (!this.listDataSource || item == null) {\n return;\n }\n const key = this.getValue(item as any);\n const items = this.listDataSource.source.cachedItems;\n const index = items.findIndex((candidate) => candidate != null && this.getValue(candidate) == key);\n if (index >= 0) {\n this.knownSelectedIndex = index;\n }\n }\n\n /**\n * Scrolls the viewport to the currently selected list item.\n */\n public scrollTo(): void {\n if (!this.viewport || !isPlatformBrowser(this.platformID)) {\n return;\n }\n\n this.viewport.checkViewportSize();\n\n requestAnimationFrame(() => {\n this.viewport.checkViewportSize();\n const index = this.resolveSelectedIndex();\n if (index < 0) {\n return;\n }\n\n this.applyScrollToIndex(index);\n requestAnimationFrame(() => this.ensureSelectedItemVisible());\n });\n }\n\n /**\n * Scrolls the selected row into the visible viewport when it is cropped at the edge.\n * @ignore\n */\n private ensureSelectedItemVisible(): void {\n const selected = this.getHostElement().querySelector<HTMLElement>('li.ax-state-selected');\n if (!selected) {\n return;\n }\n\n const scrollParent =\n (this.viewport.elementRef.nativeElement as HTMLElement) ||\n (selected.closest('.cdk-virtual-scroll-viewport') as HTMLElement | null);\n if (!scrollParent) {\n return;\n }\n\n const selectedRect = selected.getBoundingClientRect();\n const parentRect = scrollParent.getBoundingClientRect();\n const isCropped = selectedRect.top < parentRect.top + 1 || selectedRect.bottom > parentRect.bottom - 1;\n\n if (isCropped) {\n selected.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n }\n\n /**\n * Resolves the selected item index, preferring a known index so virtual scroll can load that page.\n * @ignore\n */\n private resolveSelectedIndex(): number {\n const selectedKeys = this.getSelectedKeys();\n if (!selectedKeys.length || !this.listDataSource) {\n this.knownSelectedIndex = -1;\n return -1;\n }\n\n if (this.knownSelectedIndex >= 0 && this.knownSelectedIndex < (this.listDataSource.source.totalCount || 0)) {\n const knownItem = this.listDataSource.source.cachedItems[this.knownSelectedIndex];\n if (knownItem != null) {\n if (selectedKeys.some((key) => key == this.getValue(knownItem))) {\n return this.knownSelectedIndex;\n }\n // Value changed since this index was remembered.\n this.knownSelectedIndex = -1;\n } else if (this.pendingRevealSelection) {\n // Page not loaded yet — scroll there so CDK loads the range.\n return this.knownSelectedIndex;\n }\n }\n\n const index = this.resolveSelectedIndexFromCache();\n if (index >= 0) {\n this.knownSelectedIndex = index;\n }\n return index;\n }\n\n /**\n * Resolves the selected item index from values already loaded in the list source.\n * @ignore\n */\n private resolveSelectedIndexFromCache(): number {\n if (!this.listDataSource) {\n return -1;\n }\n\n const selectedKeys = this.getSelectedKeys();\n if (selectedKeys.length === 0) {\n return -1;\n }\n\n const items = this.listDataSource.source.cachedItems;\n\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n if (item == null) {\n continue;\n }\n const itemKey = this.getValue(item);\n if (selectedKeys.some((key) => key == itemKey)) {\n return index;\n }\n }\n\n return -1;\n }\n\n /**\n * @ignore\n */\n private getSelectedKeys(): unknown[] {\n if (this.multiple) {\n const items = this.selectedItems?.length ? this.selectedItems : Array.isArray(this.value) ? this.value : [];\n return items\n .map((item) => (item != null && typeof item === 'object' ? this.getValue(item) : item))\n .filter((key) => key != null);\n }\n\n const key = this.getSelectedKey();\n return key == null ? [] : [key];\n }\n\n /**\n * @ignore\n */\n private getSelectedKey(): unknown {\n const item = this.selectedItems[0] ?? this.value;\n if (item == null) {\n return null;\n }\n\n return typeof item === 'object' ? this.getValue(item) : item;\n }\n\n /**\n * Refreshes the list by clearing the selection cache and reloading the data source.\n * @ignore\n */\n public refresh(clearSelection = true) {\n if (clearSelection) {\n this.clearSelectionCache();\n }\n this.listDataSource.refresh();\n }\n\n /**\n * Scrolls the viewport to the specified item index.\n * @param index The index of the item to scroll to.\n * @ignore\n */\n public scrollToIndex(index: number) {\n this.viewport.scrollToIndex(index);\n }\n /**\n * Sets focus to the selected list item (or the first item). Scrolls it into view first so\n * virtualized rows are mounted, and uses preventScroll so the browser does not jump away.\n */\n override focus(): void {\n if (!isPlatformBrowser(this.platformID)) {\n return;\n }\n\n this.revealSelected({ focus: true });\n }\n\n /**\n * Determines whether to show the empty template based on the presence of items and loading state.\n * @ignore\n */\n showEmptyTemplate = computed(() => this.isLoading() === false && this.emptyTemplate && this.hasItems === false);\n}\n","<div class=\"list-container\" cdkVirtualScrollingElement [class.ax-height-auto]=\"showEmptyTemplate()\">\n <ng-content select=\"ax-header\"></ng-content>\n <cdk-virtual-scroll-viewport\n [itemSize]=\"cdkItemSize()\"\n [style.--ax-comp-list-item-height]=\"itemHeightCss()\"\n (scrolledIndexChange)=\"_handleOnscrolledIndexChange($event)\"\n [class.ax-truncated-container]=\"isItemTruncated()\"\n >\n <ul>\n <!-- Item Template -->\n <ng-container *cdkVirtualFor=\"let item of listDataSource; let i = index; trackBy: trackByIdx\">\n @if (item !== null && item !== undefined) {\n <li\n [class.ax-state-selected]=\"isItemSelected(item)\"\n class=\"list-item\"\n [class.ax-state-disabled]=\"isItemDisabled(item)\"\n [attr.tabindex]=\"i\"\n (click)=\"_handleOnItemClick($event, item)\"\n [attr.data-id]=\"getValue(item)\"\n >\n <!-- Custom Item Template -->\n @if (itemTemplate) {\n <ng-container [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: { data: item } }\">\n </ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"defaultItemTpl\"></ng-container>\n }\n <!-- Default Item Template -->\n <ng-template #defaultItemTpl>\n @if (item !== null && item !== undefined) {\n <div class=\"ax-label-container\">\n @if (multiple && checkbox) {\n <input\n class=\"ax-checkbox\"\n type=\"checkbox\"\n [checked]=\"isItemSelected(item)\"\n [disabled]=\"isItemDisabled(item)\"\n tabindex=\"0\"\n />\n }\n\n <span\n [class.ax-checkbox-label]=\"multiple && checkbox\"\n [class.ax-truncated]=\"isItemTruncated()\"\n [axTooltip]=\"getDisplayText(item)\"\n [axTooltipDisabled]=\"!showItemTooltip()\"\n >\n {{ getDisplayText(item) | translate | async }}\n </span>\n </div>\n <!-- @if (isItemSelected(item)) {\n <i class=\"ax-icon ax-icon-check ax-selected-icon\"></i>\n } -->\n } @else {\n <ng-container [ngTemplateOutlet]=\"loadingTpl\"> </ng-container>\n }\n </ng-template>\n </li>\n } @else {\n <ng-container [ngTemplateOutlet]=\"loadingTpl\"> </ng-container>\n }\n </ng-container>\n </ul>\n </cdk-virtual-scroll-viewport>\n <ng-content select=\"ax-footer\"></ng-content>\n</div>\n\n<!-- Loading Template -->\n<ng-template #loadingTpl>\n <!-- Custom Loading Template -->\n @if (loadingTemplate) {\n <ng-container [ngTemplateOutlet]=\"loadingTemplate\"> </ng-container>\n } @else {\n <ng-container [ngTemplateOutlet]=\"defaultLoadingTpl\"> </ng-container>\n }\n <!-- Default Loading Template -->\n <ng-template #defaultLoadingTpl>\n <li>{{ '@acorex:common.status.loading' | translate | async }}</li>\n </ng-template>\n</ng-template>\n<!-- Empty Template -->\n@if (showEmptyTemplate()) {\n <div class=\"empty-container\">\n <ng-container [ngTemplateOutlet]=\"emptyTemplate\"></ng-container>\n </div>\n}\n","import { NgModule } from '@angular/core';\nimport { AXListComponent } from './list.component';\n\n@NgModule({\n imports: [AXListComponent],\n exports: [AXListComponent],\n})\nexport class AXListModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|